mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-15 22:34:56 +00:00
Delete on gdrive working
Moving author on gdrive working bugfix delete on normal folders
This commit is contained in:
parent
a8040ad3fa
commit
31b703db62
@ -255,9 +255,30 @@ def copyDriveFileRemote(drive, origin_file_id, copy_title):
|
||||
print ('An error occurred: %s' % error)
|
||||
return None
|
||||
|
||||
def moveGdriveFolderRemote(origin_file, target_folder):
|
||||
drive = getDrive(Gdrive.Instance().drive)
|
||||
previous_parents = ",".join([parent["id"] for parent in origin_file.get('parents')])
|
||||
gFileTargetDir = getFileFromEbooksFolder(None, target_folder)
|
||||
if not gFileTargetDir:
|
||||
# Folder is not exisiting, create, and move folder
|
||||
gFileTargetDir = drive.CreateFile(
|
||||
{'title': target_folder, 'parents': [{"kind": "drive#fileLink", 'id': getEbooksFolderId()}],
|
||||
"mimeType": "application/vnd.google-apps.folder"})
|
||||
gFileTargetDir.Upload()
|
||||
# Move the file to the new folder
|
||||
drive.auth.service.files().update(fileId=origin_file['id'],
|
||||
addParents=gFileTargetDir['id'],
|
||||
removeParents=previous_parents,
|
||||
fields='id, parents').execute()
|
||||
# if previous_parents has no childs anymore, delete originfileparent
|
||||
# is not working correctly, because of slow update on gdrive -> could cause trouble in gdrive.db
|
||||
# (nonexisting folder has id)
|
||||
# children = drive.auth.service.children().list(folderId=previous_parents).execute()
|
||||
# if not len(children['items']):
|
||||
# drive.auth.service.files().delete(fileId=previous_parents).execute()
|
||||
|
||||
|
||||
def downloadFile(path, filename, output):
|
||||
# drive = getDrive(drive)
|
||||
f = getFileFromEbooksFolder(path, filename)
|
||||
f.GetContentFile(output)
|
||||
|
||||
@ -413,7 +434,7 @@ def getChangeById (drive, change_id):
|
||||
change = drive.auth.service.changes().get(changeId=change_id).execute()
|
||||
return change
|
||||
except (errors.HttpError) as error:
|
||||
app.logger.info(error.message)
|
||||
web.app.logger.info(error.message)
|
||||
return None
|
||||
|
||||
# Deletes the local hashes database to force search for new folder names
|
||||
@ -434,3 +455,8 @@ def updateDatabaseOnEdit(ID,newPath):
|
||||
if storedPathName:
|
||||
storedPathName.path = newPath
|
||||
session.commit()
|
||||
|
||||
# Deletes the hashes in database of deleted book
|
||||
def deleteDatabaseEntry(ID):
|
||||
session.query(GdriveId).filter(GdriveId.gdrive_id == ID).delete()
|
||||
session.commit()
|
||||
|
@ -365,36 +365,24 @@ def update_dir_structure_gdrive(book_id):
|
||||
|
||||
if authordir != new_authordir:
|
||||
gFile = gd.getFileFromEbooksFolder(os.path.dirname(book.path), titledir)
|
||||
# gFileDirOrig = gd.getFileFromEbooksFolder(None, authordir)
|
||||
if gFile:
|
||||
# check if authordir exisits
|
||||
gFileDirOrig = gd.getFileFromEbooksFolder(None, authordir)
|
||||
if gFileDirOrig:
|
||||
gFile['parents'].append({"id": gFileDirOrig['id']})
|
||||
gFile.Upload()
|
||||
else:
|
||||
# Folder is not exisiting
|
||||
#parent = drive.CreateFile({'title': authordir, 'parents': [{"kind": "drive#fileLink", 'id': root folder id}],
|
||||
# "mimeType": "application/vnd.google-apps.folder"})
|
||||
parent.Upload()
|
||||
# gFile['title'] = new_authordir
|
||||
# gFile.Upload()
|
||||
gd.moveGdriveFolderRemote(gFile,new_authordir)
|
||||
book.path = new_authordir + '/' + book.path.split('/')[1]
|
||||
gd.updateDatabaseOnEdit(gFile['id'], book.path)
|
||||
# Todo last element from parent folder moved to different folder, what to do with parent folder?
|
||||
# parent folder affected
|
||||
else:
|
||||
error = _(u'File %s not found on gdrive' % authordir) # file not found
|
||||
return error
|
||||
|
||||
# ToDo: Implement delete book on gdrive
|
||||
def delete_book_gdrive(book):
|
||||
# delete book and path of book in gdrive.db
|
||||
# delete book and path of book on gdrive
|
||||
#gFile = gd.getFileFromEbooksFolder(os.path.dirname(book.path), titledir)
|
||||
#gFile.Trash()
|
||||
pass
|
||||
|
||||
def delete_book_gdrive(book):
|
||||
error= False
|
||||
gFile = gd.getFileFromEbooksFolder(os.path.dirname(book.path),book.path.split('/')[1])
|
||||
if gFile:
|
||||
gd.deleteDatabaseEntry(gFile['id'])
|
||||
gFile.Trash()
|
||||
else:
|
||||
error =_(u'Path %s not found on gdrive' % book.path) # file not found
|
||||
return error
|
||||
|
||||
################################## External interface
|
||||
|
||||
@ -406,9 +394,9 @@ def update_dir_stucture(book_id, calibrepath):
|
||||
|
||||
def delete_book(book, calibrepath):
|
||||
if ub.config.config_use_google_drive:
|
||||
return delete_book_file(book, calibrepath)
|
||||
else:
|
||||
return delete_book_gdrive(book)
|
||||
else:
|
||||
return delete_book_file(book, calibrepath)
|
||||
##################################
|
||||
|
||||
|
||||
|
30
cps/web.py
30
cps/web.py
@ -1568,7 +1568,7 @@ def on_received_watch_confirmation():
|
||||
db.setup_db()
|
||||
except Exception as e:
|
||||
app.logger.info(e.message)
|
||||
# app.logger.exception(e)
|
||||
app.logger.exception(e)
|
||||
updateMetaData()
|
||||
return ''
|
||||
|
||||
@ -3293,40 +3293,50 @@ def upload():
|
||||
if db_language is not None:
|
||||
db_book.languages.append(db_language)
|
||||
db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name)
|
||||
|
||||
input_tags = tags.split(',')
|
||||
input_tags = list(map(lambda it: it.strip(), input_tags))
|
||||
if input_tags[0] !="":
|
||||
modify_database_object(input_tags, db_book.tags, db.Tags, db.session, 'tags')
|
||||
|
||||
db_book.data.append(db_data)
|
||||
|
||||
db.session.add(db_book)
|
||||
db.session.flush() # flush content get db_book.id avalible
|
||||
|
||||
# add comment
|
||||
book_id = db_book.id
|
||||
upload_comment = Markup(meta.description).unescape()
|
||||
if upload_comment != "":
|
||||
db.session.add(db.Comments(upload_comment, db_book.id))
|
||||
input_tags = tags.split(',')
|
||||
input_tags = list(map(lambda it: it.strip(), input_tags))
|
||||
if input_tags[0] !="":
|
||||
modify_database_object(input_tags, db_book.tags, db.Tags, db.session, 'tags')
|
||||
db.session.add(db.Comments(upload_comment, book_id))
|
||||
|
||||
db.session.commit()
|
||||
|
||||
|
||||
book = db.session.query(db.Books) \
|
||||
.filter(db.Books.id == book_id).filter(common_filters()).first()
|
||||
|
||||
if config.config_use_google_drive:
|
||||
gdriveutils.updateGdriveCalibreFromLocal()
|
||||
error = helper.update_dir_stucture(db_book.id, config.config_calibre_dir)
|
||||
|
||||
error = helper.update_dir_stucture(book.id, config.config_calibre_dir)
|
||||
# ToDo: Handle error
|
||||
if error:
|
||||
pass
|
||||
|
||||
|
||||
if db_language is not None: # display Full name instead of iso639.part3
|
||||
db_book.languages[0].language_name = _(meta.languages)
|
||||
book.languages[0].language_name = _(meta.languages)
|
||||
author_names = []
|
||||
for author in db_book.authors:
|
||||
author_names.append(author.name)
|
||||
if len(request.files.getlist("btn-upload")) < 2:
|
||||
db.session.connection().connection.connection.create_function("title_sort", 1, db.title_sort)
|
||||
cc = db.session.query(db.Custom_Columns).filter(db.Custom_Columns.datatype.notin_(db.cc_exceptions)).all()
|
||||
if current_user.role_edit() or current_user.role_admin():
|
||||
return render_title_template('book_edit.html', book=db_book, authors=author_names, cc=cc,title=_(u"edit metadata"))
|
||||
return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc,title=_(u"edit metadata"))
|
||||
book_in_shelfs = []
|
||||
return render_title_template('detail.html', entry=db_book, cc=cc, title=db_book.title, books_shelfs=book_in_shelfs, )
|
||||
return render_title_template('detail.html', entry=book, cc=cc, title=book.title, books_shelfs=book_in_shelfs, )
|
||||
return redirect(url_for("index"))
|
||||
else:
|
||||
return redirect(url_for("index"))
|
||||
|
Loading…
Reference in New Issue
Block a user