Add requestCapture DBus call

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>
This commit is contained in:
Haris Gušić
2021-10-08 03:06:57 +02:00
parent f2c5641046
commit 5ee85ed5c0
6 changed files with 68 additions and 7 deletions

View File

@@ -2,7 +2,16 @@
<node>
<interface name="org.flameshot.Flameshot">
<!--
<!--
requestCapture:
@requestData: Serialized CaptureRequest object.
Start a capture using a CaptureRequest.
-->
<method name="requestCapture">
<arg name="requestData" type="ay" direction="in"/>
</method>
<!--
graphicCapture:
@path: the path where the screenshot will be saved. When the argument is empty the program will ask for a path graphically.
@toClipboard: Whether to copy the screenshot to clipboard or not.

View File

@@ -41,6 +41,29 @@ uint CaptureRequest::id() const
return id;
}
QByteArray CaptureRequest::serialize() const
{
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << m_mode << m_delay << m_tasks << m_data << m_forcedID << m_id
<< m_path;
return data;
}
CaptureRequest CaptureRequest::deserialize(const QByteArray& data)
{
QDataStream stream(data);
CaptureRequest request;
stream >> request.m_mode;
stream >> request.m_delay;
stream >> request.m_tasks;
stream >> request.m_data;
stream >> request.m_forcedID;
stream >> request.m_id;
stream >> request.m_path;
return request;
}
CaptureRequest::CaptureMode CaptureRequest::captureMode() const
{
return m_mode;

View File

@@ -22,6 +22,8 @@ public:
NO_TASK = 0,
COPY_TASK = 1,
SAVE_TASK = 2,
PRINT_RAW_TASK = 4,
PRINT_GEOMETRY_TASK = 8,
};
CaptureRequest(CaptureMode mode,
@@ -32,6 +34,8 @@ public:
void setStaticID(uint id);
uint id() const;
QByteArray serialize() const;
static CaptureRequest deserialize(const QByteArray& data);
uint delay() const;
QString path() const;
QVariant data() const;
@@ -51,6 +55,8 @@ private:
bool m_forcedID;
uint m_id;
CaptureRequest() {}
};
using eTask = CaptureRequest::ExportTask;

View File

@@ -28,6 +28,13 @@ FlameshotDBusAdapter::FlameshotDBusAdapter(QObject* parent)
FlameshotDBusAdapter::~FlameshotDBusAdapter() {}
void FlameshotDBusAdapter::requestCapture(const QByteArray& requestData)
{
CaptureRequest req = CaptureRequest::deserialize(requestData);
req.setStaticID(req.id());
Controller::getInstance()->requestCapture(req);
}
void FlameshotDBusAdapter::graphicCapture(QString path,
bool toClipboard,
int delay,

View File

@@ -21,6 +21,7 @@ signals:
void captureSaved(uint id, QString savePath);
public slots:
Q_NOREPLY void requestCapture(const QByteArray& requestData);
Q_NOREPLY void graphicCapture(QString path,
bool toClipboard,
int delay,

View File

@@ -309,6 +309,15 @@ int main(int argc, char* argv[])
if (toClipboard) {
req.addTask(CaptureRequest::COPY_TASK);
}
if (isRaw) {
req.addTask(CaptureRequest::PRINT_RAW_TASK);
}
if (!pathValue.isEmpty()) {
req.addSaveTask(pathValue);
}
if (isSelection) {
req.addTask(CaptureRequest::PRINT_GEOMETRY_TASK);
}
uint id = req.id();
// Send message
@@ -316,8 +325,8 @@ int main(int argc, char* argv[])
QStringLiteral("org.flameshot.Flameshot"),
QStringLiteral("/"),
QLatin1String(""),
QStringLiteral("graphicCapture"));
m << pathValue << toClipboard << delay << id;
QStringLiteral("requestCapture"));
m << req.serialize();
QDBusConnection sessionBus = QDBusConnection::sessionBus();
dbusUtils.checkDBusConnection(sessionBus);
sessionBus.call(m);
@@ -356,6 +365,9 @@ int main(int argc, char* argv[])
if (toClipboard) {
req.addTask(CaptureRequest::COPY_TASK);
}
if (isRaw) {
req.addTask(CaptureRequest::PRINT_RAW_TASK);
}
if (!pathValue.isEmpty()) {
req.addSaveTask(pathValue);
}
@@ -367,8 +379,8 @@ int main(int argc, char* argv[])
QStringLiteral("org.flameshot.Flameshot"),
QStringLiteral("/"),
QLatin1String(""),
QStringLiteral("fullScreen"));
m << pathValue << toClipboard << delay << id;
QStringLiteral("requestCapture"));
m << req.serialize();
QDBusConnection sessionBus = QDBusConnection::sessionBus();
dbusUtils.checkDBusConnection(sessionBus);
sessionBus.call(m);
@@ -414,6 +426,9 @@ int main(int argc, char* argv[])
if (toClipboard) {
req.addTask(CaptureRequest::COPY_TASK);
}
if (isRaw) {
req.addTask(CaptureRequest::PRINT_RAW_TASK);
}
if (!pathValue.isEmpty()) {
req.addSaveTask(pathValue);
}
@@ -425,8 +440,8 @@ int main(int argc, char* argv[])
QStringLiteral("org.flameshot.Flameshot"),
QStringLiteral("/"),
QLatin1String(""),
QStringLiteral("captureScreen"));
m << number << pathValue << toClipboard << delay << id;
QStringLiteral("requestCapture"));
m << req.serialize();
QDBusConnection sessionBus = QDBusConnection::sessionBus();
dbusUtils.checkDBusConnection(sessionBus);
sessionBus.call(m);