/*
Bacula® - The Network Backup Solution
- Copyright (C) 2007-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2007-2009 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
m_closeable = true;
m_populated = false;
- dockPage();
m_debugCnt = 0;
m_debugTrap = true;
area->setObjectName(QString::fromUtf8("area"));
area->setWidget(widget);
area->setWidgetResizable(true);
- m_splitter->addWidget(splitter);
m_splitter->addWidget(area);
+ m_splitter->addWidget(splitter);
+ splitter->setChildrenCollapsible(false);
gridLayout->addWidget(m_splitter, 0, 0, 1, 1);
*/
void restoreTree::populateDirectoryTree()
{
+ m_debugTrap = true;
+ m_debugCnt = 0;
m_slashTrap = false;
m_dirPaths.clear();
directoryTree->clear();
.arg(dir_in.length()).arg(index).arg(path).arg(direct);
Pmsg0(000, msg.toUtf8().data());
}
- if (addDirectory(path, direct)) done = true;
+ if (addDirectory(path, direct)) { done = true; }
else {
- if ((mainWin->m_miscDebug) && (m_debugTrap))
+ if ((mainWin->m_miscDebug) && (m_debugTrap)) {
Pmsg0(000, "Saving for later\n");
+ }
pathAfter.prepend(path);
dirAfter.prepend(direct);
}
/* no need to check for windows drive if unix */
if (isWin32Path(m_cwd)) {
if (!m_dirPaths.contains(m_cwd)) {
+ if (m_cwd.count('/') > 1) { return false; }
/* this is a windows drive add the base widget */
QTreeWidgetItem *item = new QTreeWidgetItem(directoryTree);
item->setText(0, m_cwd);
QBrush blackBrush(Qt::black);
QStringList headerlist = (QStringList()
- << tr("Job Id") << tr("Type") << tr("End Time") << tr("Hash") << tr("FileId"));
+ << tr("Job Id") << tr("Type") << tr("End Time") << tr("Hash") << tr("FileId") << tr("Job Type") << tr("First Volume"));
versionTable->clear();
versionTable->setColumnCount(headerlist.size());
versionTable->setHorizontalHeaderLabels(headerlist);
int pathid = m_directoryPathIdHash.value(directory, -1);
if ((pathid != -1) && (fileNameId != -1)) {
QString cmd =
- "SELECT Job.JobId AS JobId,Job.Level AS Type,Job.EndTime AS EndTime,File.MD5 AS MD5,File.FileId AS FileId"
+ "SELECT Job.JobId AS JobId, Job.Level AS Type,"
+ " Job.EndTime AS EndTime, File.MD5 AS MD5,"
+ " File.FileId AS FileId, Job.Type AS JobType,"
+ " (SELECT Media.VolumeName FROM JobMedia JOIN Media ON JobMedia.MediaId=Media.MediaId WHERE JobMedia.JobId=Job.JobId ORDER BY JobMediaId LIMIT 1) AS FirstVolume"
" FROM File"
" INNER JOIN Filename on (Filename.FilenameId=File.FilenameId)"
" INNER JOIN Path ON (Path.PathId=File.PathId)"
/* Iterate through fields in the record */
foreach (field, fieldlist) {
field = field.trimmed(); /* strip leading & trailing spaces */
+ if (column == 5 ) {
+ QByteArray jtype(field.trimmed().toAscii());
+ if (jtype.size()) {
+ field = job_type_to_str(jtype[0]);
+ }
+ }
tableItem = new QTableWidgetItem(field, 1);
tableItem->setFlags(0);
tableItem->setForeground(blackBrush);
{
QSettings settings(m_console->m_dir->name(), "bat");
settings.beginGroup(m_groupText);
- settings.setValue(m_splitText, m_splitter->saveState());
+ settings.setValue(m_splitText1, m_splitter->saveState());
+ settings.setValue(m_splitText2, splitter->saveState());
settings.endGroup();
}
void restoreTree::readSettings()
{
m_groupText = tr("RestoreTreePage");
- m_splitText = "splitterSizes_1";
+ m_splitText1 = "splitterSizes1_3";
+ m_splitText2 = "splitterSizes2_3";
QSettings settings(m_console->m_dir->name(), "bat");
settings.beginGroup(m_groupText);
- m_splitter->restoreState(settings.value(m_splitText).toByteArray());
+ if (settings.contains(m_splitText1)) { m_splitter->restoreState(settings.value(m_splitText1).toByteArray()); }
+ if (settings.contains(m_splitText2)) { splitter->restoreState(settings.value(m_splitText2).toByteArray()); }
settings.endGroup();
}
if (mainWin->m_rtPopDirDebug) Pmsg0(000, "Repopulating the Job Table\n");
QStringList headerlist = (QStringList()
- << tr("Job Id") << tr("End Time") << tr("Level")
+ << tr("Job Id") << tr("End Time") << tr("Level") << tr("Type")
<< tr("Name") << tr("Purged") << tr("TU") << tr("TD"));
m_toggleUpIndex = headerlist.indexOf(tr("TU"));
m_toggleDownIndex = headerlist.indexOf(tr("TD"));
int purgedIndex = headerlist.indexOf(tr("Purged"));
+ int typeIndex = headerlist.indexOf(tr("Type"));
jobTable->clear();
jobTable->setColumnCount(headerlist.size());
jobTable->setHorizontalHeaderLabels(headerlist);
QString jobQuery =
- "SELECT Job.Jobid AS Id,Job.EndTime AS EndTime,Job.Level AS Level,"
- "Job.Name AS JobName,Job.purgedfiles AS Purged"
+ "SELECT Job.Jobid AS Id, Job.EndTime AS EndTime,"
+ " Job.Level AS Level, Job.Type AS Type,"
+ " Job.Name AS JobName, Job.purgedfiles AS Purged"
" FROM Job"
/* INNER JOIN FileSet eliminates all restore jobs */
" INNER JOIN Client ON (Job.ClientId=Client.ClientId)"
foreach (field, fieldlist) {
field = field.trimmed(); /* strip leading & trailing spaces */
if (field != "") {
+ if (column == typeIndex) {
+ QByteArray jtype(field.trimmed().toAscii());
+ if (jtype.size()) {
+ field = job_type_to_str(jtype[0]);
+ }
+ }
tableItem = new QTableWidgetItem(field, 1);
tableItem->setFlags(0);
tableItem->setForeground(blackBrush);
int rcnt = fileTable->rowCount();
for (int row=0; row<rcnt; row++) {
QTableWidgetItem* item = fileTable->item(row, 0);
+ if (!item) { return; }
Qt::CheckState curState = item->checkState();
Qt::CheckState newState = Qt::PartiallyChecked;
/* deterimine the default state from the state of the file */
QTableWidgetItem *fileTableItem = fileTable->item(fileTable->currentRow(), 0);
+ if (!fileTableItem) { return; }
Qt::CheckState fileState = fileTableItem->checkState();
QString file = fileTableItem->text();
QString fullPath = dirName + file;
int cnt = versionTable->rowCount();
for (int row=0; row<cnt; row++) {
QTableWidgetItem* item = versionTable->item(row, 0);
+ if (!item) { break; }
Qt::CheckState curState = item->checkState();
Qt::CheckState newState = Qt::Unchecked;
" INNER JOIN Job ON (Job.JobId=File.JobId)"
" WHERE File.PathId=" + QString("%1").arg(pathid) +
" AND Job.Jobid IN (" + m_checkedJobs + ")"
- " AND File.FilenameId!=" + QString("%1").arg(m_nullFileNameId) +
" GROUP BY File.FilenameId"
") t1, File "
" INNER JOIN Filename on (Filename.FilenameId=File.FilenameId)"
} /* if (index != -1) */
return qfileIndex;
}
+
+
+void restoreTree::PgSeltreeWidgetClicked()
+{
+ dockPage();
+}