From 9eff1c930912d1302916d757a1edcf921357978d Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Thu, 14 May 2009 00:17:28 +0200 Subject: [PATCH] Turn plugin in a GmpcPluginBase object that implements the GmpcPluginMetaDataIface --- src/plugin.c | 124 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 28 deletions(-) diff --git a/src/plugin.c b/src/plugin.c index 092b367..45278fe 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -28,25 +28,31 @@ #include #include #include +#include +#include "plugin.h" -gmpcPlugin plugin; + + +#define LYRIC_PLUGINs_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), lyricsplugin_plugin_get_type(), LyricsPlugin)) + +const GType lyricsplugin_plugin_get_type(void); /** * Get/Set enabled */ -static int lyricsplugin_get_enabled() +static int lyricsplugin_get_enabled(GmpcPluginBase *base) { return cfg_get_single_value_as_int_with_default(config, "lyricsplugin-plugin", "enable", TRUE); } -static void lyricsplugin_set_enabled(int enabled) +static void lyricsplugin_set_enabled(GmpcPluginBase *base,int enabled) { cfg_set_single_value_as_int(config, "lyricsplugin-plugin", "enable", enabled); } /* Get priority */ -static int lyricsplugin_fetch_cover_priority(void){ +static int lyricsplugin_fetch_cover_priority(GmpcPluginMetaDataIface *base){ return cfg_get_single_value_as_int_with_default(config, "lyricsplugin-plugin", "priority", 80); } -static void lyricsplugin_fetch_cover_priority_set(int priority){ +static void lyricsplugin_fetch_cover_priority_set(GmpcPluginMetaDataIface *base, int priority){ cfg_set_single_value_as_int(config, "lyricsplugin-plugin", "priority", priority); } typedef struct Query { @@ -84,7 +90,7 @@ static void lyricsplugin_download_callback(const GEADAsyncHandler *handle, GEADS { MetaData *mtd = meta_data_new(); mtd->type = META_SONG_TXT; - mtd->plugin_name = plugin.name; + mtd->plugin_name = _("Lyrics Plugin"); mtd->content_type = META_DATA_CONTENT_TEXT; mtd->content = g_strdup((char *)lyric); mtd->size = -1; @@ -105,10 +111,10 @@ static void lyricsplugin_download_callback(const GEADAsyncHandler *handle, GEADS g_free(q); } -static void lyricsplugin_get_uri(mpd_Song *song, MetaDataType type, void (*callback)(GList *list, gpointer data), gpointer user_data) +static void lyricsplugin_get_uri(GmpcPluginMetaDataIface *base, const mpd_Song *song, MetaDataType type, GmpcPluginMetaDataCallback callback, void *user_data) { printf("Lyricwiki plugin api V2\n"); - if(lyricsplugin_get_enabled() && type == META_SONG_TXT && song && song->artist &&song->title) + if(lyricsplugin_get_enabled(GMPC_PLUGIN_BASE(base)) && type == META_SONG_TXT && song && song->artist &&song->title) { Query *q = g_malloc0(sizeof(*q)); gchar *artist = gmpc_easy_download_uri_escape(song->artist); @@ -118,7 +124,7 @@ static void lyricsplugin_get_uri(mpd_Song *song, MetaDataType type, void (*callb "http://www.lyricsplugin.com/winamp03/plugin/?artist=%s&title=%s", artist, title); q->callback = callback; - q->song = song; + q->song = (mpd_Song *) song; q->user_data = user_data; g_free(artist); g_free(title); @@ -135,30 +141,92 @@ static void lyricsplugin_get_uri(mpd_Song *song, MetaDataType type, void (*callb callback(NULL, user_data); } -gmpcMetaDataPlugin lw_cover = { - .get_priority = lyricsplugin_fetch_cover_priority, - .set_priority = lyricsplugin_fetch_cover_priority_set, - .get_metadata = lyricsplugin_get_uri -}; +/** + * Gobject plugin + */ +static void lyricsplugin_plugin_class_init (LyricsPluginClass *klass); -int plugin_api_version = PLUGIN_API_VERSION; +static int *lyricsplugin_plugin_get_version(GmpcPluginBase *plug, int *length) +{ + static int version[3] = {PLUGIN_MAJOR_VERSION,PLUGIN_MINOR_VERSION,PLUGIN_MICRO_VERSION}; + if(length) *length = 3; + return (int *)version; +} -static void lw_init(void) +static const char *lyricsplugin_plugin_get_name(GmpcPluginBase *plug) { + return _("Lyrics Plugin"); +} +static GObject *lyricsplugin_plugin_constructor(GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) { + LyricsPluginClass * klass; + LyricsPlugin *self; + GObjectClass * parent_class; + klass = (g_type_class_peek (lyricsplugin_plugin_get_type())); + parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); + self = (LyricsPlugin *) parent_class->constructor (type, n_construct_properties, construct_properties); + + + /* Setup textdomain */ bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); + + GMPC_PLUGIN_BASE(self)->translation_domain = GETTEXT_PACKAGE; + GMPC_PLUGIN_BASE(self)->plugin_type = GMPC_PLUGIN_META_DATA; + + return G_OBJECT(self); +} +static void lyricsplugin_plugin_finalize(GObject *obj) { + LyricsPlugin *self = (LyricsPlugin *)obj; + LyricsPluginClass * klass = (g_type_class_peek (play_queue_plugin_get_type())); + gpointer parent_class = g_type_class_peek_parent (klass); + + if(parent_class) + G_OBJECT_CLASS(parent_class)->finalize(obj); } -static const gchar *lw_get_translation_domain(void) + + +static void lyricsplugin_plugin_class_init (LyricsPluginClass *klass) +{ + G_OBJECT_CLASS(klass)->finalize = lyricsplugin_plugin_finalize; + G_OBJECT_CLASS(klass)->constructor = lyricsplugin_plugin_constructor; + /* Connect plugin functions */ + GMPC_PLUGIN_BASE_CLASS(klass)->get_version = lyricsplugin_plugin_get_version; + GMPC_PLUGIN_BASE_CLASS(klass)->get_name = lyricsplugin_plugin_get_name; + + GMPC_PLUGIN_BASE_CLASS(klass)->get_enabled = lyricsplugin_get_enabled; + GMPC_PLUGIN_BASE_CLASS(klass)->set_enabled = lyricsplugin_set_enabled; + +} + +static void lyricsplugin_plugin_meta_data_iface_init(GmpcPluginMetaDataIfaceIface * iface) { + (iface)->get_priority = lyricsplugin_fetch_cover_priority; + (iface)->set_priority = lyricsplugin_fetch_cover_priority_set; + (iface)->get_data = lyricsplugin_get_uri; +} + +const GType lyricsplugin_plugin_get_type(void) { + static GType lyricsplugin_plugin_type_id = 0; + if(lyricsplugin_plugin_type_id == 0) { + static const GTypeInfo info = { + .class_size = sizeof(LyricsPluginClass), + .class_init = (GClassInitFunc)lyricsplugin_plugin_class_init, + .instance_size = sizeof(LyricsPlugin), + .n_preallocs = 0 + }; + + lyricsplugin_plugin_type_id = g_type_register_static(GMPC_PLUGIN_TYPE_BASE, "LyricsPlugin", &info, 0); + + /** Browser interface */ + static const GInterfaceInfo iface_info = { (GInterfaceInitFunc) lyricsplugin_plugin_meta_data_iface_init, + (GInterfaceFinalizeFunc) NULL, NULL}; + g_type_add_interface_static (lyricsplugin_plugin_type_id, GMPC_PLUGIN_TYPE_META_DATA_IFACE, &iface_info); + } + return lyricsplugin_plugin_type_id; +} + +GType plugin_get_type(void); + +G_MODULE_EXPORT GType plugin_get_type(void) { - return GETTEXT_PACKAGE; + return lyricsplugin_plugin_get_type(); } -gmpcPlugin plugin = { - .name = N_("LyricsPlugin.com lyric source"), - .version = {PLUGIN_MAJOR_VERSION,PLUGIN_MINOR_VERSION,PLUGIN_MICRO_VERSION}, - .plugin_type = GMPC_PLUGIN_META_DATA, - .init = lw_init, - .metadata = &lw_cover, - .get_enabled = lyricsplugin_get_enabled, - .set_enabled = lyricsplugin_set_enabled, - .get_translation_domain = lw_get_translation_domain -}; -- 2.11.4.GIT