Search Google books for missing covers

Small fixes
This commit is contained in:
BasioMeusPuga
2019-02-05 23:12:22 +05:30
parent 91ca1e2190
commit 1e004774c9
4 changed files with 58 additions and 8 deletions

View File

@@ -718,11 +718,16 @@ class PliantWidgetsCommonFunctions:
def change_chapter(self, direction, was_button_pressed=None):
current_tab = self.pw.parent
current_position = current_tab.metadata['position']['current_chapter']
final_position = len(current_tab.metadata['content'])
# Prevent scrolling below page 1
if current_position == 1 and direction == -1:
return
# Prevent scrolling beyond last page
if (current_position == final_position) and direction == 1:
return
# Special cases for double page view
# Page limits are taken care of by the set_content method
def get_modifier():

View File

@@ -27,7 +27,6 @@ try:
multimedia_available = True
except ImportError:
error_string = 'QtMultimedia not found. Sounds will not play.'
print(error_string)
logger.error(error_string)
multimedia_available = False

View File

@@ -34,12 +34,14 @@
import io
import os
import sys
import json
import time
import pickle
import logging
import hashlib
import threading
import importlib
import urllib.request
# The multiprocessing module does not work correctly on Windows
if sys.platform.startswith('win'):
@@ -94,7 +96,7 @@ else:
available_parsers = [i for i in sorter]
progressbar = None # This is populated by __main__
progress_emitter = None # This is to be made into a global variable
_progress_emitter = None # This is to be made into a global variable
class UpdateProgress(QtCore.QObject):
@@ -244,7 +246,7 @@ class BookSorter:
if cover_image_raw:
cover_image = resize_image(cover_image_raw)
else:
cover_image = None
cover_image = fetch_cover(title, author)
this_book[file_md5]['cover_image'] = cover_image
this_book[file_md5]['addition_mode'] = self.addition_mode
@@ -293,8 +295,9 @@ class BookSorter:
total_number = len(self.file_list)
completed_number = len(self.threading_completed)
if progress_emitter: # Skip update in reading mode
progress_emitter.update_progress(
# Just for the record, this slows down book searching by about 20%
if _progress_emitter: # Skip update in reading mode
_progress_emitter.update_progress(
completed_number * 100 // total_number)
if total_number == completed_number:
@@ -338,9 +341,9 @@ class BookSorter:
def progress_object_generator():
# This has to be kept separate from the BookSorter class because
# the QtObject inheritance disallows pickling
global progress_emitter
progress_emitter = UpdateProgress()
progress_emitter.connect_to_progressbar()
global _progress_emitter
_progress_emitter = UpdateProgress()
_progress_emitter.connect_to_progressbar()
def resize_image(cover_image_raw):
@@ -363,3 +366,45 @@ def resize_image(cover_image_raw):
cover_image_final = io.BytesIO(byte_array)
cover_image_final.seek(0)
return cover_image_final.getvalue()
def fetch_cover(title, author):
# TODO
# Start using the author parameter
# Generate a cover image in case the Google API finds nothing
# Why is that stupid UnicodeEncodeError happening?
api_url = 'https://www.googleapis.com/books/v1/volumes?q='
key = '&key=' + 'AIzaSyDOferpeSS424Dshs4YWY1s-nIBA9884hE'
title = title.replace(' ', '+')
req = api_url + title + key
try:
response = urllib.request.urlopen(req)
if response.getcode() == 200:
response_text = response.read().decode('utf-8')
response_json = json.loads(response_text)
else:
return None
except (urllib.error.HTTPError, urllib.error.URLError):
return None
except UnicodeEncodeError:
logger.error('UnicodeEncodeError fetching cover for ' + title)
return None
try:
# Get cover link from json
cover_link = response_json['items'][0]['volumeInfo']['imageLinks']['thumbnail']
# Get a slightly larger version
cover_link = cover_link.replace('zoom=1', 'zoom=2')
cover_request = urllib.request.urlopen(cover_link)
response = cover_request.read() # Bytes object
cover_image = resize_image(response)
logger.info('Cover found for ' + title)
return cover_image
except:
logger.error(f'Couldn\'t find cover for ' + title)

View File

@@ -431,6 +431,7 @@ class Tab(QtWidgets.QWidget):
# Update the metadata dictionary to save position
self.metadata['position']['current_chapter'] = required_position
self.metadata['position']['is_read'] = False
if record_position:
self.contentView.record_position()