Skip to content

Commit

Permalink
fix: 需求转bug,命令行和dbus接口新增直接启动全屏录制功能
Browse files Browse the repository at this point in the history
Description: 需求转bug,命令行和dbus接口新增直接启动全屏录制功能

Log: 需求转bug,命令行和dbus接口新增直接启动全屏录制功能

Bug: https://pms.uniontech.com/bug-view-213709.html
  • Loading branch information
hundundadi committed Aug 23, 2023
1 parent ebd4094 commit 62454d8
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 3 deletions.
8 changes: 8 additions & 0 deletions src/dbusservice/dbusscreenshotservice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,11 @@ void DBusScreenshotService::StartScreenshotFor3rd(const QString &in0)
parent()->startScreenshotFor3rd(in0);
m_singleInstance = true;
}

void DBusScreenshotService::FullScreenRecord(const QString &in0)

Check warning on line 172 in src/dbusservice/dbusscreenshotservice.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

The function 'FullScreenRecord' is never used.
{

if (!m_singleInstance)
parent()->fullScreenRecord(in0);
m_singleInstance = true;
}
5 changes: 5 additions & 0 deletions src/dbusservice/dbusscreenshotservice.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ class DBusScreenshotService: public QDBusAbstractAdaptor
" <method name=\"NoNotifyScreenshot\"/>\n"
" <method name=\"TopWindowScreenshot\"/>\n"
" <method name=\"FullscreenScreenshot\"/>\n"
" <method name=\"FullScreenRecord\">\n"
" <arg direction=\"in\" type=\"s\"/>\n"
" </method>\n"
" <method name=\"OcrScreenshot\"/>\n"
" <method name=\"ScrollScreenshot\"/>\n"
" <method name=\"SavePathScreenshot\">\n"
Expand Down Expand Up @@ -73,6 +76,8 @@ public Q_SLOTS: // METHODS
void FullscreenScreenshot();
void SavePathScreenshot(const QString &in0);
void StartScreenshotFor3rd(const QString &in0);
void FullScreenRecord(const QString &in0);

Q_SIGNALS: // SIGNALS
void Done(const QString &in0);
private:
Expand Down
5 changes: 5 additions & 0 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ int main(int argc, char *argv[])
QCommandLineOption prohibitNotifyOption(QStringList() << "n" << "no-notification", "Don't send notifications.");
QCommandLineOption useGStreamer(QStringList() << "g" << "gstreamer", "Use GStreamer.");
QCommandLineOption dbusOption(QStringList() << "u" << "dbus", "Start from dbus.");
QCommandLineOption screenRecordFullScreenOption(QStringList() << "rf" << "recordFullScreen","Record full screen","FileNAME","");
QCommandLineOption screenRecordOption(QStringList() << "record" << "screenRecord" << "start screen record");
QCommandLineOption screenShotOption(QStringList() << "shot" << "screenShot" << "start screen shot");
QCommandLineOption screenOcrOption(QStringList() << "ocr" << "screenOcr" << "start screen ocr");
Expand All @@ -189,6 +190,7 @@ int main(int argc, char *argv[])
cmdParser.addOption(prohibitNotifyOption);
cmdParser.addOption(useGStreamer);
cmdParser.addOption(dbusOption);
cmdParser.addOption(screenRecordFullScreenOption);
cmdParser.addOption(screenRecordOption);
cmdParser.addOption(screenShotOption);
cmdParser.addOption(screenOcrOption);
Expand Down Expand Up @@ -274,6 +276,9 @@ int main(int argc, char *argv[])
} else if (cmdParser.isSet(prohibitNotifyOption)) {
qDebug() << "screenshot no notify!";
window.noNotifyScreenshot();
} else if (cmdParser.isSet(screenRecordFullScreenOption)) {
qDebug() << "screenRecordFullScreenOption!!!!"<< cmdParser.value(screenRecordFullScreenOption);
window.fullScreenRecord(cmdParser.value(screenRecordFullScreenOption));
} else {
window.startScreenshot();
}
Expand Down
31 changes: 30 additions & 1 deletion src/main_window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1522,7 +1522,7 @@ void MainWindow::fullScreenshot()
// initDBusInterface();
this->setFocus();
// m_configSettings = ConfigSettings::instance();
installEventFilter(this);
// installEventFilter(this);

// 多屏截取全屏

Expand All @@ -1548,6 +1548,33 @@ void MainWindow::fullScreenshot()
save2Clipboard(m_resultPixmap);
sendNotify(m_saveIndex, m_saveFileName, r);
}

void MainWindow::fullScreenRecord(const QString fileName)

Check warning on line 1552 in src/main_window.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Parameter 'fileName' is passed by value. It could be passed as a const reference which is usually faster and recommended in C++.
{
m_isFullScreenRecord = true;
this->initAttributes();
this->initResource();
this->initLaunchMode("screenRecord");
this->showFullScreen();
qApp->setOverrideCursor(BaseUtils::setCursorShape("start"));

QScreen *t_primaryScreen = QGuiApplication::primaryScreen();
m_backgroundRect = t_primaryScreen->virtualGeometry();;
m_backgroundRect = QRect(m_backgroundRect.topLeft(), m_backgroundRect.size());
this->move(m_backgroundRect.x(), m_backgroundRect.y());
this->setFixedSize(m_backgroundRect.size());
recordX = 0;
recordY = 0;
recordWidth = m_backgroundRect.width();
recordHeight = m_backgroundRect.height();
updateToolBarPos();
if(fileName.isEmpty()){
selectAreaName = fileName;
}else{
selectAreaName = fileName+"_rfs";
}
startCountdown();
}
void MainWindow::topWindow()
{
//DDesktopServices::playSystemSoundEffect(DDesktopServices::SEE_Screenshot);
Expand Down Expand Up @@ -2172,6 +2199,8 @@ void MainWindow::updateToolBarPos()
}
}
//qDebug() << "工具栏最新坐标 >>> toolbarPoint: " << toolbarPoint;
//快捷全屏录制不需要显示工具栏
if(m_isFullScreenRecord) return;
m_toolBar->showAt(toolbarPoint);
//qDebug() << "==================2=================";
}
Expand Down
9 changes: 9 additions & 0 deletions src/main_window.h
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,10 @@ class MainWindow : public DWidget
//void delayScreenshot(double num);
void fullScreenshot();

/**
* @brief fullScreenRecord 快捷启动全屏录制
*/
void fullScreenRecord(const QString fileName = "");

Check warning on line 325 in src/main_window.h

View workflow job for this annotation

GitHub Actions / cppcheck

Parameter 'fileName' is passed by value. It could be passed as a const reference which is usually faster and recommended in C++.
/**
* @brief 截取顶层窗口
*/
Expand Down Expand Up @@ -1038,6 +1042,11 @@ public slots:
bool m_isScreenVertical = false; // 判断多屏是否纵向布局
bool m_isLockedState = false;
bool m_isScreenResolutionChanged = false;

/**
* @brief m_isFullScreenRecord 全屏录制
*/
bool m_isFullScreenRecord = false;
};

#endif //MAINWINDOW_H
25 changes: 23 additions & 2 deletions src/record_process.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ void RecordProcess::onRecordFinish()

// Move file to save directory.
QString newSavePath = QDir(saveDir).filePath(saveBaseName);
QFile file(newSavePath);
file.remove();
QFile::rename(savePath, newSavePath);
exitRecord(newSavePath);
}
Expand Down Expand Up @@ -399,7 +401,15 @@ void RecordProcess::initProcess()
fileExtension = "mp4";
}
}
saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension);
if(saveAreaName.isEmpty()){
saveBaseName = QString("%1_%2.%3").arg(tr("Record")).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension);
}else{
if(saveAreaName.contains(QString("_rfs"))){
saveBaseName = QString("%1.%2").arg(saveAreaName.remove("_rfs")).arg(fileExtension);
}else {
saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension);
}
}
savePath = QDir(saveTempDir).filePath(saveBaseName);
// Remove same cache file first.
QFile file(savePath);
Expand Down Expand Up @@ -518,7 +528,16 @@ void RecordProcess::GstStartRecord()
fileExtension = "webm";
}
}
saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension);
if(saveAreaName.isEmpty()){
saveBaseName = QString("%1_%2.%3").arg(tr("Record")).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension);
}else{
if(saveAreaName.contains(QString("_rfs"))){
saveBaseName = QString("%1.%2").arg(saveAreaName.remove("_rfs")).arg(fileExtension);
}else {
saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension);
}
}

savePath = QDir(saveTempDir).filePath(saveBaseName);
// Remove same cache file first.
QFile file(savePath);
Expand Down Expand Up @@ -565,6 +584,8 @@ void RecordProcess::GstStopRecord()
void RecordProcess::onExitGstRecord()
{
QString newSavePath = QDir(saveDir).filePath(saveBaseName);
QFile file(newSavePath);
file.remove();
QFile::rename(savePath, newSavePath);
//注销gstreamer相关库加载
gstInterface::unloadFunctions();
Expand Down
6 changes: 6 additions & 0 deletions src/screenshot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@ void Screenshot::initLaunchMode(const QString &launchmode)
m_launchMode = launchmode;
}

void Screenshot::fullScreenRecord(QString fileName)

Check warning on line 142 in src/screenshot.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Parameter 'fileName' is passed by value. It could be passed as a const reference which is usually faster and recommended in C++.
{
qInfo() << "Start Full Screen Record!" << fileName;
m_window.fullScreenRecord(fileName);
}

void Screenshot::stopRecord()
{
m_window.stopRecord();
Expand Down
6 changes: 6 additions & 0 deletions src/screenshot.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ public slots:
void savePathScreenshot(const QString &path);
void startScreenshotFor3rd(const QString &path);
void initLaunchMode(const QString &launchmode);

/**
* @brief fullScreenRecord 快捷启动全屏录制,文件路径
*/
void fullScreenRecord(QString fileName = "");

Q_SCRIPTABLE void stopRecord();
Q_SCRIPTABLE QString getRecorderNormalIcon();
signals:
Expand Down

0 comments on commit 62454d8

Please sign in to comment.