#include "commands.h" #include "music.h" #include static void commands_list(GSocketConnection *connection, const gchar *cmd) { GError *error = NULL; gchar **data = g_strsplit(cmd, " ", 2); for(gint i = 0; data[i]; i++) { g_debug("\tdata[%d] = %s", i, data[i]); } g_assert(data[0] != NULL); gchar *dirname; if(data[1] != NULL) { dirname = g_strdup(data[1]); } else { dirname = "/"; } g_strfreev(data); struct directory *directory = music_find_dir(dirname); if(directory == NULL) { g_warning("couldn't find directory %s", dirname); gchar *buf = g_strdup_printf("error: couldn't find directory %s\n", dirname); GSocket *socket = g_socket_connection_get_socket(connection); g_socket_send(socket, buf, strlen(buf), NULL, NULL); g_free(buf); return; } GString *string = g_string_new(NULL); for(GSList *node = directory->sub; node; node = g_slist_next(node)) { struct directory *d = node->data; gchar *name = g_path_get_basename(d->path); g_string_append_printf(string, "%s\n", name); g_free(name); } for(GSList *node = directory->files; node; node = g_slist_next(node)) { struct file *f = node->data; g_string_append_printf(string, "%s\n", f->name); } GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection); if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL, &error) == FALSE) { g_warning(error->message); g_error_free(error); } g_string_free(string, TRUE); } void commands_handle(GSocketConnection *connection, const gchar *cmd) { g_debug(cmd); if(g_strncasecmp(cmd, "list", 4) == 0) { commands_list(connection, cmd); } else { g_debug("unknown command"); gchar *buf = g_strdup_printf("error: unknown command %s\n", cmd); GSocket *socket = g_socket_connection_get_socket(connection); g_socket_send(socket, buf, strlen(buf), NULL, NULL); g_free(buf); } }