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
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
purpose with or without fee is hereby granted.
|
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
|
* 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
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
* purpose with or without fee is hereby granted.
|
* purpose with or without fee is hereby granted.
|
||||||
@ -852,7 +852,7 @@ struct app_context
|
|||||||
struct mpd_client mpd_client; ///< MPD client
|
struct mpd_client mpd_client; ///< MPD client
|
||||||
|
|
||||||
char *mpd_song; ///< MPD current song
|
char *mpd_song; ///< MPD current song
|
||||||
char *mpd_status; ///< MPD status (overrides song)
|
bool mpd_stopped; ///< MPD stopped (overrides song)
|
||||||
|
|
||||||
// NUT:
|
// NUT:
|
||||||
|
|
||||||
@ -992,7 +992,6 @@ app_context_free (struct app_context *self)
|
|||||||
|
|
||||||
mpd_client_free (&self->mpd_client);
|
mpd_client_free (&self->mpd_client);
|
||||||
cstr_set (&self->mpd_song, NULL);
|
cstr_set (&self->mpd_song, NULL);
|
||||||
cstr_set (&self->mpd_status, NULL);
|
|
||||||
|
|
||||||
nut_client_free (&self->nut_client);
|
nut_client_free (&self->nut_client);
|
||||||
str_map_free (&self->nut_ups_info);
|
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->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);
|
else if (ctx->mpd_song) ctx->backend->add (ctx->backend, ctx->mpd_song);
|
||||||
|
|
||||||
if (ctx->noise_end_time)
|
if (ctx->noise_end_time)
|
||||||
@ -1507,9 +1506,8 @@ mpd_on_info_response (const struct mpd_response *response,
|
|||||||
struct str_map map;
|
struct str_map map;
|
||||||
mpd_vector_to_map (data, &map);
|
mpd_vector_to_map (data, &map);
|
||||||
|
|
||||||
cstr_set (&ctx->mpd_status, NULL);
|
|
||||||
|
|
||||||
struct str s = str_make ();
|
struct str s = str_make ();
|
||||||
|
ctx->mpd_stopped = false;
|
||||||
|
|
||||||
const char *value;
|
const char *value;
|
||||||
if ((value = str_map_find (&map, "state")))
|
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
|
// Unicode approximates since in proportional fonts ASCII looks ugly
|
||||||
// and I don't want to depend on a particular font with player chars
|
// and I don't want to depend on a particular font with player chars
|
||||||
if (!strcmp (value, "stop"))
|
if (!strcmp (value, "stop"))
|
||||||
ctx->mpd_status = xstrdup ("MPD stopped");
|
ctx->mpd_stopped = true;
|
||||||
else if (!strcmp (value, "pause"))
|
else if (!strcmp (value, "pause"))
|
||||||
str_append (&s, "▯▯ " /* "|| " */);
|
str_append (&s, "▯▯ " /* "|| " */);
|
||||||
else
|
else
|
||||||
@ -1614,6 +1612,10 @@ mpd_on_failure (void *user_data)
|
|||||||
struct app_context *ctx = user_data;
|
struct app_context *ctx = user_data;
|
||||||
print_error ("connection to MPD failed");
|
print_error ("connection to MPD failed");
|
||||||
mpd_queue_reconnect (ctx);
|
mpd_queue_reconnect (ctx);
|
||||||
|
|
||||||
|
cstr_set (&ctx->mpd_song, NULL);
|
||||||
|
ctx->mpd_stopped = false;
|
||||||
|
refresh_status (ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -2223,15 +2225,21 @@ spawn (char *argv[])
|
|||||||
mpd_client_idle (c, 0); \
|
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, "play", NULL)
|
||||||
MPD_SIMPLE (play, "pause", NULL)
|
MPD_SIMPLE (toggle, "pause", NULL)
|
||||||
MPD_SIMPLE (stop, "stop", NULL)
|
MPD_SIMPLE (stop, "stop", NULL)
|
||||||
MPD_SIMPLE (prev, "previous", NULL)
|
MPD_SIMPLE (prev, "previous", NULL)
|
||||||
MPD_SIMPLE (next, "next", NULL)
|
MPD_SIMPLE (next, "next", NULL)
|
||||||
MPD_SIMPLE (forward, "seekcur", "+10", NULL)
|
MPD_SIMPLE (forward, "seekcur", "+10", NULL)
|
||||||
MPD_SIMPLE (backward, "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
|
static void
|
||||||
on_volume_finish (pa_context *context, int success, void *userdata)
|
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
|
// can be used to figure out which modifier is AltGr
|
||||||
|
|
||||||
// MPD
|
// 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_Down, on_mpd_stop, 0 },
|
||||||
{ Mod4Mask, XK_Left, on_mpd_prev, 0 },
|
{ Mod4Mask, XK_Left, on_mpd_prev, 0 },
|
||||||
{ Mod4Mask, XK_Right, on_mpd_next, 0 },
|
{ Mod4Mask, XK_Right, on_mpd_next, 0 },
|
||||||
{ Mod4Mask | ShiftMask, XK_Left, on_mpd_backward, 0 },
|
{ Mod4Mask | ShiftMask, XK_Left, on_mpd_backward, 0 },
|
||||||
{ Mod4Mask | ShiftMask, XK_Right, on_mpd_forward, 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_AudioPrev, on_mpd_prev, 0 },
|
||||||
{ 0, XF86XK_AudioNext, on_mpd_next, 0 },
|
{ 0, XF86XK_AudioNext, on_mpd_next, 0 },
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user