0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 13:08:50 +02:00
obs-studio/plugins/linux-capture/portal.c
Georges Basile Stavracas Neto 8537c7593c linux-capture: Add getter to screencast portal version
This will be used by the next commit to verify whether or not
to pass the restore token and persist mode options.
2021-11-24 11:42:06 -08:00

103 lines
2.4 KiB
C

/* portal.c
*
* Copyright 2021 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "portal.h"
#include "pipewire.h"
static GDBusConnection *connection = NULL;
static GDBusProxy *proxy = NULL;
static void ensure_proxy(void)
{
g_autoptr(GError) error = NULL;
if (!connection) {
connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
if (error) {
blog(LOG_WARNING,
"[portals] Error retrieving D-Bus connection: %s",
error->message);
return;
}
}
if (!proxy) {
proxy = g_dbus_proxy_new_sync(
connection, G_DBUS_PROXY_FLAGS_NONE, NULL,
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
"org.freedesktop.portal.ScreenCast", NULL, &error);
if (error) {
blog(LOG_WARNING,
"[portals] Error retrieving D-Bus proxy: %s",
error->message);
return;
}
}
}
uint32_t portal_get_available_capture_types(void)
{
g_autoptr(GVariant) cached_source_types = NULL;
uint32_t available_source_types;
ensure_proxy();
if (!proxy)
return 0;
cached_source_types =
g_dbus_proxy_get_cached_property(proxy, "AvailableSourceTypes");
available_source_types =
cached_source_types ? g_variant_get_uint32(cached_source_types)
: 0;
return available_source_types;
}
uint32_t portal_get_screencast_version(void)
{
g_autoptr(GVariant) cached_version = NULL;
uint32_t version;
ensure_proxy();
if (!proxy)
return 0;
cached_version = g_dbus_proxy_get_cached_property(proxy, "version");
version = cached_version ? g_variant_get_uint32(cached_version) : 0;
return version;
}
GDBusConnection *portal_get_dbus_connection(void)
{
ensure_proxy();
return connection;
}
GDBusProxy *portal_get_dbus_proxy(void)
{
ensure_proxy();
return proxy;
}