X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils.c;h=d46f521f53b9ff9e816e9b1898d7145d85ef6b58;hb=3af5c3a185fc23b8fb9d528a9c0a14f70093ac70;hp=23408f2f2910b5f78f3e4d6eba7c518d1152d186;hpb=b39c1ef247a01c538bf61d8b2bbc0730b9198a9a;p=ncmpc.git diff --git a/src/utils.c b/src/utils.c index 23408f2..d46f521 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,26 +1,27 @@ /* 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 "mpdclient.h" #include #include @@ -72,21 +73,20 @@ string_list_remove(GList *string_list, const gchar *str) /* create a list suitable for GCompletion from path */ GList * -gcmp_list_from_path(mpdclient_t *c, const gchar *path, GList *list, gint types) +gcmp_list_from_path(struct mpdclient *c, const gchar *path, + GList *list, gint types) { - guint i; - mpdclient_filelist_t *filelist; - - if ((filelist = mpdclient_filelist_get(c, path)) == NULL) + struct mpd_connection *connection = mpdclient_get_connection(c); + if (connection == NULL) return list; - for (i = 0; i < filelist_length(filelist); ++i) { - const struct filelist_entry *entry = filelist_get(filelist, i); - const struct mpd_entity *entity = entry ? entry->entity : NULL; - char *name = NULL; + mpd_send_list_meta(connection, path); - if (entity != NULL && - mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY && + struct mpd_entity *entity; + while ((entity = mpd_recv_entity(connection)) != NULL) { + char *name; + + if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY && types & GCMP_TYPE_DIR) { const struct mpd_directory *dir = mpd_entity_get_directory(entity); @@ -97,77 +97,77 @@ gcmp_list_from_path(mpdclient_t *c, const gchar *path, GList *list, gint types) g_strlcpy(name, tmp, size); g_strlcat(name, "/", size); g_free(tmp); - } else if (entity != NULL && - mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG && + } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG && types & GCMP_TYPE_FILE) { const struct mpd_song *song = mpd_entity_get_song(entity); name = utf8_to_locale(mpd_song_get_uri(song)); - } else if (entity != NULL && - mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST && + } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST && types & GCMP_TYPE_PLAYLIST) { const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); name = utf8_to_locale(mpd_playlist_get_path(playlist)); + } else { + mpd_entity_free(entity); + continue; } - if (name) - list = g_list_append(list, name); + list = g_list_append(list, name); + mpd_entity_free(entity); } - filelist_free(filelist); return list; } -char * -time_seconds_to_durationstr(unsigned long time_seconds) +void +format_duration_short(char *buffer, size_t length, unsigned duration) +{ + 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); +} + +void +format_duration_long(char *p, size_t length, unsigned long duration) { - const char *year = _("year"); - const char *years = _("years"); - const char *week = _("week"); - const char *weeks = _("weeks"); - const char *day = _("day"); - const char *days = _("days"); - char *duration; - char *iter; unsigned bytes_written = 0; - unsigned length = utf8_width(years) + - utf8_width(weeks) + utf8_width(days) + 32; - - duration = g_malloc(length); - iter = duration; - if (time_seconds / 31536000 > 0) { - if (time_seconds / 31536000 == 1) - bytes_written = g_snprintf(iter, length, "%d %s, ", 1, year); + + if (duration / 31536000 > 0) { + if (duration / 31536000 == 1) + bytes_written = g_snprintf(p, length, "%d %s, ", 1, _("year")); else - bytes_written = g_snprintf(iter, length, "%lu %s, ", time_seconds / 31536000, years); - time_seconds %= 31536000; + bytes_written = g_snprintf(p, length, "%lu %s, ", duration / 31536000, _("years")); + duration %= 31536000; length -= bytes_written; - iter += bytes_written; + p += bytes_written; } - if (time_seconds / 604800 > 0) { - if (time_seconds / 604800 == 1) - bytes_written = g_snprintf(iter, length, "%d %s, ", 1, week); + if (duration / 604800 > 0) { + if (duration / 604800 == 1) + bytes_written = g_snprintf(p, length, "%d %s, ", + 1, _("week")); else - bytes_written = g_snprintf(iter, length, "%lu %s, ", time_seconds / 604800, weeks); - time_seconds %= 604800; + bytes_written = g_snprintf(p, length, "%lu %s, ", + duration / 604800, _("weeks")); + duration %= 604800; length -= bytes_written; - iter += bytes_written; + p += bytes_written; } - if (time_seconds / 86400 > 0) { - if (time_seconds / 86400 == 1) - bytes_written = g_snprintf(iter, length, "%d %s, ", 1, day); + if (duration / 86400 > 0) { + if (duration / 86400 == 1) + bytes_written = g_snprintf(p, length, "%d %s, ", + 1, _("day")); else - bytes_written = g_snprintf(iter, length, "%lu %s, ", time_seconds / 86400, days); - time_seconds %= 86400; + bytes_written = g_snprintf(p, length, "%lu %s, ", + duration / 86400, _("days")); + duration %= 86400; length -= bytes_written; - iter += bytes_written; + p += bytes_written; } - g_snprintf(iter, length, "%02lu:%02lu:%02lu", - time_seconds / 3600, - time_seconds % 3600 / 60, - time_seconds % 3600 % 60); - return duration; -} - + g_snprintf(p, length, "%02lu:%02lu:%02lu", duration / 3600, + duration % 3600 / 60, duration % 3600 % 60); +}