core: allow saving uncompressed xml projects too
This commit is contained in:
+25
-13
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user