mirror of
https://github.com/kovidgoyal/calibre.git
synced 2026-06-04 13:05:31 -04:00
0.9.31
This commit is contained in:
@@ -20,6 +20,44 @@
|
||||
# new recipes:
|
||||
# - title:
|
||||
|
||||
|
||||
- version: 0.9.31
|
||||
date: 2013-05-17
|
||||
|
||||
new features:
|
||||
- title: "Book list: Highlight the current cell in the book list, particularly convenient for usage with the keyboard."
|
||||
|
||||
- title: "Allow creation of advanced rules for column icons."
|
||||
|
||||
- title: "Driver for the limited edition SONY PRS-T2N"
|
||||
|
||||
- title: "MOBI Input: Add support for MOBI/KF8 files generated with the to be released kindlegen 2.9."
|
||||
tickets: [1179144]
|
||||
|
||||
bug fixes:
|
||||
- title: "ToC Editor: Fix incorrect playOrders in the generated toc.ncx when editing the toc in an epub file. This apparently affects FBReader."
|
||||
|
||||
- title: "PDF Input: Fix crashes on some malformed files, by updating the PDF library calibre uses (poppler 0.22.4)"
|
||||
|
||||
- title: "PDF Output: Ignore invalid links instead of erroring out on them."
|
||||
tickets: [1179314]
|
||||
|
||||
- title: "MOBI Output: Fix space errorneously being removed when the input document contains a tag with leading space and sub-tags."
|
||||
tickets: [1179216]
|
||||
|
||||
- title: "Search and replace wizard: Fix generated html being slightly different from the actual html in the conversion pipeline for some input formats (mainly HTML, CHM, LIT)."
|
||||
|
||||
- title: "Nook Color/Touch driver: Scan for ebooks in the entire main memory, not just under My Files"
|
||||
|
||||
|
||||
improved recipes:
|
||||
- Weblogs SL
|
||||
- .net magazine
|
||||
|
||||
new recipes:
|
||||
- title: nrc-next
|
||||
author: Niels Giesen
|
||||
|
||||
- version: 0.9.30
|
||||
date: 2013-05-10
|
||||
|
||||
|
||||
+828
-828
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
__appname__ = u'calibre'
|
||||
numeric_version = (0, 9, 30)
|
||||
numeric_version = (0, 9, 31)
|
||||
__version__ = u'.'.join(map(unicode, numeric_version))
|
||||
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"
|
||||
|
||||
|
||||
@@ -1476,6 +1476,7 @@ class StoreKoobeStore(StoreBase):
|
||||
drm_free_only = True
|
||||
headquarters = 'PL'
|
||||
formats = ['EPUB', 'MOBI', 'PDF']
|
||||
affiliate = True
|
||||
|
||||
class StoreLegimiStore(StoreBase):
|
||||
name = 'Legimi'
|
||||
|
||||
@@ -27,7 +27,7 @@ class NOOK(USBMS):
|
||||
# Ordered list of supported formats
|
||||
FORMATS = ['epub', 'pdb', 'pdf']
|
||||
|
||||
VENDOR_ID = [0x2080, 0x18d1] # 0x18d1 is for softrooted nook
|
||||
VENDOR_ID = [0x2080, 0x18d1] # 0x18d1 is for softrooted nook
|
||||
PRODUCT_ID = [0x001]
|
||||
BCD = [0x322]
|
||||
|
||||
@@ -53,7 +53,6 @@ class NOOK(USBMS):
|
||||
except ImportError:
|
||||
import Image, ImageDraw
|
||||
|
||||
|
||||
coverdata = getattr(metadata, 'thumbnail', None)
|
||||
if coverdata and coverdata[2]:
|
||||
cover = Image.open(cStringIO.StringIO(coverdata[2]))
|
||||
@@ -87,12 +86,13 @@ class NOOK_COLOR(NOOK):
|
||||
|
||||
PRODUCT_ID = [0x002, 0x003, 0x004]
|
||||
if isosx:
|
||||
PRODUCT_ID.append(0x005) # Nook HD+
|
||||
PRODUCT_ID.append(0x005) # Nook HD+
|
||||
BCD = [0x216]
|
||||
|
||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['EBOOK_DISK', 'NOOK_TABLET',
|
||||
'NOOK_SIMPLETOUCH']
|
||||
EBOOK_DIR_MAIN = 'My Files'
|
||||
# SCAN_FROM_ROOT = True
|
||||
NEWS_IN_FOLDER = False
|
||||
|
||||
def upload_cover(self, path, filename, metadata, filepath):
|
||||
|
||||
@@ -183,7 +183,7 @@ class BookHeader(object):
|
||||
self.codec))
|
||||
# Some KF8 files have header length == 264 (generated by kindlegen
|
||||
# 2.9?). See https://bugs.launchpad.net/bugs/1179144
|
||||
max_header_length = 0x108
|
||||
max_header_length = 500 # We choose 500 for future versions of kindlegen
|
||||
|
||||
if (ident == 'TEXTREAD' or self.length < 0xE4 or
|
||||
self.length > max_header_length or
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import (division, absolute_import, print_function)
|
||||
store_version = 2 # Needed for dynamic plugin loading
|
||||
store_version = 3 # Needed for dynamic plugin loading
|
||||
|
||||
__license__ = 'GPL 3'
|
||||
__copyright__ = '2013, Tomasz Długosz <tomek3d@gmail.com>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import urllib
|
||||
from base64 import b64encode
|
||||
from contextlib import closing
|
||||
|
||||
from lxml import html
|
||||
@@ -24,21 +25,20 @@ from calibre.gui2.store.web_store_dialog import WebStoreDialog
|
||||
class KoobeStore(BasicStoreConfig, StorePlugin):
|
||||
|
||||
def open(self, parent=None, detail_item=None, external=False):
|
||||
#aff_root = 'https://www.a4b-tracking.com/pl/stat-click-text-link/15/58/'
|
||||
aff_root = 'https://www.a4b-tracking.com/pl/stat-click-text-link/15/58/'
|
||||
|
||||
url = 'http://www.koobe.pl/'
|
||||
|
||||
#aff_url = aff_root + str(b64encode(url))
|
||||
aff_url = aff_root + str(b64encode(url))
|
||||
|
||||
detail_url = None
|
||||
if detail_item:
|
||||
detail_url = detail_item #aff_root + str(b64encode(detail_item))
|
||||
detail_url = aff_root + str(b64encode(detail_item))
|
||||
|
||||
if external or self.config.get('open_external', False):
|
||||
#open_url(QUrl(url_slash_cleaner(detail_url if detail_url else aff_url)))
|
||||
open_url(QUrl(url_slash_cleaner(detail_url if detail_url else url)))
|
||||
open_url(QUrl(url_slash_cleaner(detail_url if detail_url else aff_url)))
|
||||
else:
|
||||
#d = WebStoreDialog(self.gui, url, parent, detail_url if detail_url else aff_url)
|
||||
d = WebStoreDialog(self.gui, url, parent, detail_url if detail_url else url)
|
||||
d = WebStoreDialog(self.gui, url, parent, detail_url if detail_url else aff_url)
|
||||
d.setWindowTitle(self.name)
|
||||
d.set_tags(self.config.get('tags', ''))
|
||||
d.exec_()
|
||||
@@ -63,7 +63,7 @@ class KoobeStore(BasicStoreConfig, StorePlugin):
|
||||
cover_url = ''.join(data.xpath('.//div[@class="cover"]/a/img/@src'))
|
||||
price = ''.join(data.xpath('.//span[@class="current_price"]/text()'))
|
||||
title = ''.join(data.xpath('.//h2[@class="title"]/a/text()'))
|
||||
author = ''.join(data.xpath('.//h3[@class="book_author"]/a/text()'))
|
||||
author = ', '.join(data.xpath('.//h3[@class="book_author"]/a/text()'))
|
||||
formats = ', '.join(data.xpath('.//div[@class="formats"]/div/div/@title'))
|
||||
|
||||
counter -= 1
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import (unicode_literals, division, absolute_import, print_function)
|
||||
store_version = 1 # Needed for dynamic plugin loading
|
||||
store_version = 2 # Needed for dynamic plugin loading
|
||||
|
||||
__license__ = 'GPL 3'
|
||||
__copyright__ = '2012, Tomasz Długosz <tomek3d@gmail.com>'
|
||||
__copyright__ = '2012-2013, Tomasz Długosz <tomek3d@gmail.com>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import urllib
|
||||
@@ -25,12 +25,12 @@ class PublioStore(BasicStoreConfig, StorePlugin):
|
||||
|
||||
def open(self, parent=None, detail_item=None, external=False):
|
||||
google_analytics = '?utm_source=tdcalibre&utm_medium=calibre'
|
||||
url = 'http://www.publio.pl/e-booki.html' + google_analytics
|
||||
url = 'http://www.publio.pl/' + google_analytics
|
||||
|
||||
if external or self.config.get('open_external', False):
|
||||
open_url(QUrl(url_slash_cleaner((detail_item + google_analytics) if detail_item else url)))
|
||||
else:
|
||||
d = WebStoreDialog(self.gui, url, parent, detail_item)
|
||||
d = WebStoreDialog(self.gui, url, parent, detail_item if detail_item else url)
|
||||
d.setWindowTitle(self.name)
|
||||
d.set_tags(self.config.get('tags', ''))
|
||||
d.exec_()
|
||||
@@ -42,7 +42,7 @@ class PublioStore(BasicStoreConfig, StorePlugin):
|
||||
counter = max_results
|
||||
page = 1
|
||||
while counter:
|
||||
with closing(br.open('http://www.publio.pl/e-booki,strona' + str(page) + '.html?q=' + urllib.quote(query), timeout=timeout)) as f:
|
||||
with closing(br.open('http://www.publio.pl/szukaj,strona' + str(page) + '.html?q=' + urllib.quote(query) + '§ions=EMAGAZINE§ions=MINIBOOK§ions=EBOOK', timeout=timeout)) as f:
|
||||
doc = html.fromstring(f.read())
|
||||
for data in doc.xpath('//div[@class="item"]'):
|
||||
if counter <= 0:
|
||||
|
||||
@@ -431,7 +431,7 @@ def do_add_format(db, id, fmt, path, opts):
|
||||
done = db.add_format_with_hooks(id, fmt.upper(), path, index_is_id=True,
|
||||
replace=opts.replace)
|
||||
if not done and not opts.replace:
|
||||
prints(_('A %s file already exists for book: %d, not replacing')%(fmt.upper(), id))
|
||||
prints(_('A %(fmt)s file already exists for book: %(id)d, not replacing')%dict(fmt=fmt.upper(), id=id))
|
||||
else:
|
||||
send_message()
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ FORMAT_ARG_DESCS = dict(
|
||||
pubdate=_('The published date'),
|
||||
last_modified=_('The date when the metadata for this book record'
|
||||
' was last modified'),
|
||||
languages=_('The language(s) of this book'),
|
||||
id=_('The calibre internal id')
|
||||
)
|
||||
|
||||
@@ -283,7 +284,6 @@ def save_book_to_disk(id_, db, root, opts, length):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def do_save_book_to_disk(id_, mi, cover, plugboards,
|
||||
format_map, root, opts, length):
|
||||
from calibre.ebooks.metadata.meta import set_metadata
|
||||
|
||||
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+334
-290
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+377
-322
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+347
-298
File diff suppressed because it is too large
Load Diff
+335
-297
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+335
-297
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-290
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+340
-295
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+335
-297
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+332
-294
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+468
-406
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-290
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
+333
-295
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
+335
-297
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1135
-792
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+337
-290
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+331
-293
File diff suppressed because it is too large
Load Diff
+334
-296
File diff suppressed because it is too large
Load Diff
+328
-290
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user