Skip to content

Commit

Permalink
clapper-app: Cleanup to not store app options as global and static
Browse files Browse the repository at this point in the history
Now that we are using both local and global command line vfuncs, we
can just get and apply options in them and free values later.

This avoids having options global and static.
  • Loading branch information
Rafostar committed May 11, 2024
1 parent e81c752 commit 5ffeb0b
Showing 1 changed file with 60 additions and 47 deletions.
107 changes: 60 additions & 47 deletions src/bin/clapper-app/clapper-app-application.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ struct _ClapperAppApplication
gboolean need_init_state;
};

#define parent_class clapper_app_application_parent_class
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);

struct ClapperPluginFeatureData
{
const gchar *name;
Expand All @@ -58,8 +61,16 @@ struct ClapperPluginData
struct ClapperPluginFeatureData features[10];
};

typedef struct
{
const gchar *action;
const gchar *accels[3];
} ClapperAppShortcut;

struct ClapperAppOptions
{
gboolean enqueue;

gdouble volume;
gdouble speed;

Expand All @@ -70,25 +81,14 @@ struct ClapperAppOptions
gchar *audio_sink;
};

typedef struct
{
const gchar *action;
const gchar *accels[3];
} ClapperAppShortcut;

#define parent_class clapper_app_application_parent_class
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);

static struct ClapperAppOptions app_opts = { 0, };

static inline void
_app_opts_free (void)
_app_opts_free_content (struct ClapperAppOptions *app_opts)
{
g_free (app_opts.video_filter);
g_free (app_opts.audio_filter);
g_free (app_opts->video_filter);
g_free (app_opts->audio_filter);

g_free (app_opts.video_sink);
g_free (app_opts.audio_sink);
g_free (app_opts->video_sink);
g_free (app_opts->audio_sink);
}

static inline void
Expand Down Expand Up @@ -251,32 +251,33 @@ show_about (GSimpleAction *action, GVariant *param, gpointer user_data)
}

static inline void
_restore_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_window)
_apply_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_window,
const struct ClapperAppOptions *app_opts)
{
ClapperPlayer *player = clapper_app_window_get_player (app_window);
ClapperQueue *queue = clapper_player_get_queue (player);

GST_DEBUG ("Restoring saved GSettings values to: %" GST_PTR_FORMAT, app_window);
GST_DEBUG ("Applying settings values to: %" GST_PTR_FORMAT, app_window);

if (app_opts.video_filter)
clapper_player_set_video_filter (player, clapper_app_utils_make_element (app_opts.video_filter));
if (app_opts.audio_filter)
clapper_player_set_audio_filter (player, clapper_app_utils_make_element (app_opts.audio_filter));
if (app_opts.video_sink)
clapper_player_set_video_sink (player, clapper_app_utils_make_element (app_opts.video_sink));
if (app_opts.audio_sink)
clapper_player_set_audio_sink (player, clapper_app_utils_make_element (app_opts.audio_sink));
if (app_opts->video_filter)
clapper_player_set_video_filter (player, clapper_app_utils_make_element (app_opts->video_filter));
if (app_opts->audio_filter)
clapper_player_set_audio_filter (player, clapper_app_utils_make_element (app_opts->audio_filter));
if (app_opts->video_sink)
clapper_player_set_video_sink (player, clapper_app_utils_make_element (app_opts->video_sink));
if (app_opts->audio_sink)
clapper_player_set_audio_sink (player, clapper_app_utils_make_element (app_opts->audio_sink));

/* NOTE: Not using ternary operator to avoid accidental typecasting */
if (app_opts.volume >= 0)
clapper_player_set_volume (player, PERCENTAGE_ROUND (app_opts.volume));
if (app_opts->volume >= 0)
clapper_player_set_volume (player, PERCENTAGE_ROUND (app_opts->volume));
else
clapper_player_set_volume (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "volume")));

clapper_player_set_mute (player, g_settings_get_boolean (self->settings, "mute"));

if (app_opts.speed >= 0)
clapper_player_set_speed (player, PERCENTAGE_ROUND (app_opts.speed));
if (app_opts->speed >= 0)
clapper_player_set_speed (player, PERCENTAGE_ROUND (app_opts->speed));
else
clapper_player_set_speed (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "speed")));

Expand All @@ -288,7 +289,7 @@ _restore_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_
else if (g_settings_get_boolean (self->settings, "maximized"))
gtk_window_maximize (GTK_WINDOW (app_window));

GST_DEBUG ("Configuration restored");
GST_DEBUG ("Configuration applied");
}

static inline void
Expand Down Expand Up @@ -355,10 +356,8 @@ clapper_app_application_activate (GApplication *app)
GST_INFO ("Activate");
G_APPLICATION_CLASS (parent_class)->activate (app);

if (!(window = gtk_application_get_active_window (GTK_APPLICATION (app)))) {
if (!(window = gtk_application_get_active_window (GTK_APPLICATION (app))))
window = GTK_WINDOW (clapper_app_window_new (GTK_APPLICATION (app)));
_restore_settings_to_window (self, CLAPPER_APP_WINDOW_CAST (window));
}

if (self->need_init_state) {
_assemble_initial_state (window);
Expand Down Expand Up @@ -393,26 +392,44 @@ clapper_app_application_local_command_line (GApplication *app,
static gint
clapper_app_application_command_line (GApplication *app, GApplicationCommandLine *cmd_line)
{
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (app);
struct ClapperAppOptions app_opts = { 0, };
GtkWindow *window;
GVariantDict *options;
GFile **files = NULL;
gint n_files = 0;
gboolean enqueue = FALSE;

GST_INFO ("Handling command line");

options = g_application_command_line_get_options_dict (cmd_line);

/* Enqueue only makes sense from remote invocation */
if (g_application_command_line_get_is_remote (cmd_line))
g_variant_dict_lookup (options, "enqueue", "b", &enqueue);
g_variant_dict_lookup (options, "enqueue", "b", &app_opts.enqueue);

if (!g_variant_dict_lookup (options, "volume", "d", &app_opts.volume))
app_opts.volume = -1;
if (!g_variant_dict_lookup (options, "speed", "d", &app_opts.speed))
app_opts.speed = -1;

g_variant_dict_lookup (options, "video_filter", "s", &app_opts.video_filter);
g_variant_dict_lookup (options, "audio_filter", "s", &app_opts.audio_filter);

g_variant_dict_lookup (options, "video_sink", "s", &app_opts.video_sink);
g_variant_dict_lookup (options, "audio_sink", "s", &app_opts.audio_sink);

if (clapper_app_utils_files_from_command_line (cmd_line, &files, &n_files)) {
g_application_open (app, files, n_files, (enqueue) ? "add-only" : "");
g_application_open (app, files, n_files, (app_opts.enqueue) ? "add-only" : "");
clapper_app_utils_files_free (files);
} else {
g_application_activate (app);
}

window = gtk_application_get_active_window (GTK_APPLICATION (app));
_apply_settings_to_window (self, CLAPPER_APP_WINDOW_CAST (window), &app_opts);

_app_opts_free_content (&app_opts);

return EXIT_SUCCESS;
}

Expand Down Expand Up @@ -574,9 +591,6 @@ clapper_app_application_open (GApplication *app,
static void
clapper_app_application_init (ClapperAppApplication *self)
{
app_opts.volume = -1;
app_opts.speed = -1;

self->need_init_state = TRUE;
}

Expand All @@ -589,12 +603,12 @@ clapper_app_application_constructed (GObject *object)

const GOptionEntry app_options[] = {
{ "enqueue", 0, 0, G_OPTION_ARG_NONE, NULL, _("Append media to queue in primary application instance"), NULL },
{ "volume", 0, 0, G_OPTION_ARG_DOUBLE, &app_opts.volume, _("Audio volume to set at startup"), NULL },
{ "speed", 0, 0, G_OPTION_ARG_DOUBLE, &app_opts.speed, _("Playback speed to set at startup"), NULL },
{ "video-filter", 0, 0, G_OPTION_ARG_STRING, &app_opts.video_filter, _("Video filter to use (\"none\" to disable)"), NULL },
{ "audio-filter", 0, 0, G_OPTION_ARG_STRING, &app_opts.audio_filter, _("Audio filter to use (\"none\" to disable)"), NULL },
{ "video-sink", 0, 0, G_OPTION_ARG_STRING, &app_opts.video_sink, _("Video sink to use"), NULL },
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, &app_opts.audio_sink, _("Audio sink to use"), NULL },
{ "volume", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Audio volume to set at startup"), NULL },
{ "speed", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Playback speed to set at startup"), NULL },
{ "video-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video filter to use (\"none\" to disable)"), NULL },
{ "audio-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio filter to use (\"none\" to disable)"), NULL },
{ "video-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video sink to use"), NULL },
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio sink to use"), NULL },
{ NULL }
};
static const GActionEntry app_actions[] = {
Expand Down Expand Up @@ -646,7 +660,6 @@ clapper_app_application_finalize (GObject *object)
GST_TRACE ("Finalize");

g_object_unref (self->settings);
_app_opts_free ();

G_OBJECT_CLASS (parent_class)->finalize (object);
}
Expand Down

0 comments on commit 5ffeb0b

Please sign in to comment.