diff options
-rw-r--r-- | filestreemodel.cpp | 36 | ||||
-rw-r--r-- | filestreemodel.h | 3 | ||||
-rw-r--r-- | filestreewidget.cpp | 20 | ||||
-rw-r--r-- | filestreewidget.h | 1 | ||||
-rw-r--r-- | shemov.cpp | 6 | ||||
-rw-r--r-- | shemov.h | 1 |
6 files changed, 67 insertions, 0 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp index 8dc52ba..3dc5dc1 100644 --- a/filestreemodel.cpp +++ b/filestreemodel.cpp @@ -9,6 +9,7 @@ #include <QLocale> #include <QIcon> #include <QFileInfo> +#include <QFile> #include "filestreemodel.h" #include "smtreeitem.h" @@ -24,6 +25,8 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo mInsertFileQuery->prepare("INSERT INTO files(iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality) VALUES(:seriespartid, :fname, :md5, :size, :dvd, :type, :fileno, :quality)"); mFilesQuery = new QSqlQuery(mDb); mFilesQuery->prepare("SELECT tfilename, cmd5sum FROM files WHERE iseriespart_id = :id"); + mDeleteFileQuery = new QSqlQuery(mDb); + mDeleteFileQuery->prepare("DELETE FROM files WHERE ifiles_id = :id"); } FilesTreeModel::~FilesTreeModel(){ @@ -31,6 +34,7 @@ FilesTreeModel::~FilesTreeModel(){ delete mUpdateQualityQuery; delete mInsertFileQuery; delete mFilesQuery; + delete mDeleteFileQuery; mDb = QSqlDatabase(); } @@ -231,6 +235,38 @@ bool FilesTreeModel::addFile(const QString &fullPath, int type, int quality, int return false; } +bool FilesTreeModel::deleteFile(const QModelIndex &file){ + QString fullPath = file.data(FullPathRole).toString(); + QFileInfo fi(fullPath); + if(!fi.exists()){ + return false; + } + QVariant fileId = file.data(FilesIdRole); + mDb.transaction(); + mDeleteFileQuery->bindValue(":id", fileId); + if(!mDeleteFileQuery->exec()){ + mDb.rollback(); + return false; + } + if(!QFile::remove(fullPath)){ + mDb.rollback(); + return false; + } + removeRows(file.row(), 1, file.parent()); + mDb.commit(); + return true; +} + +bool FilesTreeModel::deleteFiles(const QModelIndexList &files){ + foreach(QModelIndex i, files){ + bool retval = deleteFile(i); + if(!retval){ + return false; + } + } + return true; +} + void FilesTreeModel::populate(QSqlQuery &filesQuery){ SmTreeItem *root = new SmTreeItem(11); SmTreeItem *files = new SmTreeItem(11, root); diff --git a/filestreemodel.h b/filestreemodel.h index 8da3d6f..feba751 100644 --- a/filestreemodel.h +++ b/filestreemodel.h @@ -36,6 +36,8 @@ class FilesTreeModel : public SmTreeModel { //file manipulation bool addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd = -1); + bool deleteFile(const QModelIndex &file); + bool deleteFiles(const QModelIndexList &files); private: void populate(QSqlQuery &filesQuery); @@ -44,6 +46,7 @@ class FilesTreeModel : public SmTreeModel { QSqlQuery *mUpdateQualityQuery; QSqlQuery *mInsertFileQuery; QSqlQuery *mFilesQuery; + QSqlQuery *mDeleteFileQuery; }; #endif // FILESTREEMODEL_H diff --git a/filestreewidget.cpp b/filestreewidget.cpp index b25804f..89de946 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -110,6 +110,26 @@ void FilesTreeWidget::setDvdNo(){ } } +void FilesTreeWidget::removeFiles(){ + QModelIndexList selected = mView->selectionModel()->selectedRows(); + if(selected.isEmpty()){ + return; + } + QString message = QString(tr("<p>Really delete these file(s):</p><ul>")); + foreach(QModelIndex i, selected){ + message.append(QString(tr("<li>%1</li>")).arg(i.data(FilesTreeModel::FileNameRole).toString())); + } + message.append("</ul>"); + int retval = QMessageBox::critical(this, tr("Question"), message, QMessageBox::Yes | QMessageBox::No); + if(retval == QMessageBox::Yes){ + QModelIndexList realSelected; + foreach(QModelIndex i, selected){ + realSelected << mProxy->mapToSource(i); + } + mModel->deleteFiles(realSelected); + } +} + void FilesTreeWidget::fileSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous){ Q_UNUSED(previous); int seriesPartId = current.data(FilesTreeModel::SeriesPartIdRole).toInt(); diff --git a/filestreewidget.h b/filestreewidget.h index b6ce951..aafbe97 100644 --- a/filestreewidget.h +++ b/filestreewidget.h @@ -31,6 +31,7 @@ class FilesTreeWidget : public QWidget { public slots: void moveToBurn(); void setDvdNo(); + void removeFiles(); private slots: void fileSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous); @@ -420,6 +420,8 @@ void SheMov::createActions(){ connect(mMoveToBurnA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(moveToBurn())); mSetDvdNoA = new QAction(tr("Set dvd number"), this); connect(mSetDvdNoA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(setDvdNo())); + mDeleteFilesFromTreeA = new QAction(tr("Delete file(s)..."), this); + connect(mDeleteFilesFromTreeA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(removeFiles())); // misc mOpenWithMapperFS = new QSignalMapper(this); @@ -570,6 +572,10 @@ void SheMov::createMenus(){ sep10->setSeparator(true); mATree->filesWidget()->filesTree()->addAction(sep10); mATree->filesWidget()->filesTree()->addAction(mSetDvdNoA); + QAction *sep11 = new QAction(this); + sep11->setSeparator(true); + mATree->filesWidget()->filesTree()->addAction(sep11); + mATree->filesWidget()->filesTree()->addAction(mDeleteFilesFromTreeA); } void SheMov::createOpenWithMenuFS(){ @@ -117,6 +117,7 @@ class SheMov : public QMainWindow { //TreeView FileWidget Actions QAction *mMoveToBurnA; QAction *mSetDvdNoA; + QAction *mDeleteFilesFromTreeA; QActionGroup *mOpenWithGroupFS; QActionGroup *mOpenWithGroupAV; |