diff --git a/include/autosave.h b/include/autosave.h index def634a08052bbbc7008fd136ea5eef65c5c6c72..0de75255a50483d08efdb7ed241e5910f42709f6 100644 --- a/include/autosave.h +++ b/include/autosave.h @@ -33,16 +33,20 @@ class Autosave : public QObject { Q_OBJECT public: - Autosave(Petrack &petrack); - ~Autosave() override; + explicit Autosave(Petrack &petrack); + Autosave() = delete; + Autosave(const Autosave &other) = delete; + Autosave(const Autosave &&other) = delete; + Autosave &operator=(const Autosave &other) = delete; + Autosave &operator=(Autosave &&other) = delete; + ~Autosave() override = default; + void trackPersonModified(); bool autosaveExists(); static bool autosaveExists(const QString &filename); void deleteAutosave(); void loadAutosave(); bool isAutosave(const QString &file); - void startTimer(); - void stopTimer(); private: static QString buildAutosaveName(const QString &projectFileName, const QString &ending); @@ -54,9 +58,12 @@ private slots: void savePet(); private: + void startTimer(); + void stopTimer(); + Petrack &mPetrack; + QTimer *mTimer; int mChangeCounter = 0; - QTimer * mTimer; }; #endif // AUTOSAVE_H diff --git a/src/autosave.cpp b/src/autosave.cpp index 70af52448d115a778848a88e5f8058ae973ee612..5ff70f21ff834676110541ab323408abf76e9e3b 100644 --- a/src/autosave.cpp +++ b/src/autosave.cpp @@ -31,10 +31,10 @@ Autosave::Autosave(Petrack &petrack) : mPetrack(petrack) startTimer(); } -Autosave::~Autosave() = default; +// Autosave::~Autosave() = default; //{ -// NOTE: Currently this would also delete on Keyboard Interrupt (Ctrl + C) -// Replaced by Method call in closeEvent in Petrack to circumvent this +// NOTE: Currently this would also delete on Keyboard Interrupt (Ctrl + C) +// Replaced by Method call in closeEvent in Petrack to circumvent this // if Project-Object from Issue 88 gets implemented, // Autosave should be a Member of the project, not Petrack @@ -42,6 +42,12 @@ Autosave::~Autosave() = default; // deleteAutosave(); //} +/** + * @brief Occasioanlly triggers autosaving + * + * This method gets called everytime the user modifies a trajectory. After a certain number of modifications, an + * autosave for the .trc file is written to disk + */ void Autosave::trackPersonModified() { mChangeCounter++; @@ -77,10 +83,10 @@ bool Autosave::autosaveExists(const QString &filename) */ void Autosave::deleteAutosave() { - auto autosaves = getAutosave(); + const auto autosaves = getAutosave(); if(!autosaves.empty()) { - for(auto &save : autosaves) + for(const auto &save : autosaves) { QFile saveFile{save}; saveFile.remove(); @@ -93,16 +99,16 @@ void Autosave::deleteAutosave() */ void Autosave::loadAutosave() { - auto autosaveFiles = getAutosave(); + const auto autosaveFiles = getAutosave(); if(autosaveFiles.empty()) { return; } - auto petIndex = autosaveFiles.indexOf(QRegularExpression(R"(.*\.pet)")); + const auto petIndex = autosaveFiles.indexOf(QRegularExpression(R"(.*\.pet)")); if(petIndex != -1) { - QString petAutosaveName = autosaveFiles[petIndex]; + const QString petAutosaveName = autosaveFiles[petIndex]; mPetrack.openProject(petAutosaveName); } else @@ -110,11 +116,11 @@ void Autosave::loadAutosave() mPetrack.openProject(mPetrack.getProFileName()); } - auto trcIndex = autosaveFiles.indexOf(QRegularExpression(R"(.*\.trc)")); + const auto trcIndex = autosaveFiles.indexOf(QRegularExpression(R"(.*\.trc)")); if(trcIndex != -1) { - QString trcAutosaveName = autosaveFiles[trcIndex]; - auto trcFile = mPetrack.getTrackFileName(); + const QString trcAutosaveName = autosaveFiles[trcIndex]; + const auto trcFile = mPetrack.getTrackFileName(); mPetrack.deleteTrackPointAll(PersonStorage::Direction::Whole); mPetrack.importTracker(trcAutosaveName); mPetrack.setTrackFileName(trcFile); @@ -132,10 +138,10 @@ void Autosave::loadAutosave() bool Autosave::isAutosave(const QString &file) { const auto &projectName = mPetrack.getProFileName(); - auto petAutosaveName = QFileInfo(buildAutosaveName(projectName, ".pet")).absoluteFilePath(); - auto petRunningAutosave = QFileInfo(buildAutosaveName(projectName, "_running.pet")).absoluteFilePath(); - auto trcAutosaveName = QFileInfo(buildAutosaveName(projectName, ".trc")).absoluteFilePath(); - auto trcRunningAutosave = QFileInfo(buildAutosaveName(projectName, "_running.trc")).absoluteFilePath(); + const auto petAutosaveName = QFileInfo(buildAutosaveName(projectName, ".pet")).absoluteFilePath(); + const auto petRunningAutosave = QFileInfo(buildAutosaveName(projectName, "_running.pet")).absoluteFilePath(); + const auto trcAutosaveName = QFileInfo(buildAutosaveName(projectName, ".trc")).absoluteFilePath(); + const auto trcRunningAutosave = QFileInfo(buildAutosaveName(projectName, "_running.trc")).absoluteFilePath(); QFileInfo fileInfo{file}; const QString &filePath = fileInfo.absoluteFilePath(); @@ -170,7 +176,7 @@ void Autosave::stopTimer() QString Autosave::buildAutosaveName(const QString &projectFileName, const QString &ending) { - QFileInfo projectFile{projectFileName}; + const QFileInfo projectFile{projectFileName}; return projectFile.dir().filePath("." + projectFile.baseName() + "_autosave" + ending); } @@ -183,20 +189,20 @@ QString Autosave::buildAutosaveName(const QString &projectFileName, const QStrin */ void Autosave::savePet() { - auto projectName = mPetrack.getProFileName(); + const auto projectName = mPetrack.getProFileName(); // only save if there is a project name; Means there needs to be an .pet file already for autosave to work. With our // workflow usually the case if(projectName.isEmpty() || QFileInfo(projectName).isDir()) { return; } - QString autosaveName = buildAutosaveName(projectName, "_running.pet"); + const QString autosaveName = buildAutosaveName(projectName, "_running.pet"); mPetrack.saveProject(autosaveName); // first save to temp file, so crash during saving doesn't corrupt old autosave - QString finalAutosaveName = buildAutosaveName(projectName, ".pet"); - QFile tempAutosave{autosaveName}; - QFile autosave{finalAutosaveName}; + const QString finalAutosaveName = buildAutosaveName(projectName, ".pet"); + QFile tempAutosave{autosaveName}; + QFile autosave{finalAutosaveName}; if(tempAutosave.exists()) { if(autosave.exists()) @@ -220,16 +226,16 @@ void Autosave::savePet() */ void Autosave::saveTrc() { - auto projectName = mPetrack.getProFileName(); - QString autosaveName = buildAutosaveName(projectName, "_running.trc"); - auto trackFileName = mPetrack.getTrackFileName(); + const auto projectName = mPetrack.getProFileName(); + const QString autosaveName = buildAutosaveName(projectName, "_running.trc"); + const auto trackFileName = mPetrack.getTrackFileName(); mPetrack.exportTracker(autosaveName); mPetrack.setTrackFileName(trackFileName); // first save to temp file, so crash during saving doesn't corrupt old autosave - QString finalAutosaveName = buildAutosaveName(projectName, ".trc"); - QFile tempAutosave{autosaveName}; - QFile autosave{finalAutosaveName}; + const QString finalAutosaveName = buildAutosaveName(projectName, ".trc"); + QFile tempAutosave{autosaveName}; + QFile autosave{finalAutosaveName}; if(tempAutosave.exists()) { if(autosave.exists()) @@ -250,7 +256,7 @@ void Autosave::saveTrc() */ QStringList Autosave::getAutosave() { - auto projectPath = QFileInfo(mPetrack.getProFileName()); + const auto projectPath = QFileInfo(mPetrack.getProFileName()); return Autosave::getAutosave(projectPath); } @@ -264,14 +270,14 @@ QStringList Autosave::getAutosave(const QFileInfo &projectPath) if(projectPath.isFile()) { QStringList list; - auto autosavePetName = buildAutosaveName(projectPath.absoluteFilePath(), ".pet"); - QFileInfo autosavePet{autosavePetName}; + const auto autosavePetName = buildAutosaveName(projectPath.absoluteFilePath(), ".pet"); + const QFileInfo autosavePet{autosavePetName}; if(autosavePet.exists()) { list.append(autosavePetName); } - auto autosaveTrcName = buildAutosaveName(projectPath.absoluteFilePath(), ".trc"); - QFileInfo autosaveTrc{autosaveTrcName}; + const auto autosaveTrcName = buildAutosaveName(projectPath.absoluteFilePath(), ".trc"); + const QFileInfo autosaveTrc{autosaveTrcName}; if(autosaveTrc.exists()) { list.append(autosaveTrcName);