def get_videos(self, media): from dudehere.routines.vfs import VFSClass vfs = VFSClass() if media == 'tv': path = vfs.join(self.save_directory, "TV Shows") else: path = vfs.join(self.save_directory, "Movies") videos = vfs.ls(path, pattern="(avi|mp4|mkv|mov|flv)$")[1] return path, videos
def get_cached_file(self, title, season=None, episode=None, year=None): from dudehere.routines.vfs import VFSClass vfs = VFSClass() if season is not None: for extension in ['avi', 'mkv', 'mov', 'mp4', 'flv']: path = vfs.join(self.save_directory, "TV Shows/%s %sx%s.%s" % (title, season, episode, extension)) if vfs.exists(path): return path return False else: for extension in ['avi', 'mkv', 'mov', 'mp4', 'flv']: path = vfs.join(self.save_directory,"Movies/%s (%s).%s" % (title, year, extension)) if vfs.exists(path): return path return False
def clear_cache(self): if ADDON.get_setting('clear_cache') == "true": vfs = VFSClass() ADDON.log("Clearing download cache...") files = vfs.ls(WORK_DIRECTORY, pattern='state$|temp$|tail$') for foo in files[1]: path = vfs.join(WORK_DIRECTORY, foo) vfs.rm(path, quiet=True) ADDON.log("Clearing orphaned jobs...") self.DB.connect() self.DB.execute("UPDATE queue SET status=-1 WHERE status=2") self.DB.commit()
def onPlayBackStopped(self): if get_property('streaming.started'): vfs = VFSClass() ADDON.log("Now I'm stopped") ADDON.log("Abort: %s" % get_property('file_id')) set_property("abort_id", get_property('file_id')) tail_file = vfs.join(WORK_DIRECTORY, get_property('file_id') + '.tail') if vfs.exists(tail_file): vfs.rm(tail_file,quiet=True) time.sleep(0.25) clear_property("abort_id") clear_property('playing') clear_property('file_id') clear_property('streaming.started') clear_property("streaming.total_bytes") clear_property("streaming.total_blocks") clear_property("streaming.file_id") clear_property("streaming.abort") clear_property("streaming.seek_block") clear_property('streaming.tail_requested')
HANDLE_ID = int(sys.argv[1]) ADDON_URL = sys.argv[0] PLUGIN_URL = sys.argv[0] + sys.argv[2] except: HANDLE_ID = -1 ADDON_URL = 'plugin://%s' % addon.getAddonInfo('name') PLUGIN_URL = 'plugin://%s' % addon.getAddonInfo('name') ADDON_ID = addon.getAddonInfo('id') ADDON_NAME = addon.getAddonInfo('name') VERSION = addon.getAddonInfo('version') ROOT_PATH = addon.getAddonInfo('path').decode('utf-8') DATA_PATH = addon.getAddonInfo('profile').decode('utf-8') ARTWORK = ROOT_PATH + '/resources/artwork/' SHARED_ARTWORK = vfs.join( "special://home", "addons/script.module.dudehere.routines/resources/artwork/") ALLOWED_CALLERS = [ 'plugin.video.theroyalwe', 'plugin.video.ugottoo', 'plugin.video.redbeard', 'service.walter.sobchak' ] try: KODI_LANGUAGE = xbmc.getLanguage().capitalize() except: KODI_LANGUAGE = 'English' LANGUAGE_PATH = VFSClass().join(ROOT_PATH, 'resources/language/' + KODI_LANGUAGE)
import time import unicodedata import xbmcgui import urlresolver import hashlib import random from urlparse import urljoin from dudehere.routines import * from dudehere.routines.threadpool import ThreadPool from addon.common.net import Net, HttpResponse from BeautifulSoup import BeautifulSoup from dudehere.routines.vfs import VFSClass vfs = VFSClass() DECAY = 2 SCRAPER_DIR = os.path.dirname(os.path.abspath(__file__)) COOKIE_PATH = vfs.join(DATA_PATH,'cookies') if not vfs.exists(COOKIE_PATH): vfs.mkdir(COOKIE_PATH, recursive=True) sys.path.append(SCRAPER_DIR) RD_HOSTS = [] if ADDON.get_setting('database_type')=='1': DB_NAME = ADDON.get_setting('database_mysql_name') DB_USER = ADDON.get_setting('database_mysql_user') DB_PASS = ADDON.get_setting('database_mysql_pass') DB_PORT = ADDON.get_setting('database_mysql_port') DB_ADDRESS = ADDON.get_setting('database_mysql_host') DB_TYPE = 'mysql' from dudehere.routines.database import MySQLDatabase as DatabaseAPI else: DB_TYPE = 'sqlite' DB_FILE = xbmc.translatePath(ADDON.get_setting('database_sqlite_file'))
import pickle from Queue import Queue from threading import Thread from urlparse import urljoin, urlparse from dudehere.routines import * from dudehere.routines.threadpool import ThreadPool from addon.common.net import Net, HttpResponse from BeautifulSoup import BeautifulSoup from dudehere.routines.vfs import VFSClass from dudehere.routines import cloudflare from dudehere.routines.plugin import ProgressBar, Plugin vfs = VFSClass() DECAY = 2 SCRAPER_DIR = os.path.dirname(os.path.abspath(__file__)) COOKIE_PATH = vfs.join(DATA_PATH, 'cookies') CACHE_PATH = vfs.join(DATA_PATH, 'cache') if not vfs.exists(COOKIE_PATH): vfs.mkdir(COOKIE_PATH, recursive=True) if not vfs.exists(CACHE_PATH): vfs.mkdir(CACHE_PATH, recursive=True) sys.path.append(SCRAPER_DIR) RD_HOSTS = [] if ADDON.get_setting('database_type') == '1': DB_NAME = ADDON.get_setting('database_mysql_name') DB_USER = ADDON.get_setting('database_mysql_user') DB_PASS = ADDON.get_setting('database_mysql_pass') DB_PORT = ADDON.get_setting('database_mysql_port') DB_ADDRESS = ADDON.get_setting('database_mysql_host') DB_TYPE = 'mysql' from dudehere.routines.database import MySQLDatabase as DatabaseAPI else:
do_init = True if do_init: import xbmcaddon root = xbmcaddon.Addon('script.module.dudehere.routines').getAddonInfo('path') schema = vfs.join(root, 'resources/database/trakt.schema.sql') if vfs.exists(schema): full_sql = vfs.read_file(schema) sql_stmts = full_sql.split(';') for SQL in sql_stmts: if SQL is not None and len(SQL.strip()) > 0: self.execute(SQL) print SQL self.commit() self.execute('INSERT OR REPLACE INTO version(db_version) VALUES(?)', [self.db_version]) self.commit() DB_LOCATION = vfs.join('special://userdata', 'addon_data/script.module.dudehere.routines') if not vfs.exists(DB_LOCATION): vfs.mkdir(DB_LOCATION) DB_FILE = vfs.join('special://userdata', 'addon_data/script.module.dudehere.routines/trakt.db') DB = MyDatabaseAPI(DB_FILE, init_flag='database_sqlite_init.trakt', version_flag='database_sqlite_version.trakt', version=4, connect=True) backdrop_sizes = ["w300","w780","w1280","original"] logo_sizes = ["w45","w92","w154","w185","w300","w500","original"] poster_sizes = ["w92","w154","w185","w342","w500","w780","original"] profile_sizes = ["w45","w185","h632","original"] still_sizes = ["w92","w185","w300","original" ] class TMDB_API(): api_key = ADDON.get_setting('tmdb_key') def __init__(self): if self.api_key == 'dude':
self.execute('DELETE FROM version WHERE 1') self.execute('INSERT INTO version(db_version) VALUES(?)', [self.db_version]) self.commit() def do_init(self): do_init = True try: test = self.query("SELECT 1 FROM version WHERE db_version >= ?", [self.db_version], silent=True) if test: do_init = False except: do_init = True return do_init DB_LOCATION = vfs.join('special://userdata', 'addon_data/script.module.dudehere.routines') if not vfs.exists(DB_LOCATION): vfs.mkdir(DB_LOCATION) DB_FILE = vfs.join('special://userdata', 'addon_data/script.module.dudehere.routines/trakt.db') DB = MyDatabaseAPI(DB_FILE, version=7, connect=True) class TraktError(Exception): def __init__(self, value): self.value = value def __str__(self): try: s = self.value except Exception,e: print "-----",type(e),e return s
import json import xbmcgui from dudehere.routines import * from dudehere.routines.vfs import VFSClass vfs = VFSClass() AUTH_PIN = ADDON.get_setting('auth_pin') NUMBER_THREADS = int(ADDON.get_setting('thread_number')) if ADDON.get_setting('enable_custom_work') == "true": WORK_DIRECTORY = ADDON.get_setting('work_directory') else: WORK_DIRECTORY = vfs.join(DATA_PATH, 'work') if ADDON.get_setting('enable_custom_output') == "true": CACHE_DIRECTORY = ADDON.get_setting('save_directory') else: CACHE_DIRECTORY = vfs.join(DATA_PATH, 'downloads') MOVIE_DIRECTORY = vfs.join(CACHE_DIRECTORY, 'Movies') TVSHOW_DIRECTORY = vfs.join(CACHE_DIRECTORY, 'TV Shows') BLOCK_SIZE = int(float(ADDON.get_setting('block_size')) * 1024 * 1024) FRAME_SIZE = int(ADDON.get_setting('frame_size')) RETRY_ATTEMPTS = int(ADDON.get_setting('retry_attempts')) WINDOW_PREFIX = 'transmogrifier' WEB_ROOT = vfs.join(ROOT_PATH, 'resources/www/html') CONTROL_PORT = int(ADDON.get_setting('control_port')) VALID_TOKENS = [] NOTIFICATION = ADDON.get_setting('notification')
import hashlib import time import base64 import datetime import socket from os import curdir, sep from urlparse import urlparse from SocketServer import ThreadingMixIn from BaseHTTPServer import BaseHTTPRequestHandler from dudehere.routines import * from dudehere.routines.vfs import VFSClass from resources.lib.common import * from resources.lib.database import * from resources.lib.transmogrifier import OutputHandler, Transmogrifier vfs = VFSClass() LOG_FILE = vfs.join(DATA_PATH, 'access.log') ADDON.log("Setting Access log to: %s" % LOG_FILE) def set_property(k, v): k = "%s.%s" % (WINDOW_PREFIX, k) xbmcgui.Window(10000).setProperty(k, str(v)) def get_property(k): k = "%s.%s" % (WINDOW_PREFIX, k) p = xbmcgui.Window(10000).getProperty(k) if p == 'false': return False if p == 'true': return True return p class RequestHandler(BaseHTTPRequestHandler): blacklist = ['transmogrified', 'transmogrifier', 'local']
import json import unicodedata import xbmcgui import urlresolver import hashlib from dudehere.routines import * from dudehere.routines.threadpool import ThreadPool from addon.common.net import Net from BeautifulSoup import BeautifulSoup from dudehere.routines.vfs import VFSClass from __builtin__ import None vfs = VFSClass() DECAY = 2 SCRAPER_DIR = os.path.dirname(os.path.abspath(__file__)) COOKIE_PATH = vfs.join(DATA_PATH, "cookies") if not vfs.exists(COOKIE_PATH): vfs.mkdir(COOKIE_PATH, recursive=True) sys.path.append(SCRAPER_DIR) from dudehere.routines.database import SQLiteDatabase as DatabaseAPI class MyDatabaseAPI(DatabaseAPI): def _initialize(self): SQL = """ CREATE TABLE IF NOT EXISTS "search_cache" ( "cache_id" INTEGER PRIMARY KEY AUTOINCREMENT, "hash" TEXT NOT NULL, "service" TEXT NOT NULL, "host" TEXT NOT NULL,