diff options
author | Arno <am@disconnect.de> | 2014-02-07 13:17:48 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2014-02-07 13:17:48 +0100 |
commit | e5e91f5f1fc65861f0fd04d805e30b72f27a7dd8 (patch) | |
tree | a582e0be51579777873eff05b9803c3ae0821693 | |
parent | f41e3577a9fc25b37e33047afc8852017d612f5e (diff) | |
download | SheMov-e5e91f5f1fc65861f0fd04d805e30b72f27a7dd8.tar.gz SheMov-e5e91f5f1fc65861f0fd04d805e30b72f27a7dd8.tar.bz2 SheMov-e5e91f5f1fc65861f0fd04d805e30b72f27a7dd8.zip |
Move to Burn is back!
Reimplement move to burn...
-rw-r--r-- | archivebrowser.cpp | 44 | ||||
-rw-r--r-- | archivebrowser.h | 1 | ||||
-rw-r--r-- | archivebrowsermodel.cpp | 42 | ||||
-rw-r--r-- | archivebrowsermodel.h | 5 | ||||
-rw-r--r-- | shemov.cpp | 7 | ||||
-rw-r--r-- | shemov.h | 1 |
6 files changed, 98 insertions, 2 deletions
diff --git a/archivebrowser.cpp b/archivebrowser.cpp index 7587c93..317c2d8 100644 --- a/archivebrowser.cpp +++ b/archivebrowser.cpp @@ -11,6 +11,9 @@ #include <QComboBox> #include <QCheckBox> #include <QSettings> +#include <QMessageBox> +#include <QDir> +#include <QFileInfo> #include <QSortFilterProxyModel> #include "archivebrowser.h" @@ -91,6 +94,47 @@ void ArchiveBrowser::writeSettings(){ s.setValue("ui/browserquality", mQualityFilter->currentText()); } +void ArchiveBrowser::moveToBurn() { + QModelIndexList sel = mTree->selectionModel()->selectedRows(); + if(sel.isEmpty()){ + return; + } + QSettings s; + QString destDirS = s.value("paths/burn").toString(); + QDir burnDir(destDirS); + if(!burnDir.exists()){ + QString msg = QString(tr("Destination directory %1 does not exist!\nBailing out!")).arg(destDirS); + QMessageBox::critical(this, tr("Error"), msg); + return; + } + QString msg = QString(tr("<p>This will do the following:</p><p><ul><li>Move %1 file(s) to %2</li><li>Update the DVD no. for %1 files</li></ul></p><p>Continue?</p>")).arg(sel.size()).arg(destDirS); + int retval = QMessageBox::question(this, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No); + if(retval == QMessageBox::Yes){ + QList<int> filesToUpdate; + foreach(QModelIndex idx, sel){ + QString dirName = idx.data(ArchiveBrowserModel::NameRole).toString(); + dirName.replace(' ', '.'); + burnDir.mkdir(dirName); + QString burnDirS = QString("%1/%2").arg(destDirS).arg(dirName); + QModelIndex real = mProxy->mapToSource(idx); + QModelIndexList children = mModel->children(real); + foreach(QModelIndex child, children){ + QFileInfo current(child.data(ArchiveBrowserModel::FullPathRole).toString()); + int type = child.data(ArchiveBrowserModel::FileTypeRole).toInt(); + QString destination = QString("%1/%2").arg(burnDirS).arg(current.fileName()); + if(type == 1){ //movie + filesToUpdate << child.data(ArchiveBrowserModel::GenericIdRole).toInt(); + }else{ + QFile::copy(current.absoluteFilePath(), destination); + } + } + + } + mModel->updateDVDNo(filesToUpdate); + mModel->refresh(); + } +} + void ArchiveBrowser::setupQualityFilter(){ mQualityFilter->clear(); QList<int> qualities = mModel->availableQualities(); diff --git a/archivebrowser.h b/archivebrowser.h index 7179c78..c7a59a9 100644 --- a/archivebrowser.h +++ b/archivebrowser.h @@ -31,6 +31,7 @@ class ArchiveBrowser : public QWidget { void browserSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void readConfig(); void writeSettings(); + void moveToBurn(); private slots: void setupQualityFilter(); diff --git a/archivebrowsermodel.cpp b/archivebrowsermodel.cpp index 444a70b..b9fec74 100644 --- a/archivebrowsermodel.cpp +++ b/archivebrowsermodel.cpp @@ -88,6 +88,43 @@ bool ArchiveBrowserModel::setData(const QModelIndex &index, const QVariant &valu return SmTreeModel::setData(index, value, role); } +void ArchiveBrowserModel::updateDVDNo(const QList<int> fileNos) { + if(fileNos.isEmpty()){ + return; + } + int maxdvd = 0; + QSqlQuery maxDvdQ = QSqlQuery("SELECT max(idvd) FROM files", mDb); + maxDvdQ.exec(); + while(maxDvdQ.next()){ + maxdvd = maxDvdQ.value(0).toInt(); + } + ++maxdvd; + QSqlQuery updateFile(mDb); + updateFile.prepare("UPDATE files SET idvd = :dvd WHERE ifiles_id = :id"); + foreach(int i, fileNos){ + updateFile.bindValue(":id", i); + updateFile.bindValue(":dvd", maxdvd); + updateFile.exec(); + } +} + +QModelIndexList ArchiveBrowserModel::children(const QModelIndex &idx){ + if(!idx.isValid()){ + return QModelIndexList(); + } + QModelIndexList retval; + SmTreeItem *item = itemAt(idx); + for(int i = 0; i < item->childCount(); ++i){ + QModelIndex retIdx = createIndex(i, 0, item->child(i)); + retval << retIdx; + } + return retval; +} + +void ArchiveBrowserModel::refresh() { + populate(); +} + Qt::ItemFlags ArchiveBrowserModel::flags(const QModelIndex &index) const{ SmTreeItem *item = itemAt(index); int nt = item->data(NodeType).toInt(); @@ -101,7 +138,7 @@ void ArchiveBrowserModel::populate(){ SmTreeItem *rootItem = new SmTreeItem(mNumFields); mAvailableQualities.clear(); QSqlQuery localFilesQ(mDb); - localFilesQ.prepare("SELECT tfilename, bisize, sifiletype, siquality, cmd5sum FROM files WHERE iseriespart_id = :sid ORDER BY sifiletype"); + localFilesQ.prepare("SELECT tfilename, bisize, sifiletype, siquality, ifiles_id, cmd5sum FROM files WHERE iseriespart_id = :sid ORDER BY sifiletype"); QSqlQuery localQ = QSqlQuery("SELECT DISTINCT(series.iseries_id), tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle, seriesparts.iseriesparts_id FROM series LEFT JOIN seriesparts ON series.iseries_id = seriesparts.iseries_id LEFT JOIN files ON seriesparts.iseriesparts_id = files.iseriespart_id WHERE files.sifiletype = 1 AND files.idvd < 1 AND seriesparts.bfavorite = false ORDER BY tseries_name ASC", mDb); while(localQ.next()){ QList<QVariant> serPartData; @@ -120,7 +157,7 @@ void ArchiveBrowserModel::populate(){ int quality = -1; while(localFilesQ.next()){ QList<QVariant> fileData; - fileData << localFilesQ.value(0) << QVariant() << FileNode << localFilesQ.value(1) << localFilesQ.value(3) << localFilesQ.value(2) << Helper::createArchivePath(localFilesQ.value(0).toString(), localFilesQ.value(4).toString()) << false; + fileData << localFilesQ.value(0) << localFilesQ.value(4) << FileNode << localFilesQ.value(1) << localFilesQ.value(3) << localFilesQ.value(2) << Helper::createArchivePath(localFilesQ.value(0).toString(), localFilesQ.value(5).toString()) << false; totalSize += localFilesQ.value(1).toDouble(); if(localFilesQ.value(2) == 1){ //this is a movie file, no need for another enum int q = localFilesQ.value(3).toInt(); @@ -161,6 +198,7 @@ void ArchiveBrowserModelProxy::setBytesRemaining(qint64 bytes){ invalidateFilter(); } + bool ArchiveBrowserModelProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { if(mQuality == -1 && !mSizeFilter){ return true; diff --git a/archivebrowsermodel.h b/archivebrowsermodel.h index 46a8102..ff11c2a 100644 --- a/archivebrowsermodel.h +++ b/archivebrowsermodel.h @@ -23,8 +23,13 @@ class ArchiveBrowserModel : public SmTreeModel { explicit ArchiveBrowserModel(const QStringList &headers, QObject *parent = 0); virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role); + void updateDVDNo(const QList<int> fileNos); virtual Qt::ItemFlags flags(const QModelIndex &index) const; QList<int> availableQualities() { return mAvailableQualities; } + QModelIndexList children(const QModelIndex &idx); + + public slots: + void refresh(); private: void populate(); @@ -653,6 +653,10 @@ void SheMov::createActions(){ mArchiveFilesPreviewA = new QAction(QIcon(":/male_chastity_belt.png"), tr("Preview..."), this); connect(mArchiveFilesPreviewA, SIGNAL(triggered()), c, SLOT(showPreview())); + //ArchiveBrowser Actions + mArchiveBrowserMoveToBurnA = new QAction(QIcon(":/shackles.png"), tr("Move to burn..."), this); + connect(mArchiveBrowserMoveToBurnA, SIGNAL(triggered()), mArchiveBrowser, SLOT(moveToBurn())); + // db analyzer dialogs // analyze actors mAnalyzeActorsA = new QAction(tr("Actors..."), this); @@ -852,6 +856,9 @@ void SheMov::createMenus(){ QMenu *archiveFilesM = new QMenu(tr("Files"), this); archiveFilesM->addActions(c->archiveFiles()->actions()); + // ArchiveBrowser context menu + mArchiveBrowser->archiveTree()->addAction(mArchiveBrowserMoveToBurnA); + mArchiveEditMenu->addMenu(archiveTreeM); mArchiveEditMenu->addMenu(archiveFilesM); } @@ -151,6 +151,7 @@ class SheMov : public QMainWindow { //ArchiveBrowser QAction *mArchiveBrowserViewMenuA; + QAction *mArchiveBrowserMoveToBurnA; QActionGroup *mArchiveBrowserAG; //ArchiveFiles actions |