Version 0.9.6

This commit is contained in:
Paco8 committed 2024-09-02 22:58:18 +02:00
1 parent 8e88ab1774
commit 2c2566d8b5
7 files changed
+243 -45

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.movistarplus" <addon id="plugin.video.movistarplus"
name="Movistar+" name="Movistar+"
version="0.9.5" version="0.9.6"
provider-name="Paco8"> provider-name="Paco8">
<requires> <requires>
<!--- <import addon="xbmc.python" version="2.25.0"/> --> <!--- <import addon="xbmc.python" version="2.25.0"/> -->
@@ -56,6 +56,11 @@ msgctxt "#30013"
msgid "Fix freezes in VOD content" msgid "Fix freezes in VOD content"
msgstr "" msgstr ""
# For Orange only
msgctxt "#30014"
msgid "Try to fix freezes"
msgstr ""
# For Orange only # For Orange only
msgctxt "#30016" msgctxt "#30016"
msgid "Proxy timeout (ms)" msgid "Proxy timeout (ms)"
@@ -526,14 +531,51 @@ msgctxt "#30315"
msgid "Number of days" msgid "Number of days"
msgstr "" 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" msgctxt "#30320"
msgid "Rating: {}" msgid "Rating: {}"
msgstr "" msgstr ""
# For Orange only
msgctxt "#30321" msgctxt "#30321"
msgid "Show age rating before playback" msgid "Show age rating before playback"
msgstr "" 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" msgctxt "#30400"
msgid "{} days remaining" msgid "{} days remaining"
msgstr "" msgstr ""
@@ -53,6 +53,10 @@ msgctxt "#30013"
msgid "Fix freezes in VOD content" msgid "Fix freezes in VOD content"
msgstr "Solucionar parones en TV a la carta" msgstr "Solucionar parones en TV a la carta"
msgctxt "#30014"
msgid "Try to fix freezes"
msgstr "Tratar de solucionar parones"
msgctxt "#30016" msgctxt "#30016"
msgid "Proxy timeout (ms)" msgid "Proxy timeout (ms)"
msgstr "Tiempo de espera (ms)" msgstr "Tiempo de espera (ms)"
@@ -491,6 +495,26 @@ msgctxt "#30315"
msgid "Number of days" msgid "Number of days"
msgstr "Número de días" 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" msgctxt "#30320"
msgid "Rating: {}" msgid "Rating: {}"
msgstr "Calificación: {}" msgstr "Calificación: {}"
@@ -499,6 +523,21 @@ msgctxt "#30321"
msgid "Show age rating before playback" msgid "Show age rating before playback"
msgstr "Mostrar la calificación de edades al empezar la reproducción" 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" msgctxt "#30400"
msgid "{} days remaining" msgid "{} days remaining"
msgstr "quedan {} días" msgstr "quedan {} días"
+111
View File
@@ -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 = '''<settings version="2">
<setting id="kodi_addon_instance_name">{name}</setting>
<setting id="kodi_addon_instance_enabled">true</setting>
<setting id="m3uPathType">0</setting>
<setting id="m3uPath">special://userdata/addon_data/plugin.video.{addon_id}/channels.m3u8</setting>
<setting id="m3uUrl" default="true" />
<setting id="m3uCache" default="true">true</setting>
<setting id="startNum" default="true">1</setting>
<setting id="numberByOrder" default="true">false</setting>
<setting id="m3uRefreshMode" default="true">0</setting>
<setting id="m3uRefreshIntervalMins" default="true">60</setting>
<setting id="m3uRefreshHour" default="true">4</setting>
<setting id="connectioncheckinterval" default="true">10</setting>
<setting id="connectionchecktimeout" default="true">20</setting>
<setting id="defaultProviderName" default="true" />
<setting id="enableProviderMappings" default="true">false</setting>
<setting id="providerMappingFile" default="true">special://userdata/addon_data/pvr.iptvsimple/providers/providerMappings.xml</setting>
<setting id="tvGroupMode" default="true">0</setting>
<setting id="numTvGroups" default="true">1</setting>
<setting id="oneTvGroup" default="true" />
<setting id="twoTvGroup" default="true" />
<setting id="threeTvGroup" default="true" />
<setting id="fourTvGroup" default="true" />
<setting id="fiveTvGroup" default="true" />
<setting id="customTvGroupsFile" default="true">special://userdata/addon_data/pvr.iptvsimple/channelGroups/customTVGroups-example.xml</setting>
<setting id="tvChannelGroupsOnly" default="true">false</setting>
<setting id="radioGroupMode" default="true">0</setting>
<setting id="numRadioGroups" default="true">1</setting>
<setting id="oneRadioGroup" default="true" />
<setting id="twoRadioGroup" default="true" />
<setting id="threeRadioGroup" default="true" />
<setting id="fourRadioGroup" default="true" />
<setting id="fiveRadioGroup" default="true" />
<setting id="customRadioGroupsFile" default="true">special://userdata/addon_data/pvr.iptvsimple/channelGroups/customRadioGroups-example.xml</setting>
<setting id="radioChannelGroupsOnly" default="true">false</setting>'''.format(name=name, addon_id=addon_id)
if epg_url:
content += '''
<setting id="epgPathType" default="true">1</setting>
<setting id="epgPath" default="true" />
<setting id="epgUrl">{epg_url}</setting>'''.format(epg_url=epg_url)
else:
content += '''
<setting id="epgPathType">0</setting>
<setting id="epgPath">special://userdata/addon_data/plugin.video.{addon_id}/epg.xml</setting>
<setting id="epgUrl" default="true" />'''.format(addon_id=addon_id)
content += '''
<setting id="epgCache" default="true">true</setting>
<setting id="epgTimeShift" default="true">0</setting>
<setting id="epgTSOverride" default="true">false</setting>
<setting id="epgIgnoreCaseForChannelIds" default="true">true</setting>
<setting id="useEpgGenreText" default="true">false</setting>
<setting id="genresPathType" default="true">0</setting>
<setting id="genresPath" default="true">special://userdata/addon_data/pvr.iptvsimple/genres/genreTextMappings/genres.xml</setting>
<setting id="genresUrl" default="true" />
<setting id="logoPathType" default="true">1</setting>
<setting id="logoPath" default="true" />
<setting id="logoBaseUrl" default="true" />
<setting id="useLogosLocalPathOnly" default="true">false</setting>
<setting id="logoFromEpg" default="true">1</setting>
<setting id="mediaEnabled" default="true">true</setting>
<setting id="mediaGroupByTitle" default="true">true</setting>
<setting id="mediaGroupBySeason" default="true">true</setting>
<setting id="mediaTitleSeasonEpisode" default="true">false</setting>
<setting id="mediaM3UGroupPath" default="true">2</setting>
<setting id="mediaForcePlaylist" default="true">false</setting>
<setting id="mediaVODAsRecordings" default="true">true</setting>
<setting id="timeshiftEnabled" default="true">false</setting>
<setting id="timeshiftEnabledAll" default="true">true</setting>
<setting id="timeshiftEnabledHttp" default="true">true</setting>
<setting id="timeshiftEnabledUdp" default="true">true</setting>
<setting id="timeshiftEnabledCustom" default="true">false</setting>'''
if epg_url:
content += '''
<setting id="catchupEnabled" default="true">false</setting>'''
else:
content += '''
<setting id="catchupEnabled">true</setting>'''
content += '''
<setting id="catchupQueryFormat" default="true" />
<setting id="catchupDays" default="true">5</setting>
<setting id="allChannelsCatchupMode" default="true">0</setting>
<setting id="catchupOverrideMode" default="true">0</setting>
<setting id="catchupCorrection" default="true">0</setting>
<setting id="catchupPlayEpgAsLive" default="true">false</setting>
<setting id="catchupWatchEpgBeginBufferMins" default="true">5</setting>
<setting id="catchupWatchEpgEndBufferMins" default="true">15</setting>
<setting id="catchupOnlyOnFinishedProgrammes" default="true">false</setting>
<setting id="transformMulticastStreamUrls" default="true">false</setting>
<setting id="udpxyHost" default="true">127.0.0.1</setting>
<setting id="udpxyPort" default="true">4022</setting>
<setting id="useFFmpegReconnect" default="true">true</setting>
<setting id="useInputstreamAdaptiveforHls" default="true">false</setting>
<setting id="defaultUserAgent" default="true" />
<setting id="defaultInputstream" default="true" />
<setting id="defaultMimeType" default="true" />
</settings>'''
with io.open(filename, 'w', encoding='utf-8', newline='') as handle:
handle.write(content)
+31 -8
View File
@@ -672,24 +672,45 @@ def iptv(params):
#except: #except:
# pass # 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 export_epg_now():
def report_progress(message): def report_progress(message):
show_notification(addon.getLocalizedString(30314).format(message), xbmcgui.NOTIFICATION_INFO) show_notification(addon.getLocalizedString(30314).format(message), xbmcgui.NOTIFICATION_INFO)
if not m.logged: return 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') only_subscribed = addon.getSettingBool('only_subscribed')
channels_filename = os.path.join(folder, b"movistar-channels.m3u8") channels_filename = os.path.join(profile_dir, 'channels.m3u8')
epg_filename = os.path.join(folder, b"movistar-epg.xml") epg_filename = os.path.join(profile_dir, 'epg.xml')
show_notification(addon.getLocalizedString(30310), xbmcgui.NOTIFICATION_INFO) show_notification(addon.getLocalizedString(30310), xbmcgui.NOTIFICATION_INFO)
m.export_channels_to_m3u8(channels_filename, only_subscribed) 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) show_notification(addon.getLocalizedString(30313), xbmcgui.NOTIFICATION_INFO)
def to_wishlist(params): def to_wishlist(params):
stype = params['stype'] stype = params['stype']
if params['op'] == 'add': if params['op'] == 'add':
@@ -770,6 +791,8 @@ def router(paramstring):
list_section(params['key']) list_section(params['key'])
elif params['action'] == 'search': elif params['action'] == 'search':
search(params) search(params)
elif params['action'] == 'create_iptv_settings':
create_iptv_settings()
elif params['action'] == 'export_epg_now': elif params['action'] == 'export_epg_now':
export_epg_now() export_epg_now()
elif params['action'] == 'to_wishlist': elif params['action'] == 'to_wishlist':
+16 -6
View File
@@ -38,12 +38,22 @@
</category> </category>
--> -->
<category label="30304"> <category label="30304">
<setting label="30306" type="folder" id="epg_folder" source="" default="" option="writeable"/> <setting label="30316" type="action" id="create_iptv_settings" action="RunPlugin(plugin://plugin.video.movistarplus/?action=create_iptv_settings)" option="close"/>
<setting label="30305" type="bool" id="export_epg" default="false" enable="!eq(-1,)"/>
<setting label="30315" type="number" id="export_days" default="2"/> <setting type="sep"/>
<setting label="30308" type="action" action="Addon.OpenSettings(pvr.iptvsimple)" option="close" visible="System.HasAddon(pvr.iptvsimple)" enable="eq(-2,true)" subsetting="true"/> <setting label="30317" type="bool" id="use_external_epg" default="true"/>
<setting label="30307" type="action" action="InstallAddon(pvr.iptvsimple)" option="close" visible="!System.HasAddon(pvr.iptvsimple)" enable="eq(-3,true)" subsetting="true"/> <setting label="30318" id="epg_url" type="text" default="https://raw.githubusercontent.com/davidmuma/EPG_dobleM/master/guiafanart_color.xml.gz" enable="eq(-1,true)"/>
<setting label="30312" type="action" id="export_epg_now" action="RunPlugin(plugin://plugin.video.movistarplus/?action=export_epg_now)" option="close" enable="!eq(-4,)"/> <setting type="sep"/>
<setting label="30305" type="bool" id="export_epg" default="false"/>
<setting label="30315" type="number" id="export_days" default="2" enable="eq(-1,true)"/>
<setting type="sep"/>
<setting label="30312" type="action" id="export_epg_now" action="RunPlugin(plugin://plugin.video.movistarplus/?action=export_epg_now)" option="close"/>
<setting type="sep"/>
<setting label="30308" type="action" action="Addon.OpenSettings(pvr.iptvsimple)" option="close" visible="System.HasAddon(pvr.iptvsimple)"/>
<setting label="30307" type="action" action="InstallAddon(pvr.iptvsimple)" option="close" visible="!System.HasAddon(pvr.iptvsimple)"/>
</category> </category>
</settings> </settings>
+3 -30
View File
@@ -13,7 +13,6 @@ from resources.lib.cache import Cache
def export_epg(): def export_epg():
from datetime import datetime, timedelta from datetime import datetime, timedelta
from resources.lib.gui import show_notification
def needs_update(filename): def needs_update(filename):
if os.path.exists(filename): if os.path.exists(filename):
@@ -21,14 +20,8 @@ def export_epg():
return datetime.now() - file_modification_time > timedelta(hours=6) return datetime.now() - file_modification_time > timedelta(hours=6)
return True return True
folder = addon.getSetting('epg_folder') channels_filename = os.path.join(profile_dir, 'channels.m3u8')
if sys.version_info[0] > 2: epg_filename = os.path.join(profile_dir, 'epg.xml')
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")
LOG('channels filename: {}'.format(channels_filename)) LOG('channels filename: {}'.format(channels_filename))
LOG('epg filename: {}'.format(epg_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)) LOG('channels_needs_update: {} epg_needs_update: {}'.format(channels_needs_update, epg_needs_update))
if channels_needs_update or epg_needs_update: if channels_needs_update or epg_needs_update:
from resources.lib.movistar import Movistar xbmc.executebuiltin('RunPlugin(plugin://plugin.video.movistarplus/?action=export_epg_now)')
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)
if __name__ == '__main__': if __name__ == '__main__':
LOG('Service started') LOG('Service started')