GVariant * photos_utils_create_zoom_target_value (gdouble delta, PhotosZoomEvent event) { GEnumClass *zoom_event_class = NULL; /* TODO: use g_autoptr */ GEnumValue *event_value; GVariant *delta_value; GVariant *event_nick_value; GVariant *ret_val = NULL; g_auto (GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_VARDICT); const gchar *event_nick = "none"; g_return_val_if_fail (delta >= 0.0, NULL); g_return_val_if_fail (event != PHOTOS_ZOOM_EVENT_NONE, NULL); delta_value = g_variant_new_double (delta); g_variant_builder_add (&builder, "{sv}", "delta", delta_value); zoom_event_class = G_ENUM_CLASS (g_type_class_ref (PHOTOS_TYPE_ZOOM_EVENT)); event_value = g_enum_get_value (zoom_event_class, (gint) event); if (event_value != NULL) event_nick = event_value->value_nick; event_nick_value = g_variant_new_string (event_nick); g_variant_builder_add (&builder, "{sv}", "event", event_nick_value); ret_val = g_variant_builder_end (&builder); g_type_class_unref (zoom_event_class); g_return_val_if_fail (g_variant_is_floating (ret_val), ret_val); return ret_val; }
static gboolean record_location_label (gpointer unused) { g_autoptr (GError) err = NULL; g_autoptr (GKeyFile) kf = g_key_file_new (); if (!g_key_file_load_from_file (kf, LOCATION_CONF_FILE, G_KEY_FILE_NONE, &err)) { /* this file’s existence is optional, so not found is not an error */ if (g_error_matches (err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) return G_SOURCE_REMOVE; g_warning ("Failed to load " LOCATION_CONF_FILE ", unable to record location label: %s", err->message); return G_SOURCE_REMOVE; } g_auto (GStrv) keys = g_key_file_get_keys (kf, LOCATION_LABEL_GROUP, NULL, NULL); if (keys == NULL || *keys == NULL) return G_SOURCE_REMOVE; g_autoptr (GString) label = g_string_new (""); g_auto (GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_ARRAY); for (GStrv cur = keys; *cur != NULL; cur++) { const gchar *key = *cur; g_autofree gchar *val = g_key_file_get_string (kf, LOCATION_LABEL_GROUP, key, NULL); if (val == NULL) continue; if (cur != keys) g_string_append (label, ", "); g_variant_builder_add (&builder, "{ss}", key, val); g_string_append_printf (label, "\"%s\" = \"%s\"", key, val); } g_message ("Recording location label: %s", label->str); emtr_event_recorder_record_event (emtr_event_recorder_get_default (), LOCATION_LABEL_EVENT, g_variant_builder_end (&builder)); return G_SOURCE_REMOVE; }