summaryrefslogtreecommitdiff
path: root/plugins/notification/notification.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/notification/notification.c')
-rw-r--r--plugins/notification/notification.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/plugins/notification/notification.c b/plugins/notification/notification.c
new file mode 100644
index 00000000..dc5b669f
--- /dev/null
+++ b/plugins/notification/notification.c
@@ -0,0 +1,63 @@
+#include "../../deadbeef.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static DB_misc_t plugin;
+static DB_functions_t *deadbeef;
+
+#define DEFAULT_COMMAND "notify-send '%t' '%a - %b'"
+
+static const char settings_dlg[] =
+ "property Command entry notification.command \"" DEFAULT_COMMAND "\";\n"
+;
+
+static void
+show_notification (DB_playItem_t *track)
+{
+ char cmd [1024];
+ deadbeef->pl_format_title (track, -1, cmd, sizeof (cmd), -1, deadbeef->conf_get_str ("notification.command", DEFAULT_COMMAND));
+ //system (cmd);
+}
+
+static int
+songchanged (DB_event_trackchange_t *ev, uintptr_t data) {
+ DB_playItem_t *track = deadbeef->pl_get_for_idx (ev->to);
+ if (track) {
+ show_notification (track);
+ }
+ return 0;
+}
+
+static int
+notification_stop (void) {
+ deadbeef->ev_unsubscribe (DB_PLUGIN (&plugin), DB_EV_SONGCHANGED, DB_CALLBACK (songchanged), 0);
+ return 0;
+}
+
+static int
+notification_start (void) {
+ deadbeef->ev_subscribe (DB_PLUGIN (&plugin), DB_EV_SONGCHANGED, DB_CALLBACK (songchanged), 0);
+ return 0;
+}
+
+DB_plugin_t *
+notification_load (DB_functions_t *api) {
+ deadbeef = api;
+ return DB_PLUGIN (&plugin);
+}
+
+// define plugin interface
+static DB_misc_t plugin = {
+ DB_PLUGIN_SET_API_VERSION
+ .plugin.type = DB_PLUGIN_MISC,
+ .plugin.name = "Current track notification",
+ .plugin.descr = "Displays notification when current track is changed",
+ .plugin.author = "Viktor Semykin",
+ .plugin.email = "thesame.ml@gmail.com",
+ .plugin.website = "http://deadbeef.sf.net",
+ .plugin.start = notification_start,
+ .plugin.stop = notification_stop,
+ .plugin.configdialog = settings_dlg
+};
+