]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/qt-console/restore/restore.cpp
d5dc381263aa842d8118d569f3e8b1c5b7bdc8ec
[bacula/bacula] / bacula / src / qt-console / restore / restore.cpp
1 /*
2    Bacula® - The Network Backup Solution
3
4    Copyright (C) 2007-2007 Free Software Foundation Europe e.V.
5
6    The main author of Bacula is Kern Sibbald, with contributions from
7    many others, a complete list can be found in the file AUTHORS.
8    This program is Free Software; you can redistribute it and/or
9    modify it under the terms of version two of the GNU General Public
10    License as published by the Free Software Foundation plus additions
11    that are listed in the file LICENSE.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.
22
23    Bacula® is a registered trademark of John Walker.
24    The licensor of Bacula is the Free Software Foundation Europe
25    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
26    Switzerland, email:ftf@fsfeurope.org.
27 */
28  
29 /*
30  *   Version $Id$
31  *
32  *  Restore Class 
33  *
34  *   Kern Sibbald, February MMVI
35  *
36  */ 
37
38 #include "bat.h"
39 #include "restore.h"
40
41
42 prerestoreDialog::prerestoreDialog(Console *console)
43 {
44    m_console = console;               /* keep compiler quiet */
45    setupUi(this);
46    jobCombo->addItems(console->job_list);
47    filesetCombo->addItems(console->fileset_list);
48    clientCombo->addItems(console->client_list);
49    poolCombo->addItems(console->pool_list);
50    storageCombo->addItems(console->storage_list);
51    job_name_change(0);
52    connect(jobCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(job_name_change(int)));
53
54    this->show();
55 }
56
57 void prerestoreDialog::accept()
58 {
59    QString cmd;
60
61    this->hide();
62    
63    cmd = QString(
64          "restore select current fileset=\"%1\" client=\"%2\" pool=\"%3\" "
65              "storage=\"%4\"\n")
66              .arg(filesetCombo->currentText())
67              .arg(clientCombo->currentText())
68              .arg(poolCombo->currentText())
69              .arg(storageCombo->currentText());
70
71    m_console->write(cmd);
72    m_console->display_text(cmd);
73    new restoreDialog(m_console);
74    delete this;
75 }
76
77
78 void prerestoreDialog::reject()
79 {
80    mainWin->set_status("Canceled");
81    this->hide();
82    delete this;
83 }
84
85
86 void prerestoreDialog::job_name_change(int index)
87 {
88    job_defaults job_defs;
89
90    (void)index;
91    job_defs.job_name = jobCombo->currentText();
92    if (m_console->get_job_defaults(job_defs)) {
93       filesetCombo->setCurrentIndex(filesetCombo->findText(job_defs.fileset_name, Qt::MatchExactly));
94       clientCombo->setCurrentIndex(clientCombo->findText(job_defs.client_name, Qt::MatchExactly));
95       poolCombo->setCurrentIndex(poolCombo->findText(job_defs.pool_name, Qt::MatchExactly));
96       storageCombo->setCurrentIndex(storageCombo->findText(job_defs.store_name, Qt::MatchExactly));
97    }
98 }
99
100 restoreDialog::restoreDialog(Console *console)
101 {
102    m_console = console;
103    setupUi(this);
104    fillDirectory("/home/kern/bacula/k");
105    this->show();
106 }
107
108 /*
109  * Fill the CList box with files at path
110  */
111 void restoreDialog::fillDirectory(const char *dir)
112 {
113    char pathbuf[MAXSTRING];
114    char modes[20], user[20], group[20], size[20], date[30];
115    char marked[10];
116    int row = 0;
117    int pnl, fnl;
118    POOLMEM *file = get_pool_memory(PM_FNAME);
119    POOLMEM *path = get_pool_memory(PM_FNAME);
120
121    m_console->setEnabled(false);
122    m_fname = dir;
123
124
125    m_console->displayToPrompt();
126    bsnprintf(pathbuf, sizeof(pathbuf), "cd %s", dir);
127    Dmsg1(100, "%s\n", pathbuf);
128
129    QStringList titles;
130    titles << "Mark" << "File" << "Mode" << "User" << "Group" << "Size" << "Date";
131    fileWidget->setHeaderLabels(titles);
132
133    m_console->write(pathbuf);
134    m_console->display_text(pathbuf);
135    m_console->displayToPrompt();
136
137    m_console-> write_dir("dir");
138    m_console->display_text("dir");
139
140    QList<QTreeWidgetItem *> items;
141    QStringList item;
142    while (m_console->read() > 0) {
143       char *p = m_console->msg();
144       char *l;
145       strip_trailing_junk(p);
146       if (*p == '$') {
147          break;
148       }
149 //    Dmsg1(000, "Got: %s\n", p);
150       if (!*p) {
151          continue;
152       }
153       l = p;
154       skip_nonspaces(&p);             /* permissions */
155       *p++ = 0;
156       bstrncpy(modes, l, sizeof(modes));
157       skip_spaces(&p);
158       skip_nonspaces(&p);             /* link count */
159       *p++ = 0;
160       skip_spaces(&p);
161       l = p;
162       skip_nonspaces(&p);             /* user */
163       *p++ = 0;
164       skip_spaces(&p);
165       bstrncpy(user, l, sizeof(user));
166       l = p;
167       skip_nonspaces(&p);             /* group */
168       *p++ = 0;
169       bstrncpy(group, l, sizeof(group));
170       skip_spaces(&p);
171       l = p;
172       skip_nonspaces(&p);             /* size */
173       *p++ = 0;
174       bstrncpy(size, l, sizeof(size));
175       skip_spaces(&p);
176       l = p;
177       skip_nonspaces(&p);             /* date/time */
178       skip_spaces(&p);
179       skip_nonspaces(&p);
180       *p++ = 0;
181       bstrncpy(date, l, sizeof(date));
182       skip_spaces(&p);
183       if (*p == '*') {
184          bstrncpy(marked, "x", sizeof(marked));
185          p++;
186       } else {
187          bstrncpy(marked, " ", sizeof(marked));
188       }
189       split_path_and_filename(p, &path, &pnl,
190                               &file, &fnl);
191
192 //    printf("modes=%s user=%s group=%s size=%s date=%s path=%s file=%s\n",
193 //       modes, user, group, size, date, path, file);
194
195       item.clear();
196       item << "" << file << modes << user << group << size << date;
197       items.append(new QTreeWidgetItem((QTreeWidget *)0, item));
198
199       row++;
200    }
201    fileWidget->insertTopLevelItems(0, items);
202
203    m_console->setEnabled(true);
204 }