diff options
author | Arno <am@disconnect.de> | 2010-07-18 12:51:36 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-07-18 12:51:36 +0200 |
commit | 6d00ae1d57ed37a8d3d6d35181cb6b155dd7801c (patch) | |
tree | 04dee534c2a3e3f62f134c9434ab0a4718e759bf /filestreemodel.cpp | |
parent | 1bffedb2177e7b42112ccb5d0a98076eab0dc0a9 (diff) | |
download | SheMov-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.
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r-- | filestreemodel.cpp | 36 |
1 files changed, 36 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); |