Skip to content

Commit f71f46f

Browse files
committed
feat: add auto recording from command line
1 parent 62c03d7 commit f71f46f

5 files changed

Lines changed: 56 additions & 10 deletions

File tree

src/mixxxmainwindow.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,13 @@ void MixxxMainWindow::connectMenuBar() {
993993
Qt::UniqueConnection);
994994
}
995995

996+
auto pRecordingManager = m_pCoreServices->getRecordingManager();
997+
auto startRecord = CmdlineArgs::Instance().getStartRecording();
998+
if (pRecordingManager && startRecord.has_value()) {
999+
pRecordingManager->startRecording(startRecord.value());
1000+
qInfo() << "Auto start recording to" << pRecordingManager->getRecordingLocation();
1001+
}
1002+
9961003
#ifdef __ENGINEPRIME__
9971004
DEBUG_ASSERT(m_pLibraryExporter);
9981005
connect(m_pMenuBar,

src/recording/recordingmanager.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <QDateTime>
44
#include <QDir>
5+
#include <QFileInfo>
56
#include <QMessageBox>
67
#include <QMutex>
78
#include <QStorageInfo>
@@ -98,7 +99,7 @@ qint64 RecordingManager::getFreeSpace() {
9899
return rv;
99100
}
100101

101-
void RecordingManager::startRecording() {
102+
void RecordingManager::startRecording(const QString& recordingLocation) {
102103
QString encodingType = m_pConfig->getValueString(
103104
ConfigKey(RECORDING_PREF_KEY, "Encoding"));
104105
QString fileExtension = EncoderFactory::getFactory()
@@ -121,14 +122,33 @@ void RecordingManager::startRecording() {
121122
}
122123

123124
m_iNumberSplits = 1;
124-
// Append file extension.
125-
QString date_time_str = formatDateTimeForFilename(QDateTime::currentDateTime());
126-
m_recordingFile = QString("%1.%2")
127-
.arg(date_time_str, fileExtension);
128-
129-
// Storing the absolutePath of the recording file without file extension.
130-
m_recording_base_file = getRecordingDir();
131-
m_recording_base_file.append("/").append(date_time_str);
125+
126+
if (recordingLocation.isEmpty()) {
127+
// Append file extension.
128+
QString date_time_str = formatDateTimeForFilename(QDateTime::currentDateTime());
129+
m_recordingFile = QStringLiteral("%1.%2")
130+
.arg(date_time_str, fileExtension);
131+
132+
// Storing the absolutePath of the recording file without file extension.
133+
m_recording_base_file = getRecordingDir();
134+
m_recording_base_file.append("/").append(date_time_str);
135+
} else {
136+
auto fileInfo = QFileInfo(recordingLocation);
137+
138+
if (!fileInfo.absoluteDir().exists()) {
139+
qWarning() << "Recoding directory is not found. Aborting.";
140+
return;
141+
}
142+
m_recordingFile = QStringLiteral("%1.%2")
143+
.arg(fileInfo.baseName(), fileExtension);
144+
if (m_recordingFile != fileInfo.fileName()) {
145+
qWarning() << "Requested filename doesn't match with the "
146+
"configured recording encoder. Using"
147+
<< m_recordingFile << "instead";
148+
}
149+
m_recording_base_file = fileInfo.absoluteDir().filePath(fileInfo.baseName());
150+
}
151+
132152
// Appending file extension to get the filelocation.
133153
m_recordingLocation = m_recording_base_file + QChar('.') + fileExtension;
134154
m_pConfig->set(ConfigKey(RECORDING_PREF_KEY, "Path"), m_recordingLocation);

src/recording/recordingmanager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class RecordingManager : public QObject {
2929
// This will try to start recording. If successful, slotIsRecording will be
3030
// called and a signal isRecording will be emitted.
3131
// The method computes the filename based on date/time information.
32-
void startRecording();
32+
void startRecording(const QString& recordingLocation = {});
3333
void stopRecording();
3434
bool isRecordingActive() const;
3535
void setRecordingDir();

src/util/cmdlineargs.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ bool calcUseColorsAuto() {
5151
CmdlineArgs::CmdlineArgs()
5252
: m_startInFullscreen(false), // Initialize vars
5353
m_startAutoDJ(false),
54+
m_startRecording(std::nullopt),
5455
m_rescanLibrary(false),
5556
m_controllerDebug(false),
5657
m_controllerAbortOnWarning(false),
@@ -193,6 +194,16 @@ bool CmdlineArgs::parse(const QStringList& arguments, CmdlineArgs::ParseMode mod
193194
: QString());
194195
parser.addOption(startAutoDJ);
195196

197+
QCommandLineOption startRecording(QStringLiteral("start-recording"),
198+
forUserFeedback
199+
? QCoreApplication::translate("CmdlineArgs",
200+
"Starts recording when Mixxx is launched. If no "
201+
"path is passed, used the recording folder and "
202+
"automatic file name")
203+
: QString(),
204+
QStringLiteral("path"));
205+
parser.addOption(startRecording);
206+
196207
const QCommandLineOption rescanLibrary(QStringLiteral("rescan-library"),
197208
forUserFeedback ? QCoreApplication::translate("CmdlineArgs",
198209
"Rescans the library when Mixxx is launched.")
@@ -442,6 +453,10 @@ bool CmdlineArgs::parse(const QStringList& arguments, CmdlineArgs::ParseMode mod
442453
m_startAutoDJ = true;
443454
}
444455

456+
if (parser.isSet(startRecording)) {
457+
m_startRecording = parser.value(startRecording);
458+
}
459+
445460
if (parser.isSet(rescanLibrary)) {
446461
m_rescanLibrary = true;
447462
}

src/util/cmdlineargs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class CmdlineArgs final {
3333
bool getStartAutoDJ() const {
3434
return m_startAutoDJ;
3535
}
36+
std::optional<QString> getStartRecording() const {
37+
return m_startRecording;
38+
}
3639
bool getRescanLibrary() const {
3740
return m_rescanLibrary;
3841
}
@@ -102,6 +105,7 @@ class CmdlineArgs final {
102105
QList<QString> m_musicFiles; // List of files to load into players at startup
103106
bool m_startInFullscreen; // Start in fullscreen mode
104107
bool m_startAutoDJ;
108+
std::optional<QString> m_startRecording;
105109
bool m_rescanLibrary;
106110
bool m_controllerDebug;
107111
bool m_controllerPreviewScreens;

0 commit comments

Comments
 (0)