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
3ffd06ced8
@ -49,9 +49,9 @@ Add books
|
|||||||
|
|
||||||
1. **Add books from a single directory**: Opens a file chooser dialog and allows you to specify which books in a directory should be added. This action is *context sensitive*, i.e. it depends on which :ref:`catalog <catalogs>` you have selected. If you have selected the :guilabel:`Library`, books will be added to the library. If you have selected the ebook reader device, the books will be uploaded to the device, and so on.
|
1. **Add books from a single directory**: Opens a file chooser dialog and allows you to specify which books in a directory should be added. This action is *context sensitive*, i.e. it depends on which :ref:`catalog <catalogs>` you have selected. If you have selected the :guilabel:`Library`, books will be added to the library. If you have selected the ebook reader device, the books will be uploaded to the device, and so on.
|
||||||
|
|
||||||
2. **Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively, and any ebooks found are added to the library. |app| assumes that each directory contains a single book. All ebook files in a directory are assumed to be the same book in different formats. This action is the inverse of the :ref:`Save to disk <save_to_disk_multiple>` action, i.e. you can :guilabel:`Save to disk`, delete the books and re-add them with no lost information except for the date.
|
2. **Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively, and any ebooks found are added to the library. |app| assumes that each directory contains a single book. All ebook files in a directory are assumed to be the same book in different formats. This action is the inverse of the :ref:`Save to disk <save_to_disk_multiple>` action, i.e. you can :guilabel:`Save to disk`, delete the books and re-add them with no lost information except for the date (this assumes you have not changed any of the setting for the Save to disk action).
|
||||||
|
|
||||||
3. **Add books from directories, including sub-directories (Multiple books per directory, assumes every ebook file is a different book)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any ebooks found are added to the library. |app| assumes that each directory contains many books. All ebook files with the same name in a directory are assumed to be the same book in different formats. Ebooks with different names are added as different books. This action is the inverse of the :ref:`Save to disk <save_to_disk_single>` action, i.e. you can :guilabel:`Save to disk`, delete the books and re-add them with no lost information except for the date.
|
3. **Add books from directories, including sub-directories (Multiple books per directory, assumes every ebook file is a different book)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any ebooks found are added to the library. |app| assumes that each directory contains many books. All ebook files with the same name in a directory are assumed to be the same book in different formats. Ebooks with different names are added as different books.
|
||||||
|
|
||||||
4. **Add empty book. (Book Entry with no formats)**: Allows you to create a blank book record. This can be used to then manually fill out the information about a book that you may not have yet in your collection.
|
4. **Add empty book. (Book Entry with no formats)**: Allows you to create a blank book record. This can be used to then manually fill out the information about a book that you may not have yet in your collection.
|
||||||
|
|
||||||
|
21
recipes/mobilenations.recipe
Normal file
21
recipes/mobilenations.recipe
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class HindustanTimes(BasicNewsRecipe):
|
||||||
|
title = u'Mobile Nations'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1 #days
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
#encoding = 'cp1252'
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
#auto_cleanup_keep = '//div[@class="story-image shadowbox entry-content-asset"]'
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('News',
|
||||||
|
'http://www.mobilenations.com/rss/mb.xml'),
|
||||||
|
]
|
||||||
|
|
21
recipes/television_without_pity.recipe
Normal file
21
recipes/television_without_pity.recipe
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class HindustanTimes(BasicNewsRecipe):
|
||||||
|
title = u'Television Without Pity'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1 #days
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
#encoding = 'cp1252'
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
#auto_cleanup_keep = '//div[@class="float_right"]'
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('News',
|
||||||
|
'http://www.televisionwithoutpity.com/rss.xml'),
|
||||||
|
]
|
||||||
|
|
21
recipes/the_verge.recipe
Normal file
21
recipes/the_verge.recipe
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class HindustanTimes(BasicNewsRecipe):
|
||||||
|
title = u'The Verge'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1 #days
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
#encoding = 'cp1252'
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
auto_cleanup_keep = '//div[@class="story-image shadowbox entry-content-asset"]'
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('News',
|
||||||
|
'http://www.theverge.com/rss/index.xml'),
|
||||||
|
]
|
||||||
|
|
@ -634,7 +634,7 @@ class DevicePlugin(Plugin):
|
|||||||
of prefs['something']. Your
|
of prefs['something']. Your
|
||||||
method should call device_prefs.set_overrides(pref=val, pref=val, ...).
|
method should call device_prefs.set_overrides(pref=val, pref=val, ...).
|
||||||
Currently used for:
|
Currently used for:
|
||||||
metadata management (prefs['manage_device_metadata'])
|
metadata management (prefs['manage_device_metadata'])
|
||||||
'''
|
'''
|
||||||
device_prefs.set_overrides()
|
device_prefs.set_overrides()
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ class KF8Writer(object):
|
|||||||
not used for fonts. '''
|
not used for fonts. '''
|
||||||
|
|
||||||
def pointer(item, oref):
|
def pointer(item, oref):
|
||||||
ref = item.abshref(oref)
|
ref = urlnormalize(item.abshref(oref))
|
||||||
idx = self.resources.item_map.get(ref, None)
|
idx = self.resources.item_map.get(ref, None)
|
||||||
if idx is not None:
|
if idx is not None:
|
||||||
is_image = self.resources.records[idx-1][:4] not in {b'FONT'}
|
is_image = self.resources.records[idx-1][:4] not in {b'FONT'}
|
||||||
|
@ -146,7 +146,7 @@ class SendToConfig(QWidget): # {{{
|
|||||||
def browse(self):
|
def browse(self):
|
||||||
b = Browser(self.device.filesystem_cache, show_files=False,
|
b = Browser(self.device.filesystem_cache, show_files=False,
|
||||||
parent=self)
|
parent=self)
|
||||||
if b.exec_() == b.Accepted:
|
if b.exec_() == b.Accepted and b.current_item is not None:
|
||||||
sid, path = b.current_item
|
sid, path = b.current_item
|
||||||
self.t.setText('/'.join(path[1:]))
|
self.t.setText('/'.join(path[1:]))
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ class Rule(QWidget):
|
|||||||
def browse(self):
|
def browse(self):
|
||||||
b = Browser(self.device.filesystem_cache, show_files=False,
|
b = Browser(self.device.filesystem_cache, show_files=False,
|
||||||
parent=self)
|
parent=self)
|
||||||
if b.exec_() == b.Accepted:
|
if b.exec_() == b.Accepted and b.current_item is not None:
|
||||||
sid, path = b.current_item
|
sid, path = b.current_item
|
||||||
self.folder.setText('/'.join(path[1:]))
|
self.folder.setText('/'.join(path[1:]))
|
||||||
|
|
||||||
|
@ -3664,7 +3664,7 @@ books_series_link feeds
|
|||||||
if not ext:
|
if not ext:
|
||||||
continue
|
continue
|
||||||
ext = ext[1:].lower()
|
ext = ext[1:].lower()
|
||||||
if ext not in BOOK_EXTENSIONS:
|
if ext not in BOOK_EXTENSIONS and ext != 'opf':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
key = os.path.splitext(path)[0]
|
key = os.path.splitext(path)[0]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user