Kodi keeps its own copy of the programme guide and fetches it again only when IPTV Simple reloads its files, on its refresh timer; restarting IPTV Simple is not enough. After the first refresh following a Kodi start or add-on update, if the guide changed and nothing is playing, restart IPTV Simple with a 1-minute timer, wait for the reload, then restart it with the hourly timer again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
60 lines
2.3 KiB
Python
60 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import os
|
|
import time
|
|
import xbmc
|
|
import xbmcgui
|
|
from resources.lib.proxy import Proxy
|
|
from resources.lib.addon import *
|
|
from resources.lib.log import LOG
|
|
from resources.lib import kodimov
|
|
|
|
def file_age(filename):
|
|
"""Seconds since the file was last written (or found unchanged)."""
|
|
try:
|
|
return time.time() - os.path.getmtime(filename)
|
|
except OSError:
|
|
return float('inf')
|
|
|
|
if __name__ == '__main__':
|
|
LOG('Service started')
|
|
proxy = Proxy()
|
|
proxy.start()
|
|
LOG('proxy_address: {}'.format(proxy.proxy_address))
|
|
|
|
# Refreshes the TV guide channel list (new channels, new numbers) and the
|
|
# programme guide a minute after Kodi starts and then every 6 hours; a
|
|
# refresh that failed is tried again half an hour later. Opening the add-on
|
|
# also renews the 10-day Movistar login.
|
|
next_check = time.time() + 60
|
|
max_age = 0 # always refresh once after Kodi starts
|
|
try:
|
|
pvr_dir = translatePath(xbmcaddon.Addon('pvr.iptvsimple').getAddonInfo('profile'))
|
|
restart_iptv = kodimov.set_iptv_refresh(pvr_dir, 'kodimovplus')
|
|
except RuntimeError: # IPTV Simple not installed or disabled
|
|
restart_iptv = False
|
|
player = xbmc.Player()
|
|
monitor = xbmc.Monitor()
|
|
while not monitor.abortRequested():
|
|
if monitor.waitForAbort(1):
|
|
break
|
|
if restart_iptv and not player.isPlaying(): # restarting stops live TV
|
|
restart_iptv = False
|
|
kodimov.restart_iptv_simple()
|
|
if time.time() >= next_check:
|
|
next_check = time.time() + 30 * 60
|
|
age_limit, max_age = max_age, 6 * 3600 - 120
|
|
# After Kodi starts (or this add-on updates) also get the new guide into Kodi now
|
|
reload_guide = '&reload_guide=1' if age_limit == 0 else ''
|
|
if addon.getSettingBool('auto_export_epg'): # channels + programme guide
|
|
if file_age(os.path.join(profile_dir, 'epg.xml')) > age_limit:
|
|
xbmc.executebuiltin('RunPlugin(plugin://plugin.video.kodimovplus/?action=export_epg_now&quiet=1' + reload_guide + ')')
|
|
elif addon.getSettingBool('export_channels'):
|
|
if file_age(os.path.join(profile_dir, 'channels.m3u8')) > age_limit:
|
|
xbmc.executebuiltin('RunPlugin(plugin://plugin.video.kodimovplus/?action=export_channels_now)')
|
|
|
|
proxy.stop()
|