improved autorecovery system

This commit is contained in:
itsmattkc
2018-11-19 09:51:36 +11:00
parent bcbaf7473e
commit afe73441d2
4 changed files with 30 additions and 11 deletions
+4 -4
View File
@@ -41,7 +41,7 @@
#include <QInputDialog>
#include <QRegExp>
QMainWindow* mainWindow;
MainWindow* mainWindow;
#define OLIVE_FILE_FILTER "Olive Project (*.ove)"
@@ -184,7 +184,7 @@ MainWindow::MainWindow(QWidget *parent) :
if (QFile::exists(autorecovery_filename)) {
if (QMessageBox::question(NULL, "Auto-recovery", "Olive didn't close properly and an autorecovery file was detected. Would you like to open it?", QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) {
updateTitle(autorecovery_filename);
panel_project->load_project();
panel_project->load_project(true);
}
}
autorecovery_timer.setInterval(60000);
@@ -487,7 +487,7 @@ void MainWindow::on_action_Open_Project_triggered()
QString fn = QFileDialog::getOpenFileName(this, "Open Project...", "", OLIVE_FILE_FILTER);
if (!fn.isEmpty() && can_close_project()) {
updateTitle(fn);
panel_project->load_project();
panel_project->load_project(false);
undo_stack.clear();
}
}
@@ -745,7 +745,7 @@ void MainWindow::load_recent_project() {
}
} else if (can_close_project()) {
updateTitle(recent_url);
panel_project->load_project();
panel_project->load_project(false);
}
}
+3 -3
View File
@@ -8,8 +8,6 @@ class EffectControls;
class Viewer;
class Timeline;
extern QMainWindow* mainWindow;
namespace Ui {
class MainWindow;
}
@@ -20,6 +18,7 @@ class MainWindow : public QMainWindow
public:
explicit MainWindow(QWidget *parent = 0);
void updateTitle(const QString &url);
~MainWindow();
public slots:
@@ -212,7 +211,8 @@ private:
bool save_project_as();
bool save_project();
bool can_close_project();
void updateTitle(const QString &url);
};
extern MainWindow* mainWindow;
#endif // MAINWINDOW_H
+21 -3
View File
@@ -848,7 +848,8 @@ bool Project::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
}
}
} else if (type == LOAD_TYPE_URL) {
internal_proj_dir = QFileInfo(stream.readElementText()).absoluteDir();
internal_proj_url = stream.readElementText();
internal_proj_dir = QFileInfo(internal_proj_url).absoluteDir();
} else {
while (!(stream.name() == root_search && stream.isEndElement())) {
stream.readNext();
@@ -1188,7 +1189,7 @@ bool Project::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
return true;
}
void Project::load_project() {
void Project::load_project(bool autorecovery) {
new_project();
/*LoadDialog ld;
@@ -1207,6 +1208,7 @@ void Project::load_project() {
*/
proj_dir = QFileInfo(project_url).absoluteDir();
internal_proj_dir = QFileInfo(project_url).absoluteDir();
internal_proj_url = project_url;
QXmlStreamReader stream(&file);
@@ -1240,6 +1242,22 @@ void Project::load_project() {
// find project's internal URL
cont = load_worker(file, stream, LOAD_TYPE_URL);
if (autorecovery) {
QString orig_filename = internal_proj_url;
int insert_index = internal_proj_url.lastIndexOf(".ove", -1, Qt::CaseInsensitive);
if (insert_index == -1) insert_index = internal_proj_url.length();
int counter = 1;
while (QFileInfo::exists(orig_filename)) {
orig_filename = internal_proj_url;
QString recover_text = "recovered";
if (counter > 1) {
recover_text += " " + QString::number(counter);
}
orig_filename.insert(insert_index, " (" + recover_text + ")");
counter++;
}
mainWindow->updateTitle(orig_filename);
}
// load folders first
if (cont) {
@@ -1290,7 +1308,7 @@ void Project::load_project() {
if (open_seq != NULL) set_sequence(open_seq);
update_ui(false);
mainWindow->setWindowModified(false);
mainWindow->setWindowModified(autorecovery);
for (int i=0;i<loaded_media_items.size();i++) {
start_preview_generator(loaded_media_items.at(i), loaded_media.at(i), true);
+2 -1
View File
@@ -62,7 +62,7 @@ public:
bool reveal_media(void* media, QTreeWidgetItem *parent = 0);
void new_project();
void load_project();
void load_project(bool autorecovery);
void save_project(bool autorecovery);
QTreeWidgetItem* new_folder(QString name);
@@ -106,6 +106,7 @@ private:
QString get_file_name_from_path(const QString &path);
QDir proj_dir;
QDir internal_proj_dir;
QString internal_proj_url;
private slots:
void rename_media(QTreeWidgetItem* item, int column);
void clear_recent_projects();