From 9b2783238e25816f7216d66d2feb396cab1954f9 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Fri, 3 Feb 2017 00:29:30 -0500 Subject: [PATCH] Add shutdown path for audio layer. Add basic event loop after setting up groove objects. Fix race condition bug by not setting path first. --- src/GroovePlayer.cpp | 24 +++++++++++++++++++++++- src/GroovePlayer.h | 6 ++++-- src/main.cpp | 1 + 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp index a53c4f5..3bdf79b 100644 --- a/src/GroovePlayer.cpp +++ b/src/GroovePlayer.cpp @@ -157,12 +157,34 @@ void GroovePlayerMgr::grooveEventLoop() struct GroovePlayer* player = groove_player_create(); if(!player) {return;} + groove_playlist_insert(playlist, groove_file_open(selectedTrack->trackPath.c_str()),1.0,1.0,nullptr); - //TODO + //Now start loop + groove_player_attach(player, playlist); + + while(getInstance()->continueEventLoop) + { + PlayerEvents event = getInstance()->getNextPlayerEvent(); + if(event == NOTHING) + { + continue; + } + //TODO + } + + groove_player_detach(player); + groove_player_destroy(player); + groove_playlist_destroy(playlist); +} + +void GroovePlayerMgr::shutdown() +{ + continueEventLoop = false; } GroovePlayerMgr::PlayerEvents GroovePlayerMgr::getNextPlayerEvent() { + return NOTHING; //TODO } diff --git a/src/GroovePlayer.h b/src/GroovePlayer.h index 57845e5..603da11 100644 --- a/src/GroovePlayer.h +++ b/src/GroovePlayer.h @@ -37,18 +37,20 @@ class GroovePlayerMgr public: static std::filesystem::path musicScanDir; static GroovePlayerMgr* getInstance() { + musicScanDir = std::filesystem::current_path()/"music"; static GroovePlayerMgr instance("music.db"); - musicScanDir = std::filesystem::path("music"); return &instance; }; - GroovePlayerMgr ( GroovePlayerMgr const&) = delete; + GroovePlayerMgr ( GroovePlayerMgr const&) = delete; void operator=( GroovePlayerMgr const&) = delete; + void shutdown(); 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}; GroovePlayerMgr (std::string dbFile); Wt::Dbo::backend::Sqlite3 sqliteConnection; Wt::Dbo::Session sqlSession; + bool continueEventLoop = true; std::list requestQueue; std::list lastInternalEvents; diff --git a/src/main.cpp b/src/main.cpp index 6ddfe8c..e3a2296 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,6 +19,7 @@ int main ( int argc, char** argv ) { GroovePlayerMgr::getInstance(); int sig = Wt::WServer::waitForShutdown(argv[0]); + GroovePlayerMgr::getInstance()->shutdown(); server.stop(); } return 0; -- GitLab