From 272ea8b8a93e3007e2e3608a01e28d8b16a27a40 Mon Sep 17 00:00:00 2001 From: robweber Date: Wed, 19 Sep 2012 11:43:36 -0500 Subject: [PATCH] added backup rotation closes #10 --- resources/language/English/strings.xml | 1 + resources/lib/backup.py | 40 +++++++++++++++++++------- resources/settings.xml | 1 + 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index 5f31fab..4603353 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -32,6 +32,7 @@ Creating Files List Writing file Starting scheduled backup + Removing backup Enable Scheduler Schedule diff --git a/resources/lib/backup.py b/resources/lib/backup.py index 03022ee..a66b531 100644 --- a/resources/lib/backup.py +++ b/resources/lib/backup.py @@ -86,6 +86,7 @@ class XbmcBackup: Restore = 1 local_path = '' + remote_root = '' remote_path = '' restoreFile = None @@ -100,17 +101,17 @@ class XbmcBackup: self.local_path = xbmc.makeLegalFilename(xbmc.translatePath("special://home"),False); if(utils.getSetting('remote_selection') == '1'): - self.remote_path = utils.getSetting('remote_path_2') + self.remote_root = utils.getSetting('remote_path_2') utils.setSetting("remote_path","") elif(utils.getSetting('remote_selection') == '0'): - self.remote_path = utils.getSetting("remote_path") + self.remote_root = utils.getSetting("remote_path") #fix slashes - self.remote_path = self.remote_path.replace("\\","/") + self.remote_root = self.remote_root.replace("\\","/") #check if trailing slash is included - if(self.remote_path[-1:] != "/"): - self.remote_path = self.remote_path + "/" + if(self.remote_root[-1:] != "/"): + self.remote_root = self.remote_root + "/" utils.log(utils.getString(30046)) @@ -125,10 +126,10 @@ class XbmcBackup: mode = int(utils.getSetting('addon_mode')) #append backup folder name - if(mode == self.Backup and self.remote_path != ''): - self.remote_path = self.remote_path + time.strftime("%Y%m%d") + "/" - elif(mode == self.Restore and utils.getSetting("backup_name") != '' and self.remote_path != ''): - self.remote_path = self.remote_path + utils.getSetting("backup_name") + "/" + if(mode == self.Backup and self.remote_root != ''): + self.remote_path = self.remote_root + time.strftime("%Y%m%d") + "/" + elif(mode == self.Restore and utils.getSetting("backup_name") != '' and self.remote_root != ''): + self.remote_path = self.remote_root + utils.getSetting("backup_name") + "/" else: self.remote_path = "" @@ -146,6 +147,25 @@ class XbmcBackup: utils.log(utils.getString(30050)) self.syncFiles() + + #remove old backups + total_backups = int(utils.getSetting('backup_rotation')) + if(total_backups > 0): + + dirs,files = xbmcvfs.listdir(self.remote_root) + if(len(dirs) > total_backups): + #remove backups to equal total wanted + remove_num = len(dirs) - total_backups - 1 + self.filesTotal = self.filesTotal + remove_num + 1 + + #update the progress bar if it is available + while(remove_num >= 0 and not self.checkCancel()): + self.updateProgress(utils.getString(30054) + " " + dirs[remove_num]) + utils.log("Removing backup " + dirs[remove_num]) + xbmcvfs.rmdir(self.remote_root + dirs[remove_num] + "/",True) + remove_num = remove_num - 1 + + else: utils.log(utils.getString(30023) + " - " + utils.getString(30017)) self.fileManager = FileManager(self.remote_path) @@ -215,4 +235,4 @@ class XbmcBackup: return result def isReady(self): - return True if self.remote_path != '' else False + return True if self.remote_root != '' else False diff --git a/resources/settings.xml b/resources/settings.xml index d32a629..ef510d1 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -6,6 +6,7 @@ +