#!/usr/bin/env python

import gdata.calendar.service

from datetime import datetime
from datetime import date
from datetime import timedelta
import os
import sys

LOGIN='jflesch@gmail.com'
# PASSWD is read from ~/.google.passwd
DEBUG=False

def main(passwd):
    diff = timedelta(seconds = 0)
    if ( len(sys.argv) > 1 ):
        diff = timedelta(seconds = int(sys.argv[1]))
    calendar_service = gdata.calendar.service.CalendarService()
    calendar_service.email = LOGIN
    calendar_service.password = passwd
    calendar_service.source = 'Google-Calendar_Python_CheckAvailability-1.0'
    calendar_service.ProgrammaticLogin()
    query = gdata.calendar.service.CalendarEventQuery('default', 'private', 'full')
    query.start_min = str(date.today() + diff)
    query.start_max = str(date.today() + timedelta(days=2) + diff)
    feed = calendar_service.CalendarQuery(query)       
    for i, ev in enumerate(feed.entry):
        if ev.transparency.value == 'OPAQUE': # We are not available
            if DEBUG:
                print "Event %d" % i
            for when in ev.when:
                try:
                    start = datetime.strptime(when.start_time[:18], '%Y-%m-%dT%H:%M:%S')
                    stop = datetime.strptime(when.end_time[:18], '%Y-%m-%dT%H:%M:%S')
                except ValueError:
                    start = datetime.strptime(when.start_time, '%Y-%m-%d')
                    stop = datetime.strptime(when.end_time, '%Y-%m-%d')
                now = datetime.now(start.tzinfo) + diff
                if DEBUG:
                    print " Start: %s" % str(start)
                    print " Stop:  %s" % str(stop)
                    print " Now:   %s" % str(now)
                if ( start <= now and now <= stop ):
                    return 1 # false for the shell
    return 0 # True for the shell

if __name__ == "__main__":
    passwd = open(os.path.join(os.getenv('HOME'), '.google.passwd')).read().strip()
    sys.exit(main(passwd))


