]> git.sur5r.net Git - bacula/bacula/commitdiff
Implement PopUp YES/NO dialog for bat.
authorKern Sibbald <kern@sibbald.com>
Tue, 24 Jul 2007 18:36:08 +0000 (18:36 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 24 Jul 2007 18:36:08 +0000 (18:36 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5237 91ce42f0-d328-0410-95d8-f526ca767f89

12 files changed:
bacula/src/dird/backup.c
bacula/src/dird/getmsg.c
bacula/src/dird/ua_cmds.c
bacula/src/dird/ua_input.c
bacula/src/dird/ua_label.c
bacula/src/dird/ua_update.c
bacula/src/lib/bsock.h
bacula/src/qt-console/console/console.cpp
bacula/src/qt-console/select/select.cpp
bacula/src/qt-console/select/select.h
bacula/src/version.h
bacula/technotes-2.1

index 93de742f0359656640325a0cbfba09b581e7bda3..a6a0b0aeedf1b720b841a6db8646160fd76cb9ea 100644 (file)
@@ -293,7 +293,7 @@ int wait_for_job_termination(JCR *jcr)
 
    if (is_bnet_error(fd)) {
       Jmsg(jcr, M_FATAL, 0, _("Network error with FD during %s: ERR=%s\n"),
-          job_type_to_str(jcr->JobType), bnet_strerror(fd));
+          job_type_to_str(jcr->JobType), fd->bstrerror());
    }
    bnet_sig(fd, BNET_TERMINATE);   /* tell Client we are terminating */
 
index 7a183ba43b71809a58315f3089b98f331fb0fb6b..ae4a190bf6dc30f94bc35896a7f479eba16c4666 100644 (file)
@@ -1,29 +1,7 @@
-/*
- *
- *   Bacula Director -- routines to receive network data and
- *    handle network signals. These routines handle the connections
- *    to the Storage daemon and the File daemon.
- *
- *     Kern Sibbald, August MM
- *
- *    This routine runs as a thread and must be thread reentrant.
- *
- *  Basic tasks done here:
- *    Handle  network signals (signals).
- *       Signals always have return status 0 from bnet_recv() and
- *       a zero or negative message length.
- *    Pass appropriate messages back to the caller (responses).
- *       Responses always have a digit as the first character.
- *    Handle requests for message and catalog services (requests).
- *       Requests are any message that does not begin with a digit.
- *       In affect, they are commands.
- *
- *   Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ *
+ *   Bacula Director -- routines to receive network data and
+ *    handle network signals. These routines handle the connections
+ *    to the Storage daemon and the File daemon.
+ *
+ *     Kern Sibbald, August MM
+ *
+ *    This routine runs as a thread and must be thread reentrant.
+ *
+ *  Basic tasks done here:
+ *    Handle  network signals (signals).
+ *       Signals always have return status 0 from bnet_recv() and
+ *       a zero or negative message length.
+ *    Pass appropriate messages back to the caller (responses).
+ *       Responses always have a digit as the first character.
+ *    Handle requests for message and catalog services (requests).
+ *       Requests are any message that does not begin with a digit.
+ *       In affect, they are commands.
+ *
+ *   Version $Id$
+ */
 
 #include "bacula.h"
 #include "dird.h"
@@ -107,7 +107,7 @@ int bget_dirmsg(BSOCK *bs)
 
    for (;;) {
       n = bs->recv();
-      Dmsg2(900, "bget_dirmsg %d: %s", n, bs->msg);
+      Dmsg2(100, "bget_dirmsg %d: %s", n, bs->msg);
 
       if (is_bnet_stop(bs)) {
          return n;                    /* error or terminate */
index 4c402fece0a803f4a892cd03a2898596dc42e378..d312e5b540dc868a0a7a0f414dc4994e86b5feb4 100644 (file)
@@ -478,10 +478,19 @@ static int cancel_cmd(UAContext *ua, const char *cmd)
       if (do_prompt(ua, _("Job"),  _("Choose Job to cancel"), buf, sizeof(buf)) < 0) {
          return 1;
       }
-      if (njobs == 1) {
-         if (!get_yesno(ua, _("Confirm cancel (yes/no): ")) || ua->pint32_val == 0) {
+      if (ua->api && njobs == 1) {
+         char nbuf[1000];
+         bsnprintf(nbuf, sizeof(nbuf), _("Cancel: %s\n\n%s"), buf,  
+                   _("Confirm cancel?"));
+         if (!get_yesno(ua, nbuf) || ua->pint32_val == 0) {
             return 1;
          }
+      } else {
+         if (njobs == 1) {
+            if (!get_yesno(ua, _("Confirm cancel (yes/no): ")) || ua->pint32_val == 0) {
+               return 1;
+            }
+         }
       }
       sscanf(buf, "JobId=%d Job=%127s", &njobs, JobName);
       jcr = get_jcr_by_full_name(JobName);
@@ -1364,6 +1373,7 @@ static void do_job_delete(UAContext *ua, JobId_t JobId)
 static int delete_volume(UAContext *ua)
 {
    MEDIA_DBR mr;
+   char buf[1000];
 
    if (!select_media_dbr(ua, &mr)) {
       return 1;
@@ -1372,7 +1382,9 @@ static int delete_volume(UAContext *ua)
       "and all Jobs saved on that volume from the Catalog\n"),
       mr.VolumeName);
 
-   if (!get_yesno(ua, _("Are you sure you want to delete this Volume? (yes/no): "))) {
+   bsnprintf(buf, sizeof(buf), _("Are you sure you want to delete Volume \"%s\"? (yes/no): "),
+      mr.VolumeName);
+   if (!get_yesno(ua, buf)) {
       return 1;
    }
    if (ua->pint32_val) {
@@ -1387,13 +1399,16 @@ static int delete_volume(UAContext *ua)
 static int delete_pool(UAContext *ua)
 {
    POOL_DBR  pr;
+   char buf[200];
 
    memset(&pr, 0, sizeof(pr));
 
    if (!get_pool_dbr(ua, &pr)) {
       return 1;
    }
-   if (!get_yesno(ua, _("Are you sure you want to delete this Pool? (yes/no): "))) {
+   bsnprintf(buf, sizeof(buf), _("Are you sure you want to delete Pool \"%s\"? (yes/no): "),
+      pr.Name);
+   if (!get_yesno(ua, buf)) {
       return 1;
    }
    if (ua->pint32_val) {
index 19cfe9d307b66924d7f3cc7562d5fb6f2e1c5c0b..ea27cae06e80df09ed3abcc2603292f1bbb03501 100644 (file)
@@ -147,6 +147,7 @@ bool get_yesno(UAContext *ua, const char *prompt)
    int ret;
    ua->pint32_val = 0;
    for (;;) {
+      if (ua->api) ua->UA_sock->signal(BNET_YESNO);
       if (!get_cmd(ua, prompt)) {
          return false;
       }
index 077675c01b7b0d9c7fdf80d158623fb4b64b78bf..e63b4ef1ea034a9909867b73a6823600232edcd6 100644 (file)
@@ -535,7 +535,7 @@ static void label_from_barcodes(UAContext *ua, int drive)
       }
       ua->send_msg("%4d  %s\n", vl->Slot, vl->VolName);
    }
-   if (!get_yesno(ua, _("Do you want to continue? (yes|no): ")) ||
+   if (!get_yesno(ua, _("Do you want to label these Volumes? (yes|no): ")) ||
        (ua->pint32_val == 0)) {
       goto bail_out;
    }
index b55e3dd97b9f21c9c91e8fe9c822cddfb4b2fa86..f5bd5ee164810e58102d8a3a68e30002f36bbcdc 100644 (file)
@@ -429,6 +429,7 @@ static int update_volume(UAContext *ua)
    POOL *pool;
    POOL_DBR pr;
    POOLMEM *query;
+   char buf[1000];
    char ed1[130];
    bool done = false;
    int i;
@@ -622,7 +623,9 @@ static int update_volume(UAContext *ua)
          
       case 8:                         /* InChanger */
          ua->info_msg(_("Current InChanger flag is: %d\n"), mr.InChanger);
-         if (!get_yesno(ua, _("Set InChanger flag? yes/no: "))) {
+         bsnprintf(buf, sizeof(buf), _("Set InChanger flag for Volume \"%s\": yes/no: "),
+            mr.VolumeName);
+         if (!get_yesno(ua, buf)) {
             return 0;
          }
          mr.InChanger = ua->pint32_val;
@@ -649,7 +652,7 @@ static int update_volume(UAContext *ua)
          VolFiles = ua->pint32_val;
          if (VolFiles != (int)(mr.VolFiles + 1)) {
             ua->warning_msg(_("Normally, you should only increase Volume Files by one!\n"));
-            if (!get_yesno(ua, _("Continue? (yes/no): ")) || ua->pint32_val == 0) {
+            if (!get_yesno(ua, _("Increase Volume Files? (yes/no): ")) || ua->pint32_val == 0) {
                break;
             }
          }
index 0f963bafebd61ee9e0f8ff45137d53dd4c695b54..06247da0dcce536bfed75caccae163ee96e01a9c 100644 (file)
@@ -126,6 +126,8 @@ public:
    bool is_duped() { return m_duped; };
    bool is_terminated() { return m_terminated; };
    bool is_timed_out() { return m_timed_out; };
+   bool is_stop() { return errors || is_terminated(); }
+   bool is_error() { errno = b_errno; return errors; }
    void set_spooling() { m_spool = true; };
    void clear_spooling() { m_spool = false; };
    void set_duped() { m_duped = true; };
@@ -164,7 +166,8 @@ enum {
    BNET_WARNING_MSG    = -20,         /* Warning message */
    BNET_ERROR_MSG      = -21,         /* Error message -- command failed */
    BNET_INFO_MSG       = -22,         /* Info message -- status line */
-   BNET_RUN_CMD        = -23          /* Run command follows */
+   BNET_RUN_CMD        = -23,         /* Run command follows */
+   BNET_YESNO          = -24          /* Request yes no response */
 };
 
 #define BNET_SETBUF_READ  1           /* Arg for bnet_set_buffer_size */
index c0ea468e0813eb634eca64797d4da35d408db3fe..9a81e26053b684aee768f8d1bb6621b6340a8e87 100644 (file)
@@ -682,6 +682,10 @@ int Console::read()
          if (mainWin->m_commDebug) Pmsg0(000, "START SELECT\n");
          new selectDialog(this);    
          break;
+      case BNET_YESNO:
+         if (mainWin->m_commDebug) Pmsg0(000, "YESNO\n");
+         new yesnoPopUp(this);
+         break;
       case BNET_RUN_CMD:
          if (mainWin->m_commDebug) Pmsg0(000, "RUN CMD\n");
          new runCmdPage();
index 5d483f4beb6676366d4a2b9e6b839a1341b2855e..2bef82eaaabf9ff37a8af1377b6e4cac05580096 100644 (file)
@@ -95,3 +95,31 @@ void selectDialog::index_change(int index)
 {
    m_index = index;
 }
+
+/*
+ * Handle yesno PopUp when Bacula asks a yes/no question.
+ */
+/*
+ * Read the items for the selection
+ */
+yesnoPopUp::yesnoPopUp(Console *console) 
+{
+   QMessageBox msgBox;
+
+   setAttribute(Qt::WA_DeleteOnClose);
+   console->read();                 /* get yesno question */
+   msgBox.setWindowTitle("Bat Question");
+   msgBox.setText(console->msg());
+   msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+   console->displayToPrompt();
+   switch (msgBox.exec()) {
+   case QMessageBox::Yes:
+      console->write_dir("yes");
+      break;
+   case QMessageBox::No:
+      console->write_dir("no");
+      break;
+   }
+   console->displayToPrompt();
+   mainWin->resetFocus();
+}
index 4e035b1823e54ad2ac60987408fa88fec6229f63..ae546a88883897f2ec3391418e06f4b82c3ac0d5 100644 (file)
@@ -24,4 +24,14 @@ private:
 
 };
 
+class yesnoPopUp : public QDialog
+{
+   Q_OBJECT 
+
+public:
+   yesnoPopUp(Console *console);
+
+};
+
+
 #endif /* _SELECT_H_ */
index b49f9ae369e69712ca3e6979785dd84d1ab9520c..29b7fdb7e68da0297d07c0ab001a18b378da67e9 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.1.29"
-#define BDATE   "22 July 2007"
-#define LSMDATE "22Jul07"
+#define BDATE   "24 July 2007"
+#define LSMDATE "24Jul07"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2007 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2007"       /* year for copyright messages in progs */
index 76b3e5fecd54d0718ee4b0a8991a8fa27f8032d0..d59230be6eb13e0e20cb6e2d6a28905d205ffb71 100644 (file)
@@ -1,6 +1,8 @@
               Technical notes on version 2.1
 
 General:
+24Jul07 
+kes  Implement PopUp YES/NO dialog for bat.
 23Jul07
 ebl  Fix a compilation bug when using #define BACL_WANT_NUMERIC_IDS
 22Jul07