summaryrefslogtreecommitdiff
path: root/plugin.video.embycon/resources/lib/menu_functions.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.embycon/resources/lib/menu_functions.py')
-rw-r--r--plugin.video.embycon/resources/lib/menu_functions.py232
1 files changed, 158 insertions, 74 deletions
diff --git a/plugin.video.embycon/resources/lib/menu_functions.py b/plugin.video.embycon/resources/lib/menu_functions.py
index 4e9ca0f..89809e9 100644
--- a/plugin.video.embycon/resources/lib/menu_functions.py
+++ b/plugin.video.embycon/resources/lib/menu_functions.py
@@ -9,10 +9,10 @@ import xbmcplugin
import xbmcaddon
from downloadutils import DownloadUtils
-from utils import getDetailsString
from kodi_utils import addMenuDirectoryItem
from simple_logging import SimpleLogging
from translation import i18n
+from datamanager import DataManager
log = SimpleLogging(__name__)
downloadUtils = DownloadUtils()
@@ -27,29 +27,27 @@ def showGenreList(item_type=None):
if server is None:
return
- detailsString = getDetailsString()
-
kodi_type = "Movies"
emby_type = "Movie"
if item_type is not None and item_type == "series":
emby_type = "Series"
kodi_type = "tvshows"
- try:
- jsonData = downloadUtils.downloadUrl("{server}/emby/Genres?" +
- "SortBy=SortName" +
- "&SortOrder=Ascending" +
- "&IncludeItemTypes=" + emby_type +
- "&Recursive=true" +
- "&UserId={userid}" +
- "&format=json")
- log.debug("GENRE_LIST_DATA : " + jsonData)
- except Exception, msg:
- error = "Get connect : " + str(msg)
- log.error(error)
+ url = ("{server}/emby/Genres?" +
+ "SortBy=SortName" +
+ "&SortOrder=Ascending" +
+ "&IncludeItemTypes=" + emby_type +
+ "&Recursive=true" +
+ "&UserId={userid}" +
+ "&format=json")
- result = json.loads(jsonData)
- result = result.get("Items")
+ data_manager = DataManager()
+ result = data_manager.GetContent(url)
+
+ if result is not None:
+ result = result.get("Items")
+ else:
+ result = []
collections = []
@@ -58,7 +56,7 @@ def showGenreList(item_type=None):
item_data['title'] = genre.get("Name")
item_data['media_type'] = kodi_type
item_data['thumbnail'] = downloadUtils.getArtwork(genre, "Thumb", server=server)
- item_data['path'] = ('{server}/emby/Users/{userid}/Items?Fields=' + detailsString +
+ item_data['path'] = ('{server}/emby/Users/{userid}/Items?Fields={field_filters}' +
'&Recursive=true&GenreIds=' + genre.get("Id") +
'&IncludeItemTypes=' + emby_type +
'&ImageTypeLimit=1&format=json')
@@ -68,7 +66,7 @@ def showGenreList(item_type=None):
url = sys.argv[0] + ("?url=" + urllib.quote(collection['path']) +
"&mode=GET_CONTENT" +
"&media_type=" + collection["media_type"])
- log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
+ log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url, thumbnail=collection.get("thumbnail"))
xbmcplugin.endOfDirectory(int(sys.argv[1]))
@@ -81,15 +79,14 @@ def showMovieAlphaList():
server = downloadUtils.getServer()
if server is None:
return
- detailsString = getDetailsString()
collections = []
item_data = {}
item_data['title'] = "#"
item_data['media_type'] = "Movies"
- item_data['path'] = ('{server}/emby/Users/{userid}' +
- '/Items?Fields=' + detailsString +
+ item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&NameLessThan=A' +
'&IncludeItemTypes=Movie' +
@@ -103,8 +100,8 @@ def showMovieAlphaList():
item_data = {}
item_data['title'] = alphaName
item_data['media_type'] = "Movies"
- item_data['path'] = ('{server}/emby/Users/{userid}' +
- '/Items?Fields=' + detailsString +
+ item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&NameStartsWith=' + alphaName +
'&IncludeItemTypes=Movie' +
@@ -114,11 +111,58 @@ def showMovieAlphaList():
for collection in collections:
url = (sys.argv[0] + "?url=" + urllib.quote(collection['path']) +
"&mode=GET_CONTENT&media_type=" + collection["media_type"])
- log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
+ log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url)
xbmcplugin.endOfDirectory(int(sys.argv[1]))
+def showYearsList():
+
+ server = downloadUtils.getServer()
+ if server is None:
+ return
+
+ jsonData = downloadUtils.downloadUrl("{server}/emby/Years" +
+ "?SortBy=SortName" +
+ "&SortOrder=Descending" +
+ "&IncludeItemTypes=Movie" +
+ "&Recursive=true" +
+ "&UserId={userid}" +
+ "&format=json")
+ log.debug("YEAR_LIST_DATA: {0}", jsonData)
+
+ result = json.loads(jsonData)
+ if result is not None:
+ result = result.get("Items")
+ else:
+ result = []
+
+ collections = []
+
+ for year in result:
+ item_data = {}
+ item_data['title'] = year.get("Name")
+ item_data['media_type'] = "Movies"
+ #item_data['thumbnail'] = server + "/Years/" + year.get("Name") + "/Images/Thumb"
+ item_data['path'] = ('{server}/emby/Users/{userid}/Items'
+ '?Fields={field_filters}' +
+ '&Recursive=true' +
+ '&Years=' + year.get("Name") +
+ '&IncludeItemTypes=Movie' +
+ '&ImageTypeLimit=1' +
+ '&format=json')
+ collections.append(item_data)
+
+ for collection in collections:
+ url = sys.argv[0] + ("?url=" + urllib.quote(collection['path']) +
+ "&mode=GET_CONTENT" +
+ "&media_type=" + collection["media_type"])
+ log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
+ addMenuDirectoryItem(collection.get('title', i18n('unknown')), url)#, thumbnail=collection.get("thumbnail"))
+
+ xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_LABEL)
+ xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
def displaySections():
log.debug("== ENTER: displaySections() ==")
@@ -129,8 +173,7 @@ def displaySections():
return
# Add collections
- detailsString = getDetailsString()
- collections = getCollections(detailsString)
+ collections = getCollections()
if collections:
for collection in collections:
@@ -138,9 +181,10 @@ def displaySections():
"&mode=GET_CONTENT&media_type=" + collection["media_type"])
if collection.get("name_format") is not None:
url += "&name_format=" + urllib.quote(collection.get("name_format"))
- log.debug("addMenuDirectoryItem: " + collection.get('title', i18n('unknown')) + " " + str(url))
+ log.debug("addMenuDirectoryItem: {0} ({1})", collection.get('title'), url)
addMenuDirectoryItem(collection.get('title', i18n('unknown')), url, thumbnail=collection.get("thumbnail"))
+ addMenuDirectoryItem(i18n('movies_year'), "plugin://plugin.video.embycon/?mode=MOVIE_YEARS")
addMenuDirectoryItem(i18n('movies_genre'), "plugin://plugin.video.embycon/?mode=MOVIE_GENRE")
addMenuDirectoryItem(i18n('movies_az'), "plugin://plugin.video.embycon/?mode=MOVIE_ALPHA")
addMenuDirectoryItem(i18n('tvshow_genre'), "plugin://plugin.video.embycon/?mode=SERIES_GENRE")
@@ -151,15 +195,16 @@ def displaySections():
addMenuDirectoryItem(i18n('detect_server'), "plugin://plugin.video.embycon/?mode=DETECT_SERVER_USER")
addMenuDirectoryItem(i18n('show_settings'), "plugin://plugin.video.embycon/?mode=SHOW_SETTINGS")
- addMenuDirectoryItem(i18n('cache_textures'), "plugin://plugin.video.embycon/?mode=CACHE_ARTWORK")
+ # only add these if we have other collection which means we have a valid server conn
if collections:
+ addMenuDirectoryItem(i18n('cache_textures'), "plugin://plugin.video.embycon/?mode=CACHE_ARTWORK")
addMenuDirectoryItem(i18n('widgets'), "plugin://plugin.video.embycon/?mode=WIDGETS")
xbmcplugin.endOfDirectory(int(sys.argv[1]))
-def getCollections(detailsString):
+def getCollections():
log.debug("== ENTER: getCollections ==")
server = downloadUtils.getServer()
@@ -172,39 +217,56 @@ def getCollections(detailsString):
log.debug("No userid so returning []")
return []
- try:
- jsonData = downloadUtils.downloadUrl("{server}/emby/Users/{userid}/Items/Root?format=json")
- except Exception, msg:
- error = "Get connect : " + str(msg)
- log.error(error)
- return []
-
- log.debug("jsonData : " + jsonData)
- result = json.loads(jsonData)
+ data_manager = DataManager()
+ result = data_manager.GetContent("{server}/emby/Users/{userid}/Items/Root?format=json")
if result is None:
return []
parentid = result.get("Id")
- log.debug("parentid : " + parentid)
+ log.debug("parentid: {0}", parentid)
htmlpath = "{server}/emby/Users/{userid}/items?ParentId=" + parentid + "&Sortby=SortName&format=json"
- jsonData = downloadUtils.downloadUrl(htmlpath)
- log.debug("jsonData : " + jsonData)
- collections = []
+ result = data_manager.GetContent(htmlpath)
- result = []
- try:
- result = json.loads(jsonData)
+ if result is not None:
result = result.get("Items")
- except Exception as error:
- log.error("Error parsing user collection: " + str(error))
+ else:
+ result = []
+
+ collections = []
for item in result:
- item_name = (item.get("Name")).encode('utf-8')
+ item_name = item.get("Name")
collection_type = item.get('CollectionType', None)
- log.debug("CollectionType: " + str(collection_type))
- log.debug("Title: " + item_name)
+ log.debug("CollectionType: {0}", collection_type)
+ log.debug("Title: {0}", item_name)
+
+ if collection_type == "music":
+ item_data = {}
+ item_data['title'] = item_name + i18n('_all_albums')
+ item_data['thumbnail'] = downloadUtils.getArtwork(item, "Primary", server=server)
+ item_data['media_type'] = 'MusicAlbums'
+ item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
+ '?Recursive=true' +
+ '&ParentId=' + item.get("Id") +
+ '&IncludeItemTypes=MusicAlbum' +
+ '&ImageTypeLimit=1' +
+ '&EnableImageTypes=Primary,Backdrop,Banner,Thumb' +
+ '&format=json')
+ collections.append(item_data)
+
+ item_data = {}
+ item_data['title'] = item_name + i18n('_all_artists')
+ item_data['thumbnail'] = downloadUtils.getArtwork(item, "Primary", server=server)
+ item_data['media_type'] = 'MusicArtists'
+ item_data['path'] = ('{server}/emby/Artists/AlbumArtists' +
+ '?Recursive=true' +
+ '&ParentId=' + item.get("Id") +
+ '&ImageTypeLimit=1' +
+ '&EnableImageTypes=Primary,Backdrop,Banner,Thumb' +
+ '&format=json')
+ collections.append(item_data)
if collection_type in ["tvshows", "movies", "boxsets"]:
collections.append({
@@ -214,7 +276,7 @@ def getCollections(detailsString):
'?ParentId=' + item.get("Id") +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&ImageTypeLimit=1' +
'&format=json'),
'media_type': collection_type})
@@ -227,7 +289,7 @@ def getCollections(detailsString):
'?ParentId=' + item.get("Id") +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsUnplayed' +
'&Recursive=true' +
'&IncludeItemTypes=Series' +
@@ -242,7 +304,7 @@ def getCollections(detailsString):
'&Limit={ItemLimit}' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsResumable' +
'&Recursive=true' +
'&IncludeItemTypes=Episode' +
@@ -258,7 +320,7 @@ def getCollections(detailsString):
'&Limit={ItemLimit}' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortBy=DateCreated' +
'&SortOrder=Descending' +
'&Filters=IsUnplayed' +
@@ -276,7 +338,7 @@ def getCollections(detailsString):
'&Limit={ItemLimit}' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortBy=DateCreated' +
'&SortOrder=Descending' +
'&Filters={IsUnplayed,}IsNotFolder' +
@@ -293,7 +355,7 @@ def getCollections(detailsString):
'&ParentId=' + item.get("Id") +
'&Limit={ItemLimit}' +
'&Recursive=true' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsUnplayed,IsNotFolder' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
@@ -311,7 +373,7 @@ def getCollections(detailsString):
'?ParentId=' + item.get("Id") +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsUnplayed' +
'&ImageTypeLimit=1' +
'&format=json'),
@@ -324,7 +386,7 @@ def getCollections(detailsString):
'&Limit={ItemLimit}' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsResumable' +
'&ImageTypeLimit=1' +
'&format=json'),
@@ -337,7 +399,7 @@ def getCollections(detailsString):
'&Limit={ItemLimit}' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortBy=DateCreated' +
'&SortOrder=Descending' +
'&Filters={IsUnplayed,}IsNotFolder' +
@@ -350,7 +412,7 @@ def getCollections(detailsString):
item_data['title'] = i18n('movies_all')
item_data['media_type'] = 'Movies'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
- '?Fields=' + detailsString +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&IncludeItemTypes=Movie' +
'&ImageTypeLimit=1' +
@@ -362,7 +424,7 @@ def getCollections(detailsString):
item_data['media_type'] = 'Movies'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
'?Recursive=true' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsUnplayed' +
'&IncludeItemTypes=Movie' +
'&ImageTypeLimit=1' +
@@ -375,7 +437,7 @@ def getCollections(detailsString):
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
'?Limit={ItemLimit}' +
'&Recursive=true' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsResumable' +
'&IncludeItemTypes=Movie' +
'&ImageTypeLimit=1' +
@@ -389,7 +451,7 @@ def getCollections(detailsString):
'?Limit={ItemLimit}' +
'&Recursive=true' +
'&SortBy=DateCreated' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortOrder=Descending' +
'&Filters={IsUnplayed,}IsNotFolder' +
'&IncludeItemTypes=Movie' +
@@ -401,7 +463,7 @@ def getCollections(detailsString):
item_data['title'] = i18n('movies_favorites')
item_data['media_type'] = 'Movies'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
- '?Fields=' + detailsString +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&Filters=IsFavorite' +
'&IncludeItemTypes=Movie' +
@@ -414,7 +476,7 @@ def getCollections(detailsString):
item_data['media_type'] = 'BoxSets'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
'?Recursive=true' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&IncludeItemTypes=BoxSet' +
'&ImageTypeLimit=1' +
'&format=json')
@@ -424,7 +486,7 @@ def getCollections(detailsString):
item_data['title'] = i18n('tvshows_all')
item_data['media_type'] = 'tvshows'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
- '?Fields=' + detailsString +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&IncludeItemTypes=Series' +
'&ImageTypeLimit=1' +
@@ -435,7 +497,7 @@ def getCollections(detailsString):
item_data['title'] = i18n('tvshows_unwatched')
item_data['media_type'] = 'tvshows'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
- '?Fields=' + detailsString +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&Filters=IsUnplayed' +
'&IncludeItemTypes=Series' +
@@ -447,7 +509,7 @@ def getCollections(detailsString):
item_data['title'] = i18n('tvshows_favorites')
item_data['media_type'] = 'tvshows'
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
- '?Fields=' + detailsString +
+ '?Fields={field_filters}' +
'&Recursive=true' +
'&Filters=IsFavorite' +
'&IncludeItemTypes=Series' +
@@ -463,7 +525,7 @@ def getCollections(detailsString):
'&Recursive=true' +
'&GroupItems=true' +
'&SortBy=DateCreated' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortOrder=Descending' +
'&Filters={IsUnplayed}' +
'&IsVirtualUnaired=false' +
@@ -480,7 +542,7 @@ def getCollections(detailsString):
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
'?Limit={ItemLimit}' +
'&Recursive=true' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsResumable' +
'&IncludeItemTypes=Episode' +
'&ImageTypeLimit=1' +
@@ -495,7 +557,7 @@ def getCollections(detailsString):
'?Limit={ItemLimit}' +
'&Recursive=true' +
'&SortBy=DateCreated' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortOrder=Descending' +
'&Filters={IsUnplayed,}IsNotFolder' +
'&IsVirtualUnaired=false' +
@@ -512,7 +574,7 @@ def getCollections(detailsString):
item_data['path'] = ('{server}/emby/Shows/NextUp/?Userid={userid}' +
'&Limit={ItemLimit}' +
'&Recursive=true' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&Filters=IsUnplayed,IsNotFolder' +
'&IsVirtualUnaired=false' +
'&IsMissing=False' +
@@ -528,7 +590,7 @@ def getCollections(detailsString):
item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
'?Recursive=true' +
'&SortBy=PremiereDate' +
- '&Fields=' + detailsString +
+ '&Fields={field_filters}' +
'&SortOrder=Ascending' +
'&IsVirtualUnaired=true' +
'&IsNotFolder' +
@@ -537,6 +599,28 @@ def getCollections(detailsString):
'&format=json')
collections.append(item_data)
+ item_data = {}
+ item_data['title'] = i18n('music_all_albums')
+ item_data['media_type'] = 'MusicAlbums'
+ item_data['path'] = ('{server}/emby/Users/{userid}/Items' +
+ '?Recursive=true' +
+ '&IncludeItemTypes=MusicAlbum' +
+ '&ImageTypeLimit=1' +
+ '&EnableImageTypes=Primary,Backdrop,Banner,Thumb' +
+ '&format=json')
+ collections.append(item_data)
+
+ item_data = {}
+ item_data['title'] = i18n('music_all_artists')
+ item_data['media_type'] = 'MusicArtists'
+ item_data['path'] = ('{server}/emby/Artists/AlbumArtists' +
+ '?Recursive=true' +
+ '&ImageTypeLimit=1' +
+ '&EnableImageTypes=Primary,Backdrop,Banner,Thumb' +
+ '&format=json')
+ collections.append(item_data)
+
+
return collections