added check to settings.xml before loading new cron timer

fixed bug where disabling scheduler did not turn it off
This commit is contained in:
robweber 2012-09-13 09:52:17 -05:00
parent a066491757
commit 2fd7b130c7
2 changed files with 38 additions and 16 deletions

View File

@ -4,7 +4,9 @@ import xbmcaddon
__addon_id__= 'script.xbmcbackup' __addon_id__= 'script.xbmcbackup'
__Addon = xbmcaddon.Addon(__addon_id__) __Addon = xbmcaddon.Addon(__addon_id__)
#global functions for logging and encoding def data_dir():
return __Addon.getAddonInfo('profile')
def log(message,loglevel=xbmc.LOGNOTICE): def log(message,loglevel=xbmc.LOGNOTICE):
xbmc.log(encode(__addon_id__ + ": " + message),level=loglevel) xbmc.log(encode(__addon_id__ + ": " + message),level=loglevel)

View File

@ -1,6 +1,7 @@
import xbmc import xbmc
import datetime import datetime
import time import time
import os
import resources.lib.utils as utils import resources.lib.utils as utils
from resources.lib.croniter import croniter from resources.lib.croniter import croniter
from resources.lib.backup import XbmcBackup from resources.lib.backup import XbmcBackup
@ -8,6 +9,7 @@ from resources.lib.backup import XbmcBackup
class BackupScheduler: class BackupScheduler:
enabled = "false" enabled = "false"
next_run = 0 next_run = 0
settings_update_time = 0
def __init__(self): def __init__(self):
self.enabled = utils.getSetting("enable_scheduler") self.enabled = utils.getSetting("enable_scheduler")
@ -18,12 +20,22 @@ class BackupScheduler:
def setup(self): def setup(self):
#scheduler was turned on, find next run time #scheduler was turned on, find next run time
utils.log("scheduler enabled, finding next run time") utils.log("scheduler enabled, finding next run time")
self.findNextRun(time.time()) self.findNextRun(time.time(),True)
utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M')) utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
def start(self): def start(self):
while(not xbmc.abortRequested): while(not xbmc.abortRequested):
if(self.enabled == "true"): current_enabled = utils.getSetting("enable_scheduler")
if(current_enabled == "true" and self.enabled == "false"):
#scheduler was just turned on
self.enabled = current_enabled
self.setup()
elif (current_enabled == "false" and self.enabled == "true"):
#schedule was turn off
self.enabled = current_enabled
elif(self.enabled == "true"):
#scheduler is still on
now = time.time() now = time.time()
if(self.next_run <= now): if(self.next_run <= now):
@ -34,15 +46,23 @@ class BackupScheduler:
backup.run(XbmcBackup.Backup,True) backup.run(XbmcBackup.Backup,True)
self.findNextRun(now) self.findNextRun(now)
else:
self.enabled = utils.getSetting("enable_scheduler")
if(self.enabled == "true"):
self.setup()
time.sleep(10) time.sleep(10)
def findNextRun(self,now): def findNextRun(self,now,forceUpdate = False):
mod_time = self.settings_update_time
#check if the schedule has been modified
try:
#get the last modified time of the file
mod_time = os.path.getmtime(xbmc.translatePath(utils.data_dir()) + "settings.xml")
except:
#don't do anything here
mod_time = self.settings_update_time
if(mod_time > self.settings_update_time or forceUpdate):
self.settings_update_time = mod_time
#find the cron expression and get the next run time #find the cron expression and get the next run time
cron_exp = self.parseSchedule() cron_exp = self.parseSchedule()