From 853fe2fe2c994e2a6578bc7c648eed11ea724fba Mon Sep 17 00:00:00 2001 From: Light Date: Mon, 17 Feb 2025 21:01:15 -0500 Subject: [PATCH] Created feature to record on game boot. --- pcsx2-qt/MainWindow.cpp | 88 +++++++++++++++++++++++++++++++++++----- pcsx2/windows/RCa08632 | Bin 0 -> 9242 bytes pcsx2/windows/RCb08632 | Bin 0 -> 9242 bytes pcsx2/windows/RDa08632 | Bin 0 -> 612 bytes 4 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 pcsx2/windows/RCa08632 create mode 100644 pcsx2/windows/RCb08632 create mode 100644 pcsx2/windows/RDa08632 diff --git a/pcsx2-qt/MainWindow.cpp b/pcsx2-qt/MainWindow.cpp index f451a574c6..f8191ad59e 100644 --- a/pcsx2-qt/MainWindow.cpp +++ b/pcsx2-qt/MainWindow.cpp @@ -99,6 +99,11 @@ static QString s_current_disc_serial; static quint32 s_current_disc_crc; static quint32 s_current_running_crc; +static bool record_on_start = false; +static bool filename_set = false; +static QString path_to_recording_for_record_on_start; + + MainWindow::MainWindow() { pxAssert(!g_main_window); @@ -724,7 +729,49 @@ void MainWindow::updateAdvancedSettingsVisibility() void MainWindow::onVideoCaptureToggled(bool checked) { if (!s_vm_valid) + { + if (!record_on_start) + { + QMessageBox msgbox(this); + msgbox.setIcon(QMessageBox::Question); + msgbox.setWindowIcon(QtHost::GetAppIcon()); + msgbox.setWindowTitle(tr("Record On Boot")); + msgbox.setWindowModality(Qt::WindowModal); + msgbox.setText(tr("Did you want to start recording on boot?")); + msgbox.addButton(QMessageBox::Yes); + msgbox.addButton(QMessageBox::No); + msgbox.setDefaultButton(QMessageBox::Yes); + if (msgbox.exec() == QMessageBox::Yes) + { + const QString container(QString::fromStdString( + Host::GetStringSettingValue("EmuCore/GS", "CaptureContainer", Pcsx2Config::GSOptions::DEFAULT_CAPTURE_CONTAINER))); + const QString filter(tr("%1 Files (*.%2)").arg(container.toUpper()).arg(container)); + + QString temp(QStringLiteral("%1.%2").arg(QString::fromStdString(GSGetBaseVideoFilename())).arg(container)); + temp = QDir::toNativeSeparators(QFileDialog::getSaveFileName(this, tr("Video Capture"), temp, filter)); + path_to_recording_for_record_on_start = temp; + if (path_to_recording_for_record_on_start.isEmpty()) + return; + record_on_start = true; + } + + } + else + { + QMessageBox msgbox(this); + msgbox.setIcon(QMessageBox::Question); + msgbox.setWindowIcon(QtHost::GetAppIcon()); + msgbox.setWindowTitle(tr("Record On Boot")); + msgbox.setWindowModality(Qt::WindowModal); + msgbox.setText(tr("Did you want to cancel recording on boot?")); + msgbox.addButton(QMessageBox::Yes); + msgbox.addButton(QMessageBox::No); + msgbox.setDefaultButton(QMessageBox::Yes); + if (msgbox.exec() == QMessageBox::Yes) + record_on_start = false; + } return; + } // Reset the checked state, we'll get updated by the GS thread. QSignalBlocker sb(m_ui.actionVideoCapture); @@ -736,16 +783,31 @@ void MainWindow::onVideoCaptureToggled(bool checked) return; } - const QString container(QString::fromStdString( - Host::GetStringSettingValue("EmuCore/GS", "CaptureContainer", Pcsx2Config::GSOptions::DEFAULT_CAPTURE_CONTAINER))); - const QString filter(tr("%1 Files (*.%2)").arg(container.toUpper()).arg(container)); + if (record_on_start && !path_to_recording_for_record_on_start.isEmpty()) + { + QMessageBox msgbox2(this); + msgbox2.setIcon(QMessageBox::Question); + msgbox2.setWindowIcon(QtHost::GetAppIcon()); + msgbox2.setWindowTitle(tr("Recording Notification")); + msgbox2.setText("Recording will start in a moment"); + msgbox2.setStandardButtons(QMessageBox::NoButton); + QTimer::singleShot(2000, &msgbox2, &QMessageBox::accept); + msgbox2.exec(); + g_emu_thread->beginCapture(path_to_recording_for_record_on_start); + } + else + { + const QString container(QString::fromStdString( + Host::GetStringSettingValue("EmuCore/GS", "CaptureContainer", Pcsx2Config::GSOptions::DEFAULT_CAPTURE_CONTAINER))); + const QString filter(tr("%1 Files (*.%2)").arg(container.toUpper()).arg(container)); - QString path(QStringLiteral("%1.%2").arg(QString::fromStdString(GSGetBaseVideoFilename())).arg(container)); - path = QDir::toNativeSeparators(QFileDialog::getSaveFileName(this, tr("Video Capture"), path, filter)); - if (path.isEmpty()) - return; - - g_emu_thread->beginCapture(path); + QString path(QStringLiteral("%1.%2").arg(QString::fromStdString(GSGetBaseVideoFilename())).arg(container)); + path = QDir::toNativeSeparators(QFileDialog::getSaveFileName(this, tr("Video Capture"), path, filter)); + if (path.isEmpty()) + return; + g_emu_thread->beginCapture(path); + } + } void MainWindow::onCaptureStarted(const QString& filename) @@ -890,8 +952,6 @@ void MainWindow::updateEmulationActions(bool starting, bool running, bool stoppi m_ui.actionToolbarSaveState->setEnabled(running); m_ui.actionViewGameProperties->setEnabled(running); - - m_ui.actionVideoCapture->setEnabled(running); if (!running && m_ui.actionVideoCapture->isChecked()) { QSignalBlocker sb(m_ui.actionVideoCapture); @@ -1962,6 +2022,12 @@ void MainWindow::onVMStarted() updateWindowTitle(); updateStatusBarWidgetVisibility(); updateInputRecordingActions(true); + if (record_on_start) + { + m_ui.actionVideoCapture->setEnabled(true); + m_ui.actionVideoCapture->setChecked(true); + record_on_start = false; + } } void MainWindow::onVMPaused() diff --git a/pcsx2/windows/RCa08632 b/pcsx2/windows/RCa08632 new file mode 100644 index 0000000000000000000000000000000000000000..905b911dc9b242f9d6ca83880ea9794bc94a3584 GIT binary patch literal 9242 zcmeI1X=@ut7{}*zq2FPV2JVD0NmJxJ;Z4{s;PMXoMkjC}-5rDT9$4uxW%WnKgykcv&lxH6x|EFw;?&D3 z$d2o}J-6j{+$R5jy4Ohi3~WC!*WezoOoB0p(b&q|ysE|AgZ`fDyA610@!WUo{CCit zc-)28E!T$Ee#UnKm%38sY_AfYJ4lfLd4+~9y_Rp#jp-zorb;u6bTV2-qkNaXx^U8U zE9kE8-thhlRLkSrjIYBA@02wKxpJxPsc1jrtt7_W$HQf@ zqiw}F$}KvEsPiv_8BeP!jlqqgWf0?Nw!NpxhNZO@Ix}qbS~Qw5uhq4(tO2ohFu@B& zx9fFk^sBgR*K{}f)AKz}`ZcU(*S*Vh@W%W1D4P*=Wv&|{^cNqgL#|4QpKIQ_=ke@$ zxA-7&p7Z7zuj6CI$F44RyUq@@(f%H~Sm8}kuLWn?!*^KoDkCkPg+=*iHZSAO?uw4p z+;@uhZiv+hneLqV#9P1t|FVWP zc5H~9%Fp*1xp=7IIy{AnF4RwDOSNjMxaTjkIB-Etmbf1>TMD)D2^3a{zXw?y=-~7F zM1(asQDxNPQWpJ-D;Wu?`ee^nD6jFR{Vbcd7*)-;&wbPTmW}jz(@YCL=}^_ELg}z> zm5~5bUeRYZM4|?Q^n7wmY0 z9lGVjbHx7%+SJ)#=uZ&k_2m=BA=xd|O0t)*4@J(GGS61bo}TkYWXF$>p0(#rdLSFSGMf4+}2W-+f;(Y!Dl)GPKHE+S0hNT16XbM_Xa~w!2l9wz^D9 znBuB;6h6Zgudc&qv^IRK-9*A|Vs3{>r&Ho*w}5xH3K_#Hk8n<2B@S;!66SaUeDeW% zKps=CrKpec>bb&dv&!Q7Hk<{#i*ToFF@rEUy40$>#HN_K&4#QJuQ8f&L{si*llPRebCqmNue^0xMAKy=n##r~1FKe!U4R(DDBiTjbO+<{PbU&m8) zw%O)V*TPl?`^l?~a_=Ja3AE?+8i_dynwX|{5b#R3|D@mW7%1yBjDt~!LA(_Aqv#*g z%U-pDI40N$yh^R;Uokydwz`D3+_lp?{9o}N+nwUuq;qpo!k9)2d}khe^*kHX8FxY+ zjlT`|>gCGPB!hXa-m0=pf0mE+7|XN^O;w-wRH1hxv=&F?YNw$n(Npu$SpNT_r%u*@ z`D<(k<;*;t*XC7l{uJk}9@c*QVEf}TR&2>#ppNjIA)cf2WijulDtP7dna*iCTPY7K zV&`1sPsKW_$!hC7kE%NV{S&XKhThjxs!X^1N%q?7)oRzWF2gx3RI;`{@n;QnwG#GD zUzSus=*y6LPzm2^6bDYuEl zzw7&!EFkcr^*W6!_6~v6nOsk*FO*l5T@pVgte0H+_N23+X0N!14x2dMqK??|mBbFa zXq9sP-PYC5R!386F3DuNdy&Z!>a*Flme>~NsnbpWv&pw{H@T{2h`3S|i6h@4=jt#jJJ*>;{lvO1UbTBQ+j5$` mx_|9gEZKWGik81(<=+VOtvmS1Y-?z=CtOoqsK%Ja%l-zpNUy*E literal 0 HcmV?d00001 diff --git a/pcsx2/windows/RCb08632 b/pcsx2/windows/RCb08632 new file mode 100644 index 0000000000000000000000000000000000000000..905b911dc9b242f9d6ca83880ea9794bc94a3584 GIT binary patch literal 9242 zcmeI1X=@ut7{}*zq2FPV2JVD0NmJxJ;Z4{s;PMXoMkjC}-5rDT9$4uxW%WnKgykcv&lxH6x|EFw;?&D3 z$d2o}J-6j{+$R5jy4Ohi3~WC!*WezoOoB0p(b&q|ysE|AgZ`fDyA610@!WUo{CCit zc-)28E!T$Ee#UnKm%38sY_AfYJ4lfLd4+~9y_Rp#jp-zorb;u6bTV2-qkNaXx^U8U zE9kE8-thhlRLkSrjIYBA@02wKxpJxPsc1jrtt7_W$HQf@ zqiw}F$}KvEsPiv_8BeP!jlqqgWf0?Nw!NpxhNZO@Ix}qbS~Qw5uhq4(tO2ohFu@B& zx9fFk^sBgR*K{}f)AKz}`ZcU(*S*Vh@W%W1D4P*=Wv&|{^cNqgL#|4QpKIQ_=ke@$ zxA-7&p7Z7zuj6CI$F44RyUq@@(f%H~Sm8}kuLWn?!*^KoDkCkPg+=*iHZSAO?uw4p z+;@uhZiv+hneLqV#9P1t|FVWP zc5H~9%Fp*1xp=7IIy{AnF4RwDOSNjMxaTjkIB-Etmbf1>TMD)D2^3a{zXw?y=-~7F zM1(asQDxNPQWpJ-D;Wu?`ee^nD6jFR{Vbcd7*)-;&wbPTmW}jz(@YCL=}^_ELg}z> zm5~5bUeRYZM4|?Q^n7wmY0 z9lGVjbHx7%+SJ)#=uZ&k_2m=BA=xd|O0t)*4@J(GGS61bo}TkYWXF$>p0(#rdLSFSGMf4+}2W-+f;(Y!Dl)GPKHE+S0hNT16XbM_Xa~w!2l9wz^D9 znBuB;6h6Zgudc&qv^IRK-9*A|Vs3{>r&Ho*w}5xH3K_#Hk8n<2B@S;!66SaUeDeW% zKps=CrKpec>bb&dv&!Q7Hk<{#i*ToFF@rEUy40$>#HN_K&4#QJuQ8f&L{si*llPRebCqmNue^0xMAKy=n##r~1FKe!U4R(DDBiTjbO+<{PbU&m8) zw%O)V*TPl?`^l?~a_=Ja3AE?+8i_dynwX|{5b#R3|D@mW7%1yBjDt~!LA(_Aqv#*g z%U-pDI40N$yh^R;Uokydwz`D3+_lp?{9o}N+nwUuq;qpo!k9)2d}khe^*kHX8FxY+ zjlT`|>gCGPB!hXa-m0=pf0mE+7|XN^O;w-wRH1hxv=&F?YNw$n(Npu$SpNT_r%u*@ z`D<(k<;*;t*XC7l{uJk}9@c*QVEf}TR&2>#ppNjIA)cf2WijulDtP7dna*iCTPY7K zV&`1sPsKW_$!hC7kE%NV{S&XKhThjxs!X^1N%q?7)oRzWF2gx3RI;`{@n;QnwG#GD zUzSus=*y6LPzm2^6bDYuEl zzw7&!EFkcr^*W6!_6~v6nOsk*FO*l5T@pVgte0H+_N23+X0N!14x2dMqK??|mBbFa zXq9sP-PYC5R!386F3DuNdy&Z!>a*Flme>~NsnbpWv&pw{H@T{2h`3S|i6h@4=jt#jJJ*>;{lvO1UbTBQ+j5$` mx_|9gEZKWGik81(<=+VOtvmS1Y-?z=CtOoqsK%Ja%l-zpNUy*E literal 0 HcmV?d00001 diff --git a/pcsx2/windows/RDa08632 b/pcsx2/windows/RDa08632 new file mode 100644 index 0000000000000000000000000000000000000000..00a61eb80364d32a4d2d3c36177fe6049c23e9af GIT binary patch literal 612 zcmdUtK?=e!5Jewd3f@86b)_nZxOFQiir~UkwP-(^3CUz;{(R