From 2c2566d8b5913356dffa22ecc403f2f03979a360 Mon Sep 17 00:00:00 2001 From: Paco8 <5084042+Paco8@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:58:18 +0200 Subject: [PATCH] Version 0.9.6 --- addon.xml | 2 +- .../resource.language.en_gb/strings.po | 42 +++++++ .../resource.language.es_es/strings.po | 39 ++++++ resources/lib/iptv.py | 111 ++++++++++++++++++ resources/lib/plugin.py | 39 ++++-- resources/settings.xml | 22 +++- service.py | 33 +----- 7 files changed, 243 insertions(+), 45 deletions(-) create mode 100644 resources/lib/iptv.py diff --git a/addon.xml b/addon.xml index 2f6e6c0..be59efe 100644 --- a/addon.xml +++ b/addon.xml @@ -1,7 +1,7 @@ diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index c3ee73e..39b90e4 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -56,6 +56,11 @@ msgctxt "#30013" msgid "Fix freezes in VOD content" msgstr "" +# For Orange only +msgctxt "#30014" +msgid "Try to fix freezes" +msgstr "" + # For Orange only msgctxt "#30016" msgid "Proxy timeout (ms)" @@ -526,14 +531,51 @@ msgctxt "#30315" msgid "Number of days" msgstr "" +# For Orange and Movistar only +msgctxt "#30316" +msgid "Create settings for IPTV Simple" +msgstr "" + +# For Orange and Movistar only +msgctxt "#30317" +msgid "Use external EPG" +msgstr "" + +# For Orange and Movistar only +msgctxt "#30318" +msgid "URL:" +msgstr "" + +# For Orange and Movistar only +msgctxt "#30319" +msgid "Creating settings" +msgstr "" + +# For Orange only msgctxt "#30320" msgid "Rating: {}" msgstr "" +# For Orange only msgctxt "#30321" msgid "Show age rating before playback" msgstr "" +# For Orange and Movistar only +msgctxt "#30322" +msgid "Confirm overwrite" +msgstr "" + +# For Orange and Movistar only +msgctxt "#30323" +msgid "There are already settings for IPTV Simple.\nDo you want to overwrite them?" +msgstr "" + +# For Orange and Movistar only +msgctxt "#30324" +msgid "IPTV Simple is not found" +msgstr "" + msgctxt "#30400" msgid "{} days remaining" msgstr "" diff --git a/resources/language/resource.language.es_es/strings.po b/resources/language/resource.language.es_es/strings.po index 9add56c..7668ac5 100644 --- a/resources/language/resource.language.es_es/strings.po +++ b/resources/language/resource.language.es_es/strings.po @@ -53,6 +53,10 @@ msgctxt "#30013" msgid "Fix freezes in VOD content" msgstr "Solucionar parones en TV a la carta" +msgctxt "#30014" +msgid "Try to fix freezes" +msgstr "Tratar de solucionar parones" + msgctxt "#30016" msgid "Proxy timeout (ms)" msgstr "Tiempo de espera (ms)" @@ -491,6 +495,26 @@ msgctxt "#30315" msgid "Number of days" msgstr "Número de días" +# For Orange and Movistar only +msgctxt "#30316" +msgid "Create settings for IPTV Simple" +msgstr "Crear configuración para IPTV Simple" + +# For Orange and Movistar only +msgctxt "#30317" +msgid "Use external EPG" +msgstr "Usar EPG externa" + +# For Orange and Movistar only +msgctxt "#30318" +msgid "URL:" +msgstr "URL:" + +# For Orange and Movistar only +msgctxt "#30319" +msgid "Creating settings" +msgstr "Creando configuración" + msgctxt "#30320" msgid "Rating: {}" msgstr "Calificación: {}" @@ -499,6 +523,21 @@ msgctxt "#30321" msgid "Show age rating before playback" msgstr "Mostrar la calificación de edades al empezar la reproducción" +# For Orange and Movistar only +msgctxt "#30322" +msgid "Confirm overwrite" +msgstr "Confirmar" + +# For Orange and Movistar only +msgctxt "#30323" +msgid "There are already settings for IPTV Simple.\nDo you want to overwrite them?" +msgstr "Ya existe una configuración para IPTV Simple.\n¿Quieres sobreescribirla?" + +# For Orange and Movistar only +msgctxt "#30324" +msgid "IPTV Simple is not found" +msgstr "No se encuentra IPTV Simple" + msgctxt "#30400" msgid "{} days remaining" msgstr "quedan {} días" diff --git a/resources/lib/iptv.py b/resources/lib/iptv.py new file mode 100644 index 0000000..58a1a82 --- /dev/null +++ b/resources/lib/iptv.py @@ -0,0 +1,111 @@ +# encoding: utf-8 +# +# SPDX-License-Identifier: LGPL-2.1-or-later + +from __future__ import unicode_literals, absolute_import, division +import io + +def save_iptv_settings(filename, name, addon_id, epg_url=None): + content = ''' + {name} + true + 0 + special://userdata/addon_data/plugin.video.{addon_id}/channels.m3u8 + + true + 1 + false + 0 + 60 + 4 + 10 + 20 + + false + special://userdata/addon_data/pvr.iptvsimple/providers/providerMappings.xml + 0 + 1 + + + + + + special://userdata/addon_data/pvr.iptvsimple/channelGroups/customTVGroups-example.xml + false + 0 + 1 + + + + + + special://userdata/addon_data/pvr.iptvsimple/channelGroups/customRadioGroups-example.xml + false'''.format(name=name, addon_id=addon_id) + + if epg_url: + content += ''' + 1 + + {epg_url}'''.format(epg_url=epg_url) + else: + content += ''' + 0 + special://userdata/addon_data/plugin.video.{addon_id}/epg.xml + '''.format(addon_id=addon_id) + + content += ''' + true + 0 + false + true + false + 0 + special://userdata/addon_data/pvr.iptvsimple/genres/genreTextMappings/genres.xml + + 1 + + + false + 1 + true + true + true + false + 2 + false + true + false + true + true + true + false''' + + if epg_url: + content += ''' + false''' + else: + content += ''' + true''' + + content += ''' + + 5 + 0 + 0 + 0 + false + 5 + 15 + false + false + 127.0.0.1 + 4022 + true + false + + + + ''' + + with io.open(filename, 'w', encoding='utf-8', newline='') as handle: + handle.write(content) diff --git a/resources/lib/plugin.py b/resources/lib/plugin.py index 1af1a62..f1c07cf 100644 --- a/resources/lib/plugin.py +++ b/resources/lib/plugin.py @@ -672,24 +672,45 @@ def iptv(params): #except: # pass +def create_iptv_settings(): + from .iptv import save_iptv_settings + show_notification(addon.getLocalizedString(30319), xbmcgui.NOTIFICATION_INFO) + output_file = 'instance-settings-91.xml' if kodi_version > 19 else 'settings.xml' + epg_url = None + if addon.getSettingBool('use_external_epg'): + epg_url = addon.getSetting('epg_url') + try: + pvr_addon = xbmcaddon.Addon('pvr.iptvsimple') + pvr_dir = translatePath(pvr_addon.getAddonInfo('profile')) + LOG('pvr_dir: {}'.format(pvr_dir)) + filename = os.path.join(pvr_dir, output_file) + if os.path.exists(filename): + res = xbmcgui.Dialog().yesno(addon.getLocalizedString(30322), addon.getLocalizedString(30323)) + if res == False: return + save_iptv_settings(filename, 'Movistarplus', 'movistarplus', epg_url) + export_epg_now() + except: + show_notification(addon.getLocalizedString(30324)) + def export_epg_now(): def report_progress(message): show_notification(addon.getLocalizedString(30314).format(message), xbmcgui.NOTIFICATION_INFO) if not m.logged: return - folder = addon.getSetting('epg_folder') - if sys.version_info[0] > 2: - folder = bytes(folder, 'utf-8') - if not folder or not os.path.isdir(folder): return + only_subscribed = addon.getSettingBool('only_subscribed') - channels_filename = os.path.join(folder, b"movistar-channels.m3u8") - epg_filename = os.path.join(folder, b"movistar-epg.xml") + channels_filename = os.path.join(profile_dir, 'channels.m3u8') + epg_filename = os.path.join(profile_dir, 'epg.xml') show_notification(addon.getLocalizedString(30310), xbmcgui.NOTIFICATION_INFO) m.export_channels_to_m3u8(channels_filename, only_subscribed) - show_notification(addon.getLocalizedString(30311), xbmcgui.NOTIFICATION_INFO) - m.export_epg_to_xml(epg_filename, addon.getSettingInt('export_days'), report_progress, only_subscribed) + + if not addon.getSettingBool('use_external_epg'): + show_notification(addon.getLocalizedString(30311), xbmcgui.NOTIFICATION_INFO) + m.export_epg_to_xml(epg_filename, addon.getSettingInt('export_days'), report_progress, only_subscribed) + show_notification(addon.getLocalizedString(30313), xbmcgui.NOTIFICATION_INFO) + def to_wishlist(params): stype = params['stype'] if params['op'] == 'add': @@ -770,6 +791,8 @@ def router(paramstring): list_section(params['key']) elif params['action'] == 'search': search(params) + elif params['action'] == 'create_iptv_settings': + create_iptv_settings() elif params['action'] == 'export_epg_now': export_epg_now() elif params['action'] == 'to_wishlist': diff --git a/resources/settings.xml b/resources/settings.xml index 868c2f5..7619e4a 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -38,12 +38,22 @@ --> - - - - - - + + + + + + + + + + + + + + + + diff --git a/service.py b/service.py index f134555..2f1bcf7 100644 --- a/service.py +++ b/service.py @@ -13,7 +13,6 @@ from resources.lib.cache import Cache def export_epg(): from datetime import datetime, timedelta - from resources.lib.gui import show_notification def needs_update(filename): if os.path.exists(filename): @@ -21,14 +20,8 @@ def export_epg(): return datetime.now() - file_modification_time > timedelta(hours=6) return True - folder = addon.getSetting('epg_folder') - if sys.version_info[0] > 2: - folder = bytes(folder, 'utf-8') - LOG('folder for channels and epg: {}'.format(folder)) - if not folder or not os.path.isdir(folder): return - - channels_filename = os.path.join(folder, b"movistar-channels.m3u8") - epg_filename = os.path.join(folder, b"movistar-epg.xml") + channels_filename = os.path.join(profile_dir, 'channels.m3u8') + epg_filename = os.path.join(profile_dir, 'epg.xml') LOG('channels filename: {}'.format(channels_filename)) LOG('epg filename: {}'.format(epg_filename)) @@ -37,27 +30,7 @@ def export_epg(): LOG('channels_needs_update: {} epg_needs_update: {}'.format(channels_needs_update, epg_needs_update)) if channels_needs_update or epg_needs_update: - from resources.lib.movistar import Movistar - reuse_devices = addon.getSettingBool('reuse_devices') - m = Movistar(profile_dir, reuse_devices) - if not m.logged: return - - if addon.getSettingBool('uhd'): - m.quality = 'UHD' - - profile_id = addon.getSetting('profile_id').upper() - LOG('profile_id: {}'.format(profile_id)) - if profile_id not in ['', 'AUTO']: - m.account['platform'] = profile_id - - only_subscribed = addon.getSettingBool('only_subscribed') - LOG('service: only_subscribed: {}'.format(only_subscribed)) - if channels_needs_update: - show_notification(addon.getLocalizedString(30310), xbmcgui.NOTIFICATION_INFO) - m.export_channels_to_m3u8(channels_filename, only_subscribed) - if epg_needs_update: - show_notification(addon.getLocalizedString(30311), xbmcgui.NOTIFICATION_INFO) - m.export_epg_to_xml(epg_filename, only_subscribed=only_subscribed) + xbmc.executebuiltin('RunPlugin(plugin://plugin.video.movistarplus/?action=export_epg_now)') if __name__ == '__main__': LOG('Service started')