33 typedef std::map<Track::Id, std::tuple<Track::UriType, Track::MetaData>>
MetaDataCache;
38 std::shared_ptr<media::Engine::MetaDataExtractor>
extractor;
45 const dbus::Bus::Ptr& bus,
46 const dbus::Object::Ptr&
object,
47 const std::shared_ptr<media::Engine::MetaDataExtractor>& extractor,
48 const media::apparmor::ubuntu::RequestContextResolver::Ptr& request_context_resolver,
49 const media::apparmor::ubuntu::RequestAuthenticator::Ptr& request_authenticator)
50 :
media::TrackListSkeleton(bus, object, request_context_resolver, request_authenticator),
62 auto it = d->meta_data_cache.find(
id);
64 if (it == d->meta_data_cache.end())
67 return std::get<0>(it->second);
72 auto it = d->meta_data_cache.find(
id);
74 if (it == d->meta_data_cache.end())
75 return Track::MetaData{};
77 return std::get<1>(it->second);
85 std::cout << __PRETTY_FUNCTION__ << std::endl;
87 std::stringstream ss; ss << d->object->path().as_string() <<
"/" << d->track_counter++;
92 auto it = std::find(container.begin(), container.end(), position);
93 container.insert(it,
id);
100 if (d->meta_data_cache.count(
id) == 0)
103 d->meta_data_cache[id] = std::make_tuple(
105 d->extractor->meta_data_for_track_with_uri(uri));
106 }
catch (
const std::runtime_error &e) {
107 std::cerr <<
"Failed to retrieve metadata for track '" << uri <<
"' (" << e.what() <<
")" << std::endl;
111 std::get<0>(d->meta_data_cache[id]) = uri;
119 const bool toggle_player_state =
false;
120 go_to(
id, toggle_player_state);
132 container.erase(std::find(container.begin(), container.end(), id));
138 d->meta_data_cache.erase(
id);
147 std::cout << __PRETTY_FUNCTION__ << std::endl;
148 std::pair<const media::Track::Id, bool> p = std::make_pair(track, toggle_player_state);
156 std::cout << __PRETTY_FUNCTION__ << std::endl;
160 d->original_tracklist.assign(container.begin(), container.end());
161 std::random_shuffle(container.begin(), container.end());
174 std::cout << __PRETTY_FUNCTION__ << std::endl;
178 container.assign(d->original_tracklist.begin(), d->original_tracklist.end());
191 std::cout << __PRETTY_FUNCTION__ << std::endl;
197 d->track_counter = 0;