]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/qt-console/restore/restore.cpp
dhb This solves the really not elegant at all way to determine what tree item
[bacula/bacula] / bacula / src / qt-console / restore / restore.cpp
index 0a7c416788898dee04db7781e996e48c8bd938f3..039db0c76837728b4e4fc39f6f3f58d97934dfb1 100644 (file)
 #include "bat.h"
 #include "restore.h"
 
-restoreDialog::restoreDialog(Console *console)
+restoreDialog::restoreDialog(Console *console )
 {
    QStringList titles;
+
    m_console = console;
-  
-   m_console->setEnabled(false);
+   m_console->notify(false);          /* this should already be off */
+
    setupUi(this);
    connect(fileWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), 
            this, SLOT(fileDoubleClicked(QTreeWidgetItem *, int)));
@@ -122,7 +123,7 @@ void restoreDialog::fillDirectory()
       }
       split_path_and_filename(p, &path, &pnl, &file, &fnl);
       item.clear();
-      item << "" << file << modes << user << group << size << date;
+      item << marked << file << modes << user << group << size << date;
       QTreeWidgetItem *ti = new QTreeWidgetItem((QTreeWidget *)0, item);
       ti->setTextAlignment(5, Qt::AlignRight); /* right align size */
       items.append(ti);
@@ -138,8 +139,8 @@ void restoreDialog::accept()
 {
    this->hide();
    m_console->write("done");
+   m_console->notify(true);
    delete this;
-   m_console->setEnabled(true);
    mainWin->resetFocus();
 }
 
@@ -150,7 +151,7 @@ void restoreDialog::reject()
    m_console->write("quit");
    mainWin->set_status("Canceled");
    delete this;
-   m_console->setEnabled(true);
+   m_console->notify(true);
    mainWin->resetFocus();
 }
 
@@ -159,13 +160,17 @@ void restoreDialog::fileDoubleClicked(QTreeWidgetItem *item, int column)
    char cmd[1000];
    if (column == 0) {                 /* mark/unmark */
       if (item->text(0) == "*") {
-         bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"\n", item->text(1).toUtf8().data());
+         bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
          item->setText(0, " ");
       } else {
-         bsnprintf(cmd, sizeof(cmd), "mark \"%s\"\n", item->text(1).toUtf8().data());
+         bsnprintf(cmd, sizeof(cmd), "mark \"%s\"", item->text(1).toUtf8().data());
          item->setText(0, "*");
       }
-      m_console->write(cmd);
+      m_console->write_dir(cmd);
+      if (m_console->read() > 0) {
+         strip_trailing_junk(m_console->msg());
+         statusLine->setText(m_console->msg());
+      }
       m_console->displayToPrompt();
       return;
    }    
@@ -191,14 +196,15 @@ void restoreDialog::markButtonPushed()
    QTreeWidgetItem *item;
    char cmd[1000];
    foreach (item, items) {
-      Dmsg1(000, "item=%s\n", item->text(1).toUtf8().data());
-      if (item->text(0) == " ") {
-         bsnprintf(cmd, sizeof(cmd), "mark \"%s\"", item->text(1).toUtf8().data());
-         item->setText(0, "*");
-         m_console->write(cmd);
-         Dmsg1(000, "cmd=%s\n", cmd);
-         m_console->displayToPrompt();
+      bsnprintf(cmd, sizeof(cmd), "mark \"%s\"", item->text(1).toUtf8().data());
+      item->setText(0, "*");
+      m_console->write_dir(cmd);
+      if (m_console->read() > 0) {
+         strip_trailing_junk(m_console->msg());
+         statusLine->setText(m_console->msg());
       }
+      Dmsg1(100, "cmd=%s\n", cmd);
+      m_console->discardToPrompt();
    }
 }
 
@@ -208,13 +214,15 @@ void restoreDialog::unmarkButtonPushed()
    QTreeWidgetItem *item;
    char cmd[1000];
    foreach (item, items) {
-      if (item->text(0) == "*") {
-         bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
-         item->setText(0, " ");
-         m_console->write(cmd);
-         Dmsg1(000, "cmd=%s\n", cmd);
-         m_console->displayToPrompt();
+      bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
+      item->setText(0, " ");
+      m_console->write_dir(cmd);
+      if (m_console->read() > 0) {
+         strip_trailing_junk(m_console->msg());
+         statusLine->setText(m_console->msg());
       }
+      Dmsg1(100, "cmd=%s\n", cmd);
+      m_console->discardToPrompt();
    }
 }
 
@@ -226,18 +234,19 @@ bool restoreDialog::cwd(const char *dir)
    int stat;
    char cd_cmd[MAXSTRING];
 
-   bsnprintf(cd_cmd, sizeof(cd_cmd), "cd \"%s\"\n", dir);
+   bsnprintf(cd_cmd, sizeof(cd_cmd), "cd \"%s\"", dir);
    Dmsg2(100, "dir=%s cmd=%s\n", dir, cd_cmd);
    m_console->write_dir(cd_cmd);
+   lineEdit->clear();
    if ((stat = m_console->read()) > 0) {
       m_cwd = m_console->msg();
+      lineEdit->insert(m_cwd);
       Dmsg2(100, "cwd=%s msg=%s\n", m_cwd.toUtf8().data(), m_console->msg());
    } else {
       Dmsg1(000, "stat=%d\n", stat);
+      QMessageBox::critical(this, "Error", "cd command failed", QMessageBox::Ok);
    }
    m_console->discardToPrompt();
-   lineEdit->clear();
-   lineEdit->insert(m_cwd);
    return true;  /* ***FIXME*** return real status */
 }
 
@@ -254,7 +263,9 @@ char *restoreDialog::get_cwd()
       Dmsg2(100, "cwd=%s msg=%s\n", m_cwd.toUtf8().data(), m_console->msg());
    } else {
       Dmsg1(000, "stat=%d\n", stat);
+      QMessageBox::critical(this, "Error", ".pwd command failed", QMessageBox::Ok);
+      Dmsg1(000, "stat=%d\n", stat);
    }
-   m_console->displayToPrompt(); 
+   m_console->discardToPrompt(); 
    return m_cwd.toUtf8().data();
 }