fix(mpris): sanitize metadata to prevent multiline UI expansion

This commit is contained in:
Ibrahim Issa
2026-07-28 13:48:40 +02:00
parent 30610d3b68
commit f9e2b1dea7
+12 -6
View File
@@ -543,31 +543,37 @@ auto Mpris::getPlayerInfo() -> std::optional<PlayerInfo> {
.length = std::nullopt, .length = std::nullopt,
}; };
auto sanitize = [ ]( char* raw_str ) {
std::string s( raw_str );
std::replace( s.begin(), s.end(), '\n', ' ' );
std::replace( s.begin(), s.end(), '\r', ' ' );
return s;
};
if(auto* artist_ = playerctl_player_get_artist( last_active_player_, &error )) { if(auto* artist_ = playerctl_player_get_artist( last_active_player_, &error )) {
spdlog::debug( "mpris[{}]: artist = {}", info.name, artist_ ); spdlog::debug( "mpris[{}]: artist = {}", info.name, artist_ );
info.artist = artist_; info.artist = sanitize( artist_ );
g_free( artist_ ); g_free( artist_ );
} }
if(error) goto errorexit; if(error) goto errorexit;
if (auto* album_artist_ = if(auto* album_artist_ = playerctl_player_print_metadata_prop( last_active_player_, "xesam:albumArtist", &error )) {
playerctl_player_print_metadata_prop(last_active_player_, "xesam:albumArtist", &error)) {
spdlog::debug( "mpris[{}]: albumArtist = {}", info.name, album_artist_ ); spdlog::debug( "mpris[{}]: albumArtist = {}", info.name, album_artist_ );
info.album_artist = album_artist_; info.album_artist = sanitize( album_artist_ );
g_free( album_artist_ ); g_free( album_artist_ );
} }
if(error) goto errorexit; if(error) goto errorexit;
if(auto* album_ = playerctl_player_get_album( last_active_player_, &error )) { if(auto* album_ = playerctl_player_get_album( last_active_player_, &error )) {
spdlog::debug( "mpris[{}]: album = {}", info.name, album_ ); spdlog::debug( "mpris[{}]: album = {}", info.name, album_ );
info.album = album_; info.album = sanitize( album_ );
g_free( album_ ); g_free( album_ );
} }
if(error) goto errorexit; if(error) goto errorexit;
if(auto* title_ = playerctl_player_get_title( last_active_player_, &error )) { if(auto* title_ = playerctl_player_get_title( last_active_player_, &error )) {
spdlog::debug( "mpris[{}]: title = {}", info.name, title_ ); spdlog::debug( "mpris[{}]: title = {}", info.name, title_ );
info.title = title_; info.title = sanitize( title_ );
g_free( title_ ); g_free( title_ );
} }
if(error) goto errorexit; if(error) goto errorexit;