From a6c18a2eb06c1128a5d18299793a62c9e8c1176a Mon Sep 17 00:00:00 2001 From: gordielachance Date: Sat, 1 Oct 2016 00:17:55 +0200 Subject: [PATCH] added pagination for albums --- addon.py | 48 +++++++++++++++++++++++++++++----- lib/libsonic_extra/__init__.py | 18 +++++-------- 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/addon.py b/addon.py index 2572ea1..043ce6b 100644 --- a/addon.py +++ b/addon.py @@ -193,9 +193,9 @@ class Plugin(object): """ menu = [ - {"mode": "list_albums_newest", "foldername": "Newest albums"}, - {"mode": "list_albums_frequent", "foldername": "Most played albums"}, - {"mode": "list_albums_recent", "foldername": "Recently played albums"}, + {"mode": "list_albums_newest", "foldername": "Newest albums", "page":1}, + {"mode": "list_albums_frequent", "foldername": "Most played albums", "page":1}, + {"mode": "list_albums_recent", "foldername": "Recently played albums", "page":1}, {"mode": "list_albums_genre", "foldername": "Albums by Genre"} ] @@ -207,6 +207,27 @@ class Plugin(object): handle=self.addon_handle, url=url, listitem=li, isFolder=True) xbmcplugin.endOfDirectory(self.addon_handle) + + def menu_link(self): + mode = self.addon_args["mode"][0] + menu_item = {"mode": "main_menu", "foldername": "Back to Menu"} + menu_item_url = self.build_url(menu_item) + menu_item_li = xbmcgui.ListItem(menu_item["foldername"]) + xbmcplugin.addDirectoryItem( + handle=self.addon_handle, url=menu_item_url, listitem=menu_item_li, isFolder=True) + + def next_page_link(self,page): + + page += 1 + title = "Next page (%s)" % (page) + + mode = self.addon_args["mode"][0] + + menu_item = {"mode": mode, "foldername": title, "page":page} + menu_item_url = self.build_url(menu_item) + menu_item_li = xbmcgui.ListItem(menu_item["foldername"]) + xbmcplugin.addDirectoryItem( + handle=self.addon_handle, url=menu_item_url, listitem=menu_item_li, isFolder=True) def list_playlists(self): """ @@ -280,13 +301,18 @@ class Plugin(object): """ Display newest album list. """ - + + page = int(self.addon_args["page"][0]) size = self.albums_per_page + offset = size * ( page -1 ) xbmcplugin.setContent(self.addon_handle, "albums") - for album in self.connection.walk_albums(ltype='newest',size=size): + for album in self.connection.walk_albums(ltype='newest',size=size,offset=offset): self.add_album(album, show_artist=True) + + self.next_page_link(page) + self.menu_link() xbmcplugin.endOfDirectory(self.addon_handle) @@ -295,12 +321,17 @@ class Plugin(object): Display most played albums list. """ + page = int(self.addon_args["page"][0]) size = self.albums_per_page + offset = size * ( page -1 ) xbmcplugin.setContent(self.addon_handle, "albums") - for album in self.connection.walk_albums(ltype='frequent',size=size): + for album in self.connection.walk_albums(ltype='frequent',size=size,offset=offset): self.add_album(album, show_artist=True) + + self.next_page_link(page) + self.menu_link() xbmcplugin.endOfDirectory(self.addon_handle) @@ -309,12 +340,17 @@ class Plugin(object): Display recently played album list. """ + page = int(self.addon_args["page"][0]) size = self.albums_per_page + offset = size * ( page -1 ) xbmcplugin.setContent(self.addon_handle, "albums") for album in self.connection.walk_albums(ltype='recent',size=size): self.add_album(album, show_artist=True) + + self.next_page_link(page) + self.menu_link() xbmcplugin.endOfDirectory(self.addon_handle) diff --git a/lib/libsonic_extra/__init__.py b/lib/libsonic_extra/__init__.py index 6c6bdfa..9a5e1ee 100644 --- a/lib/libsonic_extra/__init__.py +++ b/lib/libsonic_extra/__init__.py @@ -380,7 +380,7 @@ class SubsonicClient(libsonic.Connection): for genre in response["genres"]["genre"]: yield genre - def walk_albums(self, ltype, size=None, from_year=None,to_year=None, genre=None): + def walk_albums(self, ltype, size=None, from_year=None,to_year=None, genre=None, offset=None): """ Request all albums for a given genre and iterate over each album. """ @@ -390,20 +390,16 @@ class SubsonicClient(libsonic.Connection): if ltype == 'byYear' and (from_year is None or to_year is None): return - - offset = 0 - while True: - response = self.getAlbumList2( - ltype=ltype, genre=genre, size=size, offset=offset) + response = self.getAlbumList2( + ltype=ltype, genre=genre, size=size, offset=offset) - if not response["albumList2"]["album"]: - break + if not response["albumList2"]["album"]: + return - for album in response["albumList2"]["album"]: - yield album + for album in response["albumList2"]["album"]: + yield album - offset += size def walk_album(self, album_id): """