]> code.delx.au - notipod/blobdiff - NotiPod.py
It displays stuff
[notipod] / NotiPod.py
diff --git a/NotiPod.py b/NotiPod.py
new file mode 100644 (file)
index 0000000..bb810ba
--- /dev/null
@@ -0,0 +1,135 @@
+#!/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()
+