Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add additional advanced naming options #113

Merged
merged 2 commits into from
May 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 3 additions & 9 deletions Linux-Application/DomesdayDuplicator/DomesdayDuplicator.pro
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,16 @@ DEFINES += QT_DEPRECATED_WARNINGS
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11
CONFIG += c++11 console

# Include the libUSB library
unix {
INCLUDEPATH += "/usr/include/libusb-1.0"
LIBS += -L"/usr/lib" -lusb-1.0
}
win32 {
debug {
LIBS += -L"$$PWD/libusb-1.0.22/x64/Debug/lib"
}
release {
LIBS += -L"$$PWD/libusb-1.0.22/x64/Release/lib"
}
LIBS += -llibusb-1.0 -lAdvAPI32
INCLUDEPATH += "$$PWD/libusb-1.0.22/libusb"
LIBS += -L"$$PWD/libusb-1.0.0/" -llibusb-1.0 -lAdvAPI32
INCLUDEPATH += "$$PWD/libusb-1.0.0"
DEFINES += NOMINMAX QUSB_LIBRARY
}

Expand Down
38 changes: 38 additions & 0 deletions Linux-Application/DomesdayDuplicator/advancednamingdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,16 @@ AdvancedNamingDialog::AdvancedNamingDialog(QWidget *parent) :
ui->audioCheckBox->setChecked(false);
ui->discSideCheckBox->setChecked(false);
ui->notesCheckBox->setChecked(false);
ui->mintCheckBox->setChecked(false);
ui->durationCheckBox->setChecked(false);

// Set line edit validation to A-Z, a-z, 0-9 and space, minus and underscore
ui->discTitleLineEdit->setValidator(new QRegularExpressionValidator(
QRegularExpression("^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*$"), this ));
ui->notesLineEdit->setValidator(new QRegularExpressionValidator(
QRegularExpression("^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*$"), this ));
ui->mintLineEdit->setValidator(new QRegularExpressionValidator(
QRegularExpression("^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*$"), this ));

updateGui();
}
Expand Down Expand Up @@ -96,13 +100,29 @@ QString AdvancedNamingDialog::getFileName(bool isTestData)
fileName += "_" + ui->notesLineEdit->text();
}

if (ui->mintCheckBox->isChecked()) {
fileName += "_" + ui->mintLineEdit->text();
}

// Add the date/time stamp
fileName += "_" + QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss");
}

return fileName;
}

// Function to return if duration checkbox is set
bool AdvancedNamingDialog::getDurationChecked()
{
bool fileDurationBox = false;

if (ui->durationCheckBox->isChecked()) {
fileDurationBox = true;
}

return fileDurationBox;
}

// Update the GUI based on the state of the check boxes
void AdvancedNamingDialog::updateGui(void)
{
Expand Down Expand Up @@ -151,6 +171,13 @@ void AdvancedNamingDialog::updateGui(void)
} else {
ui->notesLineEdit->setEnabled(false);
}

if (ui->mintCheckBox->isChecked()) {
ui->mintLineEdit->setEnabled(true);
} else {
ui->mintLineEdit->setEnabled(false);
}

}

void AdvancedNamingDialog::on_discTitleCheckBox_clicked()
Expand Down Expand Up @@ -182,3 +209,14 @@ void AdvancedNamingDialog::on_notesCheckBox_clicked()
{
updateGui();
}

void AdvancedNamingDialog::on_mintCheckBox_clicked()
{
updateGui();
}

void AdvancedNamingDialog::on_durationCheckBox_clicked()
{
updateGui();

}
3 changes: 3 additions & 0 deletions Linux-Application/DomesdayDuplicator/advancednamingdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class AdvancedNamingDialog : public QDialog
~AdvancedNamingDialog();

QString getFileName(bool isTestData);
bool getDurationChecked();

private slots:
void on_discTitleCheckBox_clicked();
Expand All @@ -53,6 +54,8 @@ private slots:
void on_audioCheckBox_clicked();
void on_discSideCheckBox_clicked();
void on_notesCheckBox_clicked();
void on_mintCheckBox_clicked();
void on_durationCheckBox_clicked();

private:
Ui::AdvancedNamingDialog *ui;
Expand Down
42 changes: 39 additions & 3 deletions Linux-Application/DomesdayDuplicator/advancednamingdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>500</width>
<height>250</height>
<height>315</height>
</rect>
</property>
<property name="minimumSize">
Expand All @@ -25,7 +25,7 @@
<x>10</x>
<y>10</y>
<width>481</width>
<height>231</height>
<height>281</height>
</rect>
</property>
<property name="title">
Expand Down Expand Up @@ -285,6 +285,42 @@
<number>999</number>
</property>
</widget>
<widget class="QCheckBox" name="mintCheckBox">
<property name="geometry">
<rect>
<x>10</x>
<y>220</y>
<width>111</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Mint marks:</string>
</property>
</widget>
<widget class="QLineEdit" name="mintLineEdit">
<property name="geometry">
<rect>
<x>130</x>
<y>220</y>
<width>341</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QCheckBox" name="durationCheckBox">
<property name="geometry">
<rect>
<x>10</x>
<y>250</y>
<width>231</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Append capture duration</string>
</property>
</widget>
</widget>
</widget>
<tabstops>
Expand All @@ -303,8 +339,8 @@
<resources/>
<connections/>
<buttongroups>
<buttongroup name="discTypeButtonGroup"/>
<buttongroup name="formatButtonGroup"/>
<buttongroup name="discTypeButtonGroup"/>
<buttongroup name="audioButtonGroup"/>
</buttongroups>
</ui>
25 changes: 23 additions & 2 deletions Linux-Application/DomesdayDuplicator/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "usbcapture.h"
#include <QFile>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
Expand Down Expand Up @@ -644,11 +646,11 @@ void MainWindow::on_actionPreferences_triggered()
}

// Main window - capture button clicked
QString captureFilename;
void MainWindow::on_capturePushButton_clicked()
{
if (!isCaptureRunning) {
// Start capture
QString captureFilename;

// Ensure that the test mode option matches the device configuration
qDebug() << "MainWindow::on_capturePushButton_clicked(): Setting device's test mode flag to" << ui->actionTest_mode->isChecked();
Expand Down Expand Up @@ -701,6 +703,25 @@ void MainWindow::on_capturePushButton_clicked()
captureStatusUpdateTimer->stop();
captureDurationTimer->stop();
disconnect(usbDevice, &UsbDevice::transferFailed, this, &MainWindow::transferFailedSignalHandler);
// Rename output file if duration checkbox is clicked
if (advancedNamingDialog->getDurationChecked()) {
qDebug() << "ainWindow::on_capturePushButton_clicked(): Starting attempt to append duration";
// Make sure output file is closed
if (!UsbCapture::getOkToRename()) {
qDebug() << "MainWindow::on_capturePushButton_clicked(): Not ok to rename, disk buffers still writing";
while (!UsbCapture::getOkToRename()) {
// Wait until finished
}
}
QString durationFilename = captureFilename;
QString finalDuration = captureElapsedTime.toString("hh'H'mm'M'ss'S'");
finalDuration.prepend("_");
// Get "." before extension and save as index
int durationIndex = durationFilename.lastIndexOf(".");
durationFilename.insert(durationIndex, finalDuration);
QFile::rename(captureFilename, durationFilename);
qDebug() << "MainWindow::on_capturePushButton_clicked(): Renamed file to" << durationFilename;
}
updateGuiForCaptureStop();
}
}
Expand Down Expand Up @@ -752,7 +773,7 @@ void MainWindow::updateGuiForCaptureStart(void)
ui->numberOfTransfersLabel->setText(tr("0"));
}

// Update the GUI when capture stops
// Update the GUI when capture stops, and flip rename var back to false
void MainWindow::updateGuiForCaptureStop(void)
{
// Disable functions after capture
Expand Down
15 changes: 14 additions & 1 deletion Linux-Application/DomesdayDuplicator/usbcapture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ struct transferUserDataStruct {
// Flag to indicate if disk buffer processing is running
static volatile bool isDiskBufferProcessRunning;

// Flag passed to mainwindow to notify of closefile
static bool isOkToRename = false;

// Global to monitor the number of in-flight transfers
static volatile qint32 transfersInFlight = 0;

Expand Down Expand Up @@ -448,6 +451,9 @@ void UsbCapture::freeDiskBuffers(void)
// Free up the temporary disk buffer
free(conversionBuffer);
conversionBuffer = nullptr;

qDebug() << "Setting finished variable for mainwindow";
isOkToRename = true;
}

// Thread for processing disk buffers
Expand Down Expand Up @@ -516,7 +522,6 @@ void UsbCapture::runDiskBuffers(void)

// Flag that the thread is complete
isDiskBufferProcessRunning = false;

qDebug() << "UsbCapture::runDiskBuffers(): Thread stopped";
}

Expand Down Expand Up @@ -658,6 +663,8 @@ void UsbCapture::writeConversionBuffer(QFile *outputFile, qint32 numBytes)
// Start capturing
void UsbCapture::startTransfer(void)
{
// Flip isOkToRename back to false; new capture
isOkToRename = false;
// Start the capture processing thread
connect(this, SIGNAL(finished()), this, SLOT(deleteLater()));
this->start();
Expand Down Expand Up @@ -688,3 +695,9 @@ QString UsbCapture::getLastError(void)
{
return lastError;
}

// Return capture is complete and buffers are empty
bool UsbCapture::getOkToRename()
{
return isOkToRename;
}
1 change: 1 addition & 0 deletions Linux-Application/DomesdayDuplicator/usbcapture.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class UsbCapture : public QThread
qint32 getNumberOfTransfers(void);
qint32 getNumberOfDiskBuffersWritten(void);
QString getLastError(void);
static bool getOkToRename();

signals:
void transferFailed(void);
Expand Down