@@ -255,8 +255,6 @@ static GList *tokenize_format(const char *format, GError **error) {
|
|||||||
}
|
}
|
||||||
i += 1;
|
i += 1;
|
||||||
|
|
||||||
} else if (format[i] == '}' && i < len + 1 && format[i + 1] == '}') {
|
|
||||||
assert(FALSE && "TODO");
|
|
||||||
} else {
|
} else {
|
||||||
buf[buf_len++] = format[i];
|
buf[buf_len++] = format[i];
|
||||||
}
|
}
|
||||||
@@ -365,6 +363,29 @@ static gchar *helperfn_markup_escape(struct token *token, GVariant **args, int n
|
|||||||
return escaped;
|
return escaped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gchar *helperfn_default(struct token *token, GVariant **args, int nargs, GError **error) {
|
||||||
|
if (nargs != 2) {
|
||||||
|
g_set_error(error, playerctl_formatter_error_quark(), 1,
|
||||||
|
"function default takes exactly two arguments (got %d)", nargs);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[0] == NULL && args[1] == NULL) {
|
||||||
|
return g_strdup("");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[0] == NULL) {
|
||||||
|
return pctl_print_gvariant(args[1]);
|
||||||
|
} else {
|
||||||
|
gchar *printed = pctl_print_gvariant(args[0]);
|
||||||
|
if (g_strcmp0(printed, "") == 0) {
|
||||||
|
g_free(printed);
|
||||||
|
return pctl_print_gvariant(args[1]);
|
||||||
|
}
|
||||||
|
return printed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gchar *helperfn_emoji(struct token *token, GVariant **args, int nargs, GError **error) {
|
static gchar *helperfn_emoji(struct token *token, GVariant **args, int nargs, GError **error) {
|
||||||
g_warning("The emoji() helper function is undocumented and experimental and will change in a "
|
g_warning("The emoji() helper function is undocumented and experimental and will change in a "
|
||||||
"future release.");
|
"future release.");
|
||||||
@@ -423,6 +444,7 @@ struct template_helper {
|
|||||||
{"uc", &helperfn_uc},
|
{"uc", &helperfn_uc},
|
||||||
{"duration", &helperfn_duration},
|
{"duration", &helperfn_duration},
|
||||||
{"markup_escape", &helperfn_markup_escape},
|
{"markup_escape", &helperfn_markup_escape},
|
||||||
|
{"default", &helperfn_default},
|
||||||
// EXPERIMENTAL
|
// EXPERIMENTAL
|
||||||
{"emoji", &helperfn_emoji},
|
{"emoji", &helperfn_emoji},
|
||||||
};
|
};
|
||||||
|
@@ -51,3 +51,17 @@ async def test_format(bus_address):
|
|||||||
'metadata --format \'@{{ uc( "hi" ) }} - {{uc( lc( "HO" ) ) }} . {{lc( uc( title ) ) }}@\''
|
'metadata --format \'@{{ uc( "hi" ) }} - {{uc( lc( "HO" ) ) }} . {{lc( uc( title ) ) }}@\''
|
||||||
)
|
)
|
||||||
assert cmd.stdout == '@HI - HO . a title@'
|
assert cmd.stdout == '@HI - HO . a title@'
|
||||||
|
|
||||||
|
cmd = await playerctl.run(
|
||||||
|
'metadata --format \'{{default(xesam:missing, artist)}}\'')
|
||||||
|
assert cmd.stdout == ARTIST
|
||||||
|
|
||||||
|
cmd = await playerctl.run(
|
||||||
|
'metadata --format \'{{default(title, artist)}}\'')
|
||||||
|
assert cmd.stdout == TITLE
|
||||||
|
|
||||||
|
cmd = await playerctl.run('metadata --format \'{{default("", "ok")}}\'')
|
||||||
|
assert cmd.stdout == 'ok'
|
||||||
|
|
||||||
|
cmd = await playerctl.run('metadata --format \'{{default("ok", "not")}}\'')
|
||||||
|
assert cmd.stdout == 'ok'
|
||||||
|
Reference in New Issue
Block a user