[tasque-list] Some enhancement to RtmNet



Hello tasque devs,

I've been developing a GNOME Do plugin recently to allow user to use
most of the features of Remember The Milk service. I used the RtmNet
code from tasque, so first I want to thank all the efforts the devs
have put into tasque.

While coding, I've found there were some incompatibilities between
RtmNet's original code and the latest official API from Remember The
Milk. So I made some modification to eliminate the issues. The diffs
are attached with this email. Please notice, some changes may just be
made to fulfill certain use case specific to my plugin.

Please feel free to contact me if there is any problem/suggestions ...

Cheers,
P.D.
--- Rtm.cs.orig	2008-10-30 20:32:41.000000000 +0100
+++ Rtm.cs	2008-11-23 17:47:41.000000000 +0100
@@ -251,7 +251,7 @@
 			{
 				// This is needed in the Compact Framework
 				// See for more details: http://msdn2.microsoft.com/en-us/library/1afx2b0f.aspx
-				req.GetRequestStream().Close();
+				//req.GetRequestStream().Close();
 			}
 
 			try
@@ -331,6 +331,7 @@
 			lastResponse = string.Empty;
 
 			string responseXml = DoGetResponse(url, variables);
+
 			lastResponse = responseXml;
 			return Utils.Deserialize(responseXml);
 		}
@@ -548,13 +549,26 @@
 		/// Requires authentication.
 		/// </summary>
 		/// <returns>An instance of the <see cref="Contacts"/> class containing the list of contacts.</returns>
-		public Tasks TasksGetList(string listID)
+		public Tasks TasksGetList() {
+			return TasksGetList(null);
+		}
+		public Tasks TasksGetList(string lastSync) {
+			return TasksGetList(null, lastSync);
+		}
+		public Tasks TasksGetList(string listID, string lastSync)
+		{
+			return TasksGetList (listID, lastSync, null);
+		}
+		public Tasks TasksGetList (string listID, string lastSync, string filter)
 		{
 			Hashtable parameters = new Hashtable();
 			parameters.Add("method", "rtm.tasks.getList");
 			if(listID != null)
-				parameters.Add("list_id", listID);
-			
+				parameters.Add ("list_id", listID);
+			if(filter != null)
+				parameters.Add ("filter", filter);
+			if(lastSync != null)
+				parameters.Add ("last_sync", lastSync);
 			RtmNet.Response response = GetResponse(parameters);
 
 			if( response.Status == ResponseStatus.OK )
@@ -583,7 +597,7 @@
 		/// <param name="priority">
 		/// A <see cref="System.String"/>
 		/// </param>
-		public List TasksSetPriority(string timeline, string listID, string taskSeriesID, string taskID, string priority)
+		public List TasksSetPriority (string timeline, string listID, string taskSeriesID, string taskID, string priority)
 		{
 			Hashtable parameters = new Hashtable();
 			parameters.Add("method", "rtm.tasks.setPriority");
@@ -605,6 +619,24 @@
 				throw new RtmApiException(response.Error);
 			}
 		}
+		
+		public List TasksMovePriority (string timeline, string listID, string taskSeriesID, string taskID, string direction)
+		{
+			Hashtable parameters = new Hashtable ();
+			parameters.Add("method", "rtm.tasks.movePriority");
+			parameters.Add("timeline", timeline);
+			parameters.Add("list_id", listID);
+			parameters.Add("taskseries_id", taskSeriesID);
+			parameters.Add("task_id", taskID);
+			parameters.Add("direction", direction);
+			
+			RtmNet.Response response = GetResponse(parameters);
+			
+			if (response.Status == ResponseStatus.OK)
+				return response.List;
+			else
+				throw new RtmApiException(response.Error);
+		}
 
 		
 		/// <summary>
@@ -761,8 +793,10 @@
 			parameters.Add("list_id", listID);
 			parameters.Add("taskseries_id", taskSeriesID);
 			parameters.Add("task_id", taskID);
-			parameters.Add("due", due);
+			if (!String.IsNullOrEmpty (due))
+				parameters.Add("due", due);
 			parameters.Add("parse", "1");
+			parameters.Add("has_due_time", "1");
 
 			RtmNet.Response response = GetResponse(parameters);
 
@@ -902,7 +936,7 @@
 	
 		public List TasksAdd(string timeline, string name)
 		{
-			Hashtable parameters = new Hashtable();
+/*			Hashtable parameters = new Hashtable();
 			parameters.Add("method", "rtm.tasks.add");
 			parameters.Add("timeline", timeline);
 			parameters.Add("name", name);
@@ -916,17 +950,29 @@
 			else
 			{
 				throw new RtmApiException(response.Error);
-			}
+			} */
+			return TasksAdd (timeline, name, null, false);
 		}
 
-
-		public List TasksAdd(string timeline, string name, string listID)
+		public List TasksAdd (string timeline, string name, bool parse)
+		{
+			return TasksAdd (timeline, name, null, parse);
+		}
+			
+		public List TasksAdd (string timeline, string name, string listID)
+		{
+			return TasksAdd (timeline, name, listID, false);
+		}
+		public List TasksAdd(string timeline, string name, string listID, bool parse)
 		{
 			Hashtable parameters = new Hashtable();
 			parameters.Add("method", "rtm.tasks.add");
 			parameters.Add("timeline", timeline);
-			parameters.Add("list_id", listID);
 			parameters.Add("name", name);
+			if (listID != null)
+				parameters.Add("list_id", listID);
+			if (parse)
+				parameters.Add("parse", "1");
 
 			RtmNet.Response response = GetResponse(parameters);
 
@@ -999,6 +1045,69 @@
 				throw new RtmApiException(response.Error);
 			}
 		}
+ 
+		/// <summary>
+		/// Postpone a task
+		/// </summary>
+		/// <param name="timeline">
+		/// A <see cref="System.String"/>
+		/// </param>
+		/// <param name="listID">
+		/// A <see cref="System.String"/> defines the ID of the list the task belongs to 
+		/// </param>
+		/// <param name="taskSeriesID">
+		/// A <see cref="System.String"/> defines the ID of the task series the task belongs to
+		/// </param>
+		/// <param name="taskID">
+		/// A <see cref="System.String"/> defines the task ID
+		/// </param>
+		/// <returns>
+		/// A <see cref="List"/>
+		/// </returns>
+		public List TasksPostpone (string timeline, string listID, string taskSeriesID, string taskID)
+		{
+			Hashtable parameters = new Hashtable();
+			parameters.Add("method", "rtm.tasks.postpone");
+			parameters.Add("timeline", timeline);
+			parameters.Add("list_id", listID);	
+			parameters.Add("taskseries_id", taskSeriesID);
+			parameters.Add("task_id", taskID);
+
+			RtmNet.Response response = GetResponse(parameters);
+
+			if( response.Status == ResponseStatus.OK )
+			{
+				return response.List;
+			}
+			else
+			{
+				throw new RtmApiException(response.Error);
+			}
+		}
+		
+		public List TasksSetRecurrence (string timeline, string listID, string taskSeriesID, string taskID, string repeat)
+		{
+			Hashtable parameters = new Hashtable();
+			parameters.Add("method", "rtm.tasks.setRecurrence");
+			parameters.Add("timeline", timeline);
+			parameters.Add("list_id", listID);	
+			parameters.Add("taskseries_id", taskSeriesID);
+			parameters.Add("task_id", taskID);
+			if (repeat != null)
+				parameters.Add("repeat", repeat);
+
+			RtmNet.Response response = GetResponse(parameters);
+
+			if( response.Status == ResponseStatus.OK )
+			{
+				return response.List;
+			}
+			else
+			{
+				throw new RtmApiException(response.Error);
+			}
+
+		}
 #endregion
 
 		
--- Task.cs.orig	2008-10-30 20:32:41.000000000 +0100
+++ Task.cs	2008-10-30 20:26:01.000000000 +0100
@@ -31,7 +31,7 @@
 
 		/// <remarks/>
 		[XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
-		public string TaskID { get { return id; } set { id = value; } }
+		public string TaskSeriesID { get { return id; } set { id = value; } }
 
 
 		/// <remarks/>
@@ -89,7 +89,7 @@
 		public string source;
 
 		[XmlElement("task", Form=XmlSchemaForm.Unqualified)]
-		public Task Task;
+		public Task[] TaskCollection = new Task[0];
 
 		/// <remarks/>
 		[XmlElement("notes", Form=XmlSchemaForm.Unqualified)]
--- List.cs.orig	2008-10-30 20:32:41.000000000 +0100
+++ List.cs	2008-10-30 20:25:58.000000000 +0100
@@ -24,6 +24,9 @@
 	[System.Serializable]
 	public class List
 	{
+		private string rawCurrent;
+		private DateTime current = DateTime.MinValue;
+
 		/// <summary>
 		/// The user id of the contact.
 		/// </summary>
@@ -65,12 +68,56 @@
 		/// </summary>
 		[XmlAttribute("smart", Form=XmlSchemaForm.Unqualified)]
 		public int Smart;
+		
+		/// <summary>
+		/// equals to last_sync value
+		/// </summary>
+		[XmlAttribute("current", Form=XmlSchemaForm.Unqualified)]
+		public string RawCurrent
+		{
+			get { return rawCurrent; }
+			set {
+				if(value.Length > 0) {
+					rawCurrent = value;
+					current = Utils.DateStringToDateTime(rawCurrent);
+				}
+			}
+		}
 
+		/// <summary>
+		/// Converts the raw current field to a <see cref="DateTime"/>.
+		/// </summary>
+		[XmlIgnore]
+		public DateTime Current
+		{
+			get { return current; }
+			//set { current = value; }
+		}
+		
+		/// <summary>
+		/// An wrapper of deleted TaskSeries objects
+		/// </summary>
+		[XmlElement("deleted", Form=XmlSchemaForm.Unqualified)]
+		public DeletedTaskSeries DeletedTaskSeries;
 		
 		/// <summary>
 		/// An array of TaskSeries objects
 		/// </summary>
 		[XmlElement("taskseries", Form=XmlSchemaForm.Unqualified)]
 		public TaskSeries[] TaskSeriesCollection = new TaskSeries[0];		
-	}	
+	}
+	
+	/// <summary>
+	/// Contains a list of deleted <see cref="TaskSeries"/>
+	/// See http://www.rememberthemilk.com/services/api/tasks.rtm
+	/// </summary>
+	[System.Serializable]
+	public class DeletedTaskSeries
+	{
+		/// <summary>
+		/// An array of TaskSeries objects
+		/// </summary>
+		[XmlElement("taskseries", Form=XmlSchemaForm.Unqualified)]
+		public TaskSeries[] TaskSeriesCollection = new TaskSeries[0];
+	}
 }
\ No newline at end of file


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