diff options
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/utils.c | 121 | ||||
-rw-r--r-- | src/utils.h | 12 |
3 files changed, 135 insertions, 2 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 2d99bc103..fc81ed9b9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,12 +11,12 @@ AM_CPPFLAGS = $(GLIB_CFLAGS) -DLOCALE_DIR=\""$(datadir)/locale"\" -DSYSCONFDIR=\ ncmpc_headers = libmpdclient.h mpdclient.h options.h conf.h command.h \ screen.h screen_utils.h list_window.h colors.h support.h \ - wreadln.h strfsong.h ncmpc.h + wreadln.h strfsong.h utils.h ncmpc.h ncmpc_SOURCES = libmpdclient.c main.c mpdclient.c options.c conf.c command.c \ screen.c screen_utils.c screen_play.c screen_file.c \ screen_search.c screen_help.c screen_keydef.c screen_clock.c \ - list_window.c colors.c support.c wreadln.c strfsong.c \ + list_window.c colors.c support.c wreadln.c strfsong.c utils.c \ $(ncmpc_headers) diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 000000000..49841a350 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,121 @@ +/* + * $Id$ + * + * (c) 2004 by Kalle Wallin <kaw@linux.se> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <glib.h> + +#include "config.h" +#include "ncmpc.h" +#include "options.h" +#include "support.h" +#include "mpdclient.h" +#include "utils.h" + + +GList * +string_list_free(GList *string_list) +{ + GList *list = g_list_first(string_list); + + while(list) + { + g_free(list->data); + list->data=NULL; + list=list->next; + } + g_list_free(string_list); + return NULL; +} + +GList * +string_list_find(GList *string_list, gchar *str) +{ + GList *list = g_list_first(string_list); + + while(list) + { + if( strcmp(str, (gchar *) list->data) == 0 ) + return list; + list = list->next; + } + return NULL; +} + +GList * +string_list_remove(GList *string_list, gchar *str) +{ + GList *list = g_list_first(string_list); + + while(list) + { + if( strcmp(str, (gchar *) list->data) == 0 ) + { + g_free(list->data); + list->data = NULL; + return g_list_delete_link(string_list, list); + } + list = list->next; + } + return list; +} + +/* create a list suiteble for GCompletion from path */ +GList * +gcmp_list_from_path(mpdclient_t *c, gchar *path, GList *list) +{ + GList *flist = NULL; + mpdclient_filelist_t *filelist; + + if( (filelist=mpdclient_filelist_get(c, path)) == NULL ) + return list; + D("retreived filelist!\n"); + flist = filelist->list; + while( flist ) + { + filelist_entry_t *entry = flist->data; + mpd_InfoEntity *entity = entry ? entry->entity : NULL; + char *name = NULL; + + if( entity && entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY ) + { + mpd_Directory *dir = entity->info.directory; + gchar *tmp = utf8_to_locale(dir->path); + + name = g_malloc(strlen(tmp)+2); + strcpy(name, tmp); + strcat(name, "/"); + g_free(tmp); + } + else if( entity && entity->type==MPD_INFO_ENTITY_TYPE_SONG ) + { + mpd_Song *song = entity->info.song; + name = utf8_to_locale(song->file); + } + if( name ) + list = g_list_append(list, name); + + flist = flist->next; + } + mpdclient_filelist_free(filelist); + return list; +} diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 000000000..998a0dece --- /dev/null +++ b/src/utils.h @@ -0,0 +1,12 @@ +#ifndef UTILS_H +#define UTILS_H + +/* functions for lists containing strings */ +GList *string_list_free(GList *string_list); +GList *string_list_find(GList *string_list, gchar *str); +GList *string_list_remove(GList *string_list, gchar *str); + +/* create a string list from path - used for completion */ +GList *gcmp_list_from_path(mpdclient_t *c, gchar *path, GList *list); + +#endif |