SongUpdate: add UpdateFileInArchive(ArchiveFile&)
This commit is contained in:
parent
ae37e25452
commit
35567e6507
@ -106,6 +106,47 @@ Song::UpdateFile(Storage &storage)
|
|||||||
|
|
||||||
#ifdef ENABLE_ARCHIVE
|
#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
|
bool
|
||||||
Song::UpdateFileInArchive(const Storage &storage)
|
Song::UpdateFileInArchive(const Storage &storage)
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,7 @@ struct LightSong;
|
|||||||
struct Directory;
|
struct Directory;
|
||||||
class DetachedSong;
|
class DetachedSong;
|
||||||
class Storage;
|
class Storage;
|
||||||
|
class ArchiveFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A song file inside the configured music directory. Internal
|
* A song file inside the configured music directory. Internal
|
||||||
@ -112,6 +113,11 @@ struct Song {
|
|||||||
bool UpdateFile(Storage &storage);
|
bool UpdateFile(Storage &storage);
|
||||||
|
|
||||||
#ifdef ENABLE_ARCHIVE
|
#ifdef ENABLE_ARCHIVE
|
||||||
|
static Song *LoadFromArchive(ArchiveFile &archive,
|
||||||
|
const char *name_utf8,
|
||||||
|
Directory &parent);
|
||||||
|
bool UpdateFileInArchive(ArchiveFile &archive);
|
||||||
|
|
||||||
bool UpdateFileInArchive(const Storage &storage);
|
bool UpdateFileInArchive(const Storage &storage);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user