shell-provider: use GcalEvent instead of event data
Following the sequence of porting commits, make the Shell's search provider class handle events using GcalEvent classes instead of the old GcalEventData structure.
This commit is contained in:
@@ -563,8 +563,8 @@ gcal_application_set_uuid (GcalApplication *application,
|
||||
|
||||
void
|
||||
gcal_application_set_initial_date (GcalApplication *application,
|
||||
const icaltimetype *date)
|
||||
GDateTime *date)
|
||||
{
|
||||
g_free (application->initial_date);
|
||||
application->initial_date = gcal_dup_icaltime (date);
|
||||
application->initial_date = datetime_to_icaltime (date);
|
||||
}
|
||||
|
||||
@@ -35,8 +35,9 @@ GcalManager* gcal_application_get_manager (GcalApplication *app);
|
||||
GSettings* gcal_application_get_settings (GcalApplication *app);
|
||||
void gcal_application_set_uuid (GcalApplication *application,
|
||||
const gchar *uuid);
|
||||
|
||||
void gcal_application_set_initial_date (GcalApplication *application,
|
||||
const icaltimetype *date);
|
||||
GDateTime *date);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
+16
-37
@@ -17,7 +17,6 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "gcal-event.h"
|
||||
#include "gcal-manager.h"
|
||||
#include "gcal-utils.h"
|
||||
|
||||
@@ -263,25 +262,6 @@ free_unit_data (GcalManagerUnit *data)
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gather_components (ECalDataModel *data_model,
|
||||
ECalClient *client,
|
||||
const ECalComponentId *id,
|
||||
ECalComponent *comp,
|
||||
time_t instance_start,
|
||||
time_t instance_end,
|
||||
gpointer user_data)
|
||||
{
|
||||
GList **result = user_data;
|
||||
GcalEventData *new_data = g_new0 (GcalEventData, 1);
|
||||
|
||||
new_data->source = e_client_get_source (E_CLIENT (client));
|
||||
new_data->event_component = g_object_ref (comp);
|
||||
*result = g_list_append (*result, new_data);/* FIXME: add me sorted */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gather_events (ECalDataModel *data_model,
|
||||
ECalClient *client,
|
||||
@@ -1112,7 +1092,7 @@ gcal_manager_get_shell_search_events (GcalManager *manager)
|
||||
|
||||
e_cal_data_model_get_subscriber_range (manager->shell_search_data_model, manager->search_view_data->subscriber,
|
||||
&range_start, &range_end);
|
||||
e_cal_data_model_foreach_component (manager->shell_search_data_model, range_start, range_end, gather_components, &list);
|
||||
e_cal_data_model_foreach_component (manager->shell_search_data_model, range_start, range_end, gather_events, &list);
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -1552,39 +1532,38 @@ gcal_manager_load_completed (GcalManager *manager)
|
||||
return manager->sources_at_launch == 0;
|
||||
}
|
||||
|
||||
GcalEventData*
|
||||
GcalEvent*
|
||||
gcal_manager_get_event_from_shell_search (GcalManager *manager,
|
||||
const gchar *uuid)
|
||||
{
|
||||
GcalEvent *new_event;
|
||||
GList *l, *list;
|
||||
time_t range_start, range_end;
|
||||
GList *l, *list = NULL;
|
||||
GcalEventData *data, *new_data = NULL;
|
||||
gchar *cuuid;
|
||||
|
||||
list = NULL;
|
||||
new_event = NULL;
|
||||
|
||||
e_cal_data_model_get_subscriber_range (manager->shell_search_data_model, manager->search_view_data->subscriber,
|
||||
&range_start, &range_end);
|
||||
e_cal_data_model_foreach_component (manager->shell_search_data_model, range_start, range_end, gather_components, &list);
|
||||
if (list != NULL)
|
||||
new_data = g_new0 (GcalEventData, 1);
|
||||
e_cal_data_model_foreach_component (manager->shell_search_data_model, range_start, range_end, gather_events, &list);
|
||||
|
||||
for (l = list; l != NULL; l = g_list_next (l))
|
||||
{
|
||||
data = l->data;
|
||||
cuuid = get_uuid_from_component (data->source, data->event_component);
|
||||
GcalEvent *event;
|
||||
|
||||
if (g_strcmp0 (cuuid, uuid) == 0)
|
||||
event = l->data;
|
||||
|
||||
if (g_strcmp0 (gcal_event_get_uid (event), uuid) == 0)
|
||||
{
|
||||
new_data->source = data->source;
|
||||
new_data->event_component = g_object_ref (data->event_component);
|
||||
new_event = event;
|
||||
}
|
||||
|
||||
g_object_unref (data->event_component);
|
||||
g_free (data);
|
||||
g_free (cuuid);
|
||||
g_object_unref (event);
|
||||
}
|
||||
|
||||
g_list_free (list);
|
||||
|
||||
return new_data;
|
||||
return new_event;
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
||||
+2
-1
@@ -21,6 +21,7 @@
|
||||
#define __GCAL_MANAGER_H__
|
||||
|
||||
#include "e-cal-data-model.h"
|
||||
#include "gcal-event.h"
|
||||
|
||||
#include <libical/icaltime.h>
|
||||
#include <goa/goa.h>
|
||||
@@ -134,7 +135,7 @@ GList* gcal_manager_get_events (GcalManager *manager
|
||||
|
||||
gboolean gcal_manager_load_completed (GcalManager *manager);
|
||||
|
||||
GcalEventData* gcal_manager_get_event_from_shell_search (GcalManager *manager,
|
||||
GcalEvent* gcal_manager_get_event_from_shell_search (GcalManager *manager,
|
||||
const gchar *uuid);
|
||||
|
||||
gboolean gcal_manager_is_goa_client_ready (GcalManager *manager);
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "gcal-shell-search-provider-generated.h"
|
||||
|
||||
#include "gcal-application.h"
|
||||
#include "gcal-event.h"
|
||||
#include "gcal-window.h"
|
||||
#include "gcal-utils.h"
|
||||
|
||||
@@ -54,40 +55,12 @@ G_DEFINE_TYPE_WITH_CODE (GcalShellSearchProvider, gcal_shell_search_provider, G_
|
||||
G_ADD_PRIVATE (GcalShellSearchProvider)
|
||||
G_IMPLEMENT_INTERFACE (E_TYPE_CAL_DATA_MODEL_SUBSCRIBER, gcal_subscriber_interface_init));
|
||||
|
||||
static void
|
||||
free_event_data (gpointer data)
|
||||
{
|
||||
GcalEventData *event_data = data;
|
||||
g_object_unref (event_data->event_component);
|
||||
g_free (event_data);
|
||||
}
|
||||
|
||||
static gint
|
||||
sort_event_data (gconstpointer a,
|
||||
gconstpointer b,
|
||||
gpointer user_data)
|
||||
sort_event_data (GcalEvent *a,
|
||||
GcalEvent *b,
|
||||
gpointer user_data)
|
||||
{
|
||||
ECalComponent *comp1, *comp2;
|
||||
ECalComponentDateTime date1, date2;
|
||||
gint result;
|
||||
|
||||
|
||||
comp1 = ((GcalEventData*) a)->event_component;
|
||||
comp2 = ((GcalEventData*) b)->event_component;
|
||||
|
||||
e_cal_component_get_dtstart (comp1, &date1);
|
||||
e_cal_component_get_dtstart (comp2, &date2);
|
||||
|
||||
if (date1.tzid != NULL)
|
||||
date1.value->zone = icaltimezone_get_builtin_timezone_from_tzid (date1.tzid);
|
||||
if (date2.tzid != NULL)
|
||||
date2.value->zone = icaltimezone_get_builtin_timezone_from_tzid (date2.tzid);
|
||||
result = icaltime_compare_with_current (date1.value, date2.value, user_data);
|
||||
|
||||
e_cal_component_free_datetime (&date1);
|
||||
e_cal_component_free_datetime (&date2);
|
||||
|
||||
return result;
|
||||
return gcal_event_compare_with_current (a, b, user_data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -214,22 +187,14 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider,
|
||||
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;
|
||||
GDateTime *local_datetime;
|
||||
GVariantBuilder abuilder, builder;
|
||||
GVariant *icon_variant;
|
||||
GcalEventData *data;
|
||||
GcalEvent *event;
|
||||
GdkPixbuf *gicon;
|
||||
gchar *uuid, *desc;
|
||||
gchar *start_date;
|
||||
gint i;
|
||||
|
||||
priv = search_provider->priv;
|
||||
|
||||
@@ -237,50 +202,29 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider,
|
||||
for (i = 0; i < g_strv_length (results); i++)
|
||||
{
|
||||
uuid = results[i];
|
||||
data = g_hash_table_lookup (priv->events, uuid);
|
||||
event = 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));
|
||||
g_variant_builder_add (&builder, "{sv}", "name", g_variant_new_string (gcal_event_get_summary (event)));
|
||||
|
||||
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);
|
||||
gicon = get_circle_pixbuf_from_color (gcal_event_get_color (event), 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);
|
||||
local_datetime = g_date_time_to_local (gcal_event_get_date_start (event));
|
||||
|
||||
/* 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);
|
||||
start_date = g_date_time_format (local_datetime, gcal_event_get_all_day (event) ? "%x" : "%c");
|
||||
|
||||
e_cal_component_get_location (data->event_component, &location);
|
||||
if (location != NULL)
|
||||
desc = g_strconcat (start_date, ". ", location, NULL);
|
||||
if (gcal_event_get_location (event))
|
||||
desc = g_strconcat (start_date, ". ", gcal_event_get_location (event), 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));
|
||||
@@ -298,25 +242,22 @@ activate_result_cb (GcalShellSearchProvider *search_provider,
|
||||
{
|
||||
GcalShellSearchProviderPrivate *priv;
|
||||
GApplication *application;
|
||||
GcalEventData *data;
|
||||
ECalComponentDateTime dtstart;
|
||||
GcalEvent *event;
|
||||
GDateTime *dtstart;
|
||||
|
||||
priv = search_provider->priv;
|
||||
application = g_application_get_default ();
|
||||
|
||||
data = gcal_manager_get_event_from_shell_search (priv->manager, result);
|
||||
e_cal_component_get_dtstart (data->event_component, &dtstart);
|
||||
if (dtstart.tzid != NULL)
|
||||
dtstart.value->zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid);
|
||||
event = gcal_manager_get_event_from_shell_search (priv->manager, result);
|
||||
dtstart = gcal_event_get_date_start (event);
|
||||
|
||||
gcal_application_set_uuid (GCAL_APPLICATION (application), result);
|
||||
gcal_application_set_initial_date (GCAL_APPLICATION (application), dtstart.value);
|
||||
e_cal_component_free_datetime (&dtstart);
|
||||
gcal_application_set_initial_date (GCAL_APPLICATION (application), dtstart);
|
||||
|
||||
g_application_activate (application);
|
||||
|
||||
g_object_unref (data->event_component);
|
||||
g_free (data);
|
||||
g_clear_object (&event);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -355,9 +296,6 @@ query_completed_cb (GcalShellSearchProvider *search_provider,
|
||||
GcalShellSearchProviderPrivate *priv = search_provider->priv;
|
||||
GList *events, *l;
|
||||
GVariantBuilder builder;
|
||||
|
||||
GcalEventData *data;
|
||||
gchar *uuid;
|
||||
time_t current_time_t;
|
||||
|
||||
g_hash_table_remove_all (priv->events);
|
||||
@@ -372,15 +310,19 @@ query_completed_cb (GcalShellSearchProvider *search_provider,
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("as"));
|
||||
|
||||
current_time_t = time (NULL);
|
||||
events = g_list_sort_with_data (events, sort_event_data, ¤t_time_t);
|
||||
events = g_list_sort_with_data (events, (GCompareDataFunc) sort_event_data, ¤t_time_t);
|
||||
for (l = events; l != NULL; l = g_list_next (l))
|
||||
{
|
||||
data = l->data;
|
||||
uuid = get_uuid_from_component (data->source, data->event_component);
|
||||
const gchar *uid;
|
||||
|
||||
g_variant_builder_add (&builder, "s", uuid);
|
||||
uid = gcal_event_get_uid (l->data);
|
||||
|
||||
g_hash_table_insert (priv->events, uuid, data);
|
||||
if (g_hash_table_contains (priv->events, uid))
|
||||
continue;
|
||||
|
||||
g_variant_builder_add (&builder, "s", uid);
|
||||
|
||||
g_hash_table_insert (priv->events, g_strdup (uid), l->data);
|
||||
}
|
||||
g_list_free (events);
|
||||
|
||||
@@ -456,7 +398,7 @@ gcal_shell_search_provider_init (GcalShellSearchProvider *self)
|
||||
{
|
||||
GcalShellSearchProviderPrivate *priv = gcal_shell_search_provider_get_instance_private (self);
|
||||
|
||||
priv->events = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_event_data);
|
||||
priv->events = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
|
||||
priv->skel = gcal_shell_search_provider2_skeleton_new ();
|
||||
|
||||
g_signal_connect_swapped (priv->skel, "handle-get-initial-result-set", G_CALLBACK (get_initial_result_set_cb), self);
|
||||
|
||||
Reference in New Issue
Block a user