--- /dev/null
+#!/usr/bin/env python
+# Copyright 2009 James Bunton <jamesbunton@fastmail.fm>
+# Licensed for distribution under the GPL version 2, check COPYING for details
+
+import objc
+from Foundation import *
+from AppKit import *
+from PyObjCTools import AppHelper
+
+import libsyncitunes
+
+
+class PlaylistTableModel(NSObject):
+ tableView = objc.IBOutlet()
+
+ def awakeFromNib(self):
+ self.playlists = []
+ self.tableView.setDataSource_(self)
+
+ def setPlaylists(self, playlists):
+ self.playlists = playlists
+ self.tableView.reloadData()
+
+ def tableView_objectValueForTableColumn_row_(self, tableView, col, row):
+ assert 0 <= row < len(self.playlists)
+ return self.playlists[row]
+
+ def numberOfRowsInTableView_(self, tableView):
+ print "get number of rows", len(self.playlists)
+ return len(self.playlists)
+
+
+
+class NotiPodController(NSObject):
+ playlistModel = objc.IBOutlet()
+ folderPopup = objc.IBOutlet()
+ window = objc.IBOutlet()
+ loadingSheet = objc.IBOutlet()
+
+
+ def awakeFromNib(self):
+ self.performSelectorInBackground_withObject_(self.loadLibrary, None)
+ print "awakeFromNib"
+
+ def finishLoading(self):
+ self.playlistModel.setPlaylists(self.library.list_playlists())
+ self.folderPopup.addItemsWithTitles_(NSApp.delegate().folders())
+
+ def loadLibrary(self):
+ pool = NSAutoreleasePool.alloc().init()
+ NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.loadingSheet, self.window, None, None, None)
+ self.library = libsyncitunes.ITunesLibrary.alloc().init()
+ self.loadingSheet.close()
+ self.performSelectorOnMainThread_withObject_waitUntilDone_(self.finishLoading, None, True)
+ del pool
+
+ @objc.signature("v@:@ii")
+ def selectFolderEnd_returnCode_contextInfo_(self, panel, ret, _):
+ if ret == NSOKButton:
+ assert len(panel.filenames()) == 1
+ folder = panel.filenames()[0]
+### NSApp.delegate().addFolder_(folder)
+ self.folderPopup.insertItemWithTitle_atIndex_(folder, 2)
+ self.folderPopup.selectItemAtIndex_(2)
+
+ @objc.IBAction
+ def doSelectFolder_(self, sender):
+ print "select folder"
+ try:
+ folders = NSApp.delegate().folders()
+ if len(folders) > 0:
+ folder = folders[0]
+ else:
+ folder = None
+ panel = NSOpenPanel.openPanel()
+ panel.setCanChooseFiles_(False)
+ panel.setCanChooseDirectories_(True)
+ panel.setAllowsMultipleSelection_(False)
+ panel.beginSheetForDirectory_file_types_modalForWindow_modalDelegate_didEndSelector_contextInfo_(folder, None, None, self.window, self, self.selectFolderEnd_returnCode_contextInfo_, None)
+ except:
+ import traceback
+ traceback.print_exc()
+
+ @objc.IBAction
+ def doSync_(self, sender):
+ print "hello me"
+
+
+class NotiPodAppDelegate(NSObject):
+
+ # Delegate methods
+
+ def applicationWillFinishLaunching_(self, _):
+ print "loading prefs"
+ prefs = NSUserDefaults.standardUserDefaults()
+ self._playlists = prefs.stringArrayForKey_("playlists")
+ self._folders = prefs.stringArrayForKey_("folders")
+ print "folders", self._folders
+ print "playlists", self._playlists
+
+ def applicationDidFinishLaunching_(self, _):
+ pass
+
+ def applicationWillTerminate_(self, _):
+ prefs = NSUserDefaults.standardUserDefaults()
+ prefs.synchronize()
+
+ def applicationShouldTerminateAfterLastWindowClosed_(self, _):
+ return True
+
+
+ # Public accessors
+
+ def playlists(self):
+ return self._playlists
+
+ def folders(self):
+ return self._folders or []
+
+ def addFolder_(self, folder):
+ self._folders.insert(0, folder)
+
+ def hasPlaylist_(self, playlist):
+ return playlist in self._playlists
+
+ def removePlaylist_(self, playlist):
+ self._playlists.remove(playlist)
+
+ def addPlaylist_(self, playlist):
+ self._playlists.append(playlist)
+
+
+
+AppHelper.runEventLoop()
+