summaryrefslogtreecommitdiff
path: root/src/stmusic.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stmusic.c')
-rw-r--r--src/stmusic.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/stmusic.c b/src/stmusic.c
new file mode 100644
index 0000000..64a7939
--- /dev/null
+++ b/src/stmusic.c
@@ -0,0 +1,98 @@
+/* Copyright (C) 2025 awy <awy@awy.one>
+
+ stmusic is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ stmusic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with stmusic. If not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <mpd/client.h>
+#include <stdio.h>
+
+int main(void)
+{
+ struct mpd_connection *conn;
+ struct mpd_status *status;
+ struct mpd_song *song;
+
+ // Connect to MPD (default: localhost:6600)
+ conn = mpd_connection_new(NULL, 0, 30000);
+ if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) {
+ fprintf(stderr, "MPD connection error: %s\n",
+ mpd_connection_get_error_message(conn));
+ return 1;
+ }
+
+ // Get MPD status
+ status = mpd_run_status(conn);
+ if (!status) {
+ fprintf(stderr, "Failed to get status: %s\n",
+ mpd_connection_get_error_message(conn));
+ mpd_connection_free(conn);
+ return 1;
+ }
+
+ enum mpd_state st = mpd_status_get_state(status);
+
+ // Don't print anything if mpd is stopped
+ if (st == MPD_STATE_STOP) {
+ return 0;
+ }
+
+ if (st == MPD_STATE_PAUSE) { printf(" "); };
+
+ // Get current song
+ song = mpd_run_current_song(conn);
+
+ if (song) {
+ const char *artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0);
+ const char *title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0);
+ printf("%s - %s",
+ artist ? artist : "unknown",
+ title ? title : "unknown");
+ mpd_song_free(song);
+ }
+
+ if (mpd_status_get_repeat(status)) { printf(" "); };
+ if (mpd_status_get_random(status)) { printf(" "); };
+
+ enum mpd_consume_state consumest = mpd_status_get_consume_state(status);
+ switch (consumest) {
+ case MPD_CONSUME_ONESHOT:
+ printf(" 󰮯 󰇊");
+ break;
+ case MPD_CONSUME_ON:
+ printf(" 󰮯");
+ break;
+ case MPD_CONSUME_UNKNOWN:
+ break;
+ case MPD_CONSUME_OFF:
+ break;
+ }
+
+ enum mpd_single_state singlest = mpd_status_get_single_state(status);
+ switch (singlest) {
+ case MPD_SINGLE_ONESHOT:
+ printf(" 󰇊");
+ break;
+ case MPD_SINGLE_ON:
+ printf(" 󰎤");
+ break;
+ case MPD_CONSUME_UNKNOWN:
+ break;
+ case MPD_CONSUME_OFF:
+ break;
+ }
+
+ mpd_status_free(status);
+ mpd_connection_free(conn);
+ return 0;
+}