summaryrefslogtreecommitdiff
path: root/plugin.video.embycon/resources/lib/play_utils.py
diff options
context:
space:
mode:
authorShaun <shaun@bluebit.com.au>2017-07-16 00:09:51 +1000
committerenen92 <enen92@users.noreply.github.com>2017-07-15 15:09:51 +0100
commit49d6dd033fc083c4ee6f69947861c0d923144041 (patch)
tree541668912f24621431778016b2ad3ccb4ad08698 /plugin.video.embycon/resources/lib/play_utils.py
parent09c5e3fe8977c5ffaf6599b3c6a35405a8a141ca (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.py173
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