X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils.c;h=8f867ad36b87130d339b803bdde1ca2f4d366238;hb=aab54ebefbbb5e81e8feca6dfd08ea463df88e7c;hp=cd125099e67a72edd245608b411bcf0dbf7f14c0;hpb=a00c1bb99e0706ef8a59f14baae76f194f27d7db;p=ncmpc.git diff --git a/src/utils.c b/src/utils.c index cd12509..8f867ad 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,42 +1,32 @@ /* ncmpc (Ncurses MPD Client) - * (c) 2004-2009 The Music Player Daemon Project + * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org - + * * 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., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ + */ #include "utils.h" -#include "options.h" -#include "charset.h" +#include "i18n.h" -#include #include #include 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); + g_list_free_full(string_list, g_free); return NULL; } @@ -69,47 +59,55 @@ string_list_remove(GList *string_list, const gchar *str) return list; } -/* create a list suitable for GCompletion from path */ -GList * -gcmp_list_from_path(mpdclient_t *c, const gchar *path, GList *list, gint types) +void +format_duration_short(char *buffer, size_t length, unsigned duration) { - guint i; - mpdclient_filelist_t *filelist; - - if ((filelist = mpdclient_filelist_get(c, path)) == NULL) - return list; - - for (i = 0; i < filelist_length(filelist); ++i) { - struct filelist_entry *entry = filelist_get(filelist, i); - mpd_InfoEntity *entity = entry ? entry->entity : NULL; - char *name = NULL; - - if (entity && entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY && - types & GCMP_TYPE_DIR) { - mpd_Directory *dir = entity->info.directory; - gchar *tmp = utf8_to_locale(dir->path); - gsize size = strlen(tmp)+2; - - name = g_malloc(size); - g_strlcpy(name, tmp, size); - g_strlcat(name, "/", size); - g_free(tmp); - } else if (entity && - entity->type == MPD_INFO_ENTITY_TYPE_SONG && - types & GCMP_TYPE_FILE) { - mpd_Song *song = entity->info.song; - name = utf8_to_locale(song->file); - } else if (entity && - entity->type == MPD_INFO_ENTITY_TYPE_PLAYLISTFILE && - types & GCMP_TYPE_PLAYLIST) { - mpd_PlaylistFile *plf = entity->info.playlistFile; - name = utf8_to_locale(plf->path); - } + if (duration < 3600) + g_snprintf(buffer, length, + "%i:%02i", duration / 60, duration % 60); + else + g_snprintf(buffer, length, + "%i:%02i:%02i", duration / 3600, + (duration % 3600) / 60, duration % 60); +} - if (name) - list = g_list_append(list, name); +void +format_duration_long(char *p, size_t length, unsigned long duration) +{ + unsigned bytes_written = 0; + + if (duration / 31536000 > 0) { + if (duration / 31536000 == 1) + bytes_written = g_snprintf(p, length, "%d %s, ", 1, _("year")); + else + bytes_written = g_snprintf(p, length, "%lu %s, ", duration / 31536000, _("years")); + duration %= 31536000; + length -= bytes_written; + p += bytes_written; + } + if (duration / 604800 > 0) { + if (duration / 604800 == 1) + bytes_written = g_snprintf(p, length, "%d %s, ", + 1, _("week")); + else + bytes_written = g_snprintf(p, length, "%lu %s, ", + duration / 604800, _("weeks")); + duration %= 604800; + length -= bytes_written; + p += bytes_written; + } + if (duration / 86400 > 0) { + if (duration / 86400 == 1) + bytes_written = g_snprintf(p, length, "%d %s, ", + 1, _("day")); + else + bytes_written = g_snprintf(p, length, "%lu %s, ", + duration / 86400, _("days")); + duration %= 86400; + length -= bytes_written; + p += bytes_written; } - filelist_free(filelist); - return list; + g_snprintf(p, length, "%02lu:%02lu:%02lu", duration / 3600, + duration % 3600 / 60, duration % 3600 % 60); }