Add shutdown path for audio layer. Add basic event loop after setting up groove objects. Fix race condition bug by not setting path first.

This commit is contained in:
Kevin Whitaker
2017-02-03 00:29:30 -05:00
parent 685d1828ad
commit 9b2783238e
3 changed files with 28 additions and 3 deletions

View File

@@ -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
}

View File

@@ -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<const AudioTrack*> requestQueue;
std::list<PlayerEvents> lastInternalEvents;

View File

@@ -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;