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<--
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<--
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...
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
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.
@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?