diff --git a/resources/lib/functions.py b/resources/lib/functions.py index 0c77be6..68fecd4 100644 --- a/resources/lib/functions.py +++ b/resources/lib/functions.py @@ -146,6 +146,10 @@ def mainEntryPoint(): # displaySections(pluginhandle) if mode == "GET_CONTENT": getContent(param_url, pluginhandle) + + elif mode == "PLAY": + PLAY(param_url, pluginhandle) + else: displaySections() @@ -257,9 +261,9 @@ def addGUIItem( url, details, extraData, folder=True ): if url.startswith('http'): u = sys.argv[0] + "?url=" + urllib.quote(url) + mode else: - #u = sys.argv[0] + extraData.get('id') + "/media/file.mkv?url=" + url + '&mode=PLAY'# + "×tamp=" + str(datetime.today()) - u = PlayUtils().getPlayUrl(extraData.get("id"), extraData) - WINDOW.setProperty("playback_url_" + u, extraData.get("id")) + u = sys.argv[0] + extraData.get('id') + "/media/file.mkv?url=" + url + '&mode=PLAY'# + "×tamp=" + str(datetime.today()) + #u = PlayUtils().getPlayUrl(extraData.get("id"), extraData) + #WINDOW.setProperty("playback_url_" + u, extraData.get("id")) #Create the ListItem that will be displayed thumbPath=str(extraData.get('thumb','')) @@ -326,7 +330,7 @@ def addGUIItem( url, details, extraData, folder=True ): #For all end items if(not folder): - list.setProperty('IsPlayable', 'true') + #list.setProperty('IsPlayable', 'true') if extraData.get('type','video').lower() == "video": list.setProperty('TotalTime', str(extraData.get('duration'))) list.setProperty('ResumeTime', str(int(extraData.get('resumetime')))) @@ -700,11 +704,13 @@ def processDirectory(url, results, progress, pluginhandle): else: overlay = "6" watched = "false" + if userData.get("IsFavorite") == True: overlay = "5" favorite = "true" else: favorite = "false" + if userData.get("PlaybackPositionTicks") != None: PlaybackPositionTicks = str(userData.get("PlaybackPositionTicks")) reasonableTicks = int(userData.get("PlaybackPositionTicks")) / 1000 @@ -1046,11 +1052,11 @@ def getWigetContent(pluginName, handle, params): # cappedPercentage = 90 list_item.setProperty("complete_percentage", str(percentage)) - playurl = PlayUtils().getPlayUrl(item.get("Id"), item) - WINDOW.setProperty("playback_url_" + playurl, item.get("Id")) + #playurl = PlayUtils().getPlayUrl(item.get("Id"), item) + #WINDOW.setProperty("playback_url_" + playurl, item.get("Id")) - #url = server + ',;' + item_id - #playUrl = "plugin://plugin.video.embycon/?url=" + url + '&mode=PLAY' + "×tamp=" + str(datetime.today()) + url = server + ',;' + item_id + playurl = "plugin://plugin.video.embycon/?url=" + url + '&mode=PLAY' + "×tamp=" + str(datetime.today()) itemTupple = (playurl, list_item, False) listItems.append(itemTupple) @@ -1130,4 +1136,103 @@ def checkService(): log.error("EmbyCon Service Not Running, time stamp to old, exiting") xbmcgui.Dialog().ok(__language__(30135), __language__(30136), __language__(30137)) sys.exit() - + + +def PLAY(url, handle): + log.info("== ENTER: PLAY ==") + + # playData = json.loads(url) + + url = urllib.unquote(url) + + urlParts = url.split(',;') + log.info("PLAY ACTION URL PARTS : " + str(urlParts)) + server = urlParts[0] + id = urlParts[1] + autoResume = 0 + + if (len(urlParts) > 2): + autoResume = int(urlParts[2]) + log.info("PLAY ACTION URL AUTO RESUME : " + str(autoResume)) + + ip, port = server.split(':') + userid = downloadUtils.getUserId() + seekTime = 0 + resume = 0 + + id = urlParts[1] + jsonData = downloadUtils.downloadUrl("http://" + server + "/emby/Users/" + userid + "/Items/" + id + "?format=json", + suppress=False, popup=1) + result = json.loads(jsonData) + + if (autoResume != 0): + if (autoResume == -1): + resume_result = 1 + else: + resume_result = 0 + seekTime = (autoResume / 1000) / 10000 + else: + userData = result.get("UserData") + resume_result = 0 + + if userData.get("PlaybackPositionTicks") != 0: + reasonableTicks = int(userData.get("PlaybackPositionTicks")) / 1000 + seekTime = reasonableTicks / 10000 + displayTime = str(timedelta(seconds=seekTime)) + + resumeDialog = ResumeDialog("ResumeDialog.xml", __cwd__, "default", "720p") + resumeDialog.setResumeTime("Resume from " + displayTime) + resumeDialog.doModal() + resume_result = resumeDialog.getResumeAction() + del resumeDialog + + log.info("Resume Dialog Result: " + str(resume_result)) + + if resume_result == -1: + return + + playurl = PlayUtils().getPlayUrl(id, result) + log.info("Play URL: " + playurl) + thumbPath = downloadUtils.getArtwork(result, "Primary") + listItem = xbmcgui.ListItem(path=playurl, iconImage=thumbPath, thumbnailImage=thumbPath) + + setListItemProps(server, id, listItem, result) + + # Can not play virtual items + if (result.get("LocationType") == "Virtual"): + xbmcgui.Dialog().ok(__language__(30128), __language__(30129)) + return + + # set the current playing item id + WINDOW = xbmcgui.Window(10000) + WINDOW.setProperty("item_id", id) + + playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) + playlist.clear() + playlist.add(playurl, listItem) + xbmc.Player().play(playlist) + + #xbmc.Player().play(playurl, listItem) + + #xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, listItem) + + # Set a loop to wait for positive confirmation of playback + count = 0 + while not xbmc.Player().isPlaying(): + log.info("Not playing yet...sleep for 1 sec") + count = count + 1 + if count >= 10: + return + else: + time.sleep(1) + + if resume_result == 0: + jumpBackSec = int(__settings__.getSetting("resumeJumpBack")) + seekToTime = seekTime - jumpBackSec + while xbmc.Player().getTime() < (seekToTime - 5): + xbmc.Player().pause + xbmc.sleep(100) + xbmc.Player().seekTime(seekToTime) + xbmc.sleep(100) + xbmc.Player().play() + diff --git a/service.py b/service.py index bcec5f3..136b67a 100644 --- a/service.py +++ b/service.py @@ -68,11 +68,13 @@ class Service(xbmc.Player): stopAll(self.played_information) current_playing_file = xbmc.Player().getPlayingFile() - log.info("onPlayBackStarted" + current_playing_file) + log.info("onPlayBackStarted: " + current_playing_file) window_handle = xbmcgui.Window(10000) - emby_item_id = window_handle.getProperty("playback_url_" + current_playing_file) + emby_item_id = window_handle.getProperty("item_id") + #emby_item_id = window_handle.getProperty("playback_url_" + current_playing_file) log.info("item_id: " + emby_item_id) + window_handle.setProperty("item_id", "") if emby_item_id is None or len(emby_item_id) == 0: return