improved autorecovery system
This commit is contained in:
+4
-4
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user