26 namespace dbus = core::dbus;
27 namespace media = core::ubuntu::media;
31 typedef std::map<Track::Id, std::tuple<Track::UriType, Track::MetaData>>
MetaDataCache;
33 dbus::types::ObjectPath
path;
35 std::shared_ptr<media::Engine::MetaDataExtractor>
extractor;
39 const dbus::types::ObjectPath& op,
40 const std::shared_ptr<media::Engine::MetaDataExtractor>& extractor)
41 : media::TrackListSkeleton(op),
53 auto it = d->meta_data_cache.find(
id);
55 if (it == d->meta_data_cache.end())
58 return std::get<0>(it->second);
63 auto it = d->meta_data_cache.find(
id);
65 if (it == d->meta_data_cache.end())
66 return Track::MetaData{};
68 return std::get<1>(it->second);
76 static size_t track_counter = 0;
78 std::stringstream ss; ss << d->path.as_string() <<
"/" << track_counter++;
83 auto it = std::find(container.begin(), container.end(), position);
84 container.insert(it,
id);
90 if (d->meta_data_cache.count(
id) == 0)
92 d->meta_data_cache[id] = std::make_tuple(
94 d->extractor->meta_data_for_track_with_uri(uri));
97 std::get<0>(d->meta_data_cache[id]) = uri;
111 container.erase(std::find(container.begin(), container.end(), id));
117 d->meta_data_cache.erase(
id);