SongUpdate: add UpdateFileInArchive(ArchiveFile&)
This commit is contained in:
parent
ae37e25452
commit
35567e6507
@ -106,6 +106,47 @@ Song::UpdateFile(Storage &storage)
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
|
||||
Song *
|
||||
Song::LoadFromArchive(ArchiveFile &archive, const char *name_utf8,
|
||||
Directory &parent)
|
||||
{
|
||||
assert(!uri_has_scheme(name_utf8));
|
||||
assert(strchr(name_utf8, '\n') == nullptr);
|
||||
|
||||
Song *song = NewFile(name_utf8, parent);
|
||||
|
||||
if (!song->UpdateFileInArchive(archive)) {
|
||||
song->Free();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return song;
|
||||
}
|
||||
|
||||
bool
|
||||
Song::UpdateFileInArchive(ArchiveFile &archive)
|
||||
{
|
||||
assert(parent != nullptr);
|
||||
assert(parent->device == DEVICE_INARCHIVE);
|
||||
|
||||
std::string path_utf8(uri);
|
||||
|
||||
for (const Directory *directory = parent;
|
||||
directory->parent != nullptr &&
|
||||
directory->parent->device == DEVICE_INARCHIVE;
|
||||
directory = directory->parent) {
|
||||
path_utf8.insert(path_utf8.begin(), '/');
|
||||
path_utf8.insert(0, directory->GetName());
|
||||
}
|
||||
|
||||
TagBuilder tag_builder;
|
||||
if (!tag_archive_scan(archive, path_utf8.c_str(), tag_builder))
|
||||
return false;
|
||||
|
||||
tag_builder.Commit(tag);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Song::UpdateFileInArchive(const Storage &storage)
|
||||
{
|
||||
|
@ -36,6 +36,7 @@ struct LightSong;
|
||||
struct Directory;
|
||||
class DetachedSong;
|
||||
class Storage;
|
||||
class ArchiveFile;
|
||||
|
||||
/**
|
||||
* A song file inside the configured music directory. Internal
|
||||
@ -112,6 +113,11 @@ struct Song {
|
||||
bool UpdateFile(Storage &storage);
|
||||
|
||||
#ifdef ENABLE_ARCHIVE
|
||||
static Song *LoadFromArchive(ArchiveFile &archive,
|
||||
const char *name_utf8,
|
||||
Directory &parent);
|
||||
bool UpdateFileInArchive(ArchiveFile &archive);
|
||||
|
||||
bool UpdateFileInArchive(const Storage &storage);
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user