#!/usr/bin/env perl
# The above is a portable way to invoke Perl, according to the GNU Autotools
# book. It is useful since we don't know where perl is installed.
#
# evolution-move-tasks: a Perl script to move tasks from the Calendar folder
#	to the new Tasks folder.
#

use diagnostics;

# You may have to change this if your Evolution files are somewhere else.
$EVOLUTION_DIR = "$ENV{'HOME'}/evolution";

$CALENDAR_DIR = "$EVOLUTION_DIR/local/Calendar";
$TASKS_DIR = "$EVOLUTION_DIR/local/Tasks";

# Create the Tasks folder if needed.
&EnsureTasksFolderExists ($TASKS_DIR);

# Get any tasks from the calendar .ics file.
$tasks = &LoadTasks ("$CALENDAR_DIR/calendar.ics");

# Get any tasks already in the tasks .ics file.
$tasks .= &LoadTasks ("$TASKS_DIR/tasks.ics");

# Create a new Tasks .ics file containing all the tasks.
&OutputTasks ("$TASKS_DIR/tasks.new", $tasks);

# Move the existing tasks file to a backup.
if (-e "$TASKS_DIR/tasks.ics") {
    rename "$TASKS_DIR/tasks.ics", "$TASKS_DIR/tasks.bak"
	|| die "Can't rename $TASKS_DIR/tasks.ics to $TASKS_DIR/tasks.bak";
}

# Move the new file into position.
rename "$TASKS_DIR/tasks.new", "$TASKS_DIR/tasks.ics"
    || die "Can't rename $TASKS_DIR/tasks.new to $TASKS_DIR/tasks.ics";

# Move the new Calendar file (without the Tasks) into position.
rename "$CALENDAR_DIR/calendar.ics.new", "$CALENDAR_DIR/calendar.ics"
    || die "Can't rename $TASKS_DIR/tasks.new to $TASKS_DIR/tasks.ics";

0;


# If the evolution/local/Tasks folder does not exist, this creates it and
# creates the metadata XML file.
sub EnsureTasksFolderExists {
    my ($tasks_dir) = @_;

    return if (-e $tasks_dir);

    print "Creating Tasks folder in: $tasks_dir\n";

    mkdir ($tasks_dir, 0777)
	|| die "Can't create Tasks folder directory: $tasks_dir";

    $metadata = "$tasks_dir/folder-metadata.xml";
    open (METADATA, ">$metadata")
	|| die "Can't create metadata file: $metadata";

    print METADATA <<EOF;
<?xml version="1.0"?>
<efolder>
	<type>tasks</type>
	<description>Tasks</description>
</efolder>
EOF

    close (METADATA);
}


sub LoadTasks {
    my ($icalendar_file) = @_;

    return "" if (! -e $icalendar_file);

    open (ICSFILE, $icalendar_file)
	|| die "Can't open iCalendar file: $icalendar_file";

    open (NEWICSFILE, ">$icalendar_file.new")
	|| die "Can't open iCalendar file: $icalendar_file.new";

    $tasks = "";
    $in_task = 0;
    while (<ICSFILE>) {
	if ($in_task) {
	    $tasks .= $_;

	    if (m/^END:VTODO/) {
		$in_task = 0;
	    }

	} else {
	    if (m/^BEGIN:VTODO/) {
		print "Found task\n";

		$tasks .= $_;
		$in_task = 1;
	    } else {
		print NEWICSFILE $_;
	    }
	}
    }

    close (NEWICSFILE);
    close (ICSFILE);

    return $tasks;
}


sub OutputTasks {
    my ($icalendar_file, $tasks) = @_;

    open (ICSFILE, ">$icalendar_file")
	|| die "Can't create iCalendar file: $icalendar_file";

    print ICSFILE <<EOF;
BEGIN:VCALENDAR
CALSCALE
 :GREGORIAN
PRODID
 :-//Helix Code//NONSGML Evolution Calendar//EN
VERSION
 :2.0
$tasks
END:VCALENDAR
EOF

    close (ICSFILE);
}


ndabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.3'>dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.3</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.4'>dependabot/npm_and_yarn/devel/electron6/files/elliptic-6.5.4</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8'>dependabot/npm_and_yarn/devel/electron6/files/ini-1.3.8</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/lodash-4.17.19'>dependabot/npm_and_yarn/devel/electron6/files/lodash-4.17.19</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/lodash.merge-4.6.2'>dependabot/npm_and_yarn/devel/electron6/files/lodash.merge-4.6.2</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/node-fetch-2.6.1'>dependabot/npm_and_yarn/devel/electron6/files/node-fetch-2.6.1</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/serve-10.1.2'>dependabot/npm_and_yarn/devel/electron6/files/serve-10.1.2</option>
<option value='gnome-3.22'>gnome-3.22</option>
<option value='gnome-3.24'>gnome-3.24</option>
<option value='gnome-3.26'>gnome-3.26</option>
<option value='gnome-3.28'>gnome-3.28</option>
<option value='gnome-3.32'>gnome-3.32</option>
<option value='gnome-3.36'>gnome-3.36</option>
<option value='gstreamer'>gstreamer</option>
<option value='gstreamer-1.16'>gstreamer-1.16</option>
<option value='gstreamer0.10-removal'>gstreamer0.10-removal</option>
<option value='main'>main</option>
<option value='master'>master</option>
<option value='mate-1.16'>mate-1.16</option>
<option value='mate-1.18' selected='selected'>mate-1.18</option>
<option value='mate-1.20'>mate-1.20</option>
<option value='mate-1.22'>mate-1.22</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>FreeBSD GNOME current development ports (https://github.com/freebsd/freebsd-ports-gnome)</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/about/?h=mate-1.18'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/?h=mate-1.18'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/refs/?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/cad/irsim?h=mate-1.18'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/tree/cad/irsim?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/diff/cad/irsim?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/stats/cad/irsim?h=mate-1.18'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/cad/irsim'>
<input type='hidden' name='h' value='mate-1.18'/><input type='hidden' name='id' value='4834541003faecd48145c24ebeb9d9089cb07a09'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/cad?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>cad</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/cad/irsim?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09'>irsim</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/cad/irsim?h=mate-1.18&amp;id=4834541003faecd48145c24ebeb9d9089cb07a09&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=fe8f56487b5a9465d52207cace44d0755a69c537'>- Update to 9.7.72.</a></td><td>stas</td><td><span title='2009-12-15 12:00:14 +0800'>2009-12-15</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=acf182103407e019d7ac2dc89eacfe2ab4a14c24'>- Update to 9.7.71.</a></td><td>stas</td><td><span title='2009-06-09 20:14:10 +0800'>2009-06-09</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=74a4dc231af2c5e5c5511d5c089cac68279f5e42'>- Update to 9.7.70.</a></td><td>stas</td><td><span title='2009-02-09 04:06:32 +0800'>2009-02-09</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=1a230c67f016afd9095eaf082b187c5614e3a94c'>- Update to 9.7.68.</a></td><td>stas</td><td><span title='2008-07-26 07:11:05 +0800'>2008-07-26</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=a506faf2217b32ee4dfaae94f453fee5ab8f1bf2'>- Update to 9.7.66.</a></td><td>stas</td><td><span title='2008-05-15 16:52:12 +0800'>2008-05-15</span></td><td>3</td><td><span class='deletions'>-5</span>/<span class='insertions'>+6</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=bce9b81f9d6099820f3839d7809d6b08c1d2ae7b'>- Remove unneeded dependency from gtk12/gtk20 [1]</a></td><td>miwi</td><td><span title='2008-04-20 01:56:05 +0800'>2008-04-20</span></td><td>1</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=324de4a46186e3b1127d7216b8b49bf2bbfa475c'>- Update to 9.7.64.</a></td><td>stas</td><td><span title='2008-04-14 02:51:59 +0800'>2008-04-14</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=5e5c2707f87a29fbbf66cd20c897c3ff171e092c'>- Update to 9.7.56.</a></td><td>stas</td><td><span title='2007-09-15 20:22:39 +0800'>2007-09-15</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=aad95ab204858f051f6b3151266c42c29fab7035'>- Update to 9.7.54.</a></td><td>stas</td><td><span title='2007-09-13 22:03:23 +0800'>2007-09-13</span></td><td>2</td><td><span class='deletions'>-5</span>/<span class='insertions'>+5</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=87f4d471fb27b9547c1a0de221b51f4c31684157'>- Welcome X.org 7.2 \o/.</a></td><td>flz</td><td><span title='2007-05-20 04:36:56 +0800'>2007-05-20</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=d57a2e372bc266094bc8de73395755172e3ca1f2'>- Update to 9.7.47.</a></td><td>stas</td><td><span title='2007-03-27 21:57:31 +0800'>2007-03-27</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/cad/irsim?h=mate-1.18&amp;id=2213d8ac9e8dc5d90868ec82af11ab805858d6ba'>- Update to 9.7.46.</a></td><td>stas</td><td><span title='2007-03-20 04:35:06 +0800'>2007-03-20</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>