|
|
|
@ -257,7 +257,12 @@ def getEbooksFolderId(drive=None):
|
|
|
|
|
log.error('Error gDrive, root ID not found')
|
|
|
|
|
gDriveId.path = '/'
|
|
|
|
|
session.merge(gDriveId)
|
|
|
|
|
session.commit()
|
|
|
|
|
try:
|
|
|
|
|
session.commit()
|
|
|
|
|
except OperationalError as ex:
|
|
|
|
|
log.error("gdrive.db DB is not Writeable")
|
|
|
|
|
log.debug('Database error: %s', ex)
|
|
|
|
|
session.rollback()
|
|
|
|
|
return gDriveId.gdrive_id
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -272,37 +277,42 @@ def getFile(pathId, fileName, drive):
|
|
|
|
|
|
|
|
|
|
def getFolderId(path, drive):
|
|
|
|
|
# drive = getDrive(drive)
|
|
|
|
|
currentFolderId = getEbooksFolderId(drive)
|
|
|
|
|
sqlCheckPath = path if path[-1] == '/' else path + '/'
|
|
|
|
|
storedPathName = session.query(GdriveId).filter(GdriveId.path == sqlCheckPath).first()
|
|
|
|
|
|
|
|
|
|
if not storedPathName:
|
|
|
|
|
dbChange = False
|
|
|
|
|
s = path.split('/')
|
|
|
|
|
for i, x in enumerate(s):
|
|
|
|
|
if len(x) > 0:
|
|
|
|
|
currentPath = "/".join(s[:i+1])
|
|
|
|
|
if currentPath[-1] != '/':
|
|
|
|
|
currentPath = currentPath + '/'
|
|
|
|
|
storedPathName = session.query(GdriveId).filter(GdriveId.path == currentPath).first()
|
|
|
|
|
if storedPathName:
|
|
|
|
|
currentFolderId = storedPathName.gdrive_id
|
|
|
|
|
else:
|
|
|
|
|
currentFolder = getFolderInFolder(currentFolderId, x, drive)
|
|
|
|
|
if currentFolder:
|
|
|
|
|
gDriveId = GdriveId()
|
|
|
|
|
gDriveId.gdrive_id = currentFolder['id']
|
|
|
|
|
gDriveId.path = currentPath
|
|
|
|
|
session.merge(gDriveId)
|
|
|
|
|
dbChange = True
|
|
|
|
|
currentFolderId = currentFolder['id']
|
|
|
|
|
try:
|
|
|
|
|
currentFolderId = getEbooksFolderId(drive)
|
|
|
|
|
sqlCheckPath = path if path[-1] == '/' else path + '/'
|
|
|
|
|
storedPathName = session.query(GdriveId).filter(GdriveId.path == sqlCheckPath).first()
|
|
|
|
|
|
|
|
|
|
if not storedPathName:
|
|
|
|
|
dbChange = False
|
|
|
|
|
s = path.split('/')
|
|
|
|
|
for i, x in enumerate(s):
|
|
|
|
|
if len(x) > 0:
|
|
|
|
|
currentPath = "/".join(s[:i+1])
|
|
|
|
|
if currentPath[-1] != '/':
|
|
|
|
|
currentPath = currentPath + '/'
|
|
|
|
|
storedPathName = session.query(GdriveId).filter(GdriveId.path == currentPath).first()
|
|
|
|
|
if storedPathName:
|
|
|
|
|
currentFolderId = storedPathName.gdrive_id
|
|
|
|
|
else:
|
|
|
|
|
currentFolderId = None
|
|
|
|
|
break
|
|
|
|
|
if dbChange:
|
|
|
|
|
session.commit()
|
|
|
|
|
else:
|
|
|
|
|
currentFolderId = storedPathName.gdrive_id
|
|
|
|
|
currentFolder = getFolderInFolder(currentFolderId, x, drive)
|
|
|
|
|
if currentFolder:
|
|
|
|
|
gDriveId = GdriveId()
|
|
|
|
|
gDriveId.gdrive_id = currentFolder['id']
|
|
|
|
|
gDriveId.path = currentPath
|
|
|
|
|
session.merge(gDriveId)
|
|
|
|
|
dbChange = True
|
|
|
|
|
currentFolderId = currentFolder['id']
|
|
|
|
|
else:
|
|
|
|
|
currentFolderId = None
|
|
|
|
|
break
|
|
|
|
|
if dbChange:
|
|
|
|
|
session.commit()
|
|
|
|
|
else:
|
|
|
|
|
currentFolderId = storedPathName.gdrive_id
|
|
|
|
|
except OperationalError as ex:
|
|
|
|
|
log.error("gdrive.db DB is not Writeable")
|
|
|
|
|
log.debug('Database error: %s', ex)
|
|
|
|
|
session.rollback()
|
|
|
|
|
return currentFolderId
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -346,7 +356,7 @@ def moveGdriveFolderRemote(origin_file, target_folder):
|
|
|
|
|
addParents=gFileTargetDir['id'],
|
|
|
|
|
removeParents=previous_parents,
|
|
|
|
|
fields='id, parents').execute()
|
|
|
|
|
# if previous_parents has no childs anymore, delete original fileparent
|
|
|
|
|
# if previous_parents has no children anymore, delete original fileparent
|
|
|
|
|
if len(children['items']) == 1:
|
|
|
|
|
deleteDatabaseEntry(previous_parents)
|
|
|
|
|
drive.auth.service.files().delete(fileId=previous_parents).execute()
|
|
|
|
@ -507,9 +517,10 @@ def deleteDatabaseOnChange():
|
|
|
|
|
try:
|
|
|
|
|
session.query(GdriveId).delete()
|
|
|
|
|
session.commit()
|
|
|
|
|
except (OperationalError, InvalidRequestError):
|
|
|
|
|
except (OperationalError, InvalidRequestError) as ex:
|
|
|
|
|
session.rollback()
|
|
|
|
|
log.info(u"GDrive DB is not Writeable")
|
|
|
|
|
log.debug('Database error: %s', ex)
|
|
|
|
|
log.error(u"GDrive DB is not Writeable")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def updateGdriveCalibreFromLocal():
|
|
|
|
@ -524,13 +535,23 @@ def updateDatabaseOnEdit(ID,newPath):
|
|
|
|
|
storedPathName = session.query(GdriveId).filter(GdriveId.gdrive_id == ID).first()
|
|
|
|
|
if storedPathName:
|
|
|
|
|
storedPathName.path = sqlCheckPath
|
|
|
|
|
session.commit()
|
|
|
|
|
try:
|
|
|
|
|
session.commit()
|
|
|
|
|
except OperationalError as ex:
|
|
|
|
|
log.error("gdrive.db DB is not Writeable")
|
|
|
|
|
log.debug('Database error: %s', ex)
|
|
|
|
|
session.rollback()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Deletes the hashes in database of deleted book
|
|
|
|
|
def deleteDatabaseEntry(ID):
|
|
|
|
|
session.query(GdriveId).filter(GdriveId.gdrive_id == ID).delete()
|
|
|
|
|
session.commit()
|
|
|
|
|
try:
|
|
|
|
|
session.commit()
|
|
|
|
|
except OperationalError as ex:
|
|
|
|
|
log.error("gdrive.db DB is not Writeable")
|
|
|
|
|
log.debug('Database error: %s', ex)
|
|
|
|
|
session.rollback()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Gets cover file from gdrive
|
|
|
|
@ -547,7 +568,12 @@ def get_cover_via_gdrive(cover_path):
|
|
|
|
|
permissionAdded = PermissionAdded()
|
|
|
|
|
permissionAdded.gdrive_id = df['id']
|
|
|
|
|
session.add(permissionAdded)
|
|
|
|
|
session.commit()
|
|
|
|
|
try:
|
|
|
|
|
session.commit()
|
|
|
|
|
except OperationalError as ex:
|
|
|
|
|
log.error("gdrive.db DB is not Writeable")
|
|
|
|
|
log.debug('Database error: %s', ex)
|
|
|
|
|
session.rollback()
|
|
|
|
|
return df.metadata.get('webContentLink')
|
|
|
|
|
else:
|
|
|
|
|
return None
|
|
|
|
|