From aab351093e3ba713f1179a797d0f5929bdb4c92c Mon Sep 17 00:00:00 2001 From: Arno Date: Tue, 2 Jan 2018 23:10:08 +0100 Subject: Save CachedFileData to disk Since we already have the data, save it to speed up the start. Surprisingly, the hardest part was to figure out how to use QStandardPaths to find a location where to save the file. I went with the semi-hardcoded path HomeLocation/.shemovcleaner, even though we're on windows. --- filewidget.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'filewidget.cpp') diff --git a/filewidget.cpp b/filewidget.cpp index e2be4e1..458dd45 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "filewidget.h" #include "filesorter.h" @@ -47,6 +48,19 @@ FileWidget::FileWidget(QWidget *parent) : QWidget(parent), mCopyToMenu(0) { mFileCopier = new FileCopier(this); mCopyProgress = new ProgressDialog; mFileCache.setMaxCost(500); + QString cacheDir = QStandardPaths::locate(QStandardPaths::HomeLocation, ".shemovcleaner", QStandardPaths::LocateDirectory); + if(!cacheDir.isEmpty()){ + QString cacheFile = QString("%1/%2").arg(cacheDir).arg("cfd.dat"); + QFile f(cacheFile); + if(f.open(QIODevice::ReadOnly)){ + QDataStream in(&f); + while(!in.atEnd()){ + CachedFileData *fd = new CachedFileData; + in >> *fd; + mFileCache.insert(fd->fullPath, fd); + } + } + } connect(mFileCopier, SIGNAL(newFile(QString,QString,qint64)), this, SLOT(setupProgress(QString,QString,qint64))); connect(mFileCopier, SIGNAL(bytesRead(qint64)), this, SLOT(setCopyProgress(qint64))); connect(mFileCopier, SIGNAL(bytesReadIntval(qint64,qint64)), this, SLOT(setCopySummary(qint64,qint64))); @@ -59,6 +73,19 @@ FileWidget::FileWidget(QWidget *parent) : QWidget(parent), mCopyToMenu(0) { FileWidget::~FileWidget(){ writeHeaderData(); writeSettings(); + QString cacheDir = QStandardPaths::locate(QStandardPaths::HomeLocation, ".shemovcleaner", QStandardPaths::LocateDirectory); + if(!cacheDir.isEmpty()){ + QString cacheFile = QString("%1/%2").arg(cacheDir).arg("cfd.dat"); + QFile f(cacheFile); + if(f.open(QIODevice::WriteOnly)){ + QDataStream out(&f); + QList entries = mFileCache.keys(); + for(const QString &e : entries){ + CachedFileData *entry = mFileCache[e]; + out << *entry; + } + } + } } void FileWidget::setupGui(){ -- cgit v1.2.3-70-g09d2