File indexing completed on 2024-04-28 05:27:35

0001 /*
0002     SPDX-FileCopyrightText: 2022 Aleix Pol Gonzalez <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QObject>
0010 #include <QDBusObjectPath>
0011 
0012 class QTimer;
0013 class QQmlApplicationEngine;
0014 
0015 struct Stream {
0016     uint id;
0017     QVariantMap opts;
0018 };
0019 
0020 class OrgFreedesktopPortalScreenCastInterface;
0021 
0022 class RecordMe : public QObject
0023 {
0024     Q_OBJECT
0025 public:
0026     RecordMe(QObject* parent = nullptr);
0027     ~RecordMe() override;
0028 
0029     enum CursorModes {
0030         Hidden = 1,
0031         Embedded = 2,
0032         Metadata = 4
0033     };
0034     Q_ENUM(CursorModes);
0035 
0036     enum SourceTypes {
0037         Monitor = 1,
0038         Window = 2
0039     };
0040     Q_ENUM(SourceTypes);
0041 
0042     enum PersistMode {
0043         NoPersist = 0,
0044         PersistWhileRunning = 1,
0045         PersistUntilRevoked = 2,
0046     };
0047     Q_ENUM(PersistMode)
0048 
0049     void setDuration(int duration);
0050     void setPersistMode(PersistMode persistMode);
0051     void setRestoreToken(const QString &restoreToken);
0052 
0053 public Q_SLOTS:
0054     void response(uint code, const QVariantMap &results);
0055 
0056 private:
0057     void init(const QDBusObjectPath &path);
0058     void handleStreams(const QList<Stream> &streams);
0059     void start();
0060 
0061     OrgFreedesktopPortalScreenCastInterface *iface;
0062     QDBusObjectPath m_path;
0063     QTimer* const m_durationTimer;
0064     const QString m_handleToken;
0065     QQmlApplicationEngine* m_engine;
0066     PersistMode m_persistMode = NoPersist;
0067     QString m_restoreToken;
0068 };