From 161e408a476ada54f28b9c6e305a7373886fd157 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Sun, 19 Feb 2017 10:31:52 -0500 Subject: [PATCH] Implement vote sending to backend. Have trackdetails spit out a msotly complete audiotrack for voting. Fix voting to actually modify list. Fix js code to not break on songs with apostrophes. --- src/GroovePlayer.cpp | 9 ++++++--- src/WebInterface.cpp | 2 +- src/ui/PlayerInterface.cpp | 28 +++++++++++++++++++++++++++- src/ui/PlayerInterface.h | 3 +++ src/ui/TrackDetails.cpp | 13 +++++++++++++ src/ui/TrackDetails.h | 4 ++++ 6 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp index 7465f0b..91706b1 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 ece8102..e3ec2e8 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 2d5bd0d..725db8f 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 244fc44..9ad54c7 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 83e1db0..5ff9ae0 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 bd79dcd..0e3e45a 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 -- GitLab