summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filestreemodel.cpp36
-rw-r--r--filestreemodel.h3
-rw-r--r--filestreewidget.cpp20
-rw-r--r--filestreewidget.h1
-rw-r--r--shemov.cpp6
-rw-r--r--shemov.h1
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 &current, 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 &current, const QModelIndex &previous);
diff --git a/shemov.cpp b/shemov.cpp
index 1ac1db3..4d6302d 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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(){
diff --git a/shemov.h b/shemov.h
index 47f5b6e..7bf4913 100644
--- a/shemov.h
+++ b/shemov.h
@@ -117,6 +117,7 @@ class SheMov : public QMainWindow {
//TreeView FileWidget Actions
QAction *mMoveToBurnA;
QAction *mSetDvdNoA;
+ QAction *mDeleteFilesFromTreeA;
QActionGroup *mOpenWithGroupFS;
QActionGroup *mOpenWithGroupAV;