From 72ad9955c8d5c9abe28d8d59301e159493087976 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 23 Sep 2008 13:15:42 +0200 Subject: [PATCH] lyrics: configurable global plugin directory The lyrics library loads all plugins from the directory configured with "--with-lyrics-plugin-dir". --- Makefile.am | 11 +++++++++++ configure.ac | 9 +++++++++ src/lyrics.c | 23 +++++++++++++++++++---- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Makefile.am b/Makefile.am index 456cb53..419bd09 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,3 +18,14 @@ doc_DATA = \ EXTRA_DIST = \ $(doc_DATA) + +# +# lyrics plugins +# + +lyrics_plugin_dir = @lyrics_plugin_dir@ +lyrics_plugins = hd.py leoslyrics.py lyricswiki.rb + +install-exec-local: + install -m 0755 -d $(lyrics_plugin_dir) + install -m 0755 $(addprefix lyrics/,$(lyrics_plugins)) $(lyrics_plugin_dir) diff --git a/configure.ac b/configure.ac index e04cea9..3fa9ca6 100644 --- a/configure.ac +++ b/configure.ac @@ -256,6 +256,15 @@ fi AC_MSG_RESULT([$lyrics_screen]) +AC_ARG_WITH([lyrics-plugin-dir], + AC_HELP_STRING([[--with-lyrics-plugin-dir[=DIRECTORY]]], + [Directory where lyrics plugins are stored @<:@default=PREFIX/lib/ncmpc/lyrics@:>@]), + [lyrics_plugin_dir=$withval], + [lyrics_plugin_dir="$prefix/lib/ncmpc/lyrics"]) +AC_DEFINE_UNQUOTED([LYRICS_PLUGIN_DIR], ["$lyrics_plugin_dir"], + [Directory to search for lyrics plugins]) +AC_SUBST(lyrics_plugin_dir) + dnl Default host AC_MSG_CHECKING([for default MPD host]) AC_ARG_WITH([default-host], diff --git a/src/lyrics.c b/src/lyrics.c index 7a6124b..e6cb5d2 100644 --- a/src/lyrics.c +++ b/src/lyrics.c @@ -18,6 +18,7 @@ #include "lyrics.h" #include "gcc.h" +#include "../config.h" #include #include @@ -62,12 +63,26 @@ static int lyrics_register_plugin(const char *path0) void lyrics_init(void) { + GDir *dir; + plugins = g_ptr_array_new(); - /* XXX configurable paths */ - lyrics_register_plugin("./lyrics/hd.py"); - lyrics_register_plugin("./lyrics/leoslyrics.py"); - lyrics_register_plugin("./lyrics/lyricswiki.rb"); + dir = g_dir_open(LYRICS_PLUGIN_DIR, 0, NULL); + if (dir != NULL) { + const char *name; + char path[sizeof(LYRICS_PLUGIN_DIR) + 128]; + + memcpy(path, LYRICS_PLUGIN_DIR, sizeof(LYRICS_PLUGIN_DIR) - 1); + path[sizeof(LYRICS_PLUGIN_DIR) - 1] = G_DIR_SEPARATOR; + + while ((name = g_dir_read_name(dir)) != NULL) { + g_strlcpy(path + sizeof(LYRICS_PLUGIN_DIR), name, + sizeof(path) - sizeof(LYRICS_PLUGIN_DIR)); + lyrics_register_plugin(path); + } + + g_dir_close(dir); + } } void lyrics_deinit(void) -- 2.30.2