plugin: convert plugin_fd_add() to method
[ncmpc-debian.git] / src / plugin.hxx
index 62639ab..1b39a12 100644 (file)
@@ -1,5 +1,5 @@
 /* ncmpc (Ncurses MPD Client)
- * (c) 2004-2017 The Music Player Daemon Project
+ * (c) 2004-2019 The Music Player Daemon Project
  * Project homepage: http://musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
 #ifndef PLUGIN_H
 #define PLUGIN_H
 
-#include <glib.h>
+#include "AsioServiceFwd.hxx"
+
+#include <vector>
+#include <string>
 
 /**
  * A list of registered plugins.
  */
-struct plugin_list {
-       GPtrArray *plugins;
+struct PluginList {
+       std::vector<std::string> plugins;
 };
 
 /**
@@ -41,35 +44,20 @@ struct plugin_list {
  * when plugin_stop is called (i.e. strdup it if you need it afterwards).
  * @param data the caller defined pointer passed to plugin_run()
  */
-typedef void (*plugin_callback_t)(const GString *result, const bool success,
+typedef void (*plugin_callback_t)(std::string &&result, const bool success,
                                  const char *plugin_name, void *data);
 
 /**
  * This object represents a cycle through all available plugins, until
  * a plugin returns a positive result.
  */
-struct plugin_cycle;
-
-/**
- * Initialize an empty plugin_list structure.
- */
-static inline void
-plugin_list_init(struct plugin_list *list)
-{
-       list->plugins = g_ptr_array_new();
-}
+struct PluginCycle;
 
 /**
  * Load all plugins (executables) in a directory.
  */
 bool
-plugin_list_load_directory(struct plugin_list *list, const char *path);
-
-/**
- * Frees all memory held by the plugin_list object (but not the
- * pointer itself).
- */
-void plugin_list_deinit(struct plugin_list *list);
+plugin_list_load_directory(PluginList *list, const char *path) noexcept;
 
 /**
  * Run plugins in this list, until one returns success (or until the
@@ -77,15 +65,16 @@ void plugin_list_deinit(struct plugin_list *list);
  *
  * @param list the plugin list
  * @param args nullptr terminated command line arguments passed to the
- * plugin programs
+ * plugin programs; they must remain valid while the plugin runs
  * @param callback the callback function which will be called when a
  * result is available
  * @param callback_data caller defined pointer which is passed to the
  * callback function
  */
-struct plugin_cycle *
-plugin_run(struct plugin_list *list, const char *const*args,
-          plugin_callback_t callback, void *callback_data);
+PluginCycle *
+plugin_run(boost::asio::io_service &io_service,
+          PluginList *list, const char *const*args,
+          plugin_callback_t callback, void *callback_data) noexcept;
 
 /**
  * Stops the plugin cycle and frees resources.  This can be called to
@@ -93,6 +82,6 @@ plugin_run(struct plugin_list *list, const char *const*args,
  * invoked.
  */
 void
-plugin_stop(struct plugin_cycle *invocation);
+plugin_stop(PluginCycle *invocation) noexcept;
 
 #endif