#!/usr/bin/env python import sys import dbus, gobject, dbus.glib import urllib import os import ConfigParser class iPodCalendarSync: """ Attributes: serial: Serial for iPod cals: Calendars to install into iPod bus: DBus connection object """ def __init__(self, serial, cals): self.serial = serial self.cals = cals if not self.detect_ipod(): raise "Cannot find any information about iPod with serial " + serial + " exiting" self.download_calendars() """ Detects conenected iPods via HAL Returns false if no ipod detected """ def detect_ipod(self): self.bus = dbus.SystemBus() obj = self.bus.get_object( "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager") hal = dbus.Interface(obj, "org.freedesktop.Hal.Manager") ipods = hal.FindDeviceStringMatch('info.ipod.serial_number', self.serial) if len(ipods) < 1: return False else: ipod_udi = ipods[0] ipod_obj = self.bus.get_object('org.freedesktop.Hal', ipod_udi) self.mp = ipod_obj.GetProperty('volume.mount_point') return True """ Downloads and install calendars """ def download_calendars(self): for cal in self.cals: # Read entire calendar fh = urllib.urlopen(cal[1]) cal_lines = fh.readlines() fh.close() # Find name cal_name_found = False for i in xrange(0, len(cal_lines)): if cal_lines[i].find('X-WR-CALNAME:') == 0: cal_lines[i] = 'X-WR-CALNAME:' + cal[0] + "\n" cal_name_found = True if cal_name_found == False: cal_lines.insert(1, 'X-WR-CALNAME:' + cal[0] + "\n") # Open calendar file in iPod ipod_file = self.mp + '/Calendars/' + cal[0] + '.ics' ipod_fh = open(ipod_file, 'w') for line in cal_lines: if line == "\n": continue ipod_fh.write(line) # Close FileHandlers ipod_fh.close() if __name__ == '__main__': config = ConfigParser.ConfigParser() config.readfp(open(os.environ['HOME'] + '/.ipod-calsync.ini')) serial = config.get('DEFAULT', 'serial') cals = [] for section in config.sections(): name = section url = config.get(name, 'url') cals.append((name, url)) u = iPodCalendarSync(serial, cals)