2525__addon__ = xbmcaddon .Addon ()
2626ADDONVERSION = __addon__ .getAddonInfo ('version' )
2727ADDONNAME = __addon__ .getAddonInfo ('name' )
28+ ADDONID = __addon__ .getAddonInfo ('id' )
2829ADDONICON = xbmc .translatePath (__addon__ .getAddonInfo ('icon' ))
2930ADDONPROFILE = xbmc .translatePath (__addon__ .getAddonInfo ('profile' ))
3031
@@ -170,7 +171,7 @@ def _post_data(self, params=None):
170171 return urllib .urlencode (params )
171172
172173 def _request (self , url , params = None ):
173- xbmc .log ('{0}: REQUEST: {1} {2}' .format (ADDONNAME , url , params ))
174+ xbmc .log ('{0}: REQUEST: {1} {2}' .format (ADDONID , url , params ))
174175 self ._cookies_init ()
175176
176177 req = urllib2 .Request (self .HOST + url )
@@ -230,7 +231,6 @@ def clean_all(self):
230231class KodiConfig (object ):
231232 @classmethod
232233 def soap_get_auth (cls ):
233-
234234 return {
235235 'token' : __addon__ .getSetting ('_token' ),
236236 'token_sid' : __addon__ .getSetting ('_token_sid' ),
@@ -285,6 +285,13 @@ def get_web_port(cls):
285285 return to_int (__addon__ .getSetting ('port' ))
286286
287287
288+ class SoapConfig (object ):
289+ def __init__ (self ):
290+ self .language = to_int (__addon__ .getSetting ('language' )) # 0 rus, 1 orig
291+ self .subtitles_language = to_int (__addon__ .getSetting ('subtitles_language' )) # 0 rus, 1 orig
292+ self .quality = to_int (__addon__ .getSetting ('quality' )) # 0 SD, 1 720p, 2 FullHD, 3 2K, 4 4K
293+
294+
288295class SoapAuth (object ):
289296 AUTH_URL = '/auth/'
290297 CHECK_URL = '/auth/check/'
@@ -359,7 +366,7 @@ class SoapApi(object):
359366 def __init__ (self ):
360367 self .client = SoapHttpClient ()
361368 self .auth = SoapAuth (self .client )
362- # self.config = SoapConfig()
369+ self .config = SoapConfig ()
363370
364371 self .auth .auth ()
365372
@@ -379,12 +386,35 @@ def episodes(self, sid):
379386 data = data ['episodes' ]
380387 return map (lambda row : self .get_episode (row ), data )
381388
382- @staticmethod
383- def get_episode (row ):
384- file = row ['files' ][0 ] # TODO: search for the best file
385- return {'season' : row ['season' ], 'episode' : row ['episode' ], 'id' : file ['eid' ], 'hash' : file ['hash' ]}
389+ def get_episode (self , row ):
390+ f = self .get_best_file (row ['files' ])
391+ return {'season' : row ['season' ], 'episode' : row ['episode' ], 'id' : f ['eid' ], 'hash' : f ['hash' ]}
392+
393+ def get_best_file (self , files ):
394+ return max (files , key = self .get_file_order )
395+
396+ def get_file_order (self , f ):
397+ translate = int (f ['translate' ]) - 1 # from 0
398+ quality = int (f ['quality' ]) - 1 # from 0
399+
400+ translate_matrix = \
401+ [
402+ [- 4 , - 3 , - 1 , 0 ], # eng
403+ [- 1 , - 1 , - 3 , - 2 ], # rus with eng subs
404+ [- 2 , - 3 , - 1 , - 1 ], # eng with rus subs
405+ [ 0 , - 1 , - 3 , - 4 ], # rus
406+ ]
407+
408+ config_translate_index = 2 * self .config .language * 2 + self .config .subtitles_language
409+ translate_order = translate_matrix [translate ][config_translate_index ]
410+ quality_order = \
411+ (quality - self .config .quality ) \
412+ if (quality <= self .config .quality ) \
413+ else (self .config .quality - quality - 10 )
414+ return 100 * translate_order + quality_order # translation has priority over quality
386415
387416 def get_episode_url (self , sid , eid , ehash ):
417+ # TODO: warn if quality is bigger than configured
388418 myhash = hashlib .md5 (
389419 str (self .client .token ) +
390420 str (eid ) +
@@ -405,13 +435,13 @@ class WebHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
405435
406436 def do_GET (self ):
407437 # Parse query data & params to find out what was passed
408- xbmc .log ('%s: Serve %s' % (ADDONNAME , self .path ))
438+ xbmc .log ('%s: Serve %s' % (ADDONID , self .path ))
409439 parsed_params = urlparse .urlparse (self .path )
410440 query_parsed = urlparse .parse_qs (parsed_params .query )
411441 path = urllib .unquote (parsed_params .path )
412442
413443 if path == '/' :
414- xbmc .log ('%s: Listing shows' % ADDONNAME )
444+ xbmc .log ('%s: Listing shows' % ADDONID )
415445 shows = self .server .api .my_shows ()
416446
417447 self .out_folders (shows ,
@@ -421,7 +451,7 @@ def do_GET(self):
421451 show = self .match .group (1 )
422452 sid = query_parsed ['id' ][0 ]
423453
424- xbmc .log ('%s: Listing episodes of \' %s\' ' % (ADDONNAME , show ))
454+ xbmc .log ('%s: Listing episodes of \' %s\' ' % (ADDONID , show ))
425455 episodes = self .server .api .episodes (sid )
426456
427457 self .out_files (episodes ,
@@ -435,10 +465,10 @@ def do_GET(self):
435465 eid = query_parsed ['id' ][0 ]
436466 ehash = query_parsed ['hash' ][0 ]
437467
438- xbmc .log ('%s: Requested episode %s from season %s of \' %s\' ' % (ADDONNAME , episode , season , show ))
468+ xbmc .log ('%s: Requested episode %s from season %s of \' %s\' ' % (ADDONID , episode , season , show ))
439469 url = self .server .api .get_episode_url (sid , eid , ehash )
440470
441- xbmc .log ("%s: Redirect to '%s'" % (ADDONNAME , url ))
471+ xbmc .log ("%s: Redirect to '%s'" % (ADDONID , url ))
442472 self .send_response (301 )
443473 self .send_header ('Location' , url )
444474 self .end_headers ()
@@ -481,5 +511,5 @@ def out_elements(self, elements):
481511
482512
483513if __name__ == "__main__" :
484- xbmc .log ('%s: Version %s started' % (ADDONNAME , ADDONVERSION ))
514+ xbmc .log ('%s: Version %s started' % (ADDONID , ADDONVERSION ))
485515 Main ()
0 commit comments