Skip to content

Commit 708ecf9

Browse files
committed
Show meaningful error details under "Show details"
1 parent 831ae2d commit 708ecf9

File tree

16 files changed

+54
-45
lines changed

16 files changed

+54
-45
lines changed

src/engraving/compat/mscxcompat.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ using namespace muse;
3535
using namespace muse::io;
3636
using namespace mu::engraving;
3737

38-
Ret mu::engraving::compat::mscxToMscz(const String& mscxFilePath, ByteArray* msczData)
38+
Ret mu::engraving::compat::mscxToMscz(const io::path_t& mscxFilePath, ByteArray* msczData)
3939
{
4040
File mscxFile(mscxFilePath);
4141
if (!mscxFile.open(IODevice::ReadOnly)) {
@@ -56,16 +56,18 @@ Ret mu::engraving::compat::mscxToMscz(const String& mscxFilePath, ByteArray* msc
5656
return muse::make_ok();
5757
}
5858

59-
Ret mu::engraving::compat::loadMsczOrMscx(MasterScore* score, const String& path, bool ignoreVersionError)
59+
Ret mu::engraving::compat::loadMsczOrMscx(MasterScore* score, const io::path_t& path, bool ignoreVersionError)
6060
{
61+
std::string suffix = io::suffix(path);
62+
6163
ByteArray msczData;
62-
if (path.endsWith(u".mscx", muse::CaseInsensitive)) {
64+
if (suffix == MSCX) {
6365
//! NOTE Convert mscx -> mscz
6466
Ret ret = mscxToMscz(path, &msczData);
6567
if (!ret) {
6668
return ret;
6769
}
68-
} else if (path.endsWith(u".mscz", muse::CaseInsensitive)) {
70+
} else if (suffix == MSCZ) {
6971
File msczFile(path);
7072
if (!msczFile.open(IODevice::ReadOnly)) {
7173
return make_ret(Err::FileOpenError, path);
@@ -92,18 +94,18 @@ Ret mu::engraving::compat::loadMsczOrMscx(MasterScore* score, const String& path
9294
return scoreReader.loadMscz(score, reader, audioSettings, ignoreVersionError);
9395
}
9496

95-
Ret mu::engraving::compat::loadMsczOrMscx(EngravingProjectPtr project, const String& path, bool ignoreVersionError)
97+
Ret mu::engraving::compat::loadMsczOrMscx(EngravingProjectPtr project, const io::path_t& path, bool ignoreVersionError)
9698
{
99+
std::string suffix = io::suffix(path);
100+
97101
ByteArray msczData;
98-
String filePath = path;
99-
if (path.endsWith(u".mscx", muse::CaseInsensitive)) {
102+
if (suffix == MSCX) {
100103
//! NOTE Convert mscx -> mscz
101-
102104
Ret ret = mscxToMscz(path, &msczData);
103105
if (!ret) {
104106
return ret;
105107
}
106-
} else if (path.endsWith(u".mscz", muse::CaseInsensitive)) {
108+
} else if (suffix == MSCZ) {
107109
File msczFile(path);
108110
if (!msczFile.open(IODevice::ReadOnly)) {
109111
return make_ret(Err::FileOpenError, path);
@@ -119,7 +121,7 @@ Ret mu::engraving::compat::loadMsczOrMscx(EngravingProjectPtr project, const Str
119121
Buffer msczBuf(&msczData);
120122
MscReader::Params params;
121123
params.device = &msczBuf;
122-
params.filePath = filePath;
124+
params.filePath = path;
123125
params.mode = MscIoMode::Zip;
124126

125127
MscReader reader(params);

src/engraving/compat/mscxcompat.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
#include "../engravingproject.h"
2727

2828
namespace mu::engraving::compat {
29-
muse::Ret mscxToMscz(const muse::String& mscxFilePath, muse::ByteArray* msczData);
30-
muse::Ret loadMsczOrMscx(MasterScore* score, const muse::String& path, bool ignoreVersionError = false);
31-
muse::Ret loadMsczOrMscx(EngravingProjectPtr project, const muse::String& path, bool ignoreVersionError = false);
29+
muse::Ret mscxToMscz(const muse::io::path_t& mscxFilePath, muse::ByteArray* msczData);
30+
muse::Ret loadMsczOrMscx(MasterScore* score, const muse::io::path_t& path, bool ignoreVersionError = false);
31+
muse::Ret loadMsczOrMscx(EngravingProjectPtr project, const muse::io::path_t& path, bool ignoreVersionError = false);
3232
}
3333

3434
#endif // MU_ENGRAVING_MSCXCOMPAT_H

src/engraving/engravingerrors.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@ enum class Err {
5050
IgnoreError = 2012
5151
};
5252

53-
inline muse::Ret make_ret(Err err, const muse::io::path_t& filePath = "")
53+
inline muse::Ret make_ret(Err err, const muse::String& text)
54+
{
55+
return muse::Ret(static_cast<int>(err), text.toStdString());
56+
}
57+
58+
inline muse::Ret make_ret(Err err, const muse::io::path_t& filePath = {})
5459
{
5560
muse::String text;
5661

src/engraving/rw/ireader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class IReader
6060
public:
6161
virtual ~IReader() = default;
6262

63-
virtual Err readScore(Score* score, XmlReader& xml, rw::ReadInOutData* out) = 0;
63+
virtual muse::Ret readScore(Score* score, XmlReader& xml, rw::ReadInOutData* out) = 0;
6464

6565
using Supported = std::variant<std::monostate,
6666
Accidental*,

src/engraving/rw/mscloader.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,7 @@ Ret MscLoader::loadMscz(MasterScore* masterScore, const MscReader& mscReader, Se
184184
break;
185185
}
186186

187-
Err err = reader.val->readScore(partScore, xml, &partReadInData);
188-
ret = make_ret(err);
187+
ret = reader.val->readScore(partScore, xml, &partReadInData);
189188
if (!ret) {
190189
break;
191190
}
@@ -258,15 +257,15 @@ Ret MscLoader::readMasterScore(MasterScore* score, XmlReader& e, bool ignoreVers
258257
score->checkChordList();
259258
}
260259

261-
Err err = reader.val->readScore(score, e, out);
260+
Ret ret = reader.val->readScore(score, e, out);
262261

263262
score->setExcerptsChanged(false);
264263

265-
return make_ret(err);
264+
return ret;
266265
} else {
267266
e.unknown();
268267
}
269268
}
270269

271-
return Ret(static_cast<int>(Err::FileCorrupted), e.errorString().toStdString());
270+
return make_ret(Err::FileCriticallyCorrupted, e.errorString());
272271
}

src/engraving/rw/read114/read114.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2728,10 +2728,10 @@ static void readStyle(MStyle* style, XmlReader& e, ReadChordListHook& readChordL
27282728
// import old version <= 1.3 files
27292729
//---------------------------------------------------------
27302730

2731-
Err Read114::readScore(Score* score, XmlReader& e, ReadInOutData* out)
2731+
muse::Ret Read114::readScore(Score* score, XmlReader& e, ReadInOutData* out)
27322732
{
27332733
IF_ASSERT_FAILED(score->isMaster()) {
2734-
return Err::FileUnknownError;
2734+
return make_ret(Err::FileUnknownError);
27352735
}
27362736

27372737
ReadContext ctx(score);
@@ -2925,7 +2925,7 @@ Err Read114::readScore(Score* score, XmlReader& e, ReadInOutData* out)
29252925

29262926
if (e.error() != muse::XmlStreamReader::NoError) {
29272927
LOGD() << e.lineNumber() << " " << e.columnNumber() << ": " << e.errorString();
2928-
return Err::FileBadFormat;
2928+
return make_ret(Err::FileBadFormat, e.errorString());
29292929
}
29302930

29312931
for (Staff* s : masterScore->staves()) {
@@ -3182,7 +3182,7 @@ Err Read114::readScore(Score* score, XmlReader& e, ReadInOutData* out)
31823182
score->removeElement(invalidSpanner);
31833183
}
31843184

3185-
return Err::NoError;
3185+
return muse::make_ok();
31863186
}
31873187

31883188
bool Read114::pasteStaff(XmlReader&, Segment*, staff_idx_t, Fraction)

src/engraving/rw/read114/read114.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Read114 : public rw::IReader
3333
// read114
3434
// import old version <= 1.3 files
3535
//---------------------------------------------------------
36-
Err readScore(Score* masterScore, XmlReader& e, rw::ReadInOutData* out) override;
36+
muse::Ret readScore(Score* masterScore, XmlReader& e, rw::ReadInOutData* out) override;
3737

3838
bool pasteStaff(XmlReader& e, Segment* dst, staff_idx_t dstStaff, Fraction scale) override;
3939
void pasteSymbols(XmlReader& e, ChordRest* dst) override;

src/engraving/rw/read206/read206.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3419,7 +3419,7 @@ bool Read206::readScore206(Score* score, XmlReader& e, ReadContext& ctx)
34193419
return true;
34203420
}
34213421

3422-
Err Read206::readScore(Score* score, XmlReader& e, ReadInOutData* out)
3422+
Ret Read206::readScore(Score* score, XmlReader& e, ReadInOutData* out)
34233423
{
34243424
ReadContext ctx(score);
34253425
if (out) {
@@ -3444,7 +3444,10 @@ Err Read206::readScore(Score* score, XmlReader& e, ReadInOutData* out)
34443444
score->setMscoreRevision(e.readInt(nullptr, 16));
34453445
} else if (tag == "Score") {
34463446
if (!readScore206(score, e, ctx)) {
3447-
return Err::FileBadFormat;
3447+
if (e.error() == muse::XmlStreamReader::CustomError) {
3448+
return make_ret(Err::FileCriticallyCorrupted, e.errorString());
3449+
}
3450+
return make_ret(Err::FileBadFormat, e.errorString());
34483451
}
34493452

34503453
if (ctx.overrideSpatium() && out) {
@@ -3504,7 +3507,7 @@ Err Read206::readScore(Score* score, XmlReader& e, ReadInOutData* out)
35043507

35053508
compat::CompatUtils::doCompatibilityConversions(score->masterScore());
35063509

3507-
return Err::NoError;
3510+
return make_ok();
35083511
}
35093512

35103513
bool Read206::pasteStaff(XmlReader&, Segment*, staff_idx_t, Fraction)

src/engraving/rw/read206/read206.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class Read206 : public rw::IReader
6565
// read206
6666
// import old version > 1.3 and < 3.x files
6767
//---------------------------------------------------------
68-
Err readScore(Score* score, XmlReader& e, rw::ReadInOutData* out) override;
68+
muse::Ret readScore(Score* score, XmlReader& e, rw::ReadInOutData* out) override;
6969

7070
bool pasteStaff(XmlReader& e, Segment* dst, staff_idx_t dstStaff, Fraction scale) override;
7171
void pasteSymbols(XmlReader& e, ChordRest* dst) override;

src/engraving/rw/read302/read302.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ bool Read302::readScore302(Score* score, XmlReader& e, ReadContext& ctx)
251251
return true;
252252
}
253253

254-
Err Read302::readScore(Score* score, XmlReader& e, ReadInOutData* out)
254+
muse::Ret Read302::readScore(Score* score, XmlReader& e, ReadInOutData* out)
255255
{
256256
ReadContext ctx(score);
257257
if (out) {
@@ -278,9 +278,9 @@ Err Read302::readScore(Score* score, XmlReader& e, ReadInOutData* out)
278278
} else if (tag == "Score") {
279279
if (!readScore302(score, e, ctx)) {
280280
if (e.error() == muse::XmlStreamReader::CustomError) {
281-
return Err::FileCriticallyCorrupted;
281+
return make_ret(Err::FileCriticallyCorrupted, e.errorString());
282282
}
283-
return Err::FileBadFormat;
283+
return make_ret(Err::FileBadFormat, e.errorString());
284284
}
285285

286286
if (ctx.overrideSpatium() && out) {
@@ -291,7 +291,7 @@ Err Read302::readScore(Score* score, XmlReader& e, ReadInOutData* out)
291291
}
292292
}
293293

294-
return Err::NoError;
294+
return muse::make_ok();
295295
}
296296

297297
void Read302::fixInstrumentId(Instrument* instrument)

0 commit comments

Comments
 (0)