aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2016-10-05 23:54:20 +0200
committerGravatar Christian Hesse <mail@eworm.de>2016-10-05 23:54:20 +0200
commit071597337d00070b44e67fcc1458bcf1f5f343a6 (patch)
treedccce6c41dbab8b9a78c777463377e70aeb04eac
parent90b01922ea7622de0eab2216912445040389ed5c (diff)
parent86aaf24691e1d9035a3db86e2df03c49e7675d6c (diff)
downloadmpd-notification-071597337d00070b44e67fcc1458bcf1f5f343a6.tar.gz
mpd-notification-071597337d00070b44e67fcc1458bcf1f5f343a6.tar.zst
Merge branch 'config'
-rw-r--r--Makefile1
-rw-r--r--README.md27
-rw-r--r--mpd-notification.c15
-rw-r--r--mpd-notification.h2
4 files changed, 40 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index c24e215..e2a1707 100644
--- a/Makefile
+++ b/Makefile
@@ -9,6 +9,7 @@ RM := rm
# flags
CFLAGS += -std=c11 -O2 -fPIC -Wall -Werror
+CFLAGS += -liniparser
CFLAGS += $(shell pkg-config --cflags --libs libmpdclient)
CFLAGS += $(shell pkg-config --cflags --libs libnotify)
LIBAV_CFLAGS := $(shell pkg-config --cflags --libs libavformat libavutil 2>/dev/null)
diff --git a/README.md b/README.md
index 6025af8..2ee1cb5 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ Requirements
To compile and run `mpd-notification` you need:
+* [iniparser](http://ndevilla.free.fr/iniparser/)
* [libav](https://libav.org/) or [ffmpeg](https://www.ffmpeg.org/)
* [libnotify](http://library.gnome.org/devel/notification-spec/)
* [libmpdclient](http://www.musicpd.org/libs/libmpdclient/)
@@ -69,16 +70,32 @@ or `systemctl --user enable mpd-notification`.
* *-v*: verbose output
* *-V*: print version information
+Configuration
+-------------
+
+Configuration options can be read from a configuration file. `mpd`
+tries to read `~/.local/mpd-notification.conf`, which is expected to
+look like this:
+
+ host = localhost
+ port = 6600
+ music-dir = /srv/media/music/
+ scale = 200
+ timeout = 20
+
+Unused options can be commented or removed completely.
+
Artwork
-------
`mpd` does not provide any information where it finds its music files. To make
`mpd-notification` display album artwork you need to tell it where to look for
-artwork. You can do that by exporting `XDG_MUSIC_DIR` to your environment or by
-specifying `-m` or `--music-dir` on the command line. `mpd-notification` reads
-album artwork from `mp3` files, otherwise an image file containing the artwork
-needs to be placed in the same directory as the media file and named
-`cover.jpg`, `cover.png`, `folder.jpg` or `folder.png`.
+artwork. You can do that by exporting `XDG_MUSIC_DIR` to your environment, by
+specifying `-m` or `--music-dir` on the command line or by setting `music-dir`
+in configuration file. `mpd-notification` reads album artwork from `mp3`
+files, otherwise an image file containing the artwork needs to be placed
+in the same directory as the media file and named `cover.jpg`,
+`cover.png`, `folder.jpg` or `folder.png`.
### Upstream
diff --git a/mpd-notification.c b/mpd-notification.c
index f504836..543f60a 100644
--- a/mpd-notification.c
+++ b/mpd-notification.c
@@ -176,6 +176,7 @@ char * append_string(char * string, const char * format, const char delim, const
/*** main ***/
int main(int argc, char ** argv) {
+ dictionary * ini = NULL;
const char * title = NULL, * artist = NULL, * album = NULL;
char * notifystr = NULL;
GdkPixbuf * pixbuf = NULL;
@@ -198,6 +199,17 @@ int main(int argc, char ** argv) {
music_dir = getenv("XDG_MUSIC_DIR");
+ /* parse config file */
+ if (chdir(getenv("HOME")) == 0 && access(".config/mpd-notification.conf", R_OK) == 0 &&
+ (ini = iniparser_load(".config/mpd-notification.conf")) != NULL) {
+ file_workaround = iniparser_getboolean(ini, ":notification-file-workaround", file_workaround);
+ mpd_host = iniparser_getstring(ini, ":host", mpd_host);
+ mpd_port = iniparser_getint(ini, ":port", mpd_port);
+ notification_timeout = iniparser_getint(ini, ":timeout", notification_timeout);
+ music_dir = iniparser_getstring(ini, ":music-dir", music_dir);
+ scale = iniparser_getint(ini, ":scale", scale);
+ }
+
/* get the verbose status */
while ((i = getopt_long(argc, argv, optstring, options_long, NULL)) != -1) {
switch (i) {
@@ -435,5 +447,8 @@ nonotification:
g_object_unref(G_OBJECT(notification));
notify_uninit();
+ if (ini != NULL)
+ iniparser_freedict(ini);
+
return EXIT_SUCCESS;
}
diff --git a/mpd-notification.h b/mpd-notification.h
index 0cbd370..52fbec9 100644
--- a/mpd-notification.h
+++ b/mpd-notification.h
@@ -10,6 +10,8 @@
#define _GNU_SOURCE
+#include <iniparser.h>
+
#include <mpd/client.h>
#include <libnotify/notify.h>