manager: Replace gcal_manager_get_sources()
With a GcalCalendar-based function.
This commit is contained in:
+13
-10
@@ -101,31 +101,34 @@ process_sources (GcalApplication *self)
|
|||||||
g_autofree gchar *new_css_data = NULL;
|
g_autofree gchar *new_css_data = NULL;
|
||||||
g_auto (GStrv) new_css_snippets = NULL;
|
g_auto (GStrv) new_css_snippets = NULL;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GList *sources, *l;
|
GList *calendars, *l;
|
||||||
ESource *source;
|
|
||||||
GQuark color_id;
|
GQuark color_id;
|
||||||
GdkRGBA color;
|
|
||||||
gint arr_length;
|
gint arr_length;
|
||||||
gint i = 0;
|
gint i = 0;
|
||||||
|
|
||||||
manager = gcal_context_get_manager (self->context);
|
manager = gcal_context_get_manager (self->context);
|
||||||
sources = gcal_manager_get_sources_connected (manager);
|
calendars = gcal_manager_get_calendars (manager);
|
||||||
arr_length = g_list_length (sources);
|
arr_length = g_list_length (calendars);
|
||||||
new_css_snippets = g_new0 (gchar*, arr_length + 2);
|
new_css_snippets = g_new0 (gchar*, arr_length + 2);
|
||||||
for (l = sources; l != NULL; l = g_list_next (l), i++)
|
for (l = calendars; l; l = l->next, i++)
|
||||||
{
|
{
|
||||||
g_autofree gchar* color_str = NULL;
|
g_autofree gchar* color_str = NULL;
|
||||||
|
const GdkRGBA *color;
|
||||||
|
GcalCalendar *calendar;
|
||||||
|
|
||||||
source = l->data;
|
calendar = l->data;
|
||||||
|
|
||||||
get_color_name_from_source (source, &color);
|
if (!gcal_calendar_get_visible (calendar))
|
||||||
color_str = gdk_rgba_to_string (&color);
|
continue;
|
||||||
|
|
||||||
|
color = gcal_calendar_get_color (calendar);
|
||||||
|
color_str = gdk_rgba_to_string (color);
|
||||||
color_id = g_quark_from_string (color_str);
|
color_id = g_quark_from_string (color_str);
|
||||||
|
|
||||||
new_css_snippets[i] = g_strdup_printf (CSS_TEMPLATE, color_id, color_str);
|
new_css_snippets[i] = g_strdup_printf (CSS_TEMPLATE, color_id, color_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_free (sources);
|
g_list_free (calendars);
|
||||||
|
|
||||||
new_css_data = g_strjoinv ("\n", new_css_snippets);
|
new_css_data = g_strjoinv ("\n", new_css_snippets);
|
||||||
|
|
||||||
|
|||||||
+32
-36
@@ -161,58 +161,59 @@ static gint
|
|||||||
sources_menu_sort_func (gconstpointer a,
|
sources_menu_sort_func (gconstpointer a,
|
||||||
gconstpointer b)
|
gconstpointer b)
|
||||||
{
|
{
|
||||||
ESource *source1, *source2;
|
GcalCalendar *calendar1, *calendar2;
|
||||||
|
|
||||||
source1 = E_SOURCE (a);
|
calendar1 = GCAL_CALENDAR ((gpointer) a);
|
||||||
source2 = E_SOURCE (b);
|
calendar2 = GCAL_CALENDAR ((gpointer) b);
|
||||||
|
|
||||||
return g_ascii_strcasecmp (e_source_get_display_name (source1), e_source_get_display_name (source2));
|
return g_ascii_strcasecmp (gcal_calendar_get_name (calendar1),
|
||||||
|
gcal_calendar_get_name (calendar2));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fill_sources_menu (GcalEditDialog *self)
|
fill_sources_menu (GcalEditDialog *self)
|
||||||
{
|
{
|
||||||
|
g_autoptr (GList) list = NULL;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GList *list;
|
|
||||||
GList *aux;
|
GList *aux;
|
||||||
|
|
||||||
if (self->context == NULL)
|
if (self->context == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
manager = gcal_context_get_manager (self->context);
|
manager = gcal_context_get_manager (self->context);
|
||||||
list = gcal_manager_get_sources (manager);
|
list = gcal_manager_get_calendars (manager);
|
||||||
self->sources_menu = g_menu_new ();
|
self->sources_menu = g_menu_new ();
|
||||||
|
|
||||||
list = g_list_sort (list, sources_menu_sort_func);
|
list = g_list_sort (list, sources_menu_sort_func);
|
||||||
|
|
||||||
for (aux = list; aux != NULL; aux = aux->next)
|
for (aux = list; aux != NULL; aux = aux->next)
|
||||||
{
|
{
|
||||||
ESource *source;
|
GcalCalendar *calendar;
|
||||||
|
const GdkRGBA *color;
|
||||||
GMenuItem *item;
|
GMenuItem *item;
|
||||||
GdkRGBA color;
|
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
GdkPixbuf *pix;
|
GdkPixbuf *pix;
|
||||||
|
|
||||||
source = E_SOURCE (aux->data);
|
calendar = GCAL_CALENDAR (aux->data);
|
||||||
|
|
||||||
/* retrieve color */
|
/* retrieve color */
|
||||||
get_color_name_from_source (source, &color);
|
color = gcal_calendar_get_color (calendar);
|
||||||
surface = get_circle_surface_from_color (&color, 16);
|
surface = get_circle_surface_from_color (color, 16);
|
||||||
pix = gdk_pixbuf_get_from_surface (surface, 0, 0, 16, 16);
|
pix = gdk_pixbuf_get_from_surface (surface, 0, 0, 16, 16);
|
||||||
|
|
||||||
/* menu item */
|
/* menu item */
|
||||||
item = g_menu_item_new (e_source_get_display_name (source), "select-calendar");
|
item = g_menu_item_new (gcal_calendar_get_name (calendar), "select-calendar");
|
||||||
g_menu_item_set_icon (item, G_ICON (pix));
|
g_menu_item_set_icon (item, G_ICON (pix));
|
||||||
|
|
||||||
/* set insensitive for read-only calendars */
|
/* set insensitive for read-only calendars */
|
||||||
if (!gcal_manager_is_client_writable (manager, source))
|
if (gcal_calendar_is_read_only (calendar))
|
||||||
{
|
{
|
||||||
g_menu_item_set_action_and_target_value (item, "select-calendar", NULL);
|
g_menu_item_set_action_and_target_value (item, "select-calendar", NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_menu_item_set_action_and_target_value (item, "select-calendar",
|
const gchar *id = gcal_calendar_get_id (calendar);
|
||||||
g_variant_new_string (e_source_get_uid (source)));
|
g_menu_item_set_action_and_target_value (item, "select-calendar", g_variant_new_string (id));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_menu_append_item (self->sources_menu, item);
|
g_menu_append_item (self->sources_menu, item);
|
||||||
@@ -226,8 +227,6 @@ fill_sources_menu (GcalEditDialog *self)
|
|||||||
|
|
||||||
/* HACK: show the popover menu icons */
|
/* HACK: show the popover menu icons */
|
||||||
fix_popover_menu_icons (GTK_POPOVER (self->sources_popover));
|
fix_popover_menu_icons (GTK_POPOVER (self->sources_popover));
|
||||||
|
|
||||||
g_list_free (list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -629,9 +628,9 @@ on_calendar_selected_action_cb (GSimpleAction *action,
|
|||||||
GVariant *value,
|
GVariant *value,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
g_autoptr (GList) list = NULL;
|
||||||
GcalEditDialog *self;
|
GcalEditDialog *self;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GList *list;
|
|
||||||
GList *aux;
|
GList *aux;
|
||||||
gchar *uid;
|
gchar *uid;
|
||||||
|
|
||||||
@@ -639,7 +638,7 @@ on_calendar_selected_action_cb (GSimpleAction *action,
|
|||||||
|
|
||||||
self = GCAL_EDIT_DIALOG (user_data);
|
self = GCAL_EDIT_DIALOG (user_data);
|
||||||
manager = gcal_context_get_manager (self->context);
|
manager = gcal_context_get_manager (self->context);
|
||||||
list = gcal_manager_get_sources (manager);
|
list = gcal_manager_get_calendars (manager);
|
||||||
|
|
||||||
/* retrieve selected calendar uid */
|
/* retrieve selected calendar uid */
|
||||||
g_variant_get (value, "s", &uid);
|
g_variant_get (value, "s", &uid);
|
||||||
@@ -647,31 +646,28 @@ on_calendar_selected_action_cb (GSimpleAction *action,
|
|||||||
/* search for any source with the given UID */
|
/* search for any source with the given UID */
|
||||||
for (aux = list; aux != NULL; aux = aux->next)
|
for (aux = list; aux != NULL; aux = aux->next)
|
||||||
{
|
{
|
||||||
ESource *source;
|
GcalCalendar *calendar = GCAL_CALENDAR (aux->data);
|
||||||
source = E_SOURCE (aux->data);
|
|
||||||
|
|
||||||
if (g_strcmp0 (e_source_get_uid (source), uid) == 0)
|
if (g_strcmp0 (gcal_calendar_get_id (calendar), uid) == 0)
|
||||||
{
|
{
|
||||||
GdkRGBA color;
|
cairo_surface_t *surface;
|
||||||
cairo_surface_t *surface;
|
const GdkRGBA *color;
|
||||||
|
|
||||||
/* retrieve color */
|
/* retrieve color */
|
||||||
get_color_name_from_source (source, &color);
|
color = gcal_calendar_get_color (calendar);
|
||||||
|
surface = get_circle_surface_from_color (color, 16);
|
||||||
|
gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface);
|
||||||
|
|
||||||
surface = get_circle_surface_from_color (&color, 16);
|
self->selected_source = gcal_calendar_get_source (calendar);
|
||||||
gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface);
|
|
||||||
|
|
||||||
self->selected_source = source;
|
gtk_label_set_label (GTK_LABEL (self->subtitle_label), gcal_calendar_get_name (calendar));
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (self->subtitle_label), e_source_get_display_name (source));
|
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||||
|
break;
|
||||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (uid);
|
g_free (uid);
|
||||||
g_list_free (list);
|
|
||||||
|
|
||||||
GCAL_EXIT;
|
GCAL_EXIT;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-43
@@ -773,53 +773,12 @@ gcal_manager_get_source (GcalManager *self,
|
|||||||
return e_source_registry_ref_source (self->source_registry, uid);
|
return e_source_registry_ref_source (self->source_registry, uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* gcal_manager_get_sources:
|
|
||||||
* @self: a #GcalManager
|
|
||||||
*
|
|
||||||
* Retrieve a list of the enabled sources used in the application.
|
|
||||||
*
|
|
||||||
* Returns: (nullable)(transfer container)(content-type ESource): a #GList
|
|
||||||
*/
|
|
||||||
GList*
|
GList*
|
||||||
gcal_manager_get_sources (GcalManager *self)
|
gcal_manager_get_calendars (GcalManager *self)
|
||||||
{
|
|
||||||
GHashTableIter iter;
|
|
||||||
gpointer key, value;
|
|
||||||
GList *aux = NULL;
|
|
||||||
|
|
||||||
GCAL_ENTRY;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, self->clients);
|
|
||||||
|
|
||||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
|
||||||
{
|
|
||||||
if (!is_source_enabled (key))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
aux = g_list_append (aux, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
GCAL_RETURN (aux);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gcal_manager_get_sources_connected:
|
|
||||||
* @self: a #GcalManager
|
|
||||||
*
|
|
||||||
* Returns a #GList with every source connected on the app,
|
|
||||||
* whether they are enabled or not.
|
|
||||||
*
|
|
||||||
* Returns: (nullable)(transfer container)(content-type ESource): a #GList
|
|
||||||
*/
|
|
||||||
GList*
|
|
||||||
gcal_manager_get_sources_connected (GcalManager *self)
|
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
|
g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
|
||||||
|
|
||||||
return g_hash_table_get_keys (self->clients);
|
return g_hash_table_get_values (self->clients);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-3
@@ -35,9 +35,7 @@ GcalManager* gcal_manager_new (void);
|
|||||||
ESource* gcal_manager_get_source (GcalManager *self,
|
ESource* gcal_manager_get_source (GcalManager *self,
|
||||||
const gchar *uid);
|
const gchar *uid);
|
||||||
|
|
||||||
GList* gcal_manager_get_sources (GcalManager *self);
|
GList* gcal_manager_get_calendars (GcalManager *self);
|
||||||
|
|
||||||
GList* gcal_manager_get_sources_connected (GcalManager *self);
|
|
||||||
|
|
||||||
ESource* gcal_manager_get_default_source (GcalManager *self);
|
ESource* gcal_manager_get_default_source (GcalManager *self);
|
||||||
|
|
||||||
|
|||||||
@@ -788,17 +788,24 @@ gcal_quick_add_popover_set_property (GObject *object,
|
|||||||
case PROP_CONTEXT:
|
case PROP_CONTEXT:
|
||||||
if (g_set_object (&self->context, g_value_get_object (value)))
|
if (g_set_object (&self->context, g_value_get_object (value)))
|
||||||
{
|
{
|
||||||
|
g_autoptr (GList) calendars = NULL;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
GList *sources, *l;
|
GList *l;
|
||||||
|
|
||||||
/* Add currently loaded sources */
|
/* Add currently loaded sources */
|
||||||
manager = gcal_context_get_manager (self->context);
|
manager = gcal_context_get_manager (self->context);
|
||||||
sources = gcal_manager_get_sources_connected (manager);
|
calendars = gcal_manager_get_calendars (manager);
|
||||||
|
|
||||||
for (l = sources; l != NULL; l = g_list_next (l))
|
for (l = calendars; l; l = l->next)
|
||||||
on_source_added (manager, l->data, gcal_manager_is_client_writable (manager, l->data), self);
|
{
|
||||||
|
GcalCalendar *calendar = l->data;
|
||||||
|
on_source_added (manager,
|
||||||
|
gcal_calendar_get_source (calendar),
|
||||||
|
gcal_calendar_get_visible (calendar),
|
||||||
|
self);
|
||||||
|
}
|
||||||
|
|
||||||
g_list_free (sources);
|
g_list_free (calendars);
|
||||||
|
|
||||||
/* Connect to the manager signals and keep the list updates */
|
/* Connect to the manager signals and keep the list updates */
|
||||||
g_signal_connect (manager, "source-added", G_CALLBACK (on_source_added), self);
|
g_signal_connect (manager, "source-added", G_CALLBACK (on_source_added), self);
|
||||||
|
|||||||
+11
-6
@@ -1192,14 +1192,19 @@ gcal_window_set_property (GObject *object,
|
|||||||
|
|
||||||
if (!gcal_manager_get_loading (manager))
|
if (!gcal_manager_get_loading (manager))
|
||||||
{
|
{
|
||||||
GList *sources, *l;
|
g_autoptr (GList) calendars = NULL;
|
||||||
|
GList *l;
|
||||||
|
|
||||||
sources = gcal_manager_get_sources_connected (manager);
|
calendars = gcal_manager_get_calendars (manager);
|
||||||
|
|
||||||
for (l = sources; l != NULL; l = g_list_next (l))
|
for (l = calendars; l; l = l->next)
|
||||||
add_source (manager, l->data, is_source_enabled (l->data), self);
|
{
|
||||||
|
GcalCalendar *calendar = l->data;
|
||||||
g_list_free (sources);
|
add_source (manager,
|
||||||
|
gcal_calendar_get_source (calendar),
|
||||||
|
gcal_calendar_get_visible (calendar),
|
||||||
|
self);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), object);
|
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), object);
|
||||||
|
|||||||
Reference in New Issue
Block a user