diff options
author | Arno <am@disconnect.de> | 2015-03-21 07:10:32 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2015-03-21 07:10:32 +0100 |
commit | e6b7e5e0fccef756398982bd51137bb433df7f4a (patch) | |
tree | 7ed19e9f60d30269124ef54ec47fc9e68718d6e1 /filesystemwidget.cpp | |
parent | d4708602ac2ec4f23161ae154eb86e3f6a2740fb (diff) | |
download | SheMov-e6b7e5e0fccef756398982bd51137bb433df7f4a.tar.gz SheMov-e6b7e5e0fccef756398982bd51137bb433df7f4a.tar.bz2 SheMov-e6b7e5e0fccef756398982bd51137bb433df7f4a.zip |
Fixed and beefed up "Move to archive"
It crashed when used on directories, because naturally md5sum was empty.
So recurse through directories, collect files and check if we have a DB-
Entry. If so, move the files back to archive. If not, skip them.
Diffstat (limited to 'filesystemwidget.cpp')
-rw-r--r-- | filesystemwidget.cpp | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 2dd8076..eadbac8 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -33,6 +33,7 @@ #include "delegates.h" #include "smdirmodel.h" #include "smdialog.h" +#include "archivemodel.h" FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboardMode(None) { mModel = new FileSystemModel(this); @@ -477,10 +478,47 @@ void FilesystemWidget::dvdMount(){ void FilesystemWidget::moveToArchive(){ QStringList selected = selectedFiles(); - foreach(QFileInfo fi, selected){ + QFileInfoList files; + foreach(QString f, selected){ + QFileInfo fi(f); + if(fi.isDir()){ + files.append(getRecursive(fi)); + }else{ + files.append(fi); + } + } + QMap<QString, QString> res; + foreach(QFileInfo fi, files){ + if(!fi.exists()){ + res.insert(fi.fileName(), tr("File not found")); + continue; + } QString md5 = Helper::md5Sum(fi.absoluteFilePath()); - Helper::moveToArchive(fi.absoluteFilePath(), md5); + if(!ArchiveFilesModel::hasFile(md5)){ + res.insert(fi.fileName(), tr("Not in archive")); + continue; + } + QString mvres = Helper::moveToArchive(fi.absoluteFilePath(), md5); + if(mvres.isEmpty()){ + res.insert(fi.fileName(), tr("Move failed")); + continue; + } + if(!ArchiveFilesModel::setDvdNo(md5, -1)){ + res.insert(fi.fileName(), tr("DvdNo. update failed")); + } + res.insert(fi.fileName(), tr("Success")); } + QString msg("<html>"); + msg.append(tr("<p>Result:</p>")); + msg.append("<ul>"); + QMap<QString, QString>::const_iterator it = res.constBegin(); + while(it != res.constEnd()){ + QString m = QString(tr("<li>%1: %2</li>")).arg(it.key()).arg(it.value()); + msg.append(m); + ++it; } + msg.append("</ul>"); + msg.append("</html>"); + QMessageBox::information(this, tr("Move to archive"), msg, QMessageBox::Ok); } void FilesystemWidget::selectAllPV(){ @@ -563,6 +601,21 @@ void FilesystemWidget::deleteRecursive(const QFileInfo &start){ } } +QFileInfoList FilesystemWidget::getRecursive(const QFileInfo &start) const{ + QFileInfoList retval; + if(start.isDir()){ + QDir curDir = QDir(start.absoluteFilePath()); + foreach(QFileInfo info, curDir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot)){ + if(info.isDir()){ + retval.append(getRecursive(info)); + }else{ + retval.append(info); + } + } + } + return retval; +} + void FilesystemWidget::copyFiles(const QStringList &files, const QString &dest){ foreach(const QString file, files){ QFileInfo fi(file); |