Last active
December 2, 2024 09:30
-
-
Save elementiss/4a7816bef881fef7ddc3e689620417cf to your computer and use it in GitHub Desktop.
Корректировка пути к книге в библиотеке Icecream Ebook Reader 6.44
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sqlite3 | |
import base64 | |
import os | |
import hashlib | |
# в программе Icecream Ebook Reader 6.44 не предусмотрена корректировка пути к книге в библиотеке | |
# после физического переноса книги в другую папку файловой системы | |
# данный скрипт на питоне выводит все книги из библиотеки, у которых нет физического файла | |
# по указанному пути, и предлагает ввести новый актуальный путь, и сохраняет его в базе. | |
# заодно считает старый и новый хеши для дальнейшего ручного переноса заметок и закладок книги | |
# Перед запуском при необходимости исправить путь к базе. | |
# elementiss 2024-01-27 | |
# Создаем соединение с базой данных | |
current_user = os.getlogin() | |
db_path = f"C:\\Users\\{current_user}\\.Icecream Ebook Reader\\data\\ebooklib.sqlite3" | |
# исправьте путь вручную для нетипичного расположения | |
#conn = sqlite3.connect('ebooklib.sqlite3') | |
conn = sqlite3.connect(db_path) | |
# Создаем курсор для выполнения SQL-запросов | |
c = conn.cursor() | |
# Выполняем SQL-запрос для получения всех записей из таблицы | |
c.execute("SELECT DISTINCT full_path FROM books") | |
# один путь может быть найден дважды из-за наличия книги в корзине, поэтому DISTINCT | |
# Получаем все строки из результата запроса | |
rows = c.fetchall() | |
# Выводим каждую запись на консоль | |
for row in rows: | |
decoded_row = base64.b64decode(row[0]).decode('utf-8') | |
# книги нет на диске | |
if not os.path.isfile(decoded_row): | |
md5_hash = hashlib.md5() | |
md5_hash.update(decoded_row.encode()) | |
old_md5 = md5_hash.hexdigest() | |
# имя папки в которой лежат распакованные данные вниги, заметки, закладки, | |
# и идентификатор книги вычисляются как md5 от полного пути к книге | |
print(old_md5 + " " + decoded_row) | |
new_value = input("Введите новый путь к этой книге (ENTER - пропустить): \n") | |
if new_value != "": | |
md5_hash.update(new_value.encode()) | |
new_md5 = md5_hash.hexdigest() | |
print(new_md5) | |
# вывели новый id книги для ручной замены | |
new_value = base64.b64encode(new_value.encode()).decode() | |
c.execute("UPDATE books SET full_path = ? WHERE full_path = ?", (new_value, row[0])) | |
conn.commit() | |
# обновили путь к книге в базе | |
# Закрываем соединение с базой данных | |
conn.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment