def start(): http = HTTP() monitor = xbmc.Monitor() restart_queued = False boot_merge = settings.getBool('boot_merge', False) set_kodi_string('_iptv_merge_force_run') while not monitor.waitForAbort(1): http.start() if settings.getBool('http_api', False) else http.stop() forced = get_kodi_string('_iptv_merge_force_run') or 0 if forced or boot_merge or (settings.getBool('auto_merge', True) and time.time() - userdata.get('last_run', 0) > settings.getInt('reload_time_hours', 12) * 3600): set_kodi_string('_iptv_merge_force_run', '1') url = router.url_for('run_merge', forced=int(forced)) dirs, files = xbmcvfs.listdir(url) result, msg = int(files[0][0]), unquote_plus(files[0][1:]) if result: restart_queued = True userdata.set('last_run', int(time.time())) set_kodi_string('_iptv_merge_force_run') if restart_queued and settings.getBool('restart_pvr', False): if forced: progress = gui.progressbg(heading='Reloading IPTV Simple Client') if KODI_VERSION > 18: restart_queued = False try: xbmcaddon.Addon(IPTV_SIMPLE_ID).setSetting('m3uPathType', '0') except Exception as e: pass elif forced or (not xbmc.getCondVisibility('Pvr.IsPlayingTv') and not xbmc.getCondVisibility('Pvr.IsPlayingRadio')): restart_queued = False kodi_rpc('Addons.SetAddonEnabled', {'addonid': IPTV_SIMPLE_ID, 'enabled': False}) wait_delay = 4 for i in range(wait_delay): if monitor.waitForAbort(1): break if forced: progress.update((i+1)*int(100/wait_delay)) kodi_rpc('Addons.SetAddonEnabled', {'addonid': IPTV_SIMPLE_ID, 'enabled': True}) if forced: progress.update(100) progress.close() boot_merge = False http.stop()
def get_addon_sources(cls): data = kodi_rpc('Addons.GetAddons', { 'installed': True, 'enabled': True, 'type': 'xbmc.python.pluginsource' }, raise_on_error=True) installed = [ x.path for x in cls.select(cls.path).where( cls.source_type == cls.TYPE_ADDON) ] addons = [] for row in data['addons']: if row['addonid'] in installed: continue addon, data = merge_info(row['addonid']) if not addon or not data: continue if cls == Playlist and METHOD_PLAYLIST not in data: continue elif cls == EPG and METHOD_EPG not in data: continue addons.append([addon, data]) return addons
def get_addon_sources(cls, current=None): data = kodi_rpc('Addons.GetAddons', { 'installed': True, 'enabled': True }, raise_on_error=True) integrations = get_integrations() installed = [ x.path for x in cls.select(cls.path).where( cls.source_type == cls.TYPE_ADDON) ] addons = [] for row in data['addons']: if row['addonid'] != current and row['addonid'] in installed: continue addon, data = merge_info(row['addonid'], integrations) if not addon or not data: continue if cls == Playlist and METHOD_PLAYLIST not in data: continue elif cls == EPG and METHOD_EPG not in data: continue addons.append([addon, data]) return addons
def _check_updates(): _time = int(time()) if _time < settings.getInt('_last_updates_check', 0) + UPDATES_CHECK_TIME: return settings.setInt('_last_updates_check', _time) new_md5 = session.get(ADDONS_MD5).text.split(' ')[0] if new_md5 == settings.get('addon_md5'): return settings.set('_addon_md5', new_md5) updates = [] slyguy_addons = session.gz_json(ADDONS_URL) slyguy_installed = [x['addonid'] for x in kodi_rpc('Addons.GetAddons', {'installed': True, 'enabled': True})['addons'] if x['addonid'] in slyguy_addons] for addon_id in slyguy_installed: addon = get_addon(addon_id, install=False) if not addon: continue cur_version = addon.getAddonInfo('version') new_version = slyguy_addons[addon_id]['version'] if LooseVersion(cur_version) < LooseVersion(new_version): updates.append([addon_id, cur_version, new_version]) if not updates: return log.debug('Updating repos due to {} addon updates'.format(len(updates))) xbmc.executebuiltin('UpdateAddonRepos')
def _setup(): addon = get_addon(IPTV_SIMPLE_ID, required=True, install=True) with gui.progress(_.SETTING_UP_IPTV) as progress: kodi_rpc('Addons.SetAddonEnabled', {'addonid': IPTV_SIMPLE_ID, 'enabled': False}) output_dir = settings.get('output_dir', '').strip() or ADDON_PROFILE playlist_path = os.path.join(output_dir, PLAYLIST_FILE_NAME) epg_path = os.path.join(output_dir, EPG_FILE_NAME) ## IMPORT ANY CURRENT URL SOURCES ## cur_epg_url = addon.getSetting('epgUrl') cur_epg_type = addon.getSetting('epgPathType') if cur_epg_url: epg = EPG(source_type=EPG.TYPE_URL, path=cur_epg_url, enabled=cur_epg_type == '1') try: epg.save() except: pass cur_m3u_url = addon.getSetting('m3uUrl') cur_m3u_type = addon.getSetting('m3uPathType') start_chno = int(addon.getSetting('startNum') or 1) #user_agent = addon.getSetting('userAgent') if cur_m3u_url: playlist = Playlist(source_type=Playlist.TYPE_URL, path=cur_m3u_url, enabled=cur_m3u_type == '1') if start_chno != 1: playlist.use_start_chno = True playlist.start_chno = start_chno try: playlist.save() except: pass ################################ addon.setSetting('epgPath', epg_path) addon.setSetting('m3uPath', playlist_path) addon.setSetting('epgUrl', '') addon.setSetting('m3uUrl', '') addon.setSetting('m3uPathType', '0') addon.setSetting('epgPathType', '0') monitor = xbmc.Monitor() progress.update(30) monitor.waitForAbort(2) kodi_rpc('Addons.SetAddonEnabled', {'addonid': IPTV_SIMPLE_ID, 'enabled': True}) progress.update(60) monitor.waitForAbort(2) progress.update(100) set_kodi_setting('epg.futuredaystodisplay', 7) # set_kodi_setting('epg.ignoredbforclient', True) set_kodi_setting('pvrmanager.syncchannelgroups', True) set_kodi_setting('pvrmanager.preselectplayingchannel', True) set_kodi_setting('pvrmanager.backendchannelorder', True) set_kodi_setting('pvrmanager.usebackendchannelnumbers', True) set_kodi_string('_iptv_merge_force_run', '1') gui.ok(_.SETUP_IPTV_COMPLETE) return True
def _setup(): addon = get_addon(IPTV_SIMPLE_ID, required=True, install=True) with gui.progress(_.SETTING_UP_IPTV) as progress: kodi_rpc('Addons.SetAddonEnabled', {'addonid': IPTV_SIMPLE_ID, 'enabled': False}) output_dir = xbmc.translatePath(settings.get('output_dir', '').strip() or ADDON_PROFILE) playlist_path = os.path.join(output_dir, PLAYLIST_FILE_NAME) epg_path = os.path.join(output_dir, EPG_FILE_NAME) if not os.path.exists(playlist_path): with open(playlist_path, 'w') as f: f.write('''#EXTM3U #EXTINF:-1 tvg-id="iptv_merge" tvg-chno="1000" tvg-logo="{}",{} {}'''.format(ADDON_ICON, 'IPTV Merge: Click me to run a merge!', plugin.url_for(merge))) if not os.path.exists(epg_path): with open(epg_path, 'w') as f: f.write('''<?xml version="1.0" encoding="utf-8" ?><tv><channel id="iptv_merge"></channel></tv>''') ## IMPORT ANY CURRENT SOURCES ## cur_epg_url = addon.getSetting('epgUrl') cur_epg_path = addon.getSetting('epgPath') cur_epg_type = addon.getSetting('epgPathType') if cur_epg_path != epg_path and os.path.exists(xbmc.translatePath(cur_epg_path)): epg = EPG(source_type=EPG.TYPE_FILE, path=cur_epg_path, enabled=cur_epg_type == '0') epg.auto_archive_type() try: epg.save() except: pass if cur_epg_url: epg = EPG(source_type=EPG.TYPE_URL, path=cur_epg_url, enabled=cur_epg_type == '1') epg.auto_archive_type() try: epg.save() except: pass cur_m3u_url = addon.getSetting('m3uUrl') cur_m3u_path = addon.getSetting('m3uPath') cur_m3u_type = addon.getSetting('m3uPathType') start_chno = int(addon.getSetting('startNum') or 1) #user_agent = addon.getSetting('userAgent') if cur_m3u_path != playlist_path and os.path.exists(xbmc.translatePath(cur_m3u_path)): playlist = Playlist(source_type=Playlist.TYPE_FILE, path=cur_m3u_path, enabled=cur_m3u_type == '0') playlist.auto_archive_type() if start_chno != 1: playlist.use_start_chno = True playlist.start_chno = start_chno try: playlist.save() except: pass if cur_m3u_url: playlist = Playlist(source_type=Playlist.TYPE_URL, path=cur_m3u_url, enabled=cur_m3u_type == '1') playlist.auto_archive_type() if start_chno != 1: playlist.use_start_chno = True playlist.start_chno = start_chno try: playlist.save() except: pass ##### addon.setSetting('epgPath', epg_path) addon.setSetting('m3uPath', playlist_path) addon.setSetting('epgUrl', '') addon.setSetting('m3uUrl', '') addon.setSetting('m3uPathType', '0') addon.setSetting('epgPathType', '0') monitor = xbmc.Monitor() progress.update(30) monitor.waitForAbort(2) kodi_rpc('Addons.SetAddonEnabled', {'addonid': IPTV_SIMPLE_ID, 'enabled': True}) progress.update(60) monitor.waitForAbort(2) progress.update(100) set_kodi_setting('epg.futuredaystodisplay', 7) # set_kodi_setting('epg.ignoredbforclient', True) set_kodi_setting('pvrmanager.syncchannelgroups', True) set_kodi_setting('pvrmanager.preselectplayingchannel', True) set_kodi_setting('pvrmanager.backendchannelorder', True) set_kodi_setting('pvrmanager.usebackendchannelnumbers', True) gui.ok(_.SETUP_IPTV_COMPLETE) return True