added parse batch job file

This commit is contained in:
Igor Korsukov 2020-12-26 11:51:04 +02:00
parent eccafb6c95
commit 9cc84f60d1
6 changed files with 197 additions and 2 deletions

View file

@ -26,6 +26,8 @@ set(MODULE converter)
set(MODULE_SRC
${CMAKE_CURRENT_LIST_DIR}/convertermodule.cpp
${CMAKE_CURRENT_LIST_DIR}/convertermodule.h
${CMAKE_CURRENT_LIST_DIR}/convertercodes.h
${CMAKE_CURRENT_LIST_DIR}/convertertypes.h
${CMAKE_CURRENT_LIST_DIR}/iconvertercontroller.h
${CMAKE_CURRENT_LIST_DIR}/internal/convertercontroller.cpp
${CMAKE_CURRENT_LIST_DIR}/internal/convertercontroller.cpp

View file

@ -0,0 +1,47 @@
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2020 MuseScore BVBA and others
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================
#ifndef MU_CONVERTER_CONVERTERCODES_H
#define MU_CONVERTER_CONVERTERCODES_H
#include "ret.h"
namespace mu::converter {
enum class Err {
Undefined = int(Ret::Code::Undefined),
NoError = int(Ret::Code::Ok),
UnknownError = int(Ret::Code::ConverterFirst), // 1300
BatchJobFileFailedOpen = 1301,
BatchJobFileFailedParse = 1302,
ConvertTypeUnknown = 1310,
};
inline Ret make_ret(Err e)
{
return Ret(static_cast<int>(e));
}
inline Ret make_ret(Err e, const std::string& text)
{
return Ret(static_cast<int>(e), text);
}
}
#endif // MU_CONVERTER_CONVERTERCODES_H

View file

@ -0,0 +1,31 @@
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2020 MuseScore BVBA and others
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================
#ifndef MU_CONVERTER_CONVERTERTYPES_H
#define MU_CONVERTER_CONVERTERTYPES_H
namespace mu::converter {
enum class ConvertType {
Undefined = 0,
Png
};
}
#endif // MU_CONVERTER_CONVERTERTYPES_H

View file

@ -18,9 +18,101 @@
//=============================================================================
#include "convertercontroller.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include "log.h"
#include "convertercodes.h"
#include "stringutils.h"
using namespace mu::converter;
mu::Ret ConverterController::batchConvert(const io::path& batchJobFile)
{
return make_ret(Ret::Code::UnknownError);
RetVal<BatchJob> batchJob = parseBatchJob(batchJobFile);
if (!batchJob.ret) {
LOGE() << "failed parse batch job file, err: " << batchJob.ret.toString();
return batchJob.ret;
}
Ret ret = make_ret(Ret::Code::Ok);
for (const Job& job : batchJob.val) {
ret = convert(job.in, job.out);
if (!ret) {
LOGE() << "failed convert, err: " << ret.toString() << ", in: " << job.in << ", out: " << job.out;
break;
}
}
return ret;
}
mu::Ret ConverterController::convert(const io::path& in, const io::path& out)
{
ConvertType type = typeFromExt(out);
if (type == ConvertType::Undefined) {
return make_ret(Err::ConvertTypeUnknown);
}
Ret ret = make_ret(Ret::Code::Ok);
switch (type) {
case ConvertType::Png:
ret = convertToPng(in, out);
break;
case ConvertType::Undefined:
ret = make_ret(Err::ConvertTypeUnknown);
}
return ret;
}
mu::Ret ConverterController::convertToPng(const io::path& in, const io::path& out)
{
}
ConvertType ConverterController::typeFromExt(const io::path& file) const
{
std::string ext = io::syffix(file);
ext = strings::toLower(ext);
if ("png" == ext) {
return ConvertType::Png;
}
return ConvertType::Undefined;
}
mu::RetVal<ConverterController::BatchJob> ConverterController::parseBatchJob(const io::path& batchJobFile) const
{
RetVal<BatchJob> rv;
QFile file(batchJobFile.toQString());
if (!file.open(QIODevice::ReadOnly)) {
rv.ret = make_ret(Err::BatchJobFileFailedOpen);
return rv;
}
QByteArray data = file.readAll();
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(data, &err);
if (err.error != QJsonParseError::NoError || !doc.isArray()) {
rv.ret = make_ret(Err::BatchJobFileFailedParse, err.errorString().toStdString());
return rv;
}
QJsonArray arr = doc.array();
for (const QJsonValue& v : arr) {
QJsonObject obj = v.toObject();
Job job;
job.in = obj["in"].toString();
job.out = obj["out"].toString();
rv.val.push_back(std::move(job));
}
rv.ret = make_ret(Ret::Code::Ok);
return rv;
}

View file

@ -19,8 +19,13 @@
#ifndef MU_CONVERTER_CONVERTERCONTROLLER_H
#define MU_CONVERTER_CONVERTERCONTROLLER_H
#include <list>
#include "../iconvertercontroller.h"
#include "retval.h"
#include "convertertypes.h"
namespace mu::converter {
class ConverterController : public IConverterController
{
@ -28,6 +33,21 @@ public:
ConverterController() = default;
Ret batchConvert(const io::path& batchJobFile) override;
private:
struct Job {
io::path in;
io::path out;
};
using BatchJob = std::list<Job>;
RetVal<BatchJob> parseBatchJob(const io::path& batchJobFile) const;
ConvertType typeFromExt(const io::path& path) const;
Ret convert(const io::path& in, const io::path& out);
Ret convertToPng(const io::path& in, const io::path& out);
};
}

View file

@ -63,7 +63,10 @@ public:
LanguagesLast = 799,
NotationFirst = 1000,
NotationLast = 1299
NotationLast = 1299,
ConverterFirst = 1300,
ConverterLast = 1399
};
Ret() = default;