2 Bacula® - The Network Backup Solution
4 Copyright (C) 2007-2007 Free Software Foundation Europe e.V.
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.
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.
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
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.
34 * Kern Sibbald, February MMVI
42 prerestoreDialog::prerestoreDialog(Console *console)
44 m_console = console; /* keep compiler quiet */
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);
52 connect(jobCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(job_name_change(int)));
57 void prerestoreDialog::accept()
64 "restore select current fileset=\"%1\" client=\"%2\" pool=\"%3\" "
66 .arg(filesetCombo->currentText())
67 .arg(clientCombo->currentText())
68 .arg(poolCombo->currentText())
69 .arg(storageCombo->currentText());
71 m_console->write(cmd);
72 m_console->display_text(cmd);
73 new restoreDialog(m_console);
78 void prerestoreDialog::reject()
80 mainWin->set_status("Canceled");
86 void prerestoreDialog::job_name_change(int index)
88 job_defaults job_defs;
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));
100 restoreDialog::restoreDialog(Console *console)
104 connect(fileWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
105 this, SLOT(fileDoubleClicked(QTreeWidgetItem *, int)));
106 setFont(m_console->get_font());
107 fillDirectory("/home/kern/bacula/k");
112 * Fill the CList box with files at path
114 void restoreDialog::fillDirectory(const char *dir)
116 char pathbuf[MAXSTRING];
117 char modes[20], user[20], group[20], size[20], date[30];
120 POOLMEM *file = get_pool_memory(PM_FNAME);
121 POOLMEM *path = get_pool_memory(PM_FNAME);
123 m_console->setEnabled(false);
127 m_console->displayToPrompt();
128 bsnprintf(pathbuf, sizeof(pathbuf), "cd %s", dir);
129 Dmsg1(100, "%s\n", pathbuf);
132 titles << "Mark" << "File" << "Mode" << "User" << "Group" << "Size" << "Date";
133 fileWidget->setHeaderLabels(titles);
135 m_console->write(pathbuf);
136 m_console->display_text(pathbuf);
137 m_console->displayToPrompt();
139 m_console-> write_dir("dir");
140 m_console->display_text("dir");
142 QList<QTreeWidgetItem *> items;
144 while (m_console->read() > 0) {
145 char *p = m_console->msg();
147 strip_trailing_junk(p);
155 skip_nonspaces(&p); /* permissions */
157 bstrncpy(modes, l, sizeof(modes));
159 skip_nonspaces(&p); /* link count */
163 skip_nonspaces(&p); /* user */
166 bstrncpy(user, l, sizeof(user));
168 skip_nonspaces(&p); /* group */
170 bstrncpy(group, l, sizeof(group));
173 skip_nonspaces(&p); /* size */
175 bstrncpy(size, l, sizeof(size));
178 skip_nonspaces(&p); /* date/time */
182 bstrncpy(date, l, sizeof(date));
185 bstrncpy(marked, "x", sizeof(marked));
188 bstrncpy(marked, " ", sizeof(marked));
190 split_path_and_filename(p, &path, &pnl, &file, &fnl);
192 item << "" << file << modes << user << group << size << date;
193 QTreeWidgetItem *ti = new QTreeWidgetItem((QTreeWidget *)0, item);
194 ti->setTextAlignment(5, Qt::AlignRight); /* right align size */
198 fileWidget->insertTopLevelItems(0, items);
200 m_console->setEnabled(true);
201 free_pool_memory(file);
202 free_pool_memory(path);
205 void restoreDialog::accept()
208 m_console->write("done");
213 void restoreDialog::reject()
216 m_console->write("quit");
217 mainWin->set_status("Canceled");
221 void restoreDialog::fileDoubleClicked(QTreeWidgetItem *item, int column)
223 printf("Text=%s column=%d\n", item->text(1).toUtf8().data(), column);