def furkJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): if settings.getSetting("proxy") == 'true': http_proxy = settings.getSetting("proxyurl") https_proxy = settings.getSetting("proxyurl") proxyDict = {"http": http_proxy, "https": https_proxy} else: proxyDict = {} apikey = settings.getSetting('furk_apikey') req = 'https://www.furk.net/api/' + req req = req.replace("%%API_KEY%%", apikey) if method == 'POST': if not anon: args['username'] = username args['password'] = pwd args['hide_watchlisted'] = 'true' jdata = json.dumps(args) print(req) print(jdata) request = requests.post(req, data=jdata, proxies=proxyDict) elif method == 'GET': jdata = json.dumps(args) request = requests.post(req, params=jdata, proxies=proxyDict) #print(req) #print("trakt json url: "+req) #conn.go() #print request.json() try: data = request.json() except: data = None if data == None: return None if 'status' in data: if data['status'] == 'error': print("traktQuery: Error: " + str(data['error'])) if returnStatus: return data if not silent: print("Furk Library", str(data['error'])) # Error #login(settings.getSetting('furk_login'),settings.getSetting('furk_password')) return data return data
def startup(): if len(settings.getSetting('username')) < 1: dialog = xbmcgui.Dialog() dialog.ok("Login", "Please login to your Streamcub account.", "Get a free account at www.streamcub.com") settings.openSettings() if len(settings.getSetting('username')) > 0: dialog = xbmcgui.Dialog() login_ok = furklib.login(settings.getSetting('username'),settings.getSetting('password')); if not login_ok and dialog.yesno("Login failed", "Do you want to view your settings?"): settings.openSettings() return login_ok else: return False
def furkJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): if settings.getSetting("proxy") == 'true': http_proxy = settings.getSetting("proxyurl") https_proxy = settings.getSetting("proxyurl") proxyDict = { "http" : http_proxy, "https" : https_proxy } else: proxyDict = {} apikey = settings.getSetting('furk_apikey') req = 'https://www.furk.net/api/' + req req = req.replace("%%API_KEY%%",apikey) if method == 'POST': if not anon: args['username'] = username args['password'] = pwd args['hide_watchlisted']= 'true' jdata = json.dumps(args) print(req) print(jdata) request = requests.post(req, data=jdata , proxies=proxyDict) elif method == 'GET': jdata = json.dumps(args) request = requests.post(req, params=jdata , proxies=proxyDict) #print(req) #print("trakt json url: "+req) #conn.go() #print request.json() try: data = request.json() except: data = None if data == None: return None if 'status' in data: if data['status'] == 'error': print("traktQuery: Error: " + str(data['error'])) if returnStatus: return data if not silent: print ("Furk Library", str(data['error'])) # Error #login(settings.getSetting('furk_login'),settings.getSetting('furk_password')) return data return data
def getCriticker(): apikey = settings.getSetting('criticker_apikey') if len(apikey) < 5 : common.Notification ('Error','Please set up Criticker key in settings') settings.openSettings() return url = 'http://api.criticker.com/handler.php?CritickerKey=%%API_KEY%%&Function=RecommendFilm' url = url.replace("%%API_KEY%%",apikey) print url req = urllib2.Request(url) req.add_header('User-Agent', "%s %s" % (sys.modules[ "__main__" ].__plugin__, sys.modules[ "__main__" ].__version__)) response = urllib2.urlopen(req) dom = parse(response) try: title = dom.getElementsByTagName("FilmName")[0].firstChild.data year = dom.getElementsByTagName("FilmYear")[0].firstChild.data avgtier = dom.getElementsByTagName("AvgTier")[0].firstChild.data except: common.Notification ('Error','Please check your Criticker key in settings') settings.openSettings() return s= '{0} ({1}) r:{2}'.format(title,year,avgtier) common.createMovieListItem(s,title,year) url = sys.argv[0]+'?action=' common.createListItem('Another',True, url + 'criticker') common.endofDir() return
def displayTraktMenu(): url = sys.argv[0]+'?action=' common.createListItem('Search in Furk cache', True, url+'search') common.createListItem('My Furk files', True, url+'myFiles') common.createListItem('Search Movie', True, url+'trakt_SearchMovies') common.createListItem('Search TV Show', True, url+'trakt_SearchShows') #common.createListItem('Recommended Movies', True, url+'trakt_MovieGenres') common.createListItem('Trending Movies', True, url +'trakt_TrendingMovies') #common.createListItem('Recommended TV Shows', True, url +'trakt_ShowGenres') common.createListItem('Trending TV Shows', True, url +'trakt_TrendingShows') common.createListItem('Movies', True, url +'trakt_ShowLists&user=cloudberry&type=Movie') common.createListItem('TV Shows', True, url +'trakt_ShowLists&user=cloudberry&type=Show') common.createListItem('Featured', True, url +'trakt_getList&user=cloudberry&slug=movie-featured') common.createListItem('Most Popular', True, url +'trakt_getList&user=cloudberry&slug=movie-most-popular') common.createListItem('Highly rated', True, url +'trakt_getList&user=cloudberry&slug=movie-highly-rated') common.createListItem('Featured', True, url +'trakt_getList&user=cloudberry&slug=show-featured') common.createListItem('Most Popular', True, url +'trakt_getList&user=cloudberry&slug=show-most-popular') common.createListItem('Highly rated', True, url +'trakt_getList&user=cloudberry&slug=show-highly-rated') if settings.getSetting('adult_menu') == 'true': common.createListItem('Adult', True, url +'trakt_ShowAdultLists') common.createListItem('IMDB Top 250', True, url +'trakt_getList&user=mmounirou&slug=imdb-best-250-movies') common.createListItem('Movies of 2013', True, url +'trakt_getList&user=BenFranklin&slug=movies-of-2013') common.endofDir()
def SearchDialog(type,title,year,season,number,go=False): if go: updateDialog = xbmcgui.DialogProgress() updateDialog.create("Furk Library", "Searching") updateDialog.update(20, "searching", title) oneclick = settings.getSetting("oneclick") if type == 'Show': search = searcherLib.ShowSearch(title, season, number, oneclick) else: search = searcherLib.MovieSearch(title, year, oneclick) if len(search.qualities) < 2 and search.oneClickSatisfied == False and search.mediatype=='Show': common.Notification('Furk Library 2', 'making a deep search') search.deepsearch() if search.oneclick: if search.oneClickSatisfied: common.Notification('Furk Library 2', 'found one click') return search.best_quality_result.dir['name'],search.best_quality_result.mediaUrl() elif search.best_quality_result: common.Notification('Furk Library 2', 'one click not found playing nearest') quality_select = 0 else: pass #see what are our options if search.valids > 1 : dialog = xbmcgui.Dialog() if go: #list items as list item for myresult in search.results: common.createListItem(myresult.text, False, myresult.mediaUrl()) common.endofDir() else: quality_select = dialog.select('Select quality', search.quality_options()) elif search.valids == 1: common.Notification('Found only:',search.results[0].text.split(' ',1)[0]) quality_select = 0
def onInit(self): self.background = self.getControl(101) self.getControl(102).setVisible(False) self.background.setVisible(True) self.currentIdx=settings.getSetting('last_trailer') self.playerTimer = threading.Timer(2.0, self.playerTimerAction) self.playerTimer.name = "PlayerTimer" self.infoTimer = threading.Timer(5.0, self.hideInfo) # self.myEPG = EPGWindow("script.FurkTrailers.EPG.xml", ADDON_INFO, "default") # self.myEPG.MyOverlayWindow = self # Don't allow any actions during initialization #self.actionSemaphore.acquire() if self.currentIdx == '' or self.currentIdx > : self.currentIdx = 0 # Akin refresh = createTrailers.getReco(1) if refresh: self.currentIdx = 0 self.timeStarted = time.time() self.notificationTimer = threading.Timer(5, self.notificationAction) self.currentChannel = 1 self.setChannel(self.currentChannel) self.background.setVisible(False) self.startNotificationTimer() self.playerTimer.start() #self.actionSemaphore.release() self.log('onInit return')
def getCriticker(): apikey = settings.getSetting('criticker_apikey') if len(apikey) < 5: common.Notification('Error', 'Please set up Criticker key in settings') settings.openSettings() return url = 'http://api.criticker.com/handler.php?CritickerKey=%%API_KEY%%&Function=RecommendFilm' url = url.replace("%%API_KEY%%", apikey) print url req = urllib2.Request(url) req.add_header( 'User-Agent', "%s %s" % (sys.modules["__main__"].__plugin__, sys.modules["__main__"].__version__)) response = urllib2.urlopen(req) dom = parse(response) try: title = dom.getElementsByTagName("FilmName")[0].firstChild.data year = dom.getElementsByTagName("FilmYear")[0].firstChild.data avgtier = dom.getElementsByTagName("AvgTier")[0].firstChild.data except: common.Notification('Error', 'Please check your Criticker key in settings') settings.openSettings() return s = '{0} ({1}) r:{2}'.format(title, year, avgtier) common.createMovieListItem(s, title, year) url = sys.argv[0] + '?action=' common.createListItem('Another', True, url + 'criticker') common.endofDir() return
def searchFurk(query, limit=300): filter = 'all' if settings.getSetting('search_only_cached_files') == 'true': filter = 'cached' moderated = 'no' if settings.getSetting('adult_filter') == 'true': moderated = 'yes' data = furkJsonRequest('GET', ('plugins/metasearch?api_key=%%API_KEY%%&filter='+filter+'&q={0}&moderated='+moderated+'&limit=' + str(limit)).format(urllib.quote(query))) if data == None: print("Error in request from 'searchFurk'") return None try: return data['files'] except: return None
def traktJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): if settings.getSetting("proxy") == 'true': http_proxy = settings.getSetting("proxyurl") https_proxy = settings.getSetting("proxyurl") proxyDict = {"http": http_proxy, "https": https_proxy} else: proxyDict = {} req = 'http://api.trakt.tv' + req req = req.replace("%%API_KEY%%", apikey) req = req.replace("%%USERNAME%%", settings.getSetting('trakt_login')) print req if method == 'POST': if not anon: args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') if passVersions: args['plugin_version'] = __settings__.getAddonInfo("version") args['media_center'] = 'xbmc' args['media_center_version'] = xbmc.getInfoLabel( "system.buildversion") args['media_center_date'] = xbmc.getInfoLabel("system.builddate") jdata = json.dumps(args) # print(req) # print(jdata) request = requests.post(req, data=jdata, proxies=proxyDict) elif method == 'GET': args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') request = requests.get(req, params=args, proxies=proxyDict) print request.encoding print 'Response: ' + request.content #data = response.json() try: #response = conn.getresponse() data = request.json() except: return None if 'status' in data: if data['status'] == 'failure': print("traktQuery: Error: " + str(data['error'])) if returnStatus: return data return None return data
def setup(): if FIRST_TIME_STARTUP: dialog = xbmcgui.Dialog() dialog.ok("Furk Library BY alicanlakot", "..", "Welcome to first time", "setup") if not check_sources_xml(MOVIES_PATH) or not check_sources_xml( TV_SHOWS_PATH): if dialog.yesno( "Setup folder", "The directories used are not listed as video sources.", "Do you want to add them to sources.xml now?"): setup_sources() data = traktlib.testUser(settings.getSetting('trakt_login'), settings.getSetting('trakt_password')) if data['status'] == 'failure': common.Notification( data['status'], 'Please check your username for Trakt and Furk in config') settings.openSettings() data = traktlib.testUser(settings.getSetting('trakt_login'), settings.getSetting('trakt_password')) common.Notification('Tried again:', data['status']) if len(settings.getSetting('furk_apikey')) < 5: furklib.login(settings.getSetting('furk_login'), settings.getSetting('furk_password')) dialog.ok("Furk Library BY alicanlakot", "..", "You can start this again", "from menu") settings.setSetting('first_time_startup', 'false')
def onInit(self): self.log('onInit') self.background = self.getControl(101) self.getControl(102).setVisible(False) self.background.setVisible(True) updateDialog = xbmcgui.DialogProgress() updateDialog.create("FurkTrailers", "Initializing") self.currentIdx=settings.getSetting('last_trailer')
def traktJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): closeConnection = False conn = getTraktConnection() closeConnection = True #req = 'http://api.trakt.tv' + req req = 'http://streamcub.com/api/tmdb/?q=' + req req = req.replace("%%API_KEY%%",apikey) req = req.replace("%%USERNAME%%",settings.getSetting('trakt_login')) if method == 'POST': if not anon: args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') if passVersions: args['plugin_version'] = __settings__.getAddonInfo("version") args['media_center'] = 'xbmc' args['media_center_version'] = xbmc.getInfoLabel("system.buildversion") args['media_center_date'] = xbmc.getInfoLabel("system.builddate") jdata = json.dumps(args) print(req) print(jdata) conn.request('POST', req, jdata) elif method == 'GET': args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') jdata = json.dumps(args) conn.request('GET', req, jdata) print("trakt json url: "+req) #conn.go() try: response = conn.getresponse() raw = response.read() data = json.loads(raw) except: return None if 'status' in data: if data['status'] == 'failure': print("traktQuery: Error: " + str(data['error'])) if returnStatus: return data return None return data
def furkJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): apikey = settings.getSetting('furk_apikey') closeConnection = False conn = getTraktConnection() closeConnection = True req = 'http://api.streamcub.com/api/?fq=/api/' + req + '&username='******'username') + '&password='******'password') req = req.replace("api_key=%%API_KEY%%",'') if method == 'POST': if not anon: args['username'] = username args['password'] = pwd args['hide_watchlisted']= 'true' if passVersions: args['plugin_version'] = __settings__.getAddonInfo("version") args['media_center'] = 'xbmc' args['media_center_version'] = xbmc.getInfoLabel("system.buildversion") args['media_center_date'] = xbmc.getInfoLabel("system.builddate") jdata = json.dumps(args) print(req) print(jdata) conn.request('POST', req, jdata) elif method == 'GET': jdata = json.dumps(args) conn.request('GET', req, jdata) print(req) #print("furk json url: "+req) #conn.go() response = conn.getresponse() raw = response.read() try: data = json.loads(raw) except: data = None if data == None: return None if 'status' in data: if data['status'] == 'error': xbmcgui.Dialog().ok('Error', data['error']) if returnStatus: return data return data
def traktJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): if settings.getSetting("proxy") == 'true': http_proxy = settings.getSetting("proxyurl") https_proxy = settings.getSetting("proxyurl") proxyDict = { "http" : http_proxy, "https" : https_proxy } else: proxyDict = {} req = 'http://api.trakt.tv' + req req = req.replace("%%API_KEY%%", apikey) req = req.replace("%%USERNAME%%", settings.getSetting('trakt_login')) print req if method == 'POST': if not anon: args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') if passVersions: args['plugin_version'] = __settings__.getAddonInfo("version") args['media_center'] = 'xbmc' args['media_center_version'] = xbmc.getInfoLabel("system.buildversion") args['media_center_date' ] = xbmc.getInfoLabel("system.builddate") jdata = json.dumps(args) # print(req) # print(jdata) request = requests.post(req, data=jdata , proxies=proxyDict) elif method == 'GET': args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') request = requests.get(req, params=args, proxies=proxyDict) print request.encoding print 'Response: ' + request.content #data = response.json() try: #response = conn.getresponse() data = request.json() except: return None if 'status' in data: if data['status'] == 'failure': print("traktQuery: Error: " + str(data['error'])) if returnStatus: return data return None return data
def traktJsonRequest(method, req, args={}, returnStatus=False, anon=False, conn=False, silent=False, passVersions=False): conn = getTraktConnection() #req = 'http://api.rottentomatoes.com' + req req = req.replace("%%API_KEY%%",apikey) req = req.replace("%%USERNAME%%",settings.getSetting('trakt_login')) if method == 'POST': if not anon: args['username'] = settings.getSetting('trakt_login') args['password'] = settings.getSetting('trakt_password') if passVersions: args['plugin_version'] = __settings__.getAddonInfo("version") args['media_center'] = 'xbmc' args['media_center_version'] = xbmc.getInfoLabel("system.buildversion") args['media_center_date'] = xbmc.getInfoLabel("system.builddate") jdata = json.dumps(args) #print(req) #print(jdata) conn.request('POST', req, jdata) elif method == 'GET': jdata = json.dumps(args) conn.request('GET', req, jdata) #print("trakt json url: "+req) #conn.go() try: response = conn.getresponse() raw = response.read() data = json.loads(raw) except: return None if 'status' in data: if data['status'] == 'failure': print("traktQuery: Error: " + str(data['error'])) if returnStatus: return data return None return data
def AddonMenu(): #homescreen print 'Streamcub menu' url = sys.argv[0]+'?action=' #common.createListItem(params['content_type'],True,url + 'myFiles') #params['action'] = 'trakt_Menu' #trakt.traktAction(params) common.createListItem('Movies', True, url +'MovieMenu') common.createListItem('TV Shows', True, url +'ShowMenu') if settings.getSetting('adult_menu') == 'true': common.createListItem('Adult', True, url +'trakt_ShowAdultLists') common.createListItem('My Files',True,url + 'myFiles') #common.createListItem('Live TV',True,url + 'LiveTVMenu') common.createListItem('Search all torrents', True, url+'search') common.createListItem('Setup',False,url +'setup') common.createListItem('Account usage', True, url+'accountUsage') xbmcplugin.endOfDirectory(int(sys.argv[1]))
def SearchDialog(type, title, year, season, number, go=False): if go: updateDialog = xbmcgui.DialogProgress() updateDialog.create("Furk Library", "Searching") updateDialog.update(20, "searching", title) oneclick = settings.getSetting("oneclick") if type == 'Show': search = searcherLib.ShowSearch(title, season, number, oneclick) else: search = searcherLib.MovieSearch(title, year, oneclick) if len( search.qualities ) < 2 and search.oneClickSatisfied == False and search.mediatype == 'Show': common.Notification('Furk Library 2', 'making a deep search') search.deepsearch() if search.oneclick: if search.oneClickSatisfied: common.Notification('Furk Library 2', 'found one click') return search.best_quality_result.dir[ 'name'], search.best_quality_result.mediaUrl() elif search.best_quality_result: common.Notification('Furk Library 2', 'one click not found playing nearest') quality_select = 0 else: pass #see what are our options if search.valids > 1: dialog = xbmcgui.Dialog() quality_select = dialog.select('Select quality', search.quality_options()) elif search.valids == 1: common.Notification('Found only:', search.results[0].text.split(' ', 1)[0]) quality_select = 0 else: dialog = xbmcgui.Dialog() dialog.ok("Error", "Nothing found", "Try searching in FurkLib Plugin") quality_select = -1 if quality_select == -1: return None, None else: print 'Quality' + str(quality_select) return search.results[quality_select].dir['name'], search.results[ quality_select].mediaUrl()
def setup(): if FIRST_TIME_STARTUP: dialog = xbmcgui.Dialog() dialog.ok("Furk Library BY alicanlakot","..","Welcome to first time", "setup") if not check_sources_xml(MOVIES_PATH) or not check_sources_xml(TV_SHOWS_PATH): if dialog.yesno("Setup folder", "The directories used are not listed as video sources.", "Do you want to add them to sources.xml now?"): setup_sources() data = traktlib.testUser(settings.getSetting('trakt_login'),settings.getSetting('trakt_password')) if data['status'] =='failure' : common.Notification(data['status'],'Please check your username for Trakt and Furk in config') settings.openSettings() data = traktlib.testUser(settings.getSetting('trakt_login'),settings.getSetting('trakt_password')) common.Notification('Tried again:',data['status']) if len(settings.getSetting('furk_apikey')) < 5: furklib.login(settings.getSetting('furk_login'),settings.getSetting('furk_password')) dialog.ok("Furk Library BY alicanlakot","..","You can start this again", "from menu") settings.setSetting('first_time_startup', 'false')
def SearchDialog(type,title,year,season,number,go=False): if go: updateDialog = xbmcgui.DialogProgress() updateDialog.create("Furk Library", "Searching") updateDialog.update(20, "searching", title) oneclick = settings.getSetting("oneclick") if type == 'Show': search = searcherLib.ShowSearch(title, season, number, oneclick) else: search = searcherLib.MovieSearch(title, year, oneclick) if len(search.qualities) < 2 and search.oneClickSatisfied == False and search.mediatype=='Show': common.Notification('Furk Library 2', 'making a deep search') search.deepsearch() if search.oneclick: if search.oneClickSatisfied: common.Notification('Furk Library 2', 'found one click') return search.best_quality_result.dir['name'],search.best_quality_result.mediaUrl() elif search.best_quality_result: common.Notification('Furk Library 2', 'one click not found playing nearest') quality_select = 0 else: pass #see what are our options if search.valids > 1 : dialog = xbmcgui.Dialog() quality_select = dialog.select('Select quality', search.quality_options()) elif search.valids == 1: common.Notification('Found only:',search.results[0].text.split(' ',1)[0]) quality_select = 0 else: dialog = xbmcgui.Dialog() dialog.ok("Error", "Nothing found", "Try searching in FurkLib Plugin" ) quality_select = -1 if quality_select == -1: return None,None else: print 'Quality' + str(quality_select) return search.results[quality_select].dir['name'],search.results[quality_select].mediaUrl()
def addToXbmcLib(fg=None): totalAdded = 0 if settings.getSetting("auto_addImdb") == 'true': url = settings.getSetting("imdb_watchlist") imdbmovies = imdb.watchlist_movies(url, 0) traktlib.addMoviestoWatchlist(imdbmovies) imdbshows = imdb.watchlist_shows(url, 0) traktlib.addShowstoWatchList(imdbshows) if settings.getSetting("add_trending") == 'true': if fg == 'True': common.Notification('Getting:', 'Trending') movies = traktlib.getTrendingMoviesFromTrakt() if movies: for movie in movies: if not movie['watched'] and movie['watchers'] > 1: totalAdded = totalAdded + common.createMovieStrm(movie['title'], movie['year'], movie['imdb_id']) common.createMovieNfo(movie['title'], movie['year'], movie['imdb_id']) if settings.getSetting("add_recommended") == True: if fg == 'True': common.Notification('Getting:', 'Recommended') movies = traktlib.getRecommendedMoviesFromTrakt() if movies: for movie in movies: totalAdded = totalAdded + common.createMovieStrm(movie['title'], movie['year'], movie['imdb_id']) common.createMovieNfo(movie['title'], movie['year'], movie['imdb_id']) if fg == 'True': common.Notification('Getting:', 'Watchlist Movies') if settings.getSetting("add_watchlistmovies") == 'true': if fg == 'True': common.Notification('Getting:', 'Watchlist Movies') movies = traktlib.getWatchlistMoviesFromTrakt() for movie in movies: totalAdded = totalAdded + common.createMovieStrm(movie['title'], movie['year'], movie['imdb_id']) common.createMovieNfo(movie['title'], movie['year'], movie['imdb_id']) if settings.getSetting("add_watchlistshows") == 'true': if fg == 'True': common.Notification('Getting:', 'Watchlist Shows') totalAdded = totalAdded + getWatchlistShows() if fg == 'True': common.Notification('Total:', str(totalAdded)) return totalAdded
def SearchDialog(type,title,year,season,number,go=False): global quality_options global quality_urls global quality_cleanname global quality_ids global unquality_options global unquality_urls global unquality_cleanname global unquality_ids global unique_qualities if go: updateDialog = xbmcgui.DialogProgress() updateDialog.create("Streamcub Library", "Searching") updateDialog.update(20, "searching", title) title = common.CleanFileName(title) if type=='Movie': if year==0: query = '{0} -cam'.format(title) dirs = furklib.searchFurk(query) else: query = '{0} {1} -cam'.format(title,year) dirs = furklib.searchFurk(query) elif type=='Show': query = '''{0} S{1:0>2}E{2:0>2}'''.format(title, season, number) dirs = furklib.searchFurk(query) else: query = title dirs = furklib.searchFurk(title) if go: updateDialog.close() k = 0 found720p = False foundDvd = False foundAtleastOneCached = False if go: pDialog = xbmcgui.DialogProgress() pDialog.create('Searching for files') count = 0 if dirs: for file in dirs: # Test some variables if they exist try: file['is_ready'] file['size'] except: continue pass count = count + 1 percent = int(float(count * 100) / len(dirs)) text = "%s files found ->" % len(quality_options) for qual in unique_qualities: text = text + qual +',' if go: pDialog.update(percent, text) if pDialog.iscanceled(): pDialog.close() break if settings.getSetting('search_only_cached_files')=='true' and file['is_ready']=='0': continue id = file['info_hash'] dirname = file['name'] mysize = size(int(file['size'])) valid = False #print ('Dirname ' + dirname) dirname = common.CleanFileName(dirname) if type=='Show': myParser= guess_series(dirname) if myParser: myParser.parse() myName = myParser.name mySeason = myParser.season myNumber = myParser.episode myYear = 0 myNametoCheck = common.CleanFileName(myName).lower().replace(' ','') titletoCheck = common.CleanFileName(title).lower().replace(' ','') if myParser.quality: myquality = myParser.quality movie_name = '''{0} {1} S{2:0>2}E{3:0>2}'''.format(myquality,myNametoCheck, mySeason, myNumber) if int(mySeason) <> int(season): break elif titletoCheck == myNametoCheck and int(mySeason)==int(season) and int(myNumber)==int(number) and myquality.value>0: valid= True #Notification(mycheck.lower(),query.lower()) if valid: if file['is_ready']=='0': movie_name = '[COLOR red]' + dirname + '[/COLOR]' else: movie_name = dirname foundAtleastOneCached = True #Notification('Quality:',str(myquality)) quality_options.append('[' + mysize + '] '+str(myquality) + ' ' + movie_name) quality_ids.append(file['info_hash']) quality_cleanname.append(dirname) quality_urls.append(None) if not str(myquality) in unique_qualities: unique_qualities.append(str(myquality)) else: # Notification ('cannot parse' , dirname) continue elif type=='Movie': valid = False parser = MovieParser() parser.data = dirname parser.parse() myName = parser.name myYear = parser.year myquality = parser.quality movie_name = '' if file['is_ready']=='0': if file.has_key('type') and file['type'] == 'video': movie_name = '[COLOR red]' + str(myquality) + ' ' + dirname + '[/COLOR]' else: continue else: movie_name = str(myquality) + ' ' + dirname movie_name2 = str(myquality) + ' ' + title.strip() + ' (' + str(year) + ')' if int(settings.getSetting('file_size_filter')) > 0 and int(file['size']) > (int(settings.getSetting('file_size_filter')) * 1024 * 1024 * 1024): continue if year==0 and title.lower() in myName.lower(): valid = True if not myYear: myYear = 0 valid = False title = unicodedata.normalize('NFKD',unicode(title,'utf-8')).encode('ASCII', 'ignore') #print 'T:' + title.lower() #print 'M:' + myName.lower() if title.lower() in myName.lower() and myquality.value>250: valid = True if valid: quality_options.append('[' + mysize + '] '+ movie_name) quality_cleanname.append(dirname) quality_ids.append(file['info_hash']) if not str(myquality) in unique_qualities: unique_qualities.append(str(myquality)) else: unquality_options.append(str(myquality) + ' ' + dirname) unquality_ids.append(file['info_hash']) unquality_cleanname.append(dirname) if not foundAtleastOneCached and type=='Show': season_episode = "s%.2de%.2d" % (int(season), int(number)) season_episode2 = "%d%.2d" % (int(season), int(number)) tv_show_season = "%s season %d" % (title, int(season)) tv_show_episode = "%s %s" % (title, season_episode) dirs2 = [] try: dirs2.extend(furklib.searchFurk(tv_show_episode)) except: pass try: dirs2.extend(furklib.searchFurk(tv_show_season)) except: pass # dirs2 = files titletoCheck = re.sub(r'\([^)]*\)', '', title) titletoCheck = common.CleanFileName(titletoCheck).lower() dir_names = [] dir_ids = [] count = 0 for d in dirs2: count = count + 1 percent = int(float(count * 100) / len(dirs2)) text = "%s files found ->" % len(quality_options) for qual in unique_qualities: text = text + qual +',' if go: pDialog.update(percent, text) if pDialog.iscanceled(): pDialog.close() break if settings.getSetting('search_only_cached_files')=='true' and d['is_ready']=='0': continue dirnametoCheck=common.CleanFileName(d['name']).lower() print 'title:'+titletoCheck print 'dirname:'+dirnametoCheck if dirnametoCheck.startswith(titletoCheck) and 'season' in dirnametoCheck and str(season) in dirnametoCheck: print 'filebyfile for:'+dirnametoCheck filebyfile(False,d['info_hash'],d['name'],title,year,season,number) for d in dirs2: if d['is_ready']=='0': continue if not (d['name'].lower().startswith(title.lower())): continue dir_names.append(d['name']) dir_ids.append(d['info_hash']) if len(dir_names)>0: idx = 0 for dirname in dir_names: id = dir_ids[idx] idx = idx + 1 filebyfile(False,id,dirname,title,year,season,number) if pDialog.iscanceled(): pDialog.close() break else: pass if go: pDialog.close() if len(quality_options) >= 1: dialog = xbmcgui.Dialog() quality_select = dialog.select('Select quality', quality_options) else: quality_select = -1 if len(quality_options) == 0: dialog = xbmcgui.Dialog() dialog.ok("Error", "Nothing found", "" ) # common.Notification ('Selected' , str(quality_select)) if quality_select == -1: return None,None else: if type=='Show': try: myurl = quality_urls[quality_select] if myurl: myname = quality_cleanname[quality_select] else: raise Exception("empty url") except: myid = quality_ids[quality_select] files = furklib.fileInfo(myid) if not files: download(myid) return None,None k = k + 1 for f in files: myname = f['name'] #print myname if 'sample' in myname.lower(): continue if myname.endswith('avi') or myname.endswith('mkv') or myname.endswith('mp4') or myname.endswith('wmv'): myurl = f['url_dl'] break else: continue elif type=='Movie': myid = quality_ids[quality_select] files = furklib.fileInfo(myid) myurl = None if not files: download(myid) return None,None for f in files: myname = f['name'].lower() #print myname if 'sample' in myname or int(f['length']) < 30: continue if myname.endswith('avi') or myname.endswith('mkv') or myname.endswith('mp4') or myname.endswith('iso') or myname.endswith('wmv'): myurl = f['url_dl'] myname = f['name'] break else: continue #common.Notification('Found',myname) if myurl: return myname,myurl else: common.Notification('Not Found' , 'Please try again') return None,None
import sys, urllib, time, re, os import xbmc, xbmcaddon, xbmcgui, xbmcplugin import context from utils import settings # Plugin constants __plugin__ = 'Furk.net Library X' __author__ = 'Alican Lakot' __url__ = 'http://www.furk.net/?INVITE=1216084' __version__ = '1.2.0' FIRST_TIME_STARTUP = settings.first_time_startup() print "[PLUGIN] '%s: version %s' initialized!" % (__plugin__, __version__) if settings.getSetting('tv_show_custom_directory') == "true": TV_SHOWS_PATH = settings.getSetting('tv_show_directory') else: TV_SHOWS_PATH = os.path.join(xbmc.translatePath('special://profile/addon_data/plugin.video.furklibraryx/tvshows'), '') if settings.getSetting('movie_custom_directory') == "true": MOVIES_PATH = settings.getSetting('movie_directory') else: MOVIES_PATH = os.path.join(xbmc.translatePath('special://profile/addon_data/plugin.video.furklibraryx/movies'), '') CACHE_PATH= os.path.join(xbmc.translatePath('special://profile/addon_data/plugin.video.furklibraryx/traktcache'), '') try: MYCONTEXT = context.context().getContext() except: MYCONTEXT = 'video'
import sys, urllib, time, re, os import xbmc, xbmcaddon, xbmcgui, xbmcplugin import context from utils import settings # Plugin constants __plugin__ = 'Furk.net Library X' __author__ = 'Alican Lakot' __url__ = 'http://www.furk.net/?INVITE=1216084' __version__ = '1.2.0' FIRST_TIME_STARTUP = settings.first_time_startup() print "[PLUGIN] '%s: version %s' initialized!" % (__plugin__, __version__) if settings.getSetting('tv_show_custom_directory') == "true": TV_SHOWS_PATH = settings.getSetting('tv_show_directory') else: TV_SHOWS_PATH = os.path.join( xbmc.translatePath( 'special://profile/addon_data/plugin.video.furklibraryx/tvshows'), '') if settings.getSetting('movie_custom_directory') == "true": MOVIES_PATH = settings.getSetting('movie_directory') else: MOVIES_PATH = os.path.join( xbmc.translatePath( 'special://profile/addon_data/plugin.video.furklibraryx/movies'), '')
def traktAction(params): if(params['action'] == 'trakt_Menu'): displayTraktMenu() elif(params['action'] == 'trakt_SearchMovies'): # Search keyboard = xbmc.Keyboard(settings.getSetting('last_movie_search'), 'Search') keyboard.doModal() if keyboard.isConfirmed(): query = keyboard.getText() settings.setSetting('last_movie_search', query) movies = traktlib.getMovieInfobySearch(unicode(query)) for movie in movies: common.createMovieListItemTrakt(movie,totalItems = len(movies)) common.endofDir() elif(params['action'] == 'trakt_SearchShows'): # Search keyboard = xbmc.Keyboard(settings.getSetting('last_tv_show_search'), 'Search') keyboard.doModal() if keyboard.isConfirmed(): query = keyboard.getText() settings.setSetting('last_tv_show_search', query) shows = traktlib.getShowInfobySearch(unicode(query)) for show in shows: common.createShowListItemTrakt(show,totalItems = len(shows)) common.endofDir() elif(params['action'] == 'trakt_SeenRate'): imdbid = params['imdbid'] traktSeenRate(imdbid) elif(params['action'] == 'trakt_DismissMovie'): imdbid = params['imdbid'] traktDismissMovie(imdbid) elif(params['action'] == 'trakt_MovieGenres'): displayGenres(type='Movie') elif(params['action'] == 'trakt_ShowGenres'): displayGenres(type='Show') elif(params['action'] == 'trakt_ShowLists'): displayLists(type=params['type']) elif(params['action'] == 'trakt_ShowAdultLists'): displayAdultGenres() elif(params['action'] == 'trakt_SearchCache'): query = params['query'] searcher.SearchFromMenu(query) elif(params['action'] == 'trakt_RecommendedShows'): try: genre = params['genre'] except: genre = None if genre: displayRecommendedShows(genre) else : url = sys.argv[0]+'?action=trakt_ShowGenres' common.createListItem('Filter by Genre', True, url) displayRecommendedShows(genre) elif(params['action'] == 'trakt_listfeeds'): myfeeds = furklib.myFeeds()['feeds'] myfeeds = sorted(myfeeds,key=lambda feed: feed['name']) url = sys.argv[0]+'?action=trakt_addfeeds' common.createListItem('Add Feeds from trakt', True, url) for feed in myfeeds: url = sys.argv[0]+'?action=trakt_MovieGenres' common.createListItem(feed['name'], True, url) common.endofDir() elif(params['action'] == 'trakt_addfeeds'): myfeeds = furklib.myFeeds()['feeds'] shows = traktlib.getWatchlistShowsfromTrakt() progress = traktlib.getProgress() series = [] for current in progress: series.append(current['show']) shows = shows + series for show in shows: check = [feed for feed in myfeeds if feed['name'] == show['title']] if len(check)==0: furklib.addFeed(show['title']) url = sys.argv[0]+'?action=trakt_MovieGenres' common.createListItem(show['title'], False, '') common.endofDir() elif(params['action'] == 'trakt_RecommendedMovies'): try: genre = params['genre'] except: genre = None if genre: displayRecommendedMovies(genre) else : url = sys.argv[0]+'?action=trakt_MovieGenres' common.createListItem('Filter by Genre', True, url) displayRecommendedMovies(genre) elif(params['action'] == 'trakt_Seasons'): tvdbid = params['tvdbid'] displaySeasons(tvdbid) elif(params['action'] == 'trakt_Episodes'): tvdbid = params['tvdbid'] season = params['season'] displayEpisodes(season, tvdbid) elif(params['action'] == 'trakt_AddShowtoWatchlist'): tvdbid = params['tvdbid'] addShowtoWatchlist(tvdbid) elif(params['action'] == 'trakt_AddMovietoWatchlist'): imdbid = params['imdbid'] addMovietoWatchlist(imdbid) elif(params['action'] == 'trakt_RemoveMoviefromWatchlist'): imdbid = params['imdbid'] response = traktlib.removeMoviefromWatchlist(imdbid) common.traktResponse(response) elif(params['action'] == 'trakt_DismissShow'): tvdbid = params['tvdbid'] traktDismissShow(tvdbid) elif(params['action'] == 'trakt_SetShowSeen'): tvdbid = params['tvdbid'] try: season = params['season'] episode = params['episode'] except: season = 100 episode = 100 response = traktSeenShow(tvdbid,season,episode) elif(params['action'] == 'trakt_TrendingMovies'): xbmcplugin.setContent(int(sys.argv[1]), 'movies') movies = traktlib.getTrendingMoviesFromTrakt() for movie in movies: common.createMovieListItemTrakt(movie,totalItems = len(movies)) common.endofDir() elif(params['action'] == 'trakt_TrendingShows'): xbmcplugin.setContent(int(sys.argv[1]), 'tvshows') shows = traktlib.getTrendingShowsFromTrakt() progressShows = calculateProgress() for show in shows: if show['title'] in progressShows: common.createShowListItemTrakt(show,len(shows))#,progressShows[show['title']][0],progressShows[show['title']][1]) else: common.createShowListItemTrakt(show,totalItems = len(shows)) common.endofDir() elif(params['action'] == 'trakt_Progress'): displayProgress() elif(params['action'] == 'trakt_getList'): user=params['user'] slug=params['slug'] displayList(user,slug) else: common.Notification('Action Not found:' , params['action'])
def showAccountPicture(): xbmc.executebuiltin("ShowPicture(http://streamcub.com/api/bwusage.php?username="******"&password="******")"); return
import sys, urllib, time, re, os import xbmc, xbmcaddon, xbmcgui, xbmcplugin import context from utils import settings # Plugin constants __plugin__ = 'Streamcub Library' __author__ = 'Streamcub Team' __url__ = 'http://www.streamcub.com' __version__ = '1.3.4' print "[PLUGIN] '%s: version %s' initialized!" % (__plugin__, __version__) if settings.getSetting('tv_show_custom_directory') == "true": TV_SHOWS_PATH = settings.getSetting('tv_show_directory') else: TV_SHOWS_PATH = os.path.join(xbmc.translatePath('special://profile/addon_data/plugin.video.streamcub/tvshows'), '') if settings.getSetting('movie_custom_directory') == "true": MOVIES_PATH = settings.getSetting('movie_directory') else: MOVIES_PATH = os.path.join(xbmc.translatePath('special://profile/addon_data/plugin.video.streamcub/movies'), '') CACHE_PATH= os.path.join(xbmc.translatePath('special://profile/addon_data/plugin.video.streamcub/traktcache'), '') try: MYCONTEXT = context.context().getContext() except: MYCONTEXT = 'video'