Make sure admin can remove tracks from the collection.
This commit is contained in:
@@ -662,6 +662,23 @@ void GroovePlayerMgr::removeOrphanedTracks(Wt::Dbo::Session* session)
|
|||||||
transaction.commit();
|
transaction.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GroovePlayerMgr::removeTrack(Wt::Dbo::Session* session, AudioTrack track)
|
||||||
|
{
|
||||||
|
Wt::Dbo::Transaction transaction(*session);
|
||||||
|
Wt::Dbo::ptr<AudioTrack> DBtrack = session->find<AudioTrack>().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)
|
void GroovePlayerMgr::getPictureFromTrack(AudioTrack* trackToFill)
|
||||||
{
|
{
|
||||||
if(trackToFill->trackPath != "")
|
if(trackToFill->trackPath != "")
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ public:
|
|||||||
Wt::Dbo::FixedSqlConnectionPool* connectionPool;
|
Wt::Dbo::FixedSqlConnectionPool* connectionPool;
|
||||||
|
|
||||||
void getPictureFromTrack(AudioTrack* trackToFill);
|
void getPictureFromTrack(AudioTrack* trackToFill);
|
||||||
|
void removeTrack(Wt::Dbo::Session* session, AudioTrack track);
|
||||||
private:
|
private:
|
||||||
GroovePlayerMgr (std::string dbFile);
|
GroovePlayerMgr (std::string dbFile);
|
||||||
~GroovePlayerMgr();
|
~GroovePlayerMgr();
|
||||||
|
|||||||
@@ -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>("user");
|
||||||
|
sqlSession.mapClass<AudioTrack>("tracks");
|
||||||
|
sqlSession.mapClass<UserAction>("actions");
|
||||||
|
GroovePlayerMgr::getInstance()->removeTrack(&sqlSession,track);
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RequestInterface::updateRequestButtonState()
|
void RequestInterface::updateRequestButtonState()
|
||||||
{
|
{
|
||||||
if(getRequestCountForUser(app->currentUser) < 3)
|
if(getRequestCountForUser(app->currentUser) < 3)
|
||||||
|
|||||||
@@ -41,25 +41,39 @@ public:
|
|||||||
TrackDetails* track;
|
TrackDetails* track;
|
||||||
Wt::WHBoxLayout* layout;
|
Wt::WHBoxLayout* layout;
|
||||||
Wt::WPushButton* voteBtn;
|
Wt::WPushButton* voteBtn;
|
||||||
|
Wt::WPushButton* removeBtn;
|
||||||
RequestInterface* parent;
|
RequestInterface* parent;
|
||||||
void requestClicked() {
|
void requestClicked() {
|
||||||
this->parent->trackRequestClicked(track->extractTrackFromDetails());
|
this->parent->trackRequestClicked(track->extractTrackFromDetails());
|
||||||
};
|
};
|
||||||
|
void removeClicked() {
|
||||||
|
this->parent->trackRemoveClicked(this, track->extractTrackFromDetails());
|
||||||
|
};
|
||||||
RequestItem(RequestInterface* parent, AudioTrack track) {
|
RequestItem(RequestInterface* parent, AudioTrack track) {
|
||||||
this->track = new TrackDetails();
|
this->track = new TrackDetails();
|
||||||
this->track->updateWithTrackDetails(track);
|
this->track->updateWithTrackDetails(track);
|
||||||
this->track->changeBackgroundColor(Wt::WColor("gainsboro"));
|
this->track->changeBackgroundColor(Wt::WColor("gainsboro"));
|
||||||
layout = new Wt::WHBoxLayout();
|
layout = new Wt::WHBoxLayout();
|
||||||
voteBtn = new Wt::WPushButton();
|
voteBtn = new Wt::WPushButton();
|
||||||
|
removeBtn = new Wt::WPushButton();
|
||||||
this->parent = parent;
|
this->parent = parent;
|
||||||
|
|
||||||
this->setLayout(layout);
|
this->setLayout(layout);
|
||||||
voteBtn->setTextFormat(Wt::XHTMLText);
|
voteBtn->setTextFormat(Wt::XHTMLText);
|
||||||
voteBtn->decorationStyle().font().setFamily(Wt::WFont::Default,"FontAwesome");
|
voteBtn->decorationStyle().font().setFamily(Wt::WFont::Default,"FontAwesome");
|
||||||
voteBtn->setText("");
|
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(this->track,1,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignLeft);
|
||||||
layout->addWidget(voteBtn,0,Wt::AlignmentFlag::AlignMiddle | Wt::AlignmentFlag::AlignRight);
|
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);
|
voteBtn->clicked().connect(this, &RequestItem::requestClicked);
|
||||||
|
removeBtn->clicked().connect(this, &RequestItem::removeClicked);
|
||||||
};
|
};
|
||||||
~RequestItem(){
|
~RequestItem(){
|
||||||
this->clear();
|
this->clear();
|
||||||
@@ -76,6 +90,7 @@ public:
|
|||||||
std::list<RequestItem*> foundItems;
|
std::list<RequestItem*> foundItems;
|
||||||
|
|
||||||
void trackRequestClicked(AudioTrack track);
|
void trackRequestClicked(AudioTrack track);
|
||||||
|
void trackRemoveClicked(RequestItem* item,AudioTrack track);
|
||||||
void searchClicked();
|
void searchClicked();
|
||||||
int getRequestCountForUser(User user);
|
int getRequestCountForUser(User user);
|
||||||
void updateRequestButtonState();
|
void updateRequestButtonState();
|
||||||
|
|||||||
Reference in New Issue
Block a user