diff options
Diffstat (limited to 'plugins/hotkeys/actionhandlers.c')
-rw-r--r-- | plugins/hotkeys/actionhandlers.c | 38 |
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; } |