tag/Format: add %iso8601%
This commit is contained in:
parent
8f2ca8f085
commit
72e44d596f
@ -3192,6 +3192,11 @@ buffer_size: 16384</programlisting>
|
|||||||
<para>
|
<para>
|
||||||
An alternative to <varname>path</varname> which
|
An alternative to <varname>path</varname> which
|
||||||
provides a format string referring to tag values.
|
provides a format string referring to tag values.
|
||||||
|
|
||||||
|
The special tag <varname>iso8601</varname> emits
|
||||||
|
the current date and time in <ulink
|
||||||
|
url="https://en.wikipedia.org/wiki/ISO_8601">ISO8601</ulink>
|
||||||
|
format (UTC).
|
||||||
Every time a new song starts or a new tag gets
|
Every time a new song starts or a new tag gets
|
||||||
received from a radio station, a new file is
|
received from a radio station, a new file is
|
||||||
opened. If the format does not render a file
|
opened. If the format does not render a file
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
struct FormatTagContext {
|
struct FormatTagContext {
|
||||||
const Tag &tag;
|
const Tag &tag;
|
||||||
@ -82,6 +83,32 @@ TagGetter(const void *object, const char *name)
|
|||||||
{
|
{
|
||||||
const auto &_ctx = *(const FormatTagContext *)object;
|
const auto &_ctx = *(const FormatTagContext *)object;
|
||||||
auto &ctx = const_cast<FormatTagContext &>(_ctx);
|
auto &ctx = const_cast<FormatTagContext &>(_ctx);
|
||||||
|
|
||||||
|
if (strcmp(name, "iso8601") == 0) {
|
||||||
|
time_t t = time(nullptr);
|
||||||
|
#ifdef WIN32
|
||||||
|
const struct tm *tm2 = gmtime(&t);
|
||||||
|
#else
|
||||||
|
struct tm tm;
|
||||||
|
const struct tm *tm2 = gmtime_r(&t, &tm);
|
||||||
|
#endif
|
||||||
|
if (tm2 == nullptr)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
strftime(ctx.buffer, sizeof(ctx.buffer),
|
||||||
|
#ifdef WIN32
|
||||||
|
/* kludge: use underscore instead of colon on
|
||||||
|
Windows because colons are not allowed in
|
||||||
|
file names, and this library is mostly
|
||||||
|
used to generate file names */
|
||||||
|
"%Y-%m-%dT%H_%M_%SZ",
|
||||||
|
#else
|
||||||
|
"%FT%TZ",
|
||||||
|
#endif
|
||||||
|
tm2);
|
||||||
|
return ctx.buffer;
|
||||||
|
}
|
||||||
|
|
||||||
const Tag &tag = ctx.tag;
|
const Tag &tag = ctx.tag;
|
||||||
|
|
||||||
TagType tag_type = tag_name_parse_i(name);
|
TagType tag_type = tag_name_parse_i(name);
|
||||||
|
Loading…
Reference in New Issue
Block a user