/*
- Bacula® - The Network Backup Solution
-
- Copyright (C) 2007-2008 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.
- This program is Free Software; you can redistribute it and/or
- modify it under the terms of version two of the GNU General Public
- License as published by the Free Software Foundation and included
- in the file LICENSE.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA.
-
- Bacula® is a registered trademark of Kern Sibbald.
- The licensor of Bacula is the Free Software Foundation Europe
- (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
- Switzerland, email:ftf@fsfeurope.org.
+ Bacula(R) - The Network Backup Solution
+
+ Copyright (C) 2000-2016 Kern Sibbald
+
+ The original author of Bacula is Kern Sibbald, with contributions
+ from many others, a complete list can be found in the file AUTHORS.
+
+ You may use this file and others of this release according to the
+ license defined in the LICENSE file, which includes the Affero General
+ Public License, v3.0 ("AGPLv3") and some additional permissions and
+ terms pursuant to its AGPLv3 Section 7.
+
+ This notice must be preserved when any source code is
+ conveyed and/or propagated.
+
+ Bacula(R) is a registered trademark of Kern Sibbald.
*/
/*
- * Version $Id$
- *
* FileSet Class
*
* Dirk Bartley, March 2007
*
*/
+#include "bat.h"
#include <QAbstractEventDispatcher>
#include <QMenu>
-#include "bat.h"
#include "fileset/fileset.h"
#include "util/fmtwidgetitem.h"
-FileSet::FileSet()
+FileSet::FileSet() : Pages()
{
setupUi(this);
m_name = tr("FileSets");
/* add context sensitive menu items specific to this classto the page
* selector tree. m_contextActions is QList of QActions */
m_contextActions.append(actionRefreshFileSet);
- dockPage();
}
FileSet::~FileSet()
*/
void FileSet::populateTable()
{
- if (!m_console->preventInUseConnect())
- return;
- m_populated = true;
- QBrush blackBrush(Qt::black);
+ Freeze frz(*tableWidget); /* disable updating*/
m_checkcurwidget = false;
tableWidget->clear();
tableWidget->setColumnCount(headerlist.count());
tableWidget->setHorizontalHeaderLabels(headerlist);
tableWidget->horizontalHeader()->setHighlightSections(false);
- tableWidget->setRowCount(m_console->fileset_list.count());
tableWidget->verticalHeader()->hide();
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
tableWidget->setSortingEnabled(false); /* rows move on insert if sorting enabled */
- int row = 0;
+ QString fileset_comsep("");
+ bool first = true;
+ QStringList notFoundList = m_console->fileset_list;
foreach(QString filesetName, m_console->fileset_list) {
+ if (first) {
+ fileset_comsep += "'" + filesetName + "'";
+ first = false;
+ }
+ else
+ fileset_comsep += ",'" + filesetName + "'";
+ }
+ int row = 0;
+ tableWidget->setRowCount(m_console->fileset_list.count());
+ if (fileset_comsep != "") {
/* Set up query QString and header QStringList */
QString query("");
query += "SELECT FileSet AS Name, FileSetId AS Id, CreateTime"
" FROM FileSet"
- " WHERE ";
- query += " FileSet='" + filesetName + "'";
- query += " ORDER BY CreateTime DESC LIMIT 1";
+ " WHERE FileSetId IN (SELECT MAX(FileSetId) FROM FileSet WHERE";
+ query += " FileSet IN (" + fileset_comsep + ")";
+ query += " GROUP BY FileSet) ORDER BY FileSet";
QStringList results;
if (mainWin->m_sqlDebug) {
Pmsg1(000, "FileSet query cmd : %s\n",query.toUtf8().data());
}
if (m_console->sql_cmd(query, results)) {
- int resultCount = results.count();
- if (resultCount) {
- /* only use the last one */
- QString resultline = results[resultCount - 1];
- QStringList fieldlist = resultline.split("\t");
+ QStringList fieldlist;
+
+ /* Iterate through the record returned from the query */
+ foreach (QString resultline, results) {
+ fieldlist = resultline.split("\t");
+ if (fieldlist.size() != 3) {
+ Pmsg1(000, "Unexpected line %s", resultline.toUtf8().data());
+ continue;
+ }
+
+ /* remove this fileSet from notFoundList */
+ int indexOf = notFoundList.indexOf(fieldlist[0]);
+ if (indexOf != -1) { notFoundList.removeAt(indexOf); }
- TableItemFormatter item(*tableWidget, row);
+ TableItemFormatter item(*tableWidget, row);
- /* Iterate through fields in the record */
- QStringListIterator fld(fieldlist);
- int col = 0;
+ /* Iterate through fields in the record */
+ QStringListIterator fld(fieldlist);
+ int col = 0;
- /* name */
- item.setTextFld(col++, fld.next());
+ /* name */
+ item.setTextFld(col++, fld.next());
- /* id */
- item.setNumericFld(col++, fld.next());
+ /* id */
+ item.setNumericFld(col++, fld.next());
- /* creation time */
- item.setTextFld(col++, fld.next());
+ /* creation time */
+ item.setTextFld(col++, fld.next());
+ row++;
}
}
+ }
+ foreach(QString filesetName, notFoundList) {
+ TableItemFormatter item(*tableWidget, row);
+ item.setTextFld(0, filesetName);
row++;
}
+
/* set default sorting */
- tableWidget->sortByColumn(headerlist.indexOf(tr("Create Time")), Qt::DescendingOrder);
+ tableWidget->sortByColumn(headerlist.indexOf(tr("FileSet Name")), Qt::AscendingOrder);
tableWidget->setSortingEnabled(true);
/* Resize rows and columns */
tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
+
+ /* make read only */
+ int rcnt = tableWidget->rowCount();
+ int ccnt = tableWidget->columnCount();
+ for(int r=0; r < rcnt; r++) {
+ for(int c=0; c < ccnt; c++) {
+ QTableWidgetItem* item = tableWidget->item(r, c);
+ if (item) {
+ item->setFlags(Qt::ItemFlags(item->flags() & (~Qt::ItemIsEditable)));
+ }
+ }
+ }
+ m_populated = true;
}
/*
populateTable();
createContextMenu();
}
+ if (!isOnceDocked()) {
+ dockPage();
+ }
}
/*
void FileSet::tableItemChanged(QTableWidgetItem *currentwidgetitem, QTableWidgetItem *previouswidgetitem)
{
/* m_checkcurwidget checks to see if this is during a refresh, which will segfault */
- if (m_checkcurwidget) {
+ if (m_checkcurwidget && currentwidgetitem) {
int currentRow = currentwidgetitem->row();
QTableWidgetItem *currentrowzeroitem = tableWidget->item(currentRow, 0);
m_currentlyselected = currentrowzeroitem->text();
connect(actionRefreshFileSet, SIGNAL(triggered()), this,
SLOT(populateTable()));
connect(actionStatusFileSetInConsole, SIGNAL(triggered()), this,
- SLOT(consoleStatusFileSet()));
+ SLOT(consoleShowFileSet()));
connect(actionShowJobs, SIGNAL(triggered()), this,
SLOT(showJobs()));
}
* Function responding to actionListJobsofFileSet which calls mainwin function
* to create a window of a list of jobs of this fileset.
*/
-void FileSet::consoleStatusFileSet()
+void FileSet::consoleShowFileSet()
{
- QString cmd("status fileset=");
- cmd += m_currentlyselected;
+ QString cmd("show fileset=\"");
+ cmd += m_currentlyselected + "\"";
consoleCommand(cmd);
}
*/
void FileSet::currentStackItem()
{
- if(!m_populated) {
+ if (!m_populated) {
populateTable();
/* Create the context menu for the fileset table */
createContextMenu();