main: allow decompressing project files from command line

This commit is contained in:
itsmattkc
2023-02-20 14:56:30 -08:00
parent ffec819eef
commit eaa9548e3b
+66
View File
@@ -41,6 +41,7 @@ extern "C" {
#include "core.h" #include "core.h"
#include "common/commandlineparser.h" #include "common/commandlineparser.h"
#include "common/debug.h" #include "common/debug.h"
#include "node/project/serializer/serializer.h"
#include "version.h" #include "version.h"
#ifdef _WIN32 #ifdef _WIN32
@@ -54,6 +55,63 @@ extern "C" {
#include "common/crashpadinterface.h" #include "common/crashpadinterface.h"
#endif // USE_CRASHPAD #endif // USE_CRASHPAD
int decompress_project(const QString &project)
{
if (project.isEmpty()) {
printf("%s\n", QCoreApplication::translate("main", "No project filename set to decompress").toUtf8().constData());
return 1;
}
QFile project_file(project);
if (!project_file.open(QFile::ReadOnly)) {
printf("%s\n", QCoreApplication::translate("main", "Failed to open file \"%1\"").arg(project).toUtf8().constData());
return 1;
}
printf("%s\n", QCoreApplication::translate("main", "Decompressing project...").toUtf8().constData());
if (!olive::ProjectSerializer::CheckCompressedID(&project_file)) {
printf("%s\n", QCoreApplication::translate("main", "Failed to decompress, project may be corrupt").toUtf8().constData());
return 1;
}
QByteArray b = project_file.readAll();
project_file.close();
QByteArray decompressed = qUncompress(b);
if (decompressed.isEmpty()) {
printf("%s\n", QCoreApplication::translate("main", "Failed to decompress, project may be corrupt").toUtf8().constData());
return 1;
}
QFileInfo info(project);
QString filename;
QString append;
int append_num = 0;
do {
filename = info.dir().filePath(info.completeBaseName().append(append).append(QStringLiteral(".ovexml")));
append_num++;
append = QStringLiteral("-%1").arg(append_num);
} while(QFileInfo::exists(filename));
printf("%s\n", QCoreApplication::translate("main", "Outputting to file \"%1\"").arg(filename).toUtf8().constData());
QFile out(filename);
if (!out.open(QFile::WriteOnly)) {
printf("%s\n", QCoreApplication::translate("main", "Failed to open output file \"%1\"").arg(filename).toUtf8().constData());
return 1;
}
out.write(decompressed);
out.close();
printf("%s\n", QCoreApplication::translate("main", "Decompressed successfully").toUtf8().constData());
return 0;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
// Set up debug handler // Set up debug handler
@@ -114,6 +172,10 @@ int main(int argc, char *argv[])
true, true,
QCoreApplication::translate("main", "qm-file")); QCoreApplication::translate("main", "qm-file"));
auto decompress_option =
parser.AddOption({QStringLiteral("d"), QStringLiteral("-decompress")},
QCoreApplication::translate("main", "Decompress project file (No GUI)"));
#ifdef _WIN32 #ifdef _WIN32
auto console_option = auto console_option =
parser.AddOption({QStringLiteral("c"), QStringLiteral("-console")}, parser.AddOption({QStringLiteral("c"), QStringLiteral("-console")},
@@ -160,6 +222,10 @@ int main(int argc, char *argv[])
return 0; return 0;
} }
if (decompress_option->IsSet()) {
return decompress_project(project_argument->GetSetting());
}
if (export_option->IsSet()) { if (export_option->IsSet()) {
startup_params.set_run_mode(olive::Core::CoreParams::kHeadlessExport); startup_params.set_run_mode(olive::Core::CoreParams::kHeadlessExport);
} }