kodi-czsk/plugin.video.sosac.ph

Chyba doplňku Sosáč (Subscription)

Closed this issue · 14 comments

Ahoj,

chyba se projevuje pokud mám v subscription více jak jeden seriál.

Vyzkoušeno např. na seriálech Narcos, Preacher:

  • pokud mám v subscription jen seriál Narcos, tak chyba nenastane
  • pokud mám v subscription jen seriál Preacher, tak chyba nenastane
  • pokud mám v subscription oba dva seriály, tak chyba nastane

Tímto postupem jsem zkoušel i jiný seriály a vzorec je stejný. Pokud mám v subscription více jak jeden seriál, tak nastane chyba a subscription není funkční.

Vyzkoušeno na čistých instalacích pouze s addonem Sosáč.

LOG KODI 15.2

-->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.TypeError'>
Error Contents: string indices must be integers, not str
Traceback (most recent call last):
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/service.py", line 38, in
XBMCSosac(SosacContentProvider(reverse_eps=reverse_eps), settings, addon).service()
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 65, in service
self.evalSchedules()
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 95, in evalSchedules
refresh = int(sub['refresh'])
TypeError: string indices must be integers, not str
-->End of Python script error report<--

LOG KODI 16.1

-->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.AttributeError'>
Error Contents: 'dict' object has no attribute 'encode'
Traceback (most recent call last):
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/service.py", line 38, in
XBMCSosac(SosacContentProvider(reverse_eps=reverse_eps), settings, addon).service()
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 65, in service
self.evalSchedules()
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 108, in evalSchedules
'refresh': sub['refresh']
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 224, in run_custom
if self.add_item(params):
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 153, in add_item
item_url = util._create_plugin_url(arg, 'plugin://' + self.addon_id + '/')
File "/var/mobile/Library/Preferences/Kodi/addons/script.module.stream.resolver/lib/util.py", line 149, in _create_plugin_url
value = value.encode('ascii', 'ignore')
AttributeError: 'dict' object has no attribute 'encode'
-->End of Python script error report<--

LOG KODI 17b1

-->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.TypeError'>
Error Contents: string indices must be integers, not str
Traceback (most recent call last):
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/service.py", line 38, in
XBMCSosac(SosacContentProvider(reverse_eps=reverse_eps), settings, addon).service()
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 65, in service
self.evalSchedules()
File "/var/mobile/Library/Preferences/Kodi/addons/plugin.video.sosac.ph/resources/lib/sutils.py", line 95, in evalSchedules
refresh = int(sub['refresh'])
TypeError: string indices must be integers, not str
-->End of Python script error report<--

zbyna commented
19:16:17 T:5344  NOTICE: Starting Kodi (16.1 Git:20160424-c327c53). Platform: Windows NT x86 32-bit
19:16:17 T:5344  NOTICE: Using Release Kodi x32 build

Další upřesnění s debug hodnotami, vypadá to, že poslední seriál přidaný do subscriptu nemá hodnotu typu slovník:

02:53:55 T:6344  NOTICE: ['SOSAC Loading subscriptions']
02:53:55 T:6344  NOTICE: "subs v get_subs : " {'http://tv.prehraj.me/cs/detail/kravataci': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf'}
02:53:55 T:6344  NOTICE: "val v get_subs : " {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}
02:53:55 T:6344  NOTICE: "subs v evalSchedules: " {'http://tv.prehraj.me/cs/detail/kravataci': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf'}
02:53:55 T:6344  NOTICE: "sub[refresh] v evalSchedules : " {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}

a vše končí chybou:

02:53:59 T:6344  NOTICE: "sub[refresh] v evalSchedules : " Heuréka – město divů
02:53:59 T:6344   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.TypeError'>
                                            Error Contents: string indices must be integers, not str
                                            Traceback (most recent call last):
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\service.py", line 38, in <module>
                                                XBMCSosac(SosacContentProvider(reverse_eps=reverse_eps), settings, __addon__).service()
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\resources\lib\sutils.py", line 67, in service
                                                self.evalSchedules()
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\resources\lib\sutils.py", line 99, in evalSchedules
                                                refresh = int(sub['refresh'])
                                            TypeError: string indices must be integers, not str
                                            -->End of Python script error report<--

pokud v def get_subs(self): zakomentuju break

            for val in subs.values():
                xbmc.log('"val v get_subs : " ' + str(val)) # zbyna
                if not isinstance(val, dict):
                    xbmc.log('"migrate v get_subs : " ' + str(migrate)) # zbyna
                    migrate = True
                #break
            if migrate:
                util.info('Migrating subscriptions to new DB format')
                new_subs = {}
                for url, name in subs.iteritems():
                    new_subs[url] = {'name': name, 'refresh': '1', 'last_run': -1}
                self.set_subs(new_subs)
                subs = new_subs
            self.subs = subs

proběhne migrace na nový db formát, opraví to špatnou položku, ale naboří tu dobrou a vše končí jinou chybou, takže tudy asi cesta nepovede 😄 :

03:19:12 T:7084  NOTICE: ['SOSAC Loading subscriptions']
03:19:12 T:7084  NOTICE: "subs v get_subs : " {'http://tv.prehraj.me/cs/detail/kravataci': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf'}
03:19:12 T:7084  NOTICE: "val v get_subs : " {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}
03:19:12 T:7084  NOTICE: "val v get_subs : " Heuréka – město divů
03:19:12 T:7084  NOTICE: "migrate v get_subs : " False
03:19:12 T:7084  NOTICE: ['Migrating subscriptions to new DB format']
03:19:12 T:7084  NOTICE: "subs v evalSchedules: " {'http://tv.prehraj.me/cs/detail/kravataci': {'name': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': {'name': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf', 'refresh': '1', 'last_run': -1}}
03:19:12 T:7084  NOTICE: "sub[refresh] v evalSchedules : " {'name': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'refresh': '1', 'last_run': -1}
03:19:12 T:7084   ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                             - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                            Error Type: <type 'exceptions.AttributeError'>
                                            Error Contents: 'dict' object has no attribute 'encode'
                                            Traceback (most recent call last):
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\service.py", line 38, in <module>
                                                XBMCSosac(SosacContentProvider(reverse_eps=reverse_eps), settings, __addon__).service()
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\resources\lib\sutils.py", line 67, in service
                                                self.evalSchedules()
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\resources\lib\sutils.py", line 112, in evalSchedules
                                                'refresh': sub['refresh']
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\resources\lib\sutils.py", line 229, in run_custom
                                                if self.add_item(params):
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\plugin.video.sosac.ph\resources\lib\sutils.py", line 158, in add_item
                                                item_url = util._create_plugin_url(arg, 'plugin://' + self.addon_id + '/')
                                              File "C:\Users\decak\AppData\Roaming\Kodi\addons\script.module.stream.resolver-master\lib\util.py", line 149, in _create_plugin_url
                                                value = value.encode('ascii', 'ignore')
                                            AttributeError: 'dict' object has no attribute 'encode'
                                            -->End of Python script error report<--
zbyna commented

Udělal jsem následující změny a vypadá to nadějně, ale neznám detailně kód sosace, takže bez záruky 😄
Podívejte se na to někdo zkušenější a pokud je to OK připravím patch.
Díky
plugin.video.sosac.ph/resources/lib/sutils.py

def get_subs(self):
        if self.subs is not None:
            return self.subs
        data = self.cache.get("subscription")
        try:
            if data == '':
                return {}
            subs = eval(data)
            xbmc.log('"subs v get_subs : " ' + str(subs))  # zbyna
            # migrate = False
            # for val in subs.values():
            #     xbmc.log('"val v get_subs : " ' + str(val))  # zbyna
            #     if not isinstance(val, dict):
            #         xbmc.log('"migrate v get_subs : " ' +
            #                  str(migrate))  # zbyna
            #         migrate = True
            #     break
            # if migrate:
            #     util.info('Migrating subscriptions to new DB format')
            #     new_subs = {}
            #     for url, name in subs.iteritems():
            #         new_subs[url] = {'name': name,
            #                          'refresh': '1', 'last_run': -1}
            #     self.set_subs(new_subs)
            #     subs = new_subs
            # self.subs = subs
            for url, name in subs.iteritems():
                xbmc.log('"key:"  ' + str(url) + ' "value:" ' + str(name))
                if not isinstance(name, dict):
                    xbmc.log('"Value is not dictionary instance ... fixing"')
                    subs[url] = {'name': name,
                                 'refresh': '1', 'last_run': -1}
                    xbmc.log('"Fixed value:" ' + str(subs[url]))
            self.subs = subs
            xbmc.log('"self.subs:" ' + str(self.subs))
        except Exception, e:
            util.error(e)
            subs = {}
        return subs
19:53:17 T:1280  NOTICE: ['SOSAC Service Started']
19:53:17 T:1280  NOTICE: ['SOSAC Loading subscriptions']
19:53:17 T:1280  NOTICE: "subs v get_subs : " {'http://tv.prehraj.me/cs/detail/kravataci': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf'}
19:53:17 T:1280  NOTICE: "key:"  http://tv.prehraj.me/cs/detail/kravataci "value:" {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}
19:53:17 T:1280  NOTICE: "key:"  http://tv.prehraj.me/cs/detail/heureka-mesto-divu "value:" Heuréka – město divů
19:53:17 T:1280  NOTICE: "Value is not dictionary instance ... fixing"
19:53:17 T:1280  NOTICE: "Fixed value:" {'name': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf', 'refresh': '1', 'last_run': -1}
19:53:17 T:1280  NOTICE: "self.subs:" {'http://tv.prehraj.me/cs/detail/kravataci': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': {'name': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf', 'refresh': '1', 'last_run': -1}}
19:53:17 T:1280  NOTICE: "subs v evalSchedules: " {'http://tv.prehraj.me/cs/detail/kravataci': {'name': 'Krava\xc5\xa5\xc3\xa1ci', 'refresh': '1', 'last_run': -1}, 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu': {'name': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf', 'refresh': '1', 'last_run': -1}}
19:53:17 T:1280  NOTICE: "sub["refresh"] v evalSchedules : " 1
19:53:17 T:1280   DEBUG: ['SOSAC Refreshing http://tv.prehraj.me/cs/detail/kravataci']
19:53:17 T:1280   DEBUG: ('item: ', 'plugin://plugin.video.sosac.ph/?play=687474703a2f2f74762e7072656872616a2e6d652f63732f64657461696c2f6b7261766174616369&cp=736f7361632e7068&title=4b726176616369&', {'action': 'add-to-library', 'url': 'http://tv.prehraj.me/cs/detail/kravataci', 'update': True, 'refresh': '1', 'name': 'Krava\xc5\xa5\xc3\xa1ci'})
19:53:17 T:1280   DEBUG: ['request: http://tv.prehraj.me/cs/detail/kravataci']
19:53:18 T:1280   DEBUG: ['len(data) 242812']
19:53:21 T:1280  NOTICE: "sub["refresh"] v evalSchedules : " 1
19:53:21 T:1280   DEBUG: ['SOSAC Refreshing http://tv.prehraj.me/cs/detail/heureka-mesto-divu']
19:53:21 T:1280   DEBUG: ('item: ', 'plugin://plugin.video.sosac.ph/?play=687474703a2f2f74762e7072656872616a2e6d652f63732f64657461696c2f68657572656b612d6d6573746f2d64697675&cp=736f7361632e7068&title=486575726b6120206d73746f20646976&', {'action': 'add-to-library', 'url': 'http://tv.prehraj.me/cs/detail/heureka-mesto-divu', 'update': True, 'refresh': '1', 'name': 'Heur\xc3\xa9ka \xe2\x80\x93 m\xc4\x9bsto div\xc5\xaf'})
19:53:21 T:1280   DEBUG: ['request: http://tv.prehraj.me/cs/detail/heureka-mesto-divu']
19:53:21 T:1280   DEBUG: ['len(data) 211436']

Ahoj,

udělal jsem commit v mém forku https://github.com/iChUdY/plugin.video.prehraj.me

Žádnou chybu už to nehází a v logu taky bez chyb. Ovšem funkčnost přidávání nových dílů potvrdit nemohu... ani si nejsem úplně jistý jak to otestovat. Čekat na nový díl? U Sosáče tam jsou díly v předstihu :D (což je problém sám o sobě)

Každopádně chyba s otravným zvukem je pryč 👍

Zkuste to někdo testnout...

zbyna commented

Ještě oprava - přidáno self.set_subs(subs) aby se úprava hodnoty slovníku uložila , jinak by probíhala znovu a znovu ...

def get_subs(self):
        if self.subs is not None:
            return self.subs
        data = self.cache.get("subscription")
        try:
            if data == '':
                return {}
            subs = eval(data)
            xbmc.log('"subs v get_subs : " ' + str(subs))  # zbyna
            # migrate = False
            # for val in subs.values():
            #     xbmc.log('"val v get_subs : " ' + str(val))  # zbyna
            #     if not isinstance(val, dict):
            #         xbmc.log('"migrate v get_subs : " ' +
            #                  str(migrate))  # zbyna
            #         migrate = True
            #     break
            # if migrate:
            #     util.info('Migrating subscriptions to new DB format')
            #     new_subs = {}
            #     for url, name in subs.iteritems():
            #         new_subs[url] = {'name': name,
            #                          'refresh': '1', 'last_run': -1}
            #     self.set_subs(new_subs)
            #     subs = new_subs
            # self.subs = subs
            for url, name in subs.iteritems():
                xbmc.log('"key:"  ' + str(url) + ' "value:" ' + str(name))
                if not isinstance(name, dict):
                    xbmc.log('"Value is not dictionary instance ... fixing"')
                    subs[url] = {'name': name,
                                 'refresh': '1', 'last_run': -1}
                    xbmc.log('"Fixed value:" ' + str(subs[url]))
            self.set_subs(subs)
            self.subs = subs
            xbmc.log('"self.subs:" ' + str(self.subs))
        except Exception, e:
            util.error(e)
            subs = {}
        return subs
zbyna commented

Created pull request: #69

@zbyna
Dik za opravu. Neni mozne ulozit do Library nazev v kodovani, ktere KODI zobrazi korektne?

'name': 'Krava\xc5\xa5\xc3\xa1ci'

KODI s pouzitim pluginu diaktriku v OSD zobrazi korektne, ale pri prehravani z knihovny ne: #65
Diky

zbyna commented

@ExSport

Sorry, ale teď dělám něco jiného.

Na první a né nutně správný pohled není potřeba řešit názvy souboru , to by zřejmě bylo složitější:
http://kodi.wiki/view/Add-on_unicode_paths

Na druhý pohled 😄 je znak \xc5\xa5 v UTF8 zakódované ť
takže bych zkusil na řetězec retezec použil

retezec.decode("utf-8")

ale jestli to pomůže netuším ...

Pěkně je Unicode v addonech vysvětlen tady:
http://forum.kodi.tv/showthread.php?tid=144677
Chce to vyzkoušet, zkus se do toho pustit sám.

@zbyna Neva, jen jsem se zeptal.
Zkousel jsem hodne kombinaci encode/decode mezi ruznymi CP/ISO/UNICODE and jedine co bylo citelne je zkonverovat to do ASCII, takze clovek prijde o hacky a carky, ale aspon je to lepe dohledatelne pro titulky nez puvodni nazvy. Nejsem programator, takze to zkousim cestou pokus-omyl :)
Ale mrknu na linky co jsi poslal, pokud jsem je jeste necetl. Dik

Ja se sice vubec v kodu toho sosace nevyznam, ale tyto problemy muze
zpusobovat klidne jen blbe kodovani souboru, ve kterem je skript ulozen.
Muze byt klidne nastavenej na neco jinyho nez utf8

Dne 26. 8. 2016 14:57 napsal uživatel "ExSport" notifications@github.com:

@zbyna https://github.com/zbyna Neva, jen jsem se zeptal.
Zkousel jsem hodne kombinaci encode/decode mezi ruznymi CP/ISO/UNICODE and
jedine co bylo citelne je zkonverovat to do ASCII, takze clovek prijde o
hacky a carky, ale aspon je to lepe dohledatelne pro titulky nez puvodni
nazvy. Nejsem programator, takze to zkousim cestou pokus-omyl :)
Ale mrknu na linky co jsi poslal, pokud jsem je jeste necetl. Dik


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#67 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AKTteZ_Nz1w36FTB7nJtqK5-SEnX0DWuks5qjuK4gaJpZM4JrXxF
.

V utf-8 není. Když jsem zkoušel háčky a čárky definovat přímo v kódu tak to při spuštění zahlásilo nepřípustné znaky:)
Myslím, že jsem pak zkoušel ho uložit v nějakém ISO a CP1250 a stejně se v OSD znaky nezobrazovaly korektně, ale moc jsem si s tím nehrál:)
EDIT: Uložením myslím včetně definování kódování na prvním nebo druhém řádku kódu dle toho co jsem se dočetl jinde.

zbyna commented

@ExSport
Podle mě bylo z https://github.com/kodi-czsk/script.module.stream.resolver použito util._create_plugin_url() s

 value = value.encode('ascii', 'ignore')  

místo xbmcutil._create_plugin_url() s

 value = value.encode('utf-8') 

Bez toho, jak jsi to označil v https://github.com/kodi-czsk/plugin.video.sosac.ph/blob/master/resources/lib/sutils.py#L152 bych to hledal o dost dýl 😅
Díky

Created pull request: #71

@zbyna Díky 👍
Asi jsem něco dělal špatně protože jsem zkoušel natvrdo encodovat název (obcházel overridovanou encode fci) s jinými hodnotami encode/decode a i s jinými typy normalizace (NFKD,...) a došel jsem jen ke stavu bez háčků a čárek, ale pokus s něma byl stále rozbitý:)
https://github.com/kodi-czsk/plugin.video.sosac.ph/blob/master/resources/lib/sutils.py#L292

Jaj, už to vidím:)
Util/XbmcUtil z resolveru 👍

Zdá se, že problém se subscriptipn update byl vyřešen. Přišel někdo na nějakou chybu nebo zavírám issue?