def __get_resolvers(self, include_disabled, include_universal, include_popups): if include_universal is None: include_universal = common.get_setting('allow_universal') == "true" if include_popups is None: include_popups = common.get_setting('allow_popups') == "true" klasses = resolveurl.relevant_resolvers( self._domain, include_universal=include_universal, include_popups=include_popups, include_external=True, include_disabled=include_disabled, order_matters=True) resolvers = [] for klass in klasses: if klass in resolver_cache: common.logger.log_debug('adding resolver from cache: %s' % klass) resolvers.append(resolver_cache[klass]) else: common.logger.log_debug('adding resolver to cache: %s' % klass) resolver_cache[klass] = klass() resolvers.append(resolver_cache[klass]) return resolvers
def relevant_resolvers(domain=None, include_universal=None, include_popups=None, include_external=False, include_disabled=False, order_matters=False): if include_external: load_external_plugins() if isinstance(domain, six.string_types): domain = domain.lower() if include_universal is None: include_universal = common.get_setting('allow_universal') == "true" if include_popups is None: include_popups = common.get_setting('allow_popups') == "true" if include_popups is False: common.logger.log_debug('Resolvers that require popups have been disabled') classes = ResolveUrl.__class__.__subclasses__(ResolveUrl) + ResolveUrl.__class__.__subclasses__(ResolveGeneric) relevant = [] for resolver in classes: if include_disabled or resolver._is_enabled(): if (include_universal or not resolver.isUniversal()) and (include_popups or not resolver.isPopup()): if domain is None or ((domain and any(domain in res_domain.lower() for res_domain in resolver.domains)) or '*' in resolver.domains): relevant.append(resolver) if order_matters: relevant.sort(key=lambda x: x._get_priority()) common.logger.log_debug('Relevant Resolvers: %s' % relevant) return relevant
def do_recaptcha(captcha_url): common.logger.log_debug('Google ReCaptcha: %s' % (captcha_url)) if captcha_url.startswith('//'): captcha_url = 'http:' + captcha_url personal_nid = common.get_setting('personal_nid') if personal_nid: headers = {'Cookie': 'NID=' + personal_nid} else: headers = {} html = net.http_GET(captcha_url, headers=headers).content part = re.search("challenge \: \\'(.+?)\\'", html) captcha_img = 'http://www.google.com/recaptcha/api/image?c=' + part.group(1) solution = get_response(captcha_img) return {'recaptcha_challenge_field': part.group(1), 'recaptcha_response_field': solution}
def __get_resolvers(self, include_disabled, include_universal): if include_universal is None: include_universal = common.get_setting('allow_universal') == "true" klasses = resolveurl.relevant_resolvers(self._domain, include_universal=include_universal, include_external=True, include_disabled=include_disabled, order_matters=True) resolvers = [] for klass in klasses: if klass in resolver_cache: common.logger.log_debug('adding resolver from cache: %s' % (klass)) resolvers.append(resolver_cache[klass]) else: common.logger.log_debug('adding resolver to cache: %s' % (klass)) resolver_cache[klass] = klass() resolvers.append(resolver_cache[klass]) return resolvers
def pick_source(sources, auto_pick=None): if auto_pick is None: auto_pick = common.get_setting('auto_pick') == 'true' if len(sources) == 1: return sources[0][1] elif len(sources) > 1: if auto_pick: return sources[0][1] else: result = xbmcgui.Dialog().select(common.i18n('choose_the_link'), [str(source[0]) if source[0] else 'Unknown' for source in sources]) if result == -1: raise ResolverError(common.i18n('no_link_selected')) else: return sources[result][1] else: raise ResolverError(common.i18n('no_video_link'))
def do_recaptcha(captcha_url): common.logger.log_debug('Google ReCaptcha: %s' % (captcha_url)) if captcha_url.startswith('//'): captcha_url = 'http:' + captcha_url personal_nid = common.get_setting('personal_nid') if personal_nid: headers = {'Cookie': 'NID=' + personal_nid} else: headers = {} html = net.http_GET(captcha_url, headers=headers).content part = re.search("challenge \: \\'(.+?)\\'", html) captcha_img = 'http://www.google.com/recaptcha/api/image?c=' + part.group( 1) solution = get_response(captcha_img) return { 'recaptcha_challenge_field': part.group(1), 'recaptcha_response_field': solution }
def get_setting(cls, key): return common.get_setting('%s_%s' % (cls.__name__, key))
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. """ import urllib2 import urlparse import re import urllib import traceback import resolveurl from resolveurl import common resolver_cache = {} ALLOW_POPUPS = False if common.get_setting('allow_popups') == "false" else True class HostedMediaFile: """ This class represents a piece of media (file or stream) that is hosted somewhere on the internet. It may be instantiated with EITHER the url to the web page associated with the media file, OR the host name and a unique ``media_id`` used by the host to point to the media. For example:: HostedMediaFile(url='http://youtube.com/watch?v=ABC123XYZ') represents the same piece of media as::