File renaming according to title and author (#654) - gdrive is missing
This commit is contained in:
parent
8db2b62b39
commit
fa4918a2db
@ -112,7 +112,8 @@ def migrate():
|
|||||||
sql=sql[0].replace(currUniqueConstraint, 'UNIQUE (gdrive_id, path)')
|
sql=sql[0].replace(currUniqueConstraint, 'UNIQUE (gdrive_id, path)')
|
||||||
sql=sql.replace(GdriveId.__tablename__, GdriveId.__tablename__ + '2')
|
sql=sql.replace(GdriveId.__tablename__, GdriveId.__tablename__ + '2')
|
||||||
session.execute(sql)
|
session.execute(sql)
|
||||||
session.execute('INSERT INTO gdrive_ids2 (id, gdrive_id, path) SELECT id, gdrive_id, path FROM gdrive_ids;')
|
session.execute("INSERT INTO gdrive_ids2 (id, gdrive_id, path) SELECT id, "
|
||||||
|
"gdrive_id, path FROM gdrive_ids;")
|
||||||
session.commit()
|
session.commit()
|
||||||
session.execute('DROP TABLE %s' % 'gdrive_ids')
|
session.execute('DROP TABLE %s' % 'gdrive_ids')
|
||||||
session.execute('ALTER TABLE gdrive_ids2 RENAME to gdrive_ids')
|
session.execute('ALTER TABLE gdrive_ids2 RENAME to gdrive_ids')
|
||||||
@ -165,7 +166,8 @@ def getFolderInFolder(parentId, folderName, drive):
|
|||||||
query=""
|
query=""
|
||||||
if folderName:
|
if folderName:
|
||||||
query = "title = '%s' and " % folderName.replace("'", "\\'")
|
query = "title = '%s' and " % folderName.replace("'", "\\'")
|
||||||
folder = query + "'%s' in parents and mimeType = 'application/vnd.google-apps.folder' and trashed = false" % parentId
|
folder = query + "'%s' in parents and mimeType = 'application/vnd.google-apps.folder'" \
|
||||||
|
" and trashed = false" % parentId
|
||||||
fileList = drive.ListFile({'q': folder}).GetList()
|
fileList = drive.ListFile({'q': folder}).GetList()
|
||||||
if fileList.__len__() == 0:
|
if fileList.__len__() == 0:
|
||||||
return None
|
return None
|
||||||
@ -191,7 +193,6 @@ def getEbooksFolderId(drive=None):
|
|||||||
|
|
||||||
def getFile(pathId, fileName, drive):
|
def getFile(pathId, fileName, drive):
|
||||||
metaDataFile = "'%s' in parents and trashed = false and title = '%s'" % (pathId, fileName.replace("'", "\\'"))
|
metaDataFile = "'%s' in parents and trashed = false and title = '%s'" % (pathId, fileName.replace("'", "\\'"))
|
||||||
|
|
||||||
fileList = drive.ListFile({'q': metaDataFile}).GetList()
|
fileList = drive.ListFile({'q': metaDataFile}).GetList()
|
||||||
if fileList.__len__() == 0:
|
if fileList.__len__() == 0:
|
||||||
return None
|
return None
|
||||||
@ -299,9 +300,11 @@ def copyToDrive(drive, uploadFile, createRoot, replaceFiles,
|
|||||||
if not parent:
|
if not parent:
|
||||||
parent = getEbooksFolder(drive)
|
parent = getEbooksFolder(drive)
|
||||||
if os.path.isdir(os.path.join(prevDir,uploadFile)):
|
if os.path.isdir(os.path.join(prevDir,uploadFile)):
|
||||||
existingFolder = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" % (os.path.basename(uploadFile), parent['id'])}).GetList()
|
existingFolder = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" %
|
||||||
|
(os.path.basename(uploadFile), parent['id'])}).GetList()
|
||||||
if len(existingFolder) == 0 and (not isInitial or createRoot):
|
if len(existingFolder) == 0 and (not isInitial or createRoot):
|
||||||
parent = drive.CreateFile({'title': os.path.basename(uploadFile), 'parents': [{"kind": "drive#fileLink", 'id': parent['id']}],
|
parent = drive.CreateFile({'title': os.path.basename(uploadFile),
|
||||||
|
'parents': [{"kind": "drive#fileLink", 'id': parent['id']}],
|
||||||
"mimeType": "application/vnd.google-apps.folder"})
|
"mimeType": "application/vnd.google-apps.folder"})
|
||||||
parent.Upload()
|
parent.Upload()
|
||||||
else:
|
else:
|
||||||
@ -312,11 +315,13 @@ def copyToDrive(drive, uploadFile, createRoot, replaceFiles,
|
|||||||
copyToDrive(drive, f, True, replaceFiles, ignoreFiles, parent, os.path.join(prevDir, uploadFile))
|
copyToDrive(drive, f, True, replaceFiles, ignoreFiles, parent, os.path.join(prevDir, uploadFile))
|
||||||
else:
|
else:
|
||||||
if os.path.basename(uploadFile) not in ignoreFiles:
|
if os.path.basename(uploadFile) not in ignoreFiles:
|
||||||
existingFiles = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" % (os.path.basename(uploadFile), parent['id'])}).GetList()
|
existingFiles = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" %
|
||||||
|
(os.path.basename(uploadFile), parent['id'])}).GetList()
|
||||||
if len(existingFiles) > 0:
|
if len(existingFiles) > 0:
|
||||||
driveFile = existingFiles[0]
|
driveFile = existingFiles[0]
|
||||||
else:
|
else:
|
||||||
driveFile = drive.CreateFile({'title': os.path.basename(uploadFile), 'parents': [{"kind":"drive#fileLink", 'id': parent['id']}], })
|
driveFile = drive.CreateFile({'title': os.path.basename(uploadFile),
|
||||||
|
'parents': [{"kind":"drive#fileLink", 'id': parent['id']}], })
|
||||||
driveFile.SetContentFile(os.path.join(prevDir, uploadFile))
|
driveFile.SetContentFile(os.path.join(prevDir, uploadFile))
|
||||||
driveFile.Upload()
|
driveFile.Upload()
|
||||||
|
|
||||||
@ -327,7 +332,8 @@ def uploadFileToEbooksFolder(destFile, f):
|
|||||||
splitDir = destFile.split('/')
|
splitDir = destFile.split('/')
|
||||||
for i, x in enumerate(splitDir):
|
for i, x in enumerate(splitDir):
|
||||||
if i == len(splitDir)-1:
|
if i == len(splitDir)-1:
|
||||||
existingFiles = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" % (x, parent['id'])}).GetList()
|
existingFiles = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" %
|
||||||
|
(x, parent['id'])}).GetList()
|
||||||
if len(existingFiles) > 0:
|
if len(existingFiles) > 0:
|
||||||
driveFile = existingFiles[0]
|
driveFile = existingFiles[0]
|
||||||
else:
|
else:
|
||||||
@ -335,7 +341,8 @@ def uploadFileToEbooksFolder(destFile, f):
|
|||||||
driveFile.SetContentFile(f)
|
driveFile.SetContentFile(f)
|
||||||
driveFile.Upload()
|
driveFile.Upload()
|
||||||
else:
|
else:
|
||||||
existingFolder = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" % (x, parent['id'])}).GetList()
|
existingFolder = drive.ListFile({'q': "title = '%s' and '%s' in parents and trashed = false" %
|
||||||
|
(x, parent['id'])}).GetList()
|
||||||
if len(existingFolder) == 0:
|
if len(existingFolder) == 0:
|
||||||
parent = drive.CreateFile({'title': x, 'parents': [{"kind": "drive#fileLink", 'id': parent['id']}],
|
parent = drive.CreateFile({'title': x, 'parents': [{"kind": "drive#fileLink", 'id': parent['id']}],
|
||||||
"mimeType": "application/vnd.google-apps.folder"})
|
"mimeType": "application/vnd.google-apps.folder"})
|
||||||
|
@ -284,22 +284,39 @@ def update_dir_structure_file(book_id, calibrepath, first_author):
|
|||||||
web.app.logger.info("Copying title: " + path + " into existing: " + new_title_path)
|
web.app.logger.info("Copying title: " + path + " into existing: " + new_title_path)
|
||||||
for dir_name, subdir_list, file_list in os.walk(path):
|
for dir_name, subdir_list, file_list in os.walk(path):
|
||||||
for file in file_list:
|
for file in file_list:
|
||||||
os.renames(os.path.join(dir_name, file), os.path.join(new_title_path + dir_name[len(path):], file))
|
os.renames(os.path.join(dir_name, file),
|
||||||
|
os.path.join(new_title_path + dir_name[len(path):], file))
|
||||||
path = new_title_path
|
path = new_title_path
|
||||||
localbook.path = localbook.path.split('/')[0] + '/' + new_titledir
|
localbook.path = localbook.path.split('/')[0] + '/' + new_titledir
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
web.app.logger.error("Rename title from: " + path + " to " + new_title_path + ": " + str(ex))
|
web.app.logger.error("Rename title from: " + path + " to " + new_title_path + ": " + str(ex))
|
||||||
web.app.logger.debug(ex, exc_info=True)
|
web.app.logger.debug(ex, exc_info=True)
|
||||||
return _("Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s", src=path, dest=new_title_path, error=str(ex))
|
return _("Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s",
|
||||||
|
src=path, dest=new_title_path, error=str(ex))
|
||||||
if authordir != new_authordir:
|
if authordir != new_authordir:
|
||||||
try:
|
try:
|
||||||
new_author_path = os.path.join(os.path.join(calibrepath, new_authordir), os.path.basename(path))
|
new_author_path = os.path.join(calibrepath, new_authordir, os.path.basename(path))
|
||||||
os.renames(path, new_author_path)
|
os.renames(path, new_author_path)
|
||||||
localbook.path = new_authordir + '/' + localbook.path.split('/')[1]
|
localbook.path = new_authordir + '/' + localbook.path.split('/')[1]
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
web.app.logger.error("Rename author from: " + path + " to " + new_author_path + ": " + str(ex))
|
web.app.logger.error("Rename author from: " + path + " to " + new_author_path + ": " + str(ex))
|
||||||
web.app.logger.debug(ex, exc_info=True)
|
web.app.logger.debug(ex, exc_info=True)
|
||||||
return _("Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s", src=path, dest=new_author_path, error=str(ex))
|
return _("Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s",
|
||||||
|
src=path, dest=new_author_path, error=str(ex))
|
||||||
|
# Rename all files from old names to new names
|
||||||
|
if authordir != new_authordir or titledir != new_titledir:
|
||||||
|
try:
|
||||||
|
for format in localbook.data:
|
||||||
|
path_name = os.path.join(calibrepath, new_authordir, os.path.basename(path))
|
||||||
|
new_name = get_valid_filename(localbook.title) + ' - ' + get_valid_filename(new_authordir)
|
||||||
|
os.renames(os.path.join(path_name, format.name + '.' + format.format.lower()),
|
||||||
|
os.path.join(path_name,new_name + '.' + format.format.lower()))
|
||||||
|
format.name = new_name
|
||||||
|
except OSError as ex:
|
||||||
|
web.app.logger.error("Rename file in path " + path + " to " + new_name + ": " + str(ex))
|
||||||
|
web.app.logger.debug(ex, exc_info=True)
|
||||||
|
return _("Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s",
|
||||||
|
src=path, dest=new_name, error=str(ex))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@ -324,7 +341,7 @@ def update_dir_structure_gdrive(book_id, first_author):
|
|||||||
book.path = book.path.split('/')[0] + '/' + new_titledir
|
book.path = book.path.split('/')[0] + '/' + new_titledir
|
||||||
gd.updateDatabaseOnEdit(gFile['id'], book.path) # only child folder affected
|
gd.updateDatabaseOnEdit(gFile['id'], book.path) # only child folder affected
|
||||||
else:
|
else:
|
||||||
error = _(u'File %(file)s not found on Google Drive', file= book.path) # file not found
|
error = _(u'File %(file)s not found on Google Drive', file=book.path) # file not found
|
||||||
|
|
||||||
if authordir != new_authordir:
|
if authordir != new_authordir:
|
||||||
gFile = gd.getFileFromEbooksFolder(os.path.dirname(book.path), titledir)
|
gFile = gd.getFileFromEbooksFolder(os.path.dirname(book.path), titledir)
|
||||||
@ -334,6 +351,19 @@ def update_dir_structure_gdrive(book_id, first_author):
|
|||||||
gd.updateDatabaseOnEdit(gFile['id'], book.path)
|
gd.updateDatabaseOnEdit(gFile['id'], book.path)
|
||||||
else:
|
else:
|
||||||
error = _(u'File %(file)s not found on Google Drive', file=authordir) # file not found
|
error = _(u'File %(file)s not found on Google Drive', file=authordir) # file not found
|
||||||
|
# Rename all files from old names to new names
|
||||||
|
# ToDo: Rename also all bookfiles with new author name and new title name
|
||||||
|
'''
|
||||||
|
if authordir != new_authordir or titledir != new_titledir:
|
||||||
|
for format in book.data:
|
||||||
|
# path_name = os.path.join(calibrepath, new_authordir, os.path.basename(path))
|
||||||
|
new_name = get_valid_filename(book.title) + ' - ' + get_valid_filename(book)
|
||||||
|
format.name = new_name
|
||||||
|
if gFile:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
error = _(u'File %(file)s not found on Google Drive', file=format.name) # file not found
|
||||||
|
break'''
|
||||||
return error
|
return error
|
||||||
|
|
||||||
|
|
||||||
|
37
cps/web.py
37
cps/web.py
@ -525,18 +525,6 @@ def fill_indexpage(page, database, db_filter, order, *join):
|
|||||||
.filter(common_filters()).order_by(*order).offset(off).limit(config.config_books_per_page).all()
|
.filter(common_filters()).order_by(*order).offset(off).limit(config.config_books_per_page).all()
|
||||||
for book in entries:
|
for book in entries:
|
||||||
book = order_authors(book)
|
book = order_authors(book)
|
||||||
'''sort_authors = book.author_sort.split('&')
|
|
||||||
authors_ordered = list()
|
|
||||||
error = False
|
|
||||||
for auth in sort_authors:
|
|
||||||
# ToDo: How to handle not found authorname
|
|
||||||
result = db.session.query(db.Authors).filter(db.Authors.sort == auth.lstrip().strip()).first()
|
|
||||||
if not result:
|
|
||||||
error = True
|
|
||||||
break
|
|
||||||
authors_ordered.append(result)
|
|
||||||
if not error:
|
|
||||||
book.authors = authors_ordered'''
|
|
||||||
return entries, randm, pagination
|
return entries, randm, pagination
|
||||||
|
|
||||||
|
|
||||||
@ -1689,18 +1677,6 @@ def show_book(book_id):
|
|||||||
entries.tags = sort(entries.tags, key = lambda tag: tag.name)
|
entries.tags = sort(entries.tags, key = lambda tag: tag.name)
|
||||||
|
|
||||||
entries = order_authors(entries)
|
entries = order_authors(entries)
|
||||||
'''sort_authors = entries.author_sort.split('&')
|
|
||||||
authors_ordered = list()
|
|
||||||
error = False
|
|
||||||
for auth in sort_authors:
|
|
||||||
# ToDo: How to handle not found authorname
|
|
||||||
result = db.session.query(db.Authors).filter(db.Authors.sort == auth.lstrip().strip()).first()
|
|
||||||
if not result:
|
|
||||||
error = True
|
|
||||||
break
|
|
||||||
authors_ordered.append(result)
|
|
||||||
if not error:
|
|
||||||
entries.authors = authors_ordered'''
|
|
||||||
|
|
||||||
kindle_list = helper.check_send_to_kindle(entries)
|
kindle_list = helper.check_send_to_kindle(entries)
|
||||||
reader_list = helper.check_read_formats(entries)
|
reader_list = helper.check_read_formats(entries)
|
||||||
@ -3480,19 +3456,8 @@ def render_edit_book(book_id):
|
|||||||
|
|
||||||
for indx in range(0, len(book.languages)):
|
for indx in range(0, len(book.languages)):
|
||||||
book.languages[indx].language_name = language_table[get_locale()][book.languages[indx].lang_code]
|
book.languages[indx].language_name = language_table[get_locale()][book.languages[indx].lang_code]
|
||||||
|
|
||||||
book = order_authors(book)
|
book = order_authors(book)
|
||||||
'''sort_authors = book.author_sort.split('&')
|
|
||||||
authors_ordered = list()
|
|
||||||
error = False
|
|
||||||
for auth in sort_authors:
|
|
||||||
# ToDo: How to handle not found authorname
|
|
||||||
result = db.session.query(db.Authors).filter(db.Authors.sort == auth.lstrip().strip()).first()
|
|
||||||
if not result:
|
|
||||||
error = True
|
|
||||||
break
|
|
||||||
authors_ordered.append(result)
|
|
||||||
if not error:
|
|
||||||
book.authors = authors_ordered'''
|
|
||||||
|
|
||||||
author_names = []
|
author_names = []
|
||||||
for authr in book.authors:
|
for authr in book.authors:
|
||||||
|
Loading…
Reference in New Issue
Block a user