source-dialog: improve validation of remote calendars
This commit is contained in:
+16
-11
@@ -1376,7 +1376,7 @@ check_activated_cb (GtkWidget *check,
|
||||
source = g_object_get_data (G_OBJECT (row), "source");
|
||||
|
||||
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)))
|
||||
self->remote_sources = g_list_append (self->remote_sources, source);
|
||||
self->remote_sources = g_list_prepend (self->remote_sources, source);
|
||||
else
|
||||
self->remote_sources = g_list_remove (self->remote_sources, source);
|
||||
|
||||
@@ -1389,7 +1389,6 @@ discover_sources_cb (GObject *source,
|
||||
gpointer user_data)
|
||||
{
|
||||
GcalSourceDialog *self;
|
||||
EWebDAVDiscoveredSource *src;
|
||||
GSList *discovered_sources, *user_addresses, *aux;
|
||||
GError *error;
|
||||
|
||||
@@ -1417,7 +1416,10 @@ discover_sources_cb (GObject *source,
|
||||
* really want to retry things on unavailable
|
||||
* servers.
|
||||
*/
|
||||
if (!self->prompt_password && error->code == 14)
|
||||
if (!self->prompt_password &&
|
||||
(error->code == 14 ||
|
||||
error->code == 403 ||
|
||||
error->code == 405))
|
||||
{
|
||||
self->prompt_password = TRUE;
|
||||
|
||||
@@ -1447,16 +1449,18 @@ discover_sources_cb (GObject *source,
|
||||
/* TODO: show a list of calendars */
|
||||
for (aux = discovered_sources; aux != NULL; aux = aux->next)
|
||||
{
|
||||
EWebDAVDiscoveredSource *discovered_source;
|
||||
gchar *resource_path = NULL;
|
||||
gboolean uri_valid;
|
||||
|
||||
src = aux->data;
|
||||
discovered_source = aux->data;
|
||||
|
||||
/* Get the new resource path from the uri */
|
||||
uri_valid = uri_get_fields (src->href, NULL, NULL, &resource_path, NULL);
|
||||
uri_valid = uri_get_fields (discovered_source->href, NULL, NULL, &resource_path, NULL);
|
||||
|
||||
if (uri_valid)
|
||||
{
|
||||
ESourceSelectable *selectable;
|
||||
ESourceWebdav *webdav;
|
||||
GtkWidget *row, *check;
|
||||
ESource *new_source;
|
||||
@@ -1464,20 +1468,24 @@ discover_sources_cb (GObject *source,
|
||||
|
||||
/* build up the new source */
|
||||
new_source = duplicate_source (E_SOURCE (source));
|
||||
e_source_set_display_name (E_SOURCE (new_source), src->display_name);
|
||||
e_source_set_display_name (E_SOURCE (new_source), discovered_source->display_name);
|
||||
|
||||
webdav = e_source_get_extension (new_source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
|
||||
e_source_webdav_set_resource_path (webdav, resource_path);
|
||||
e_source_webdav_set_display_name (webdav, src->display_name);
|
||||
e_source_webdav_set_display_name (webdav, discovered_source->display_name);
|
||||
|
||||
if (user_addresses)
|
||||
e_source_webdav_set_email_address (webdav, user_addresses->data);
|
||||
|
||||
/* Setup the color */
|
||||
selectable = e_source_get_extension (new_source, E_SOURCE_EXTENSION_CALENDAR);
|
||||
e_source_selectable_set_color (selectable, discovered_source->color);
|
||||
|
||||
/* create the new row */
|
||||
row = gtk_list_box_row_new ();
|
||||
|
||||
check = gtk_check_button_new ();
|
||||
gtk_button_set_label (GTK_BUTTON (check), src->display_name);
|
||||
gtk_button_set_label (GTK_BUTTON (check), discovered_source->display_name);
|
||||
g_signal_connect (check, "notify::active", G_CALLBACK (check_activated_cb), user_data);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (row), check);
|
||||
@@ -1485,9 +1493,6 @@ discover_sources_cb (GObject *source,
|
||||
|
||||
g_object_set_data (G_OBJECT (row), "parent-source", source);
|
||||
g_object_set_data (G_OBJECT (row), "source", new_source);
|
||||
g_object_set_data_full (G_OBJECT (row), "source-url", g_strdup (src->href), g_free);
|
||||
g_object_set_data_full (G_OBJECT (row), "source-color", g_strdup (src->color), g_free);
|
||||
g_object_set_data_full (G_OBJECT (row), "source-display-name", g_strdup (src->display_name), g_free);
|
||||
|
||||
gtk_widget_show_all (row);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user