summaryrefslogtreecommitdiff
path: root/plugins/hotkeys/actionhandlers.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/hotkeys/actionhandlers.c')
-rw-r--r--plugins/hotkeys/actionhandlers.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/plugins/hotkeys/actionhandlers.c b/plugins/hotkeys/actionhandlers.c
index 820d925b..b2b93047 100644
--- a/plugins/hotkeys/actionhandlers.c
+++ b/plugins/hotkeys/actionhandlers.c
@@ -33,4 +33,42 @@ extern DB_functions_t *deadbeef;
int
action_jump_to_current_handler (DB_plugin_action_t *act, int ctx) {
deadbeef->sendmessage (DB_EV_TRACKFOCUSCURRENT, 0, 0, 0);
+ return 0;
+}
+
+int
+action_reload_metadata_handler (DB_plugin_action_t *act, int ctx) {
+ DB_playItem_t *it = deadbeef->pl_get_first (PL_MAIN);
+ while (it) {
+ deadbeef->pl_lock ();
+ char decoder_id[100];
+ const char *dec = deadbeef->pl_find_meta (it, ":DECODER");
+ if (dec) {
+ strncpy (decoder_id, dec, sizeof (decoder_id));
+ }
+ int match = deadbeef->pl_is_selected (it) && deadbeef->is_local_file (deadbeef->pl_find_meta (it, ":URI")) && dec;
+ deadbeef->pl_unlock ();
+
+ if (match) {
+ uint32_t f = deadbeef->pl_get_item_flags (it);
+ if (!(f & DDB_IS_SUBTRACK)) {
+ f &= ~DDB_TAG_MASK;
+ deadbeef->pl_set_item_flags (it, f);
+ DB_decoder_t **decoders = deadbeef->plug_get_decoder_list ();
+ for (int i = 0; decoders[i]; i++) {
+ if (!strcmp (decoders[i]->plugin.id, decoder_id)) {
+ if (decoders[i]->read_metadata) {
+ decoders[i]->read_metadata (it);
+ }
+ break;
+ }
+ }
+ }
+ }
+ DB_playItem_t *next = deadbeef->pl_get_next (it, PL_MAIN);
+ deadbeef->pl_item_unref (it);
+ it = next;
+ }
+ deadbeef->sendmessage (DB_EV_PLAYLIST_REFRESH, 0, 0, 0);
+ return 0;
}