Commit 177d3b01 authored by Max Kellermann's avatar Max Kellermann

db/update/Archive: use MakeDirectoryIfModified()

parent 12beb22c
......@@ -38,13 +38,6 @@
#include <string.h>
static Directory *
LockFindChild(Directory &directory, const char *name) noexcept
{
const ScopeDatabaseLock protect;
return directory.FindChild(name);
}
static Directory *
LockMakeChild(Directory &directory, const char *name) noexcept
{
const ScopeDatabaseLock protect;
......@@ -134,46 +127,31 @@ UpdateWalk::UpdateArchiveFile(Directory &parent, const char *name,
const StorageFileInfo &info,
const ArchivePlugin &plugin) noexcept
{
Directory *directory = LockFindChild(parent, name);
if (directory != nullptr && directory->mtime == info.mtime &&
!walk_discard)
/* MPD has already scanned the archive, and it hasn't
changed since - don't consider updating it */
return;
const auto path_fs = storage.MapChildFS(parent.GetPath(), name);
if (path_fs.IsNull())
/* not a local file: skip, because the archive API
supports only local files */
return;
Directory *directory =
LockMakeVirtualDirectoryIfModified(parent, name, info,
DEVICE_INARCHIVE);
if (directory == nullptr)
/* not modified */
return;
/* open archive */
std::unique_ptr<ArchiveFile> file;
try {
file = archive_file_open(&plugin, path_fs);
} catch (...) {
LogError(std::current_exception());
if (directory != nullptr)
editor.LockDeleteDirectory(directory);
editor.LockDeleteDirectory(directory);
return;
}
FormatDebug(update_domain, "archive %s opened", path_fs.c_str());
if (directory == nullptr) {
FormatDebug(update_domain,
"creating archive directory: %s", name);
const ScopeDatabaseLock protect;
directory = parent.CreateChild(name);
/* mark this directory as archive (we use device for
this) */
directory->device = DEVICE_INARCHIVE;
}
directory->mtime = info.mtime;
UpdateArchiveVisitor visitor(*this, *file, directory);
file->Visit(visitor);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment