From: Eric Bollengier Date: Tue, 24 Nov 2020 15:37:53 +0000 (+0100) Subject: Add missing files X-Git-Tag: Release-11.3.2~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0022d423a244d2031be25712de96949fa64e77f4;p=thirdparty%2Fbacula.git Add missing files --- diff --git a/bacula/src/qt-console/tray-monitor/desktop-gui/cdp-main-ui.h b/bacula/src/qt-console/tray-monitor/desktop-gui/cdp-main-ui.h new file mode 100644 index 000000000..9080365c6 --- /dev/null +++ b/bacula/src/qt-console/tray-monitor/desktop-gui/cdp-main-ui.h @@ -0,0 +1,210 @@ +/* + Bacula(R) - The Network Backup Solution + + Copyright (C) 2000-2020 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. +*/ + +#ifndef CDPUI_H +#define CPDUI_H + +#include "../tray-monitor/common.h" +#include "backupservice.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class CdpUi: public QWidget +{ + Q_OBJECT + +private: + QListWidget *_lw; + BackupService *_bservice; + +private slots: + + void handleAddFolder() { + QFileDialog dialog(this); + dialog.setLabelText(QFileDialog::Accept, "Watch"); + dialog.setDirectory("/"); + dialog.setFileMode(QFileDialog::Directory); + dialog.setOption(QFileDialog::ShowDirsOnly); + int rc = dialog.exec(); + + if (rc) { + QString folder = dialog.selectedFiles()[0]; + POOLMEM *err_msg = _bservice->watch(folder.toLatin1().constData()); + + if (err_msg == NULL) { + _lw->addItem(folder); + int r = _lw->count() - 1; + _lw->setCurrentRow(r); + } else { + QMessageBox::critical(this, "Error", err_msg); + free_and_null_pool_memory(err_msg); + } + } + } + + void handleRemoveFolder() { + int r = _lw->currentRow(); + + if (r != -1) { + QListWidgetItem *item = _lw->takeItem(r); + _bservice->stopWatching(item->text().toLatin1().constData()); + delete item; + } + } + + void handleRestoreFile() { + QFileDialog dialog(this); + //dialog.setLabelText(QFileDialog::Accept, "Restore"); + dialog.setDirectory(_bservice->_spoolPath); + dialog.setFileMode(QFileDialog::ExistingFile); + dialog.setViewMode(QFileDialog::Detail); + dialog.setAcceptMode(QFileDialog::AcceptOpen); + int rc = dialog.exec(); + + if (rc) { + QString file = dialog.selectedFiles()[0]; + + QFileDialog dialog(this); + dialog.setDirectory("/"); + dialog.setFileMode(QFileDialog::Directory); + dialog.setOption(QFileDialog::ShowDirsOnly); + rc = dialog.exec(); + + if (rc) { + QString folder = dialog.selectedFiles()[0]; + + if (QFile::copy(file, folder)) { + Dmsg2(0, "Copied file %s into %s\n", + file.toLatin1().constData(), + folder.toLatin1().constData() + ); + } else { + Dmsg2(0, "Could not copy file %s into %s\n", + file.toLatin1().constData(), + folder.toLatin1().constData() + ); + } + } + } + } + +private: + + void setupButtons(QHBoxLayout *parentBox) { + QPushButton *add = new QPushButton("Add", this); + QPushButton *remove = new QPushButton("Remove", this); + //QPushButton *restore = new QPushButton("Restore", this); + + QVBoxLayout *vbox = new QVBoxLayout(); + vbox->setSpacing(10); + vbox->setSpacing(3); + vbox->addStretch(1); + vbox->addWidget(add); + vbox->addWidget(remove); + //vbox->addWidget(restore); + vbox->addStretch(1); + connect(add, SIGNAL(clicked()), this, SLOT(handleAddFolder())); + connect(remove, SIGNAL(clicked()), this, SLOT(handleRemoveFolder())); + //connect(restore, &QPushButton::clicked, this, &CdpUi::handleRestoreFile); + parentBox->addLayout(vbox); + } + + /*Reads watched folders inside the Backup Service and show them to the user */ + void setupFoldersList(QHBoxLayout *parentLayout) { + _lw = new QListWidget(this); + + std::map::iterator it; + + for (it = _bservice->_watchers.begin(); it != _bservice->_watchers.end(); it++) { + QString fpath = QString::fromStdString(it->first); + _lw->addItem(fpath); + } + + parentLayout->addWidget(_lw); + parentLayout->addSpacing(15); + } + + void setupSpooldirLink(QVBoxLayout *parentBox, const char *spoolPath) { + POOLMEM *linkText = get_pool_memory(PM_FNAME); + Mmsg(linkText, "Spool Directory = %s", spoolPath, spoolPath); + QLabel *slink = new QLabel(); + slink->setText(linkText); + slink->setOpenExternalLinks(true); + slink->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse); + parentBox->addWidget(slink); + } + + void setupJournalLink(QVBoxLayout *parentBox, const char *journalPath) { + POOLMEM *linkText = get_pool_memory(PM_FNAME); + Mmsg(linkText, "Journal File = %s", journalPath, journalPath); + QLabel *jlink = new QLabel(); + jlink->setText(linkText); + jlink->setOpenExternalLinks(true); + jlink->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse); + parentBox->addWidget(jlink); + } + + void setupTitle(QVBoxLayout *parentBox) { + QLabel *title = new QLabel(); + title->setText("You can select folders to be watched for file changes.\n" + "The Tray Monitor will create copies of the modified files \n" + "so that they can be backed up by Bacula."); + parentBox->addWidget(title); + } + + void setupContent(QVBoxLayout *parentBox) { + QHBoxLayout *hbox = new QHBoxLayout(); + this->setupButtons(hbox); + this->setupFoldersList(hbox); + parentBox->addLayout(hbox); + } + +public: + + CdpUi(BackupService *bs, QWidget *parent = NULL): QWidget(parent) { + this->_bservice = bs; + this->setWindowTitle(QApplication::translate("CDPClient", "Watched Folders", 0)); + this->setToolTip("Watched Folders"); + + QVBoxLayout *rootBox = new QVBoxLayout(this); + setupSpooldirLink(rootBox, _bservice->_spoolPath); + setupJournalLink(rootBox, _bservice->_journal->_jPath); + setupTitle(rootBox); + setupContent(rootBox); + } +}; + +#endif