Skip to content

Commit feb3b7f

Browse files
committed
Show the correct dialog when an error occurs while opening a file
1 parent 69163ea commit feb3b7f

File tree

4 files changed

+42
-13
lines changed

4 files changed

+42
-13
lines changed

src/engraving/infrastructure/mscreader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ Ret MscReader::ZipFileReader::open(IODevice* device, const path_t& filePath)
276276

277277
m_zip = new ZipReader(m_device);
278278

279-
return make_ret(Err::NoError, filePath);
279+
return true;
280280
}
281281

282282
void MscReader::ZipFileReader::close()

src/project/internal/notationproject.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,16 +184,16 @@ mu::Ret NotationProject::doLoad(const io::path_t& path, const io::path_t& styleP
184184
}
185185

186186
MscReader reader(params);
187-
Ret openResult = reader.open();
188-
if (openResult != make_ret(mu::engraving::Err::NoError)) {
189-
return openResult;
187+
Ret ret = reader.open();
188+
if (!ret) {
189+
return ret;
190190
}
191191

192192
// Load engraving project
193193
m_engravingProject->setFileInfoProvider(std::make_shared<ProjectFileInfoProvider>(this));
194194

195195
SettingsCompat settingsCompat;
196-
Ret ret = m_engravingProject->loadMscz(reader, settingsCompat, forceMode);
196+
ret = m_engravingProject->loadMscz(reader, settingsCompat, forceMode);
197197
if (!ret) {
198198
return ret;
199199
}

src/project/internal/projectactionscontroller.cpp

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ RetVal<INotationProjectPtr> ProjectActionsController::loadProject(const io::path
238238
return ret;
239239
}
240240

241-
if (checkCanIgnoreError(ret, io::filename(loadPath).toString())) {
241+
if (checkCanIgnoreError(ret, loadPath)) {
242242
ret = project->load(loadPath, "" /*stylePath*/, true /*forceMode*/, format);
243243
}
244244

@@ -1375,7 +1375,7 @@ void ProjectActionsController::showScoreDownloadError(const Ret& ret)
13751375
interactive()->warning(title, message);
13761376
}
13771377

1378-
bool ProjectActionsController::checkCanIgnoreError(const Ret& ret, const String& projectName)
1378+
bool ProjectActionsController::checkCanIgnoreError(const Ret& ret, const io::path_t& filepath)
13791379
{
13801380
if (ret) {
13811381
return true;
@@ -1387,11 +1387,16 @@ bool ProjectActionsController::checkCanIgnoreError(const Ret& ret, const String&
13871387
case engraving::Err::FileOld300Format:
13881388
return askIfUserAgreesToOpenProjectWithIncompatibleVersion(ret.text());
13891389
case engraving::Err::FileCorrupted:
1390-
return askIfUserAgreesToOpenCorruptedProject(projectName, ret.text());
1391-
default:
1392-
warnProjectCannotBeOpened(projectName, ret.text());
1390+
return askIfUserAgreesToOpenCorruptedProject(io::filename(filepath).toString(), ret.text());
1391+
case engraving::Err::FileCriticallyCorrupted:
1392+
warnProjectCriticallyCorrupted(io::filename(filepath).toString(), ret.text());
13931393
return false;
1394+
default:
1395+
break;
13941396
}
1397+
1398+
warnProjectCannotBeOpened(ret, filepath);
1399+
return false;
13951400
}
13961401

13971402
bool ProjectActionsController::askIfUserAgreesToOpenProjectWithIncompatibleVersion(const std::string& errorText)
@@ -1421,7 +1426,7 @@ bool ProjectActionsController::askIfUserAgreesToOpenCorruptedProject(const Strin
14211426
return btn == openAnywayBtn.btn;
14221427
}
14231428

1424-
void ProjectActionsController::warnProjectCannotBeOpened(const String& projectName, const std::string& errorText)
1429+
void ProjectActionsController::warnProjectCriticallyCorrupted(const String& projectName, const std::string& errorText)
14251430
{
14261431
std::string title = mtrc("project", "File “%1” is corrupted and cannot be opened").arg(projectName).toStdString();
14271432
std::string body = trc("project", "Get help for this issue on musescore.org.");
@@ -1438,6 +1443,29 @@ void ProjectActionsController::warnProjectCannotBeOpened(const String& projectNa
14381443
}
14391444
}
14401445

1446+
void ProjectActionsController::warnProjectCannotBeOpened(const Ret& ret, const io::path_t& filepath)
1447+
{
1448+
std::string title = mtrc("project", "Cannot read file %1").arg(filepath.toString()).toStdString();
1449+
std::string body;
1450+
1451+
switch (ret.code()) {
1452+
case int(engraving::Err::FileNotFound):
1453+
body = trc("project", "This file does not exist or cannot be accessed currently.");
1454+
break;
1455+
case int(engraving::Err::FileOpenError):
1456+
body = trc("project", "This file could not be opened. Please make sure that MuseScore has permission to read this file.");
1457+
break;
1458+
default:
1459+
if (!ret.text().empty()) {
1460+
body = ret.text();
1461+
} else {
1462+
body = trc("project", "An error occurred while reading this file.");
1463+
}
1464+
}
1465+
1466+
interactive()->error(title, body);
1467+
}
1468+
14411469
void ProjectActionsController::importPdf()
14421470
{
14431471
interactive()->openUrl("https://musescore.com/import");

src/project/internal/projectactionscontroller.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ class ProjectActionsController : public IProjectFilesController, public QObject,
103103

104104
void showScoreDownloadError(const Ret& ret);
105105

106-
bool checkCanIgnoreError(const Ret& ret, const String& projectName);
106+
bool checkCanIgnoreError(const Ret& ret, const io::path_t& filepath);
107107
bool askIfUserAgreesToOpenProjectWithIncompatibleVersion(const std::string& errorText);
108108
bool askIfUserAgreesToOpenCorruptedProject(const String& projectName, const std::string& errorText);
109-
void warnProjectCannotBeOpened(const String& projectName, const std::string& errorText);
109+
void warnProjectCriticallyCorrupted(const String& projectName, const std::string& errorText);
110+
void warnProjectCannotBeOpened(const Ret& ret, const io::path_t& filepath);
110111

111112
framework::IInteractive::Button askAboutSavingScore(INotationProjectPtr project);
112113

0 commit comments

Comments
 (0)