From 3fa30e407ac16ebbd29ecd5540de17a657ac8fd7 Mon Sep 17 00:00:00 2001 From: robweber Date: Thu, 19 Apr 2012 16:13:50 -0500 Subject: [PATCH] used xbmcvfs to use xbmc functions for actual file copy added options to selectively copy certain folders --- default.py | 70 +++++++++++++++++++++++++++++++++++------- resources/settings.xml | 9 ++++++ 2 files changed, 68 insertions(+), 11 deletions(-) diff --git a/default.py b/default.py index 361c4a1..d2c6dc4 100644 --- a/default.py +++ b/default.py @@ -1,19 +1,67 @@ import xbmc import xbmcaddon +import xbmcgui import xbmcvfs -import shutil +import os -#get the addon class -__addon_id__ = 'script.xbmcbackup' -Addon = xbmcaddon.Addon(__addon_id__) +class XbmcBackup: + __addon_id__ = 'script.xbmcbackup' + Addon = xbmcaddon.Addon(__addon_id__) + local_path = '' + remote_path = '' -def syncFiles(): - xbmc.log(xbmc.translatePath("special://profile")) - xbmc.log(Addon.getSetting("remote_path")) + def __init__(self): + self.local_path = xbmc.translatePath("special://home") - if(xbmcvfs.exists(Addon.getSetting("remote_path") + "profile")): - shutil.rmtree(Addon.getSetting("remote_path") + "profile") + if(self.Addon.getSetting('remote_path') != '' and self.Addon.getSetting("backup_name") != ''): + self.remote_path = self.Addon.getSetting("remote_path") + self.Addon.getSetting('backup_name') + "/" - shutil.copytree(xbmc.translatePath("special://profile"),Addon.getSetting("remote_path") + "profile") + self.log("Starting") + self.log('Local Dir: ' + self.local_path) + self.log('Remote Dir: ' + self.remote_path) + + def syncFiles(self): + + if(xbmcvfs.exists(self.remote_path)): + #this will fail - need a disclaimer here + self.log("Remote Path exists - may have old files in it!") -syncFiles() + xbmcvfs.mkdir(self.remote_path) + + #figure out which syncing options to run + if(self.Addon.getSetting('backup_addons') == 'true'): + xbmcvfs.mkdir(self.remote_path + "addons") + self.walkTree(self.local_path + "addons/") + + xbmcvfs.mkdir(self.remote_path + "userdata") + if(self.Addon.getSetting('backup_addon_data') == 'true'): + xbmcvfs.mkdir(self.remote_path + "userdata/addon_data") + self.walkTree(self.local_path + "userdata/addon_data/") + + def walkTree(self,directory): + for (path, dirs, files) in os.walk(directory): + #get the relative part of this path + path = path[len(self.local_path):] + + #create all the subdirs first + for aDir in dirs: + xbmcvfs.mkdir(self.remote_path + os.sep + path + os.sep + aDir) + #copy all the files + for aFile in files: + filePath = path + os.sep + aFile + self.log("copying: " + self.local_path + filePath) + xbmcvfs.copy(self.local_path + filePath,self.remote_path + filePath) + + def log(self,message): + xbmc.log(self.__addon_id__ + ": " + message) + + def isReady(self): + return True if self.remote_path != '' else False + +#run the profile backup +backup = XbmcBackup() + +if(backup.isReady()): + backup.syncFiles() +else: + xbmcgui.Dialog().ok('XBMC Backup','Error: Remote path cannot be empty') diff --git a/resources/settings.xml b/resources/settings.xml index 11292e8..bb8d4d8 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -2,5 +2,14 @@ + + + + + + + + +