tasque r196 - in trunk: . src/Backends/Hiveminder src/Backends/Hiveminder/service
- From: jjohnny svn gnome org
- To: svn-commits-list gnome org
- Subject: tasque r196 - in trunk: . src/Backends/Hiveminder src/Backends/Hiveminder/service
- Date: Sun, 28 Dec 2008 12:06:29 +0000 (UTC)
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]