Signed-off-by: Daniel Wallace <[email protected]>
---
 src/pacman/callback.c | 164 +++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 128 insertions(+), 36 deletions(-)

diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 01c6b61..1c766e5 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -33,6 +33,7 @@
 /* pacman */
 #include "callback.h"
 #include "util.h"
+#include "color.h"
 #include "conf.h"
 
 /* download progress bar */
@@ -223,16 +224,28 @@ void cb_event(alpm_event_t event, void *data1, void 
*data2)
                        printf(_("generating %s with %s... "), (char *)data1, 
(char *)data2);
                        break;
                case ALPM_EVENT_DELTA_PATCH_DONE:
-                       printf(_("success!\n"));
+                       if (config->color) {
+                               color_printf(COLOR_GREEN_ALL, _("success!\n"));
+                       } else {
+                               printf(_("success!\n"));
+                       }
                        break;
                case ALPM_EVENT_DELTA_PATCH_FAILED:
-                       printf(_("failed.\n"));
+                       if (config->color) {
+                               color_printf(COLOR_RED_ALL, _("failed.\n"));
+                       } else {
+                               printf(_("failed.\n"));
+                       }
                        break;
                case ALPM_EVENT_SCRIPTLET_INFO:
                        fputs((const char *)data1, stdout);
                        break;
                case ALPM_EVENT_RETRIEVE_START:
-                       printf(_(":: Retrieving packages ...\n"));
+                       if (config->color) {
+                               color_printf(COLOR_DOUBLECOLON, _(":: 
Retrieving packages ...\n"));
+                       } else {
+                               printf(_(":: Retrieving packages ...\n"));
+                       }
                        break;
                case ALPM_EVENT_DISKSPACE_START:
                        if(config->noprogressbar) {
@@ -266,32 +279,63 @@ void cb_question(alpm_question_t event, void *data1, void 
*data2,
        switch(event) {
                case ALPM_QUESTION_INSTALL_IGNOREPKG:
                        if(!config->op_s_downloadonly) {
-                               *response = yesno(_(":: %s is in 
IgnorePkg/IgnoreGroup. Install anyway?"),
+                               if (config->color) {
+                                       *response = 
color_yesno(COLOR_DOUBLECOLON, _(":: %s is in IgnorePkg/IgnoreGroup. Install 
anyway?"),
                                                                  
alpm_pkg_get_name(data1));
+
+                               } else {
+                                       *response = yesno(_(":: %s is in 
IgnorePkg/IgnoreGroup. Install anyway?"),
+                                                                 
alpm_pkg_get_name(data1));
+                               }
                        } else {
                                *response = 1;
                        }
                        break;
                case ALPM_QUESTION_REPLACE_PKG:
-                       *response = yesno(_(":: Replace %s with %s/%s?"),
-                                       alpm_pkg_get_name(data1),
-                                       (char *)data3,
-                                       alpm_pkg_get_name(data2));
+                       if (config->color) {
+                               *response = color_yesno(COLOR_DOUBLECOLON,
+                                               _(":: Replace %s with %s/%s?"),
+                                               alpm_pkg_get_name(data1),
+                                               (char *)data3,
+                                               alpm_pkg_get_name(data2));
+                       } else {
+                               *response = yesno(_(":: Replace %s with 
%s/%s?"),
+                                               alpm_pkg_get_name(data1),
+                                               (char *)data3,
+                                               alpm_pkg_get_name(data2));
+                       }
                        break;
                case ALPM_QUESTION_CONFLICT_PKG:
                        /* data parameters: target package, local package, 
conflict (strings) */
                        /* print conflict only if it contains new information */
                        if(strcmp(data1, data3) == 0 || strcmp(data2, data3) == 
0) {
-                               *response = noyes(_(":: %s and %s are in 
conflict. Remove %s?"),
-                                               (char *)data1,
-                                               (char *)data2,
-                                               (char *)data2);
+                               if (config->color) {
+                                       *response = 
color_noyes(COLOR_DOUBLECOLON,
+                                                       _(":: %s and %s are in 
conflict. Remove %s?"),
+                                                       (char *)data1,
+                                                       (char *)data2,
+                                                       (char *)data2);
+                               } else {
+                                       *response = noyes(_(":: %s and %s are 
in conflict. Remove %s?"),
+                                                       (char *)data1,
+                                                       (char *)data2,
+                                                       (char *)data2);
+                               }
                        } else {
-                               *response = noyes(_(":: %s and %s are in 
conflict (%s). Remove %s?"),
-                                               (char *)data1,
-                                               (char *)data2,
-                                               (char *)data3,
-                                               (char *)data2);
+                               if (config->color) {
+                                       *response = 
color_noyes(COLOR_DOUBLECOLON,
+                                                       _(":: %s and %s are in 
conflict (%s). Remove %s?"),
+                                                       (char *)data1,
+                                                       (char *)data2,
+                                                       (char *)data3,
+                                                       (char *)data2);
+                               } else {
+                                       *response = noyes(_(":: %s and %s are 
in conflict (%s). Remove %s?"),
+                                                       (char *)data1,
+                                                       (char *)data2,
+                                                       (char *)data3,
+                                                       (char *)data2);
+                               }
                        }
                        break;
                case ALPM_QUESTION_REMOVE_PKGS:
@@ -304,10 +348,17 @@ void cb_question(alpm_question_t event, void *data1, void 
*data2,
                                                        (char 
*)alpm_pkg_get_name(i->data));
                                        count++;
                                }
-                               printf(_n(
-                                                       ":: The following 
package cannot be upgraded due to unresolvable dependencies:\n",
-                                                       ":: The following 
packages cannot be upgraded due to unresolvable dependencies:\n",
-                                                       count));
+                               if (config->color) {
+                                       color_printf(COLOR_DOUBLECOLON, _n(
+                                                               ":: The 
following package cannot be upgraded due to unresolvable dependencies:\n",
+                                                               ":: The 
following packages cannot be upgraded due to unresolvable dependencies:\n",
+                                                               count));
+                               } else {
+                                       printf(_n(
+                                                               ":: The 
following package cannot be upgraded due to unresolvable dependencies:\n",
+                                                               ":: The 
following packages cannot be upgraded due to unresolvable dependencies:\n",
+                                                               count));
+                               }
                                list_display("     ", namelist, 
getcols(fileno(stdout)));
                                printf("\n");
                                *response = noyes(_n(
@@ -322,8 +373,13 @@ void cb_question(alpm_question_t event, void *data1, void 
*data2,
                                alpm_list_t *providers = data1;
                                size_t count = alpm_list_count(providers);
                                char *depstring = 
alpm_dep_compute_string((alpm_depend_t *)data2);
-                               printf(_(":: There are %zd providers available 
for %s:\n"), count,
-                                               depstring);
+                               if (config->color) {
+                                       color_printf(COLOR_DOUBLECOLON, _(":: 
There are %zd providers available for %s:\n"), 
+                                                       count, depstring);
+                               } else {
+                                       printf(_(":: There are %zd providers 
available for %s:\n"), count,
+                                                       depstring);
+                               }
                                free(depstring);
                                select_display(providers);
                                *response = select_question(count);
@@ -331,18 +387,33 @@ void cb_question(alpm_question_t event, void *data1, void 
*data2,
                        break;
                case ALPM_QUESTION_LOCAL_NEWER:
                        if(!config->op_s_downloadonly) {
-                               *response = yesno(_(":: %s-%s: local version is 
newer. Upgrade anyway?"),
-                                               alpm_pkg_get_name(data1),
-                                               alpm_pkg_get_version(data1));
+                               if (config->color) {
+                                       *response = 
color_yesno(COLOR_DOUBLECOLON,
+                                                       _(":: %s-%s: local 
version is newer. Upgrade anyway?"),
+                                                       
alpm_pkg_get_name(data1),
+                                                       
alpm_pkg_get_version(data1));
+                               } else {
+                                       *response = yesno(_(":: %s-%s: local 
version is newer. Upgrade anyway?"),
+                                                       
alpm_pkg_get_name(data1),
+                                                       
alpm_pkg_get_version(data1));
+                               }
                        } else {
                                *response = 1;
                        }
                        break;
                case ALPM_QUESTION_CORRUPTED_PKG:
-                       *response = yesno(_(":: File %s is corrupted (%s).\n"
-                                               "Do you want to delete it?"),
-                                       (char *)data1,
-                                       alpm_strerror(*(alpm_errno_t *)data2));
+                       if (config->color) {
+                               *response = color_yesno(COLOR_DOUBLECOLON,
+                                               _(":: File %s is corrupted 
(%s).\n"
+                                                       "Do you want to delete 
it?"),
+                                               (char *)data1,
+                                               alpm_strerror(*(alpm_errno_t 
*)data2));
+                       } else {
+                               *response = yesno(_(":: File %s is corrupted 
(%s).\n"
+                                                       "Do you want to delete 
it?"),
+                                               (char *)data1,
+                                               alpm_strerror(*(alpm_errno_t 
*)data2));
+                       }
                        break;
                case ALPM_QUESTION_IMPORT_KEY:
                        {
@@ -356,8 +427,14 @@ void cb_question(alpm_question_t event, void *data1, void 
*data2,
                                        revoked = " (revoked)";
                                }
 
-                               *response = yesno(_(":: Import PGP key %d%c/%s, 
\"%s\", created: %s%s?"),
-                                               key->length, key->pubkey_algo, 
key->fingerprint, key->uid, created, revoked);
+                               if (config->color) {
+                                       *response = 
color_yesno(COLOR_DOUBLECOLON,
+                                                       _(":: Import PGP key 
%d%c/%s, \"%s\", created: %s%s?"),
+                                                       key->length, 
key->pubkey_algo, key->fingerprint, key->uid, created, revoked);
+                               } else {
+                                       *response = yesno(_(":: Import PGP key 
%d%c/%s, \"%s\", created: %s%s?"),
+                                                       key->length, 
key->pubkey_algo, key->fingerprint, key->uid, created, revoked);
+                               }
                        }
                        break;
        }
@@ -490,8 +567,15 @@ void cb_progress(alpm_progress_t event, const char 
*pkgname, int percent,
 
        }
 
-       printf("(%*ld/%*ld) %ls%-*s", digits, (unsigned long)current,
-                       digits, (unsigned long)howmany, wcstr, padwid, "");
+       if (config->color) {
+               color_printf(COLOR_BLUE_ALL,
+                               "(%*ld/%*ld)", digits, (unsigned long)current,
+                               digits, (unsigned long)howmany);
+       } else {
+               printf("(%*ld/%*ld)", digits, (unsigned long)current,
+                               digits, (unsigned long)howmany);
+       }
+       printf(" %ls%-*s", wcstr, padwid, "");
 
        free(wcstr);
 
@@ -747,12 +831,20 @@ void cb_log(alpm_loglevel_t level, const char *fmt, 
va_list args)
 
        if(on_progress) {
                char *string = NULL;
-               pm_vasprintf(&string, level, fmt, args);
+               if (config->color) {
+                       color_pm_vasprintf(&string, level, fmt, args);
+               } else {
+                       pm_vasprintf(&string, level, fmt, args);
+               }
                if(string != NULL) {
                        output = alpm_list_add(output, string);
                }
        } else {
-               pm_vfprintf(stderr, level, fmt, args);
+               if (config->color) {
+                       color_pm_vfprintf(stderr, level, fmt, args);
+               } else {
+                       pm_vfprintf(stderr, level, fmt, args);
+               }
        }
 }
 
-- 
1.7.11.4


Reply via email to