diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a44529..de8645a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ else(NOT SEEV_SYSTEM_ORIENT) find_package(orie REQUIRED) endif(NOT SEEV_SYSTEM_ORIENT) -project(seev VERSION 0.3.1) +project(seev VERSION 0.4.0) set(seev_src main.cc widgets/homepagewidget.cpp widgets/homepagewidget.hpp widgets/homepagewidget.ui diff --git a/widgets/homepagewidget.cpp b/widgets/homepagewidget.cpp index e80ff4a..c0544b0 100644 --- a/widgets/homepagewidget.cpp +++ b/widgets/homepagewidget.cpp @@ -80,7 +80,7 @@ HomePageWidget::HomePageWidget(Previewer *previewer, QWidget *parent) // Always launch with default seev configuration path setSeevConfPath(seevDefaultConfPath); - m_orieApp.read_db() + m_orieApp .add_start_path(orie::str_t()) .start_auto_update(std::chrono::seconds(ui->updIntSpin->value()), false); } @@ -88,9 +88,12 @@ HomePageWidget::HomePageWidget(Previewer *previewer, QWidget *parent) void HomePageWidget::fromJsonObj(const QJsonObject& obj) { QString orieConfPath = obj["orieConfPath"].toString(orieDefaultConfPath); // Write default configuration if the specified orie conf file does not exist - if (!m_orieApp.read_conf(orieConfPath.toStdString())) { + try { + m_orieApp.read_conf(orieConfPath.toStdString()); + } catch (std::runtime_error& e) { + qDebug() << orieConfPath << " " << e.what(); + qDebug() << tr("Initializing default configuation."); m_orieApp = orie::app::os_default(m_pool); - // TODO: Auto update stops here! m_orieApp.write_conf(orieConfPath.toStdString()); } diff --git a/widgets/orieconfwidget.cpp b/widgets/orieconfwidget.cpp index 556f427..287cd1b 100644 --- a/widgets/orieconfwidget.cpp +++ b/widgets/orieconfwidget.cpp @@ -49,27 +49,35 @@ void OrieConfWidget::writeConfFile() const { static orie::fifo_thpool dummy_pool(0); orie::app writer(dummy_pool); - for (int i = 0; i < ui->ssdRootPathLst->count(); ++i) - writer.add_root_path(ui->ssdRootPathLst->item(i)->text().toStdString(), true); - for (int i = 0; i < ui->hddRootPathLst->count(); ++i) - writer.add_root_path(ui->hddRootPathLst->item(i)->text().toStdString(), false); - for (int i = 0; i < ui->prunedPathLst->count(); ++i) - writer.add_ignored_path(ui->prunedPathLst->item(i)->text().toStdString()); - writer.set_db_path(ui->dbPathEdit->text().toStdString()) - .write_conf(m_confPath.toStdString()); + // Hard-code indexing from root + try { + writer.set_db_path(ui->dbPathEdit->text().toStdString().c_str()) + .set_root_path(orie::str_t(1, orie::separator)); + for (int i = 0; i < ui->prunedPathLst->count(); ++i) + writer.add_ignored_path(ui->prunedPathLst->item(i)->text().toStdString()); + writer.write_conf(m_confPath.toStdString()); + } catch (std::runtime_error&) { + QMessageBox::warning(nullptr, tr("Bad database file"), + tr("No read permission to selected database file.")); + } } void OrieConfWidget::readConfFile(const QString& path) { static orie::fifo_thpool dummy_pool(0); orie::app reader(dummy_pool); - reader.read_conf(path.toStdString()); - ui->dbPathEdit->setText(QString::fromStdString(reader.db_path())); - for (const auto& [pathStr, isConcur] : reader.root_paths()) { - isConcur ? ui->ssdRootPathLst->addItem(QString::fromStdString(pathStr)) - : ui->hddRootPathLst->addItem(QString::fromStdString(pathStr)); + try { + reader.read_conf(path.toStdString()); + } catch(const std::runtime_error& e) { + qDebug() << path << " " << e.what(); + qDebug() << tr("Using an empty one in config GUI."); + return; } - for (const auto& pathStr : reader.ignored_paths()) + + ui->dbPathEdit->setText(QString::fromStdString(reader.db_path())); + for (const orie::str_t& slowPathStr : reader.slow_paths()) + ui->slowPathLst->addItem(QString::fromStdString(slowPathStr)); + for (const orie::str_t& pathStr : reader.ignored_paths()) ui->prunedPathLst->addItem(QString::fromStdString(pathStr)); } @@ -79,26 +87,12 @@ OrieConfWidget::OrieConfWidget(const QString &orieConfPath, QWidget *parent) ui->setupUi(this); readConfFile(orieConfPath); - // Two "Move To" buttons - connect(ui->moveToHddBut, &QPushButton::clicked, this, [this] () { - ui->hddRootPathLst->addItem( - ui->ssdRootPathLst->takeItem(ui->ssdRootPathLst->currentRow()) - ); }); - connect(ui->moveToSsdBut, &QPushButton::clicked, this, [this] () { - ui->ssdRootPathLst->addItem( - ui->hddRootPathLst->takeItem(ui->hddRootPathLst->currentRow()) - ); }); - - connect(ui->hddRootAddBut, &QPushButton::clicked, - std::bind(__selAndAddPath, ui->hddRootPathLst)); - connect(ui->ssdRootAddBut, &QPushButton::clicked, - std::bind(__selAndAddPath, ui->ssdRootPathLst)); + connect(ui->addSlowBut, &QPushButton::clicked, + std::bind(__selAndAddPath, ui->slowPathLst)); connect(ui->addPrunedBut, &QPushButton::clicked, std::bind(__selAndAddPath, ui->prunedPathLst)); - connect(ui->hddRootEraseBut, &QPushButton::clicked, - std::bind(__delCurPath, ui->hddRootPathLst)); - connect(ui->ssdRootEraseBut, &QPushButton::clicked, - std::bind(__delCurPath, ui->ssdRootPathLst)); + connect(ui->eraseSlowBut, &QPushButton::clicked, + std::bind(__delCurPath, ui->slowPathLst)); connect(ui->erasePrunedBut, &QPushButton::clicked, std::bind(__delCurPath, ui->prunedPathLst)); connect(ui->buttonBox, &QDialogButtonBox::accepted, diff --git a/widgets/orieconfwidget.ui b/widgets/orieconfwidget.ui index a5823ea..6db3256 100644 --- a/widgets/orieconfwidget.ui +++ b/widgets/orieconfwidget.ui @@ -2,63 +2,35 @@ seev::OrieConfWidget - - - 0 - 0 - 405 - 720 - - Configuring `orient` - - - - Add - - - - - - - - - - Default one generally works. - - - Browse - - - - + Erase - - + + - - + + - Move up, it is on SSD + Erase - - - - Erase + + + + QDialogButtonBox::Ok - + Default one generally works. @@ -71,89 +43,63 @@ - - - - SSD Root Paths - - - ssdRootPathLst - - - - - - - Erase - - - - - - - HDD Root Paths - - - hddRootPathLst - - - - + Add - - + + + + Default one generally works. + - Add + Browse - - + + - Please make sure the HDD root paths are actually mounted on HDD disks, and so for SSD Root Paths. Mismatches may cause severe performance drops. If unsure, place all root paths on SSD. -Root and ignored paths CAN overlap. - - - true + Add - + Default one generally works. - - + + - + - Ignored Paths + Ignored Paths (Large, temporary or seldom used directories) + + + true prunedPathLst - - + + - Move down, it is on HDD + Slow Paths (Mount points of Spinning Disks (HDDs)) - - - - - - QDialogButtonBox::Ok + + true + + + slowPathLst