summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-07-18 12:51:36 +0200
committerArno <am@disconnect.de>2010-07-18 12:51:36 +0200
commit6d00ae1d57ed37a8d3d6d35181cb6b155dd7801c (patch)
tree04dee534c2a3e3f62f134c9434ab0a4718e759bf
parent1bffedb2177e7b42112ccb5d0a98076eab0dc0a9 (diff)
downloadSheMov-6d00ae1d57ed37a8d3d6d35181cb6b155dd7801c.tar.gz
SheMov-6d00ae1d57ed37a8d3d6d35181cb6b155dd7801c.tar.bz2
SheMov-6d00ae1d57ed37a8d3d6d35181cb6b155dd7801c.zip
Implemented delete files from tree view
Files can now be delete from the files tree view. When doing so, the files will be deleted permanently and also removed from the database.
-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;