]> git.sur5r.net Git - bacula/bacula/commitdiff
After much effort, I think I've got it. Was having a heck of a time
authorDirk H Bartley <dbartley@schupan.com>
Tue, 31 Mar 2009 03:11:25 +0000 (03:11 +0000)
committerDirk H Bartley <dbartley@schupan.com>
Tue, 31 Mar 2009 03:11:25 +0000 (03:11 +0000)
getting the estimate to work consistently when I finally saw what was
causing my difficulty.  consoleCommand needed to be able to take the
connection number.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8660 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/qt-console/bcomm/dircomm.cpp
bacula/src/qt-console/console/console.cpp
bacula/src/qt-console/console/console.h
bacula/src/qt-console/mainwin.cpp
bacula/src/qt-console/pages.cpp
bacula/src/qt-console/pages.h
bacula/src/qt-console/restore/prerestore.cpp
bacula/src/qt-console/restore/restore.cpp
bacula/src/qt-console/run/estimate.cpp
bacula/src/qt-console/run/run.h

index cd1b706d005a0cc25d68ee5d7f82155034efdf6e..700d53dc1503f2500fb0c1a132aaccc6a8400986 100644 (file)
@@ -279,7 +279,7 @@ int DirComm::read()
          } 
          app->processEvents();
          if (m_api_set && m_console->is_messagesPending() && is_notify_enabled() && m_console->hasFocus()) {
-            m_console->write_dir(m_conn, ".messages");
+            m_console->write_dir(m_conn, ".messages", false);
             m_console->messagesPending(false);
          }
       }
@@ -300,7 +300,7 @@ int DirComm::read()
       case BNET_MSGS_PENDING :
          if (is_notify_enabled() && m_console->hasFocus()) {
             if (mainWin->m_commDebug) Pmsg1(000, "conn %i MSGS PENDING\n", m_conn);
-            m_console->write_dir(m_conn, ".messages");
+            m_console->write_dir(m_conn, ".messages", false);
             m_console->displayToPrompt(m_conn);
             m_console->messagesPending(false);
          }
index bc36a8550fd05b3df489ef011e6258e2a18a0497..a3b6ee6115167236ed8bbdb8825770b1cabd7725 100644 (file)
@@ -96,7 +96,7 @@ void Console::poll_messages()
       return;
    DirComm *dircomm = m_dircommHash.value(conn);
 
-   if (mainWin->m_checkMessages && dircomm->m_at_main_prompt && hasFocus()){
+   if (mainWin->m_checkMessages && dircomm->m_at_main_prompt && hasFocus() && !mainWin->getWaitState()){
       messagesPending(true);
       dircomm->write(".messages");
       displayToPrompt(conn);
@@ -302,7 +302,10 @@ bool Console::sql_cmd(int &conn, const char *query, QStringList &results, bool d
    return true;              /* ***FIXME*** return any command error */
 }
 
-/* Send a command to the Director */
+/* 
+ * Overloads for
+ * Sending a command to the Director
+ */
 int Console::write_dir(const char *msg)
 {
    int conn;
@@ -311,16 +314,33 @@ int Console::write_dir(const char *msg)
    return conn;
 }
 
-/* Send a command to the Director */
+int Console::write_dir(const char *msg, bool dowait)
+{
+   int conn;
+   if (availableDirComm(conn))
+      write_dir(conn, msg, dowait);
+   return conn;
+}
+
 void Console::write_dir(int conn, const char *msg)
+{
+   write_dir(conn, msg, true);
+}
+
+/*
+ * Send a command to the Director
+ */
+void Console::write_dir(int conn, const char *msg, bool dowait)
 {
    DirComm *dircomm = m_dircommHash.value(conn);
 
    if (dircomm->m_sock) {
       mainWin->set_status(_("Processing command ..."));
-      mainWin->waitEnter();
+      if (dowait)
+         mainWin->waitEnter();
       dircomm->write(msg);
-      mainWin->waitExit();
+      if (dowait)
+         mainWin->waitExit();
    } else {
       mainWin->set_status( tr(" Director not connected. Click on connect button."));
       mainWin->actionConnect->setIcon(QIcon(":images/disconnected.png"));
@@ -547,7 +567,6 @@ void Console::display_html(const QString buf)
 /* Position cursor to end of screen */
 void Console::update_cursor()
 {
-//   QApplication::restoreOverrideCursor();
    m_textEdit->moveCursor(QTextCursor::End);
    m_textEdit->ensureCursorVisible();
 }
index 949689702c7fbc1f945b324ba526f87de25618e1..72d1e5d3b573432f947b4fa137202b4708ba8b2f 100644 (file)
@@ -91,7 +91,9 @@ public:
    bool sql_cmd(int &conn, QString &cmd, QStringList &results);
    bool sql_cmd(int &conn, const char *cmd, QStringList &results, bool donotify);
    int write_dir(const char *buf);
+   int write_dir(const char *buf, bool dowait);
    void write_dir(int conn, const char *buf);
+   void write_dir(int conn, const char *buf, bool dowait);
    void getDirResName(QString &);
    void setDirRes(DIRRES *dir);
    void writeSettings();
index 1b81f4efa72a29aa399e9e0e278dced34485ccd8..a1352c742960cb8944970e4cf55bfec931aa8a30 100644 (file)
@@ -298,6 +298,11 @@ void MainWin::disconnectSignals()
  */
 void MainWin::waitEnter()
 {
+   if (m_waitState){ 
+      if (mainWin->m_connDebug)
+         Pmsg0(000, "Should Never Get Here DANGER DANGER, for now I'll return\n");
+      return;
+   }
    m_waitState = true;
    if (mainWin->m_connDebug)
       Pmsg0(000, "Entering Wait State\n");
@@ -566,8 +571,8 @@ void MainWin::input_line()
    QString cmdStr = lineEdit->text();    /* Get the text */
    lineEdit->clear();                    /* clear the lineEdit box */
    if (m_currentConsole->is_connected()) {
-      /* Use consoleInput to allow typing anything */
-      m_currentConsole->consoleInput(cmdStr);
+      /* Use consoleCommand to allow typing anything */
+      m_currentConsole->consoleCommand(cmdStr);
    } else {
       set_status(tr("Director not connected. Click on connect button."));
    }
index f938eabbb3aad3ea16f2f63278139b990508a28a..7ff8686e5cabe417ffabf355ec60fd321252e48c 100644 (file)
@@ -230,25 +230,23 @@ void Pages::treeWidgetName(QString &name)
  */
 void Pages::consoleCommand(QString &command)
 {
-   consoleInput(command);
+   int conn;
+   if (m_console->availableDirComm(conn))  {
+      consoleCommand(command, conn);
+   }
 }
-
-/*
- * Function to simplify executing a console command, but does not
- *  check for the connection in use.  We need this so that we can
- *  *always* enter command from the command line.
- */
-void Pages::consoleInput(QString &command)
+void Pages::consoleCommand(QString &command, int conn)
 {
-   int conn;
    /* Bring this director's console to the front of the stack */
    setConsoleCurrent();
    QString displayhtml("<font color=\"blue\">");
    displayhtml += command + "</font>\n";
    m_console->display_html(displayhtml);
    m_console->display_text("\n");
-   conn = m_console->write_dir(command.toUtf8().data());
+   mainWin->waitEnter();
+   m_console->write_dir(conn, command.toUtf8().data(), false);
    m_console->displayToPrompt(conn);
+   mainWin->waitExit();
 }
 
 /*
index 14a409270cfaba55b9ecefde7a2006a4315c5660..1af475f2bf3a12e95817698219690c7ab2640f32 100644 (file)
@@ -70,7 +70,7 @@ public:
    void setContextMenuDockText();
    void setTreeWidgetItemDockColor();
    void consoleCommand(QString &);
-   void consoleInput(QString &);
+   void consoleCommand(QString &, int conn);
    QString &name() { return m_name; };
    void getVolumeList(QStringList &);
    void getStatusList(QStringList &);
index e78dd5deddc90d2097ac419ee60e87b3ad8c315d..7fe8107c05a945a4bb7e468af569729482dbf213 100644 (file)
@@ -173,6 +173,8 @@ void prerestorePage::okButtonPushed()
    if (selectFilesRadio->isChecked()) {
       setConsoleCurrent();
       closeStackPage();
+      /* wait will be exited in the restore page constructor */
+      mainWin->waitEnter();
    } else {
       closeStackPage();
       mainWin->resetFocus();
index 7b946f1419fa30ae6e8a44848ff9b3a8f9915c05..d1d15d98d0c179946af17d7794e7a4d9d12b1355 100644 (file)
@@ -82,6 +82,9 @@ restorePage::restorePage(int conn)
    get_cwd();
 
    readSettings();
+   /* wait was entered from pre-restore 
+    * will exit, but will reenter in fillDirectory */
+   mainWin->waitExit();
    fillDirectory();
    dockPage();
    setCurrent();
@@ -98,6 +101,7 @@ restorePage::~restorePage()
  */
 void restorePage::fillDirectory()
 {
+   mainWin->waitEnter();
    char modes[20], user[20], group[20], size[20], date[30];
    char marked[10];
    int pnl, fnl;
@@ -105,7 +109,7 @@ void restorePage::fillDirectory()
    POOLMEM *path = get_pool_memory(PM_FNAME);
 
    fileWidget->clear();
-   m_console->write_dir(m_conn, "dir");
+   m_console->write_dir(m_conn, "dir", false);
    QList<QTreeWidgetItem *> treeItemList;
    QStringList item;
    while (m_console->read(m_conn) > 0) {
@@ -176,6 +180,7 @@ void restorePage::fillDirectory()
 
    free_pool_memory(file);
    free_pool_memory(path);
+   mainWin->waitExit();
 }
 
 /*
@@ -291,7 +296,6 @@ void restorePage::directoryItemChanged(QTreeWidgetItem *currentitem,
 
 void restorePage::okButtonPushed()
 {
-// printf("In restorePage::okButtonPushed\n");
    this->hide();
    m_console->write(m_conn, "done");
    m_console->notify(m_conn, true);
@@ -317,6 +321,7 @@ void restorePage::fileDoubleClicked(QTreeWidgetItem *item, int column)
    char cmd[1000];
    statusLine->setText("");
    if (column == 0) {                 /* mark/unmark */
+      mainWin->waitEnter();
       if (item->data(0, Qt::UserRole).toBool()) {
          bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
          item->setIcon(0, QIcon(QString::fromUtf8(":images/unchecked.png")));
@@ -326,12 +331,13 @@ void restorePage::fileDoubleClicked(QTreeWidgetItem *item, int column)
          item->setIcon(0, QIcon(QString::fromUtf8(":images/check.png")));
          item->setData(0, Qt::UserRole, true);
       }
-      m_console->write_dir(m_conn, cmd);
+      m_console->write_dir(m_conn, cmd, false);
       if (m_console->read(m_conn) > 0) {
          strip_trailing_junk(m_console->msg(m_conn));
          statusLine->setText(m_console->msg(m_conn));
       }
       m_console->displayToPrompt(m_conn);
+      mainWin->waitExit();
       return;
    }    
    /* 
@@ -371,6 +377,7 @@ void restorePage::upButtonPushed()
  */
 void restorePage::markButtonPushed()
 {
+   mainWin->waitEnter();
    QList<QTreeWidgetItem *> treeItemList = fileWidget->selectedItems();
    QTreeWidgetItem *item;
    char cmd[1000];
@@ -380,7 +387,7 @@ void restorePage::markButtonPushed()
       count++;
       bsnprintf(cmd, sizeof(cmd), "mark \"%s\"", item->text(1).toUtf8().data());
       item->setIcon(0, QIcon(QString::fromUtf8(":images/check.png")));
-      m_console->write_dir(m_conn, cmd);
+      m_console->write_dir(m_conn, cmd, false);
       if (m_console->read(m_conn) > 0) {
          strip_trailing_junk(m_console->msg(m_conn));
          statusLine->setText(m_console->msg(m_conn));
@@ -392,7 +399,7 @@ void restorePage::markButtonPushed()
       mainWin->set_status("Nothing selected, nothing done");
       statusLine->setText("Nothing selected, nothing done");
    }
-      
+   mainWin->waitExit();
 }
 
 /*
@@ -400,6 +407,7 @@ void restorePage::markButtonPushed()
  */
 void restorePage::unmarkButtonPushed()
 {
+   mainWin->waitEnter();
    QList<QTreeWidgetItem *> treeItemList = fileWidget->selectedItems();
    QTreeWidgetItem *item;
    char cmd[1000];
@@ -409,7 +417,7 @@ void restorePage::unmarkButtonPushed()
       count++;
       bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
       item->setIcon(0, QIcon(QString::fromUtf8(":images/unchecked.png")));
-      m_console->write_dir(m_conn, cmd);
+      m_console->write_dir(m_conn, cmd, false);
       if (m_console->read(m_conn) > 0) {
          strip_trailing_junk(m_console->msg(m_conn));
          statusLine->setText(m_console->msg(m_conn));
@@ -421,7 +429,7 @@ void restorePage::unmarkButtonPushed()
       mainWin->set_status(tr("Nothing selected, nothing done"));
       statusLine->setText(tr("Nothing selected, nothing done"));
    }
-
+   mainWin->waitExit();
 }
 
 /*
@@ -432,10 +440,11 @@ bool restorePage::cwd(const char *dir)
    int stat;
    char cd_cmd[MAXSTRING];
 
+   mainWin->waitEnter();
    statusLine->setText("");
    bsnprintf(cd_cmd, sizeof(cd_cmd), "cd \"%s\"", dir);
    Dmsg2(dbglvl, "dir=%s cmd=%s\n", dir, cd_cmd);
-   m_console->write_dir(m_conn, cd_cmd);
+   m_console->write_dir(m_conn, cd_cmd, false);
    lineEdit->clear();
    if ((stat = m_console->read(m_conn)) > 0) {
       m_cwd = m_console->msg(m_conn);
@@ -446,6 +455,7 @@ bool restorePage::cwd(const char *dir)
       QMessageBox::critical(this, "Error", tr("cd command failed"), QMessageBox::Ok);
    }
    m_console->discardToPrompt(m_conn);
+   mainWin->waitExit();
    return true;  /* ***FIXME*** return real status */
 }
 
@@ -455,7 +465,8 @@ bool restorePage::cwd(const char *dir)
 char *restorePage::get_cwd()
 {
    int stat;
-   m_console->write_dir(m_conn, ".pwd");
+   mainWin->waitEnter();
+   m_console->write_dir(m_conn, ".pwd", false);
    Dmsg0(dbglvl, "send: .pwd\n");
    if ((stat = m_console->read(m_conn)) > 0) {
       m_cwd = m_console->msg(m_conn);
@@ -465,6 +476,7 @@ char *restorePage::get_cwd()
       QMessageBox::critical(this, "Error", tr(".pwd command failed"), QMessageBox::Ok);
    }
    m_console->discardToPrompt(m_conn); 
+   mainWin->waitExit();
    return m_cwd.toUtf8().data();
 }
 
index 4d900faa9c67a300d1338b7b5926953a2088daa4..32b8fcb12539349d0ca8b4e8945cdd9d2a3f29e5 100644 (file)
@@ -55,6 +55,7 @@ estimatePage::estimatePage()
    levelCombo->addItems(m_console->level_list);
    clientCombo->addItems(m_console->client_list);
    job_name_change(0);
+   Pmsg1(000, "connecting estimate buttons : %i\n", m_conn);
    connect(jobCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(job_name_change(int)));
    connect(okButton, SIGNAL(pressed()), this, SLOT(okButtonPushed()));
    connect(cancelButton, SIGNAL(pressed()), this, SLOT(cancelButtonPushed()));
@@ -64,10 +65,13 @@ estimatePage::estimatePage()
    dockPage();
    setCurrent();
    this->show();
+   m_aButtonPushed = false;
 }
 
 void estimatePage::okButtonPushed()
 {
+   if (m_aButtonPushed) return;
+   m_aButtonPushed = true;
    this->hide();
    QString cmd;
    QTextStream(&cmd) << "estimate" << 
@@ -83,7 +87,7 @@ void estimatePage::okButtonPushed()
       Pmsg1(000, "command : %s\n", cmd.toUtf8().data());
    }
 
-   consoleCommand(cmd);
+   consoleCommand(cmd, m_conn);
    m_console->notify(m_conn, true);
    closeStackPage();
    mainWin->resetFocus();
@@ -92,6 +96,8 @@ void estimatePage::okButtonPushed()
 
 void estimatePage::cancelButtonPushed()
 {
+   if (m_aButtonPushed) return;
+   m_aButtonPushed = true;
    mainWin->set_status(" Canceled");
    this->hide();
    m_console->notify(m_conn, true);
@@ -110,7 +116,7 @@ void estimatePage::job_name_change(int index)
 
    (void)index;
    job_defs.job_name = jobCombo->currentText();
-   if (m_console->get_job_defaults(job_defs)) {
+   if (m_console->get_job_defaults(m_conn, job_defs)) {
       filesetCombo->setCurrentIndex(filesetCombo->findText(job_defs.fileset_name, Qt::MatchExactly));
       levelCombo->setCurrentIndex(levelCombo->findText(job_defs.level, Qt::MatchExactly));
       clientCombo->setCurrentIndex(clientCombo->findText(job_defs.client_name, Qt::MatchExactly));
index 70693f473f63acbf4d3e8e0f9c3401d55478809a..e505e6809de2c16904a51069297b8b4948ab0460 100644 (file)
@@ -55,6 +55,7 @@ public slots:
 
 private:
    int m_conn;
+   bool m_aButtonPushed;
 };
 
 class prunePage : public Pages, public Ui::pruneForm