From 43f93ae79778a5bcc46484409ebde748c153bcc1 Mon Sep 17 00:00:00 2001 From: ngn Date: Thu, 18 Jul 2024 20:10:06 +0300 Subject: [PATCH] new: implement package listing --- locale/tr/LC_MESSAGES/pooler.po | 62 ++++++++++++++++----------------- src/cmd/install.c | 9 +++-- src/cmd/remove.c | 5 ++- src/cmd/update.c | 8 +++-- src/log.c | 33 ++++++++++++++++++ src/log.h | 3 ++ 6 files changed, 81 insertions(+), 39 deletions(-) diff --git a/locale/tr/LC_MESSAGES/pooler.po b/locale/tr/LC_MESSAGES/pooler.po index ecba38a..54eeb97 100644 --- a/locale/tr/LC_MESSAGES/pooler.po +++ b/locale/tr/LC_MESSAGES/pooler.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-18 19:12+0300\n" +"POT-Creation-Date: 2024-07-18 20:09+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,28 +47,28 @@ msgstr "Lütfen konfigürasyonda en az bir havuz belirtin" msgid "URL not specified for the pool: %s" msgstr "Ana makine adı havuz konfigürasyonunda belirtilmedi, geçiliyor: %s" -#: src/log.c:58 +#: src/log.c:91 msgid "y" msgstr "" -#: src/log.c:58 +#: src/log.c:91 msgid "Y" msgstr "" -#: src/log.c:59 +#: src/log.c:92 msgid "n" msgstr "" -#: src/log.c:59 +#: src/log.c:92 msgid "N" msgstr "" -#: src/log.c:62 +#: src/log.c:95 #, c-format msgid "%s [y/N] " msgstr "" -#: src/log.c:82 +#: src/log.c:115 msgid "Please answer with y/n" msgstr "" @@ -121,7 +121,7 @@ msgstr "" msgid "Here is a list of available global options:" msgstr "" -#: src/main.c:121 src/main.c:122 src/cmd/install.c:22 src/cmd/install.c:23 +#: src/main.c:121 src/main.c:122 src/cmd/install.c:23 src/cmd/install.c:24 #: src/cmd/list.c:13 src/cmd/list.c:14 src/cmd/remove.c:17 src/cmd/remove.c:18 #: src/cmd/update.c:23 #, c-format @@ -133,82 +133,80 @@ msgid "" "Licensed under GPLv3, see https://www.gnu.org/licenses/ for more information" msgstr "" -#: src/cmd/install.c:21 +#: src/cmd/install.c:22 msgid "Listing options for the install command:" msgstr "" -#: src/cmd/install.c:28 src/cmd/update.c:28 +#: src/cmd/install.c:29 src/cmd/update.c:28 msgid "There are no avaliable pools, have you synced yet?" msgstr "" -#: src/cmd/install.c:48 src/cmd/remove.c:44 +#: src/cmd/install.c:49 src/cmd/remove.c:44 #, fuzzy msgid "Failed to find " msgstr "Havuzları sekronize etmek başarısız oldu: %s" -#: src/cmd/install.c:56 src/cmd/remove.c:42 +#: src/cmd/install.c:57 src/cmd/remove.c:42 msgid "Package " msgstr "" -#: src/cmd/install.c:62 +#: src/cmd/install.c:63 #, fuzzy msgid "Failed to resolve " msgstr "Havuzları sekronize etmek başarısız oldu: %s" -#: src/cmd/install.c:68 +#: src/cmd/install.c:69 msgid "Nothing to do (no packages to install)" msgstr "" -#: src/cmd/install.c:77 src/cmd/remove.c:64 src/cmd/update.c:48 +#: src/cmd/install.c:78 src/cmd/remove.c:64 src/cmd/update.c:48 #, c-format msgid "Following %d package will be " msgstr "" -#: src/cmd/install.c:79 src/cmd/remove.c:66 src/cmd/update.c:50 +#: src/cmd/install.c:80 src/cmd/remove.c:66 src/cmd/update.c:50 #, c-format msgid "Following %d packages will be " msgstr "" -#. list all the packages -#: src/cmd/install.c:83 src/cmd/remove.c:70 +#: src/cmd/install.c:86 src/cmd/remove.c:73 msgid "Total of " msgstr "" -#. list all the packages -#: src/cmd/install.c:84 src/cmd/remove.c:71 src/cmd/update.c:54 +#: src/cmd/install.c:87 src/cmd/remove.c:74 src/cmd/update.c:56 msgid "Continue?" msgstr "" -#: src/cmd/install.c:85 src/cmd/remove.c:72 src/cmd/update.c:55 +#: src/cmd/install.c:88 src/cmd/remove.c:75 src/cmd/update.c:57 msgid "Operation cancelled" msgstr "" -#: src/cmd/install.c:91 src/cmd/update.c:65 +#: src/cmd/install.c:94 src/cmd/update.c:67 #, c-format msgid "(%d/%d) Downloading " msgstr "" -#: src/cmd/install.c:97 src/cmd/update.c:70 +#: src/cmd/install.c:100 src/cmd/update.c:72 #, fuzzy msgid "Failed to download " msgstr "Havuzları sekronize etmek başarısız oldu: %s" -#: src/cmd/install.c:106 src/cmd/update.c:83 +#: src/cmd/install.c:109 src/cmd/update.c:85 #, c-format msgid "(%d/%d) Installing " msgstr "" -#: src/cmd/install.c:112 src/cmd/update.c:88 +#: src/cmd/install.c:115 src/cmd/update.c:90 #, fuzzy msgid "Failed to install " msgstr "Havuzları sekronize etmek başarısız oldu: %s" -#: src/cmd/install.c:118 +#: src/cmd/install.c:121 #, c-format msgid "Installed %d package" msgstr "" -#: src/cmd/install.c:118 +#: src/cmd/install.c:121 #, c-format msgid "Installed all of the %d packages" msgstr "" @@ -238,22 +236,22 @@ msgstr "Havuzları sekronize etmek başarısız oldu: %s" msgid "Nothing to do (no packages to remove)" msgstr "" -#: src/cmd/remove.c:79 src/cmd/update.c:74 +#: src/cmd/remove.c:82 src/cmd/update.c:76 #, c-format msgid "(%d/%d) Removing " msgstr "" -#: src/cmd/remove.c:85 src/cmd/update.c:79 +#: src/cmd/remove.c:88 src/cmd/update.c:81 #, fuzzy msgid "Failed to remove " msgstr "Havuzları sekronize etmek başarısız oldu: %s" -#: src/cmd/remove.c:91 +#: src/cmd/remove.c:94 #, c-format msgid "Removed %d package" msgstr "" -#: src/cmd/remove.c:91 +#: src/cmd/remove.c:94 #, c-format msgid "Removed all of the %d packages" msgstr "" @@ -295,7 +293,7 @@ msgstr "%s: paket listesini yüklemek başarısız oldu (%s)" msgid "All packages are up-to-date" msgstr "" -#: src/cmd/update.c:61 +#: src/cmd/update.c:63 #, fuzzy msgid "Failed to update " msgstr "Havuzları sekronize etmek başarısız oldu: %s" diff --git a/src/cmd/install.c b/src/cmd/install.c index 67670e6..13a2f41 100644 --- a/src/cmd/install.c +++ b/src/cmd/install.c @@ -1,4 +1,5 @@ #include +#include #include #include "../util.h" @@ -26,12 +27,12 @@ bool cmd_install(lm_ctx_t *ctx, config_t *config, args_t *args){ if(lm_ctx_sync(ctx, false, NULL, NULL) <= 0){ error(_("There are no avaliable pools, have you synced yet?")); - goto end; + return false; } lm_ctx_resolve_list_t *list = NULL; + ssize_t current = 0, size = 0, save = 0; bool ret = false, r = false; - ssize_t current = 0, size = 0; char ssize[LONGSTR_MAX+3]; lm_pkg_t *pkg = NULL; char *name = NULL; @@ -78,7 +79,9 @@ bool cmd_install(lm_ctx_t *ctx, config_t *config, args_t *args){ else info(_("Following %d packages will be "FG_BOLD"INSTALLED:"FG_RESET), list->count); - // list all the packages + while((pkg = lm_ctx_resolve_next(list)) != NULL) + package_list(pkg, &save, 0); + printf("\n"); info(_("Total of "FG_BOLD"%s"FG_RESET" disk space will be used"), ssize); if(!args_get_bool(args, "yes") && !yesno(_("Continue?"))){ diff --git a/src/cmd/remove.c b/src/cmd/remove.c index 03695b8..7c54c75 100644 --- a/src/cmd/remove.c +++ b/src/cmd/remove.c @@ -19,7 +19,7 @@ bool cmd_remove(lm_ctx_t *ctx, config_t *config, args_t *args){ return true; } - ssize_t count = 0, size = 0, current = 0; + ssize_t count = 0, size = 0, current = 0, save = 0; bool ret = false, r = false; char ssize[LONGSTR_MAX+3]; lm_pkg_t *pkgs = NULL; @@ -66,6 +66,9 @@ bool cmd_remove(lm_ctx_t *ctx, config_t *config, args_t *args){ info(_("Following %d packages will be "FG_BOLD"REMOVED:"FG_RESET), count); // list all the packages + for(int i = 0; i < count; i++) + package_list(&pkgs[i], &save, 0); + printf("\n"); info(_("Total of "FG_BOLD"%s"FG_RESET" disk space will be freed"), ssize); if(!args_get_bool(args, "yes") && !yesno(_("Continue?"))){ diff --git a/src/cmd/update.c b/src/cmd/update.c index fb14727..eb32571 100644 --- a/src/cmd/update.c +++ b/src/cmd/update.c @@ -26,13 +26,13 @@ bool cmd_update(lm_ctx_t *ctx, config_t *config, args_t *args){ if(lm_ctx_sync(ctx, false, NULL, NULL) <= 0){ error(_("There are no avaliable pools, have you synced yet?")); - goto end; + return false; } lm_pkg_t *old = NULL, *new = NULL; lm_ctx_update_list_t *list = NULL; + ssize_t current = 0, save = 0; bool ret = false, r = false; - ssize_t current = 0; if((list = lm_ctx_update_list(ctx)) == NULL){ error(_("Failed to get the package update list: %s"), lm_strerror()); @@ -49,7 +49,9 @@ bool cmd_update(lm_ctx_t *ctx, config_t *config, args_t *args){ else info(_("Following %d packages will be "FG_BOLD"UPDATED:"FG_RESET), list->count); - // list all the packages + while((old = lm_ctx_update_list_next(list)) != NULL) + package_list(old, &save, 0); + printf("\n"); if(!args_get_bool(args, "yes") && !yesno(_("Continue?"))){ error(_("Operation cancelled")); diff --git a/src/log.c b/src/log.c index 176501a..6ba3393 100644 --- a/src/log.c +++ b/src/log.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -10,6 +11,38 @@ #include "intl.h" #include "log.h" +void package_list(lm_pkg_t *pkg, ssize_t *save, ssize_t max) { + ssize_t cur = 0; + + if (*save == 0) { + printf(" "); + *save = 4; + } + + if (max == 0) { + struct winsize barwin = {0}; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &barwin); + max = barwin.ws_col; + } + + cur += strlen(pkg->name); + cur += strlen(pkg->version); + *save += cur += 3; + + if (cur > max) + goto end; + + if (*save > max) { + printf("\n"); + *save = 0; + return package_list(pkg, save, max); + } + +end: + printf(FG_BOLD "%s " FG_BLUE "%s" FG_RESET, pkg->name, pkg->version); + printf(" "); +} + void info(const char *msg, ...) { va_list args; va_start(args, msg); diff --git a/src/log.h b/src/log.h index dd5ad1a..f581c55 100644 --- a/src/log.h +++ b/src/log.h @@ -1,5 +1,7 @@ #pragma once +#include #include +#include #define FG_RED "\x1b[31m" #define FG_BOLD "\x1b[1m" @@ -10,6 +12,7 @@ #define FG_MAGENTA "\x1b[35m" #define FG_RESET "\x1b[0m" +void package_list(lm_pkg_t *pkg, ssize_t *save, ssize_t max); void info(const char *msg, ...); void error(const char *msg, ...); void success(const char *msg, ...);