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
+241 -43

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.movistarplus"
name="Movistar+"
version="0.9.5"
version="0.9.6"
provider-name="Paco8">
<requires>
<!--- <import addon="xbmc.python" version="2.25.0"/> -->
@@ -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 ""
@@ -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"
+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)
+29 -6
View File
@@ -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)
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':
+16 -6
View File
@@ -38,12 +38,22 @@
</category>
-->
<category label="30304">
<setting label="30306" type="folder" id="epg_folder" source="" default="" option="writeable"/>
<setting label="30305" type="bool" id="export_epg" default="false" enable="!eq(-1,)"/>
<setting label="30315" type="number" id="export_days" default="2"/>
<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="30307" type="action" action="InstallAddon(pvr.iptvsimple)" option="close" visible="!System.HasAddon(pvr.iptvsimple)" enable="eq(-3,true)" subsetting="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 label="30316" type="action" id="create_iptv_settings" action="RunPlugin(plugin://plugin.video.movistarplus/?action=create_iptv_settings)" option="close"/>
<setting type="sep"/>
<setting label="30317" type="bool" id="use_external_epg" default="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 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>
</settings>
+3 -30
View File
@@ -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')