Allow the sorter to check the database

This commit is contained in:
BasioMeusPuga
2017-11-11 05:50:04 +05:30
parent e3684d4cd8
commit 093c272996
4 changed files with 24 additions and 17 deletions

View File

@@ -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)

View File

@@ -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,

View File

@@ -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