def auth_trakt(Trakt_API, translations): i18n = translations.i18n start = time.time() use_https = kodi.get_setting('use_https') == 'true' trakt_timeout = int(kodi.get_setting('trakt_timeout')) trakt_api = Trakt_API(use_https=use_https, timeout=trakt_timeout) result = trakt_api.get_code() code, expires, interval = result['device_code'], result[ 'expires_in'], result['interval'] time_left = expires - int(time.time() - start) line1 = i18n('verification_url') % (result['verification_url']) line2 = i18n('prompt_code') % (result['user_code']) with kodi.CountdownDialog(i18n('trakt_acct_auth'), line1=line1, line2=line2, countdown=time_left, interval=interval) as cd: result = cd.start(__auth_trakt, [trakt_api, code, i18n]) try: kodi.set_setting('trakt_oauth_token', result['access_token']) kodi.set_setting('trakt_refresh_token', result['refresh_token']) trakt_api = Trakt_API(result['access_token'], use_https=use_https, timeout=trakt_timeout) profile = trakt_api.get_user_profile(cached=False) kodi.set_setting('trakt_user', '%s (%s)' % (profile['username'], profile['name'])) kodi.notify(msg=i18n('trakt_auth_complete'), duration=3000) except Exception as e: logger.log('Trakt Authorization Failed: %s' % (e), xbmc.LOGDEBUG)
def clearHistory(): if os.path.isfile(historydb): choice = xbmcgui.Dialog().yesno(kodi.get_name(), kodi.giveColor('Would you like to clear all history?', 'white')) if choice: try: os.remove(historydb) except: kodi.notify(msg='Error removing history.') xbmc.executebuiltin("Container.Refresh")
def find(url, name=None, iconimage=None, pattern=None): kodi.busy() try: url, site = url.split('|SPLIT|') except: site = 'Unknown' log_utils.log('Error getting site information from :: %s' % (url), xbmc.LOGERROR) try: if 'streamingporn.xyz' in url: c = client.request(url) r = dom_parser2.parse_dom(c, 'a', req=['href', 'class', 'rel', 'target']) r = [i for i in r if i.attrs['class'] == 'external'] r = [client.request(i.attrs['href'], output='geturl') for i in r] r = [i for i in r if hmf.HostedMediaFile(i).valid_url()] url = multi(r) elif 'spreadporn.org' in url: c = client.request(url) r = dom_parser2.parse_dom(c, 'li', req=['data-show', 'data-link']) r = [(i.attrs['data-link']) for i in r] url = multi(r) elif 'pandamovie.eu' in url: c = client.request(url) r = dom_parser2.parse_dom(c, 'a', req='id') r = [(i.attrs['href']) for i in r] url = multi(r) elif 'xtheatre.net' in url: c = client.request(url) pattern = '''<iframe\s*src=['"](?:[^'"]+)['"]\s*data-lazy-src=['"]([^'"]+)''' r = re.findall(pattern, c) url = multi(r) elif 'sexkino.to' in url: c = client.request(url) u = dom_parser2.parse_dom(c, 'iframe', {'class': ['metaframe', 'rptss']}) r = dom_parser2.parse_dom(c, 'tr') r = [dom_parser2.parse_dom(i, 'a', req='href') for i in r] r = [client.request(i[0].attrs['href']) for i in r if i] r = [i.attrs['src'] for i in u] + [ re.findall("window.location.href='([^']+)", i)[0] for i in r ] url = multi(r) except: kodi.idle() kodi.notify(msg='Error getting link for (Link Finer) %s' % name) kodi.idle() quit() url += '|SPLIT|%s' % site kodi.idle() player.resolve_url(url, name, iconimage)
def Favorites(fav, favmode, name, url, img, _folder): if fav == "add": delFav(url) addFav(favmode, name, url, img, _folder) kodi.notify('Favorite added', 'Item added to the favorites') elif fav == "del": delFav(url) log_utils.log('Deleting %s from favorites' % (url), xbmc.LOGNOTICE) kodi.notify('Favorite deleted', 'Item removed from the list') xbmc.executebuiltin('Container.Refresh')
def multilinkselector(url): try: if len(url) == 1: url = url[0][1] else: sources = [] for i in url: smu_file = False try: if i[2]: smu_file = True except: pass if (not smu_file): c = client.request(i[1], output='headers') sources += [(i[0], kodi.convertSize(int(c['Content-Length'])), i[1])] else: try: pattern = r'''(?:)(?:http|https)(?:\:\/\/|\:\/\/www.)([^\.]+)''' domain = re.match(pattern, i[1]) domain = domain.group(1).title() except: domain = 'Resolve URL Link' sources += [(i[0], domain, i[1])] quals = [] srcs = [] for i in sources: qual = '%s - [ %s ]' % (i[0], i[1]) quals.append(kodi.giveColor(qual, 'white', True)) srcs.append(i[2]) selected = kodi.dialog.select('Select a quality.', quals) if selected < 0: kodi.notify(msg='No option selected.') return 'quit' else: url = srcs[selected] kodi.busy() try: if hmf.HostedMediaFile(url).valid_url(): url = hmf.HostedMediaFile(url).resolve() except: pass kodi.idle() return url except: try: if hmf.HostedMediaFile(url[0][1]).valid_url(): url = hmf.HostedMediaFile(url[0][1]).resolve() return url except: pass
def getDest(): if (not os.path.exists(download_folder)): try: os.makedirs(download_folder) except: kodi.notify('Error creating download folder.') quit() if (not download_folder): kodi.notify('Error getting destination location.') quit() return download_folder
def clearFavorites(): if os.path.isfile(favoritesdb): choice = xbmcgui.Dialog().yesno( kodi.get_name(), kodi.giveColor('Would you like to clear all of your favorites?', 'white')) if choice: try: os.remove(favoritesdb) except: kodi.notify(msg='Error clearing favorites.') xbmc.executebuiltin("Container.Refresh")
def disableSearch(): if kodi.get_setting('search_setting') == 'true': try: os.remove(searchfile) except: pass kodi.set_setting('search_setting', 'false') else: kodi.set_setting('search_setting', 'true') kodi.notify(msg='Search history disabled.') quit()
def __auth_trakt(trakt_api, code, i18n): try: result = trakt_api.get_device_token(code) return result except URLError as e: # authorization is pending; too fast if e.code in [400, 429]: return elif e.code == 418: kodi.notify(msg=i18n('user_reject_auth'), duration=3000) return True elif e.code == 410: return else: raise
def choose_list(Trakt_API, translations, username=None): i18n = translations.i18n trakt_api = Trakt_API(kodi.get_setting('trakt_oauth_token'), kodi.get_setting('use_https') == 'true', timeout=int(kodi.get_setting('trakt_timeout'))) lists = trakt_api.get_lists(username) if username is None: lists.insert(0, {'name': 'watchlist', 'ids': {'slug': WATCHLIST_SLUG}}) if lists: dialog = xbmcgui.Dialog() index = dialog.select(i18n('pick_a_list'), [list_data['name'] for list_data in lists]) if index > -1: return lists[index]['ids']['slug'], lists[index]['name'] else: kodi.notify(msg=i18n('no_lists_for_user') % (username), duration=5000)
def download(url, name, icon, dest, dp=None): xbmc.executebuiltin("Dialog.Close(busydialog)") if '|' in url: url = url.split('|')[0] if not dp: dp = kodi.dp dp.create(kodi.get_name(), "Downloading: %s" % name, ' ', ' ') dp.update(0) start_time = time.time() log_utils.log('Attempting to download :: %s' % url, xbmc.LOGNOTICE) urlretrieve(url, dest, lambda nb, bs, fs: _pbhook(dest, nb, bs, fs, dp, start_time)) addDownload(name, url, icon) kodi.notify(msg='Download Complete', sound=True) log_utils.log('Download complete.', xbmc.LOGNOTICE) finish_up(dest)
def removeDownload(url, name): try: os.remove(url) try: name = name.replace('.mp4', '') name = kodi.stripColor(name) conn = sqlite3.connect(downloaddb) c = conn.cursor() c.execute("DELETE FROM downloads WHERE name = '%s'" % name) conn.commit() conn.close() except: pass kodi.notify(msg='Removed successfully.') except: kodi.notify(msg='Error removing file.') xbmc.executebuiltin("Container.Refresh")
def delTerm(url): refresh = False try: if 'search_term=' in url: url = url.split('search_term=')[1] refresh = True if '|' in url: url = url.split('|')[0] refresh = True conn = sqlite3.connect(searchdb) c = conn.cursor() c.execute("DELETE FROM terms WHERE term = '%s'" % url) conn.commit() conn.close() except: pass if refresh: xbmc.executebuiltin("Container.Refresh") kodi.notify('%s removed from list.' % url.title(), duration=5000, sound=True)
def _pbhook(dest, numblocks, blocksize, filesize, dp, start_time): try: if filesize <= 0: kodi.notify(msg='Invalid downloadable file', sound=True) log_utils.log('Error downloading video.', xbmc.LOGERROR) quit() percent = min(numblocks * blocksize * 100 / filesize, 100) currently_downloaded = float(numblocks) * blocksize / (1024 * 1024) kbps_speed = numblocks * blocksize / (time.time() - start_time) if kbps_speed > 0: eta = (filesize - numblocks * blocksize) / kbps_speed else: eta = 0 kbps_speed = kbps_speed / 1024 mbps_speed = kbps_speed / 1024 total = float(filesize) / (1024 * 1024) mbs = '[COLOR dodgerblue]%.02f MB[/COLOR] of [B]%.02f MB[/B]' % ( currently_downloaded, total) e = '[COLOR white][B]Speed: [/B][/COLOR][COLOR dodgerblue]%.02f Mb/s ' % mbps_speed + '[/COLOR]' e += '[COLOR white][B]ETA: [/B][/COLOR][COLOR dodgerblue]%02d:%02d' % divmod( eta, 60) + '[/COLOR]' dp.update(percent, '', mbs, e) except: dp.close() kodi.notify(msg='Error Downloading. Exiting...') quit() if dp.iscanceled(): dp.close() kodi.notify(msg='Download Cancelled') quit()
def multi(r): r = [(re.findall('(?://)(?:www.)?([^.]+).', i)[0].title(), i) for i in r if hmf.HostedMediaFile(i).valid_url()] names = [] srcs = [] if len(r) > 1: for i in sorted(r, reverse=True): names.append(kodi.giveColor(i[0], 'white', True)) srcs.append(i[1]) selected = kodi.dialog.select('Select a link.', names) if selected < 0: kodi.notify(msg='No option selected.') kodi.idle() quit() else: url = srcs[selected] return url else: return r[0][1]
def menu(): try: url = urljoin(base_domain, 'categories?o=al') c = client.request(url) r = dom_parser2.parse_dom(c, 'li', {'class': 'cat_pic'}) r = [(dom_parser2.parse_dom(i, 'a', req=['href', 'alt']), \ dom_parser2.parse_dom(i, 'var'), \ dom_parser2.parse_dom(i, 'img', req='src')) \ for i in r if i] r = [(urljoin(base_domain, i[0][0].attrs['href']), i[0][0].attrs['alt'], i[1][0].content, i[2][0].attrs['src']) for i in r if i] if (not r): log_utils.log( 'Scraping Error in %s:: Content of request: %s' % (base_name.title(), str(c)), xbmc.LOGERROR) kodi.notify(msg='Scraping Error: Info Added To Log File', duration=6000, sound=True) quit() except Exception as e: log_utils.log( 'Fatal Error in %s:: Error: %s' % (base_name.title(), str(e)), xbmc.LOGERROR) kodi.notify(msg='Fatal Error', duration=4000, sound=True) quit() dirlst = [] for i in r: try: name = kodi.sortX(i[1].encode('utf-8')) name = name.title() + ' - [ %s ]' % i[2].split(' ')[0] fanarts = xbmc.translatePath( os.path.join('special://home/addons/script.adultflix.artwork', 'resources/art/%s/fanart.jpg' % filename)) dirlst.append({ 'name': name, 'url': i[0], 'mode': content_mode, 'icon': i[3], 'fanart': fanarts, 'folder': True }) except Exception as e: log_utils.log( 'Error adding menu item %s in %s:: Error: %s' % (i[1].title(), base_name.title(), str(e)), xbmc.LOGERROR) if dirlst: buildDirectory(dirlst) else: kodi.notify(msg='No Menu Items Found') quit()
def depVersions(): try: xbmc_version = xbmc.getInfoLabel("System.BuildVersion").split(' ')[0] except: xbmc_version = 'Unknown' try: xbmc_builddate = xbmc.getInfoLabel('System.BuildDate') except: xbmc_builddate = 'Unknown' try: xbmc_language = xbmc.getInfoLabel('System.Language') except: xbmc_language = 'Unknown' try: python_version = sys.version.split(' ')[0] except: python_version = 'Unknown' try: xml1 = client.request( 'https://raw.githubusercontent.com/tvaddonsco/tva-adult-repo/master/addons.xml' ) xml2 = client.request( 'https://raw.githubusercontent.com/tvaddonsco/tva-adult-repo/master/addons.xml' ) lst = [('plugin.video.adultflix'), ('script.adultflix.scrapers'), ('script.adultflix.artwork'), ('script.module.librarypack'), ('script.module.resolveurl'), ('script.module.resolveurl.xxx')] c = [] c += [(kodi.giveColor('Kodi Version: ', 'white', True) + kodi.giveColor(xbmc_version, 'pink'), kodi.addonicon, kodi.addonfanart, xbmc_version)] c += [(kodi.giveColor('Python Version: ', 'white', True) + kodi.giveColor(python_version, 'pink'), kodi.addonicon, kodi.addonfanart, python_version)] c += [(kodi.giveColor('Kodi Build Date: ', 'white', True) + kodi.giveColor(xbmc_builddate, 'pink'), kodi.addonicon, kodi.addonfanart, xbmc_builddate)] c += [(kodi.giveColor('Kodi Language: ', 'white', True) + kodi.giveColor(xbmc_language, 'pink'), kodi.addonicon, kodi.addonfanart, xbmc_language)] for i in lst: addon_name = xbmcaddon.Addon('%s' % i).getAddonInfo('name') addon_id = xbmcaddon.Addon('%s' % i).getAddonInfo('id') addon_version = xbmcaddon.Addon('%s' % i).getAddonInfo('version') addon_description = xbmcaddon.Addon('%s' % i).getAddonInfo('description') pattern = r'''id=['"]%s['"][\w\s='"-]+version=['"]([^'"]+)['"]''' % addon_id try: cur_ver = re.findall(pattern, xml1)[0] except: try: cur_ver = re.findall(pattern, xml2)[0] except: cur_ver = 'Unknown' in_v = int(addon_version.replace('.', '')) try: cur_v = int(cur_ver.replace('.', '')) if in_v < cur_v: ver_color = 'orangered' else: ver_color = 'lime' except: ver_color = 'lime' icon = xbmc.translatePath( os.path.join('special://home/addons', addon_id + '/icon.png')) c += [(kodi.giveColor(addon_name, 'white', True) + kodi.giveColor('| Installed: ', 'white') + kodi.giveColor(addon_version, ver_color, True) + ' - ' + kodi.giveColor('Available: ', 'white', True) + kodi.giveColor(cur_ver, 'pink', True), icon, kodi.addonfanart, addon_description)] dirlst = [] for e in c: dirlst.append({ 'name': kodi.giveColor(e[0], 'white'), 'url': 'None', 'mode': 999, 'icon': e[1], 'fanart': e[2], 'description': e[3], 'folder': False }) buildDir(dirlst) except: kodi.notify(msg='Error opening directory.', sound=True) quit()
def mainSearch(url): if '|SPLIT|' in url: url, site = url.split('|SPLIT|') term = url if term == "null": term = kodi.get_keyboard('Search %s' % kodi.get_name()) if term: search_on_off = kodi.get_setting("search_setting") if search_on_off == "true": delTerm(term) addTerm(term) display_term = term term = quote_plus(term) term = term.lower() if site == 'all': sources = __all__ search_sources = [] for i in sources: try: if eval(i + ".search_tag") == 1: search_sources.append(i) except: pass if search_sources: i = 0 source_num = 0 failed_list = '' line1 = kodi.giveColor('Searching: ', 'white') + kodi.giveColor('%s', 'dodgerblue') line2 = kodi.giveColor('Found: %s videos', 'white') line3 = kodi.giveColor('Source: %s of ' + str(len(search_sources)), 'white') kodi.dp.create(kodi.get_name(), '', line2, '') xbmc.executebuiltin('Dialog.Close(busydialog)') for u in sorted(search_sources): if kodi.dp.iscanceled(): break try: i += 1 progress = 100 * int(i) / len(search_sources) kodi.dp.update(progress, line1 % u.title(), line2 % str(source_num), line3 % str(i)) search_url = eval(u + ".search_base") % term try: source_n = eval(u + ".content('%s',True)" % search_url) except: source_n = 0 try: source_n = int(source_n) except: source_n = 0 if not source_n: if failed_list == '': failed_list += str(u).title() else: failed_list += ', %s' % str(u).title() else: source_num += int(source_n) except: pass kodi.dp.close() if failed_list != '': kodi.notify(msg='%s failed to return results.' % failed_list, duration=4000, sound=True) log_utils.log('Scrapers failing to return search results are :: : %s' % failed_list, xbmc.LOGERROR) else: kodi.notify(msg='%s results found.' % str(source_num), duration=4000, sound=True) xbmcplugin.setContent(kodi.syshandle, 'movies') xbmcplugin.endOfDirectory(kodi.syshandle, cacheToDisc=True) local_utils.setView('search') else: search_url = eval(site + ".search_base") % term eval(site + ".content('%s')" % search_url) else: kodi.notify(msg='Blank searches are not allowed.') quit()
def content(url, searched=False): import xbmcgui dialog = xbmcgui.Dialog() try: c = client.request(url) r = re.findall('<ul id="videoCategory"(.*?)</ul>', c, flags=re.DOTALL)[0] b = re.findall( '<div class="img fade fadeUp videoPreviewBg">(.*?)</div>', r, flags=re.DOTALL) if (not r) and (not searched): log_utils.log( 'Scraping Error in %s:: Content of request: %s' % (base_name.title(), str(c)), xbmc.LOGERROR) kodi.notify(msg='Scraping Error: Info Added To Log File', duration=6000, sound=True) except Exception as e: if (not searched): log_utils.log( 'Fatal Error in %s:: Error: %s' % (base_name.title(), str(e)), xbmc.LOGERROR) kodi.notify(msg='Fatal Error', duration=4000, sound=True) quit() else: pass dirlst = [] for i in b: try: name = re.findall('title="(.*?)"', i, flags=re.DOTALL)[0] if searched: description = 'Result provided by %s' % base_name.title() else: description = name content_url = re.findall('<a href="(.*?)"', i, flags=re.DOTALL)[0] if not base_domain in content_url: content_url = base_domain + content_url icon = re.findall('data-thumb_url\s+=\s+"(.*?)"', i, flags=re.DOTALL)[0] fanarts = xbmc.translatePath( os.path.join('special://home/addons/script.adultflix.artwork', 'resources/art/%s/fanart.jpg' % filename)) dirlst.append({ 'name': name, 'url': content_url, 'mode': player_mode, 'icon': icon, 'fanart': fanarts, 'description': description, 'folder': False }) except Exception as e: log_utils.log( 'Error adding menu item %s in %s:: Error: %s' % (i[1].title(), base_name.title(), str(e)), xbmc.LOGERROR) if dirlst: buildDirectory(dirlst, stopend=True, isVideo=True, isDownloadable=True) else: if (not searched): kodi.notify(msg='No Content Found') quit() if searched: return str(len(r)) if not searched: try: search_pattern = '''\<link\s*rel\=['"]next['"]\s*href\=['"]([^'"]+)''' parse = base_domain helper.scraper().get_next_page(content_mode, url, search_pattern, filename) except Exception as e: log_utils.log( 'Error getting next page for %s :: Error: %s' % (base_name.title(), str(e)), xbmc.LOGERROR)
def play(url, name, iconimage=None, ref=None, site=None): try: kodi.busy() if not site: if 'site=' in url: url, site = url.split('site=') else: site = 'Unknown' if not name: name = 'Unknown' if not iconimage: iconimage = kodi.addonicon name = re.sub(r'(\[.+?\])', '', name) name = name.lstrip() if '] - ' in name: name = name.split('] - ')[-1] chatur = False if ref: if 'chaturbate.com' in ref: chatur = True else: ref = '' if 'chaturbate.com' in url: chatur = True ref = url url = adultresolver.resolve(url) if (isinstance(url, list)): try: url = multilinkselector(url) except: pass history_on_off = kodi.get_setting("history_setting") if history_on_off == "true": web_checks = ['http:', 'https:', 'rtmp:'] locak_checks = ['.mp4'] try: if any(f for f in web_checks if f in url): site = site.title() elif any(f for f in locak_checks if f in url): site = 'Local File' else: site = 'Unknown' except: site = site.title() # if chatur: history.delEntry(ref) history.addHistory(name, ref, site.title(), iconimage) # else: # history.delEntry(url) # history.addHistory(name, url, site.title(), iconimage) kodi.idle() if 'chaturbate.com' in ref: if kodi.get_setting("mobile_mode") == 'true': url = url.replace('_fast_aac', '_aac') else: bandwidth = kodi.get_setting("chaturbate_band") if bandwidth == '0': url = url.replace('_fast_aac', '_aac') elif bandwidth == '2': choice = kodi.dialog.select("[COLOR white][B]" + name + "[/B][/COLOR]", ['[COLOR white]Play High Bandwidth Stream[/COLOR]', '[COLOR white]Play Low Bandwidth Stream[/COLOR]']) if choice == 1: url = url.replace('_fast_aac', '_aac') elif choice == 0: pass else: quit() liz = xbmcgui.ListItem(name, iconImage=iconimage, thumbnailImage=iconimage) xbmc.executebuiltin("Dialog.Close(busydialog)") xbmc.Player().play(url, liz, False) if kodi.get_setting("chaturbate_subject") == "true": sleeper = kodi.get_setting("chaturbate_subject_refresh") i = 0 while not xbmc.Player().isPlayingVideo(): time.sleep(1) i += 1 if i == 30: quit() while xbmc.Player().isPlayingVideo(): try: r = client.request(ref) subject = re.compile('default_subject:\s\"([^,]+)",').findall(r)[0] subject = unquote_plus(subject) kodi.notify(msg=subject, duration=8500, sound=True, icon_path=iconimage) except: pass time.sleep(int(sleeper)) else: liz = xbmcgui.ListItem(name, iconImage=iconimage, thumbnailImage=iconimage) xbmc.Player().play(url, liz, False) except: kodi.idle() kodi.notify(msg='Error playing %s' % name)
def find_link(url, name, iconimage, downloadableLink=False): xbmc.executebuiltin("ActivateWindow(busydialog)") if '|SPLIT|' in url: url = url.split('|SPLIT|')[0] if 'site=' in url: url = url.split('site=')[0] if '|' in url: url = url.split('|User-Agent')[0] c = client.request(url, output='headers') checks = ['video', 'mpegurl'] exts = ['.mp4', '.flv', '.m3u8'] try: if any(f for f in checks if f in c['Content-Type']): downloadableLink = True except: if any(f for f in exts if f in url): downloadableLink = True else: xbmc.executebuiltin("Dialog.Close(busydialog)") kodi.notify(msg='Error downloading video.') quit() name = kodi.stripColor(name) if '] -' in name: name = name.split('] -')[1] if downloadableLink: dest = getDest() dest = os.path.join(dest, '%s.mp4' % quote_plus(name)) download(url, name, iconimage, dest) else: u = None log_utils.log('Sending %s to XXX Resolver' % (url), xbmc.LOGNOTICE) if hmf.HostedMediaFile(url).valid_url(): log_utils.log( '%s is a valid SMR resolvable URL. Attempting to resolve.' % (url), xbmc.LOGNOTICE) try: u = hmf.HostedMediaFile(url).resolve() except Exception as e: log_utils.log( 'Error getting valid link from SMR :: %s :: %s' % (url, str(e)), xbmc.LOGERROR) kodi.idle() kodi.notify(msg='Something went wrong! | %s' % str(e), duration=8000, sound=True) quit() log_utils.log('Link returned by XXX Resolver :: %s' % (u), xbmc.LOGNOTICE) else: log_utils.log( '%s is not a valid SMR resolvable link. Attempting to resolve by AdultFlix backup resolver.' % (url), xbmc.LOGNOTICE) try: u = adultresolver.resolve(url) except Exception as e: log_utils.log( 'Error getting valid link from SMR :: %s :: %s' % (url, str(e)), xbmc.LOGERROR) kodi.idle() kodi.notify(msg='Something went wrong! | %s' % str(e), duration=8000, sound=True) quit() log_utils.log('%s returned by AdultFlix backup resolver.' % (u), xbmc.LOGNOTICE) if not isinstance(u, str): try: u = multilinkselector(u) except: pass if u == 'quit': xbmc.executebuiltin("Dialog.Close(busydialog)") quit() if u: dest = getDest() dest = os.path.join(dest, '%s.tmp_mp4' % quote_plus(name)) download(u, name, iconimage, dest) else: xbmc.executebuiltin("Dialog.Close(busydialog)") kodi.notify('No Downloadable Link Found.') quit()
def resolve_url(url, name=None, iconimage=None, pattern=None): kodi.busy() try: url, site = url.split('|SPLIT|') except: site = 'Unknown' log_utils.log('Error getting site information from :: %s' % (url), xbmc.LOGERROR) if not name: name = 'Unknown' if not iconimage: iconimage = kodi.addonicon name = re.sub(r'(\[.+?\])', '', name) name = name.lstrip() if '] - ' in name: name = name.split('] - ')[-1] if 'site=' in url: url, site = url.split('site=') if '|CHAT|' in url: url, site, name = url.split('|CHAT|') if '- [' in name: name = name.split('- [')[0] u = None log_utils.log('Sending %s to XXX Resolver' % (url), xbmc.LOGNOTICE) if hmf.HostedMediaFile(url).valid_url(): log_utils.log('%s is a valid SMR resolvable URL. Attempting to resolve.' % (url), xbmc.LOGNOTICE) try: u = hmf.HostedMediaFile(url).resolve() except Exception as e: log_utils.log('Error getting valid link from SMR :: %s :: %s' % (url, str(e)), xbmc.LOGERROR) kodi.idle() kodi.notify(msg='Something went wrong! | %s' % str(e), duration=8000, sound=True) quit() log_utils.log('Link returned by XXX Resolver :: %s' % (u), xbmc.LOGNOTICE) else: log_utils.log('%s is not a valid SMR resolvable link. Attempting to resolve by AdultFlix backup resolver.' % (url), xbmc.LOGNOTICE) try: u = adultresolver.resolve(url) if u: if hmf.HostedMediaFile(u).valid_url(): u = hmf.HostedMediaFile(u).resolve() except Exception as e: log_utils.log('Error getting valid link from SMR :: %s :: %s' % (url, str(e)), xbmc.LOGERROR) kodi.idle() kodi.notify(msg='Something went wrong! | %s' % str(e), duration=8000, sound=True) quit() log_utils.log('%s returned by AdultFlix backup resolver.' % (u), xbmc.LOGNOTICE) if u == 'offline': kodi.idle() kodi.notify(msg='This performer is offline.', duration=5000, sound=True) quit() if u: kodi.idle() play(u, name, iconimage, url, site) else: kodi.idle() log_utils.log('Failed to get any playable link for :: %s' % (url), xbmc.LOGERROR) kodi.notify(msg='Failed to get any playable link.', duration=7500, sound=True) quit()
def setViewCM(viewtype): window = xbmcgui.Window(xbmcgui.getCurrentWindowId()) viewid = str(window.getFocusId()) xbmcaddon.Addon().setSetting("%s_view" % (viewtype), viewid) kodi.notify(kodi.get_name(), "%s view has been set to (%s)." % (viewtype.title(), viewid))
def download_media(url, path, file_name, translations, progress=None): try: if progress is None: progress = int(kodi.get_setting('down_progress')) i18n = translations.i18n active = not progress == PROGRESS.OFF background = progress == PROGRESS.BACKGROUND with kodi.ProgressDialog(kodi.get_name(), i18n('downloading') % (file_name), background=background, active=active) as pd: try: headers = dict([ item.split('=') for item in (url.split('|')[1]).split('&') ]) for key in headers: headers[key] = unquote(headers[key]) except: headers = {} if 'User-Agent' not in headers: headers['User-Agent'] = BROWSER_UA request = Request(url.split('|')[0], headers=headers) response = urlopen(request) if 'Content-Length' in response.info(): content_length = int(response.info()['Content-Length']) else: content_length = 0 file_name += '.' + get_extension(url, response) full_path = os.path.join(path, file_name) logger.log('Downloading: %s -> %s' % (url, full_path), xbmc.LOGDEBUG) path = kodi.translate_path(xbmc.makeLegalFilename(path)) try: try: xbmcvfs.mkdirs(path) except: os.makedirs(path) except Exception as e: logger.log('Path Create Failed: %s (%s)' % (e, path), xbmc.LOGDEBUG) if not path.endswith(os.sep): path += os.sep if not xbmcvfs.exists(path): raise Exception(i18n('failed_create_dir')) file_desc = xbmcvfs.File(full_path, 'w') total_len = 0 cancel = False while True: data = response.read(CHUNK_SIZE) if not data: break if pd.is_canceled(): cancel = True break total_len += len(data) if not file_desc.write(data): raise Exception(i18n('failed_write_file')) percent_progress = total_len * 100 / content_length if content_length > 0 else 0 logger.log( 'Position : %s / %s = %s%%' % (total_len, content_length, percent_progress), xbmc.LOGDEBUG) pd.update(percent_progress) file_desc.close() if not cancel: kodi.notify(msg=i18n('download_complete') % (file_name), duration=5000) logger.log('Download Complete: %s -> %s' % (url, full_path), xbmc.LOGDEBUG) except Exception as e: logger.log( 'Error (%s) during download: %s -> %s' % (str(e), url, file_name), xbmc.LOGERROR) kodi.notify(msg=i18n('download_error') % (str(e), file_name), duration=5000)