diff options
author | Shaun <shaun@bluebit.com.au> | 2017-07-16 00:09:51 +1000 |
---|---|---|
committer | enen92 <enen92@users.noreply.github.com> | 2017-07-15 15:09:51 +0100 |
commit | 49d6dd033fc083c4ee6f69947861c0d923144041 (patch) | |
tree | 541668912f24621431778016b2ad3ccb4ad08698 /plugin.video.embycon/resources/lib/play_utils.py | |
parent | 09c5e3fe8977c5ffaf6599b3c6a35405a8a141ca (diff) |
[plugin.video.embycon] 1.3.17 (#1309)
[plugin.video.embycon] 1.3.17
Diffstat (limited to 'plugin.video.embycon/resources/lib/play_utils.py')
-rw-r--r-- | plugin.video.embycon/resources/lib/play_utils.py | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/plugin.video.embycon/resources/lib/play_utils.py b/plugin.video.embycon/resources/lib/play_utils.py new file mode 100644 index 0000000..f7cba7c --- /dev/null +++ b/plugin.video.embycon/resources/lib/play_utils.py @@ -0,0 +1,173 @@ +# Gnu General Public License - see LICENSE.TXT + +import xbmc +import xbmcgui +import xbmcaddon + +from datetime import timedelta +import time +import json + +from simple_logging import SimpleLogging +from downloadutils import DownloadUtils +from resume_dialog import ResumeDialog +from utils import PlayUtils, getArt +from kodi_utils import HomeWindow +from translation import i18n +from json_rpc import json_rpc + +log = SimpleLogging(__name__) +downloadUtils = DownloadUtils() + + +def playFile(play_info): + + id = play_info.get("item_id") + auto_resume = play_info.get("auto_resume") + force_transcode = play_info.get("force_transcode") + + log.debug("playFile id(%s) resume(%s) force_transcode(%s)" % (id, auto_resume, force_transcode)) + + settings = xbmcaddon.Addon('plugin.video.embycon') + addon_path = settings.getAddonInfo('path') + playback_type = settings.getSetting("playback_type") + jump_back_amount = int(settings.getSetting("jump_back_amount")) + + server = downloadUtils.getServer() + + jsonData = downloadUtils.downloadUrl("{server}/emby/Users/{userid}/Items/" + id + "?format=json", + suppress=False, popup=1) + result = json.loads(jsonData) + + seekTime = 0 + auto_resume = int(auto_resume) + + if auto_resume != -1: + seekTime = (auto_resume / 1000) / 10000 + else: + userData = result.get("UserData") + if userData.get("PlaybackPositionTicks") != 0: + + reasonableTicks = int(userData.get("PlaybackPositionTicks")) / 1000 + seekTime = reasonableTicks / 10000 + displayTime = str(timedelta(seconds=seekTime)) + + resumeDialog = ResumeDialog("ResumeDialog.xml", addon_path, "default", "720p") + resumeDialog.setResumeTime("Resume from " + displayTime) + resumeDialog.doModal() + resume_result = resumeDialog.getResumeAction() + del resumeDialog + log.debug("Resume Dialog Result: " + str(resume_result)) + + # check system settings for play action + # if prompt is set ask to set it to auto resume + params = {"setting": "myvideos.selectaction"} + setting_result = json_rpc('Settings.getSettingValue').execute(params) + log.debug("Current Setting (myvideos.selectaction): %s" % setting_result) + current_value = setting_result.get("result", None) + if current_value is not None: + current_value = current_value.get("value", -1) + if current_value not in (2,3): + return_value = xbmcgui.Dialog().yesno(i18n('extra_prompt'), i18n('turn_on_auto_resume?')) + if return_value: + params = {"setting": "myvideos.selectaction", "value": 2} + json_rpc_result = json_rpc('Settings.setSettingValue').execute(params) + log.debug("Save Setting (myvideos.selectaction): %s" % json_rpc_result) + + if resume_result == 1: + seekTime = 0 + elif resume_result == -1: + return + + listitem_props = [] + playurl = None + + # check if strm file, path will contain contain strm contents + if result.get('MediaSources'): + source = result['MediaSources'][0] + if source.get('Container') == 'strm': + playurl, listitem_props = PlayUtils().getStrmDetails(result) + + if not playurl: + playurl = PlayUtils().getPlayUrl(id, result, force_transcode) + + log.debug("Play URL: " + playurl + " ListItem Properties: " + str(listitem_props)) + + playback_type_string = "DirectPlay" + if playback_type == "2" or force_transcode: + playback_type_string = "Transcode" + elif playback_type == "1": + playback_type_string = "DirectStream" + + home_window = HomeWindow() + home_window.setProperty("PlaybackType_" + id, playback_type_string) + + # add the playback type into the overview + if result.get("Overview", None) is not None: + result["Overview"] = playback_type_string + "\n" + result.get("Overview") + else: + result["Overview"] = playback_type_string + + list_item = xbmcgui.ListItem(label=result.get("Name", i18n('missing_title')), path=playurl) + + list_item = setListItemProps(id, list_item, result, server, listitem_props) + + playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) + playlist.clear() + playlist.add(playurl, list_item) + xbmc.Player().play(playlist) + + if seekTime == 0: + return + + count = 0 + while not xbmc.Player().isPlaying(): + log.debug("Not playing yet...sleep for 1 sec") + count = count + 1 + if count >= 10: + return + else: + xbmc.Monitor().waitForAbort(1) + + seekTime = seekTime - jump_back_amount + + while xbmc.Player().getTime() < (seekTime - 5): + # xbmc.Player().pause() + xbmc.sleep(100) + xbmc.Player().seekTime(seekTime) + xbmc.sleep(100) + # xbmc.Player().play() + +def setListItemProps(id, listItem, result, server, extra_props): + # set up item and item info + thumbID = id + eppNum = -1 + seasonNum = -1 + + art = getArt(result, server=server) + listItem.setIconImage(art['thumb']) # back compat + listItem.setProperty('fanart_image', art['fanart']) # back compat + listItem.setProperty('discart', art['discart']) # not avail to setArt + listItem.setArt(art) + + listItem.setProperty('IsPlayable', 'true') + listItem.setProperty('IsFolder', 'false') + + for prop in extra_props: + listItem.setProperty(prop[0], prop[1]) + + # play info + details = { + 'title': result.get("Name", i18n('missing_title')), + 'plot': result.get("Overview") + } + + if (eppNum > -1): + details["episode"] = str(eppNum) + + if (seasonNum > -1): + details["season"] = str(seasonNum) + + listItem.setInfo("Video", infoLabels=details) + + return listItem |