diff --git a/src/converter/internal/convertercontroller.cpp b/src/converter/internal/convertercontroller.cpp index 45eed107eca2f..467933264e27c 100644 --- a/src/converter/internal/convertercontroller.cpp +++ b/src/converter/internal/convertercontroller.cpp @@ -30,6 +30,7 @@ #include "global/io/file.h" #include "global/io/dir.h" +#include "engraving/dom/masterscore.h" #include "engraving/infrastructure/mscio.h" #include "convertercodes.h" @@ -127,7 +128,7 @@ Ret ConverterController::fileConvert(const muse::io::path_t& in, const muse::io: const muse::UriQuery& extensionUri, const std::optional& transposeOptions, const std::optional& pageNum, const std::vector& visibleParts, - const muse::String& copyright) + const CopyrightInfo& copyright) { TRACEFUNC; @@ -168,9 +169,13 @@ Ret ConverterController::fileConvert(const muse::io::path_t& in, const muse::io: ConverterUtils::setVisibleParts(notationProject->masterNotation()->notation(), visibleParts); } - if (!copyright.isEmpty()) { + if (!copyright.text.isEmpty()) { + if (copyright.showOnAllPages) { + notationProject->masterNotation()->masterScore()->style().set(mu::engraving::Sid::oddFooterC, "$c"); + notationProject->masterNotation()->masterScore()->style().set(mu::engraving::Sid::evenFooterC, "$c"); + } ProjectMeta meta = notationProject->metaInfo(); - meta.copyright += copyright; + meta.copyright += copyright.text; notationProject->setMetaInfo(meta); } @@ -329,8 +334,19 @@ RetVal ConverterController::parseBatchJob(const m QJsonValue copyright = obj[u"copyright"]; if (!copyright.isUndefined()) { - if (copyright.isString()) { - job.copyright = copyright.toString(); + if (copyright.isObject()) { + QJsonValue copyrightText = copyright[u"text"]; + if (copyrightText.isUndefined()) { + rv.ret = make_ret(Err::BatchJobFileFailedParse, err.errorString().toStdString()); + return rv; + } + + job.copyright.text = copyrightText.toString(); + + QJsonValue showOnAllPages = copyright[u"showOnAllPages"]; + if (!showOnAllPages.isUndefined() && showOnAllPages.isBool()) { + job.copyright.showOnAllPages = showOnAllPages.toBool(); + } } else { rv.ret = make_ret(Err::BatchJobFileFailedParse, err.errorString().toStdString()); return rv; diff --git a/src/converter/internal/convertercontroller.h b/src/converter/internal/convertercontroller.h index 582e5de6b4ced..9a4ba1476797a 100644 --- a/src/converter/internal/convertercontroller.h +++ b/src/converter/internal/convertercontroller.h @@ -75,13 +75,18 @@ class ConverterController : public IConverterController, public muse::Injectable private: + struct CopyrightInfo { + muse::String text = {}; + bool showOnAllPages = false; + }; + struct Job { muse::io::path_t in; muse::io::path_t out; std::optional transposeOptions; std::optional pageNum; std::vector visibleParts; - muse::String copyright; + CopyrightInfo copyright; }; using BatchJob = std::vector; @@ -91,8 +96,7 @@ class ConverterController : public IConverterController, public muse::Injectable muse::Ret fileConvert(const muse::io::path_t& in, const muse::io::path_t& out, const OpenParams& openParams = {}, const muse::String& soundProfile = muse::String(), - const muse::UriQuery& extensionUri = muse::UriQuery(), const TransposeOpts& transposeOptions = std::nullopt, const std::optional& pageNum = std::nullopt, const std::vector& visibleParts = std::vector(), - const muse::String& copyright = muse::String()); + const muse::UriQuery& extensionUri = muse::UriQuery(), const TransposeOpts& transposeOptions = std::nullopt, const std::optional& pageNum = std::nullopt, const std::vector& visibleParts = std::vector(), const CopyrightInfo& copyright = { {}, false }); muse::Ret convertScoreParts(project::INotationWriterPtr writer, notation::IMasterNotationPtr masterNotation, const muse::io::path_t& out);