mirror of
https://github.com/robweber/xbmcbackup.git
synced 2026-04-02 16:47:59 +02:00
fix vfs methods as dropbox has changed them
This commit is contained in:
@@ -7,7 +7,8 @@ import zipfile
|
|||||||
import zlib
|
import zlib
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from dropbox import client
|
import dropbox
|
||||||
|
from dropbox.files import WriteMode
|
||||||
from pydrive.drive import GoogleDrive
|
from pydrive.drive import GoogleDrive
|
||||||
from authorizers import DropboxAuthorizer,GoogleDriveAuthorizer
|
from authorizers import DropboxAuthorizer,GoogleDriveAuthorizer
|
||||||
|
|
||||||
@@ -134,16 +135,18 @@ class DropboxFileSystem(Vfs):
|
|||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
def listdir(self,directory):
|
def listdir(self,directory):
|
||||||
|
directory = self._fix_slashes(directory)
|
||||||
|
|
||||||
if(self.client != None and self.exists(directory)):
|
if(self.client != None and self.exists(directory)):
|
||||||
files = []
|
files = []
|
||||||
dirs = []
|
dirs = []
|
||||||
metadata = self.client.metadata(directory)
|
metadata = self.client.files_list_folder(directory)
|
||||||
|
|
||||||
for aFile in metadata['contents']:
|
for aFile in metadata.entries:
|
||||||
if(aFile['is_dir']):
|
if(isinstance(aFile,dropbox.files.FolderMetadata)):
|
||||||
dirs.append(utils.encode(aFile['path'][len(directory):]))
|
dirs.append(utils.encode(aFile.name))
|
||||||
else:
|
else:
|
||||||
files.append(utils.encode(aFile['path'][len(directory):]))
|
files.append(utils.encode(aFile.name))
|
||||||
|
|
||||||
return [dirs,files]
|
return [dirs,files]
|
||||||
else:
|
else:
|
||||||
@@ -153,8 +156,7 @@ class DropboxFileSystem(Vfs):
|
|||||||
def mkdir(self,directory):
|
def mkdir(self,directory):
|
||||||
directory = self._fix_slashes(directory)
|
directory = self._fix_slashes(directory)
|
||||||
if(self.client != None):
|
if(self.client != None):
|
||||||
if(not self.exists(directory)):
|
#sort of odd but always return true, folder create is implicit with file upload
|
||||||
self.client.file_create_folder(directory)
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@@ -169,7 +171,7 @@ class DropboxFileSystem(Vfs):
|
|||||||
self.rmdir(aDir)
|
self.rmdir(aDir)
|
||||||
|
|
||||||
#finally remove the root directory
|
#finally remove the root directory
|
||||||
self.client.file_delete(directory)
|
self.client.files_delete(directory)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@@ -179,16 +181,21 @@ class DropboxFileSystem(Vfs):
|
|||||||
aFile = self._fix_slashes(aFile)
|
aFile = self._fix_slashes(aFile)
|
||||||
|
|
||||||
if(self.client != None and self.exists(aFile)):
|
if(self.client != None and self.exists(aFile)):
|
||||||
self.client.file_delete(aFile)
|
self.client.files_delete(aFile)
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def exists(self,aFile):
|
def exists(self,aFile):
|
||||||
aFile = self._fix_slashes(aFile)
|
aFile = self._fix_slashes(aFile)
|
||||||
|
|
||||||
if(self.client != None):
|
if(self.client != None):
|
||||||
|
#can't list root metadata
|
||||||
|
if(aFile == ''):
|
||||||
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
meta_data = self.client.metadata(aFile)
|
meta_data = self.client.files_get_metadata(aFile)
|
||||||
#if we make it here the file does exist
|
#if we make it here the file does exist
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
@@ -202,7 +209,7 @@ class DropboxFileSystem(Vfs):
|
|||||||
if(self.client != None):
|
if(self.client != None):
|
||||||
f = open(source,'rb')
|
f = open(source,'rb')
|
||||||
try:
|
try:
|
||||||
response = self.client.put_file(dest,f,True)
|
response = self.client.files_upload(f.read(),dest,mode=WriteMode('overwrite'))
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
#if we have an exception retry
|
#if we have an exception retry
|
||||||
@@ -217,16 +224,18 @@ class DropboxFileSystem(Vfs):
|
|||||||
def get_file(self,source,dest):
|
def get_file(self,source,dest):
|
||||||
if(self.client != None):
|
if(self.client != None):
|
||||||
#write the file locally
|
#write the file locally
|
||||||
out = open(dest,'wb')
|
f = self.client.files_download_to_file(dest,source)
|
||||||
f = self.client.get_file(source).read()
|
|
||||||
out.write(f)
|
|
||||||
out.close()
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _fix_slashes(self,filename):
|
def _fix_slashes(self,filename):
|
||||||
return filename.replace('\\','/')
|
result = filename.replace('\\','/')
|
||||||
|
|
||||||
|
if(result == '/'):
|
||||||
|
result = ""
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class GoogleDriveFilesystem(Vfs):
|
class GoogleDriveFilesystem(Vfs):
|
||||||
|
|||||||
Reference in New Issue
Block a user