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

[coldsync-hackers] todo-text date handling patch



Attached is a patch to allow for date handling in todo-text.

Allan
-- 
 __^__                                          __^__
( ___ )----------------------------------------( ___ )
 | / | "Engineers aren't boring people,         | \ |
 | / | we just get excited about boring things" | \ |
 |___|                 --Anon                   |___|
(_____)----------------------------------------(_____)
--- /usr/local/libexec/coldsync/todo-text	2004-07-24 20:20:40.000000000 -0400
+++ todo-text-2	2004-08-01 14:41:44.000000000 -0400
@@ -15,6 +15,8 @@
 # XXX - When syncing a category whose name is empty, use #NNN, where NNN is
 # the category ID.
 
+# added ability to deal with dates 2004/07/28 aneal
+
 use strict;
 use Palm::ToDo;
 use ColdSync;
@@ -26,6 +28,8 @@
 	"Where"		=> "$ENV{HOME}/ToDo",	# Directory to sync with
 	"Item-Prefix"	=> "- ",	# Start of unfinished item
 	"Done-Prefix"	=> "* ",	# Start of completed item
+	"Date-Start"	=> "(",		# Start of Date Field
+	"Date-Stop"	=> ") ",	# End of Date Field
 	"Item-Cont"	=> "  ",	# Continuation of item description
 	"Note-Indent"	=> "  ",	# Continuation of note
 	"Paragraph"	=> "\t",	# Marks new paragraph in note
@@ -107,6 +111,13 @@
 				$record->{description} = $item->{title};
 				$record->{note} = $item->{note}
 					if $item->{note} ne "";
+				# Set due date if defined
+				if ($item->{due_day})
+				{
+					$record->{due_month} = $item->{due_month};
+					$record->{due_day} = $item->{due_day};
+					$record->{due_year} = $item->{due_year};
+				}
 				$record->{_seen} = 1;
 					# Mark this record as seen
 			} else {
@@ -127,9 +138,21 @@
 					$record->{attributes}{dirty} = 1;
 				}
 
+				# Here we update the due date if different
+				if ((defined($item->{due_day}) or defined($record->{due_day})) and 
+					(($item->{due_day} ne $record->{due_day})
+					||  ($item->{due_month} ne $record->{due_month})
+					||  ($item->{due_year} ne $record->{due_year})))
+				{
+					$record->{due_month} = $item->{due_month};
+					$record->{due_day} = $item->{due_day};
+					$record->{due_year} = $item->{due_year};
+					$record->{attributes}{dirty} = 1;
+				}
+
 				# The description is the same, we know
 				# that. Also, we don't touch the record's
-				# priority or due date.
+				# priority. 
 
 				$priority = $record->{priority};
 					# Record this record's priority
@@ -215,6 +238,31 @@
 			$_ = $';
 			$intitle = 1;
 		}
+		
+		# Date Processing
+		if (/^\Q$HEADERS{"Date-Start"}\E/)
+		{
+			# This todo item has a due date assigned
+			$_ = $';
+			# parse date
+			if (/^\d{1,2}\/\d{1,2}\/\d{2,4}/)
+			{
+				my $date = $&;
+				$_ = $';
+				my ($month, $day, $year) = split('/', $date);
+				$item->{due_month} = $month;
+				$item->{due_day} = $day;
+				$item->{due_year} = $year;
+			# day month year and date should go out of scope here
+			}
+			else { 
+				warn "403 Date malformed :$_"; 
+			}
+			if (/^\Q$HEADERS{"Date-Stop"}\E/)
+			{
+				$_ = $';
+			}
+		}
 
 		# Common processing for all title lines.
 		if ($intitle)
@@ -362,6 +410,17 @@
 			print OUT $HEADERS{"Item-Prefix"};
 		}
 
+		# Due Date printing if it's set
+		if ($record->{due_day})
+		{
+			print OUT $HEADERS{"Date-Start"};
+			print OUT $record->{due_month} . '/';
+			print OUT $record->{due_day} . '/';
+			print OUT $record->{due_year};
+			print OUT $HEADERS{"Date-Stop"};
+		}
+				
+
 		my $desc = $record->{description};
 
 		# There have to be two expressions here, to deal with
@@ -509,10 +568,6 @@
 
 (aka "Bugs that I don't intend to fix".)
 
-C<todo-text> doesn't deal with due dates, mainly because I don't use them.
-If an existing item has a due date attached, C<todo-text> doesn't modify
-it, though.
-
 C<todo-text> deals with priorities in the following way: when it is run as
 a Dump conduit, it writes the to do list in order of decreasing priority
 (I<i.e.>, priority 1 at the top, priority 5 at the bottom).

Attachment: pgpZ7v8nIErJ8.pgp
Description: PGP signature