def user_torrents_to_listItem(self): try: sysaddon, syshandle = argv[0], int(argv[1]) torrent_files = self.user_torrents() if not torrent_files: return # torrent_files = [i for i in torrent_files if i['status'] == 'downloaded'] folder_str, deleteMenu = getLS(40046).upper(), getLS(40050) for count, item in enumerate(torrent_files, 1): try: cm = [] isFolder = True if item['status'] == 'downloaded' else False status = '[COLOR %s]%s[/COLOR]' % (control.getHighlightColor(), item['status'].capitalize()) folder_name = string_tools.strip_non_ascii_and_unprintable(item['filename']) label = '%02d | [B]%s[/B] - %s | [B]%s[/B] | [I]%s [/I]' % (count, status, str(item['progress']) + '%', folder_str, folder_name) url = '%s?action=rd_BrowseUserTorrents&id=%s' % (sysaddon, item['id']) if isFolder else None cm.append((deleteMenu % 'Torrent', 'RunPlugin(%s?action=rd_DeleteUserTorrent&id=%s&name=%s)' % (sysaddon, item['id'], quote_plus(folder_name)))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({'icon': rd_icon, 'poster': rd_icon, 'thumb': rd_icon, 'fanart': addonFanart, 'banner': rd_icon}) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True) except: log_utils.error()
def query_results_to_dialog(self, query): if not self.api_key: return try: sysaddon = argv[0] downloadMenu = getLS(40048) query = '@name+%s' % query url = (self.base_link + self.search_link % (self.api_key, query, 'extended', 'no', '')).replace(' ', '+') response = requests.get(url, timeout=20).json() if 'files' not in response: # with reuselanguageinvoker on an empty directory must be loaded, do not use sys.exit() control.hide() ; control.notification(title=32001, message=33049) try: files = response['files'] files.sort(key=lambda k: k['name']) except: files = [] except: from resources.lib.modules import log_utils log_utils.error() for count, item in enumerate(files, 1): try: if item['is_ready'] == '1' and item['type'] == 'video': cm = [] name = string_tools.strip_non_ascii_and_unprintable(item['name']) file_id = item['id'] url_dl = item['url_dl'] if url_dl == '': continue size = str(round(float(int(item['size'])) / 1048576000, 1)) label = '%02d | [B]%s GB[/B] | [I]%s [/I]' % (count, size, name) url = 'furk_resolve_forPlayback&url=%s' % file_id cm.append((downloadMenu, 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=furk)' % (sysaddon, quote_plus(name), quote_plus(furk_icon), file_id))) self.addDirectoryItem(label, url, furk_icon, '', cm) except: from resources.lib.modules import log_utils log_utils.error() self.endDirectory()
def query_results_to_dialog(self, query): from sys import argv try: sysaddon, syshandle = argv[0], int(argv[1]) downloadMenu = control.lang(40048) url = '%s%s' % (self.base_link, self.search_link) params = SEARCH_PARAMS params['pby'] = 350 # Results per Page params[ 'safeO'] = 1 # 1 is the moderation (adult filter) ON, 0 is OFF. # params['gps'] = params['sbj'] = query # gps stands for "group search" and does so by keywords, sbj=subject and can limit results, use gps only params['gps'] = query results = self._get(url, params) files = self._process_files(results) files.sort(key=lambda k: k['name']) except: from resources.lib.modules import log_utils log_utils.error() for count, item in enumerate(files, 1): try: cm = [] name = string_tools.strip_non_ascii_and_unprintable( item['name']) url_dl = item['url_dl'] sysurl_dl = quote_plus(url_dl) size = str(round(float(int(item['rawSize'])) / 1048576000, 1)) label = '%02d | [B]%s GB[/B] | [I]%s [/I]' % (count, size, name) url = '%s?action=en_resolve_forPlayback&url=%s' % (sysaddon, sysurl_dl) cm.append(( downloadMenu, 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=easynews)' % (sysaddon, quote_plus(name), quote_plus(en_icon), sysurl_dl))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({ 'icon': en_icon, 'poster': en_icon, 'thumb': en_icon, 'fanart': addonFanart, 'banner': en_icon }) item.setInfo(type='video', infoLabels='') item.setLabel(label) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except: from resources.lib.modules import log_utils log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
def entry_loop(entry): entry = entry.get('e') name = entry[0].get('n') if isinstance( entry, list) else entry.get('n') if not name.lower().endswith(tuple(extensions)): return entry_loop(entry) else: return string_tools.strip_non_ascii_and_unprintable( name)
def my_downloads_to_listItem(self, page): try: from datetime import datetime import time sysaddon, syshandle = argv[0], int(argv[1]) my_downloads, pages = self.downloads(page) except: my_downloads = None if not my_downloads: return extensions = supported_video_extensions() my_downloads = [i for i in my_downloads if i['download'].lower().endswith(tuple(extensions))] downloadMenu, deleteMenu = getLS(40048), getLS(40050) for count, item in enumerate(my_downloads, 1): if page > 1: count += (page-1) * 50 try: cm = [] try: datetime_object = datetime.strptime(item['generated'], FormatDateTime).date() except TypeError: datetime_object = datetime(*(time.strptime(item['generated'], FormatDateTime)[0:6])).date() name = string_tools.strip_non_ascii_and_unprintable(item['filename']) size = float(int(item['filesize'])) / 1073741824 label = '%02d | %.2f GB | %s | [I]%s [/I]' % (count, size, datetime_object, name) url_link = item['download'] url = '%s?action=play_URL&url=%s' % (sysaddon, url_link) cm.append((downloadMenu, 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=realdebrid)' % (sysaddon, quote_plus(name), quote_plus(rd_icon), url_link))) cm.append((deleteMenu % 'File', 'RunPlugin(%s?action=rd_DeleteDownload&id=%s&name=%s)' % (sysaddon, item['id'], name))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({'icon': rd_icon, 'poster': rd_icon, 'thumb': rd_icon, 'fanart': addonFanart, 'banner': rd_icon}) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except: log_utils.error() if page < pages: page += 1 next = True else: next = False if next: try: nextMenu = getLS(32053) url = '%s?action=rd_MyDownloads&query=%s' % (sysaddon, page) page = ' [I](%s)[/I]' % page nextMenu = '[COLOR skyblue]' + nextMenu + page + '[/COLOR]' item = control.item(label=nextMenu, offscreen=True) icon = control.addonNext() item.setArt({'icon': rd_icon, 'poster': rd_icon, 'thumb': rd_icon, 'fanart': addonFanart, 'banner': rd_icon}) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
def user_cloud_to_listItem(self, folder_id=None): sysaddon, syshandle = argv[0], int(argv[1]) folder_str, deleteMenu = getLS(40046).upper(), getLS(40050) cloud_dict = self.user_cloud()['magnets'] cloud_dict = [i for i in cloud_dict if i['statusCode'] == 4] for count, item in enumerate(cloud_dict, 1): try: cm = [] folder_name = string_tools.strip_non_ascii_and_unprintable( item['filename']) id = item['id'] status_str = '[COLOR %s]%s[/COLOR]' % ( control.getHighlightColor(), item['status'].capitalize()) label = '%02d | [B]%s[/B] | [B]%s[/B] | [I]%s [/I]' % ( count, status_str, folder_str, folder_name) url = '%s?action=ad_BrowseUserCloud&source=%s' % ( sysaddon, quote_plus(jsdumps(item))) cm.append( (deleteMenu % 'Transfer', 'RunPlugin(%s?action=ad_DeleteTransfer&id=%s&name=%s)' % (sysaddon, id, folder_name))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({ 'icon': ad_icon, 'poster': ad_icon, 'thumb': ad_icon, 'fanart': addonFanart, 'banner': ad_icon }) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=True) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
def user_files(self): if not self.api_key: return try: url = self.base_link + self.get_user_files_link % self.api_key response = requests.get(url, timeout=20).json() files = response['files'] except: from resources.lib.modules import log_utils log_utils.error() for count, item in enumerate(files, 1): try: cached = True if 'url_dl' in item else False files_str = 'files' if cached: files_num_video = item['files_num_video'] name = string_tools.strip_non_ascii_and_unprintable(item['name']) item_id = item['id'] if cached else item['info_hash'] url_dl = item['url_dl'] if cached else item['info_hash'] size = str(round(float(item['size']) / 1048576000, 1)) label = '%02d | [B]%s GB[/B] | [B]%s %s[/B] |[I] %s [/I]' % (count, size, files_num_video, files_str, name) # url_dl = '' # for x in accepted_extensions: # if item['url_dl'].endswith(x): url_dl = item['url_dl'] # else: continue # if url_dl == '': continue # if not int(item['files_num_video_player']) > 1: # if int(item['ss_num']) > 0: thumb = item['ss_urls'][0] # else: thumb = '' # self.addDirectoryItem(label , url_dl, thumb, '', isAction=False) self.addDirectoryItem(label , url_dl, furk_icon, '', isAction=False) else: pass except: from resources.lib.modules import log_utils log_utils.error() self.endDirectory()
def browse_user_cloud(self, folder): sysaddon, syshandle = argv[0], int(argv[1]) extensions = supported_video_extensions() torrent_folder = jsloads(folder) links = torrent_folder['links'] # links = [i for i in links if i['filename'].lower().endswith(tuple(extensions))] status_code = torrent_folder['statusCode'] file_str, downloadMenu, deleteMenu = getLS(40047).upper(), getLS( 40048), getLS(40050) for count, item in enumerate(links, 1): try: cm = [] url_link = item['link'] name = string_tools.strip_non_ascii_and_unprintable( item['filename']) if name.lower().endswith(invalid_extensions): continue if not name.lower().endswith(tuple(extensions)): files = item['files'] entry = files[0].get('e') name = entry[0].get('n') if isinstance( entry, list) else entry.get('n') def entry_loop(entry): entry = entry.get('e') name = entry[0].get('n') if isinstance( entry, list) else entry.get('n') if not name.lower().endswith(tuple(extensions)): return entry_loop(entry) else: return string_tools.strip_non_ascii_and_unprintable( name) if not name.lower().endswith(tuple(extensions)): name = entry_loop(entry) size = item['size'] display_size = float(int(size)) / 1073741824 label = '%02d | [B]%s[/B] | %.2f GB | [I]%s [/I]' % ( count, file_str, display_size, name) if status_code == 4: url = '%s?action=play_URL&url=%s&caller=alldebrid&type=unrestrict' % ( sysaddon, url_link) else: url = '' cm.append(( downloadMenu, 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=alldebrid)' % (sysaddon, quote_plus(name), quote_plus(ad_icon), url_link))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({ 'icon': ad_icon, 'poster': ad_icon, 'thumb': ad_icon, 'fanart': addonFanart, 'banner': ad_icon }) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=False) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
def user_transfers_to_listItem(self): sysaddon, syshandle = argv[0], int(argv[1]) transfer_files = self.user_cloud()['magnets'] if not transfer_files: if self.server_notifications: control.notification(message='Request Failure-Empty Content', icon=ad_icon) log_utils.log('AllDebrid: Request Failure-Empty Content', __name__, log_utils.LOGDEBUG) return folder_str, deleteMenu, restartMenu = getLS(40046).upper(), getLS( 40050), getLS(40008) for count, item in enumerate(transfer_files, 1): try: status_code = item['statusCode'] if status_code in (0, 1, 2, 3): active = True downloaded = item['downloaded'] size = item['size'] try: percent = str(round(float(downloaded) / size * 100, 1)) except: percent = '0' else: active = False folder_name = string_tools.strip_non_ascii_and_unprintable( item['filename']) id = item['id'] status_str = '[COLOR %s]%s[/COLOR]' % ( control.getHighlightColor(), item['status'].capitalize()) if active: label = '%02d | [B]%s[/B] - %s | [B]%s[/B]' % ( count, status_str, str(percent) + '%', folder_name) else: label = '%02d | [B]%s[/B] | [B]%s[/B] | [I]%s [/I]' % ( count, status_str, folder_str, folder_name) if status_code == 4: url = '%s?action=ad_BrowseUserCloud&source=%s' % ( sysaddon, quote_plus(jsdumps(item))) isFolder = True else: url = '' isFolder = False cm = [] cm.append( (deleteMenu % 'Transfer', 'RunPlugin(%s?action=ad_DeleteTransfer&id=%s&name=%s)' % (sysaddon, id, folder_name))) if status_code in (6, 7, 9, 10): cm.append(( restartMenu, 'RunPlugin(%s?action=ad_RestartTransfer&id=%s&name=%s)' % (sysaddon, id, folder_name))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({ 'icon': ad_icon, 'poster': ad_icon, 'thumb': ad_icon, 'fanart': addonFanart, 'banner': ad_icon }) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
def user_transfers_to_listItem(self): try: sysaddon, syshandle = argv[0], int(argv[1]) extensions = supported_video_extensions() transfer_files = self.user_transfers() if not transfer_files: if self.server_notifications: control.notification( message='Request Failure-Empty Content', icon=pm_icon) log_utils.log('Premiumize.me: Request Failure-Empty Content', __name__, log_utils.LOGDEBUG) return except: log_utils.error() return folder_str, file_str, downloadMenu, renameMenu, deleteMenu, clearFinishedMenu = getLS( 40046).upper(), getLS(40047).upper(), getLS(40048), getLS( 40049), getLS(40050), getLS(40051) for count, item in enumerate(transfer_files, 1): try: cm = [] type = 'folder' if item['file_id'] is None else 'file' name = string_tools.strip_non_ascii_and_unprintable( item['name']) status = item['status'] progress = item['progress'] if status == 'finished': progress = 100 else: try: progress = re.findall(r'(?:\d{0,1}\.{0,1})(\d+)', str(progress))[0][:2] except: progress = 'UNKNOWN' if type == 'folder': isFolder = True if status == 'finished' else False status_str = '[COLOR %s]%s[/COLOR]' % ( control.getHighlightColor(), status.capitalize()) label = '%02d | [B]%s[/B] - %s | [B]%s[/B] | [I]%s [/I]' % ( count, status_str, str(progress) + '%', folder_str, name) url = '%s?action=pm_MyFiles&id=%s&name=%s' % ( sysaddon, item['folder_id'], quote_plus(name)) # Till PM addresses issue with item also being removed from public acess if item not accessed for 60 days this option is disabled. # cm.append((clearFinishedMenu, 'RunPlugin(%s?action=pm_ClearFinishedTransfers)' % sysaddon)) else: isFolder = False details = self.item_details(item['file_id']) if not details: if self.server_notifications: control.notification( message='Request Failure-Empty Content', icon=pm_icon) log_utils.log( 'Premiumize.me: Request Failure-Empty Content', __name__, log_utils.LOGDEBUG) return url_link = details['link'] if url_link.startswith('/'): url_link = 'https' + url_link size = details['size'] display_size = float(int(size)) / 1073741824 label = '%02d | %s%% | [B]%s[/B] | %.2f GB | [I]%s [/I]' % ( count, str(progress), file_str, display_size, name) url = '%s?action=play_URL&url=%s' % (sysaddon, url_link) cm.append(( downloadMenu, 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=premiumize)' % (sysaddon, quote_plus(name), quote_plus(pm_icon), url_link))) cm.append( (deleteMenu % 'Transfer', 'RunPlugin(%s?action=pm_DeleteTransfer&id=%s&name=%s)' % (sysaddon, item['id'], quote_plus(name)))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({ 'icon': pm_icon, 'poster': pm_icon, 'thumb': pm_icon, 'fanart': addonFanart, 'banner': pm_icon }) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)
def my_files_to_listItem(self, folder_id=None, folder_name=None): try: sysaddon, syshandle = argv[0], int(argv[1]) extensions = supported_video_extensions() cloud_files = self.my_files(folder_id) if not cloud_files: if self.server_notifications: control.notification( message='Request Failure-Empty Content', icon=pm_icon) log_utils.log('Premiumize.me: Request Failure-Empty Content', __name__, log_utils.LOGDEBUG) return cloud_files = [ i for i in cloud_files if ('link' in i and i['link'].lower().endswith( tuple(extensions))) or i['type'] == 'folder' ] cloud_files = sorted(cloud_files, key=lambda k: k['name']) cloud_files = sorted(cloud_files, key=lambda k: k['type'], reverse=True) except: log_utils.error() return folder_str, file_str, downloadMenu, renameMenu, deleteMenu = getLS( 40046).upper(), getLS(40047).upper(), getLS(40048), getLS( 40049), getLS(40050) for count, item in enumerate(cloud_files, 1): try: cm = [] type = item['type'] name = string_tools.strip_non_ascii_and_unprintable( item['name']) if type == 'folder': isFolder = True size = 0 label = '%02d | [B]%s[/B] | [I]%s [/I]' % ( count, folder_str, name) url = '%s?action=pm_MyFiles&id=%s&name=%s' % ( sysaddon, item['id'], quote_plus(name)) else: isFolder = False url_link = item['link'] if url_link.startswith('/'): url_link = 'https' + url_link size = item['size'] display_size = float(int(size)) / 1073741824 label = '%02d | [B]%s[/B] | %.2f GB | [I]%s [/I]' % ( count, file_str, display_size, name) url = '%s?action=play_URL&url=%s' % (sysaddon, url_link) cm.append(( downloadMenu, 'RunPlugin(%s?action=download&name=%s&image=%s&url=%s&caller=premiumize)' % (sysaddon, quote_plus(name), quote_plus(pm_icon), url_link))) cm.append( (renameMenu % type.capitalize(), 'RunPlugin(%s?action=pm_Rename&type=%s&id=%s&name=%s)' % (sysaddon, type, item['id'], quote_plus(name)))) cm.append( (deleteMenu % type.capitalize(), 'RunPlugin(%s?action=pm_Delete&type=%s&id=%s&name=%s)' % (sysaddon, type, item['id'], quote_plus(name)))) item = control.item(label=label, offscreen=True) item.addContextMenuItems(cm) item.setArt({ 'icon': pm_icon, 'poster': pm_icon, 'thumb': pm_icon, 'fanart': addonFanart, 'banner': pm_icon }) item.setInfo(type='video', infoLabels='') control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder) except: log_utils.error() control.content(syshandle, 'files') control.directory(syshandle, cacheToDisc=True)