mirror of
https://github.com/morpheus65535/bazarr
synced 2025-03-03 18:15:50 +00:00
reduce XMLRPC requests to opensubtitles server
- use cached token instead of logging in every time when search for subtitles - delete authentication token in case of account modification
This commit is contained in:
parent
4bc21e645a
commit
32bd30e3e7
2 changed files with 38 additions and 43 deletions
|
@ -65,7 +65,7 @@ from notifier import send_notifications, send_notifications_movie
|
|||
from check_update import check_and_apply_update
|
||||
from subliminal_patch.extensions import provider_registry as provider_manager
|
||||
from subliminal_patch.core import SUBTITLE_EXTENSIONS
|
||||
|
||||
from subliminal.cache import region
|
||||
|
||||
scheduler = Scheduler()
|
||||
|
||||
|
@ -1537,6 +1537,12 @@ def save_settings():
|
|||
else:
|
||||
settings_opensubtitles_skip_wrong_fps = 'True'
|
||||
|
||||
if (settings.opensubtitles.username != request.forms.get('settings_opensubtitles_username') or
|
||||
settings.opensubtitles.password != request.forms.get('settings_opensubtitles_password') or
|
||||
settings.opensubtitles.vip != text_type(settings_opensubtitles_vip)):
|
||||
region.delete("os_token")
|
||||
region.delete("os_server_url")
|
||||
|
||||
settings.addic7ed.username = request.forms.get('settings_addic7ed_username')
|
||||
settings.addic7ed.password = request.forms.get('settings_addic7ed_password')
|
||||
settings.addic7ed.random_agents = text_type(settings_addic7ed_random_agents)
|
||||
|
|
|
@ -144,10 +144,8 @@ class OpenSubtitlesProvider(ProviderRetryMixin, _OpenSubtitlesProvider):
|
|||
return ServerProxy(url, SubZeroRequestsTransport(use_https=self.use_ssl, timeout=timeout or self.timeout,
|
||||
user_agent=os.environ.get("SZ_USER_AGENT", "Sub-Zero/2")))
|
||||
|
||||
def log_in(self, server_url=None):
|
||||
if server_url:
|
||||
self.terminate()
|
||||
|
||||
def log_in_url(self, server_url):
|
||||
self.token = None
|
||||
self.server = self.get_server_proxy(server_url)
|
||||
|
||||
response = self.retry(
|
||||
|
@ -161,6 +159,25 @@ class OpenSubtitlesProvider(ProviderRetryMixin, _OpenSubtitlesProvider):
|
|||
logger.debug('Logged in with token %r', self.token[:10]+"X"*(len(self.token)-10))
|
||||
|
||||
region.set("os_token", bytearray(self.token, encoding='utf-8'))
|
||||
region.set("os_server_url", bytearray(server_url, encoding='utf-8'))
|
||||
|
||||
def log_in(self):
|
||||
logger.info('Logging in')
|
||||
|
||||
try:
|
||||
self.log_in_url(self.vip_url if self.is_vip else self.default_url)
|
||||
|
||||
except Unauthorized:
|
||||
if self.is_vip:
|
||||
logger.info("VIP server login failed, falling back")
|
||||
try:
|
||||
self.log_in_url(self.default_url)
|
||||
except Unauthorized:
|
||||
pass
|
||||
|
||||
if not self.token:
|
||||
logger.error("Login failed, please check your credentials")
|
||||
raise Unauthorized
|
||||
|
||||
def use_token_or_login(self, func):
|
||||
if not self.token:
|
||||
|
@ -173,46 +190,18 @@ class OpenSubtitlesProvider(ProviderRetryMixin, _OpenSubtitlesProvider):
|
|||
return func()
|
||||
|
||||
def initialize(self):
|
||||
if self.is_vip:
|
||||
self.server = self.get_server_proxy(self.vip_url)
|
||||
logger.info("Using VIP server")
|
||||
else:
|
||||
self.server = self.get_server_proxy(self.default_url)
|
||||
|
||||
logger.info('Logging in')
|
||||
|
||||
token_cache = region.get("os_token")
|
||||
if token_cache is not NO_VALUE:
|
||||
try:
|
||||
token = token_cache.decode("utf-8")
|
||||
logger.debug('Trying previous token: %r', token[:10]+"X"*(len(token)-10))
|
||||
checked(lambda: self.server.NoOperation(token))
|
||||
self.token = token
|
||||
logger.debug("Using previous login token: %r", token[:10]+"X"*(len(token)-10))
|
||||
return
|
||||
except (NoSession, Unauthorized):
|
||||
logger.debug('Token not valid.')
|
||||
pass
|
||||
url_cache = region.get("os_server_url")
|
||||
|
||||
try:
|
||||
self.log_in()
|
||||
|
||||
except Unauthorized:
|
||||
if self.is_vip:
|
||||
logger.info("VIP server login failed, falling back")
|
||||
self.log_in(self.default_url)
|
||||
if self.token:
|
||||
return
|
||||
|
||||
logger.error("Login failed, please check your credentials")
|
||||
if token_cache is not NO_VALUE and url_cache is not NO_VALUE:
|
||||
self.token = token_cache.decode("utf-8")
|
||||
self.server = self.get_server_proxy(url_cache.decode("utf-8"))
|
||||
logger.debug("Using previous login token: %r", self.token[:10] + "X" * (len(self.token) - 10))
|
||||
else:
|
||||
self.server = None
|
||||
self.token = None
|
||||
|
||||
def terminate(self):
|
||||
if self.token:
|
||||
try:
|
||||
checked(lambda: self.server.LogOut(self.token))
|
||||
except:
|
||||
logger.error("Logout failed: %s", traceback.format_exc())
|
||||
|
||||
self.server = None
|
||||
self.token = None
|
||||
|
||||
|
|
Loading…
Reference in a new issue