DetachedSong: move code from Update() to LoadFile()
Avoid duplicate AllocatedPath::FromUTF8() invocations in two callers.
This commit is contained in:
parent
76f85e6f7b
commit
fc2154ee92
@ -32,6 +32,7 @@
|
||||
|
||||
struct LightSong;
|
||||
class Storage;
|
||||
class Path;
|
||||
|
||||
class DetachedSong {
|
||||
friend DetachedSong DatabaseDetachSong(const Storage &db,
|
||||
@ -220,6 +221,11 @@ public:
|
||||
* @return true on success
|
||||
*/
|
||||
bool Update();
|
||||
|
||||
/**
|
||||
* Load #tag and #mtime from a local file.
|
||||
*/
|
||||
bool LoadFile(Path path);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -54,17 +54,15 @@ SongLoader::LoadFile(const char *path_utf8, Error &error) const
|
||||
}
|
||||
#endif
|
||||
|
||||
if (client != nullptr) {
|
||||
const auto path_fs = AllocatedPath::FromUTF8(path_utf8, error);
|
||||
if (path_fs.IsNull())
|
||||
return nullptr;
|
||||
const auto path_fs = AllocatedPath::FromUTF8(path_utf8, error);
|
||||
if (path_fs.IsNull())
|
||||
return nullptr;
|
||||
|
||||
if (!client->AllowFile(path_fs, error))
|
||||
return nullptr;
|
||||
}
|
||||
if (client != nullptr && !client->AllowFile(path_fs, error))
|
||||
return nullptr;
|
||||
|
||||
DetachedSong *song = new DetachedSong(path_utf8);
|
||||
if (!song->Update()) {
|
||||
if (!song->LoadFile(path_fs)) {
|
||||
error.Set(playlist_domain, int(PlaylistResult::NO_SUCH_SONG),
|
||||
"No such file");
|
||||
delete song;
|
||||
|
@ -153,6 +153,26 @@ Song::UpdateFileInArchive(const Storage &storage)
|
||||
|
||||
#endif
|
||||
|
||||
bool
|
||||
DetachedSong::LoadFile(Path path)
|
||||
{
|
||||
FileInfo fi;
|
||||
if (!GetFileInfo(path, fi) || !fi.IsRegular())
|
||||
return false;
|
||||
|
||||
TagBuilder tag_builder;
|
||||
if (!tag_file_scan(path, full_tag_handler, &tag_builder))
|
||||
return false;
|
||||
|
||||
if (tag_builder.IsEmpty())
|
||||
tag_scan_fallback(path, &full_tag_handler,
|
||||
&tag_builder);
|
||||
|
||||
mtime = fi.GetModificationTime();
|
||||
tag_builder.Commit(tag);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DetachedSong::Update()
|
||||
{
|
||||
@ -160,21 +180,7 @@ DetachedSong::Update()
|
||||
const AllocatedPath path_fs =
|
||||
AllocatedPath::FromUTF8(GetRealURI());
|
||||
|
||||
FileInfo fi;
|
||||
if (!GetFileInfo(path_fs, fi) || !fi.IsRegular())
|
||||
return false;
|
||||
|
||||
TagBuilder tag_builder;
|
||||
if (!tag_file_scan(path_fs, full_tag_handler, &tag_builder))
|
||||
return false;
|
||||
|
||||
if (tag_builder.IsEmpty())
|
||||
tag_scan_fallback(path_fs, &full_tag_handler,
|
||||
&tag_builder);
|
||||
|
||||
mtime = fi.GetModificationTime();
|
||||
tag_builder.Commit(tag);
|
||||
return true;
|
||||
return LoadFile(path_fs);
|
||||
} else if (IsRemote()) {
|
||||
TagBuilder tag_builder;
|
||||
if (!tag_stream_scan(uri.c_str(), full_tag_handler,
|
||||
|
@ -176,7 +176,7 @@ handle_lsinfo(Client &client, Request args, Response &r)
|
||||
return print_error(r, error);
|
||||
|
||||
DetachedSong song(path_utf8);
|
||||
if (!song.Update()) {
|
||||
if (!song.LoadFile(path_fs)) {
|
||||
r.Error(ACK_ERROR_NO_EXIST, "No such file");
|
||||
return CommandResult::ERROR;
|
||||
}
|
||||
|
@ -121,9 +121,9 @@ DatabaseDetachSong(gcc_unused const Database &db,
|
||||
}
|
||||
|
||||
bool
|
||||
DetachedSong::Update()
|
||||
DetachedSong::LoadFile(Path path)
|
||||
{
|
||||
if (strcmp(GetURI(), uri1) == 0) {
|
||||
if (path.ToUTF8() == uri1) {
|
||||
SetTag(MakeTag1a());
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user