added parse batch job file
This commit is contained in:
parent
eccafb6c95
commit
9cc84f60d1
6 changed files with 197 additions and 2 deletions
|
@ -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
|
||||
|
|
47
src/converter/convertercodes.h
Normal file
47
src/converter/convertercodes.h
Normal 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
|
31
src/converter/convertertypes.h
Normal file
31
src/converter/convertertypes.h
Normal 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
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,10 @@ public:
|
|||
LanguagesLast = 799,
|
||||
|
||||
NotationFirst = 1000,
|
||||
NotationLast = 1299
|
||||
NotationLast = 1299,
|
||||
|
||||
ConverterFirst = 1300,
|
||||
ConverterLast = 1399
|
||||
};
|
||||
|
||||
Ret() = default;
|
||||
|
|
Loading…
Reference in a new issue