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
|
void
|
||||||
gcal_application_set_initial_date (GcalApplication *application,
|
gcal_application_set_initial_date (GcalApplication *application,
|
||||||
const icaltimetype *date)
|
GDateTime *date)
|
||||||
{
|
{
|
||||||
g_free (application->initial_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);
|
GSettings* gcal_application_get_settings (GcalApplication *app);
|
||||||
void gcal_application_set_uuid (GcalApplication *application,
|
void gcal_application_set_uuid (GcalApplication *application,
|
||||||
const gchar *uuid);
|
const gchar *uuid);
|
||||||
|
|
||||||
void gcal_application_set_initial_date (GcalApplication *application,
|
void gcal_application_set_initial_date (GcalApplication *application,
|
||||||
const icaltimetype *date);
|
GDateTime *date);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
+16
-37
@@ -17,7 +17,6 @@
|
|||||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gcal-event.h"
|
|
||||||
#include "gcal-manager.h"
|
#include "gcal-manager.h"
|
||||||
#include "gcal-utils.h"
|
#include "gcal-utils.h"
|
||||||
|
|
||||||
@@ -263,25 +262,6 @@ free_unit_data (GcalManagerUnit *data)
|
|||||||
g_free (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
|
static gboolean
|
||||||
gather_events (ECalDataModel *data_model,
|
gather_events (ECalDataModel *data_model,
|
||||||
ECalClient *client,
|
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,
|
e_cal_data_model_get_subscriber_range (manager->shell_search_data_model, manager->search_view_data->subscriber,
|
||||||
&range_start, &range_end);
|
&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;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1552,39 +1532,38 @@ gcal_manager_load_completed (GcalManager *manager)
|
|||||||
return manager->sources_at_launch == 0;
|
return manager->sources_at_launch == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GcalEventData*
|
GcalEvent*
|
||||||
gcal_manager_get_event_from_shell_search (GcalManager *manager,
|
gcal_manager_get_event_from_shell_search (GcalManager *manager,
|
||||||
const gchar *uuid)
|
const gchar *uuid)
|
||||||
{
|
{
|
||||||
|
GcalEvent *new_event;
|
||||||
|
GList *l, *list;
|
||||||
time_t range_start, range_end;
|
time_t range_start, range_end;
|
||||||
GList *l, *list = NULL;
|
|
||||||
GcalEventData *data, *new_data = NULL;
|
list = NULL;
|
||||||
gchar *cuuid;
|
new_event = NULL;
|
||||||
|
|
||||||
e_cal_data_model_get_subscriber_range (manager->shell_search_data_model, manager->search_view_data->subscriber,
|
e_cal_data_model_get_subscriber_range (manager->shell_search_data_model, manager->search_view_data->subscriber,
|
||||||
&range_start, &range_end);
|
&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);
|
||||||
if (list != NULL)
|
|
||||||
new_data = g_new0 (GcalEventData, 1);
|
|
||||||
|
|
||||||
for (l = list; l != NULL; l = g_list_next (l))
|
for (l = list; l != NULL; l = g_list_next (l))
|
||||||
{
|
{
|
||||||
data = l->data;
|
GcalEvent *event;
|
||||||
cuuid = get_uuid_from_component (data->source, data->event_component);
|
|
||||||
|
|
||||||
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_event = event;
|
||||||
new_data->event_component = g_object_ref (data->event_component);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref (data->event_component);
|
g_object_unref (event);
|
||||||
g_free (data);
|
|
||||||
g_free (cuuid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (list);
|
g_list_free (list);
|
||||||
|
|
||||||
return new_data;
|
return new_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
|||||||
+2
-1
@@ -21,6 +21,7 @@
|
|||||||
#define __GCAL_MANAGER_H__
|
#define __GCAL_MANAGER_H__
|
||||||
|
|
||||||
#include "e-cal-data-model.h"
|
#include "e-cal-data-model.h"
|
||||||
|
#include "gcal-event.h"
|
||||||
|
|
||||||
#include <libical/icaltime.h>
|
#include <libical/icaltime.h>
|
||||||
#include <goa/goa.h>
|
#include <goa/goa.h>
|
||||||
@@ -134,7 +135,7 @@ GList* gcal_manager_get_events (GcalManager *manager
|
|||||||
|
|
||||||
gboolean gcal_manager_load_completed (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);
|
const gchar *uuid);
|
||||||
|
|
||||||
gboolean gcal_manager_is_goa_client_ready (GcalManager *manager);
|
gboolean gcal_manager_is_goa_client_ready (GcalManager *manager);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include "gcal-shell-search-provider-generated.h"
|
#include "gcal-shell-search-provider-generated.h"
|
||||||
|
|
||||||
#include "gcal-application.h"
|
#include "gcal-application.h"
|
||||||
|
#include "gcal-event.h"
|
||||||
#include "gcal-window.h"
|
#include "gcal-window.h"
|
||||||
#include "gcal-utils.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_ADD_PRIVATE (GcalShellSearchProvider)
|
||||||
G_IMPLEMENT_INTERFACE (E_TYPE_CAL_DATA_MODEL_SUBSCRIBER, gcal_subscriber_interface_init));
|
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
|
static gint
|
||||||
sort_event_data (gconstpointer a,
|
sort_event_data (GcalEvent *a,
|
||||||
gconstpointer b,
|
GcalEvent *b,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
ECalComponent *comp1, *comp2;
|
return gcal_event_compare_with_current (a, b, user_data);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -214,22 +187,14 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider,
|
|||||||
GcalShellSearchProvider2 *skel)
|
GcalShellSearchProvider2 *skel)
|
||||||
{
|
{
|
||||||
GcalShellSearchProviderPrivate *priv;
|
GcalShellSearchProviderPrivate *priv;
|
||||||
gint i;
|
GDateTime *local_datetime;
|
||||||
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;
|
GVariantBuilder abuilder, builder;
|
||||||
GVariant *icon_variant;
|
GVariant *icon_variant;
|
||||||
GcalEventData *data;
|
GcalEvent *event;
|
||||||
GdkPixbuf *gicon;
|
GdkPixbuf *gicon;
|
||||||
|
gchar *uuid, *desc;
|
||||||
|
gchar *start_date;
|
||||||
|
gint i;
|
||||||
|
|
||||||
priv = search_provider->priv;
|
priv = search_provider->priv;
|
||||||
|
|
||||||
@@ -237,50 +202,29 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider,
|
|||||||
for (i = 0; i < g_strv_length (results); i++)
|
for (i = 0; i < g_strv_length (results); i++)
|
||||||
{
|
{
|
||||||
uuid = 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_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}", "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);
|
gicon = get_circle_pixbuf_from_color (gcal_event_get_color (event), 128);
|
||||||
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));
|
icon_variant = g_icon_serialize (G_ICON (gicon));
|
||||||
g_variant_builder_add (&builder, "{sv}", "icon", icon_variant);
|
g_variant_builder_add (&builder, "{sv}", "icon", icon_variant);
|
||||||
g_object_unref (gicon);
|
g_object_unref (gicon);
|
||||||
g_variant_unref (icon_variant);
|
g_variant_unref (icon_variant);
|
||||||
|
|
||||||
e_cal_component_get_dtstart (data->event_component, &dtstart);
|
local_datetime = g_date_time_to_local (gcal_event_get_date_start (event));
|
||||||
|
|
||||||
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 */
|
/* FIXME: respect 24h time format */
|
||||||
start_date = g_date_time_format (local_datetime,
|
start_date = g_date_time_format (local_datetime, gcal_event_get_all_day (event) ? "%x" : "%c");
|
||||||
(dtstart.value->is_date == 1) ? "%x" : "%c");
|
|
||||||
e_cal_component_free_datetime (&dtstart);
|
|
||||||
|
|
||||||
e_cal_component_get_location (data->event_component, &location);
|
if (gcal_event_get_location (event))
|
||||||
if (location != NULL)
|
desc = g_strconcat (start_date, ". ", gcal_event_get_location (event), NULL);
|
||||||
desc = g_strconcat (start_date, ". ", location, NULL);
|
|
||||||
else
|
else
|
||||||
desc = g_strdup (start_date);
|
desc = g_strdup (start_date);
|
||||||
|
|
||||||
g_variant_builder_add (&builder, "{sv}", "description", g_variant_new_string (desc));
|
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_variant_builder_add_value (&abuilder, g_variant_builder_end (&builder));
|
||||||
}
|
}
|
||||||
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(aa{sv})", &abuilder));
|
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;
|
GcalShellSearchProviderPrivate *priv;
|
||||||
GApplication *application;
|
GApplication *application;
|
||||||
GcalEventData *data;
|
GcalEvent *event;
|
||||||
ECalComponentDateTime dtstart;
|
GDateTime *dtstart;
|
||||||
|
|
||||||
priv = search_provider->priv;
|
priv = search_provider->priv;
|
||||||
application = g_application_get_default ();
|
application = g_application_get_default ();
|
||||||
|
|
||||||
data = gcal_manager_get_event_from_shell_search (priv->manager, result);
|
event = gcal_manager_get_event_from_shell_search (priv->manager, result);
|
||||||
e_cal_component_get_dtstart (data->event_component, &dtstart);
|
dtstart = gcal_event_get_date_start (event);
|
||||||
if (dtstart.tzid != NULL)
|
|
||||||
dtstart.value->zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid);
|
|
||||||
|
|
||||||
gcal_application_set_uuid (GCAL_APPLICATION (application), result);
|
gcal_application_set_uuid (GCAL_APPLICATION (application), result);
|
||||||
gcal_application_set_initial_date (GCAL_APPLICATION (application), dtstart.value);
|
gcal_application_set_initial_date (GCAL_APPLICATION (application), dtstart);
|
||||||
e_cal_component_free_datetime (&dtstart);
|
|
||||||
|
|
||||||
g_application_activate (application);
|
g_application_activate (application);
|
||||||
|
|
||||||
g_object_unref (data->event_component);
|
g_clear_object (&event);
|
||||||
g_free (data);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,9 +296,6 @@ query_completed_cb (GcalShellSearchProvider *search_provider,
|
|||||||
GcalShellSearchProviderPrivate *priv = search_provider->priv;
|
GcalShellSearchProviderPrivate *priv = search_provider->priv;
|
||||||
GList *events, *l;
|
GList *events, *l;
|
||||||
GVariantBuilder builder;
|
GVariantBuilder builder;
|
||||||
|
|
||||||
GcalEventData *data;
|
|
||||||
gchar *uuid;
|
|
||||||
time_t current_time_t;
|
time_t current_time_t;
|
||||||
|
|
||||||
g_hash_table_remove_all (priv->events);
|
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"));
|
g_variant_builder_init (&builder, G_VARIANT_TYPE ("as"));
|
||||||
|
|
||||||
current_time_t = time (NULL);
|
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))
|
for (l = events; l != NULL; l = g_list_next (l))
|
||||||
{
|
{
|
||||||
data = l->data;
|
const gchar *uid;
|
||||||
uuid = get_uuid_from_component (data->source, data->event_component);
|
|
||||||
|
|
||||||
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);
|
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);
|
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 ();
|
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);
|
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