clapper-app: Add Control Hub Enhancer support

When installed configure and use it instead of ClapperServer feature.
Also hide all server feature options in preferences when not being used.
This commit is contained in:
Rafał Dzięgiel
2025-12-02 18:19:06 +01:00
parent f58e403c55
commit 1bc1fbf54e
3 changed files with 31 additions and 11 deletions

View File

@@ -36,6 +36,8 @@ struct _ClapperAppPreferencesWindow
AdwComboRow *seek_method_combo_row;
AdwComboRow *seek_unit_combo_row;
AdwSpinRow *seek_value_spin_row;
AdwPreferencesGroup *features_group;
AdwSwitchRow *server_switch_row;
AdwSpinRow *audio_offset_spin_row;
@@ -863,6 +865,10 @@ clapper_app_preferences_window_new (GtkApplication *gtk_app)
static void
clapper_app_preferences_window_init (ClapperAppPreferencesWindow *self)
{
#if CLAPPER_HAVE_SERVER
ClapperEnhancerProxy *proxy;
#endif
gtk_widget_init_template (GTK_WIDGET (self));
self->rank_rows = g_ptr_array_new ();
@@ -877,10 +883,15 @@ clapper_app_preferences_window_init (ClapperAppPreferencesWindow *self)
self->seek_value_spin_row, "value", G_SETTINGS_BIND_DEFAULT);
#if CLAPPER_HAVE_SERVER
g_settings_bind (self->settings, "server-enabled",
self->server_switch_row, "active", G_SETTINGS_BIND_DEFAULT);
#else
gtk_widget_set_sensitive (GTK_WIDGET (self->server_switch_row), FALSE);
/* When both are available, prefer enhancer over deprecated feature */
if ((proxy = clapper_enhancer_proxy_list_get_proxy_by_module (
clapper_get_global_enhancer_proxies (), "clapper-control-hub"))) {
gst_object_unref (proxy);
} else {
g_settings_bind (self->settings, "server-enabled",
self->server_switch_row, "active", G_SETTINGS_BIND_DEFAULT);
gtk_widget_set_visible (GTK_WIDGET (self->features_group), TRUE);
}
#endif
g_settings_bind (self->settings, "audio-offset",
@@ -964,6 +975,8 @@ clapper_app_preferences_window_class_init (ClapperAppPreferencesWindowClass *kla
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, seek_method_combo_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, seek_unit_combo_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, seek_value_spin_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, features_group);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, server_switch_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, audio_offset_spin_row);

View File

@@ -1282,14 +1282,20 @@ clapper_app_window_constructed (GObject *object)
#endif
}
if ((proxy = clapper_enhancer_proxy_list_get_proxy_by_module (proxies, "clapper-control-hub"))) {
clapper_enhancer_proxy_set_locally (proxy,
"queue-controllable", TRUE, NULL);
gst_object_unref (proxy);
} else {
#if CLAPPER_HAVE_SERVER
feature = CLAPPER_FEATURE (clapper_server_new ());
clapper_server_set_queue_controllable (CLAPPER_SERVER (feature), TRUE);
g_settings_bind (self->settings, "server-enabled",
feature, "enabled", G_SETTINGS_BIND_GET);
clapper_player_add_feature (player, feature);
gst_object_unref (feature);
feature = CLAPPER_FEATURE (clapper_server_new ());
clapper_server_set_queue_controllable (CLAPPER_SERVER (feature), TRUE);
g_settings_bind (self->settings, "server-enabled",
feature, "enabled", G_SETTINGS_BIND_GET);
clapper_player_add_feature (player, feature);
gst_object_unref (feature);
#endif
}
#if CLAPPER_HAVE_DISCOVERER
if ((proxy = clapper_enhancer_proxy_list_get_proxy_by_module (proxies, "clapper-media-scanner"))) {

View File

@@ -59,8 +59,9 @@
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
<object class="AdwPreferencesGroup" id="features_group">
<property name="title" translatable="yes">Features</property>
<property name="visible">false</property>
<child>
<object class="AdwSwitchRow" id="server_switch_row">
<property name="title" translatable="yes">Server</property>