Merge pull request #16 from robweber/master

Merge Master with Frodo
This commit is contained in:
robweber 2012-09-13 07:53:36 -07:00
commit 3892a16778
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,24 +46,32 @@ 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):
#find the cron expression and get the next run time mod_time = self.settings_update_time
cron_exp = self.parseSchedule()
cron_ob = croniter(cron_exp,datetime.datetime.fromtimestamp(now)) #check if the schedule has been modified
new_run_time = cron_ob.get_next(float) 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(new_run_time != self.next_run): if(mod_time > self.settings_update_time or forceUpdate):
self.next_run = new_run_time self.settings_update_time = mod_time
utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
#find the cron expression and get the next run time
cron_exp = self.parseSchedule()
cron_ob = croniter(cron_exp,datetime.datetime.fromtimestamp(now))
new_run_time = cron_ob.get_next(float)
if(new_run_time != self.next_run):
self.next_run = new_run_time
utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
def parseSchedule(self): def parseSchedule(self):
schedule_type = int(utils.getSetting("schedule_interval")) schedule_type = int(utils.getSetting("schedule_interval"))