76 lines
1.8 KiB
Python
76 lines
1.8 KiB
Python
import os
|
|
|
|
from . import weather
|
|
from . import config
|
|
from . import utils
|
|
from . import api
|
|
|
|
def Main():
|
|
startup = True
|
|
utils.log(f'Starting service ...')
|
|
utils.log(config.addon_info, 3)
|
|
|
|
# Geolocation
|
|
if not utils.setting('geoip') and not utils.setting('loc1'):
|
|
utils.setsetting('geoip', 'true')
|
|
utils.setsetting('service', 'running')
|
|
weather.Main('1', mode='geoip')
|
|
weather.Main('1', mode='download')
|
|
utils.setsetting('service', 'idle')
|
|
|
|
# Service
|
|
while not utils.monitor.abortRequested():
|
|
utils.setsetting('service', 'running')
|
|
|
|
# Init
|
|
if utils.settingrpc('weather.addon') == 'weather.openmeteo':
|
|
utils.log(f'Running service ...', 3)
|
|
|
|
if not startup:
|
|
config.init(cache=True)
|
|
|
|
start = utils.time.time()
|
|
current = utils.settingrpc("weather.currentlocation")
|
|
|
|
# Download
|
|
for locid in range(1, config.addon.maxlocs):
|
|
if utils.setting(f'loc{locid}'):
|
|
weather.Main(str(locid), mode='download')
|
|
|
|
# Update
|
|
weather.Main(str(current), mode='update')
|
|
utils.setsetting('service', 'idle')
|
|
|
|
# Notification
|
|
if startup or utils.lastupdate('alert_notification') >= utils.setting('alert_interval', 'int') * 60:
|
|
utils.setupdate('alert_notification')
|
|
|
|
# Queue
|
|
for locid in range(1, config.addon.maxlocs):
|
|
if utils.setting(f'loc{locid}') and utils.setting(f'loc{locid}alert', 'bool'):
|
|
weather.Main(str(locid), mode='msgqueue')
|
|
|
|
# Send
|
|
weather.Main(str(current), mode='msgsend')
|
|
|
|
# Finish
|
|
utils.log(f'Finished ({round(utils.time.time() - start, 3)} sec)', 3)
|
|
|
|
else:
|
|
utils.log('Addon not enabled ...', 4)
|
|
utils.setsetting('service', 'idle')
|
|
|
|
# Sleep
|
|
startup = False
|
|
utils.monitor.waitForAbort(300)
|
|
|
|
utils.log(f'Stopping service ...')
|
|
api.s.close()
|
|
|
|
# Workaround KODI issue (v0.9.5)
|
|
try:
|
|
utils.setsetting('service', 'stopped')
|
|
except:
|
|
pass
|
|
|