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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user