Allow the sorter to check the database
This commit is contained in:
@@ -145,7 +145,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
|
|||||||
if my_file[0]:
|
if my_file[0]:
|
||||||
self.listView.setEnabled(False)
|
self.listView.setEnabled(False)
|
||||||
self.last_open_path = os.path.dirname(my_file[0][0])
|
self.last_open_path = os.path.dirname(my_file[0][0])
|
||||||
books = sorter.BookSorter(my_file[0])
|
books = sorter.BookSorter(my_file[0], self.database_path)
|
||||||
parsed_books = books.initiate_threads()
|
parsed_books = books.initiate_threads()
|
||||||
database.DatabaseFunctions(self.database_path).add_to_database(parsed_books)
|
database.DatabaseFunctions(self.database_path).add_to_database(parsed_books)
|
||||||
self.listView.setEnabled(True)
|
self.listView.setEnabled(True)
|
||||||
|
11
database.py
11
database.py
@@ -49,22 +49,13 @@ class DatabaseFunctions:
|
|||||||
book_cover = i[1]['cover_image']
|
book_cover = i[1]['cover_image']
|
||||||
book_isbn = i[1]['isbn']
|
book_isbn = i[1]['isbn']
|
||||||
|
|
||||||
# Check if the file might not already be in the database
|
|
||||||
# A None return signifies that that addition is possible
|
|
||||||
hash_from_database = self.fetch_data(
|
|
||||||
('Title',),
|
|
||||||
'books',
|
|
||||||
{'Hash': book_hash},
|
|
||||||
'EQUALS',
|
|
||||||
True)
|
|
||||||
|
|
||||||
sql_command_add = (
|
sql_command_add = (
|
||||||
"INSERT INTO books (Title,Author,Year,Path,ISBN,Hash,CoverImage) VALUES(?, ?, ?, ?, ?, ?, ?)")
|
"INSERT INTO books (Title,Author,Year,Path,ISBN,Hash,CoverImage) VALUES(?, ?, ?, ?, ?, ?, ?)")
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
# This is a placeholder. You will need to generate book covers
|
# This is a placeholder. You will need to generate book covers
|
||||||
# in case none are found
|
# in case none are found
|
||||||
if not hash_from_database and book_cover:
|
if book_cover:
|
||||||
self.database.execute(
|
self.database.execute(
|
||||||
sql_command_add,
|
sql_command_add,
|
||||||
[book_title, book_author, book_year,
|
[book_title, book_author, book_year,
|
||||||
|
26
sorter.py
26
sorter.py
@@ -6,11 +6,11 @@
|
|||||||
import hashlib
|
import hashlib
|
||||||
from multiprocessing.dummy import Pool
|
from multiprocessing.dummy import Pool
|
||||||
|
|
||||||
|
import database
|
||||||
from parsers.epub import ParseEPUB
|
from parsers.epub import ParseEPUB
|
||||||
|
|
||||||
|
|
||||||
class BookSorter:
|
class BookSorter:
|
||||||
def __init__(self, file_list):
|
def __init__(self, file_list, database_path):
|
||||||
# Have the GUI pass a list of files straight to here
|
# Have the GUI pass a list of files straight to here
|
||||||
# Then, on the basis of what is needed, pass the
|
# Then, on the basis of what is needed, pass the
|
||||||
# filenames to the requisite functions
|
# filenames to the requisite functions
|
||||||
@@ -19,17 +19,33 @@ class BookSorter:
|
|||||||
# Caching upon closing
|
# Caching upon closing
|
||||||
self.file_list = file_list
|
self.file_list = file_list
|
||||||
self.all_books = {}
|
self.all_books = {}
|
||||||
|
self.database_path = database_path
|
||||||
|
self.hashes = []
|
||||||
|
self.database_hashes()
|
||||||
|
|
||||||
|
def database_hashes(self):
|
||||||
|
all_hashes = database.DatabaseFunctions(
|
||||||
|
self.database_path).fetch_data(
|
||||||
|
('Hash',),
|
||||||
|
'books',
|
||||||
|
{'Hash': ''},
|
||||||
|
'LIKE')
|
||||||
|
|
||||||
|
if all_hashes:
|
||||||
|
self.hashes = [i[0] for i in all_hashes]
|
||||||
|
|
||||||
def read_book(self, filename):
|
def read_book(self, filename):
|
||||||
# filename is expected as a string containg the
|
# filename is expected as a string containg the
|
||||||
# full path of the ebook file
|
# full path of the ebook file
|
||||||
|
|
||||||
# TODO
|
|
||||||
# See if you want to include a hash of the book's name and author
|
|
||||||
with open(filename, 'rb') as current_book:
|
with open(filename, 'rb') as current_book:
|
||||||
file_md5 = hashlib.md5(current_book.read()).hexdigest()
|
file_md5 = hashlib.md5(current_book.read()).hexdigest()
|
||||||
|
|
||||||
if file_md5 in self.all_books.items():
|
# Do not allow addition in case the file is dupicated in the directory
|
||||||
|
# OR is already in the database
|
||||||
|
# TODO
|
||||||
|
# See if you want to include a hash of the book's name and author
|
||||||
|
if file_md5 in self.all_books.items() or file_md5 in self.hashes:
|
||||||
return
|
return
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
@@ -151,4 +151,4 @@ class Settings:
|
|||||||
self.settings.beginGroup('runtimeVariables')
|
self.settings.beginGroup('runtimeVariables')
|
||||||
self.settings.setValue('lastOpenPath', self.parent_window.last_open_path)
|
self.settings.setValue('lastOpenPath', self.parent_window.last_open_path)
|
||||||
self.settings.setValue('databasePath', self.parent_window.database_path)
|
self.settings.setValue('databasePath', self.parent_window.database_path)
|
||||||
self.settings.endGroup()
|
self.settings.endGroup()
|
||||||
|
Reference in New Issue
Block a user