wmstatus: MPD play/toggle
This commit is contained in:
parent
fefeb242ae
commit
e073fc400e
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2015 - 2023, Přemysl Eric Janouch <p@janouch.name>
|
||||
Copyright (c) 2015 - 2024, Přemysl Eric Janouch <p@janouch.name>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
32
wmstatus.c
32
wmstatus.c
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* wmstatus.c: simple PulseAudio-enabled status setter for dwm and i3/sway
|
||||
*
|
||||
* Copyright (c) 2015 - 2021, Přemysl Eric Janouch <p@janouch.name>
|
||||
* Copyright (c) 2015 - 2024, Přemysl Eric Janouch <p@janouch.name>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted.
|
||||
@ -852,7 +852,7 @@ struct app_context
|
||||
struct mpd_client mpd_client; ///< MPD client
|
||||
|
||||
char *mpd_song; ///< MPD current song
|
||||
char *mpd_status; ///< MPD status (overrides song)
|
||||
bool mpd_stopped; ///< MPD stopped (overrides song)
|
||||
|
||||
// NUT:
|
||||
|
||||
@ -992,7 +992,6 @@ app_context_free (struct app_context *self)
|
||||
|
||||
mpd_client_free (&self->mpd_client);
|
||||
cstr_set (&self->mpd_song, NULL);
|
||||
cstr_set (&self->mpd_status, NULL);
|
||||
|
||||
nut_client_free (&self->nut_client);
|
||||
str_map_free (&self->nut_ups_info);
|
||||
@ -1240,7 +1239,7 @@ refresh_status (struct app_context *ctx)
|
||||
{
|
||||
if (ctx->prefix) ctx->backend->add (ctx->backend, ctx->prefix);
|
||||
|
||||
if (ctx->mpd_status) ctx->backend->add (ctx->backend, ctx->mpd_status);
|
||||
if (ctx->mpd_stopped) ctx->backend->add (ctx->backend, "MPD stopped");
|
||||
else if (ctx->mpd_song) ctx->backend->add (ctx->backend, ctx->mpd_song);
|
||||
|
||||
if (ctx->noise_end_time)
|
||||
@ -1507,9 +1506,8 @@ mpd_on_info_response (const struct mpd_response *response,
|
||||
struct str_map map;
|
||||
mpd_vector_to_map (data, &map);
|
||||
|
||||
cstr_set (&ctx->mpd_status, NULL);
|
||||
|
||||
struct str s = str_make ();
|
||||
ctx->mpd_stopped = false;
|
||||
|
||||
const char *value;
|
||||
if ((value = str_map_find (&map, "state")))
|
||||
@ -1517,7 +1515,7 @@ mpd_on_info_response (const struct mpd_response *response,
|
||||
// Unicode approximates since in proportional fonts ASCII looks ugly
|
||||
// and I don't want to depend on a particular font with player chars
|
||||
if (!strcmp (value, "stop"))
|
||||
ctx->mpd_status = xstrdup ("MPD stopped");
|
||||
ctx->mpd_stopped = true;
|
||||
else if (!strcmp (value, "pause"))
|
||||
str_append (&s, "▯▯ " /* "|| " */);
|
||||
else
|
||||
@ -1614,6 +1612,10 @@ mpd_on_failure (void *user_data)
|
||||
struct app_context *ctx = user_data;
|
||||
print_error ("connection to MPD failed");
|
||||
mpd_queue_reconnect (ctx);
|
||||
|
||||
cstr_set (&ctx->mpd_song, NULL);
|
||||
ctx->mpd_stopped = false;
|
||||
refresh_status (ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2223,15 +2225,21 @@ spawn (char *argv[])
|
||||
mpd_client_idle (c, 0); \
|
||||
}
|
||||
|
||||
// XXX: pause without argument is deprecated, we can watch play state
|
||||
// if we want to have the toggle pause/play functionality
|
||||
MPD_SIMPLE (play, "pause", NULL)
|
||||
|
||||
MPD_SIMPLE (play, "play", NULL)
|
||||
MPD_SIMPLE (toggle, "pause", NULL)
|
||||
MPD_SIMPLE (stop, "stop", NULL)
|
||||
MPD_SIMPLE (prev, "previous", NULL)
|
||||
MPD_SIMPLE (next, "next", NULL)
|
||||
MPD_SIMPLE (forward, "seekcur", "+10", NULL)
|
||||
MPD_SIMPLE (backward, "seekcur", "-10", NULL)
|
||||
|
||||
static void
|
||||
on_mpd_play_toggle (struct app_context *ctx, int arg)
|
||||
{
|
||||
(ctx->mpd_stopped ? on_mpd_play : on_mpd_toggle) (ctx, arg);
|
||||
}
|
||||
|
||||
static void
|
||||
on_volume_finish (pa_context *context, int success, void *userdata)
|
||||
{
|
||||
@ -2429,13 +2437,13 @@ g_keys[] =
|
||||
// can be used to figure out which modifier is AltGr
|
||||
|
||||
// MPD
|
||||
{ Mod4Mask, XK_Up, on_mpd_play, 0 },
|
||||
{ Mod4Mask, XK_Up, on_mpd_play_toggle, 0 },
|
||||
{ Mod4Mask, XK_Down, on_mpd_stop, 0 },
|
||||
{ Mod4Mask, XK_Left, on_mpd_prev, 0 },
|
||||
{ Mod4Mask, XK_Right, on_mpd_next, 0 },
|
||||
{ Mod4Mask | ShiftMask, XK_Left, on_mpd_backward, 0 },
|
||||
{ Mod4Mask | ShiftMask, XK_Right, on_mpd_forward, 0 },
|
||||
{ 0, XF86XK_AudioPlay, on_mpd_play, 0 },
|
||||
{ 0, XF86XK_AudioPlay, on_mpd_play_toggle, 0 },
|
||||
{ 0, XF86XK_AudioPrev, on_mpd_prev, 0 },
|
||||
{ 0, XF86XK_AudioNext, on_mpd_next, 0 },
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user