From: <bar...@us...> - 2009-03-31 03:11:29
|
Revision: 8660 http://bacula.svn.sourceforge.net/bacula/?rev=8660&view=rev Author: bartleyd2 Date: 2009-03-31 03:11:25 +0000 (Tue, 31 Mar 2009) Log Message: ----------- After much effort, I think I've got it. Was having a heck of a time 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. Modified Paths: -------------- trunk/bacula/src/qt-console/bcomm/dircomm.cpp trunk/bacula/src/qt-console/console/console.cpp trunk/bacula/src/qt-console/console/console.h trunk/bacula/src/qt-console/mainwin.cpp trunk/bacula/src/qt-console/pages.cpp trunk/bacula/src/qt-console/pages.h trunk/bacula/src/qt-console/restore/prerestore.cpp trunk/bacula/src/qt-console/restore/restore.cpp trunk/bacula/src/qt-console/run/estimate.cpp trunk/bacula/src/qt-console/run/run.h Modified: trunk/bacula/src/qt-console/bcomm/dircomm.cpp =================================================================== --- trunk/bacula/src/qt-console/bcomm/dircomm.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/bcomm/dircomm.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -279,7 +279,7 @@ } 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 @@ 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); } Modified: trunk/bacula/src/qt-console/console/console.cpp =================================================================== --- trunk/bacula/src/qt-console/console/console.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/console/console.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -96,7 +96,7 @@ 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 @@ 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 @@ 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 @@ /* Position cursor to end of screen */ void Console::update_cursor() { -// QApplication::restoreOverrideCursor(); m_textEdit->moveCursor(QTextCursor::End); m_textEdit->ensureCursorVisible(); } Modified: trunk/bacula/src/qt-console/console/console.h =================================================================== --- trunk/bacula/src/qt-console/console/console.h 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/console/console.h 2009-03-31 03:11:25 UTC (rev 8660) @@ -91,7 +91,9 @@ 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(); Modified: trunk/bacula/src/qt-console/mainwin.cpp =================================================================== --- trunk/bacula/src/qt-console/mainwin.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/mainwin.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -298,6 +298,11 @@ */ 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 @@ 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.")); } Modified: trunk/bacula/src/qt-console/pages.cpp =================================================================== --- trunk/bacula/src/qt-console/pages.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/pages.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -230,25 +230,23 @@ */ 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(); } /* Modified: trunk/bacula/src/qt-console/pages.h =================================================================== --- trunk/bacula/src/qt-console/pages.h 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/pages.h 2009-03-31 03:11:25 UTC (rev 8660) @@ -70,7 +70,7 @@ 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 &); Modified: trunk/bacula/src/qt-console/restore/prerestore.cpp =================================================================== --- trunk/bacula/src/qt-console/restore/prerestore.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/restore/prerestore.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -173,6 +173,8 @@ if (selectFilesRadio->isChecked()) { setConsoleCurrent(); closeStackPage(); + /* wait will be exited in the restore page constructor */ + mainWin->waitEnter(); } else { closeStackPage(); mainWin->resetFocus(); Modified: trunk/bacula/src/qt-console/restore/restore.cpp =================================================================== --- trunk/bacula/src/qt-console/restore/restore.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/restore/restore.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -82,6 +82,9 @@ 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 @@ */ 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 @@ 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 @@ free_pool_memory(file); free_pool_memory(path); + mainWin->waitExit(); } /* @@ -291,7 +296,6 @@ 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 @@ 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 @@ 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::markButtonPushed() { + mainWin->waitEnter(); QList<QTreeWidgetItem *> treeItemList = fileWidget->selectedItems(); QTreeWidgetItem *item; char cmd[1000]; @@ -380,7 +387,7 @@ 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 @@ mainWin->set_status("Nothing selected, nothing done"); statusLine->setText("Nothing selected, nothing done"); } - + mainWin->waitExit(); } /* @@ -400,6 +407,7 @@ */ void restorePage::unmarkButtonPushed() { + mainWin->waitEnter(); QList<QTreeWidgetItem *> treeItemList = fileWidget->selectedItems(); QTreeWidgetItem *item; char cmd[1000]; @@ -409,7 +417,7 @@ 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 @@ mainWin->set_status(tr("Nothing selected, nothing done")); statusLine->setText(tr("Nothing selected, nothing done")); } - + mainWin->waitExit(); } /* @@ -432,10 +440,11 @@ 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 @@ 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 @@ 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 @@ QMessageBox::critical(this, "Error", tr(".pwd command failed"), QMessageBox::Ok); } m_console->discardToPrompt(m_conn); + mainWin->waitExit(); return m_cwd.toUtf8().data(); } Modified: trunk/bacula/src/qt-console/run/estimate.cpp =================================================================== --- trunk/bacula/src/qt-console/run/estimate.cpp 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/run/estimate.cpp 2009-03-31 03:11:25 UTC (rev 8660) @@ -55,6 +55,7 @@ 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 @@ 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 @@ 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::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)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)); Modified: trunk/bacula/src/qt-console/run/run.h =================================================================== --- trunk/bacula/src/qt-console/run/run.h 2009-03-31 00:09:34 UTC (rev 8659) +++ trunk/bacula/src/qt-console/run/run.h 2009-03-31 03:11:25 UTC (rev 8660) @@ -55,6 +55,7 @@ private: int m_conn; + bool m_aButtonPushed; }; class prunePage : public Pages, public Ui::pruneForm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |