project: force user to re-save recovery projects

Ensure user doesn't just work on a project in the app's recovery
folder.

Finalizes auto-recovery system for now.
This commit is contained in:
itsmattkc
2021-04-01 17:34:16 +11:00
parent 5b10faee84
commit e6b8848ad7
4 changed files with 44 additions and 7 deletions
+32 -4
View File
@@ -451,7 +451,7 @@ void Core::AddOpenProject(Project* p)
emit ProjectOpened(p);
}
void Core::AddOpenProjectFromTask(Task *task)
bool Core::AddOpenProjectFromTask(Task *task)
{
ProjectLoadBaseTask* load_task = static_cast<ProjectLoadBaseTask*>(task);
@@ -461,8 +461,12 @@ void Core::AddOpenProjectFromTask(Task *task)
if (ValidateFootageInLoadedProject(project, load_task->GetFilenameProjectWasSavedAs())) {
AddOpenProject(project);
main_window_->LoadLayout(layout);
return true;
} else {
delete project;
return false;
}
}
@@ -627,6 +631,26 @@ void Core::OpenStartupProject()
}
}
void Core::AddRecoveryProjectFromTask(Task *task)
{
if (AddOpenProjectFromTask(task)) {
ProjectLoadBaseTask* load_task = static_cast<ProjectLoadBaseTask*>(task);
Project* project = load_task->GetLoadedProject();
// Clearing the filename will force the user to re-save it somewhere else
project->set_filename(QString());
// Forcing a UUID regeneration will prevent it from saving auto-recoveries in the same place
// the original project did
project->RegenerateUuid();
// Setting modified will ensure that the program doesn't close and lose the project without
// prompting the user first
project->set_modified(true);
}
}
void Core::StartGUI(bool full_screen)
{
// Set UI style
@@ -1031,7 +1055,7 @@ void Core::ShowStatusBarMessage(const QString &s)
void Core::OpenRecoveryProject(const QString &filename)
{
OpenProjectInternal(filename);
OpenProjectInternal(filename, true);
}
void Core::CheckForAutoRecoveries()
@@ -1119,7 +1143,7 @@ void Core::PushRecentlyOpenedProject(const QString& s)
emit OpenRecentListChanged();
}
void Core::OpenProjectInternal(const QString &filename)
void Core::OpenProjectInternal(const QString &filename, bool recovery_project)
{
// See if this project is open already
foreach (Project* p, open_projects_) {
@@ -1150,7 +1174,11 @@ void Core::OpenProjectInternal(const QString &filename)
TaskDialog* task_dialog = new TaskDialog(load_task, tr("Load Project"), main_window());
connect(task_dialog, &TaskDialog::TaskSucceeded, this, &Core::AddOpenProjectFromTask);
if (recovery_project) {
connect(task_dialog, &TaskDialog::TaskSucceeded, this, &Core::AddRecoveryProjectFromTask);
} else {
connect(task_dialog, &TaskDialog::TaskSucceeded, this, &Core::AddOpenProjectFromTask);
}
task_dialog->open();
}
+4 -2
View File
@@ -572,7 +572,7 @@ private slots:
*/
void AddOpenProject(olive::Project* p);
void AddOpenProjectFromTask(Task* task);
bool AddOpenProjectFromTask(Task* task);
void ImportTaskComplete(Task *task);
@@ -584,10 +584,12 @@ private slots:
void OpenStartupProject();
void AddRecoveryProjectFromTask(Task* task);
/**
* @brief Internal project open
*/
void OpenProjectInternal(const QString& filename);
void OpenProjectInternal(const QString& filename, bool recovery_project = false);
};
+6 -1
View File
@@ -37,7 +37,7 @@ Project::Project() :
autorecovery_saved_(true)
{
// Generate UUID for this project
uuid_ = QUuid::createUuid();
RegenerateUuid();
// Adds a color manager "node" to this project so that it synchronizes
color_manager_ = new ColorManager();
@@ -288,6 +288,11 @@ QString Project::cache_path() const
return DiskManager::instance()->GetDefaultCachePath();
}
void Project::RegenerateUuid()
{
uuid_ = QUuid::createUuid();
}
void Project::ColorManagerValueChanged(const NodeInput &input, const TimeRange &range)
{
Q_UNUSED(range)
+2
View File
@@ -83,6 +83,8 @@ public:
return uuid_;
}
void RegenerateUuid();
signals:
void NameChanged();