core: allow saving uncompressed xml projects too

This commit is contained in:
itsmattkc
2022-12-04 22:35:58 -08:00
parent ed7ec77fdd
commit f234deb9ee
5 changed files with 40 additions and 21 deletions
+25 -13
View File
@@ -824,7 +824,8 @@ void Core::SaveProjectInternal(Project* project, const QString& override_filenam
return;
#endif
} else {
psm = new ProjectSaveTask(project);
bool use_compression = !project->filename().endsWith(QStringLiteral(".ovexml"), Qt::CaseInsensitive);
psm = new ProjectSaveTask(project, use_compression);
if (!override_filename.isEmpty()) {
// Set override filename if provided
@@ -1170,24 +1171,35 @@ bool Core::CloseAllExceptActiveProject()
QString Core::GetProjectFilter(bool include_any_filter)
{
QString filters;
static const QVector< QPair<QString, QString> > FILTERS = {
// Standard compressed Olive project
{tr("Olive Project"), QStringLiteral("ove")},
// Uncompressed XML Olive project
{tr("Olive Project (Uncompressed XML)"), QStringLiteral("ovexml")},
// OpenTimelineIO project, if available
#ifdef USE_OTIO
{tr("OpenTimelineIO"), QStringLiteral("otio")}
#endif
};
QStringList filters;
filters.reserve(FILTERS.size() + 1);
if (include_any_filter) {
filters.append(QStringLiteral("All Supported Projects (*.ove *.otio);;"));
QStringList combined;
for (auto it=FILTERS.cbegin(); it!=FILTERS.cend(); it++) {
combined.append(QStringLiteral("*.%1").arg(it->second));
}
filters.append(QStringLiteral("%1 (%2)").arg(tr("All Supported Projects"), combined.join(' ')));
}
#else
Q_UNUSED(include_any_filter)
#endif
// Append standard filter
filters.append(QStringLiteral("%1 (*.ove)").arg(tr("Olive Project")));
for (auto it=FILTERS.cbegin(); it!=FILTERS.cend(); it++) {
filters.append(QStringLiteral("%1 (*.%2)").arg(it->first, it->second));
}
#ifdef USE_OTIO
filters.append(QStringLiteral(";;%2 (*.otio)").arg(tr("OpenTimelineIO")));
#endif
return filters;
return filters.join(QStringLiteral(";;"));
}
QString Core::GetRecentProjectsFilePath()
+7 -3
View File
@@ -159,7 +159,7 @@ ProjectSerializer::Result ProjectSerializer::Paste(const QString &type)
return res;
}
ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data, const QString &type)
ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data, const QString &type, bool compress)
{
QString temp_save = FileFunctions::GetSafeTemporaryFilename(data.GetFilename());
@@ -176,8 +176,12 @@ ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data, const QS
return r;
}
project_file.write("OVEC");
project_file.write(qCompress(b));
if (compress) {
project_file.write("OVEC");
project_file.write(qCompress(b));
} else {
project_file.write(b);
}
project_file.close();
+1 -1
View File
@@ -160,7 +160,7 @@ public:
static Result Load(Project *project, QXmlStreamReader *read_device, const QString &type);
static Result Paste(const QString &type);
static Result Save(const SaveData &data, const QString &type);
static Result Save(const SaveData &data, const QString &type, bool compress);
static Result Save(QXmlStreamWriter *write_device, const SaveData &data, const QString &type);
static Result Copy(const SaveData &data, const QString &type);
+4 -3
View File
@@ -30,8 +30,9 @@
namespace olive {
ProjectSaveTask::ProjectSaveTask(Project *project) :
project_(project)
ProjectSaveTask::ProjectSaveTask(Project *project, bool use_compression) :
project_(project),
use_compression_(use_compression)
{
SetTitle(tr("Saving '%1'").arg(project->filename()));
}
@@ -42,7 +43,7 @@ bool ProjectSaveTask::Run()
ProjectSerializer::SaveData data(project_, using_filename);
ProjectSerializer::Result result = ProjectSerializer::Save(data, QStringLiteral("project"));
ProjectSerializer::Result result = ProjectSerializer::Save(data, QStringLiteral("project"), use_compression_);
bool success = false;
+3 -1
View File
@@ -30,7 +30,7 @@ class ProjectSaveTask : public Task
{
Q_OBJECT
public:
ProjectSaveTask(Project* project);
ProjectSaveTask(Project* project, bool use_compression);
Project* GetProject() const
{
@@ -50,6 +50,8 @@ private:
QString override_filename_;
bool use_compression_;
};
}