2 # Copyright 2009 James Bunton <jamesbunton@fastmail.fm>
3 # Licensed for distribution under the GPL version 2, check COPYING for details
6 from Foundation
import *
8 from PyObjCTools
import AppHelper
13 class PlaylistTableModel(NSObject
):
14 tableView
= objc
.IBOutlet()
16 def awakeFromNib(self
):
18 self
.tableView
.setDataSource_(self
)
20 def setPlaylists(self
, playlists
):
21 self
.playlists
= playlists
22 self
.tableView
.reloadData()
24 def tableView_objectValueForTableColumn_row_(self
, tableView
, col
, row
):
25 assert 0 <= row
< len(self
.playlists
)
26 return self
.playlists
[row
]
28 def numberOfRowsInTableView_(self
, tableView
):
29 print "get number of rows", len(self
.playlists
)
30 return len(self
.playlists
)
34 class NotiPodController(NSObject
):
35 playlistModel
= objc
.IBOutlet()
36 folderPopup
= objc
.IBOutlet()
37 window
= objc
.IBOutlet()
38 loadingSheet
= objc
.IBOutlet()
41 def awakeFromNib(self
):
42 self
.performSelectorInBackground_withObject_(self
.loadLibrary
, None)
45 def finishLoading(self
):
46 self
.playlistModel
.setPlaylists(self
.library
.list_playlists())
47 self
.folderPopup
.addItemsWithTitles_(NSApp
.delegate().folders())
49 def loadLibrary(self
):
50 pool
= NSAutoreleasePool
.alloc().init()
51 NSApp
.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self
.loadingSheet
, self
.window
, None, None, None)
52 self
.library
= libsyncitunes
.ITunesLibrary
.alloc().init()
53 self
.loadingSheet
.close()
54 self
.performSelectorOnMainThread_withObject_waitUntilDone_(self
.finishLoading
, None, True)
57 @objc.signature("v@:@ii")
58 def selectFolderEnd_returnCode_contextInfo_(self
, panel
, ret
, _
):
60 assert len(panel
.filenames()) == 1
61 folder
= panel
.filenames()[0]
62 ### NSApp.delegate().addFolder_(folder)
63 self
.folderPopup
.insertItemWithTitle_atIndex_(folder
, 2)
64 self
.folderPopup
.selectItemAtIndex_(2)
67 def doSelectFolder_(self
, sender
):
70 folders
= NSApp
.delegate().folders()
75 panel
= NSOpenPanel
.openPanel()
76 panel
.setCanChooseFiles_(False)
77 panel
.setCanChooseDirectories_(True)
78 panel
.setAllowsMultipleSelection_(False)
79 panel
.beginSheetForDirectory_file_types_modalForWindow_modalDelegate_didEndSelector_contextInfo_(folder
, None, None, self
.window
, self
, self
.selectFolderEnd_returnCode_contextInfo_
, None)
85 def doSync_(self
, sender
):
89 class NotiPodAppDelegate(NSObject
):
93 def applicationWillFinishLaunching_(self
, _
):
95 prefs
= NSUserDefaults
.standardUserDefaults()
96 self
._playlists
= prefs
.stringArrayForKey_("playlists")
97 self
._folders
= prefs
.stringArrayForKey_("folders")
98 print "folders", self
._folders
99 print "playlists", self
._playlists
101 def applicationDidFinishLaunching_(self
, _
):
104 def applicationWillTerminate_(self
, _
):
105 prefs
= NSUserDefaults
.standardUserDefaults()
108 def applicationShouldTerminateAfterLastWindowClosed_(self
, _
):
115 return self
._playlists
118 return self
._folders
or []
120 def addFolder_(self
, folder
):
121 self
._folders
.insert(0, folder
)
123 def hasPlaylist_(self
, playlist
):
124 return playlist
in self
._playlists
126 def removePlaylist_(self
, playlist
):
127 self
._playlists
.remove(playlist
)
129 def addPlaylist_(self
, playlist
):
130 self
._playlists
.append(playlist
)
134 AppHelper
.runEventLoop()