From e6b7e5e0fccef756398982bd51137bb433df7f4a Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 21 Mar 2015 07:10:32 +0100 Subject: 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. --- filesystemwidget.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'filesystemwidget.cpp') 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 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(""); + msg.append(tr("

Result:

")); + msg.append(""); + msg.append(""); + 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); -- cgit v1.2.3-70-g09d2