1.0.0+kodimov.10: LALIGA, DAZN LALIGA and Liga de Campeones play again

- These 25 channels are missing from the amazon.tv channel list and their
  streams answer 403 to the CDN token of the classic servers. They are now
  taken from the web player's channel list and guide and opened with a CDN
  token from Movistar's new servers (live and catch-up). Stream session and
  licence stay on the classic servers. The other channels are untouched.
- The new servers need a device registered as a web player and the Movistar
  home network: a box registered otherwise gets one extra registration;
  away from the home network the channels are not listed.
- The CDN token is used for its 12 hours and renewed in the background: the
  server that gives it out at times refuses everything for minutes.
- New setting, off by default: always play at the best quality, up to 1080p
  (InputStream Adaptive stays at 576p on these streams when left on automatic).
- Error 4027 is shown only when the retry after registering the device again
  fails too; the first licence request for these channels always gets it.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
XoséandClaude Fable 5.2 committed 2026-11-13 13:17:20 +01:00
1 parent e16dd66f63
commit e72e3d4902
10 files changed
+337 -25

No files matched your search

+7 -2
View File
@@ -241,12 +241,17 @@ class RequestHandler(BaseHTTPRequestHandler):
LOG('license response: {}'.format(license_data))
d = try_load_json(license_data)
if d and 'errorCode' in d:
from .gui import show_notification
show_notification('Error {}: {}'.format(d['errorCode'], d['message']))
# KodiMov+: the error is shown only when the retry below
# doesn't get a licence. The first request for a LALIGA /
# Liga de Campeones channel is refused with 4027 every time,
# and passes once the device is registered again (a pause
# and a plain retry don't help; tested 2026-11-13).
if d['errorCode'] == 4027:
if not reregister_needed and addon.getSettingBool('reregister'):
reregister_needed = True
continue
from .gui import show_notification
show_notification('Error {}: {}'.format(d['errorCode'], d['message']))
else:
LOG('license response: {}'.format(encode_base64(license_data)))
break