diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp index 7465f0bfc7417ea921ad7abd217358d3f1c4ed71..91706b16fcbbd3a3ac056f7d328d727f3de35700 100644 --- a/src/GroovePlayer.cpp +++ b/src/GroovePlayer.cpp @@ -374,11 +374,14 @@ void GroovePlayerMgr::grooveEventLoop() voteTransaction.commit(); //Add vote to vote status - for(std::pair voteItem: currentVoteStatus) + for(auto voteItem = currentVoteStatus.begin(); voteItem != currentVoteStatus.end(); voteItem++) { - if(voteItem.first.trackFingerprint == event.tracksInvolved.front().trackFingerprint) + if(voteItem->first.trackFingerprint == event.tracksInvolved.front().trackFingerprint) { - ++(voteItem.second); + std::pair newItem = (*voteItem); + newItem.second = ++(newItem.second); + currentVoteStatus.insert(currentVoteStatus.erase(voteItem),newItem); + break; } } diff --git a/src/WebInterface.cpp b/src/WebInterface.cpp index ece8102b0fdc9ee5957fcc40b5bbb953df5ba978..e3ec2e8ac392af5f2f936165407b574ce80b47ba 100644 --- a/src/WebInterface.cpp +++ b/src/WebInterface.cpp @@ -112,5 +112,5 @@ void WebInterface::voteTracksUpdatedFromServer(std::list voteableTra std::string WebInterface::getNotificationJs(std::string notificationText) { - return std::string("function notifyMe(a,b){var c='")+notificationText+std::string("';if('Notification'in window)if('granted'===Notification.permission){new Notification(c)}else'denied'!==Notification.permission&&Notification.requestPermission(function(a){if('granted'===a){new Notification(c)}});else;}"); + return std::string("function notifyMe(a,b){var c=\"")+notificationText+std::string("\";if('Notification'in window)if('granted'===Notification.permission){new Notification(c)}else'denied'!==Notification.permission&&Notification.requestPermission(function(a){if('granted'===a){new Notification(c)}});else;}"); } diff --git a/src/ui/PlayerInterface.cpp b/src/ui/PlayerInterface.cpp index 2d5bd0d11d3c6f35157a37778dd01431d38ae199..725db8f4f7cb5866758a4af2d2c41a1f5d6a08bf 100644 --- a/src/ui/PlayerInterface.cpp +++ b/src/ui/PlayerInterface.cpp @@ -105,7 +105,9 @@ PlayerInterface::PlayerInterface(WebInterface* app) track3vote->setText(""); track3->addWidget(track3details,0,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignLeft); track3->addWidget(track3vote,0,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignRight); - //TODO: implement voting actions + track1vote->clicked().connect(this, &PlayerInterface::vote1clicked); + track2vote->clicked().connect(this, &PlayerInterface::vote2clicked); + track3vote->clicked().connect(this, &PlayerInterface::vote3clicked); interfaceLayout->addWidget(playControlWidget); interfaceLayout->addWidget(currentTrackProgress); @@ -155,6 +157,30 @@ void PlayerInterface::skipDenyClicked() } } +void PlayerInterface::vote1clicked() +{ + track1vote->setEnabled(false); + track2vote->setEnabled(false); + track3vote->setEnabled(false); + GroovePlayerMgr::getInstance()->lastInternalEvents.push_back(GroovePlayerMgr::PlayerEvent() = {GroovePlayerMgr::PlayerEventType::VOTE_CAST, app->currentUser, std::list{track1details->extractTrackFromDetails()}}); +} + +void PlayerInterface::vote2clicked() +{ + track1vote->setEnabled(false); + track2vote->setEnabled(false); + track3vote->setEnabled(false); + GroovePlayerMgr::getInstance()->lastInternalEvents.push_back(GroovePlayerMgr::PlayerEvent() = {GroovePlayerMgr::PlayerEventType::VOTE_CAST, app->currentUser, std::list{track2details->extractTrackFromDetails()}}); +} + +void PlayerInterface::vote3clicked() +{ + track1vote->setEnabled(false); + track2vote->setEnabled(false); + track3vote->setEnabled(false); + GroovePlayerMgr::getInstance()->lastInternalEvents.push_back(GroovePlayerMgr::PlayerEvent() = {GroovePlayerMgr::PlayerEventType::VOTE_CAST, app->currentUser, std::list{track3details->extractTrackFromDetails()}}); +} + void PlayerInterface::updateSkipRequestedFromServer() { skipRequest->setHidden(true); diff --git a/src/ui/PlayerInterface.h b/src/ui/PlayerInterface.h index 244fc441aaa967941d389a103a77fca1a29ea835..9ad54c73854a015b030edc18b52d479661e94a68 100644 --- a/src/ui/PlayerInterface.h +++ b/src/ui/PlayerInterface.h @@ -74,6 +74,9 @@ public: void playpauseUpdated(); void skipRequestClicked(); void skipDenyClicked(); + void vote1clicked(); + void vote2clicked(); + void vote3clicked(); void updateDetailsFromServer(AudioTrack track); void updateVoteableTracksFromServer(std::list tracks); void updateProgressFromTimer(); diff --git a/src/ui/TrackDetails.cpp b/src/ui/TrackDetails.cpp index 83e1db04f9295b87014838d09d8eaa3d65db75a7..5ff9ae0ae0344f7bc83ccb31b3d9331a1f73441a 100644 --- a/src/ui/TrackDetails.cpp +++ b/src/ui/TrackDetails.cpp @@ -59,6 +59,8 @@ void TrackDetails::updateWithTrackDetails(AudioTrack track) trackTitle->setText(track.trackName); trackArtist->setText(track.trackArtistName); trackAlbum->setText(track.trackAlbumName); + trackFingerprint = track.trackFingerprint; + trackGenre = track.trackGenre; //Set image to data from track obj. coverData = new Wt::WMemoryResource(track.coverMimeType); @@ -80,3 +82,14 @@ bool TrackDetails::trackMatches(AudioTrack track) } return false; } + +AudioTrack TrackDetails::extractTrackFromDetails() +{ + AudioTrack track; + track.trackName = trackTitle->text().toUTF8(); + track.trackArtistName = trackArtist->text().toUTF8(); + track.trackAlbumName = trackAlbum->text().toUTF8(); + track.trackGenre = trackGenre; + track.trackFingerprint = trackFingerprint; + return track; +} diff --git a/src/ui/TrackDetails.h b/src/ui/TrackDetails.h index bd79dcddbb324564a768a13db8af593074f14ef5..0e3e45a04a42d3a9c38d09ea4b1c24dcc27399ea 100644 --- a/src/ui/TrackDetails.h +++ b/src/ui/TrackDetails.h @@ -41,9 +41,13 @@ public: Wt::WText* trackArtist; Wt::WText* trackAlbum; + std::string trackFingerprint; + std::string trackGenre; + void updateWithTrackDetails(AudioTrack track); void changeBackgroundColor(Wt::WColor color); bool trackMatches(AudioTrack track); + AudioTrack extractTrackFromDetails(); }; #endif // TRACKDETAILS_H