@@ -32,11 +32,24 @@ def _loadData(self, data):
3232 self .title = data .attrib .get ('title' )
3333 self .type = data .attrib .get ('type' )
3434 self .updatedAt = toDatetime (data .attrib .get ('updatedAt' ))
35+ self ._items = None # cache for self.items
36+
37+ def __len__ (self ):
38+ return len (self .items ())
39+
40+ def __contains__ (self , other ):
41+ return any (i .key == other .key for i in self .items ())
42+
43+ def __getitem__ (self , key ):
44+ return self .items ()[key ]
3545
3646 def items (self ):
3747 """ Returns a list of all items in the playlist. """
38- key = '%s/items' % self .key
39- return self .fetchItems (key )
48+ if self ._items is None :
49+ key = '%s/items' % self .key
50+ items = self .fetchItems (key )
51+ self ._items = items
52+ return self ._items
4053
4154 def addItems (self , items ):
4255 """ Add items to a playlist. """
@@ -53,24 +66,32 @@ def addItems(self, items):
5366 key = '%s/items%s' % (self .key , utils .joinArgs ({
5467 'uri' : 'library://%s/directory//library/metadata/%s' % (uuid , ratingKeys )
5568 }))
56- return self ._server .query (key , method = self ._server ._session .put )
69+ result = self ._server .query (key , method = self ._server ._session .put )
70+ self .reload ()
71+ return result
5772
5873 def removeItem (self , item ):
5974 """ Remove a file from a playlist. """
6075 key = '%s/items/%s' % (self .key , item .playlistItemID )
61- return self ._server .query (key , method = self ._server ._session .delete )
76+ result = self ._server .query (key , method = self ._server ._session .delete )
77+ self .reload ()
78+ return result
6279
6380 def moveItem (self , item , after = None ):
6481 """ Move a to a new position in playlist. """
6582 key = '%s/items/%s/move' % (self .key , item .playlistItemID )
6683 if after :
6784 key += '?after=%s' % after .playlistItemID
68- return self ._server .query (key , method = self ._server ._session .put )
85+ result = self ._server .query (key , method = self ._server ._session .put )
86+ self .reload ()
87+ return result
6988
7089 def edit (self , title = None , summary = None ):
7190 """ Edit playlist. """
7291 key = '/library/metadata/%s%s' % (self .ratingKey , utils .joinArgs ({'title' : title , 'summary' : summary }))
73- return self ._server .query (key , method = self ._server ._session .put )
92+ result = self ._server .query (key , method = self ._server ._session .put )
93+ self .reload ()
94+ return result
7495
7596 def delete (self ):
7697 """ Delete playlist. """
0 commit comments