mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2024-12-25 10:16:11 +00:00
fixed: resume now uses native kodi dialog
This commit is contained in:
parent
432098a115
commit
0eec3ecb1a
1 changed files with 8 additions and 136 deletions
|
@ -13,6 +13,7 @@ import sys
|
||||||
from DownloadUtils import DownloadUtils
|
from DownloadUtils import DownloadUtils
|
||||||
downloadUtils = DownloadUtils()
|
downloadUtils = DownloadUtils()
|
||||||
from PlayUtils import PlayUtils
|
from PlayUtils import PlayUtils
|
||||||
|
from ReadKodiDB import ReadKodiDB
|
||||||
from API import API
|
from API import API
|
||||||
import Utils as utils
|
import Utils as utils
|
||||||
import os
|
import os
|
||||||
|
@ -48,16 +49,12 @@ class PlaybackUtils():
|
||||||
userData = result.get("UserData")
|
userData = result.get("UserData")
|
||||||
resume_result = 0
|
resume_result = 0
|
||||||
seekTime = 0
|
seekTime = 0
|
||||||
|
|
||||||
if userData.get("PlaybackPositionTicks") != 0:
|
|
||||||
reasonableTicks = int(userData.get("PlaybackPositionTicks")) / 1000
|
|
||||||
seekTime = reasonableTicks / 10000
|
|
||||||
displayTime = str(datetime.timedelta(seconds=seekTime))
|
|
||||||
display_list = [ language(30106) + ' ' + displayTime, language(30107)]
|
|
||||||
resumeScreen = xbmcgui.Dialog()
|
|
||||||
resume_result = resumeScreen.select(language(30105), display_list)
|
|
||||||
|
|
||||||
|
|
||||||
|
#get the resume point from Kodi DB
|
||||||
|
kodiItem = ReadKodiDB().getKodiMovie(id)
|
||||||
|
if kodiItem != None:
|
||||||
|
seekTime = int(round(kodiItem['resume'].get("position")))
|
||||||
|
|
||||||
playurl = PlayUtils().getPlayUrl(server, id, result)
|
playurl = PlayUtils().getPlayUrl(server, id, result)
|
||||||
|
|
||||||
isStrmFile = False
|
isStrmFile = False
|
||||||
|
@ -91,7 +88,7 @@ class PlaybackUtils():
|
||||||
WINDOW.setProperty(playurl+"positionurl", positionurl)
|
WINDOW.setProperty(playurl+"positionurl", positionurl)
|
||||||
WINDOW.setProperty(playurl+"deleteurl", "")
|
WINDOW.setProperty(playurl+"deleteurl", "")
|
||||||
WINDOW.setProperty(playurl+"deleteurl", deleteurl)
|
WINDOW.setProperty(playurl+"deleteurl", deleteurl)
|
||||||
if resume_result == 0:
|
if seekTime != 0:
|
||||||
WINDOW.setProperty(playurl+"seektime", str(seekTime))
|
WINDOW.setProperty(playurl+"seektime", str(seekTime))
|
||||||
else:
|
else:
|
||||||
WINDOW.clearProperty(playurl+"seektime")
|
WINDOW.clearProperty(playurl+"seektime")
|
||||||
|
@ -109,8 +106,7 @@ class PlaybackUtils():
|
||||||
playMethod = "DirectPlay"
|
playMethod = "DirectPlay"
|
||||||
else:
|
else:
|
||||||
playMethod = "Transcode"
|
playMethod = "Transcode"
|
||||||
|
|
||||||
|
|
||||||
WINDOW.setProperty(playurl+"playmethod", playMethod)
|
WINDOW.setProperty(playurl+"playmethod", playMethod)
|
||||||
|
|
||||||
mediaSources = result.get("MediaSources")
|
mediaSources = result.get("MediaSources")
|
||||||
|
@ -203,128 +199,4 @@ class PlaybackUtils():
|
||||||
listItem.setInfo('video', {'writer' : people.get('Writer')})
|
listItem.setInfo('video', {'writer' : people.get('Writer')})
|
||||||
listItem.setInfo('video', {'mpaa': result.get("OfficialRating")})
|
listItem.setInfo('video', {'mpaa': result.get("OfficialRating")})
|
||||||
listItem.setInfo('video', {'genre': genre})
|
listItem.setInfo('video', {'genre': genre})
|
||||||
|
|
||||||
def seekToPosition(self, seekTo):
|
|
||||||
|
|
||||||
#Set a loop to wait for positive confirmation of playback
|
|
||||||
count = 0
|
|
||||||
while not xbmc.Player().isPlaying():
|
|
||||||
self.logMsg( "Not playing yet...sleep for 1 sec")
|
|
||||||
count = count + 1
|
|
||||||
if count >= 10:
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
#Jump to resume point
|
|
||||||
jumpBackSec = int(self.settings.getSetting("resumeJumpBack"))
|
|
||||||
seekToTime = seekTo - jumpBackSec
|
|
||||||
count = 0
|
|
||||||
while xbmc.Player().getTime() < (seekToTime - 5) and count < 11: # only try 10 times
|
|
||||||
count = count + 1
|
|
||||||
xbmc.Player().pause
|
|
||||||
xbmc.sleep(100)
|
|
||||||
xbmc.Player().seekTime(seekToTime)
|
|
||||||
xbmc.sleep(100)
|
|
||||||
xbmc.Player().play()
|
|
||||||
|
|
||||||
def PLAYAllItems(self, items, startPositionTicks):
|
|
||||||
xbmc.log("== ENTER: PLAYAllItems ==")
|
|
||||||
xbmc.log("Items : " + str(items))
|
|
||||||
|
|
||||||
du = DownloadUtils()
|
|
||||||
userid = du.getUserId()
|
|
||||||
server = du.getServer()
|
|
||||||
|
|
||||||
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
|
|
||||||
playlist.clear()
|
|
||||||
started = False
|
|
||||||
|
|
||||||
for itemID in items:
|
|
||||||
|
|
||||||
xbmc.log("Adding Item to Playlist : " + itemID)
|
|
||||||
item_url = "http://" + server + "/mediabrowser/Users/" + userid + "/Items/" + itemID + "?format=json"
|
|
||||||
jsonData = du.downloadUrl(item_url, suppress=False, popup=1 )
|
|
||||||
|
|
||||||
item_data = json.loads(jsonData)
|
|
||||||
added = self.addPlaylistItem(playlist, item_data, server, userid)
|
|
||||||
if(added and started == False):
|
|
||||||
started = True
|
|
||||||
xbmc.log("Starting Playback Pre")
|
|
||||||
xbmc.Player().play(playlist)
|
|
||||||
|
|
||||||
if(started == False):
|
|
||||||
xbmc.log("Starting Playback Post")
|
|
||||||
xbmc.Player().play(playlist)
|
|
||||||
|
|
||||||
#seek to position
|
|
||||||
seekTime = 0
|
|
||||||
if(startPositionTicks != None):
|
|
||||||
seekTime = (startPositionTicks / 1000) / 10000
|
|
||||||
|
|
||||||
if seekTime > 0:
|
|
||||||
self.seekToPosition(seekTime)
|
|
||||||
|
|
||||||
def AddToPlaylist(self, itemIds):
|
|
||||||
xbmc.log("== ENTER: PLAYAllItems ==")
|
|
||||||
|
|
||||||
du = DownloadUtils()
|
|
||||||
userid = du.getUserId()
|
|
||||||
server = du.getServer()
|
|
||||||
|
|
||||||
playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
|
|
||||||
|
|
||||||
for itemID in itemIds:
|
|
||||||
|
|
||||||
xbmc.log("Adding Item to Playlist : " + itemID)
|
|
||||||
item_url = "http://" + server + "/mediabrowser/Users/" + userid + "/Items/" + itemID + "?format=json"
|
|
||||||
jsonData = du.downloadUrl(item_url, suppress=False, popup=1 )
|
|
||||||
|
|
||||||
item_data = json.loads(jsonData)
|
|
||||||
self.addPlaylistItem(playlist, item_data, server, userid)
|
|
||||||
|
|
||||||
return playlist
|
|
||||||
|
|
||||||
def addPlaylistItem(self, playlist, item, server, userid):
|
|
||||||
|
|
||||||
id = item.get("Id")
|
|
||||||
|
|
||||||
playurl = PlayUtils().getPlayUrl(server, id, item)
|
|
||||||
xbmc.log("Play URL: " + playurl)
|
|
||||||
api = API()
|
|
||||||
thumbPath = api.getArtwork(item, "Primary")
|
|
||||||
listItem = xbmcgui.ListItem(path=playurl, iconImage=thumbPath, thumbnailImage=thumbPath)
|
|
||||||
self.setListItemProps(server, id, listItem, item)
|
|
||||||
|
|
||||||
# Can not play virtual items
|
|
||||||
if (item.get("LocationType") == "Virtual") or (item.get("IsPlaceHolder") == True):
|
|
||||||
|
|
||||||
xbmcgui.Dialog().ok(self.language(30128), self.language(30129))
|
|
||||||
return False
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
watchedurl = 'http://' + server + '/mediabrowser/Users/'+ userid + '/PlayedItems/' + id
|
|
||||||
positionurl = 'http://' + server + '/mediabrowser/Users/'+ userid + '/PlayingItems/' + id
|
|
||||||
|
|
||||||
# set the current playing info
|
|
||||||
WINDOW = xbmcgui.Window( 10000 )
|
|
||||||
WINDOW.setProperty(playurl + "watchedurl", watchedurl)
|
|
||||||
WINDOW.setProperty(playurl + "positionurl", positionurl)
|
|
||||||
|
|
||||||
WINDOW.setProperty(playurl + "runtimeticks", str(item.get("RunTimeTicks")))
|
|
||||||
WINDOW.setProperty(playurl+"type", item.get("Type"))
|
|
||||||
WINDOW.setProperty(playurl + "item_id", id)
|
|
||||||
|
|
||||||
if (item.get("Type") == "Episode"):
|
|
||||||
WINDOW.setProperty(playurl + "refresh_id", item.get("SeriesId"))
|
|
||||||
else:
|
|
||||||
WINDOW.setProperty(playurl + "refresh_id", id)
|
|
||||||
|
|
||||||
xbmc.log( "PlayList Item Url : " + str(playurl))
|
|
||||||
|
|
||||||
playlist.add(playurl, listItem)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue