$OpenBSD: patch-src_ncui_cpp,v 1.2 2018/04/17 07:51:35 gonzalo Exp $

Revision: 8ce6ee3cad09: print errors in more convenient way


Index: src/ncui.cpp
--- src/ncui.cpp.orig
+++ src/ncui.cpp
@@ -420,33 +420,35 @@ void ncui::Print() {
 
    pOpts->CopyFrom(pGlobalOpts);
    // FormatConnections can set helphintmsg so it should run before header formatting
-   if (pGlobalOpts->Hosts.size() != 0) {
-      string hosts = "Filtering by: " + Utils::JoinVector(pGlobalOpts->Hosts, ", ");
-      int coef = CompactLongLine(hosts);
-      int x = COLS/2 - hosts.size()/2;
-      if (coef > 1) x = 0;
-      mvaddstr(offset-2, x, hosts.c_str());
-      offset += coef;
-   }
-   if (pGlobalOpts->Users.size() != 0) {
-      string users = "Filtering by users: " + Utils::JoinVector(pGlobalOpts->Users, ", ");
-      int coef = CompactLongLine(users);
-      int x = COLS/2 - users.size()/2;
-      if (coef > 1) x = 0;
-      mvaddstr(offset-2, x, users.c_str());
-      offset += coef;
-   }
-   if (!pGlobalOpts->do_refresh) {
-      string msg = "Statistics refreshing disabled";
-      mvaddstr(offset-2, COLS/2 - msg.size()/2, msg.c_str());
-      offset++;
-   }
+   if (error.empty()) {
+      if (pGlobalOpts->Hosts.size() != 0) {
+         string hosts = "Filtering by: " + Utils::JoinVector(pGlobalOpts->Hosts, ", ");
+         int coef = CompactLongLine(hosts);
+         int x = COLS/2 - hosts.size()/2;
+         if (coef > 1) x = 0;
+         mvaddstr(offset-2, x, hosts.c_str());
+         offset += coef;
+      }
+      if (pGlobalOpts->Users.size() != 0) {
+         string users = "Filtering by users: " + Utils::JoinVector(pGlobalOpts->Users, ", ");
+         int coef = CompactLongLine(users);
+         int x = COLS/2 - users.size()/2;
+         if (coef > 1) x = 0;
+         mvaddstr(offset-2, x, users.c_str());
+         offset += coef;
+      }
+      if (!pGlobalOpts->do_refresh) {
+         string msg = "Statistics refreshing disabled";
+         mvaddstr(offset-2, COLS/2 - msg.size()/2, msg.c_str());
+         offset++;
+      }
 
-   vector<SQUID_Connection> sqconns_filtered = FilterConns(sqconns);
+      vector<SQUID_Connection> sqconns_filtered = FilterConns(sqconns);
 
-   if (pGlobalOpts->compactsameurls)
-      sqstat::CompactSameUrls(sqconns_filtered);
-   to_print = FormatConnections(sqconns_filtered, offset);
+      if (pGlobalOpts->compactsameurls)
+         sqstat::CompactSameUrls(sqconns_filtered);
+      to_print = FormatConnections(sqconns_filtered, offset);
+   }
 
    // HEADER: print help hint
    if (pGlobalOpts->showhelphint) {
@@ -456,9 +458,8 @@ void ncui::Print() {
       mvchgat(0, 0, helpstr.str().size(), A_REVERSE, 0, NULL);
    // or print any error
    } else if (!error.empty()) {
-      error = Utils::replace(error, "\n", " ");
-      mvaddstr(0, COLS/2 - error.size()/2, error.c_str());
-      mvchgat(0, COLS/2 - error.size()/2, error.size(), A_REVERSE, 0, NULL);
+      mvaddstr(0, 0, error.c_str());
+      return;
    // or print some info
    } else {
       header_r << "Connected to " << pGlobalOpts->host << ":" << pGlobalOpts->port;
@@ -469,84 +470,85 @@ void ncui::Print() {
 
    mvhline(offset - 2, 0, 0, COLS);
 
-   unsigned int max_y = LINES - 1; // screen height
+   if (error.empty()) {
+      unsigned int max_y = LINES - 1; // screen height
 
-   // Connections list
-   if (!pGlobalOpts->showhelp) {
-      if (to_print.size() > 0) {
-         // some magic to determine visible part of connections according to selected line
-         if (((to_print[selected_index].y) < (y_coef + offset)) && (increment < 0)) {
-            start = selected_index;
-            y_coef = to_print[selected_index].y - offset;
-         } else if ((((to_print[selected_index].y + to_print[selected_index].coef) >  (max_y + y_coef - 2)) && (increment>0)) ||
-                    (start > to_print.size())) {
-            if (to_print[selected_index].y + to_print[selected_index].coef + 2 > max_y) {
-               y_coef = to_print[selected_index].y + to_print[selected_index].coef - max_y + 2;
+      // Connections list
+      if (!pGlobalOpts->showhelp) {
+         if (to_print.size() > 0) {
+            // some magic to determine visible part of connections according to selected line
+            if (((to_print[selected_index].y) < (y_coef + offset)) && (increment < 0)) {
+               start = selected_index;
+               y_coef = to_print[selected_index].y - offset;
+            } else if ((((to_print[selected_index].y + to_print[selected_index].coef) >  (max_y + y_coef - 2)) && (increment>0)) ||
+                       (start > to_print.size())) {
+               if (to_print[selected_index].y + to_print[selected_index].coef + 2 > max_y) {
+                  y_coef = to_print[selected_index].y + to_print[selected_index].coef - max_y + 2;
+               }
+               else {
+                  y_coef = 0;
+               }
+               for (start=0; start < selected_index; start++) {
+                  if (to_print[start].new_line) continue;
+                  if (to_print[start].y > y_coef+offset-1) break;
+               }
             }
-            else {
-               y_coef = 0;
-            }
-            for (start=0; start < selected_index; start++) {
-               if (to_print[start].new_line) continue;
-               if (to_print[start].y > y_coef+offset-1) break;
-            }
-         }
 
-         unsigned int y;
-         for (vector<formattedline_t>::iterator it = to_print.begin()+start; it != to_print.end(); ++it) {
-            formattedline_t fline = *it;
-            if (fline.new_line) {
-               continue;
-            }
+            unsigned int y;
+            for (vector<formattedline_t>::iterator it = to_print.begin()+start; it != to_print.end(); ++it) {
+               formattedline_t fline = *it;
+               if (fline.new_line) {
+                  continue;
+               }
 
-            y = fline.y - y_coef;
+               y = fline.y - y_coef;
 
-            if ((y + fline.coef - 1) > (max_y - 2)) break;
+               if ((y + fline.coef - 1) > (max_y - 2)) break;
 
-            mvaddstr(y, 0, fline.str.c_str());
+               mvaddstr(y, 0, fline.str.c_str());
 
-            if (fline.highlighted) {
-               //AddWatch("id", fline.id);
-               //AddWatch("peer", fline.sconn.peer);
-               std::string::size_type found;
-               string temps;
-               for (unsigned int st = 0; st < fline.coef; st++) {
-                  temps = fline.str.substr(st*COLS, st*COLS + COLS);
-                  found = temps.find_first_not_of(" ");
-                  mvchgat(y+st, found, temps.size()-found, A_REVERSE, 0, NULL);
+               if (fline.highlighted) {
+                  //AddWatch("id", fline.id);
+                  //AddWatch("peer", fline.sconn.peer);
+                  std::string::size_type found;
+                  string temps;
+                  for (unsigned int st = 0; st < fline.coef; st++) {
+                     temps = fline.str.substr(st*COLS, st*COLS + COLS);
+                     found = temps.find_first_not_of(" ");
+                     mvchgat(y+st, found, temps.size()-found, A_REVERSE, 0, NULL);
+                  }
+                  /*AddWatch("found", Utils::itos(found));
+                  AddWatch("size", Utils::itos(fline.str.size()));
+                  AddWatch("h_coef", Utils::itos(fline.coef));*/
+                  selected_t = fline;
                }
-               /*AddWatch("found", Utils::itos(found));
-               AddWatch("size", Utils::itos(fline.str.size()));
-               AddWatch("h_coef", Utils::itos(fline.coef));*/
-               selected_t = fline;
             }
+            /*AddWatch("incr", Utils::itos(increment));
+            AddWatch("max_y", Utils::itos(max_y));
+            AddWatch("y_coef", Utils::itos(y_coef));
+            AddWatch("start", Utils::itos(start));
+            AddWatch("selec_idx", Utils::itos(selected_index));
+            AddWatch("h_y", Utils::itos(to_print[selected_index].y));
+            AddWatch("to_p[start].y", Utils::itos(to_print[start].y));*/
          }
-         /*AddWatch("incr", Utils::itos(increment));
-         AddWatch("max_y", Utils::itos(max_y));
-         AddWatch("y_coef", Utils::itos(y_coef));
-         AddWatch("start", Utils::itos(start));
-         AddWatch("selec_idx", Utils::itos(selected_index));
-         AddWatch("h_y", Utils::itos(to_print[selected_index].y));
-         AddWatch("to_p[start].y", Utils::itos(to_print[start].y));*/
+      } else {
+         mvaddstr(offset, 0, helpmsg().c_str());
       }
-   } else {
-      mvaddstr(offset, 0, helpmsg().c_str());
-   }
 
-   // FOOTER
-   string speed = sqstat::SpeedsFormat(pGlobalOpts->speed_mode, av_speed, curr_speed);
-   speed[0] = toupper(speed[0]);
-   status << speed << "\t\t";
-   status << "Active hosts: " << sqconns.size() << "\t\t";
-   status << "Active connections: " << act_conn << "\t\t";
+      // FOOTER
+      string speed = sqstat::SpeedsFormat(pGlobalOpts->speed_mode, av_speed, curr_speed);
+      speed[0] = toupper(speed[0]);
+      status << speed << "\t\t";
+      status << "Active hosts: " << sqconns.size() << "\t\t";
+      status << "Active connections: " << act_conn << "\t\t";
 
-   mvhline(max_y-1, 0, 0, COLS);
+      mvhline(max_y-1, 0, 0, COLS);
 
-   if (debug.empty())
-      mvaddstr(max_y, 0, status.str().c_str());
-   else
-      mvaddstr(max_y, COLS - 1 - debug.size(), debug.c_str());
-
+      if (debug.empty())
+         mvaddstr(max_y, 0, status.str().c_str());
+      else
+         mvaddstr(max_y, COLS - 1 - debug.size(), debug.c_str());
+   }
    move(LINES - 1, COLS - 1);
    refresh();
 }
@@ -610,7 +612,6 @@ void ncui::Loop() {
             catch (string &s) {
                ShowHelpHint(s);
             }
-            sqconns.clear();
             pGlobalOpts->freeze = false;
             break;
          case 'H':
@@ -713,7 +714,6 @@ void ncui::Loop() {
             catch (string &s) {
                ShowHelpHint(s);
             }
-            sqconns.clear();
             pGlobalOpts->freeze = false;
             break;
          case '/':
@@ -739,7 +739,6 @@ void ncui::Loop() {
             catch(string &s) {
                ShowHelpHint(s);
             }
-            sqconns.clear();
             pGlobalOpts->freeze = false;
             break;
          case 'r':
