aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin Morrison <calvin@fastmailteam.com>2022-08-02 11:07:27 -0400
committerCalvin Morrison <calvin@fastmailteam.com>2022-08-02 11:07:27 -0400
commit77821e30d15504aa91595c5160e376f5c87a8bde (patch)
tree13892a8af9ad88b367dc75211c880e74e08f3871
parent7ad5094f2300cc0421f02923e074587fde558d7d (diff)
fix Make clean
-rw-r--r--Makefile4
-rw-r--r--x11-moc-widget.c949
2 files changed, 2 insertions, 951 deletions
diff --git a/Makefile b/Makefile
index f3fe06e..9e4af55 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ ${OBJ}: config.mk
moc_x11: moc_x11.c moc_library.c
@echo ${CC} -Wall moc_x11.c moc_library.c -lpthread -lX11 -o moc_x11
- @${CC} -Wall moc_x11.c moc_library.c -lpthread -lX11 -o moc_x11
+ @${CC} -Wall moc_x11.c moc_library.c -lpthread -lX11 -o moc_x11 -ggdb
mocicon: ${OBJ}
@echo CC -o $@
@@ -30,7 +30,7 @@ mocicon: ${OBJ}
clean:
@echo cleaning
- @rm -f mocicon moc_x11 ${OBJ} mocicon-${VERSION}.tar.gz
+ @rm -f mocicon moc_x11 *.o mocicon-${VERSION}.tar.gz
dist: clean
@echo creating dist tarball
diff --git a/x11-moc-widget.c b/x11-moc-widget.c
deleted file mode 100644
index 808bd85..0000000
--- a/x11-moc-widget.c
+++ /dev/null
@@ -1,949 +0,0 @@
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xos.h>
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/utsname.h>
-
-/* Maximal socket name. */
-#define UNIX_PATH_MAX 108
-#define SOCKET_NAME "socket2"
-
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <assert.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <sys/un.h>
-#include <unistd.h>
-
-struct file_tags
-{
- char *title;
- char *artist;
- char *album;
- int track;
- int time;
- int filled; /* Which tags are filled: TAGS_COMMENTS, TAGS_TIME. */
-};
-struct event_queue
-{
- struct event *head;
- struct event *tail;
-};
-struct event
-{
- int type; /* type of the event (one of EV_*) */
- void *data; /* optional data associated with the event */
- struct event *next;
-};
-
-/* Flags for the info decoder function. */
-enum tags_select
-{
- TAGS_COMMENTS = 0x01, /* artist, title, etc. */
- TAGS_TIME = 0x02 /* time of the file. */
-};
-
-
-/* Definition of events sent by server to the client. */
-#define EV_STATE 0x01 /* server has changed the state */
-#define EV_CTIME 0x02 /* current time of the song has changed */
-#define EV_SRV_ERROR 0x04 /* an error occurred */
-#define EV_BUSY 0x05 /* another client is connected to the server */
-#define EV_DATA 0x06 /* data in response to a request will arrive */
-#define EV_BITRATE 0x07 /* the bitrate has changed */
-#define EV_RATE 0x08 /* the rate has changed */
-#define EV_CHANNELS 0x09 /* the number of channels has changed */
-#define EV_EXIT 0x0a /* the server is about to exit */
-#define EV_PONG 0x0b /* response for CMD_PING */
-#define EV_OPTIONS 0x0c /* the options has changed */
-#define EV_SEND_PLIST 0x0d /* request for sending the playlist */
-#define EV_TAGS 0x0e /* tags for the current file have changed */
-#define EV_STATUS_MSG 0x0f /* followed by a status message */
-#define EV_MIXER_CHANGE 0x10 /* the mixer channel was changed */
-#define EV_FILE_TAGS 0x11 /* tags in a response for tags request */
-#define EV_AVG_BITRATE 0x12 /* average bitrate has changed (new song) */
-#define EV_AUDIO_START 0x13 /* playing of audio has started */
-#define EV_AUDIO_STOP 0x14 /* playing of audio has stopped */
-
-/* Events caused by a client that wants to modify the playlist (see
- * CMD_CLI_PLIST* commands). */
-#define EV_PLIST_ADD 0x50 /* add an item, followed by the file name */
-#define EV_PLIST_DEL 0x51 /* delete an item, followed by the file name */
-#define EV_PLIST_MOVE 0x52 /* move an item, followed by 2 file names */
-#define EV_PLIST_CLEAR 0x53 /* clear the playlist */
-
-/* These events, though similar to the four previous are caused by server
- * which takes care of clients' queue synchronization. */
-#define EV_QUEUE_ADD 0x54
-#define EV_QUEUE_DEL 0x55
-#define EV_QUEUE_MOVE 0x56
-#define EV_QUEUE_CLEAR 0x57
-
-/* State of the server. */
-#define STATE_PLAY 0x01
-#define STATE_STOP 0x02
-#define STATE_PAUSE 0x03
-
-/* Definition of server commands. */
-#define CMD_PLAY 0x00 /* play the first element on the list */
-#define CMD_LIST_CLEAR 0x01 /* clear the list */
-#define CMD_LIST_ADD 0x02 /* add an item to the list */
-#define CMD_STOP 0x04 /* stop playing */
-#define CMD_PAUSE 0x05 /* pause */
-#define CMD_UNPAUSE 0x06 /* unpause */
-#define CMD_SET_OPTION 0x07 /* set an option */
-#define CMD_GET_OPTION 0x08 /* get an option */
-#define CMD_GET_CTIME 0x0d /* get the current song time */
-#define CMD_GET_SNAME 0x0f /* get the stream file name */
-#define CMD_NEXT 0x10 /* start playing next song if available */
-#define CMD_QUIT 0x11 /* shutdown the server */
-#define CMD_SEEK 0x12 /* seek in the current stream */
-#define CMD_GET_STATE 0x13 /* get the state */
-#define CMD_DISCONNECT 0x15 /* disconnect from the server */
-#define CMD_GET_BITRATE 0x16 /* get the bitrate */
-#define CMD_GET_RATE 0x17 /* get the rate */
-#define CMD_GET_CHANNELS 0x18 /* get the number of channels */
-#define CMD_PING 0x19 /* request for EV_PONG */
-#define CMD_GET_MIXER 0x1a /* get the volume level */
-#define CMD_SET_MIXER 0x1b /* set the volume level */
-#define CMD_DELETE 0x1c /* delete an item from the playlist */
-#define CMD_SEND_PLIST_EVENTS 0x1d /* request for playlist events */
-#define CMD_PREV 0x20 /* start playing previous song if available */
-#define CMD_SEND_PLIST 0x21 /* send the playlist to the requesting client */
-#define CMD_GET_PLIST 0x22 /* get the playlist from one of the clients */
-#define CMD_CAN_SEND_PLIST 0x23 /* mark the client as able to send
- playlist */
-#define CMD_CLI_PLIST_ADD 0x24 /* add an item to the client's playlist */
-#define CMD_CLI_PLIST_DEL 0x25 /* delete an item from the client's
- playlist */
-#define CMD_CLI_PLIST_CLEAR 0x26 /* clear the client's playlist */
-#define CMD_GET_SERIAL 0x27 /* get an unique serial number */
-#define CMD_PLIST_SET_SERIAL 0x28 /* assign a serial number to the server's
- playlist */
-#define CMD_LOCK 0x29 /* acquire a lock */
-#define CMD_UNLOCK 0x2a /* release the lock */
-#define CMD_PLIST_GET_SERIAL 0x2b /* get the serial number of the server's
- playlist */
-#define CMD_GET_TAGS 0x2c /* get tags for the currently played file */
-#define CMD_TOGGLE_MIXER_CHANNEL 0x2d /* toggle the mixer channel */
-#define CMD_GET_MIXER_CHANNEL_NAME 0x2e /* get the mixer channel's name */
-#define CMD_GET_FILE_TAGS 0x2f /* get tags for the specified file */
-#define CMD_ABORT_TAGS_REQUESTS 0x30 /* abort previous CMD_GET_FILE_TAGS
- requests up to some file */
-#define CMD_CLI_PLIST_MOVE 0x31 /* move an item */
-#define CMD_LIST_MOVE 0x32 /* move an item */
-#define CMD_GET_AVG_BITRATE 0x33 /* get the average bitrate */
-
-#define CMD_TOGGLE_SOFTMIXER 0x34 /* toggle use of softmixer */
-#define CMD_TOGGLE_EQUALIZER 0x35 /* toggle use of equalizer */
-#define CMD_EQUALIZER_REFRESH 0x36 /* refresh EQ-presets */
-#define CMD_EQUALIZER_PREV 0x37 /* select previous eq-preset */
-#define CMD_EQUALIZER_NEXT 0x38 /* select next eq-preset */
-
-#define CMD_TOGGLE_MAKE_MONO 0x39 /* toggle mono mixing */
-#define CMD_JUMP_TO 0x3a /* jumps to a some position in the current stream */
-#define CMD_QUEUE_ADD 0x3b /* add an item to the queue */
-#define CMD_QUEUE_DEL 0x3c /* delete an item from the queue */
-#define CMD_QUEUE_MOVE 0x3d /* move an item in the queue */
-#define CMD_QUEUE_CLEAR 0x3e /* clear the queue */
-#define CMD_GET_QUEUE 0x3f /* request the queue from the server */
-
-
-#define MAX_SEND_STRING 4096
-
-#ifndef RANGE
-#define RANGE(min, val, max) ((val) >= (min) && (val) <= (max))
-#endif
-
-// Functions
-static int fatal(char *string);
-static int server_connect ();
-void *xmalloc (size_t size);
-
-// Raw gets
-char *get_str (int sock);
-int send_int (int sock, int i);
-int get_int (int sock, int *i);
-
-//wrapper gets
-static int get_data_int();
-static int get_int_from_srv();
-static char *get_str_from_srv ();
-static void wait_for_data ();
-static void *get_event_data (const int type);
-static struct file_tags *recv_tags_from_srv();
-static struct file_tags *get_data_tags ();
-struct file_tags *tags_new ();
-void tags_free (struct file_tags *tags);
-
-// Globals.
-static int srv_sock = -1;
-char *socket_path = "/home/calvin/.moc/socket2";
-static struct event_queue events;
-
-
-
-static int fatal(char *string) {
- fprintf(stderr, "%s\n", string);
- exit(0);
-}
-char *sock_path() {
- return socket_path;
-};
-static int server_connect ()
-{
- char *path = socket_path;
- struct sockaddr_un sock_name;
- int sock;
-
- /* Create a socket */
- if ((sock = socket (PF_LOCAL, SOCK_STREAM, 0)) == -1)
- return -1;
-
- sock_name.sun_family = AF_LOCAL;
- strcpy (sock_name.sun_path, sock_path());
-
- if (connect(sock, (struct sockaddr *)&sock_name,
- SUN_LEN(&sock_name)) == -1) {
- close (sock);
- fprintf(stderr, "%s at (%s)\n", strerror(errno), sock_name);
- return -1;
- }
-
- return sock;
-}
-
-char *get_str (int sock)
-{
- int len;
- int res, nread = 0;
- char *str;
-
- if (!get_int(sock, &len))
- return NULL;
-
- if (!RANGE(0, len, MAX_SEND_STRING)) {
- printf("Bad string length.");
- return NULL;
- }
-
- str = (char *)malloc (sizeof(char) * (len + 1));
- while (nread < len) {
- res = recv (sock, str + nread, len - nread, 0);
- if (res == -1) {
- printf("recv() failed when getting string: %s\n",
- strerror(errno));
- free (str);
- return NULL;
- }
- if (res == 0) {
- printf("Unexpected EOF when getting string\n");
- free (str);
- return NULL;
- }
- nread += res;
- }
- str[len] = 0;
-
- return str;
-}
-
-int send_str (int sock, const char *str)
-{
- int len;
-
- len = strlen (str);
- if (!send_int (sock, len))
- return 0;
-
- if (send (sock, str, len, 0) != len)
- return 0;
-
- return 1;
-}
-
-int get_int (int sock, int *i)
-{
- int res;
-
- res = recv (sock, i, sizeof(int), 0);
- if (res == -1)
- printf("recv() failed when getting int: %s", strerror(errno));
-
- return res == sizeof(int) ? 1 : 0;
-}
-
-static char *get_data_str ()
-{
- wait_for_data ();
- return get_str_from_srv ();
-}
-
-static int get_data_int ()
-{
- wait_for_data ();
- return get_int_from_srv ();
-}
-
-static void send_str_to_srv (const char *str)
-{
- if (!send_str(srv_sock, str))
- fatal ("Can't send() string to the server!");
-}
-
-struct file_tags *tags_new ()
-{
- struct file_tags *tags;
-
- tags = (struct file_tags *)xmalloc (sizeof(struct file_tags));
- tags->title = NULL;
- tags->artist = NULL;
- tags->album = NULL;
- tags->track = -1;
- tags->time = -1;
- tags->filled = 0;
-
- return tags;
-}
-
-void tags_free (struct file_tags *tags)
-{
- assert (tags != NULL);
-
- if (tags->title)
- free (tags->title);
- if (tags->artist)
- free (tags->artist);
- if (tags->album)
- free (tags->album);
-
- free (tags);
-}
-
-struct file_tags *recv_tags (int sock)
-{
- struct file_tags *tags = tags_new ();
-
- // filename first.
- get_str(sock);
-
- if (!(tags->title = get_str(sock))) {
- fprintf(stderr, "Error while receiving title\n");
- tags_free (tags);
- return NULL;
- }
-
- if (!(tags->artist = get_str(sock))) {
- fprintf(stderr, "Error while receiving artist\n");
- tags_free (tags);
- return NULL;
- }
-
- if (!(tags->album = get_str(sock))) {
- fprintf(stderr, "Error while receiving album\n");
- tags_free (tags);
- return NULL;
- }
-
- if (!get_int(sock, &tags->track)) {
- fprintf(stderr, "Error while receiving track\n");
- tags_free (tags);
- return NULL;
- }
-
- if (!get_int(sock, &tags->time)) {
- fprintf(stderr, "Error while receiving time\n");
- tags_free (tags);
- return NULL;
- }
-
- if (!get_int(sock, &tags->filled)) {
- fprintf(stderr, "Error while receiving filled\n");
- tags_free (tags);
- return NULL;
- }
-
- /* Set NULL instead of empty tags. */
- if (!tags->title[0]) {
- free (tags->title);
- tags->title = NULL;
- }
- if (!tags->artist[0]) {
- free (tags->artist);
- tags->artist = NULL;
- }
- if (!tags->album[0]) {
- free (tags->album);
- tags->album = NULL;
- }
-
- return tags;
-}
-
-/* Send an integer value to the socket, return == 0 on error */
-int send_int (int sock, int i)
-{
- int res;
-
- res = send (sock, &i, sizeof(int), 0);
- if (res == -1)
- printf("send() failed: %s", strerror(errno));
-
- return res == sizeof(int) ? 1 : 0;
-}
-/* helper that doesn't require a socket */
-static void send_int_to_srv (const int num)
-{
- if (!send_int(srv_sock, num))
- fprintf(stderr, "Can't send() int to the server!\n");
-}
-
-/* Returned memory is malloc()ed. */
-static char *get_str_from_srv ()
-{
- char *str = get_str (srv_sock);
-
- if (!str)
- fprintf(stderr,"Can't receive string from the server!\n");
-
- return str;
-}
-
-static void *get_event_data (const int type)
-{
- switch (type) {
- case EV_PLIST_ADD:
- case EV_QUEUE_ADD:
- break;
- // return recv_item_from_srv ();
- case EV_PLIST_DEL:
- case EV_QUEUE_DEL:
- case EV_STATUS_MSG:
- case EV_SRV_ERROR:
- return get_str_from_srv ();
- case EV_FILE_TAGS:
- // return recv_tags_data_from_srv ();
- break;
- case EV_PLIST_MOVE:
- break;
- }
-
- return NULL;
-}
-/* Get an integer value from the server that will arrive after EV_DATA. */
-static void wait_for_data ()
-{
- int event;
-
- do {
- event = get_int_from_srv ();
- if (event == EV_EXIT)
- fatal("The server exited!");
- if (event != EV_DATA)
- event_push (&events, event, get_event_data(event));
- } while (event != EV_DATA);
-}
-
-
-void *xmalloc (size_t size)
-{
- void *p;
-
-
- if ((p = malloc(size)) == NULL)
- fatal ("Can't allocate memory!");
- return p;
-}
-void event_push (struct event_queue *q, const int event, void *data)
-{
- assert (q != NULL);
-
- if (!q->head) {
- q->head = (struct event *)xmalloc (sizeof(struct event));
- q->head->next = NULL;
- q->head->type = event;
- q->head->data = data;
- q->tail = q->head;
- }
- else {
- assert (q->head != NULL);
- assert (q->tail != NULL);
- assert (q->tail->next == NULL);
-
- q->tail->next = (struct event *)xmalloc (
- sizeof(struct event));
- q->tail = q->tail->next;
- q->tail->next = NULL;
- q->tail->type = event;
- q->tail->data = data;
- }
-}
-
-static int get_int_from_srv ()
-{
- int num;
-
- if (!get_int(srv_sock, &num))
- fprintf(stderr, "get_int_from_srv: Can't receive value from the server!\n");
-
- return num;
-}
-
-static struct file_tags *recv_tags_from_srv ()
-{
- struct file_tags *tags = recv_tags (srv_sock);
-
- if (!tags)
- fatal ("recv_tags_from_server: Can't receive tags from the server!");
-
- return tags;
-}
-
-static struct file_tags *get_data_tags ()
-{
- int got_it = 0;
-
- while (!got_it) {
- int type = get_int_from_srv ();
- void *data = get_event_data (type);
-
- if (type == EV_FILE_TAGS) {
- got_it = 1;
- }
- }
- return recv_tags_from_srv ();
-}
-
-/* helper functions for getting server info */
-static int get_curr_time ()
-{
- send_int_to_srv (CMD_GET_CTIME);
- return get_data_int ();
-}
-
-static char *get_curr_file ()
-{
- send_int_to_srv (CMD_GET_SNAME);
- return get_data_str ();
-}
-
-static struct file_tags *get_tags(char *file) {
-
- send_int_to_srv (CMD_GET_FILE_TAGS);
- send_str_to_srv (file);
- send_int_to_srv (TAGS_COMMENTS | TAGS_TIME);
-
- return get_data_tags();
-
-}
-
-char *time_format(int sec) {
-
- int h = (sec/3600);
- int m = (sec -(3600*h))/60;
- int s = (sec -(3600*h)-(m*60));
-
- char *str = xmalloc(256);
- if(h) {
- sprintf(str, "%d:%2d:%02d",h,m,s);
- } else {
- sprintf(str, "%02d:%02d",m,s);
- }
- return str;
-}
-
-
-/* Obtains the next X11 event with specified timeout. */
- static Bool
-XNextEventTimed(Display* dsp, XEvent* event_return, long millis)
-{
- if (millis == 0)
- {
- XNextEvent(dsp, event_return);
- return True;
- }
-
- struct timeval tv;
- tv.tv_sec = millis / 1000;
- tv.tv_usec = (millis % 1000) * 1000;
-
- XFlush(dsp);
- if (XPending(dsp))
- {
- XNextEvent(dsp, event_return);
- return True;
- }
- else
- {
- int fd = ConnectionNumber(dsp);
- fd_set readset;
- FD_ZERO(&readset);
- FD_SET(fd, &readset);
- if (select(fd+1, &readset, NULL, NULL, &tv) <= 0)
- {
- return False;
- }
- else
- {
- if (XPending(dsp))
- {
- XNextEvent(dsp, event_return);
- return True;
- }
- else
- {
- return False;
- }
- }
- }
-}
-
-
-int main(int argc, char** argv)
-{
- Display* dpy = XOpenDisplay(NULL);
- if (dpy == NULL)
- {
- fprintf(stderr, "Cannot open display\n");
- exit(1);
- }
-
- srv_sock = server_connect();
- if(srv_sock == -1) {
- fprintf(stderr, "Can't connect to MOCP Server at: %s\n", socket_path);
- exit(1);
- }
-
- int s = DefaultScreen(dpy);
- Window win = XCreateSimpleWindow(dpy, RootWindow(dpy, s), 10, 10, 660, 200, 1,
- BlackPixel(dpy, s), WhitePixel(dpy, s));
- XSelectInput(dpy, win, ExposureMask | ButtonPress | KeyPressMask);
- XMapWindow(dpy, win);
-
- XStoreName(dpy, win, "mocicon");
-
- Atom WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
- XSetWMProtocols(dpy, win, &WM_DELETE_WINDOW, 1);
-
- bool uname_ok = false;
- struct utsname sname;
- int ret = uname(&sname);
- if (ret != -1)
- {
- uname_ok = true;
- }
-
- while (1)
- {
- char *lastfile = NULL;
- XEvent e;
- int state;
- int ev = -1;
- int cmd = -1;
-
- if (!send_int(srv_sock, CMD_GET_STATE))
- fatal ("Can't send commands!");
-
- if (!get_int(srv_sock, &ev)) {
- fatal("Can't get data from the server 1.");
- }
- // skip other updates... wait for our data.
- while(ev != EV_DATA) {
- send_int(srv_sock, CMD_GET_STATE);
- if (!get_int(srv_sock, &ev)) {
- fprintf(stderr, "Can't get data from the server 1.\n");
- }
- }
- if(!get_int(srv_sock, &state)) {
- fatal ("Can't get state from the server!");
- }
-
- if (state == STATE_STOP) {
- int got_event = XNextEventTimed(dpy, &e, 500);
- XClearWindow(dpy, win);
- char *no_song = "No Song is Playing.";
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, 20, no_song, strlen(no_song));
- } else {
-
- char *file = get_curr_file();
-
- struct file_tags *tags= get_tags(file);
- /*
- printf("current_file: %s\n", file);
- printf("current_title: %s\n", tags->title);
-
- printf("current_artist: %s\n", tags->artist);
- printf("current_artist: %s\n", tags->album);
- printf("current_track: %d\n", tags->track);
-
- printf("current_time: %s\n", time_format(get_curr_time()));
- printf("current_length: %s\n", time_format(tags->time));
- */
-
- char *curt = time_format(get_curr_time());
- char *curtt = time_format(tags->time);
- char *timestr = xmalloc(256);
- sprintf(timestr,"%s / %s", curt, curtt);
-
- int got_event = XNextEventTimed(dpy, &e, 250);
-
- XClearWindow(dpy, win);
- int y_offset = 20;
- int x = 10;
- XDrawString(dpy, win, DefaultGC(dpy, s), x, y_offset, tags->title, strlen(tags->title));
- y_offset += 15;
- XDrawString(dpy, win, DefaultGC(dpy, s), x, y_offset, tags->artist, strlen(tags->artist));
- y_offset += 15;
- XDrawString(dpy, win, DefaultGC(dpy, s), x, y_offset, tags->album, strlen(tags->album));
- y_offset += 15;
- XDrawString(dpy, win, DefaultGC(dpy, s), x, y_offset, timestr, strlen(timestr));
- y_offset += 15;
-
- tags_free(tags);
- free(file);
- free(curt);
- free(curtt);
- free(timestr);
- }
-
- if (e.type == ButtonPress) {
- if (state == STATE_PAUSE) {
- cmd = CMD_UNPAUSE;
- }
- else if (state == STATE_PLAY) {
- cmd = CMD_PAUSE;
- }
- printf("sending pause/play\n");
- send_int(srv_sock, cmd);
- e.type=0;
- }
- if (e.type == KeyPress)
- {
- char buf[128] = {0};
- KeySym keysym;
- int len = XLookupString(&e.xkey, buf, sizeof buf, &keysym, NULL);
- if (keysym == XK_Escape)
- break;
- }
-
- if ((e.type == ClientMessage) &&
- (e.xclient.data.l[0]) == WM_DELETE_WINDOW)
- {
- break;
- }
-
- }
-
- XDestroyWindow(dpy, win);
- XCloseDisplay(dpy);
- return 0;
-}
-/*
- int main2(int argc, char** argv)
- {
- Display* dpy = XOpenDisplay(NULL);
- if (dpy == NULL)
- {
- fprintf(stderr, "Cannot open display\n");
- exit(1);
- }
-
-
- srv_sock = server_connect();
- if(srv_sock == -1) {
- fprintf(stderr, "Can't connect to MOCP Server at: %s\n", socket_path);
- exit(1);
- }
-
- int s = DefaultScreen(dpy);
- Window win = XCreateSimpleWindow(dpy, RootWindow(dpy, s), 10, 10, 660, 200, 1,
- BlackPixel(dpy, s), WhitePixel(dpy, s));
- XSelectInput(dpy, win, ExposureMask | KeyPressMask);
- XMapWindow(dpy, win);
-
- XStoreName(dpy, win, "Geeks3D.com - X11 window under Linux (Mint 10)");
-
- Atom WM_DELETE_WINDOW = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
- XSetWMProtocols(dpy, win, &WM_DELETE_WINDOW, 1);
-
- bool uname_ok = false;
- struct utsname sname;
- int ret = uname(&sname);
- if (ret != -1)
- {
- uname_ok = true;
- }
-
- XEvent e;
- while (1)
- {
- XNextEvent(dpy, &e);
- if (e.type == Expose)
- {
- int y_offset = 20;
-
- const char* s1 = "X11 test app under Linux";
-
- const char* s2 = "(C)2012 Geeks3D.com";
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, tags->title, strlen(tags->artist));
- y_offset += 20;
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, tags->artist, strlen(tags->artist));
- y_offset += 20;
-
- if (uname_ok)
- {
- char buf[256] = {0};
-
- sprintf(buf, "System information:");
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, buf, strlen(buf));
- y_offset += 15;
-
- sprintf(buf, "- System: %s", sname.sysname);
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, buf, strlen(buf));
- y_offset += 15;
-
- sprintf(buf, "- Release: %s", sname.release);
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, buf, strlen(buf));
- y_offset += 15;
-
- sprintf(buf, "- Version: %s", sname.version);
- XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, buf, strlen(buf));
- y_offset += 15;
-
-sprintf(buf, "- Machine: %s", sname.machine);
-XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, buf, strlen(buf));
-y_offset += 20;
-}
-
-
-XWindowAttributes wa;
-XGetWindowAttributes(dpy, win, &wa);
-int width = wa.width;
-int height = wa.height;
-char buf[128]={0};
-sprintf(buf, "Current window size: %dx%d", width, height);
-XDrawString(dpy, win, DefaultGC(dpy, s), 10, y_offset, buf, strlen(buf));
-y_offset += 20;
-}
-
-if (e.type == KeyPress)
-{
- char buf[128] = {0};
- KeySym keysym;
- int len = XLookupString(&e.xkey, buf, sizeof buf, &keysym, NULL);
- if (keysym == XK_Escape)
- break;
-}
-
-if ((e.type == ClientMessage) &&
- (e.xclient.data.l[0]) == WM_DELETE_WINDOW)
-{
- break;
-}
-}
-
-XDestroyWindow(dpy, win);
-XCloseDisplay(dpy);
-return 0;
-} */
-/* main loop to publish on MPRIS */
-int main1() {
-
- srv_sock = server_connect();
- if(srv_sock == -1) {
- fprintf(stderr, "Can't connect to MOCP Server at: %s\n", socket_path);
- exit(1);
- }
-
- while(1) {
- int state;
- int ev = -1;
- int cmd = -1;
-
- if (!send_int(srv_sock, CMD_GET_STATE))
- fatal ("Can't send commands!");
-
- if (!get_int(srv_sock, &ev)) {
- fatal("Can't get data from the server 1.");
- }
- // skip other updates... wait for our data.
- while(ev != EV_DATA) {
- if (!get_int(srv_sock, &ev)) {
- fatal("Can't get data from the server 1.");
- }
- }
- if(!get_int(srv_sock, &state)) {
- fatal ("Can't get state from the server!");
- }
-
- if (state == STATE_STOP) {
- fprintf(stderr, "no song playing\n");
- exit(0);
- }
- //int type = get_int_from_srv ();
- //void *data = get_event_data (type);
-
-
- char *file = get_curr_file();
- printf("current_file: %s\n", file);
-
- struct file_tags *tags= get_tags(file);
- printf("current_title: %s\n", tags->title);
-
- printf("current_artist: %s\n", tags->artist);
- printf("current_artist: %s\n", tags->album);
- printf("current_track: %d\n", tags->track);
-
- printf("current_time: %s\n", time_format(get_curr_time()));
- printf("current_length: %s\n", time_format(tags->time));
-
- tags_free(tags);
- free(file);
- sleep(1);
-
- }
- /* if (state == STATE_PAUSE) {
- printf("state paused\n");
- cmd = CMD_UNPAUSE;
- }
- else if (state == STATE_PLAY) {
- printf("state paused\n");
- cmd = CMD_PAUSE;
- }
-
- if (cmd != -1 && !send_int(sock, cmd))
- fatal ("Can't send commands!");
- if (!send_int(sock, CMD_DISCONNECT))
- fatal ("Can't send commands!");
- */
-}
-
-/*
- * DBusError err;
- DBusConnection* conn;
- int ret;
-// initialise the errors
-dbus_error_init(&err);
-
-// connect to the bus
-conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
-if (dbus_error_is_set(&err)) {
-fprintf(stderr, "Connection Error (%s)\n", err.message);
-dbus_error_free(&err);
-}
-if (NULL == conn) {
-exit(1);
-}
- *
- */