split backup and restore into separate functions

This commit is contained in:
robweber 2019-07-29 16:58:00 -05:00
parent dcc8482d73
commit 83a01a48bf
3 changed files with 903 additions and 887 deletions

View File

@ -1,4 +1,4 @@
import urlparse import sys, urlparse
import xbmcgui import xbmcgui
import resources.lib.utils as utils import resources.lib.utils as utils
from resources.lib.backup import XbmcBackup from resources.lib.backup import XbmcBackup
@ -70,7 +70,9 @@ if(mode != -1):
if(selectedRestore != -1): if(selectedRestore != -1):
backup.selectRestore(restorePoints[selectedRestore][0]) backup.selectRestore(restorePoints[selectedRestore][0])
backup.run(mode) backup.restore()
else:
backup.backup()
else: else:
#can't go any further #can't go any further
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045)) xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045))

View File

@ -115,46 +115,10 @@ class XbmcBackup:
def skipAdvanced(self): def skipAdvanced(self):
self.skip_advanced = True self.skip_advanced = True
def run(self,mode=-1,progressOverride=False): def backup(self,progressOverride=False):
#set windows setting to true shouldContinue = self._setupVFS(self.Backup,progressOverride)
window = xbmcgui.Window(10000)
window.setProperty(utils.__addon_id__ + ".running","true")
#append backup folder name if(shouldContinue):
progressBarTitle = utils.getString(30010) + " - "
if(mode == self.Backup and self.remote_vfs.root_path != ''):
if(utils.getSetting("compress_backups") == 'true'):
#delete old temp file
if(self.xbmc_vfs.exists(xbmc.translatePath('special://temp/xbmc_backup_temp.zip'))):
if(not self.xbmc_vfs.rmfile(xbmc.translatePath('special://temp/xbmc_backup_temp.zip'))):
#we had some kind of error deleting the old file
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30096),utils.getString(30097))
return
#save the remote file system and use the zip vfs
self.saved_remote_vfs = self.remote_vfs
self.remote_vfs = ZipFileSystem(xbmc.translatePath("special://temp/xbmc_backup_temp.zip"),"w")
self.remote_vfs.set_root(self.remote_vfs.root_path + time.strftime("%Y%m%d%H%M") + "/")
progressBarTitle = progressBarTitle + utils.getString(30023) + ": " + utils.getString(30016)
elif(mode == self.Restore and self.restore_point != None and self.remote_vfs.root_path != ''):
if(self.restore_point.split('.')[-1] != 'zip'):
self.remote_vfs.set_root(self.remote_vfs.root_path + self.restore_point + "/")
progressBarTitle = progressBarTitle + utils.getString(30023) + ": " + utils.getString(30017)
else:
#kill the program here
self.remote_vfs = None
return
utils.log(utils.getString(30047) + ": " + self.xbmc_vfs.root_path)
utils.log(utils.getString(30048) + ": " + self.remote_vfs.root_path)
#setup the progress bar
self.progressBar = BackupProgressBar(progressOverride)
self.progressBar.create(progressBarTitle,utils.getString(30049) + "......")
if(mode == self.Backup):
utils.log(utils.getString(30023) + " - " + utils.getString(30016)) utils.log(utils.getString(30023) + " - " + utils.getString(30016))
#check if remote path exists #check if remote path exists
if(self.remote_vfs.exists(self.remote_vfs.root_path)): if(self.remote_vfs.exists(self.remote_vfs.root_path)):
@ -210,7 +174,7 @@ class XbmcBackup:
for fileGroup in allFiles: for fileGroup in allFiles:
self.xbmc_vfs.set_root(xbmc.translatePath(fileGroup['source'])) self.xbmc_vfs.set_root(xbmc.translatePath(fileGroup['source']))
self.remote_vfs.set_root(fileGroup['dest'] + fileGroup['name']) self.remote_vfs.set_root(fileGroup['dest'] + fileGroup['name'])
filesCopied = self.backupFiles(fileGroup['files'],self.xbmc_vfs,self.remote_vfs) filesCopied = self._copyFiles(fileGroup['files'],self.xbmc_vfs,self.remote_vfs)
if(not filesCopied): if(not filesCopied):
utils.showNotification(utils.getString(30092)) utils.showNotification(utils.getString(30092))
@ -234,7 +198,7 @@ class XbmcBackup:
self.remote_vfs = self.saved_remote_vfs self.remote_vfs = self.saved_remote_vfs
self.progressBar.updateProgress(98, utils.getString(30088)) self.progressBar.updateProgress(98, utils.getString(30088))
fileCopied = self.backupFiles(fileManager.getFiles(),self.xbmc_vfs, self.remote_vfs) fileCopied = self._copyFiles(fileManager.getFiles(),self.xbmc_vfs, self.remote_vfs)
if(not fileCopied): if(not fileCopied):
#zip archive copy filed, inform the user #zip archive copy filed, inform the user
@ -246,7 +210,13 @@ class XbmcBackup:
#remove old backups #remove old backups
self._rotateBackups() self._rotateBackups()
elif (mode == self.Restore): #close any files
self._closeVFS()
def restore(self,progressOverride=False):
shouldContinue = self._setupVFS(self.Restore, progressOverride)
if(shouldContinue):
utils.log(utils.getString(30023) + " - " + utils.getString(30017)) utils.log(utils.getString(30023) + " - " + utils.getString(30017))
#catch for if the restore point is actually a zip file #catch for if the restore point is actually a zip file
@ -262,7 +232,7 @@ class XbmcBackup:
zipFile = [] zipFile = []
zipFile.append(self.remote_base_path + self.restore_point) zipFile.append(self.remote_base_path + self.restore_point)
self.backupFiles(zipFile,self.remote_vfs, self.xbmc_vfs) self._copyFiles(zipFile,self.remote_vfs, self.xbmc_vfs)
else: else:
utils.log("zip file exists already") utils.log("zip file exists already")
@ -307,7 +277,7 @@ class XbmcBackup:
if(restartXbmc): if(restartXbmc):
#add only this file to the file list #add only this file to the file list
fileManager.addFile(self.remote_vfs.root_path + "config/advancedsettings.xml") fileManager.addFile(self.remote_vfs.root_path + "config/advancedsettings.xml")
self.backupFiles(fileManager.getFiles(),self.remote_vfs,self.xbmc_vfs) self._copyFiles(fileManager.getFiles(),self.remote_vfs,self.xbmc_vfs)
#let the service know to resume this backup on startup #let the service know to resume this backup on startup
self._createResumeBackupFile() self._createResumeBackupFile()
@ -342,7 +312,7 @@ class XbmcBackup:
for fileGroup in allFiles: for fileGroup in allFiles:
self.remote_vfs.set_root(fileGroup['source']) self.remote_vfs.set_root(fileGroup['source'])
self.xbmc_vfs.set_root(fileGroup['dest']) self.xbmc_vfs.set_root(fileGroup['dest'])
self.backupFiles(fileGroup['files'],self.remote_vfs,self.xbmc_vfs) self._copyFiles(fileGroup['files'],self.remote_vfs,self.xbmc_vfs)
self.progressBar.updateProgress(99,"Clean up operations .....") self.progressBar.updateProgress(99,"Clean up operations .....")
@ -359,14 +329,58 @@ class XbmcBackup:
#call update addons to refresh everything #call update addons to refresh everything
xbmc.executebuiltin('UpdateLocalAddons') xbmc.executebuiltin('UpdateLocalAddons')
def _setupVFS(self,mode=-1,progressOverride=False):
#set windows setting to true
window = xbmcgui.Window(10000)
window.setProperty(utils.__addon_id__ + ".running","true")
#append backup folder name
progressBarTitle = utils.getString(30010) + " - "
if(mode == self.Backup and self.remote_vfs.root_path != ''):
if(utils.getSetting("compress_backups") == 'true'):
#delete old temp file
if(self.xbmc_vfs.exists(xbmc.translatePath('special://temp/xbmc_backup_temp.zip'))):
if(not self.xbmc_vfs.rmfile(xbmc.translatePath('special://temp/xbmc_backup_temp.zip'))):
#we had some kind of error deleting the old file
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30096),utils.getString(30097))
return False
#save the remote file system and use the zip vfs
self.saved_remote_vfs = self.remote_vfs
self.remote_vfs = ZipFileSystem(xbmc.translatePath("special://temp/xbmc_backup_temp.zip"),"w")
self.remote_vfs.set_root(self.remote_vfs.root_path + time.strftime("%Y%m%d%H%M") + "/")
progressBarTitle = progressBarTitle + utils.getString(30023) + ": " + utils.getString(30016)
elif(mode == self.Restore and self.restore_point != None and self.remote_vfs.root_path != ''):
if(self.restore_point.split('.')[-1] != 'zip'):
self.remote_vfs.set_root(self.remote_vfs.root_path + self.restore_point + "/")
progressBarTitle = progressBarTitle + utils.getString(30023) + ": " + utils.getString(30017)
else:
#kill the program here
self.remote_vfs = None
return False
utils.log(utils.getString(30047) + ": " + self.xbmc_vfs.root_path)
utils.log(utils.getString(30048) + ": " + self.remote_vfs.root_path)
#setup the progress bar
self.progressBar = BackupProgressBar(progressOverride)
self.progressBar.create(progressBarTitle,utils.getString(30049) + "......")
#if we made it this far we're good
return True
def _closeVFS(self):
self.xbmc_vfs.cleanup() self.xbmc_vfs.cleanup()
self.remote_vfs.cleanup() self.remote_vfs.cleanup()
self.progressBar.close() self.progressBar.close()
#reset the window setting #reset the window setting
window = xbmcgui.Window(10000)
window.setProperty(utils.__addon_id__ + ".running","") window.setProperty(utils.__addon_id__ + ".running","")
def backupFiles(self,fileList,source,dest): def _copyFiles(self,fileList,source,dest):
result = True result = True
utils.log("Source: " + source.root_path) utils.log("Source: " + source.root_path)

View File

@ -68,7 +68,7 @@ class BackupScheduler:
restore.selectRestore(self.restore_point) restore.selectRestore(self.restore_point)
#skip the advanced settings check #skip the advanced settings check
restore.skipAdvanced() restore.skipAdvanced()
restore.run(XbmcBackup.Restore) restore.restore()
while(not xbmc.abortRequested): while(not xbmc.abortRequested):
@ -103,9 +103,9 @@ class BackupScheduler:
if(backup.remoteConfigured()): if(backup.remoteConfigured()):
if(int(utils.getSetting('progress_mode')) in [0,1]): if(int(utils.getSetting('progress_mode')) in [0,1]):
backup.run(XbmcBackup.Backup,True) backup.backup(True)
else: else:
backup.run(XbmcBackup.Backup,False) backup.backup(False)
#check if this is a "one-off" #check if this is a "one-off"
if(int(utils.getSetting("schedule_interval")) == 0): if(int(utils.getSetting("schedule_interval")) == 0):