[Goodies-commits] r6429 - in sion/trunk: . src

Enrico Troeger enrico at xfce.org
Sat Jan 10 17:41:39 CET 2009


Author: enrico
Date: 2009-01-10 16:41:39 +0000 (Sat, 10 Jan 2009)
New Revision: 6429

Added:
   sion/trunk/THANKS
Modified:
   sion/trunk/ChangeLog
   sion/trunk/src/backendgvfs.c
   sion/trunk/src/bookmark.c
   sion/trunk/src/bookmark.h
   sion/trunk/src/bookmarkdialog.c
   sion/trunk/src/bookmarkeditdialog.c
   sion/trunk/src/settings.c
   sion/trunk/src/window.c
   sion/trunk/src/window.h
Log:
Try to connect to auto-connect bookmarks at startup and every minute. Clicking Disconnect cancels autoconnection for the running instance (patch by Colin Leroy, thanks).

Modified: sion/trunk/ChangeLog
===================================================================
--- sion/trunk/ChangeLog	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/ChangeLog	2009-01-10 16:41:39 UTC (rev 6429)
@@ -3,6 +3,10 @@
  * src/bookmarkeditdialog.c:
    Fix "This bookmark already exists" warning when editing an existing
    bookmark (patch by Colin Leroy, thanks).
+ * THANKS, src/bookmark.c, src/bookmark.h, src/settings.c:
+   Try to connect to auto-connect bookmarks at startup and every
+   minute. Clicking Disconnect cancels autoconnection for the
+   running instance (patch by Colin Leroy, thanks).
 
 
 2009-01-06  Enrico Tröger  <enrico(at)xfce(dot)org>

Added: sion/trunk/THANKS
===================================================================
--- sion/trunk/THANKS	                        (rev 0)
+++ sion/trunk/THANKS	2009-01-10 16:41:39 UTC (rev 6429)
@@ -0,0 +1,20 @@
+What's this file about?
+-----------------------
+This file lists all external people that have contributed to this project.
+If any contributors are missing, please email the developers - see the AUTHORS file.
+
+
+Testers and contributors:
+-------------------------
+These people have contributed to Sion by testing the software,
+reporting problems, sending patches and making useful suggestions.
+
+Colin Leroy <colin(at)colino(dot)net> - Autoconnect bookmarks patch
+
+
+Translators:
+------------
+These people have translated Sion to foreign languages.
+
+Thanks to all translators!
+For a detailed list see po/ChangeLog.

Modified: sion/trunk/src/backendgvfs.c
===================================================================
--- sion/trunk/src/backendgvfs.c	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/backendgvfs.c	2009-01-10 16:41:39 UTC (rev 6429)
@@ -457,9 +457,7 @@
 	uri = g_file_get_uri(location);
 	success = g_file_mount_enclosing_volume_finish(location, res, &error);
 
-	if (success || g_error_matches(error, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED))
-		verbose("Successfully mounted \"%s\"", uri);
-	else
+	if (! g_error_matches(error, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED))
 	{
 		gchar *msg = g_strdup_printf(_("Mounting of \"%s\" failed."), uri);
 		g_signal_emit(backend, signals[OPERATION_FAILED], 0, msg, error->message);

Modified: sion/trunk/src/bookmark.c
===================================================================
--- sion/trunk/src/bookmark.c	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmark.c	2009-01-10 16:41:39 UTC (rev 6429)
@@ -42,6 +42,8 @@
 	gchar	*share;
 	guint	 port;
 	gchar	*user;
+	gboolean autoconnect;
+	gboolean should_not_autoconnect;
 
 	gboolean is_valid;
 };
@@ -412,6 +414,46 @@
 }
 
 
+gboolean sion_bookmark_get_autoconnect(SionBookmark *bookmark)
+{
+	g_return_val_if_fail(bookmark != NULL, 0);
+
+	return SION_BOOKMARK_GET_PRIVATE(bookmark)->autoconnect;
+}
+
+
+void sion_bookmark_set_autoconnect(SionBookmark *bookmark, gboolean autoconnect)
+{
+	SionBookmarkPrivate *priv;
+
+	g_return_if_fail(bookmark != NULL);
+
+	priv = SION_BOOKMARK_GET_PRIVATE(bookmark);
+
+	priv->autoconnect = autoconnect;
+}
+
+
+gboolean sion_bookmark_get_should_not_autoconnect(SionBookmark *bookmark)
+{
+	g_return_val_if_fail(bookmark != NULL, 0);
+
+	return SION_BOOKMARK_GET_PRIVATE(bookmark)->should_not_autoconnect;
+}
+
+
+void sion_bookmark_set_should_not_autoconnect(SionBookmark *bookmark, gboolean should_not_autoconnect)
+{
+	SionBookmarkPrivate *priv;
+
+	g_return_if_fail(bookmark != NULL);
+
+	priv = SION_BOOKMARK_GET_PRIVATE(bookmark);
+
+	priv->should_not_autoconnect = should_not_autoconnect;
+}
+
+
 const gchar *sion_bookmark_get_user(SionBookmark *bookmark)
 {
 	g_return_val_if_fail(bookmark != NULL, NULL);

Modified: sion/trunk/src/bookmark.h
===================================================================
--- sion/trunk/src/bookmark.h	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmark.h	2009-01-10 16:41:39 UTC (rev 6429)
@@ -76,6 +76,13 @@
 const gchar*		sion_bookmark_get_domain	(SionBookmark *bookmark);
 void				sion_bookmark_set_domain	(SionBookmark *bookmark, const gchar *domain);
 
+gboolean			sion_bookmark_get_autoconnect	(SionBookmark *bookmark);
+void				sion_bookmark_set_autoconnect	(SionBookmark *bookmark, gboolean autoconnect);
+
+gboolean			sion_bookmark_get_should_not_autoconnect	(SionBookmark *bookmark);
+void				sion_bookmark_set_should_not_autoconnect	(SionBookmark *bookmark, gboolean should_not_autoconnect);
+
+
 G_END_DECLS
 
 #endif /* __BOOKMARK_H__ */

Modified: sion/trunk/src/bookmarkdialog.c
===================================================================
--- sion/trunk/src/bookmarkdialog.c	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmarkdialog.c	2009-01-10 16:41:39 UTC (rev 6429)
@@ -59,9 +59,11 @@
 	COL_SCHEME,
 	COL_HOST,
 	COL_PORT,
+	COL_AUTOMOUNT,
 	COL_USERNAME,
 	COL_OTHER,
 	COL_BMREF,
+	N_COLUMNS,
 	ACTION_ADD,
 	ACTION_EDIT,
 	ACTION_DELETE
@@ -131,6 +133,7 @@
 			COL_SCHEME, sion_describe_scheme(sion_bookmark_get_scheme(bm)),
 			COL_HOST, sion_bookmark_get_host(bm),
 			COL_PORT, port,
+			COL_AUTOMOUNT, sion_bookmark_get_autoconnect(bm),
 			COL_USERNAME, sion_bookmark_get_user(bm),
 			COL_OTHER, other_text->str,
 			COL_BMREF, bm,
@@ -189,6 +192,7 @@
 
 		update_row_in_model(SION_BOOKMARK_DIALOG(dialog), &iter, bm);
 		sion_window_update_bookmarks(SION_WINDOW(priv->parent));
+		sion_window_do_autoconnect(SION_WINDOW(priv->parent));
 	}
 	gtk_widget_destroy(edit_dialog);
 }
@@ -306,9 +310,9 @@
 	SionBookmarkDialogPrivate *priv = SION_BOOKMARK_DIALOG_GET_PRIVATE(dialog);
 
 	priv->tree = gtk_tree_view_new();
-	priv->store = gtk_list_store_new(7,
+	priv->store = gtk_list_store_new(N_COLUMNS,
 		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+		G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
@@ -342,6 +346,14 @@
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(priv->tree), column);
 
+	renderer = gtk_cell_renderer_toggle_new();
+	column = gtk_tree_view_column_new_with_attributes(
+		_("Automount"), renderer, "active", COL_AUTOMOUNT, NULL);
+	gtk_tree_view_column_set_sort_indicator(column, TRUE);
+	gtk_tree_view_column_set_sort_column_id(column, COL_AUTOMOUNT);
+	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(priv->tree), column);
+
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
 		_("Username"), renderer, "text", COL_USERNAME, NULL);

Modified: sion/trunk/src/bookmarkeditdialog.c
===================================================================
--- sion/trunk/src/bookmarkeditdialog.c	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/bookmarkeditdialog.c	2009-01-10 16:41:39 UTC (rev 6429)
@@ -48,6 +48,8 @@
 	GtkWidget *name_label;
 	GtkWidget *name_entry;
 
+	GtkWidget *autoconnect_checkbtn;
+
 	GtkWidget *uri_label;
 	GtkWidget *uri_entry;
 
@@ -374,6 +376,10 @@
 	if (port == 0)
 		port = methods[idx].port;
 
+	gtk_toggle_button_set_active(
+		GTK_TOGGLE_BUTTON(priv->autoconnect_checkbtn),
+		sion_bookmark_get_autoconnect(priv->bookmark_init));
+
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->port_spin), port);
 	combo_set_active(priv->type_combo, (gint) idx);
 }
@@ -431,7 +437,7 @@
 		gtk_container_remove(GTK_CONTAINER(priv->table), priv->information_label);
 	}
 
-	i = 3;
+	i = 4;
 	table = priv->table;
 
 	if (meth->scheme == NULL)
@@ -599,6 +605,7 @@
 	const gchar *tmp;
 	gint idx;
 	GtkTreeIter iter;
+	gboolean autoconnect;
 
 	g_return_if_fail(dialog != NULL);
 
@@ -620,7 +627,6 @@
 		idx = 0;
 	if (methods[idx].scheme == NULL)
 	{
-		sion_bookmark_set_name(priv->bookmark_update, "Custom");
 		sion_bookmark_set_uri(priv->bookmark_update, gtk_entry_get_text(GTK_ENTRY(priv->uri_entry)));
 	}
 	else
@@ -638,6 +644,9 @@
 		sion_bookmark_set_port(priv->bookmark_update,
 			gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(priv->port_spin)));
 	}
+
+	autoconnect = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->autoconnect_checkbtn));
+	sion_bookmark_set_autoconnect(priv->bookmark_update, autoconnect);
 }
 
 
@@ -687,6 +696,7 @@
 				combo_set_active(priv->type_combo, 0);
 				gtk_widget_hide(priv->name_label);
 				gtk_widget_hide(priv->name_entry);
+				gtk_widget_hide(priv->autoconnect_checkbtn);
 				break;
 			}
 		}
@@ -732,7 +742,7 @@
 	hbox = gtk_hbox_new(FALSE, 6);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
 
-	priv->table = table = gtk_table_new(8, 2, FALSE);
+	priv->table = table = gtk_table_new(9, 2, FALSE);
 	gtk_table_set_row_spacings(GTK_TABLE(table), 6);
 	gtk_table_set_col_spacings(GTK_TABLE(table), 12);
 	gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0);
@@ -745,15 +755,23 @@
 	gtk_label_set_mnemonic_widget(GTK_LABEL(priv->name_label), entry);
 	gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
 
-	label = gtk_label_new_with_mnemonic(_("Service _type:"));
+	label = gtk_label_new_with_mnemonic(_("_Autoconnect"));
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
 
+	priv->autoconnect_checkbtn = gtk_check_button_new();
+	gtk_label_set_mnemonic_widget(GTK_LABEL(label), priv->autoconnect_checkbtn);
+	gtk_table_attach(GTK_TABLE(table), priv->autoconnect_checkbtn, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+
+	label = gtk_label_new_with_mnemonic(_("Service _type:"));
+	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+
 	priv->type_combo = combo = gtk_combo_box_new();
-	gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
 
 	label_tmp = gtk_label_new(" ");
-	gtk_table_attach(GTK_TABLE(table), label_tmp, 0, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), label_tmp, 0, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
 
 	renderer = gtk_cell_renderer_text_new();
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);

Modified: sion/trunk/src/settings.c
===================================================================
--- sion/trunk/src/settings.c	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/settings.c	2009-01-10 16:41:39 UTC (rev 6429)
@@ -394,6 +394,7 @@
 			set_setting_string(k, name, "share", sion_bookmark_get_share(bm));
 			set_setting_string(k, name, "domain", sion_bookmark_get_domain(bm));
 			set_setting_int(k, name, "port", sion_bookmark_get_port(bm));
+			set_setting_int(k, name, "autoconnect", sion_bookmark_get_autoconnect(bm));
 		}
 	}
 
@@ -489,6 +490,7 @@
 	gchar **groups;
 	gchar *scheme, *host, *user, *domain, *share;
 	gint port;
+	gboolean autoconnect;
 	SionBookmark *bm;
 
 	k = g_key_file_new();
@@ -509,6 +511,7 @@
 		domain = get_setting_string(k, groups[i], "domain", "");
 		share = get_setting_string(k, groups[i], "share", "");
 		port = get_setting_int(k, groups[i], "port", 0);
+		autoconnect = get_setting_int(k, groups[i], "autoconnect", FALSE);
 
 		bm = sion_bookmark_new();
 		sion_bookmark_set_name(bm, groups[i]);
@@ -522,6 +525,7 @@
 		if (NZV(share))
 			sion_bookmark_set_share(bm, share);
 		sion_bookmark_set_port(bm, port);
+		sion_bookmark_set_autoconnect(bm, autoconnect);
 
 		g_ptr_array_add(priv->bookmarks, bm);
 

Modified: sion/trunk/src/window.c
===================================================================
--- sion/trunk/src/window.c	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/window.c	2009-01-10 16:41:39 UTC (rev 6429)
@@ -243,6 +243,28 @@
 }
 
 
+static SionBookmark *get_bookmark_from_uri(SionWindow *window, const gchar *uri)
+{
+	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
+	SionBookmarkList *bml = sion_settings_get_bookmarks(priv->settings);
+	SionBookmark *bm = NULL;
+	gboolean found = FALSE;
+	gchar *tmp_uri;
+	guint i;
+
+	for (i = 0; i < bml->len && ! found; i++)
+	{
+		bm = g_ptr_array_index(bml, i);
+		tmp_uri = sion_bookmark_get_uri(bm);
+		if (sion_str_equal(uri, tmp_uri))
+			found = TRUE;
+
+		g_free(tmp_uri);
+	}
+	return bm;
+}
+
+
 static void mount_from_bookmark(SionWindow *window, SionBookmark *bookmark)
 {
 	gchar *uri;
@@ -255,6 +277,9 @@
 	uri = sion_bookmark_get_uri(bookmark);
 	sion_backend_gvfs_mount_uri(priv->backend_gvfs, uri, sion_bookmark_get_domain(bookmark));
 
+	if (sion_bookmark_get_autoconnect(bookmark))
+		sion_bookmark_set_should_not_autoconnect(bookmark, FALSE);
+
 	g_free(uri);
 }
 
@@ -318,6 +343,7 @@
 {
 	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
 	GtkTreeIter iter;
+	SionBookmark *bm;
 
 	get_selected_iter(window, &iter);
 	if (gtk_list_store_iter_is_valid(priv->store, &iter))
@@ -328,6 +354,16 @@
 		gtk_tree_model_get(model, &iter, SION_WINDOW_COL_REF, &mnt, -1);
 		if (sion_backend_gvfs_is_mount(mnt))
 		{
+			gchar *uri;
+			sion_backend_gvfs_get_name_and_uri_from_mount(mnt, NULL, &uri);
+			bm = get_bookmark_from_uri(window, uri);
+			if (bm != NULL && sion_bookmark_get_autoconnect(bm))
+			{	/* we don't want auto-connection to reconnect this bookmark right
+				   after we unmount it. */
+				sion_bookmark_set_should_not_autoconnect(bm, TRUE);
+			}
+			g_free(uri);
+
 			sion_backend_gvfs_unmount_mount(priv->backend_gvfs, mnt);
 		}
 	}
@@ -476,24 +512,12 @@
 	if (ref_type == SION_WINDOW_REF_TYPE_MOUNT)
 	{
 		gchar *uri;
-		gchar *tmp_uri;
-		guint i;
-		SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
-		SionBookmarkList *bml = sion_settings_get_bookmarks(priv->settings);
-		SionBookmark *bm;
 		gboolean found = FALSE;
 
 		sion_backend_gvfs_get_name_and_uri_from_mount(ref, NULL, &uri);
 
-		for (i = 0; i < bml->len && ! found; i++)
-		{
-			bm = g_ptr_array_index(bml, i);
-			tmp_uri = sion_bookmark_get_uri(bm);
-			if (sion_str_equal(uri, tmp_uri))
-				found = TRUE;
+		found = (get_bookmark_from_uri(window, uri) != NULL);
 
-			g_free(tmp_uri);
-		}
 		g_free(uri);
 		return found;
 	}
@@ -709,6 +733,32 @@
 }
 
 
+gboolean sion_window_do_autoconnect(gpointer data)
+{
+	static gboolean timeout_added = FALSE;
+	SionWindow *window = SION_WINDOW(data);
+	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
+	SionBookmarkList *bookmarks = sion_settings_get_bookmarks(priv->settings);
+	guint i;
+
+	for (i = 0; i < bookmarks->len; i++)
+	{
+		SionBookmark *bm = g_ptr_array_index(bookmarks, i);
+		if (sion_bookmark_get_autoconnect(bm) && ! sion_bookmark_get_should_not_autoconnect(bm))
+		{
+			mount_from_bookmark(window, bm);
+		}
+	}
+
+	if (! timeout_added)
+	{
+		g_timeout_add_seconds(60, sion_window_do_autoconnect, data);
+		timeout_added = TRUE;
+	}
+	return TRUE;
+}
+
+
 static void action_create_bookmark_cb(G_GNUC_UNUSED GtkAction *button, SionWindow *window)
 {
 	SionWindowPrivate *priv = SION_WINDOW_GET_PRIVATE(window);
@@ -723,27 +773,13 @@
 		gtk_tree_model_get(model, &iter, SION_WINDOW_COL_REF, &mnt, -1);
 		if (sion_backend_gvfs_is_mount(mnt))
 		{
-			gchar *uri, *tmp_uri, *name;
-			guint i;
-			gboolean found = FALSE;
-			SionBookmark *bm;
-			SionBookmarkList *bml = sion_settings_get_bookmarks(priv->settings);
+			gchar *uri, *name;
 
 			sion_backend_gvfs_get_name_and_uri_from_mount(mnt, &name, &uri);
-			// check whether the current mount is already a bookmark ...
-			for (i = 0; i < bml->len && ! found; i++)
-			{
-				bm = g_ptr_array_index(bml, i);
-				tmp_uri = sion_bookmark_get_uri(bm);
-				if (sion_str_equal(uri, tmp_uri))
-					found = TRUE;
 
-				g_free(tmp_uri);
-			}
-			// ... and add it if not
-			if (! found)
+			if (get_bookmark_from_uri(window, uri) == NULL)
 			{
-				bm = sion_bookmark_new_from_uri(name, uri);
+				SionBookmark *bm = sion_bookmark_new_from_uri(name, uri);
 				if (sion_bookmark_is_valid(bm))
 				{
 					GtkWidget *edit_dialog;
@@ -1200,6 +1236,7 @@
 
 	mounts_changed_cb(NULL, SION_WINDOW(window));
 	sion_window_update_bookmarks(SION_WINDOW(window));
+	sion_window_do_autoconnect(SION_WINDOW(window));
 
 	return window;
 }

Modified: sion/trunk/src/window.h
===================================================================
--- sion/trunk/src/window.h	2009-01-10 16:41:32 UTC (rev 6428)
+++ sion/trunk/src/window.h	2009-01-10 16:41:39 UTC (rev 6429)
@@ -49,6 +49,7 @@
 GtkWidget*	sion_window_new					(SionSettings *settings);
 
 void		sion_window_update_bookmarks	(SionWindow *window);
+gboolean 	sion_window_do_autoconnect	(gpointer data);
 
 
 const gchar* sion_window_get_icon_name		(void);




More information about the Goodies-commits mailing list