mirror of
https://github.com/janeczku/calibre-web
synced 2024-12-26 01:50:31 +00:00
Bugfixes change author
This commit is contained in:
parent
897188ff18
commit
e02610e2f0
@ -264,6 +264,9 @@ def upload():
|
|||||||
title_dir,
|
title_dir,
|
||||||
meta.file_path,
|
meta.file_path,
|
||||||
meta.extension.lower())
|
meta.extension.lower())
|
||||||
|
for file_format in db_book.data:
|
||||||
|
file_format.name = (helper.get_valid_filename(title, chars=42) + ' - '
|
||||||
|
+ helper.get_valid_filename(input_authors[0], chars=42))
|
||||||
else:
|
else:
|
||||||
error = helper.update_dir_structure(book_id,
|
error = helper.update_dir_structure(book_id,
|
||||||
config.get_book_path(),
|
config.get_book_path(),
|
||||||
|
@ -269,6 +269,7 @@ def getFile(pathId, fileName, drive):
|
|||||||
|
|
||||||
def getFolderId(path, drive):
|
def getFolderId(path, drive):
|
||||||
# drive = getDrive(drive)
|
# drive = getDrive(drive)
|
||||||
|
log.info(f"GetFolder: {path}")
|
||||||
currentFolderId = None
|
currentFolderId = None
|
||||||
try:
|
try:
|
||||||
currentFolderId = getEbooksFolderId(drive)
|
currentFolderId = getEbooksFolderId(drive)
|
||||||
@ -354,6 +355,7 @@ def moveGdriveFolderRemote(origin_file, target_folder):
|
|||||||
fields='id, parents').execute()
|
fields='id, parents').execute()
|
||||||
|
|
||||||
elif gFileTargetDir['title'] != target_folder:
|
elif gFileTargetDir['title'] != target_folder:
|
||||||
|
deleteDatabasePath(gFileTargetDir['title'])
|
||||||
# Folder is not existing, create, and move folder
|
# Folder is not existing, create, and move folder
|
||||||
drive.auth.service.files().patch(fileId=origin_file['id'],
|
drive.auth.service.files().patch(fileId=origin_file['id'],
|
||||||
body={'title': target_folder},
|
body={'title': target_folder},
|
||||||
@ -563,6 +565,14 @@ def deleteDatabaseEntry(ID):
|
|||||||
log.error_or_exception('Database error: {}'.format(ex))
|
log.error_or_exception('Database error: {}'.format(ex))
|
||||||
session.rollback()
|
session.rollback()
|
||||||
|
|
||||||
|
def deleteDatabasePath(Pathname):
|
||||||
|
session.query(GdriveId).filter(GdriveId.path.contains(Pathname)).delete()
|
||||||
|
try:
|
||||||
|
session.commit()
|
||||||
|
except OperationalError as ex:
|
||||||
|
log.error_or_exception('Database error: {}'.format(ex))
|
||||||
|
session.rollback()
|
||||||
|
|
||||||
|
|
||||||
# Gets cover file from gdrive
|
# Gets cover file from gdrive
|
||||||
# ToDo: Check is this right everyone get read permissions on cover files?
|
# ToDo: Check is this right everyone get read permissions on cover files?
|
||||||
|
@ -411,7 +411,7 @@ def rename_all_files_on_change(one_book, new_path, old_path, all_new_name, gdriv
|
|||||||
file_format.name = all_new_name
|
file_format.name = all_new_name
|
||||||
|
|
||||||
|
|
||||||
def rename_all_authors(first_author, renamed_author, calibre_path="", localbook=None, gdrive=False):
|
'''def rename_all_authors(first_author, renamed_author, calibre_path="", localbook=None, gdrive=False):
|
||||||
# Create new_author_dir from parameter or from database
|
# Create new_author_dir from parameter or from database
|
||||||
# Create new title_dir from database and add id
|
# Create new title_dir from database and add id
|
||||||
if first_author:
|
if first_author:
|
||||||
@ -424,6 +424,7 @@ def rename_all_authors(first_author, renamed_author, calibre_path="", localbook=
|
|||||||
g_file = gd.getFileFromEbooksFolder(None, old_author_dir)
|
g_file = gd.getFileFromEbooksFolder(None, old_author_dir)
|
||||||
if g_file:
|
if g_file:
|
||||||
gd.moveGdriveFolderRemote(g_file, new_author_rename_dir)
|
gd.moveGdriveFolderRemote(g_file, new_author_rename_dir)
|
||||||
|
gd.updateDatabaseOnEdit(g_file['id'], new_author_rename_dir)
|
||||||
else:
|
else:
|
||||||
if os.path.isdir(os.path.join(calibre_path, old_author_dir)):
|
if os.path.isdir(os.path.join(calibre_path, old_author_dir)):
|
||||||
old_author_path = os.path.join(calibre_path, old_author_dir)
|
old_author_path = os.path.join(calibre_path, old_author_dir)
|
||||||
@ -437,7 +438,7 @@ def rename_all_authors(first_author, renamed_author, calibre_path="", localbook=
|
|||||||
src=old_author_path, dest=new_author_path, error=str(ex))
|
src=old_author_path, dest=new_author_path, error=str(ex))
|
||||||
else:
|
else:
|
||||||
new_authordir = get_valid_filename(localbook.authors[0].name, chars=96)
|
new_authordir = get_valid_filename(localbook.authors[0].name, chars=96)
|
||||||
return new_authordir
|
return new_authordir'''
|
||||||
|
|
||||||
|
|
||||||
def rename_author_path(first_author, old_author_dir, renamed_author, calibre_path="", gdrive=False):
|
def rename_author_path(first_author, old_author_dir, renamed_author, calibre_path="", gdrive=False):
|
||||||
@ -465,7 +466,7 @@ def rename_author_path(first_author, old_author_dir, renamed_author, calibre_pat
|
|||||||
return new_authordir
|
return new_authordir
|
||||||
|
|
||||||
# Moves files in file storage during author/title rename, or from temp dir to file storage
|
# Moves files in file storage during author/title rename, or from temp dir to file storage
|
||||||
def update_dir_structure_file(book_id, calibre_path, original_filepath, db_filename):
|
def update_dir_structure_file(book_id, calibre_path, original_filepath, new_author, db_filename):
|
||||||
# get book database entry from id, if original path overwrite source with original_filepath
|
# get book database entry from id, if original path overwrite source with original_filepath
|
||||||
local_book = calibre_db.get_book(book_id)
|
local_book = calibre_db.get_book(book_id)
|
||||||
if original_filepath:
|
if original_filepath:
|
||||||
@ -478,18 +479,20 @@ def update_dir_structure_file(book_id, calibre_path, original_filepath, db_filen
|
|||||||
title_dir = local_book.path.split('/')[1]
|
title_dir = local_book.path.split('/')[1]
|
||||||
|
|
||||||
new_title_dir = get_valid_filename(local_book.title, chars=96) + " (" + str(book_id) + ")"
|
new_title_dir = get_valid_filename(local_book.title, chars=96) + " (" + str(book_id) + ")"
|
||||||
|
new_author_dir = get_valid_filename(new_author, chars=96)
|
||||||
|
|
||||||
if title_dir != new_title_dir or original_filepath:
|
if title_dir != new_title_dir or author_dir != new_author_dir or original_filepath:
|
||||||
error = move_files_on_change(calibre_path,
|
error = move_files_on_change(calibre_path,
|
||||||
author_dir,
|
new_author_dir,
|
||||||
new_title_dir,
|
new_title_dir,
|
||||||
local_book,
|
local_book,
|
||||||
db_filename,
|
db_filename,
|
||||||
original_filepath,
|
original_filepath,
|
||||||
path)
|
path)
|
||||||
new_path = os.path.join(calibre_path, author_dir, new_title_dir).replace('\\', '/')
|
# old_path = os.path.join(calibre_path, author_dir, new_title_dir).replace('\\', '/')
|
||||||
|
new_path = os.path.join(calibre_path, new_author_dir, new_title_dir).replace('\\', '/')
|
||||||
all_new_name = get_valid_filename(local_book.title, chars=42) + ' - ' \
|
all_new_name = get_valid_filename(local_book.title, chars=42) + ' - ' \
|
||||||
+ get_valid_filename(author_dir, chars=42)
|
+ get_valid_filename(new_author, chars=42)
|
||||||
# Book folder already moved, only files need to be renamed
|
# Book folder already moved, only files need to be renamed
|
||||||
rename_all_files_on_change(local_book, new_path, new_path, all_new_name)
|
rename_all_files_on_change(local_book, new_path, new_path, all_new_name)
|
||||||
|
|
||||||
@ -511,13 +514,13 @@ def upload_new_file_gdrive(book_id, first_author, title, title_dir, original_fil
|
|||||||
return False # rename_files_on_change(first_author, renamed_author, local_book=book, gdrive=True)
|
return False # rename_files_on_change(first_author, renamed_author, local_book=book, gdrive=True)
|
||||||
|
|
||||||
|
|
||||||
def update_dir_structure_gdrive(book_id):
|
def update_dir_structure_gdrive(book_id, first_author):
|
||||||
book = calibre_db.get_book(book_id)
|
book = calibre_db.get_book(book_id)
|
||||||
|
|
||||||
authordir = book.path.split('/')[0]
|
authordir = book.path.split('/')[0]
|
||||||
titledir = book.path.split('/')[1]
|
titledir = book.path.split('/')[1]
|
||||||
# new_authordir = rename_all_authors(first_author, renamed_author, gdrive=True)
|
# new_authordir = rename_all_authors(first_author, renamed_author, gdrive=True)
|
||||||
# new_authordir = get_valid_filename(book.title, chars=96)
|
new_authordir = get_valid_filename(first_author, chars=96)
|
||||||
new_titledir = get_valid_filename(book.title, chars=96) + " (" + str(book_id) + ")"
|
new_titledir = get_valid_filename(book.title, chars=96) + " (" + str(book_id) + ")"
|
||||||
|
|
||||||
if titledir != new_titledir:
|
if titledir != new_titledir:
|
||||||
@ -529,7 +532,7 @@ def update_dir_structure_gdrive(book_id):
|
|||||||
else:
|
else:
|
||||||
return _('File %(file)s not found on Google Drive', file=book.path) # file not found
|
return _('File %(file)s not found on Google Drive', file=book.path) # file not found
|
||||||
|
|
||||||
'''if authordir != new_authordir:
|
if authordir != new_authordir:
|
||||||
g_file = gd.getFileFromEbooksFolder(os.path.dirname(book.path), new_titledir)
|
g_file = gd.getFileFromEbooksFolder(os.path.dirname(book.path), new_titledir)
|
||||||
if g_file:
|
if g_file:
|
||||||
gd.moveGdriveFolderRemote(g_file, new_authordir)
|
gd.moveGdriveFolderRemote(g_file, new_authordir)
|
||||||
@ -537,25 +540,24 @@ def update_dir_structure_gdrive(book_id):
|
|||||||
gd.updateDatabaseOnEdit(g_file['id'], book.path)
|
gd.updateDatabaseOnEdit(g_file['id'], book.path)
|
||||||
else:
|
else:
|
||||||
return _('File %(file)s not found on Google Drive', file=authordir) # file not found'''
|
return _('File %(file)s not found on Google Drive', file=authordir) # file not found'''
|
||||||
if titledir != new_titledir:
|
if titledir != new_titledir or authordir != new_authordir :
|
||||||
all_new_name = get_valid_filename(book.title, chars=42) + ' - ' \
|
all_new_name = get_valid_filename(book.title, chars=42) + ' - ' \
|
||||||
+ get_valid_filename(authordir, chars=42)
|
+ get_valid_filename(new_authordir, chars=42)
|
||||||
rename_all_files_on_change(book, book.path, book.path, all_new_name, gdrive=True) # todo: Move filenames on gdrive
|
rename_all_files_on_change(book, book.path, book.path, all_new_name, gdrive=True) # todo: Move filenames on gdrive
|
||||||
# change location in database to new author/title path
|
# change location in database to new author/title path
|
||||||
# book.path = os.path.join(authordir, new_titledir).replace('\\', '/')
|
# book.path = os.path.join(authordir, new_titledir).replace('\\', '/')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def move_files_on_change(calibre_path, new_authordir, new_titledir, localbook, db_filename, original_filepath, path):
|
def move_files_on_change(calibre_path, new_author_dir, new_titledir, localbook, db_filename, original_filepath, path):
|
||||||
new_authordir = get_valid_filename(new_authordir, chars=96)
|
new_path = os.path.join(calibre_path, new_author_dir, new_titledir)
|
||||||
new_path = os.path.join(calibre_path, new_authordir, new_titledir)
|
# new_name = get_valid_filename(localbook.title, chars=96) + ' - ' + new_author_dir
|
||||||
new_name = get_valid_filename(localbook.title, chars=96) + ' - ' + new_authordir
|
|
||||||
try:
|
try:
|
||||||
if original_filepath:
|
if original_filepath:
|
||||||
if not os.path.isdir(new_path):
|
if not os.path.isdir(new_path):
|
||||||
os.makedirs(new_path)
|
os.makedirs(new_path)
|
||||||
shutil.move(os.path.normcase(original_filepath), os.path.normcase(os.path.join(new_path, db_filename)))
|
shutil.move(os.path.normcase(original_filepath), os.path.normcase(os.path.join(new_path, db_filename)))
|
||||||
log.debug("Moving title: %s to %s/%s", original_filepath, new_path, new_name)
|
log.debug("Moving title: %s to %s/%s", original_filepath, new_path)
|
||||||
else:
|
else:
|
||||||
# Check new path is not valid path
|
# Check new path is not valid path
|
||||||
if not os.path.exists(new_path):
|
if not os.path.exists(new_path):
|
||||||
@ -569,8 +571,13 @@ def move_files_on_change(calibre_path, new_authordir, new_titledir, localbook, d
|
|||||||
for file in file_list:
|
for file in file_list:
|
||||||
shutil.move(os.path.normcase(os.path.join(dir_name, file)),
|
shutil.move(os.path.normcase(os.path.join(dir_name, file)),
|
||||||
os.path.normcase(os.path.join(new_path + dir_name[len(path):], file)))
|
os.path.normcase(os.path.join(new_path + dir_name[len(path):], file)))
|
||||||
|
if not os.listdir(os.path.split(path)[0]):
|
||||||
|
try:
|
||||||
|
shutil.rmtree(os.path.split(path)[0])
|
||||||
|
except (IOError, OSError) as ex:
|
||||||
|
log.error("Deleting authorpath for book %s failed: %s", localbook.id, ex)
|
||||||
# change location in database to new author/title path
|
# change location in database to new author/title path
|
||||||
localbook.path = os.path.join(new_authordir, new_titledir).replace('\\', '/')
|
localbook.path = os.path.join(new_author_dir, new_titledir).replace('\\', '/')
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
log.error_or_exception("Rename title from {} to {} failed with error: {}".format(path, new_path, ex))
|
log.error_or_exception("Rename title from {} to {} failed with error: {}".format(path, new_path, ex))
|
||||||
return _("Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s",
|
return _("Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s",
|
||||||
@ -729,6 +736,7 @@ def update_dir_structure(book_id,
|
|||||||
return update_dir_structure_file(book_id,
|
return update_dir_structure_file(book_id,
|
||||||
calibre_path,
|
calibre_path,
|
||||||
original_filepath,
|
original_filepath,
|
||||||
|
first_author,
|
||||||
db_filename)
|
db_filename)
|
||||||
|
|
||||||
|
|
||||||
@ -949,7 +957,7 @@ def do_download_file(book, book_format, client, data, headers):
|
|||||||
download_name = filename = None
|
download_name = filename = None
|
||||||
if config.config_use_google_drive:
|
if config.config_use_google_drive:
|
||||||
# startTime = time.time()
|
# startTime = time.time()
|
||||||
df = gd.getFileFromEbooksFolder(book.path, book_name + "." + book_format)
|
df = gd.getFileFromEbooksFolder(book.path, data.name + "." + book_format)
|
||||||
# log.debug('%s', time.time() - startTime)
|
# log.debug('%s', time.time() - startTime)
|
||||||
if df:
|
if df:
|
||||||
if config.config_embed_metadata and (
|
if config.config_embed_metadata and (
|
||||||
|
Loading…
Reference in New Issue
Block a user