Blob
Date:
Sat May 14 18:54:20 2022 UTC
Message:
amused monitor: allow to pass a list of event as filter it's easier / simpler for scripts to do $ amused monitor next,prev,jump rather than $ amused monitor | egrep --line-buffered 'next|prev|jump'
/*
* Copyright (c) 2022 Omar Polo <op@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef AMUSED_H
#define AMUSED_H
extern char *csock;
extern int debug;
extern int verbose;
extern int playing;
extern struct imsgev *iev_player;
#define IMSG_DATA_SIZE(imsg) ((imsg).hdr.len - IMSG_HEADER_SIZE)
enum imsg_type {
IMSG_PLAY, /* fd + filename */
IMSG_RESUME,
IMSG_PAUSE,
IMSG_STOP,
IMSG_EOF,
IMSG_ERR,
IMSG_CTL_PLAY, /* with optional filename */
IMSG_CTL_TOGGLE_PLAY,
IMSG_CTL_PAUSE,
IMSG_CTL_STOP,
IMSG_CTL_RESTART,
IMSG_CTL_FLUSH,
IMSG_CTL_SHOW,
IMSG_CTL_STATUS,
IMSG_CTL_NEXT,
IMSG_CTL_PREV,
IMSG_CTL_JUMP,
IMSG_CTL_REPEAT, /* struct player_repeat */
IMSG_CTL_BEGIN,
IMSG_CTL_ADD, /* path to a file */
IMSG_CTL_COMMIT, /* offset of the track to jump to */
IMSG_CTL_MONITOR,
IMSG_CTL_ERR,
IMSG__LAST,
};
struct imsgev {
struct imsgbuf ibuf;
void (*handler)(int, short, void *);
struct event ev;
short events;
};
enum actions {
NONE,
PLAY,
PAUSE,
TOGGLE,
STOP,
RESTART,
ADD,
FLUSH,
SHOW,
STATUS,
PREV,
NEXT,
LOAD,
JUMP,
REPEAT,
MONITOR,
};
struct ctl_command;
struct player_repeat {
int repeat_one;
int repeat_all;
};
struct player_status {
char path[PATH_MAX];
int status;
struct player_repeat rp;
};
struct parse_result {
enum actions action;
char **files;
const char *file;
int pretty;
int monitor[IMSG__LAST];
struct player_repeat rep;
struct ctl_command *ctl;
};
struct ctl_command {
const char *name;
enum actions action;
int (*main)(struct parse_result *, int, char **);
const char *usage;
int has_pledge;
};
struct playlist;
/* amused.c */
void spawn_daemon(void);
void imsg_event_add(struct imsgev *iev);
int imsg_compose_event(struct imsgev *, uint16_t, uint32_t,
pid_t, int, const void *, uint16_t);
int main_send_player(uint16_t, int);
int main_play_song(const char *);
void main_playlist_jump(struct imsgev *, struct imsg *);
void main_playlist_resume(void);
void main_playlist_advance(void);
void main_playlist_previous(void);
void main_restart_track(void);
void main_senderr(struct imsgev *, const char *);
void main_enqueue(int, struct playlist *, struct imsgev *, struct imsg *);
void main_send_playlist(struct imsgev *);
void main_send_status(struct imsgev *);
/* ctl.c */
__dead void usage(void);
__dead void ctl(int, char **);
/* player.c */
int player_setup(int, int, int);
int play(const void *, size_t);
int player(int, int);
int play_oggvorbis(int fd);
int play_mp3(int fd);
int play_flac(int fd);
int play_opus(int fd);
#endif
Omar Polo