From e5b86cc4dfe6d0c4b78109a5a6f34c3cd9051dd7 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Wed, 22 Feb 2017 17:45:21 -0500 Subject: [PATCH] Make sure admin can remove tracks from the collection. --- src/GroovePlayer.cpp | 17 +++++++++++++++++ src/GroovePlayer.h | 1 + src/ui/RequestInterface.cpp | 14 ++++++++++++++ src/ui/RequestInterface.h | 15 +++++++++++++++ 4 files changed, 47 insertions(+) diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp index 796fd0c..6e31aaa 100644 --- a/src/GroovePlayer.cpp +++ b/src/GroovePlayer.cpp @@ -662,6 +662,23 @@ void GroovePlayerMgr::removeOrphanedTracks(Wt::Dbo::Session* session) transaction.commit(); } +void GroovePlayerMgr::removeTrack(Wt::Dbo::Session* session, AudioTrack track) +{ + Wt::Dbo::Transaction transaction(*session); + Wt::Dbo::ptr DBtrack = session->find().where("fingerprint = ?").bind(track.trackFingerprint); + + Wt::log("info") << (*DBtrack).trackPath + " being removed."; + + if(std::filesystem::exists(std::filesystem::path((*DBtrack).trackPath))) + { + remove((*DBtrack).trackPath.c_str()); + } + DBtrack.remove(); + + + transaction.commit(); +} + void GroovePlayerMgr::getPictureFromTrack(AudioTrack* trackToFill) { if(trackToFill->trackPath != "") diff --git a/src/GroovePlayer.h b/src/GroovePlayer.h index efe5e06..bbc047d 100644 --- a/src/GroovePlayer.h +++ b/src/GroovePlayer.h @@ -71,6 +71,7 @@ public: Wt::Dbo::FixedSqlConnectionPool* connectionPool; void getPictureFromTrack(AudioTrack* trackToFill); + void removeTrack(Wt::Dbo::Session* session, AudioTrack track); private: GroovePlayerMgr (std::string dbFile); ~GroovePlayerMgr(); diff --git a/src/ui/RequestInterface.cpp b/src/ui/RequestInterface.cpp index e48fa65..c85fbdb 100644 --- a/src/ui/RequestInterface.cpp +++ b/src/ui/RequestInterface.cpp @@ -62,6 +62,20 @@ void RequestInterface::trackRequestClicked(AudioTrack track) } } +void RequestInterface::trackRemoveClicked(RequestItem* item, AudioTrack track) +{ + if(GroovePlayerMgr::getInstance()->currentTrack.trackFingerprint != track.trackFingerprint) + { + Wt::Dbo::Session sqlSession; + sqlSession.setConnectionPool(*GroovePlayerMgr::getInstance()->connectionPool); + sqlSession.mapClass("user"); + sqlSession.mapClass("tracks"); + sqlSession.mapClass("actions"); + GroovePlayerMgr::getInstance()->removeTrack(&sqlSession,track); + delete item; + } +} + void RequestInterface::updateRequestButtonState() { if(getRequestCountForUser(app->currentUser) < 3) diff --git a/src/ui/RequestInterface.h b/src/ui/RequestInterface.h index e55e769..9bee7be 100644 --- a/src/ui/RequestInterface.h +++ b/src/ui/RequestInterface.h @@ -41,25 +41,39 @@ public: TrackDetails* track; Wt::WHBoxLayout* layout; Wt::WPushButton* voteBtn; + Wt::WPushButton* removeBtn; RequestInterface* parent; void requestClicked() { this->parent->trackRequestClicked(track->extractTrackFromDetails()); }; + void removeClicked() { + this->parent->trackRemoveClicked(this, track->extractTrackFromDetails()); + }; RequestItem(RequestInterface* parent, AudioTrack track) { this->track = new TrackDetails(); this->track->updateWithTrackDetails(track); this->track->changeBackgroundColor(Wt::WColor("gainsboro")); layout = new Wt::WHBoxLayout(); voteBtn = new Wt::WPushButton(); + removeBtn = new Wt::WPushButton(); this->parent = parent; this->setLayout(layout); voteBtn->setTextFormat(Wt::XHTMLText); voteBtn->decorationStyle().font().setFamily(Wt::WFont::Default,"FontAwesome"); voteBtn->setText(""); + removeBtn->setTextFormat(Wt::XHTMLText); + removeBtn->decorationStyle().font().setFamily(Wt::WFont::Default,"FontAwesome"); + removeBtn->setText(""); + if(!parent->app->currentUser.isAdmin) + { + removeBtn->setHidden(true); + } layout->addWidget(this->track,1,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignLeft); layout->addWidget(voteBtn,0,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignRight); + layout->addWidget(removeBtn,0,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignRight); voteBtn->clicked().connect(this, &RequestItem::requestClicked); + removeBtn->clicked().connect(this, &RequestItem::removeClicked); }; ~RequestItem(){ this->clear(); @@ -76,6 +90,7 @@ public: std::list foundItems; void trackRequestClicked(AudioTrack track); + void trackRemoveClicked(RequestItem* item,AudioTrack track); void searchClicked(); int getRequestCountForUser(User user); void updateRequestButtonState(); -- GitLab