-}
-
-sub do_vcalendar_schedule {
- $| = 1;
- my @readheaders = ("Section ID/Title", "Days", "Time", "Start/EndDates", "Site/Building/Room");
- my %days = (M => "Mon", T => "Tue", W => "Wed", R => "Thu", F => "Fri", S => "Sat");
- my %daycodes = (M => "MO", T => "TU", W => "WE", R => "TH", F => "FR", S => "SA");
- my $te = new HTML::TableExtract( headers => [ @readheaders ] );
- my (@terms, $row, $file);
- $file = shift if (defined $_[0] and $_[0] !~ /^\d/);
- @terms = get_schedule_terms();
- foreach(@_ || @terms) {
- $response = $ua->get("$url&tserve_tip_write=||WID|SID|PIN|Term&tserve_trans_config=" . ($opts{cfg} || "rstusch" || "rgrades") . ".cfg&Term=".($_) );
- die $response->status_line unless $response->is_success;
- $te->parse($response->content);
- }
-# $response = $ua->get("http://localhost/~tpope/schedule.html");
-# $te->parse($response->content);
- open(STDOUT, ">>" . $file) if(defined($file) && (-f $file));
- open(STDOUT, ">/dev/null") if(defined($file) && (-d $file));
- print "BEGIN:VCALENDAR\r\nVERSION:1.0\r\n";
- foreach $ts ($te->table_states) {
- foreach $row ($ts->rows) {
- map { s/\xa0//g; s/\n/-/g; $_} @$row;
- $row->[0] =~ s/.*launchWebCT\("([^"]*)"\).*/$1/s;
- $row->[0] =~ s/(.*) <BR>//g;
- my $classid=$1;
- $row->[0] = capitalize($row->[0]);
- my $meets = $row->[1];
- $meets =~ s/([MTWRFS])/$daycodes{$1} /g;
- $row->[1] =~ s/([MTWRFS])/ $days{$1}/g;
- $row->[1] =~ s/^ //;
- if($row->[2] =~ /^(\d\d):\d\d-(\d\d):\d\dPM$/) {
- $row->[2] =~ s/^(\d\d)/$1+12/e
- if($1 < $2);
- $row->[2] =~ s/-(\d\d)/"-".($1+12)/e;
- $row->[2] =~ s/PM$//;
- } else { $row->[2] =~ s/AM$//; }
- $row->[3] =~ s/(\d\d)-(\d\d)-(\d\d)/20$3$1$2/g;
- $row->[4] =~ s/ON CAMPUS-//g;
- $row->[4] =~ s/-/ /g;
- my @day = (off_for_holidays(@$row),off_for_exams(@$row));
- my $day = "";
- if(exists($day[0])) {
- $day = join(";", @day);
- $day =~ s/!(\d{8})/$1T000000/g;
- }
- $row->[2] =~ s/://g;
- my ($starttime, $stoptime)=split(/-/, $row->[2]);
- my ($startdate, $stopdate)=split(/-/, $row->[3]);
- if(defined($file) && (-d $file)) {
- open FH, ">$file/$classid.vcs";
- select FH;
- print "BEGIN:VCALENDAR\r\nVERSION:1.0\r\n";
- }
- print "BEGIN:VEVENT\r\n";
- print "SUMMARY:", $row->[0], "\r\n";
- print "DESCRIPTION:", $classid, "\r\n";
- print "LOCATION:", $row->[4], "\r\n";
- print "CATEGORIES:Education\r\n";
- print "DTSTART:", $startdate."T".$starttime, "00\r\n";
- print "DTEND:", $startdate."T".$stoptime, "00\r\n";
- print "RRULE:W1 ", $meets.$stopdate, "T000000\r\n";
-
- print("EXDATE:$day\r\n") if($day);
- print "ATTENDEE;ROLE=OWNER;STATUS=CONFIRMED:", $opts{NAME}, "\r\n" if(defined($opts{NAME}));
- print "END:VEVENT\r\n";
- if(defined($file) && (-d $file)) {
- print "END:VCALENDAR\r\n";
- close FH;
- select STDOUT;
- }
+ foreach my $ts ($tf->table_states) {
+ foreach my $row ($ts->rows) {
+ next if ($row->[0] =~ /Total Enrolled Hours/);
+ $row->[1] =~ s/\xa0/ /g;
+ map { s/\xa0//g; $_} @$row;
+ map { s/^\r?\n? *//g; $_} @$row;
+ $row->[0] =~ s/.*launchWebCT\("([^"]*)"[^)]*\).*>\s*//s;
+ $classid=$1;
+ $row->[0] =~ s/(.*)/capitalize($1)/eg;
+ $row->[1] =~ s/^([MTWRFS]*) *([0-9:-]*[AP]M)\s*//;
+ ($days, $times) = ($1, $2);
+ ($begin, $end) = split("-", $times);
+ if($times =~ /^(\d\d):\d\d-(\d\d):\d\dPM$/) {
+ if($1 < $2 && $2 != 12) {
+ $begin =~ s/^(\d\d)/$1+12/e;
+ }
+ if($2 != 12) {
+ $end =~ s/^(\d\d)/$1+12/e;
+ }
+ $end =~ s/PM$//;
+ } else { $end =~ s/AM$//; }
+ $row->[2] =~ s/(.*\S)\s*//;
+ $session = $1;
+ $row->[2] =~ s/(\d\d)-(\d\d)-(\d\d)/20$3$1$2/g;
+ $row->[2] =~ s/ *to */-/g;
+ $row->[3] = capitalize($row->[3]);
+ $row->[3] =~ s/([A-Z]r?)$/$1./;
+ $row->[3] =~ s/^([^,]*), ([^,.]{3}[^,]*)/$2 $1/;
+ my %class = (
+ id => $classid,
+ title => $row->[0],
+ #session => $session,
+ instructor => $row->[3],
+ credits => $row->[4],
+ crn => $row->[5],
+ #gradetype => $row->[6],
+ days => $days,
+ #'time' => $times,
+ begin => $begin,
+ end => $end || undef,
+ duration => $row->[2],
+ location => $row->[1],
+ #message => $row->[7],
+ );
+ my @off = ( map { "$_"; } (off_for_holidays(%class), off_for_exams(%class)));
+ $class{'off'} = [ @off ] if (@off);
+ push @schedule, \%class;