mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2024-12-25 02:06:09 +00:00
Follow ordered views
This affects the node numbering.
This commit is contained in:
parent
dc7473bfae
commit
c3d78c871e
3 changed files with 66 additions and 26 deletions
|
@ -118,6 +118,15 @@ class Embydb_Functions():
|
||||||
))
|
))
|
||||||
self.embycursor.execute(query, (name, tagid, mediafolderid))
|
self.embycursor.execute(query, (name, tagid, mediafolderid))
|
||||||
|
|
||||||
|
def removeView(self, viewid):
|
||||||
|
|
||||||
|
query = ' '.join((
|
||||||
|
|
||||||
|
"DELETE FROM view",
|
||||||
|
"WHERE view_id = ?"
|
||||||
|
))
|
||||||
|
self.embycursor.execute(query, (viewid,))
|
||||||
|
|
||||||
def getItem_byId(self, embyid):
|
def getItem_byId(self, embyid):
|
||||||
|
|
||||||
embycursor = self.embycursor
|
embycursor = self.embycursor
|
||||||
|
|
|
@ -353,13 +353,6 @@ class LibrarySync(threading.Thread):
|
||||||
kodiconn = utils.kodiSQL('video')
|
kodiconn = utils.kodiSQL('video')
|
||||||
kodicursor = kodiconn.cursor()
|
kodicursor = kodiconn.cursor()
|
||||||
|
|
||||||
# Erase saved views
|
|
||||||
embycursor.execute('SELECT tbl_name FROM sqlite_master WHERE type="table"')
|
|
||||||
rows = embycursor.fetchall()
|
|
||||||
for row in rows:
|
|
||||||
tablename = row[0]
|
|
||||||
if tablename == "view":
|
|
||||||
embycursor.execute("DELETE FROM " + tablename)
|
|
||||||
# Compare views, assign correct tags to items
|
# Compare views, assign correct tags to items
|
||||||
self.maintainViews(embycursor, kodicursor)
|
self.maintainViews(embycursor, kodicursor)
|
||||||
|
|
||||||
|
@ -382,6 +375,15 @@ class LibrarySync(threading.Thread):
|
||||||
url = "{server}/emby/Users/{UserId}/Views?format=json"
|
url = "{server}/emby/Users/{UserId}/Views?format=json"
|
||||||
result = doUtils(url)
|
result = doUtils(url)
|
||||||
grouped_views = result['Items']
|
grouped_views = result['Items']
|
||||||
|
ordered_views = self.emby.getViews(sortedlist=True)
|
||||||
|
sorted_views = []
|
||||||
|
for view in ordered_views:
|
||||||
|
if view['type'] == "music":
|
||||||
|
continue
|
||||||
|
|
||||||
|
if view['type'] == "mixed":
|
||||||
|
sorted_views.append(view['name'])
|
||||||
|
sorted_views.append(view['name'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
groupedFolders = self.user.userSettings['Configuration']['GroupedFolders']
|
groupedFolders = self.user.userSettings['Configuration']['GroupedFolders']
|
||||||
|
@ -394,6 +396,7 @@ class LibrarySync(threading.Thread):
|
||||||
vnodes.clearProperties()
|
vnodes.clearProperties()
|
||||||
totalnodes = 0
|
totalnodes = 0
|
||||||
|
|
||||||
|
current_views = emby_db.getViews()
|
||||||
# Set views for supported media type
|
# Set views for supported media type
|
||||||
mediatypes = ['movies', 'tvshows', 'musicvideos', 'homevideos', 'music', 'photos']
|
mediatypes = ['movies', 'tvshows', 'musicvideos', 'homevideos', 'music', 'photos']
|
||||||
for mediatype in mediatypes:
|
for mediatype in mediatypes:
|
||||||
|
@ -427,7 +430,7 @@ class LibrarySync(threading.Thread):
|
||||||
current_tagid = view[2]
|
current_tagid = view[2]
|
||||||
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
self.logMsg("Creating viewid: %s in Emby database." % folderid, 1)
|
log("Creating viewid: %s in Emby database." % folderid, 1)
|
||||||
tagid = kodi_db.createTag(foldername)
|
tagid = kodi_db.createTag(foldername)
|
||||||
# Create playlist for the video library
|
# Create playlist for the video library
|
||||||
if (foldername not in playlists and
|
if (foldername not in playlists and
|
||||||
|
@ -435,9 +438,11 @@ class LibrarySync(threading.Thread):
|
||||||
utils.playlistXSP(mediatype, foldername, folderid, viewtype)
|
utils.playlistXSP(mediatype, foldername, folderid, viewtype)
|
||||||
playlists.append(foldername)
|
playlists.append(foldername)
|
||||||
# Create the video node
|
# Create the video node
|
||||||
if (foldername not in nodes and
|
if foldername not in nodes and mediatype not in ("musicvideos", "music"):
|
||||||
mediatype in ('movies', 'tvshows', 'musicvideos', 'homevideos')):
|
vnodes.viewNode(sorted_views.index(foldername), foldername, mediatype,
|
||||||
vnodes.viewNode(totalnodes, foldername, mediatype, viewtype, folderid)
|
viewtype, folderid)
|
||||||
|
if viewtype == "mixed": # Change the value
|
||||||
|
sorted_views[sorted_views.index(foldername)] = "%ss" % foldername
|
||||||
nodes.append(foldername)
|
nodes.append(foldername)
|
||||||
totalnodes += 1
|
totalnodes += 1
|
||||||
# Add view to emby database
|
# Add view to emby database
|
||||||
|
@ -451,6 +456,13 @@ class LibrarySync(threading.Thread):
|
||||||
"viewtype: %s" % current_viewtype,
|
"viewtype: %s" % current_viewtype,
|
||||||
"tagid: %s" % current_tagid)), 2)
|
"tagid: %s" % current_tagid)), 2)
|
||||||
|
|
||||||
|
# View is still valid
|
||||||
|
try:
|
||||||
|
current_views.remove(folderid)
|
||||||
|
except ValueError:
|
||||||
|
# View was just created, nothing to remove
|
||||||
|
pass
|
||||||
|
|
||||||
# View was modified, update with latest info
|
# View was modified, update with latest info
|
||||||
if current_viewname != foldername:
|
if current_viewname != foldername:
|
||||||
log("viewid: %s new viewname: %s" % (folderid, foldername), 1)
|
log("viewid: %s new viewname: %s" % (folderid, foldername), 1)
|
||||||
|
@ -468,7 +480,7 @@ class LibrarySync(threading.Thread):
|
||||||
# Delete video node
|
# Delete video node
|
||||||
if mediatype != "musicvideos":
|
if mediatype != "musicvideos":
|
||||||
vnodes.viewNode(
|
vnodes.viewNode(
|
||||||
indexnumber=totalnodes,
|
indexnumber=sorted_views.index(foldername),
|
||||||
tagname=current_viewname,
|
tagname=current_viewname,
|
||||||
mediatype=mediatype,
|
mediatype=mediatype,
|
||||||
viewtype=current_viewtype,
|
viewtype=current_viewtype,
|
||||||
|
@ -481,7 +493,10 @@ class LibrarySync(threading.Thread):
|
||||||
playlists.append(foldername)
|
playlists.append(foldername)
|
||||||
# Add new video node
|
# Add new video node
|
||||||
if foldername not in nodes and mediatype != "musicvideos":
|
if foldername not in nodes and mediatype != "musicvideos":
|
||||||
vnodes.viewNode(totalnodes, foldername, mediatype, viewtype, folderid)
|
vnodes.viewNode(sorted_views.index(foldername), foldername,
|
||||||
|
mediatype, viewtype, folderid)
|
||||||
|
if viewtype == "mixed": # Change the value
|
||||||
|
sorted_views[sorted_views.index(foldername)] = "%ss" % foldername
|
||||||
nodes.append(foldername)
|
nodes.append(foldername)
|
||||||
totalnodes += 1
|
totalnodes += 1
|
||||||
|
|
||||||
|
@ -500,7 +515,10 @@ class LibrarySync(threading.Thread):
|
||||||
playlists.append(foldername)
|
playlists.append(foldername)
|
||||||
# Create the video node if not already exists
|
# Create the video node if not already exists
|
||||||
if foldername not in nodes and mediatype != "musicvideos":
|
if foldername not in nodes and mediatype != "musicvideos":
|
||||||
vnodes.viewNode(totalnodes, foldername, mediatype, viewtype, folderid)
|
vnodes.viewNode(sorted_views.index(foldername), foldername,
|
||||||
|
mediatype, viewtype, folderid)
|
||||||
|
if viewtype == "mixed": # Change the value
|
||||||
|
sorted_views[sorted_views.index(foldername)] = "%ss" % foldername
|
||||||
nodes.append(foldername)
|
nodes.append(foldername)
|
||||||
totalnodes += 1
|
totalnodes += 1
|
||||||
else:
|
else:
|
||||||
|
@ -514,6 +532,11 @@ class LibrarySync(threading.Thread):
|
||||||
# Save total
|
# Save total
|
||||||
utils.window('Emby.nodes.total', str(totalnodes))
|
utils.window('Emby.nodes.total', str(totalnodes))
|
||||||
|
|
||||||
|
# Remove any old referenced views
|
||||||
|
log("Removing views: %s" % current_views, 1)
|
||||||
|
for view in current_views:
|
||||||
|
emby_db.removeView(view)
|
||||||
|
|
||||||
def movies(self, embycursor, kodicursor, pdialog):
|
def movies(self, embycursor, kodicursor, pdialog):
|
||||||
|
|
||||||
log = self.logMsg
|
log = self.logMsg
|
||||||
|
|
|
@ -305,11 +305,11 @@ class Read_EmbyServer():
|
||||||
log("Increase jump limit to: %s" % jump, 1)
|
log("Increase jump limit to: %s" % jump, 1)
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def getViews(self, type, root=False):
|
def getViews(self, mediatype="", root=False, sortedlist=False):
|
||||||
# Build a list of user views
|
# Build a list of user views
|
||||||
doUtils = self.doUtils
|
doUtils = self.doUtils
|
||||||
views = []
|
views = []
|
||||||
type = type.lower()
|
mediatype = mediatype.lower()
|
||||||
|
|
||||||
if not root:
|
if not root:
|
||||||
url = "{server}/emby/Users/{UserId}/Views?format=json"
|
url = "{server}/emby/Users/{UserId}/Views?format=json"
|
||||||
|
@ -319,10 +319,8 @@ class Read_EmbyServer():
|
||||||
result = doUtils(url)
|
result = doUtils(url)
|
||||||
try:
|
try:
|
||||||
items = result['Items']
|
items = result['Items']
|
||||||
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
self.logMsg("Error retrieving views for type: %s" % type, 2)
|
self.logMsg("Error retrieving views for type: %s" % mediatype, 2)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for item in items:
|
for item in items:
|
||||||
|
|
||||||
|
@ -347,8 +345,18 @@ class Read_EmbyServer():
|
||||||
if itemId == folder['Id']:
|
if itemId == folder['Id']:
|
||||||
itemtype = folder.get('CollectionType', "mixed")
|
itemtype = folder.get('CollectionType', "mixed")
|
||||||
|
|
||||||
if (name not in ('Collections', 'Trailers') and (itemtype == type or
|
if name not in ('Collections', 'Trailers'):
|
||||||
(itemtype == "mixed" and type in ("movies", "tvshows")))):
|
|
||||||
|
if sortedlist:
|
||||||
|
views.append({
|
||||||
|
|
||||||
|
'name': name,
|
||||||
|
'type': itemtype,
|
||||||
|
'id': itemId
|
||||||
|
})
|
||||||
|
|
||||||
|
elif (itemtype == mediatype or
|
||||||
|
(itemtype == "mixed" and mediatype in ("movies", "tvshows"))):
|
||||||
|
|
||||||
views.append({
|
views.append({
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue