diff --git a/src/output/plugins/PipeWireOutputPlugin.cxx b/src/output/plugins/PipeWireOutputPlugin.cxx index 03ec88972..6be54f4c8 100644 --- a/src/output/plugins/PipeWireOutputPlugin.cxx +++ b/src/output/plugins/PipeWireOutputPlugin.cxx @@ -939,26 +939,25 @@ PipeWireOutput::SendTag(const Tag &tag) { CheckThrowError(); - struct spa_dict_item items[3]; - uint32_t n_items=0; + static constexpr struct { + TagType mpd; + const char *pipewire; + } tag_map[] = { + { TAG_ARTIST, PW_KEY_MEDIA_ARTIST }, + { TAG_TITLE, PW_KEY_MEDIA_TITLE }, + }; - const char *artist, *title; + struct spa_dict_item items[1 + std::size(tag_map)]; + uint32_t n_items=0; char *medianame = FormatTag(tag, "%artist% - %title%"); AtScopeExit(medianame) { free(medianame); }; items[n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_MEDIA_NAME, medianame); - artist = tag.GetValue(TAG_ARTIST); - title = tag.GetValue(TAG_TITLE); - - if (artist != nullptr) { - items[n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_MEDIA_ARTIST, artist); - } - - if (title != nullptr) { - items[n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_MEDIA_TITLE, title); - } + for (const auto &i : tag_map) + if (const char *value = tag.GetValue(i.mpd)) + items[n_items++] = SPA_DICT_ITEM_INIT(i.pipewire, value); struct spa_dict dict = SPA_DICT_INIT(items, n_items);