void get_source_parent_name_color (GcalManager *manager, ESource *source, gchar **name, gchar **color) { ESource *parent_source; g_assert (source && E_IS_SOURCE (source)); parent_source = gcal_manager_get_source (manager, e_source_get_parent (source)); if (name != NULL) *name = e_source_dup_display_name (parent_source); if (color != NULL) { GdkRGBA c; get_color_name_from_source (parent_source, &c); *color = gdk_rgba_to_string (&c); } }
static gboolean get_result_metas_cb (GcalShellSearchProvider *search_provider, GDBusMethodInvocation *invocation, gchar **results, GcalShellSearchProvider2 *skel) { GcalShellSearchProviderPrivate *priv; gint i; gchar *uuid, *desc; const gchar* location; g_autoptr(GTimeZone) tz; g_autoptr (GDateTime) datetime; g_autoptr (GDateTime) local_datetime; ECalComponentDateTime dtstart; gchar *start_date; ECalComponentText summary; GdkRGBA color; GVariantBuilder abuilder, builder; GVariant *icon_variant; GcalEventData *data; GdkPixbuf *gicon; priv = search_provider->priv; g_variant_builder_init (&abuilder, G_VARIANT_TYPE ("aa{sv}")); for (i = 0; i < g_strv_length (results); i++) { uuid = results[i]; data = g_hash_table_lookup (priv->events, uuid); g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); g_variant_builder_add (&builder, "{sv}", "id", g_variant_new_string (uuid)); e_cal_component_get_summary (data->event_component, &summary); g_variant_builder_add (&builder, "{sv}", "name", g_variant_new_string (summary.value)); get_color_name_from_source (data->source, &color); gicon = get_circle_pixbuf_from_color (&color, 128); icon_variant = g_icon_serialize (G_ICON (gicon)); g_variant_builder_add (&builder, "{sv}", "icon", icon_variant); g_object_unref (gicon); g_variant_unref (icon_variant); e_cal_component_get_dtstart (data->event_component, &dtstart); if (dtstart.tzid != NULL) tz = g_time_zone_new (dtstart.tzid); else if (dtstart.value->zone != NULL) tz = g_time_zone_new (icaltimezone_get_tzid ((icaltimezone*) dtstart.value->zone)); else tz = g_time_zone_new_local (); datetime = g_date_time_new (tz, dtstart.value->year, dtstart.value->month, dtstart.value->day, dtstart.value->hour, dtstart.value->minute, dtstart.value->second); local_datetime = g_date_time_to_local (datetime); /* FIXME: respect 24h time format */ start_date = g_date_time_format (local_datetime, (dtstart.value->is_date == 1) ? "%x" : "%c"); e_cal_component_free_datetime (&dtstart); e_cal_component_get_location (data->event_component, &location); if (location != NULL) desc = g_strconcat (start_date, ". ", location, NULL); else desc = g_strdup (start_date); g_variant_builder_add (&builder, "{sv}", "description", g_variant_new_string (desc)); g_free (start_date); g_free (desc); g_variant_builder_add_value (&abuilder, g_variant_builder_end (&builder)); } g_dbus_method_invocation_return_value (invocation, g_variant_new ("(aa{sv})", &abuilder)); return TRUE; }