137 lines
5.2 KiB
C++
137 lines
5.2 KiB
C++
/*
|
|
* Copyright (C) 2017 Kevin Whitaker <eyecreate@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
*/
|
|
|
|
#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("");
|
|
}
|
|
|