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 const auto it = d->meta_data_cache.find(
id);
64 if (it == d->meta_data_cache.end())
67 return std::get<0>(it->second);
72 const 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++;
90 std::cout <<
"Adding Track::Id: " <<
id << std::endl;
91 std::cout <<
"\tURI: " << uri << std::endl;
95 auto it = std::find(container.begin(), container.end(), position);
96 container.insert(it,
id);
97 std::cout <<
"container.size(): " << container.size() << std::endl;
104 if (d->meta_data_cache.count(
id) == 0)
109 d->meta_data_cache[id] = std::make_tuple(
111 d->extractor->meta_data_for_track_with_uri(uri));
112 }
catch (
const std::runtime_error &e) {
113 std::cerr <<
"Failed to retrieve metadata for track '" << uri <<
"' (" << e.what() <<
")" << std::endl;
116 d->meta_data_cache[id] = std::make_tuple(
122 std::get<0>(d->meta_data_cache[id]) = uri;
130 const bool toggle_player_state =
false;
131 go_to(
id, toggle_player_state);
135 if (
tracks().
get().size() == 1)
138 std::cout <<
"Signaling that we just added track id: " <<
id << std::endl;
141 std::cout <<
"Signaled that we just added track id: " <<
id << std::endl;
149 container.erase(std::find(container.begin(), container.end(), id));
157 d->meta_data_cache.erase(
id);
166 std::cout << __PRETTY_FUNCTION__ << std::endl;
167 std::pair<const media::Track::Id, bool> p = std::make_pair(track, toggle_player_state);
175 std::cout << __PRETTY_FUNCTION__ << std::endl;
177 if (
tracks().
get().empty())
183 d->original_tracklist.assign(container.begin(), container.end());
184 std::random_shuffle(container.begin(), container.end());
197 std::cout << __PRETTY_FUNCTION__ << std::endl;
199 if (
tracks().
get().empty() or d->original_tracklist.empty())
205 container.assign(d->original_tracklist.begin(), d->original_tracklist.end());
218 std::cout << __PRETTY_FUNCTION__ << std::endl;
227 d->track_counter = 0;