diff options
author | Max Kellermann <max@duempel.org> | 2014-02-24 18:14:19 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-02-25 18:16:19 +0100 |
commit | cb145d290ef04ed39c67f1ddf29e7b757ffd0bf5 (patch) | |
tree | 0ace3739d33833c1829581312f81eaa360be1532 /src | |
parent | 167803d2a14923189edc618101f25ea6389ef182 (diff) | |
download | mpd-cb145d290ef04ed39c67f1ddf29e7b757ffd0bf5.tar.gz mpd-cb145d290ef04ed39c67f1ddf29e7b757ffd0bf5.tar.xz mpd-cb145d290ef04ed39c67f1ddf29e7b757ffd0bf5.zip |
DirectorySave: save the flags "DEVICE_INARCHIVE" and "DEVICE_CONTAINER"
Helps avoid unnecessary archive scans during database update on a
fresh MPD process.
Diffstat (limited to '')
-rw-r--r-- | src/db/DirectorySave.cxx | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/db/DirectorySave.cxx b/src/db/DirectorySave.cxx index 30b96aa5a..6cc5df6cb 100644 --- a/src/db/DirectorySave.cxx +++ b/src/db/DirectorySave.cxx @@ -31,18 +31,52 @@ #include "util/Domain.hxx" #include <stddef.h> +#include <string.h> #define DIRECTORY_DIR "directory: " +#define DIRECTORY_TYPE "type: " #define DIRECTORY_MTIME "mtime: " #define DIRECTORY_BEGIN "begin: " #define DIRECTORY_END "end: " static constexpr Domain directory_domain("directory"); +gcc_const +static const char * +DeviceToTypeString(unsigned device) +{ + switch (device) { + case DEVICE_INARCHIVE: + return "archive"; + + case DEVICE_CONTAINER: + return "container"; + + default: + return nullptr; + } +} + +gcc_pure +static unsigned +ParseTypeString(const char *type) +{ + if (strcmp(type, "archive") == 0) + return DEVICE_INARCHIVE; + else if (strcmp(type, "container") == 0) + return DEVICE_CONTAINER; + else + return 0; +} + void directory_save(FILE *fp, const Directory &directory) { if (!directory.IsRoot()) { + const char *type = DeviceToTypeString(directory.device); + if (type != nullptr) + fprintf(fp, DIRECTORY_TYPE "%s\n", type); + if (directory.mtime != 0) fprintf(fp, DIRECTORY_MTIME "%lu\n", (unsigned long)directory.mtime); @@ -76,6 +110,9 @@ ParseLine(Directory &directory, const char *line) if (StringStartsWith(line, DIRECTORY_MTIME)) { directory.mtime = ParseUint64(line + sizeof(DIRECTORY_MTIME) - 1); + } else if (StringStartsWith(line, DIRECTORY_TYPE)) { + directory.device = + ParseTypeString(line + sizeof(DIRECTORY_TYPE) - 1); } else return false; |