Initial commit (Vesion 0.1)
[tablet-suite] / src / backup / pcsdevicebackupmanager.py
diff --git a/src/backup/pcsdevicebackupmanager.py b/src/backup/pcsdevicebackupmanager.py
new file mode 100644 (file)
index 0000000..095bfd7
--- /dev/null
@@ -0,0 +1,102 @@
+
+from pcsbackupmanager import *
+from pcspcbackupmanager import PcsPcBackupManager
+from pcsbackupinfo import PcsBackupInfo
+import pcsbackuputils as utils
+
+
+class PcsDeviceBackupManager(PcsBackupManager):
+
+
+    def __init__(self, deviceInfo):
+        PcsBackupManager.__init__(self)
+        self._backupList = []
+        self._deviceInfo = deviceInfo
+        self.restoreInProgress = False
+        self.copyInProgress = False
+
+    def loadBackups(self):
+        
+        # FIXME, error handling is wrong!! return list of PcsBackupInfo
+        try:
+            mountPoint = os.path.join(DEVICES_POINT, "%s/Root" % self._deviceInfo.ip)
+            utils.mountDevice(USER_HOST, self._deviceInfo.ip, mountPoint)
+            
+            self._backupList = utils.getDeviceBackupList(mountPoint)
+            return True
+
+        except Exception, x:
+            print str(x)
+        finally:
+            utils.unmountDevice(mountPoint)  
+            
+        return False          
+    def getBackupList(self):
+        self.loadBackups()
+        for backup in self._backupList:
+            backup.setAtDevice(True)
+        return self._backupList
+    
+    def copyBackupFromDevice(self, backupName, destinationPath):
+        try:
+            self.loadBackups()
+            device_backups = self.getBackupList()
+            
+            mountPoint = os.path.join(DEVICES_POINT, "%s/Root" % self._deviceInfo.ip)
+            utils.mountDevice(USER_HOST, self._deviceInfo.ip, mountPoint)
+    
+            # Search complete_path
+            completePath = ''
+            for backup in device_backups:
+                if backupName == backup.getName():
+                    completePath = backup.getPath()
+                    break
+            if completePath == '':
+                raise Exception("Backup not found.")
+            
+            pcBackupManager = PcsPcBackupManager()
+            pcBackupManager.loadBackups()
+            correctName = pcBackupManager._verify_backup_name(backupName)
+            destination = os.path.join(destinationPath, correctName)
+            
+            self.setCopyInProgress(True)
+            if self.copy(completePath, destination) == 0:
+                return 0
+            self.setCopyInProgress(False)
+            
+            backup_size = utils.getSize(destination)
+            backup = PcsBackupInfo(correctName, destinationPath, backup_size, 
+                                   'Copied from device')
+            backup.setAtDevice(False)
+            pcBackupManager._backupList.append(backup)
+            pcBackupManager.saveBackups()
+            
+        finally:
+            utils.unmountDevice(mountPoint)
+            
+            
+    def startBackupRestore(self, backupInfo, categories):
+        device_ip = self._deviceInfo.ip
+        return self.restoreBackup(backupInfo, device_ip, categories)
+    
+    
+    def setCopyInProgress(self, status):
+        self.copyInProgress = status
+        
+        
+    def setRestoreInProgress(self, status):
+        self.restoreInProgress = status
+        
+
+    def getBackupInfo(self, backupName):
+        self.loadBackups()
+        for backupInfo in self._backupList:
+            if backupInfo.getName() == backupName:
+                backupInfo.setAtDevice(True)
+                return backupInfo
+            
+        return None
+    
+            
+        
\ No newline at end of file