Implement basics of voting ui. Change vote selection code to also inject cover before putting in list. Make sure player sends winning track to highlight on client.

This commit is contained in:
Kevin Whitaker
2017-02-18 22:23:09 -05:00
parent d12e2471da
commit cc8c4bcb7e
7 changed files with 126 additions and 16 deletions

View File

@@ -105,7 +105,9 @@ std::list<AudioTrack> GroovePlayerMgr::getNextVoteBatch(Wt::Dbo::Session* sessio
eligibleTrack = session->find<AudioTrack>().where("album = ?").limit(1).offset(rand() % trackAlbumCount).bind(currentTrack.trackAlbumName);
}
}
selectedTracks.push_back(*eligibleTrack);
AudioTrack selected = *eligibleTrack;
getPictureFromTrack(&selected);
selectedTracks.push_back(selected);
}
else
{
@@ -119,7 +121,9 @@ std::list<AudioTrack> GroovePlayerMgr::getNextVoteBatch(Wt::Dbo::Session* sessio
eligibleTrack = session->find<AudioTrack>().where("artist = ?").limit(1).offset(rand() % trackArtistCount).bind(currentTrack.trackArtistName);
}
}
selectedTracks.push_back(*eligibleTrack);
AudioTrack selected = *eligibleTrack;
getPictureFromTrack(&selected);
selectedTracks.push_back(selected);
}
//Determine second track
@@ -136,7 +140,9 @@ std::list<AudioTrack> GroovePlayerMgr::getNextVoteBatch(Wt::Dbo::Session* sessio
eligibleTrack = session->find<AudioTrack>().where("genre = ?").limit(1).offset(rand() % trackGenreCount).bind(currentTrack.trackGenre);
}
}
selectedTracks.push_back(*eligibleTrack);
AudioTrack selected = *eligibleTrack;
getPictureFromTrack(&selected);
selectedTracks.push_back(selected);
}
//Determine third track
@@ -144,19 +150,25 @@ std::list<AudioTrack> GroovePlayerMgr::getNextVoteBatch(Wt::Dbo::Session* sessio
if(requestQueue.size() > 0)
{
//There's a request. Pick one up front and put as third item.
selectedTracks.push_back(requestQueue.front());
AudioTrack selected = requestQueue.front();
getPictureFromTrack(&selected);
selectedTracks.push_back(selected);
}
else if(trackNotGenreCount > 0)
{
//Pick from other genre
Wt::Dbo::ptr<AudioTrack> eligibleTrack = session->find<AudioTrack>().where("genre != ?").limit(1).offset(rand() % trackNotGenreCount).bind(currentTrack.trackGenre);
selectedTracks.push_back(*eligibleTrack);
AudioTrack selected = *eligibleTrack;
getPictureFromTrack(&selected);
selectedTracks.push_back(selected);
}
else
{
//Pick randomly
Wt::Dbo::ptr<AudioTrack> eligibleTrack = session->find<AudioTrack>().limit(1).offset(rand() % trackCount);
selectedTracks.push_back(*eligibleTrack);
AudioTrack selected = *eligibleTrack;
getPictureFromTrack(&selected);
selectedTracks.push_back(selected);
}
transaction.commit();
Wt::log("info") << "Next set of tracks to vote picked: 1=>[" << (*selectedTracks.begin()).trackName << "] 2=>[" << (*std::next(selectedTracks.begin(),1)).trackName << "] 3=>[" << (*std::next(selectedTracks.begin(),2)).trackName << "]";
@@ -337,11 +349,11 @@ void GroovePlayerMgr::grooveEventLoop()
}
}
groove_playlist_insert(currentPlaylist,groove_file_open(winner.trackPath.c_str()),1.0,1.0,nullptr);
Wt::WServer::instance()->postAll([]() {
Wt::WServer::instance()->postAll([winner]() {
Wt::WApplication* app = Wt::WApplication::instance();
if(app != nullptr)
{
static_cast<WebInterface*>(app)->voteNextPollClosedFromServer();
static_cast<WebInterface*>(app)->voteNextPollClosedFromServer(winner);
}
}
);