From 166443f9addb8b83b3ab07f550c42e78c98f2010 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Mon, 6 Feb 2017 00:44:31 -0500 Subject: [PATCH] Test allowing oggs through the scanner. Clean up some transactions on first launch to prevent locking from a uncapped while loop. Also don't start the event loop without 3 tracks or voting can't happen. --- src/GroovePlayer.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp index d0cbb45..3919a70 100644 --- a/src/GroovePlayer.cpp +++ b/src/GroovePlayer.cpp @@ -140,13 +140,25 @@ void GroovePlayerMgr::grooveEventLoop() sqlSession.mapClass("user"); sqlSession.mapClass("tracks"); sqlSession.mapClass("actions"); + Wt::Dbo::Transaction transaction(sqlSession); + int trackCount = sqlSession.query("select count(fingerprint) from tracks"); + transaction.commit(); + - //Wait until at least one track is in DB. - if(sqlSession.query("select count(fingerprint) from tracks") < 1) + //Wait until at least 3 tracks are in DB to prevent nothing to vote on. + if(trackCount < 3) { - while(sqlSession.query("select count(fingerprint) from tracks") < 1){} + while(trackCount < 3) + { + Wt::Dbo::Transaction transaction(sqlSession); + trackCount = sqlSession.query("select count(fingerprint) from tracks"); + transaction.commit(); + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } } + + Wt::Dbo::Transaction bootTransaction(sqlSession); //Pick initial track to bootstrap. int tracksPlayedBefore = sqlSession.query("select count(fingerprint) from tracks as t join actions on (actions.action = 3 or actions.action = 2) and actions.track_id = t.id"); @@ -160,7 +172,8 @@ void GroovePlayerMgr::grooveEventLoop() int trackCount = sqlSession.query("select count(fingerprint) from tracks"); selectedTrack = *sqlSession.find().limit(1).offset(rand() % trackCount).resultValue(); } - transaction.commit(); + bootTransaction.commit(); + struct GroovePlaylist* playlist = groove_playlist_create(); currentPlaylist = playlist; struct GroovePlayer* player = groove_player_create(); @@ -477,7 +490,7 @@ void GroovePlayerMgr::grooveAudioScannerLoop() { extensionLowered.push_back(std::tolower(elem)); } - if(extensionLowered == ".mp3") //TODO:think about supporting more than mp3s. + if(extensionLowered == ".mp3" || extensionLowered == ".ogg") //TODO:think about supporting more than mp3s and oggs. { if(addFileToTrackDBIfTagged(&sqlSession, p.path())) { -- GitLab