[tomboy] Implement WebSync preferences.



commit 813136d724c9f8597850001c492c3b23224b54b9
Author: Sandy Armstrong <sanfordarmstrong gmail com>
Date:   Mon May 18 06:48:03 2009 -0700

    Implement WebSync preferences.
    
    Note that the password is saved in the clear for now.
---
 Tomboy/Addins/WebSyncService/WebSyncServer.cs      |    2 +-
 .../Addins/WebSyncService/WebSyncServiceAddin.cs   |  109 ++++++++++++++++++--
 2 files changed, 103 insertions(+), 8 deletions(-)

diff --git a/Tomboy/Addins/WebSyncService/WebSyncServer.cs b/Tomboy/Addins/WebSyncService/WebSyncServer.cs
index adc5192..59d60ba 100644
--- a/Tomboy/Addins/WebSyncService/WebSyncServer.cs
+++ b/Tomboy/Addins/WebSyncService/WebSyncServer.cs
@@ -39,7 +39,7 @@ namespace Tomboy.WebSync
 		private UserInfo user;
 		private List<NoteInfo> pendingCommits;
 		
-		public WebSyncServer (string serverUrl, string userName)
+		public WebSyncServer (string serverUrl, string userName, string password)
 		{
 			this.serverUrl = serverUrl;
 			this.userName = userName;
diff --git a/Tomboy/Addins/WebSyncService/WebSyncServiceAddin.cs b/Tomboy/Addins/WebSyncService/WebSyncServiceAddin.cs
index ea02b8e..12db110 100644
--- a/Tomboy/Addins/WebSyncService/WebSyncServiceAddin.cs
+++ b/Tomboy/Addins/WebSyncService/WebSyncServiceAddin.cs
@@ -35,8 +35,18 @@ namespace Tomboy.WebSync
 	public class WebSyncServiceAddin : SyncServiceAddin
 	{
 		private bool initialized;
-		private string serverUrl;
-		private string userName;
+
+		private const string serverUrlPrefPath =
+			"/apps/tomboy/sync/tomboyweb/server";
+		private const string usernamePrefPath =
+			"/apps/tomboy/sync/tomboyweb/username";
+		// TODO: Migrate to keyring or hash it or something!
+		private const string passwordPrefPath =
+			"/apps/tomboy/sync/tomboyweb/password";
+
+		private Gtk.Entry serverEntry;
+		private Gtk.Entry userEntry;
+		private Gtk.Entry passwordEntry;
 		
 		public WebSyncServiceAddin ()
 		{
@@ -56,7 +66,11 @@ namespace Tomboy.WebSync
 
 		public override bool IsConfigured {
 			get {
-				return true; // TODO: Implement configuration
+				string serverPref, userPref, passPref;
+				GetConfigSettings (out serverPref, out userPref, out passPref);
+				return !string.IsNullOrEmpty (serverPref) &&
+					!string.IsNullOrEmpty (userPref) &&
+					!string.IsNullOrEmpty (passPref);
 			}
 		}
 
@@ -68,13 +82,40 @@ namespace Tomboy.WebSync
 
 		public override Gtk.Widget CreatePreferencesControl ()
 		{
-			return new Gtk.VBox ();
+			Gtk.Table prefsTable = new Gtk.Table (3, 2, false);
+			prefsTable.RowSpacing = 5;
+			prefsTable.ColumnSpacing = 10;
+
+			serverEntry = new Gtk.Entry ();
+			userEntry = new Gtk.Entry ();
+			passwordEntry = new Gtk.Entry ();
+
+			string serverPref, userPref, passPref;
+			GetConfigSettings (out serverPref, out userPref, out passPref);
+
+			serverEntry.Text = serverPref;
+			userEntry.Text = userPref;
+			passwordEntry.Text = passPref;
+			passwordEntry.Visibility = false;
+			
+			AddRow (prefsTable, serverEntry, Catalog.GetString ("Se_rver:"), 0);
+			AddRow (prefsTable, userEntry, Catalog.GetString ("User_name:"), 1);
+			AddRow (prefsTable, passwordEntry, Catalog.GetString ("_Password:"), 2);
+
+			prefsTable.Show ();
+
+			// TODO: Add a section that shows the user something to verify they put
+			//       in the right URL...something that constructs their user URL, maybe?
+			
+			return prefsTable;
 		}
 
 		public override SyncServer CreateSyncServer ()
 		{
 			// TODO: What exactly do we need for connecting?
-			return new WebSyncServer (serverUrl, userName);
+			string serverPref, userPref, passPref;
+			GetConfigSettings (out serverPref, out userPref, out passPref);
+			return new WebSyncServer (serverPref, userPref, passPref);
 		}
 
 		public override void PostSyncCleanup ()
@@ -83,12 +124,15 @@ namespace Tomboy.WebSync
 
 		public override void ResetConfiguration ()
 		{
-			throw new System.NotImplementedException();
+			SaveConfigSettings (null, null, null);
 		}
 
 		public override bool SaveConfiguration ()
 		{
-			// TODO: Implement
+			string serverPref, userPref, passPref;
+			GetPrefWidgetSettings (out serverPref, out userPref, out passPref);
+			SaveConfigSettings (serverPref, userPref, passPref);
+			// TODO: Validate config
 			return true;
 		}
 		
@@ -103,6 +147,7 @@ namespace Tomboy.WebSync
 
 		public override void Shutdown ()
 		{
+			initialized = false;
 		}
 		
 		public override bool Initialized {
@@ -110,5 +155,55 @@ namespace Tomboy.WebSync
 		}
 
 		#endregion
+
+		#region Private Members
+
+		private void GetPrefWidgetSettings (out string serverPref, out string userPref, out string passPref)
+		{
+			serverPref = serverEntry.Text.Trim ();
+			userPref = userEntry.Text.Trim ();
+			passPref = passwordEntry.Text.Trim ();
+		}
+
+		private void GetConfigSettings (out string serverPref, out string userPref, out string passPref)
+		{
+			serverPref = (string)
+				Preferences.Get (serverUrlPrefPath);
+			userPref = (string)
+				Preferences.Get (usernamePrefPath);
+			passPref = (string)
+				Preferences.Get (passwordPrefPath);
+		}
+
+		private void SaveConfigSettings (string serverPref, string userPref, string passPref)
+		{
+			Preferences.Set (serverUrlPrefPath, serverPref);
+			Preferences.Set (usernamePrefPath, userPref);
+			Preferences.Set (passwordPrefPath, passPref);
+		}
+		
+		private void AddRow (Gtk.Table table, Gtk.Widget widget, string labelText, uint row)
+		{
+			Gtk.Label l = new Gtk.Label (labelText);
+			l.UseUnderline = true;
+			l.Xalign = 0.0f;
+			l.Show ();
+			table.Attach (l, 0, 1, row, row + 1,
+			              Gtk.AttachOptions.Fill,
+			              Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill,
+			              0, 0);
+
+			widget.Show ();
+			table.Attach (widget, 1, 2, row, row + 1,
+			              Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill,
+			              Gtk.AttachOptions.Expand | Gtk.AttachOptions.Fill,
+			              0, 0);
+
+			l.MnemonicWidget = widget;
+
+			// TODO: Tooltips
+		}
+
+		#endregion
 	}
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]