mirror of
				https://github.com/robweber/xbmcbackup.git
				synced 2025-11-04 03:02:16 +01:00 
			
		
		
		
	check for advanced settings and restart xbmc to continue (#30)
This commit is contained in:
		@@ -24,7 +24,8 @@ class XbmcBackup:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    fileManager = None
 | 
					    fileManager = None
 | 
				
			||||||
    restore_point = None
 | 
					    restore_point = None
 | 
				
			||||||
 | 
					    skip_advanced = False   #if we should check for the existance of advancedsettings in the restore
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        self.xbmc_vfs = XBMCFileSystem(xbmc.translatePath('special://home'))
 | 
					        self.xbmc_vfs = XBMCFileSystem(xbmc.translatePath('special://home'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,6 +59,9 @@ class XbmcBackup:
 | 
				
			|||||||
    def selectRestore(self,restore_point):
 | 
					    def selectRestore(self,restore_point):
 | 
				
			||||||
        self.restore_point = restore_point
 | 
					        self.restore_point = restore_point
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def skipAdvanced(self):
 | 
				
			||||||
 | 
					        self.skip_advanced = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run(self,mode=-1,runSilent=False):
 | 
					    def run(self,mode=-1,runSilent=False):
 | 
				
			||||||
        #append backup folder name
 | 
					        #append backup folder name
 | 
				
			||||||
        progressBarTitle = utils.getString(30010) + " - "
 | 
					        progressBarTitle = utils.getString(30010) + " - "
 | 
				
			||||||
@@ -184,6 +188,38 @@ class XbmcBackup:
 | 
				
			|||||||
            fileManager = FileManager(self.remote_vfs)
 | 
					            fileManager = FileManager(self.remote_vfs)
 | 
				
			||||||
         
 | 
					         
 | 
				
			||||||
            #go through each of the user selected items and write them to the backup store
 | 
					            #go through each of the user selected items and write them to the backup store
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(utils.getSetting("backup_config") == "true"):
 | 
				
			||||||
 | 
					                #check for the existance of an advancedsettings file
 | 
				
			||||||
 | 
					                if(self.remote_vfs.exists(self.remote_vfs.root_path + "userdata/advancedsettings.xml") and not self.skip_advanced):
 | 
				
			||||||
 | 
					                    #let the user know there is an advanced settings file present
 | 
				
			||||||
 | 
					                    restartXbmc = xbmcgui.Dialog().yesno("Advanced Settings Detected","The advancedsettings file should be restored first","Select Yes to restore this file and restart XBMC", "Select No to continue")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if(restartXbmc):
 | 
				
			||||||
 | 
					                        #add only this file to the file list
 | 
				
			||||||
 | 
					                        fileManager.addFile(self.remote_vfs.root_path + "userdata/advancedsettings.xml")
 | 
				
			||||||
 | 
					                        self.backupFiles(fileManager.getFiles(),self.remote_vfs,self.xbmc_vfs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        #let the service know to resume this backup on startup
 | 
				
			||||||
 | 
					                        self._createResumeBackupFile()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        #do not continue running
 | 
				
			||||||
 | 
					                        xbmcgui.Dialog().ok("Restart XBMC","You should restart XBMC to continue")
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                        return
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata/keymaps'))
 | 
				
			||||||
 | 
					                fileManager.walkTree(self.remote_vfs.root_path + "userdata/keymaps")
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata/peripheral_data'))
 | 
				
			||||||
 | 
					                fileManager.walkTree(self.remote_vfs.root_path + "userdata/peripheral_data")
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					                #this part is an oddity
 | 
				
			||||||
 | 
					                dirs,configFiles = self.remote_vfs.listdir(self.remote_vfs.root_path + "userdata/")
 | 
				
			||||||
 | 
					                for aFile in configFiles:
 | 
				
			||||||
 | 
					                    if(aFile.endswith(".xml")):
 | 
				
			||||||
 | 
					                        fileManager.addFile(self.remote_vfs.root_path + "userdata/" + aFile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(utils.getSetting('backup_addons') == 'true'):
 | 
					            if(utils.getSetting('backup_addons') == 'true'):
 | 
				
			||||||
                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/addons'))
 | 
					                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/addons'))
 | 
				
			||||||
                fileManager.walkTree(self.remote_vfs.root_path + "addons")
 | 
					                fileManager.walkTree(self.remote_vfs.root_path + "addons")
 | 
				
			||||||
@@ -206,19 +242,6 @@ class XbmcBackup:
 | 
				
			|||||||
                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata/Thumbnails'))
 | 
					                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata/Thumbnails'))
 | 
				
			||||||
                fileManager.walkTree(self.remote_vfs.root_path + "userdata/Thumbnails")
 | 
					                fileManager.walkTree(self.remote_vfs.root_path + "userdata/Thumbnails")
 | 
				
			||||||
	  
 | 
						  
 | 
				
			||||||
            if(utils.getSetting("backup_config") == "true"):
 | 
					 | 
				
			||||||
                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata/keymaps'))
 | 
					 | 
				
			||||||
                fileManager.walkTree(self.remote_vfs.root_path + "userdata/keymaps")
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata/peripheral_data'))
 | 
					 | 
				
			||||||
                fileManager.walkTree(self.remote_vfs.root_path + "userdata/peripheral_data")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                #this part is an oddity
 | 
					 | 
				
			||||||
                dirs,configFiles = self.remote_vfs.listdir(self.remote_vfs.root_path + "userdata/")
 | 
					 | 
				
			||||||
                for aFile in configFiles:
 | 
					 | 
				
			||||||
                    if(aFile.endswith(".xml")):
 | 
					 | 
				
			||||||
                        fileManager.addFile(self.remote_vfs.root_path + "userdata/" + aFile)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            #add to array
 | 
					            #add to array
 | 
				
			||||||
            self.filesTotal = fileManager.size()
 | 
					            self.filesTotal = fileManager.size()
 | 
				
			||||||
            allFiles.append({"source":self.remote_vfs.root_path,"dest":self.xbmc_vfs.root_path,"files":fileManager.getFiles()})    
 | 
					            allFiles.append({"source":self.remote_vfs.root_path,"dest":self.xbmc_vfs.root_path,"files":fileManager.getFiles()})    
 | 
				
			||||||
@@ -329,11 +352,16 @@ class XbmcBackup:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def _createValidationFile(self):
 | 
					    def _createValidationFile(self):
 | 
				
			||||||
        vFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),'w')
 | 
					        vFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),'w')
 | 
				
			||||||
        vFile.write("XBMC Backup Validation File");
 | 
					        vFile.write("XBMC Backup Validation File")
 | 
				
			||||||
        vFile.close()
 | 
					        vFile.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.remote_vfs.put(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),self.remote_vfs.root_path + "xbmcbackup.val")
 | 
					        self.remote_vfs.put(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),self.remote_vfs.root_path + "xbmcbackup.val")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _createResumeBackupFile(self):
 | 
				
			||||||
 | 
					        rFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "resume.txt"),'w')
 | 
				
			||||||
 | 
					        rFile.write(self.restore_point)
 | 
				
			||||||
 | 
					        rFile.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FileManager:
 | 
					class FileManager:
 | 
				
			||||||
    fileArray = []
 | 
					    fileArray = []
 | 
				
			||||||
    not_dir = ['.zip','.xsp','.rar']
 | 
					    not_dir = ['.zip','.xsp','.rar']
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								scheduler.py
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								scheduler.py
									
									
									
									
									
								
							@@ -1,4 +1,6 @@
 | 
				
			|||||||
import xbmc
 | 
					import xbmc
 | 
				
			||||||
 | 
					import xbmcvfs
 | 
				
			||||||
 | 
					import xbmcgui
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
@@ -10,6 +12,7 @@ class BackupScheduler:
 | 
				
			|||||||
    monitor = None
 | 
					    monitor = None
 | 
				
			||||||
    enabled = "false"
 | 
					    enabled = "false"
 | 
				
			||||||
    next_run = 0
 | 
					    next_run = 0
 | 
				
			||||||
 | 
					    restore_point = None
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        self.monitor = UpdateMonitor(update_method = self.settingsChanged)
 | 
					        self.monitor = UpdateMonitor(update_method = self.settingsChanged)
 | 
				
			||||||
@@ -25,6 +28,17 @@ class BackupScheduler:
 | 
				
			|||||||
        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):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #check if a backup should be resumed
 | 
				
			||||||
 | 
					        resumeRestore = self._resumeCheck()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(resumeRestore):
 | 
				
			||||||
 | 
					            restore = XbmcBackup()
 | 
				
			||||||
 | 
					            restore.selectRestore(self.restore_point)
 | 
				
			||||||
 | 
					            #skip the advanced settings check
 | 
				
			||||||
 | 
					            restore.skipAdvanced()
 | 
				
			||||||
 | 
					            restore.run(XbmcBackup.Restore)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        while(not xbmc.abortRequested):
 | 
					        while(not xbmc.abortRequested):
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            if(self.enabled == "true"):
 | 
					            if(self.enabled == "true"):
 | 
				
			||||||
@@ -92,7 +106,19 @@ class BackupScheduler:
 | 
				
			|||||||
            #first day of month
 | 
					            #first day of month
 | 
				
			||||||
            cron_exp = "0 " + str(hour_of_day) + " 1 * *"
 | 
					            cron_exp = "0 " + str(hour_of_day) + " 1 * *"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return cron_exp    
 | 
					        return cron_exp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _resumeCheck(self):
 | 
				
			||||||
 | 
					        shouldContinue = False
 | 
				
			||||||
 | 
					        if(xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "resume.txt"))):
 | 
				
			||||||
 | 
					            rFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "resume.txt"),'r')
 | 
				
			||||||
 | 
					            self.restore_point = rFile.read()
 | 
				
			||||||
 | 
					            rFile.close()
 | 
				
			||||||
 | 
					            xbmcvfs.delete(xbmc.translatePath(utils.data_dir() + "resume.txt"))
 | 
				
			||||||
 | 
					            shouldContinue = xbmcgui.Dialog().yesno("Resume Restore","XBMC Backup has detected an unfinished restore","Would you like to continue?")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return shouldContinue
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UpdateMonitor(xbmc.Monitor):
 | 
					class UpdateMonitor(xbmc.Monitor):
 | 
				
			||||||
    update_method = None
 | 
					    update_method = None
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user