diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp index bddb0b17584bfc18ae61461ce1afcb51e71fc536..e9f65303ba8d2cb841293f196e7180ee866b2f1a 100644 --- a/src/GroovePlayer.cpp +++ b/src/GroovePlayer.cpp @@ -405,7 +405,7 @@ AudioTrack GroovePlayerMgr::getCurrentTrack(Wt::Dbo::Session* session) } -bool GroovePlayerMgr::addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::filesystem::path file) +GroovePlayerMgr::ScanResults GroovePlayerMgr::addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::filesystem::path file) { //Now check if tags exist and put into DB. struct GrooveFile* gfile = groove_file_open(file.c_str()); @@ -418,7 +418,11 @@ bool GroovePlayerMgr::addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::f //Only accept song with all metadata for DB. Wt::log("info") << "Audio track " << file << " did not have all required tags."; groove_file_close(gfile); - return false; + if(artist_tag == nullptr && album_tag != nullptr && name_tag != nullptr && genre_tag != nullptr) return ScanResults::MISSING_ARTIST_TAG; + if(artist_tag != nullptr && album_tag == nullptr && name_tag == nullptr && genre_tag == nullptr) return ScanResults::MISSING_ALBUM_TAG; + if(artist_tag != nullptr && album_tag != nullptr && name_tag == nullptr && genre_tag != nullptr) return ScanResults::MISSING_TITLE_TAG; + if(artist_tag != nullptr && album_tag != nullptr && name_tag != nullptr && genre_tag == nullptr) return ScanResults::MISSING_GENRE_TAG; + return ScanResults::MISSING_MULTIPLE_TAGS; } //Take fingerprint and compare to DB. @@ -444,7 +448,7 @@ bool GroovePlayerMgr::addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::f { //This track has a duplicate already. groove_file_close(gfile); - return false; + return ScanResults::DUPLICATE_TRACK; } //Add to DB. @@ -463,13 +467,13 @@ bool GroovePlayerMgr::addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::f { Wt::log("info") << "Audio track " << newTrack->trackPath << " did not have cover art in the file."; groove_file_close(gfile); - return false; + return ScanResults::MISSING_COVERART_TAG; } session->add(newTrack); transaction.commit(); groove_file_close(gfile); - return true; + return ScanResults::ACCEPTED; } void GroovePlayerMgr::removeOrphanedTracks(Wt::Dbo::Session* session) diff --git a/src/GroovePlayer.h b/src/GroovePlayer.h index f9eaef918b96af5bccda707525adcef8ab10438e..6ad8b1a527e302961cb3c0d9fd5d1a608b9347f8 100644 --- a/src/GroovePlayer.h +++ b/src/GroovePlayer.h @@ -50,6 +50,9 @@ public: std::list currentVoteBatch; std::list> currentVoteStatus; bool voteEndedButNotNextTrackYet = false; + + enum ScanResults {ACCEPTED = true, MISSING_ARTIST_TAG = false, MISSING_ALBUM_TAG = false, MISSING_TITLE_TAG = false, MISSING_GENRE_TAG = false, DUPLICATE_TRACK = false, MISSING_COVERART_TAG = false, MISSING_MULTIPLE_TAGS = false}; + ScanResults addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::filesystem::path file); private: enum PlayerEvents {NOTHING, GROOVE_NOWPLAYING, VOTING_ENDED, VOTE_CAST, PLAYING_PAUSED, PLAYING_RESUMED, SKIP_REQUESTED, SKIP_VOTE_CAST, SKIP_VOTING_ENDED, ADMIN_FORCE_SKIP}; @@ -68,7 +71,6 @@ private: std::thread* grooveAudioScanner; void grooveAudioScannerLoop(); PlayerEvents getNextPlayerEvent(Wt::Dbo::Session* session); - bool addFileToTrackDBIfTagged(Wt::Dbo::Session* session, std::filesystem::path file); void removeOrphanedTracks(Wt::Dbo::Session* session); AudioTrack getCurrentTrack(Wt::Dbo::Session* session);