tasque r196 - in trunk: . src/Backends/Hiveminder src/Backends/Hiveminder/service



Author: jjohnny
Date: Sun Dec 28 12:06:29 2008
New Revision: 196
URL: http://svn.gnome.org/viewvc/tasque?rev=196&view=rev

Log:
Hiveminder : Basic CreateTask support added.

Modified:
   trunk/ChangeLog
   trunk/src/Backends/Hiveminder/HmBackend.cs
   trunk/src/Backends/Hiveminder/service/Hiveminder.cs
   trunk/src/Backends/Hiveminder/service/Task.cs

Modified: trunk/src/Backends/Hiveminder/HmBackend.cs
==============================================================================
--- trunk/src/Backends/Hiveminder/HmBackend.cs	(original)
+++ trunk/src/Backends/Hiveminder/HmBackend.cs	Sun Dec 28 12:06:29 2008
@@ -47,10 +47,11 @@
 		/// Key   = Task ID
 		/// Value = Gtk.TreeIter in taskStore
 		/// </summary>
-		private Dictionary<int, Gtk.TreeIter> taskIters;
+		private Dictionary<string, Gtk.TreeIter> taskIters;
 		private int newTaskId;
 		private Gtk.TreeStore taskStore;
 		private Gtk.TreeModelSort sortedTasksModel;
+		private object taskLock;
 		
 		private bool initialized;
 		private bool configured;
@@ -76,8 +77,9 @@
 			configured = false;
 			
 			newTaskId = 0;
-			taskIters = new Dictionary<int, Gtk.TreeIter> (); 
+			taskIters = new Dictionary<string, Gtk.TreeIter> (); 
 			taskStore = new Gtk.TreeStore (typeof (ITask));
+			taskLock = new object ();
 			
 			sortedTasksModel = new Gtk.TreeModelSort (taskStore);
 			sortedTasksModel.SetSortFunc (0, new Gtk.TreeIterCompareFunc (CompareTasksSortFunc));
@@ -136,7 +138,23 @@
 		#region Public Methods
 		public ITask CreateTask (string taskName, ICategory category)		
 		{
-			return null;
+			Hiveminder.Task task = new Task ();
+			Hiveminder.Task createdTask;
+			Gtk.TreeIter taskIter;
+
+			task.Summary = taskName;
+
+			createdTask = this.hm.CreateTask (task);
+			HmTask hmTask = new HmTask (createdTask);
+
+			//Add the newly created task into our store.
+			lock (taskLock) {
+				taskIter = taskStore.AppendNode ();
+				taskStore.SetValue (taskIter, 0, hmTask);
+				taskIters [hmTask.Id] = taskIter;
+			}
+
+			return hmTask;
 		}
 		
 		public void DeleteTask(ITask task)

Modified: trunk/src/Backends/Hiveminder/service/Hiveminder.cs
==============================================================================
--- trunk/src/Backends/Hiveminder/service/Hiveminder.cs	(original)
+++ trunk/src/Backends/Hiveminder/service/Hiveminder.cs	Sun Dec 28 12:06:29 2008
@@ -62,8 +62,11 @@
 		public string Login (string username, string password)
 		{
 			string postURL = "/__jifty/webservices/xml";
+
 			//TODO : Fix this.
-			string postData = "J%3AA-fnord=Login&J%3AA%3AF-address-fnord="+username+"&J%3AA%3AF-password-fnord="+password;
+			string postData = "J%3AA-fnord=Login&J%3AA%3AF-address-fnord="
+				+username+"&J%3AA%3AF-password-fnord="+password;
+
 			ASCIIEncoding encoding = new ASCIIEncoding ();
 			byte[] encodedPostData = encoding.GetBytes (postData);	
 
@@ -108,14 +111,33 @@
 			return true;
 		}
 		
-		public string Command (string command, string method)
+		public string Command (string command, string method, string data)
 		{
-			HttpWebRequest req = (HttpWebRequest)WebRequest.Create (BaseURL + command + ".xml");
+
+			Console.WriteLine ("Command : " + command + "Method : "
+					   + method + "Data : " + data );
+
+			HttpWebRequest req = (HttpWebRequest)WebRequest.Create (BaseURL + 
+										command + ".xml");
 			Console.WriteLine (BaseURL+command);
+			
 			req.CookieContainer = new CookieContainer();
 			req.CookieContainer.Add (this.COOKIE_HIVEMINDER_SID);
 			req.Method = method;
 
+			//Data for POST
+			if (method.Equals ("POST") && data.Length > 0) {
+				// We can handle only XML responses.
+				req.Accept = "text/xml";
+				req.ContentType = "application/x-www-form-urlencoded";
+
+				req.ContentLength = data.Length;
+				Stream dataStream = req.GetRequestStream ();
+				dataStream.Write(Encoding.UTF8.GetBytes(data), 
+						 0, Encoding.UTF8.GetByteCount (data));
+				dataStream.Close ();
+			}
+
 			HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
 			
 			string responseString = string.Empty;
@@ -124,10 +146,15 @@
 
 			return responseString;
 		}
-		
+
+		public string Command (string command, string method)
+		{
+			return this.Command (command, method, string.Empty);
+		}
+
 		public string Command (string command)
 		{			
-			return this.Command (command, "GET");
+			return this.Command (command, "GET", string.Empty);
 		}
 
 		/// <summary>
@@ -138,6 +165,7 @@
 			string responseString;
 			uint i =0;
 			
+			/*FIXME : Fetches only 15 items.*/
 			responseString = this.Command ("/=/search/BTDT.Model.Task/");
 		
 			XmlDocument xmlDoc = new XmlDocument();
@@ -149,7 +177,7 @@
 
 
 		/// <summary>
-		/// Get all the Tasks
+		/// Get all the Groups (Categories)
 		/// </summary>
 		public XmlNodeList DownloadGroups ()
 		{
@@ -164,20 +192,56 @@
 			Console.WriteLine (responseString);
 			return list;
 		}
-		
+
 		/// <summary>
-		/// Create a new Task
+		/// Utility function to rename a node.
 		/// </summary>
-		/// <param name="task">
-		/// A <see cref="Task"/>
-		/// </param>
-		/// <returns>
-		/// A <see cref="System.String"/>
-		/// </returns>
-		public string CreateTask (Task task)
+		private XmlNode RenameNode (XmlNode node, string namespaceURI, string qualifiedName)
 		{
-			//Return TaskID on success or null
+			if (node.NodeType == XmlNodeType.Element) {
+				XmlElement oldElement = (XmlElement) node;
+				XmlElement newElement =
+					node.OwnerDocument.CreateElement(qualifiedName, namespaceURI);
+
+				while (oldElement.HasAttributes)
+					newElement.SetAttributeNode(oldElement.RemoveAttributeNode(oldElement.Attributes[0]));
+				
+				while (oldElement.HasChildNodes)
+					newElement.AppendChild(oldElement.FirstChild);
+
+				if (oldElement.ParentNode != null)
+					oldElement.ParentNode.ReplaceChild(newElement, oldElement);
+
+				return newElement;
+			}
 			return null;
 		}
+
+		/// <summary>
+		/// Create a new Task
+		/// </summary>
+		public Task CreateTask (Task task)
+		{
+			string responseString;
+			Task createdTask;
+
+			XmlSerializer serializer = new XmlSerializer(typeof(Task));
+			
+			// Can use /=/model/Task also.
+			responseString = this.Command ("/=/action/BTDT.Action.CreateTask/", "POST", 
+						       task.ToUrlEncodedString);
+
+ 			XmlDocument xmlDoc = new XmlDocument();
+ 			xmlDoc.LoadXml (responseString);
+
+			// Created Task is contained inside 'data'
+ 			XmlNode node = xmlDoc.SelectSingleNode ("//data");
+
+			// Task's root node is 'value'. 
+			node = RenameNode (node, string.Empty, "value");
+
+			createdTask = (Task) serializer.Deserialize(new StringReader(node.OuterXml));
+			return createdTask;
+		}
 	}
 }
\ No newline at end of file

Modified: trunk/src/Backends/Hiveminder/service/Task.cs
==============================================================================
--- trunk/src/Backends/Hiveminder/service/Task.cs	(original)
+++ trunk/src/Backends/Hiveminder/service/Task.cs	Sun Dec 28 12:06:29 2008
@@ -85,6 +85,17 @@
 			Console.WriteLine ("Description : " + this.Description);
 		}
 		
+		public string ToUrlEncodedString
+		{
+			get {
+				//TODO : Add all the required properties here.
+				string url = "summary=" + this.Summary + "&" +
+					"description=" + this.Description + "&" +
+ 					"priority=" + this.Priority ;
+
+				return url;
+			}
+		}
 		#endregion 
 	}
 }



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