Move extension checking into add method. Change scan results to not have booleans and cause issues with switches. Implement moving/checking/adding uploaded track to library.

This commit is contained in:
Kevin Whitaker
2017-02-22 20:28:30 -05:00
parent 4233e5fb36
commit e1dbdf997e
4 changed files with 155 additions and 12 deletions

View File

@@ -18,8 +18,119 @@
*/
#include "UploadInterface.h"
#include "../db/UserAction.h"
#include <experimental/filesystem> //TODO:Change to non-gcc way when officially using c++17
namespace std {
namespace filesystem = experimental::filesystem;
}
UploadInterface::UploadInterface(WebInterface* app)
{
this->app = app;
mainLayout = new Wt::WVBoxLayout();
fileDrop = new Wt::WFileUpload();
logs = new Wt::WTextArea();
clearLogs = new Wt::WPushButton("clear");
logs->setReadOnly(true);
reInitUploadBox();
this->setLayout(mainLayout);
mainLayout->addWidget(clearLogs);
mainLayout->addWidget(logs);
}
void UploadInterface::reInitUploadBox()
{
if(fileDrop != nullptr) delete fileDrop;
fileDrop = new Wt::WFileUpload();
mainLayout->insertWidget(0,fileDrop);
fileDrop->setProgressBar(new Wt::WProgressBar());
fileDrop->setFilters("audio/mpeg audio/mp3");
fileDrop->setMultiple(false);
fileDrop->changed().connect(this, &UploadInterface::fileDropChanged);
fileDrop->uploaded().connect(this, &UploadInterface::fileDropUploaded);
fileDrop->fileTooLarge().connect(this, &UploadInterface::fileDropTooLarge);
}
void UploadInterface::fileDropChanged()
{
if(fileDrop->canUpload()) fileDrop->upload();
}
void UploadInterface::fileDropTooLarge()
{
logs->setText(logs->text()+fileDrop->clientFileName()+": File too large\n");
reInitUploadBox();
}
void UploadInterface::fileDropUploaded()
{
//Make sure filename doesn't exist already and then move to music folder.
if(GroovePlayerMgr::getInstance()->fileExistsInLibrary(fileDrop->clientFileName().toUTF8()))
{
logs->setText(logs->text()+fileDrop->clientFileName()+" file not uploaded, conflicts with existing file.\n");
reInitUploadBox();
return;
}
std::filesystem::path libFile = GroovePlayerMgr::getInstance()->musicScanDir/fileDrop->clientFileName().toUTF8();
std::filesystem::copy_file(std::filesystem::path(fileDrop->spoolFileName()),libFile);
//Add to library and start new upload box
Wt::Dbo::Session sqlSession;
sqlSession.setConnectionPool(*GroovePlayerMgr::getInstance()->connectionPool);
sqlSession.mapClass<User>("user");
sqlSession.mapClass<AudioTrack>("tracks");
sqlSession.mapClass<UserAction>("actions");
GroovePlayerMgr::ScanResults result = GroovePlayerMgr::getInstance()->addFileToTrackDBIfTagged(&sqlSession,libFile.string());
if(result != GroovePlayerMgr::ScanResults::ACCEPTED)
{
//Remove file
remove(libFile.c_str());
}
switch(result)
{
case GroovePlayerMgr::ScanResults::WRONG_FILETYPE:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is not an accepted filetype.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::MISSING_TITLE_TAG:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is missing title tag.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::MISSING_MULTIPLE_TAGS:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is missing multiple tags.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::MISSING_GENRE_TAG:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is missing genre tag.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::MISSING_COVERART_TAG:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is missing cover art.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::MISSING_ARTIST_TAG:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is missing artist tag.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::MISSING_ALBUM_TAG:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is missing album tag..\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::DUPLICATE_TRACK:
logs->setText(logs->text()+fileDrop->clientFileName()+" file is a duplicate.\n");
reInitUploadBox();
break;
case GroovePlayerMgr::ScanResults::ACCEPTED:
logs->setText(logs->text()+fileDrop->clientFileName()+" file uploaded\n");
reInitUploadBox();
break;
}
}
void UploadInterface::clearLogsClicked()
{
logs->setText("");
}