]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/qt-console/restore/restore.cpp
fececa06c2d24752491a98ea079867925f323193
[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: restore.cpp 0 2007-02-12 10:39:38Z kerns $
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    delete this;
74    new restoreDialog(m_console);
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("/");
105    this->show();
106 }
107
108 /*
109  * Fill the CList box with files at path
110  */
111 void restoreDialog::fillDirectory(const char *path)
112 {
113    char pathbuf[MAXSTRING];
114    char modes[20], user[20], group[20], size[20], date[30];
115    char file[1000];
116    char marked[10];
117    int row = 0;
118
119    m_console->setEnabled(false);
120    m_fname = path;
121
122
123    m_console->displayToPrompt();
124    bsnprintf(pathbuf, sizeof(pathbuf), "cd %s", path);
125    Dmsg1(100, "%s\n", pathbuf);
126
127    m_console->write(pathbuf);
128    m_console->display_text(pathbuf);
129    m_console->displayToPrompt();
130
131    m_console-> write_dir("dir");
132    m_console->display_text("dir");
133    while (m_console->read() > 0) {
134       char *p = m_console->msg();
135       char *l;
136       strip_trailing_junk(p);
137       if (*p == '$') {
138          break;
139       }
140       Dmsg1(200, "Got: %s\n", p);
141       if (!*p) {
142          continue;
143       }
144       l = p;
145       skip_nonspaces(&p);             /* permissions */
146       *p++ = 0;
147       bstrncpy(modes, l, sizeof(modes));
148       skip_spaces(&p);
149       skip_nonspaces(&p);             /* link count */
150       *p++ = 0;
151       skip_spaces(&p);
152       l = p;
153       skip_nonspaces(&p);             /* user */
154       *p++ = 0;
155       skip_spaces(&p);
156       bstrncpy(user, l, sizeof(user));
157       l = p;
158       skip_nonspaces(&p);             /* group */
159       *p++ = 0;
160       bstrncpy(group, l, sizeof(group));
161       skip_spaces(&p);
162       l = p;
163       skip_nonspaces(&p);             /* size */
164       *p++ = 0;
165       bstrncpy(size, l, sizeof(size));
166       skip_spaces(&p);
167       l = p;
168       skip_nonspaces(&p);             /* date/time */
169       skip_spaces(&p);
170       skip_nonspaces(&p);
171       *p++ = 0;
172       bstrncpy(date, l, sizeof(date));
173       skip_spaces(&p);
174       if (*p == '*') {
175          bstrncpy(marked, "x", sizeof(marked));
176          p++;
177       } else {
178          bstrncpy(marked, " ", sizeof(marked));
179       }
180 //    split_path_and_filename(p, &restore->path, &restore->pnl,
181 //                            &restore->file, &restore->fnl);
182
183 //    Dmsg1(000, "restore->fname=%s\n", restore->fname);
184 //    bstrncpy(file, restore->file, sizeof(file));
185       printf("modes=%s user=%s group=%s size=%s date=%s file=%s\n",
186          modes, user, group, size, date, file);
187
188 //    append to list
189
190       row++;
191    }
192
193      m_console->setEnabled(true);
194 }