diff --git a/couchpotato/core/media/_base/library/main.py b/couchpotato/core/media/_base/library/main.py old mode 100644 new mode 100755 index b90f4c38..d20342f2 --- a/couchpotato/core/media/_base/library/main.py +++ b/couchpotato/core/media/_base/library/main.py @@ -11,10 +11,13 @@ class Library(LibraryBase): def __init__(self): addEvent('library.title', self.title) addEvent('library.related', self.related) + addEvent('library.tree', self.tree) + addEvent('library.root', self.root) addApiView('library.query', self.queryView) addApiView('library.related', self.relatedView) + addApiView('library.tree', self.treeView) def queryView(self, media_id, **kwargs): db = get_db() @@ -32,6 +35,14 @@ class Library(LibraryBase): 'result': fireEvent('library.related', media, single = True) } + def treeView(self, media_id, **kwargs): + db = get_db() + media = db.get('id', media_id) + + return { + 'result': fireEvent('library.tree', media, single = True) + } + def title(self, library): return fireEvent( 'library.query', @@ -64,3 +75,33 @@ class Library(LibraryBase): cur = db.get('id', cur['parent_id']) return cur + + def tree(self, media): + result = media + + db = get_db() + + # TODO this probably should be using an index? + items = [ + item['doc'] + for item in db.all('media', with_doc = True) + if item['doc'].get('parent_id') == media['_id'] + ] + + keys = [] + + for item in items: + key = item['type'] + 's' + + if key not in result: + result[key] = {} + + if key not in keys: + keys.append(key) + + result[key][item['_id']] = fireEvent('library.tree', item, single = True) + + for key in keys: + result[key] = result[key].values() + + return result