summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2025-05-09 08:56:05 +0200
committerArno <arno@disconnect.de>2025-05-09 08:56:05 +0200
commit9276db1f7d466668b5e5a0dd13a05eb3cf328c70 (patch)
tree972e4d816c9fdec99633f95d66d0aed60dac34cf
parentf18b4201d891aea10a4b38bd923f4c8fc4ee7209 (diff)
downloadSheMov-9276db1f7d466668b5e5a0dd13a05eb3cf328c70.tar.gz
SheMov-9276db1f7d466668b5e5a0dd13a05eb3cf328c70.tar.bz2
SheMov-9276db1f7d466668b5e5a0dd13a05eb3cf328c70.zip
Enhance usb-storage
Make it possible to define more than just one usb storage and store them to the new QSettings item "paths/usball", a QStringList while repurposing the old setting "paths/usb" for writing. When reading, iterate over all entries in usball until the file is found. For writing, or moving files to archive, use paths/usb as target.
-rw-r--r--configurationdialog.cpp51
-rw-r--r--configurationdialog.h3
-rw-r--r--helper.cpp12
-rw-r--r--randomtab.cpp20
4 files changed, 65 insertions, 21 deletions
diff --git a/configurationdialog.cpp b/configurationdialog.cpp
index df7e2fb..1131293 100644
--- a/configurationdialog.cpp
+++ b/configurationdialog.cpp
@@ -30,6 +30,7 @@
#include <QStandardItem>
#include <QScreen>
#include <QInputDialog>
+#include <QFileDialog>
#include "configurationdialog.h"
#include "programconfigurator.h"
@@ -56,10 +57,7 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : S
mBurnDir = new QLineEdit;
mBurnDir->setCompleter(fsCompleter);
pathL->addRow(tr("Burn directory"), mBurnDir);
- mUSBDir = new QLineEdit;
- mUSBDir->setCompleter(fsCompleter);
- pathL->addRow(tr("USB directory"), mUSBDir);
- mFfProbePath = new QLineEdit;
+ mFfProbePath = new QLineEdit;
mFfProbePath->setCompleter(fsCompleter);
pathL->addRow(tr("Path to ffprobe"), mFfProbePath);
mFfMpegPath = new QLineEdit;
@@ -74,9 +72,28 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : S
mUnpackPath->setCompleter(fsCompleter);
pathL->addRow(tr("Unpack directory"), mUnpackPath);
pathBox->setLayout(pathL);
- QVBoxLayout *pathLayout = new QVBoxLayout;
- pathLayout->addWidget(pathBox);
- pathWidget->setLayout(pathLayout);
+ QVBoxLayout *pathLayout = new QVBoxLayout;
+ pathLayout->addWidget(pathBox);
+ pathWidget->setLayout(pathLayout);
+
+ // usb paths
+ QHBoxLayout *usbSelectorL = new QHBoxLayout;
+ usbSelectorL->addWidget(new QLabel(tr("USB directory")));
+ mUSBDir = new QComboBox;
+ usbSelectorL->addWidget(mUSBDir);
+ QHBoxLayout *usbButtonL = new QHBoxLayout;
+ QPushButton *removeUSB = new QPushButton("Remove USB path");
+ connect(removeUSB, &QPushButton::clicked, mUSBDir, [=]() { mUSBDir->removeItem(mUSBDir->currentIndex()); });
+ usbButtonL->addWidget(removeUSB);
+ QPushButton *addUSB = new QPushButton(tr("Add USB path"));
+ connect(addUSB, &QPushButton::clicked, this, &ConfigurationDialog::addUSBPath);
+ usbButtonL->addWidget(addUSB);
+ QVBoxLayout *usbBoxL = new QVBoxLayout;
+ usbBoxL->addLayout(usbSelectorL);
+ usbBoxL->addLayout(usbButtonL);
+ QGroupBox *usbBox = new QGroupBox(tr("USB paths"));
+ usbBox->setLayout(usbBoxL);
+ pathLayout->addWidget(usbBox);
//expensive option
QGroupBox *expensiveBox = new QGroupBox(tr("Expensive file operations"));
@@ -443,7 +460,8 @@ void ConfigurationDialog::readSettings(){
//read paths
mArchiveDir->setText(s.value("paths/archivedir").toString());
mBurnDir->setText(s.value("paths/burn").toString());
- mUSBDir->setText(s.value("paths/usb").toString());
+ mUSBDir->addItems(s.value("paths/usball").toStringList());
+ mUSBDir->setCurrentText(s.value("paths/usb").toString());
mFfProbePath->setText(s.value("paths/ffprobe").toString());
mFfMpegPath->setText(s.value("paths/ffmpeg").toString());
mDvdMountPath->setText(s.value("paths/dvdmount").toString());
@@ -498,7 +516,12 @@ void ConfigurationDialog::writeSettings(){
//write paths
s.setValue("paths/archivedir", mArchiveDir->text());
s.setValue("paths/burn", mBurnDir->text());
- s.setValue("paths/usb", mUSBDir->text());
+ s.setValue("paths/usb", mUSBDir->currentText());
+ QStringList allPaths;
+ for(int i = 0; i < mUSBDir->count(); ++i){
+ allPaths << mUSBDir->itemText(i);
+ }
+ s.setValue("paths/usball", allPaths);
QString ffprobe = mFfProbePath->text();
QFileInfo ffProbeInfo(ffprobe);
if(ffProbeInfo.exists() && ffProbeInfo.isExecutable()){
@@ -680,6 +703,16 @@ void ConfigurationDialog::delReason(){
}
}
+void ConfigurationDialog::addUSBPath(){
+ const QString newDir = QFileDialog::getExistingDirectory(this, tr("Select USB directory"));
+ if(newDir.isEmpty()){
+ return;
+ }
+ if(mUSBDir->findText(newDir) == -1){
+ mUSBDir->addItem(newDir);
+ }
+}
+
void ConfigurationDialog::setColor(QWidget *label){
QLabel *curLabel = qobject_cast<QLabel*>(label);
if(!curLabel){
diff --git a/configurationdialog.h b/configurationdialog.h
index 704074f..d64a73b 100644
--- a/configurationdialog.h
+++ b/configurationdialog.h
@@ -40,6 +40,7 @@ class ConfigurationDialog : public SmDialog {
void editReason();
void addReason();
void delReason();
+ void addUSBPath();
private:
void readSettings();
@@ -53,7 +54,7 @@ class ConfigurationDialog : public SmDialog {
ProgramConfigurator *mMovieConfig;
QLineEdit *mArchiveDir;
QLineEdit *mBurnDir;
- QLineEdit *mUSBDir;
+ QComboBox *mUSBDir;
QLineEdit *mFfProbePath;
QLineEdit *mFfMpegPath;
QLineEdit *mDvdMountPath;
diff --git a/helper.cpp b/helper.cpp
index a32d137..2f8e3b2 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -142,7 +142,7 @@ namespace Helper {
const QString createUSBPath(const QString &filename, const QString &seriesName, const QString &subtitle, int dvdNo, int seriesNo){
QSettings s;
- QString usbPath = s.value("paths/usb").toString();
+ QStringList allUsbPaths = s.value("paths/usball").toStringList();
QString seriesDir = seriesName;
if(seriesNo > 0){
@@ -151,7 +151,15 @@ namespace Helper {
seriesDir.append(QString(" - %1").arg(subtitle));
}
seriesDir.replace(' ', '.');
- QString retval = QString("%1/DVD_%2/%3/%4").arg(usbPath, QString::number(dvdNo), seriesDir, filename);
+ QString templ = QString("%1/DVD_%2/%3/%4");
+ QString retval;
+ for( const QString &up : std::as_const(allUsbPaths)){
+ retval = templ.arg(up, QString::number(dvdNo), seriesDir, filename);
+ QFileInfo retInfo(retval);
+ if(retInfo.exists()){
+ return retval;
+ }
+ }
return retval;
}
diff --git a/randomtab.cpp b/randomtab.cpp
index b80fd9b..2d83d9e 100644
--- a/randomtab.cpp
+++ b/randomtab.cpp
@@ -211,15 +211,17 @@ void RandomTab::readSettings(){
QStringList RandomTab::validDvdNos(){
QStringList retval;
QSettings s;
- QString usbDir = s.value("paths/usb").toString();
- logMessage(QString(tr("Traversing %1")).arg(usbDir));
- QDirIterator it(usbDir);
- while(it.hasNext()){
- it.next();
- QString next = it.fileName();
- if(next.startsWith("DVD_")){
- QString no = QString(next.right(3));
- retval << no;
+ QStringList allUsbPaths = s.value("paths/usball").toStringList();
+ for(const QString &up : std::as_const(allUsbPaths)){
+ logMessage(QString(tr("Traversing %1")).arg(up));
+ QDirIterator it(up);
+ while(it.hasNext()){
+ it.next();
+ QString next = it.fileName();
+ if(next.startsWith("DVD_")){
+ QString no = QString(next.right(3));
+ retval << no;
+ }
}
}
logMessage(QString(tr("Found %1 valid Dirs: (%2)")).arg(QString::number(retval.count()), retval.join(',')));