void LocalCollection::handleLoadFinished () { auto watcher = dynamic_cast<QFutureWatcher<LocalCollectionStorage::LoadResult>*> (sender ()); watcher->deleteLater (); const auto& result = watcher->result (); Storage_->Load (result); HandleNewArtists (result.Artists_); IsReady_ = true; emit collectionReady (); QTimer::singleShot (5000, this, SLOT (rescanOnLoad ())); }
void LocalCollection::handleScanFinished () { auto future = Watcher_->future (); QList<MediaInfo> newInfos, existingInfos; for (const auto& info : future) { const auto& path = info.LocalPath_; if (path.isEmpty ()) continue; if (PresentPaths_.contains (path)) existingInfos << info; else { newInfos << info; PresentPaths_ += path; } } emit scanFinished (); auto newArts = Storage_->AddToCollection (newInfos); HandleNewArtists (newArts); if (!NewPathsQueue_.isEmpty ()) InitiateScan (NewPathsQueue_.takeFirst ()); else if (UpdateNewTracks_) { const auto& artistsMsg = tr ("%n new artist(s)", 0, UpdateNewArtists_); const auto& albumsMsg = tr ("%n new album(s)", 0, UpdateNewAlbums_); const auto& tracksMsg = tr ("%n new track(s)", 0, UpdateNewTracks_); const auto& msg = tr ("Local collection updated: %1, %2, %3.") .arg (artistsMsg) .arg (albumsMsg) .arg (tracksMsg); Core::Instance ().SendEntity (Util::MakeNotification ("LMP", msg, PInfo_)); UpdateNewArtists_ = UpdateNewAlbums_ = UpdateNewTracks_ = 0; } HandleExistingInfos (existingInfos); }
void LocalCollection::HandleExistingInfos (const QList<MediaInfo>& infos) { Q_FOREACH (const auto& info, infos) { const auto& path = info.LocalPath_; const auto trackIdx = FindTrack (path); const auto trackAlbum = GetTrackAlbum (trackIdx); if (!trackAlbum) { qWarning () << Q_FUNC_INFO << "no album for track" << path; continue; } const auto pos = std::find_if (trackAlbum->Tracks_.begin (), trackAlbum->Tracks_.end (), [trackIdx] (decltype (trackAlbum->Tracks_.front ()) track) { return track.ID_ == trackIdx; }); const auto& track = pos != trackAlbum->Tracks_.end () ? *pos : Collection::Track (); const auto& artist = GetArtist (AlbumID2ArtistID_ [trackAlbum->ID_]); if (artist.Name_ == info.Artist_ && trackAlbum->Name_ == info.Album_ && trackAlbum->Year_ == info.Year_ && track.Number_ == info.TrackNumber_ && track.Name_ == info.Title_ && track.Genres_ == info.Genres_) continue; auto stats = GetTrackStats (path); RemoveTrack (path); const auto& newArts = Storage_->AddToCollection ({ info }); HandleNewArtists (newArts); const auto newTrackIdx = FindTrack (path); stats.TrackID_ = newTrackIdx; Storage_->SetTrackStats (stats); } }