From e5e91f5f1fc65861f0fd04d805e30b72f27a7dd8 Mon Sep 17 00:00:00 2001
From: Arno
Date: Fri, 7 Feb 2014 13:17:48 +0100
Subject: Move to Burn is back!
Reimplement move to burn...
---
archivebrowser.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++
archivebrowser.h | 1 +
archivebrowsermodel.cpp | 42 ++++++++++++++++++++++++++++++++++++++++--
archivebrowsermodel.h | 5 +++++
shemov.cpp | 7 +++++++
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
#include
#include
+#include
+#include
+#include
#include
#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("This will do the following:
- Move %1 file(s) to %2
- Update the DVD no. for %1 files
Continue?
")).arg(sel.size()).arg(destDirS);
+ int retval = QMessageBox::question(this, tr("Question"), msg, QMessageBox::Yes | QMessageBox::No);
+ if(retval == QMessageBox::Yes){
+ QList 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 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 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 serPartData;
@@ -120,7 +157,7 @@ void ArchiveBrowserModel::populate(){
int quality = -1;
while(localFilesQ.next()){
QList 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 fileNos);
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
QList availableQualities() { return mAvailableQualities; }
+ QModelIndexList children(const QModelIndex &idx);
+
+ public slots:
+ void refresh();
private:
void populate();
diff --git a/shemov.cpp b/shemov.cpp
index b045120..44a37e2 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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);
}
diff --git a/shemov.h b/shemov.h
index 79bd03f..d745209 100644
--- a/shemov.h
+++ b/shemov.h
@@ -151,6 +151,7 @@ class SheMov : public QMainWindow {
//ArchiveBrowser
QAction *mArchiveBrowserViewMenuA;
+ QAction *mArchiveBrowserMoveToBurnA;
QActionGroup *mArchiveBrowserAG;
//ArchiveFiles actions
--
cgit v1.2.3-70-g09d2