Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, platform, requests, shutil, traceback
- import xbmc, xbmcgui, xbmcaddon
- import wvconfig as config
- def check_inputstream(reinstall=False):
- system_ = platform.system()
- arch = platform.machine()
- __addon__ = xbmcaddon.Addon('script.module.wvhelper')
- __data_dir__ = xbmc.translatePath(__addon__.getAddonInfo('profile'))
- data_file = os.path.join(__data_dir__, 'installed.txt')
- if not reinstall:
- try:
- addon = xbmcaddon.Addon('inputstream.adaptive')
- cdm_path = xbmc.translatePath(addon.getSetting('DECRYPTERPATH'))
- with open(data_file) as f:
- installed = f.read()
- if (addon.getAddonInfo('version') == installed and
- os.path.exists(os.path.join(cdm_path, config.WIDEVINECDM_DICT[system_])) and
- os.path.exists(os.path.join(cdm_path, config.SSD_WV_DICT[system_]))):
- return True
- except:
- pass
- if system_ == 'Windows':
- arch = platform.architecture()[0]
- if arch[:3] == 'arm':
- arch = arch[:5]
- if arch == 'i686':
- arch = 'i386'
- try:
- kodi_major_version = int(xbmc.getInfoLabel("System.BuildVersion").split('.')[0])
- except Exception:
- kodi_major_version = 0
- if system_ == 'Linux' and xbmc.getCondVisibility('system.platform.android'):
- system_ = 'Android'
- supported = kodi_major_version >= 18
- elif system_+arch in config.SUPPORTED_PLATFORMS:
- supported = kodi_major_version >= 17
- else:
- supported = False
- if not supported:
- xbmc.log('DRM Not Supported: {0} KODI v{1}'.format(system_+arch, kodi_major_version), xbmc.LOGNOTICE)
- msg = 'This system (%s KODI v%s) is not currently supported for DRM content playback.' % (system_+arch, kodi_major_version)
- if kodi_major_version < 17:
- msg += '\nDRM playback requires at least KODI 17.'
- if system_ == 'Android':
- msg += '\nDRM support for Android is coming in KODI 18.'
- xbmcgui.Dialog().ok('Not Supported', msg)
- return False
- def get_addon():
- try:
- xbmc.executeJSONRPC('{"jsonrpc":"2.0","id":1,"method":"Addons.SetAddonEnabled","params":{"addonid":"inputstream.adaptive","enabled":false}}')
- xbmc.executeJSONRPC('{"jsonrpc":"2.0","id":1,"method":"Addons.SetAddonEnabled","params":{"addonid":"inputstream.adaptive","enabled":true}}')
- return xbmcaddon.Addon('inputstream.adaptive')
- except:
- return False
- addon = get_addon()
- if not addon:
- xbmc.executebuiltin('InstallAddon(inputstream.adaptive)', True)
- addon = get_addon()
- if not addon:
- xbmcgui.Dialog().ok('Missing inputstream.adaptive add-on',
- 'inputstream.adaptive VideoPlayer InputStream add-on \
- not found or not enabled. This add-on is required to \
- view DRM protected content.')
- return False
- cdm_path = xbmc.translatePath(addon.getSetting('DECRYPTERPATH'))
- if not os.path.isdir(cdm_path):
- os.makedirs(cdm_path)
- if system_ != 'Android':
- try:
- get_widevinecdm(cdm_path, system_, arch, addon)
- get_ssd_wv(cdm_path, system_, arch, addon)
- except:
- traceback.print_exc()
- xbmcgui.Dialog().ok('ERROR', 'There was an error installing DRM. Please restart KODI and try again.')
- return False
- if not os.path.exists(__data_dir__):
- os.mkdir(__data_dir__)
- with open(data_file, 'w') as f:
- f.write(addon.getAddonInfo('version'))
- xbmcgui.Dialog().ok('DRM installed OK.', 'If videos still won\'t play - please try restarting KODI.')
- return True
- def remove_path(path):
- if os.path.islink(path):
- os.unlink(path)
- elif os.path.exists(path):
- os.remove(path)
- def get_widevinecdm(cdm_path, system_, arch, addon):
- filename = config.WIDEVINECDM_DICT[system_]
- download_path = os.path.join(cdm_path, filename)
- remove_path(download_path)
- version = addon.getAddonInfo('version')[0] + '.0'
- url = config.GIT_URL.format(version, system_, arch, filename)
- if not progress_download(url, download_path, filename):
- raise Exception("Failed to download file")
- os.chmod(download_path, 0755)
- def get_ssd_wv(cdm_path, system_, arch, addon):
- filename = config.SSD_WV_DICT[system_]
- download_path = os.path.join(cdm_path, filename)
- remove_path(download_path)
- addon_path = xbmc.translatePath(addon.getAddonInfo('path')).decode("utf-8")
- paths = [os.path.join(addon_path, filename), os.path.join(addon_path, 'lib', filename), os.path.join(os.sep, 'usr', 'lib', filename)]
- for path in paths:
- if os.path.exists(path):
- try:
- shutil.copy(path, download_path)
- os.chmod(download_path, 0755)
- return
- except:
- continue
- version = addon.getAddonInfo('version')[0] + '.0'
- url = config.GIT_URL.format(version, system_, arch, filename)
- if not progress_download(url, download_path, filename):
- raise Exception("Failed to download file")
- os.chmod(download_path, 0755)
- def progress_download(url, download_path, filename):
- xbmc.log('Downloading {0}'.format(url),xbmc.LOGNOTICE)
- try:
- res = requests.get(url, stream=True, verify=False)
- res.raise_for_status()
- except requests.exceptions.HTTPError:
- xbmcgui.Dialog().ok('Download failed', 'HTTP '+str(res.status_code)+' error')
- xbmc.log('Error retrieving {0}'.format(url), level=xbmc.LOGNOTICE)
- return False
- total_length = float(res.headers.get('content-length'))
- dp = xbmcgui.DialogProgress()
- dp.create("Installing DRM", "Downloading", url)
- with open(download_path, 'wb') as f:
- chunk_size = 1024
- downloaded = 0
- for chunk in res.iter_content(chunk_size=chunk_size):
- f.write(chunk)
- downloaded += len(chunk)
- percent = int(downloaded*100/total_length)
- if dp.iscanceled():
- dp.close()
- res.close()
- dp.update(percent)
- xbmc.log('Download {0} bytes complete, saved in {1}'.format(
- int(total_length), download_path),xbmc.LOGNOTICE)
- dp.close()
- return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement