/* * Copyright (C) 2017 Kevin Whitaker * * 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 //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); } UploadInterface::~UploadInterface() { delete clearLogs; delete logs; delete fileDrop; delete mainLayout; } 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"); sqlSession.mapClass("tracks"); sqlSession.mapClass("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(""); }