Redo events so that the event can have needed info alongside it. Make sure when computer is picking tracks if no votes that it doesn't pick a song that just played if possible. Fix mislabeled method. Implement untest admin skip and vote code.

This commit is contained in:
Kevin Whitaker
2017-02-08 23:05:13 -05:00
parent 39a780cb95
commit 35279008ee
4 changed files with 76 additions and 32 deletions

View File

@@ -54,9 +54,14 @@ public:
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};
enum PlayerEventType {NOTHING, GROOVE_NOWPLAYING, VOTING_ENDED, VOTE_CAST, PLAYING_PAUSED, PLAYING_RESUMED, SKIP_REQUESTED, SKIP_VOTE_CAST_AGAINST, SKIP_VOTING_ENDED, ADMIN_FORCE_SKIP};
struct PlayerEvent {
PlayerEventType eventType;
User userInvolved;
std::list<AudioTrack> tracksInvolved;
};
private:
GroovePlayerMgr (std::string dbFile);
~GroovePlayerMgr();
Wt::Dbo::backend::Sqlite3* sqliteConnection;
@@ -64,14 +69,14 @@ private:
bool continueEventLoop = true;
std::list<AudioTrack> requestQueue;
std::list<PlayerEvents> lastInternalEvents;
std::list<PlayerEvent> lastInternalEvents;
std::thread* grooveEvents;
void grooveEventLoop();
std::list<AudioTrack> getNextVoteBatch(Wt::Dbo::Session* session);
std::thread* grooveAudioScanner;
void grooveAudioScannerLoop();
PlayerEvents getNextPlayerEvent(Wt::Dbo::Session* session);
PlayerEvent getNextPlayerEvent(Wt::Dbo::Session* session);
void removeOrphanedTracks(Wt::Dbo::Session* session);
AudioTrack getCurrentTrackDB(Wt::Dbo::Session* session);