db/update/Container: catch C++ exceptions
This commit is contained in:
parent
27d368d48d
commit
c5133f6088
@ -96,38 +96,50 @@ UpdateWalk::UpdateContainerFile(Directory &directory,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto v = plugin.container_scan(pathname);
|
try {
|
||||||
if (v.empty()) {
|
const auto v = plugin.container_scan(pathname);
|
||||||
editor.LockDeleteDirectory(contdir);
|
if (v.empty()) {
|
||||||
return false;
|
editor.LockDeleteDirectory(contdir);
|
||||||
}
|
return false;
|
||||||
|
|
||||||
TagBuilder tag_builder;
|
|
||||||
for (const auto &vtrack : v) {
|
|
||||||
Song *song = Song::NewFile(vtrack.c_str(), *contdir);
|
|
||||||
|
|
||||||
// shouldn't be necessary but it's there..
|
|
||||||
song->mtime = info.mtime;
|
|
||||||
|
|
||||||
const auto vtrack_fs = AllocatedPath::FromUTF8(vtrack.c_str());
|
|
||||||
// TODO: check vtrack_fs.IsNull()
|
|
||||||
|
|
||||||
const auto child_path_fs = AllocatedPath::Build(pathname,
|
|
||||||
vtrack_fs);
|
|
||||||
plugin.ScanFile(child_path_fs,
|
|
||||||
add_tag_handler, &tag_builder);
|
|
||||||
|
|
||||||
tag_builder.Commit(song->tag);
|
|
||||||
|
|
||||||
{
|
|
||||||
const ScopeDatabaseLock protect;
|
|
||||||
contdir->AddSong(song);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
modified = true;
|
TagBuilder tag_builder;
|
||||||
|
for (const auto &vtrack : v) {
|
||||||
|
Song *song = Song::NewFile(vtrack.c_str(), *contdir);
|
||||||
|
|
||||||
FormatDefault(update_domain, "added %s/%s",
|
// shouldn't be necessary but it's there..
|
||||||
directory.GetPath(), vtrack.c_str());
|
song->mtime = info.mtime;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const auto vtrack_fs =
|
||||||
|
AllocatedPath::FromUTF8Throw(vtrack.c_str());
|
||||||
|
|
||||||
|
const auto child_path_fs = AllocatedPath::Build(pathname,
|
||||||
|
vtrack_fs);
|
||||||
|
plugin.ScanFile(child_path_fs,
|
||||||
|
add_tag_handler, &tag_builder);
|
||||||
|
} catch (const std::runtime_error &e) {
|
||||||
|
song->Free();
|
||||||
|
LogError(e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
tag_builder.Commit(song->tag);
|
||||||
|
|
||||||
|
{
|
||||||
|
const ScopeDatabaseLock protect;
|
||||||
|
contdir->AddSong(song);
|
||||||
|
}
|
||||||
|
|
||||||
|
modified = true;
|
||||||
|
|
||||||
|
FormatDefault(update_domain, "added %s/%s",
|
||||||
|
directory.GetPath(), vtrack.c_str());
|
||||||
|
}
|
||||||
|
} catch (const std::runtime_error &e) {
|
||||||
|
editor.LockDeleteDirectory(contdir);
|
||||||
|
LogError(e);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -266,10 +266,10 @@ ScanMusicEmu(Music_Emu *emu, unsigned song_num,
|
|||||||
|
|
||||||
assert(ti != nullptr);
|
assert(ti != nullptr);
|
||||||
|
|
||||||
|
AtScopeExit(ti) { gme_free_info(ti); };
|
||||||
|
|
||||||
ScanGmeInfo(*ti, song_num, gme_track_count(emu),
|
ScanGmeInfo(*ti, song_num, gme_track_count(emu),
|
||||||
handler, handler_ctx);
|
handler, handler_ctx);
|
||||||
|
|
||||||
gme_free_info(ti);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user