mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Merge from trunk
This commit is contained in:
commit
22a3a7c60a
@ -19,6 +19,72 @@
|
||||
# new recipes:
|
||||
# - title:
|
||||
|
||||
- version: 0.8.2
|
||||
date: 2011-05-20
|
||||
|
||||
new features:
|
||||
- title: "Various new ebook sources added to Get Books: Google Books, O'Reilly, archive.org, some Polish ebooks stores, etc."
|
||||
|
||||
- title: "Amazon metadata download: Allow user to configure Amazon plugin to use any of the US, UK, German, French and Italian Amazon websites"
|
||||
|
||||
- title: "When deleting large numbers of books, give the user the option to skip the Recycle Bin, since sending lots of files to the recycle bin can be very slow."
|
||||
tickets: [784987]
|
||||
|
||||
- title: "OS X: The unified title+toolbar was disabled as it had various bugs. If you really want it you can turn it on again via Preferences->Tweaks, but be aware that you will see problems like the calibre windowd being too wide, weird animations when a device is detected, etc."
|
||||
|
||||
- title: "Add a tweak that controls what words are treated as suffixes when generating an author sort string from an author name."
|
||||
|
||||
- title: "Get Books: Store alst few searches in history"
|
||||
|
||||
bug fixes:
|
||||
- title: "Fix a crash when a device is connected/disconnected while a modal dialog opened from the toolbar is visible"
|
||||
tickets: [780484]
|
||||
|
||||
- title: "Fix incorrect results from ebooks.com when searching via Get Books"
|
||||
|
||||
- title: "Metadata plugboards: Add prioritization scheme to allow for using different settings for different locations"
|
||||
tickets: [783229]
|
||||
|
||||
- title: "Fix manage authors dialog too wide"
|
||||
tickets: [783065]
|
||||
|
||||
- title: "Fix multiple bracket types in author names not handled correctly when generating author sort string"
|
||||
tickets: [782551]
|
||||
|
||||
- title: "MOBI Input: Don't error out when detecting TOC structure if one of the elements has an invalid margin unit"
|
||||
|
||||
- title: "More fixes for japanese language calibre on windows"
|
||||
tickets: [782408]
|
||||
|
||||
- title: "Linux binaries: Always use either Cleanlook or Plastique styles for the GUI if no style can be loaded from the host computer"
|
||||
|
||||
improved recipes:
|
||||
- Newsweek
|
||||
- Economist
|
||||
- Dvhn
|
||||
- United Daily
|
||||
- Dagens Nyheter
|
||||
- GoComics
|
||||
- faz.net
|
||||
- golem.de
|
||||
|
||||
new recipes:
|
||||
- title: National Geographic
|
||||
author: gagsays
|
||||
|
||||
- title: Various German news sources
|
||||
author: schuster
|
||||
|
||||
- title: Dilema Veche
|
||||
author: Silviu Cotoara
|
||||
|
||||
- title: "Glamour, Good to Know, Good Housekeeping and Men's Health"
|
||||
author: Anonymous
|
||||
|
||||
- title: "Financial Sense and iProfessional"
|
||||
author: Darko Miletic
|
||||
|
||||
|
||||
- version: 0.8.1
|
||||
date: 2011-05-13
|
||||
|
||||
|
@ -14,7 +14,7 @@ class Economist(BasicNewsRecipe):
|
||||
description = ('Global news and current affairs from a European'
|
||||
' perspective. Best downloaded on Friday mornings (GMT).'
|
||||
' Much slower than the print edition based version.')
|
||||
|
||||
extra_css = '.headline {font-size: x-large;} \n h2 { font-size: small; } \n h1 { font-size: medium; }'
|
||||
oldest_article = 7.0
|
||||
cover_url = 'http://www.economist.com/images/covers/currentcoverus_large.jpg'
|
||||
remove_tags = [
|
||||
|
@ -53,7 +53,8 @@ authors_completer_append_separator = False
|
||||
# periods are automatically handled.
|
||||
author_sort_copy_method = 'comma'
|
||||
author_name_suffixes = ('Jr', 'Sr', 'Inc', 'Ph.D', 'Phd',
|
||||
'MD', 'M.D', 'I', 'II', 'III', 'IV')
|
||||
'MD', 'M.D', 'I', 'II', 'III', 'IV',
|
||||
'Junior', 'Senior')
|
||||
|
||||
#: Use author sort in Tag Browser
|
||||
# Set which author field to display in the tags pane (the list of authors,
|
||||
|
@ -4,7 +4,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
__appname__ = u'calibre'
|
||||
numeric_version = (0, 8, 1)
|
||||
numeric_version = (0, 8, 2)
|
||||
__version__ = u'.'.join(map(unicode, numeric_version))
|
||||
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"
|
||||
|
||||
|
@ -269,8 +269,8 @@ class NEXTBOOK(USBMS):
|
||||
|
||||
EBOOK_DIR_MAIN = ''
|
||||
|
||||
VENDOR_NAME = 'NEXT2'
|
||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = '1.0.14'
|
||||
VENDOR_NAME = ['NEXT2', 'BK7005']
|
||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['1.0.14', 'PLAYER']
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
THUMBNAIL_HEIGHT = 120
|
||||
|
||||
|
@ -549,7 +549,8 @@ class Amazon(Source):
|
||||
r'//div[@id="Results"]/descendant::td[starts-with(@id, "search:Td:")]'):
|
||||
for a in td.xpath(r'descendant::td[@class="dataColumn"]/descendant::a[@href]/span[@class="srTitle"]/..'):
|
||||
title = tostring(a, method='text', encoding=unicode).lower()
|
||||
if 'bulk pack' not in title:
|
||||
if ('bulk pack' not in title and '[audiobook]' not in
|
||||
title and '[audio cd]' not in title):
|
||||
matches.append(a.get('href'))
|
||||
break
|
||||
|
||||
|
@ -313,7 +313,7 @@ class Source(Plugin):
|
||||
title_patterns = [(re.compile(pat, re.IGNORECASE), repl) for pat, repl in
|
||||
[
|
||||
# Remove things like: (2010) (Omnibus) etc.
|
||||
(r'(?i)[({\[](\d{4}|omnibus|anthology|hardcover|paperback|turtleback|mass\s*market|edition|ed\.)[\])}]', ''),
|
||||
(r'(?i)[({\[](\d{4}|omnibus|anthology|hardcover|audiobook|audio\scd|paperback|turtleback|mass\s*market|edition|ed\.)[\])}]', ''),
|
||||
# Remove any strings that contain the substring edition inside
|
||||
# parentheses
|
||||
(r'(?i)[({\[].*?(edition|ed.).*?[\]})]', ''),
|
||||
|
@ -59,9 +59,10 @@ class EbookscomStore(BasicStoreConfig, StorePlugin):
|
||||
break
|
||||
|
||||
id = ''.join(data.xpath('.//a[1]/@href'))
|
||||
id = id.split('=')[-1]
|
||||
if not id:
|
||||
mo = re.search('\d+', id)
|
||||
if not mo:
|
||||
continue
|
||||
id = mo.group()
|
||||
|
||||
cover_url = ''.join(data.xpath('.//img[1]/@src'))
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -55,7 +55,7 @@ PARALLEL_FUNCS = {
|
||||
('calibre.utils.ipc.worker', 'arbitrary', None),
|
||||
|
||||
'arbitrary_n' :
|
||||
('calibre.utils.ipc.worker', 'arbitrary', 'notification'),
|
||||
('calibre.utils.ipc.worker', 'arbitrary_n', 'notification'),
|
||||
}
|
||||
|
||||
class Progress(Thread):
|
||||
@ -110,6 +110,10 @@ def arbitrary(module_name, func_name, args, kwargs={}):
|
||||
function ``func_name``
|
||||
:param kwargs: A dictionary of keyword arguments to pass to func_name
|
||||
'''
|
||||
if module_name.startswith('calibre_plugins'):
|
||||
# Initialize the plugin loader by doing this dummy import
|
||||
from calibre.customize.ui import find_plugin
|
||||
find_plugin
|
||||
module = importlib.import_module(module_name)
|
||||
func = getattr(module, func_name)
|
||||
return func(*args, **kwargs)
|
||||
@ -124,6 +128,10 @@ def arbitrary_n(module_name, func_name, args, kwargs={},
|
||||
completed and the second is a string with a message (it can be an empty
|
||||
string).
|
||||
'''
|
||||
if module_name.startswith('calibre_plugins'):
|
||||
# Initialize the plugin loader by doing this dummy import
|
||||
from calibre.customize.ui import find_plugin
|
||||
find_plugin
|
||||
module = importlib.import_module(module_name)
|
||||
func = getattr(module, func_name)
|
||||
kwargs['notification'] = notification
|
||||
|
Loading…
x
Reference in New Issue
Block a user