2012-10-26 16:42:10 +02:00
|
|
|
import utils as utils
|
2017-01-30 19:51:50 +01:00
|
|
|
import tinyurl as tinyurl
|
2012-11-05 19:25:25 +01:00
|
|
|
import xbmc
|
2012-11-02 21:59:40 +01:00
|
|
|
import xbmcvfs
|
2012-11-04 21:39:17 +01:00
|
|
|
import xbmcgui
|
2014-07-30 22:16:58 +02:00
|
|
|
import zipfile
|
|
|
|
import zlib
|
2014-10-09 21:30:39 +02:00
|
|
|
import os
|
2017-01-31 15:08:00 +01:00
|
|
|
import sys
|
2017-12-04 00:32:21 +01:00
|
|
|
import dropbox
|
|
|
|
from dropbox.files import WriteMode
|
2014-10-09 21:30:39 +02:00
|
|
|
from pydrive.drive import GoogleDrive
|
2017-01-31 15:08:00 +01:00
|
|
|
from authorizers import DropboxAuthorizer,GoogleDriveAuthorizer
|
2012-10-26 16:42:10 +02:00
|
|
|
|
|
|
|
class Vfs:
|
2012-11-04 21:39:17 +01:00
|
|
|
root_path = None
|
2012-10-26 16:42:10 +02:00
|
|
|
|
2013-01-28 22:44:22 +01:00
|
|
|
def __init__(self,rootString):
|
|
|
|
self.set_root(rootString)
|
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def set_root(self,rootString):
|
2012-11-05 18:13:48 +01:00
|
|
|
old_root = self.root_path
|
2012-11-04 21:39:17 +01:00
|
|
|
self.root_path = rootString
|
2014-08-01 00:29:59 +02:00
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
#fix slashes
|
|
|
|
self.root_path = self.root_path.replace("\\","/")
|
|
|
|
|
|
|
|
#check if trailing slash is included
|
|
|
|
if(self.root_path[-1:] != "/"):
|
|
|
|
self.root_path = self.root_path + "/"
|
2012-11-05 18:13:48 +01:00
|
|
|
|
|
|
|
#return the old root
|
|
|
|
return old_root
|
2012-11-04 21:39:17 +01:00
|
|
|
|
|
|
|
def listdir(self,directory):
|
2012-10-26 16:42:10 +02:00
|
|
|
return {}
|
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def mkdir(self,directory):
|
2012-10-26 16:42:10 +02:00
|
|
|
return True
|
|
|
|
|
2012-11-06 18:37:39 +01:00
|
|
|
def put(self,source,dest):
|
2012-10-26 16:42:10 +02:00
|
|
|
return True
|
2012-11-02 21:59:40 +01:00
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def rmdir(self,directory):
|
2012-11-02 21:59:40 +01:00
|
|
|
return True
|
|
|
|
|
2014-08-01 20:12:43 +02:00
|
|
|
def rmfile(self,aFile):
|
|
|
|
return True
|
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def exists(self,aFile):
|
2012-11-02 21:59:40 +01:00
|
|
|
return True
|
2014-07-30 22:16:58 +02:00
|
|
|
|
|
|
|
def rename(self,aFile,newName):
|
|
|
|
return True
|
|
|
|
|
|
|
|
def cleanup(self):
|
|
|
|
return True
|
2012-10-26 16:42:10 +02:00
|
|
|
|
2012-11-02 21:59:40 +01:00
|
|
|
class XBMCFileSystem(Vfs):
|
2013-01-28 22:44:22 +01:00
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def listdir(self,directory):
|
2012-11-02 21:59:40 +01:00
|
|
|
return xbmcvfs.listdir(directory)
|
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def mkdir(self,directory):
|
2014-08-08 17:37:16 +02:00
|
|
|
return xbmcvfs.mkdir(xbmc.translatePath(directory))
|
2012-11-02 21:59:40 +01:00
|
|
|
|
2012-11-06 18:37:39 +01:00
|
|
|
def put(self,source,dest):
|
2014-08-08 17:37:16 +02:00
|
|
|
return xbmcvfs.copy(xbmc.translatePath(source),xbmc.translatePath(dest))
|
2012-11-06 18:37:39 +01:00
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def rmdir(self,directory):
|
2012-11-02 21:59:40 +01:00
|
|
|
return xbmcvfs.rmdir(directory,True)
|
|
|
|
|
2014-08-01 20:12:43 +02:00
|
|
|
def rmfile(self,aFile):
|
|
|
|
return xbmcvfs.delete(aFile)
|
|
|
|
|
2014-07-30 22:16:58 +02:00
|
|
|
def rename(self,aFile,newName):
|
|
|
|
return xbmcvfs.rename(aFile, newName)
|
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
def exists(self,aFile):
|
2012-11-02 21:59:40 +01:00
|
|
|
return xbmcvfs.exists(aFile)
|
|
|
|
|
2014-07-30 22:16:58 +02:00
|
|
|
class ZipFileSystem(Vfs):
|
|
|
|
zip = None
|
|
|
|
|
|
|
|
def __init__(self,rootString,mode):
|
|
|
|
self.root_path = ""
|
2015-04-24 16:23:56 +02:00
|
|
|
self.zip = zipfile.ZipFile(rootString,mode=mode,compression=zipfile.ZIP_DEFLATED,allowZip64=True)
|
2014-07-30 22:16:58 +02:00
|
|
|
|
|
|
|
def listdir(self,directory):
|
2014-08-01 19:57:55 +02:00
|
|
|
return [[],[]]
|
2014-07-30 22:16:58 +02:00
|
|
|
|
|
|
|
def mkdir(self,directory):
|
|
|
|
#self.zip.write(directory[len(self.root_path):])
|
2014-08-01 19:57:55 +02:00
|
|
|
return False
|
2014-07-30 22:16:58 +02:00
|
|
|
|
|
|
|
def put(self,source,dest):
|
2014-08-08 17:26:39 +02:00
|
|
|
|
|
|
|
aFile = xbmcvfs.File(xbmc.translatePath(source),'r')
|
|
|
|
|
2015-04-24 16:23:56 +02:00
|
|
|
self.zip.writestr(utils.encode(dest),aFile.read())
|
2014-08-08 17:26:39 +02:00
|
|
|
|
2014-07-30 22:16:58 +02:00
|
|
|
return True
|
|
|
|
|
|
|
|
def rmdir(self,directory):
|
2014-08-01 19:57:55 +02:00
|
|
|
return False
|
2014-07-30 22:16:58 +02:00
|
|
|
|
|
|
|
def exists(self,aFile):
|
2014-08-01 19:57:55 +02:00
|
|
|
return False
|
2014-07-30 22:16:58 +02:00
|
|
|
|
|
|
|
def cleanup(self):
|
|
|
|
self.zip.close()
|
2014-08-01 19:57:55 +02:00
|
|
|
|
2015-06-26 22:32:22 +02:00
|
|
|
def extract(self,aFile,path):
|
2014-08-01 19:57:55 +02:00
|
|
|
#extract zip file to path
|
2015-06-26 22:32:22 +02:00
|
|
|
self.zip.extract(aFile,path)
|
|
|
|
|
|
|
|
def listFiles(self):
|
|
|
|
return self.zip.infolist()
|
2014-07-30 22:16:58 +02:00
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
class DropboxFileSystem(Vfs):
|
2012-11-05 19:25:25 +01:00
|
|
|
client = None
|
2014-10-09 21:30:39 +02:00
|
|
|
APP_KEY = ''
|
|
|
|
APP_SECRET = ''
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2013-01-28 22:44:22 +01:00
|
|
|
def __init__(self,rootString):
|
2013-03-04 17:22:09 +01:00
|
|
|
self.set_root(rootString)
|
2013-01-28 22:44:22 +01:00
|
|
|
|
2017-01-31 15:08:00 +01:00
|
|
|
authorizer = DropboxAuthorizer()
|
2012-11-05 19:25:25 +01:00
|
|
|
|
2017-01-31 15:08:00 +01:00
|
|
|
if(authorizer.isAuthorized()):
|
|
|
|
self.client = authorizer.getClient()
|
2012-11-05 19:25:25 +01:00
|
|
|
else:
|
2017-01-31 15:08:00 +01:00
|
|
|
#tell the user to go back and run the authorizer
|
2017-01-31 15:16:54 +01:00
|
|
|
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30105))
|
2017-01-31 15:08:00 +01:00
|
|
|
sys.exit()
|
2012-11-05 19:25:25 +01:00
|
|
|
|
2012-11-05 22:46:17 +01:00
|
|
|
def listdir(self,directory):
|
2017-12-04 00:32:21 +01:00
|
|
|
directory = self._fix_slashes(directory)
|
|
|
|
|
2012-11-05 22:46:17 +01:00
|
|
|
if(self.client != None and self.exists(directory)):
|
|
|
|
files = []
|
|
|
|
dirs = []
|
2017-12-04 00:32:21 +01:00
|
|
|
metadata = self.client.files_list_folder(directory)
|
2012-11-05 22:46:17 +01:00
|
|
|
|
2017-12-04 00:32:21 +01:00
|
|
|
for aFile in metadata.entries:
|
|
|
|
if(isinstance(aFile,dropbox.files.FolderMetadata)):
|
|
|
|
dirs.append(utils.encode(aFile.name))
|
2012-11-05 22:46:17 +01:00
|
|
|
else:
|
2017-12-04 00:32:21 +01:00
|
|
|
files.append(utils.encode(aFile.name))
|
2012-11-05 22:46:17 +01:00
|
|
|
|
|
|
|
return [dirs,files]
|
|
|
|
else:
|
|
|
|
return [[],[]]
|
|
|
|
|
|
|
|
|
2012-11-05 19:25:25 +01:00
|
|
|
def mkdir(self,directory):
|
2013-03-04 17:22:09 +01:00
|
|
|
directory = self._fix_slashes(directory)
|
2012-11-05 19:25:25 +01:00
|
|
|
if(self.client != None):
|
2017-12-04 00:32:21 +01:00
|
|
|
#sort of odd but always return true, folder create is implicit with file upload
|
2012-11-05 19:25:25 +01:00
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
2012-11-05 22:46:17 +01:00
|
|
|
def rmdir(self,directory):
|
2013-03-04 17:22:09 +01:00
|
|
|
directory = self._fix_slashes(directory)
|
2012-11-05 22:46:17 +01:00
|
|
|
if(self.client != None and self.exists(directory)):
|
2014-07-29 15:43:34 +02:00
|
|
|
#dropbox is stupid and will refuse to do this sometimes, need to delete recursively
|
|
|
|
dirs,files = self.listdir(directory)
|
|
|
|
|
|
|
|
for aDir in dirs:
|
|
|
|
self.rmdir(aDir)
|
|
|
|
|
|
|
|
#finally remove the root directory
|
2017-12-04 00:32:21 +01:00
|
|
|
self.client.files_delete(directory)
|
2014-08-01 20:12:43 +02:00
|
|
|
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
2014-11-21 20:30:22 +01:00
|
|
|
def rmfile(self,aFile):
|
2014-08-01 20:12:43 +02:00
|
|
|
aFile = self._fix_slashes(aFile)
|
2014-11-21 20:30:22 +01:00
|
|
|
|
2014-08-01 20:12:43 +02:00
|
|
|
if(self.client != None and self.exists(aFile)):
|
2017-12-04 00:32:21 +01:00
|
|
|
self.client.files_delete(aFile)
|
2014-08-01 20:12:43 +02:00
|
|
|
return True
|
2012-11-05 22:46:17 +01:00
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
2012-11-05 19:25:25 +01:00
|
|
|
def exists(self,aFile):
|
2013-03-04 17:22:09 +01:00
|
|
|
aFile = self._fix_slashes(aFile)
|
2017-12-04 00:32:21 +01:00
|
|
|
|
2012-11-05 19:25:25 +01:00
|
|
|
if(self.client != None):
|
2017-12-04 00:32:21 +01:00
|
|
|
#can't list root metadata
|
|
|
|
if(aFile == ''):
|
|
|
|
return True
|
|
|
|
|
2012-11-04 21:39:17 +01:00
|
|
|
try:
|
2017-12-04 00:32:21 +01:00
|
|
|
meta_data = self.client.files_get_metadata(aFile)
|
2012-11-05 19:25:25 +01:00
|
|
|
#if we make it here the file does exist
|
|
|
|
return True
|
2012-11-04 21:39:17 +01:00
|
|
|
except:
|
2012-11-05 19:25:25 +01:00
|
|
|
return False
|
|
|
|
else:
|
|
|
|
return False
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-06-03 20:34:02 +02:00
|
|
|
def put(self,source,dest,retry=True):
|
2013-03-04 17:22:09 +01:00
|
|
|
dest = self._fix_slashes(dest)
|
|
|
|
|
2012-11-05 19:25:25 +01:00
|
|
|
if(self.client != None):
|
|
|
|
f = open(source,'rb')
|
2012-11-05 22:46:17 +01:00
|
|
|
try:
|
2017-12-04 00:32:21 +01:00
|
|
|
response = self.client.files_upload(f.read(),dest,mode=WriteMode('overwrite'))
|
2012-11-05 22:46:17 +01:00
|
|
|
return True
|
|
|
|
except:
|
|
|
|
#if we have an exception retry
|
2014-06-03 20:34:02 +02:00
|
|
|
if(retry):
|
|
|
|
return self.put(source,dest,False)
|
|
|
|
else:
|
|
|
|
#tried once already, just quit
|
|
|
|
return False
|
2012-11-05 19:25:25 +01:00
|
|
|
else:
|
|
|
|
return False
|
2012-11-06 18:37:39 +01:00
|
|
|
|
|
|
|
def get_file(self,source,dest):
|
|
|
|
if(self.client != None):
|
|
|
|
#write the file locally
|
2017-12-04 00:32:21 +01:00
|
|
|
f = self.client.files_download_to_file(dest,source)
|
2013-03-04 17:27:25 +01:00
|
|
|
return True
|
2012-11-06 18:37:39 +01:00
|
|
|
else:
|
|
|
|
return False
|
2013-03-04 17:22:09 +01:00
|
|
|
|
|
|
|
def _fix_slashes(self,filename):
|
2017-12-04 00:32:21 +01:00
|
|
|
result = filename.replace('\\','/')
|
|
|
|
|
|
|
|
if(result == '/'):
|
|
|
|
result = ""
|
|
|
|
|
|
|
|
return result
|
2012-11-04 21:39:17 +01:00
|
|
|
|
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
class GoogleDriveFilesystem(Vfs):
|
|
|
|
drive = None
|
|
|
|
history = {}
|
|
|
|
FOLDER_TYPE = 'application/vnd.google-apps.folder'
|
|
|
|
|
|
|
|
def __init__(self,rootString):
|
|
|
|
self.set_root(rootString)
|
|
|
|
|
2017-01-31 15:08:00 +01:00
|
|
|
authorizer = GoogleDriveAuthorizer()
|
2014-10-09 21:30:39 +02:00
|
|
|
|
2017-01-31 15:08:00 +01:00
|
|
|
if(authorizer.isAuthorized()):
|
|
|
|
self.drive = authorizer.getClient()
|
2014-10-09 21:30:39 +02:00
|
|
|
else:
|
2017-01-31 15:08:00 +01:00
|
|
|
#tell the user to go back and run the authorizer
|
2017-01-31 15:16:54 +01:00
|
|
|
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30105))
|
2017-01-31 15:08:00 +01:00
|
|
|
sys.exit()
|
|
|
|
|
2014-10-09 21:42:59 +02:00
|
|
|
#make sure we have the folder we need
|
|
|
|
xbmc_folder = self._getGoogleFile(self.root_path)
|
|
|
|
if(xbmc_folder == None):
|
|
|
|
self.mkdir(self.root_path)
|
2017-01-31 15:08:00 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
def listdir(self,directory):
|
|
|
|
files = []
|
|
|
|
dirs = []
|
|
|
|
|
|
|
|
if(not directory.startswith('/')):
|
|
|
|
directory = '/' + directory
|
|
|
|
|
|
|
|
#get the id of this folder
|
|
|
|
parentFolder = self._getGoogleFile(directory)
|
|
|
|
|
|
|
|
#need to do this after
|
|
|
|
if(not directory.endswith('/')):
|
|
|
|
directory = directory + '/'
|
|
|
|
|
|
|
|
if(parentFolder != None):
|
|
|
|
|
|
|
|
fileList = self.drive.ListFile({'q':"'" + parentFolder['id'] + "' in parents and trashed = false"}).GetList()
|
|
|
|
|
|
|
|
for aFile in fileList:
|
|
|
|
if(aFile['mimeType'] == self.FOLDER_TYPE):
|
2014-10-10 15:49:21 +02:00
|
|
|
dirs.append(utils.encode(aFile['title']))
|
2014-10-09 21:30:39 +02:00
|
|
|
else:
|
2014-10-10 15:49:21 +02:00
|
|
|
files.append(utils.encode(aFile['title']))
|
2014-10-09 21:30:39 +02:00
|
|
|
|
|
|
|
|
|
|
|
return [dirs,files]
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
def mkdir(self,directory):
|
|
|
|
result = True
|
|
|
|
|
|
|
|
if(not directory.startswith('/')):
|
|
|
|
directory = '/' + directory
|
|
|
|
|
2014-10-09 22:19:24 +02:00
|
|
|
if(directory.endswith('/')):
|
|
|
|
directory = directory[:-1]
|
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
#split the string by the directory separator
|
|
|
|
pathList = os.path.split(directory)
|
2014-10-09 22:19:24 +02:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
if(pathList[0] == '/'):
|
2014-10-09 22:19:24 +02:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
#we're at the root, just make the folder
|
|
|
|
newFolder = self.drive.CreateFile({'title': pathList[1], 'parent':'root','mimeType':self.FOLDER_TYPE})
|
|
|
|
newFolder.Upload()
|
|
|
|
else:
|
|
|
|
#get the id of the parent folder
|
|
|
|
parentFolder = self._getGoogleFile(pathList[0])
|
|
|
|
|
|
|
|
if(parentFolder != None):
|
2014-10-09 22:19:24 +02:00
|
|
|
newFolder = self.drive.CreateFile({'title': pathList[1],"parents":[{'kind':'drive#fileLink','id':parentFolder['id']}],'mimeType':self.FOLDER_TYPE})
|
2014-10-09 21:30:39 +02:00
|
|
|
newFolder.Upload()
|
|
|
|
else:
|
|
|
|
result = False
|
|
|
|
|
|
|
|
return result
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
def put(self,source,dest):
|
|
|
|
result = True
|
|
|
|
|
|
|
|
#make the name separate from the path
|
|
|
|
if(not dest.startswith('/')):
|
|
|
|
dest = '/' + dest
|
|
|
|
|
|
|
|
pathList = os.path.split(dest)
|
|
|
|
|
|
|
|
#get the parent location
|
|
|
|
parentFolder = self._getGoogleFile(pathList[0])
|
|
|
|
|
|
|
|
if(parentFolder != None):
|
|
|
|
#create a new file in this folder
|
|
|
|
newFile = self.drive.CreateFile({"title":pathList[1],"parents":[{'kind':'drive#fileLink','id':parentFolder['id']}]})
|
|
|
|
newFile.SetContentFile(source)
|
|
|
|
newFile.Upload()
|
|
|
|
else:
|
|
|
|
result = False
|
|
|
|
|
|
|
|
return result
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
def get_file(self,source, dest):
|
2014-11-05 15:47:47 +01:00
|
|
|
result = True
|
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
#get the id of this file
|
|
|
|
file = self._getGoogleFile(source)
|
|
|
|
|
|
|
|
if(file != None):
|
|
|
|
file.GetContentFile(dest)
|
2014-11-05 15:47:47 +01:00
|
|
|
else:
|
|
|
|
result = False
|
|
|
|
|
|
|
|
return result
|
2014-10-09 21:30:39 +02:00
|
|
|
|
|
|
|
def rmdir(self,directory):
|
|
|
|
result = True
|
|
|
|
|
|
|
|
#check that the folder exists
|
|
|
|
folder = self._getGoogleFile(directory)
|
|
|
|
|
|
|
|
if(folder != None):
|
|
|
|
#delete the folder
|
|
|
|
folder.Delete()
|
|
|
|
else:
|
|
|
|
result = False
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
return result
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
def rmfile(self,aFile):
|
|
|
|
#really just the same as the remove directory function
|
|
|
|
return self.rmdir(aFile)
|
|
|
|
|
|
|
|
def exists(self,aFile):
|
|
|
|
#attempt to get this file
|
|
|
|
foundFile = self._getGoogleFile(aFile)
|
|
|
|
|
|
|
|
if(foundFile != None):
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
|
|
|
def rename(self,aFile,newName):
|
|
|
|
return True
|
|
|
|
|
|
|
|
def _getGoogleFile(self,file):
|
|
|
|
result = None
|
2014-10-09 22:19:24 +02:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
#file must start with / and not end with one (even directory)
|
|
|
|
if(not file.startswith('/')):
|
|
|
|
file = '/' + file
|
|
|
|
|
|
|
|
if(file.endswith('/')):
|
|
|
|
file = file[:-1]
|
|
|
|
|
2014-10-09 22:19:24 +02:00
|
|
|
if(self.history.has_key(file)):
|
2012-11-04 21:39:17 +01:00
|
|
|
|
2014-10-09 21:30:39 +02:00
|
|
|
result = self.history[file]
|
|
|
|
else:
|
|
|
|
pathList = os.path.split(file)
|
|
|
|
|
|
|
|
#end of recurision, we got the root
|
|
|
|
if(pathList[0] == '/'):
|
|
|
|
#get the id of this file (if it exists)
|
|
|
|
file_list = self.drive.ListFile({'q':"title='" + pathList[1] + "' and 'root' in parents and trashed=false"}).GetList()
|
|
|
|
|
|
|
|
if(len(file_list) > 0):
|
|
|
|
result = file_list[0]
|
|
|
|
self.history[pathList[1]] = result
|
|
|
|
else:
|
|
|
|
#recurse down the tree
|
|
|
|
current_file = pathList[1]
|
|
|
|
|
2014-10-09 22:19:24 +02:00
|
|
|
parentId = self._getGoogleFile(pathList[0])
|
2014-10-09 21:30:39 +02:00
|
|
|
|
|
|
|
if(parentId != None):
|
|
|
|
self.history[pathList[0]] = parentId
|
|
|
|
|
|
|
|
#attempt to get the id of this file, with this parent
|
|
|
|
file_list = file_list = self.drive.ListFile({'q':"title='" + current_file + "' and '" + parentId['id'] + "' in parents and trashed=false"}).GetList()
|
|
|
|
|
|
|
|
if(len(file_list) > 0):
|
|
|
|
result = file_list[0]
|
|
|
|
self.history[file] = result
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|