mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Merged from trnk
This commit is contained in:
commit
594582a9d8
@ -1,7 +1,7 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Archeowiesci(BasicNewsRecipe):
|
||||
title = u'Archeowiesci'
|
||||
title = u'Archeowieści'
|
||||
__author__ = 'fenuks'
|
||||
category = 'archeology'
|
||||
language = 'pl'
|
||||
|
43
recipes/bachormagazyn.recipe
Normal file
43
recipes/bachormagazyn.recipe
Normal file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = u'Łukasz Grąbczewski 2013'
|
||||
__version__ = '1.0'
|
||||
|
||||
'''
|
||||
bachormagazyn.pl
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class bachormagazyn(BasicNewsRecipe):
|
||||
__author__ = u'Łukasz Grączewski'
|
||||
title = u'Bachor Magazyn'
|
||||
description = u'Alternatywny magazyn o alternatywach rodzicielstwa'
|
||||
language = 'pl'
|
||||
publisher = 'Bachor Mag.'
|
||||
publication_type = 'magazine'
|
||||
masthead_url = 'http://bachormagazyn.pl/wp-content/uploads/2011/10/bachor_header1.gif'
|
||||
no_stylesheets = True
|
||||
remove_javascript = True
|
||||
use_embedded_content = False
|
||||
remove_empty_feeds = True
|
||||
|
||||
oldest_article = 32 #monthly +1
|
||||
max_articles_per_feed = 100
|
||||
|
||||
feeds = [
|
||||
(u'Bezradnik dla nieudacznych rodziców', u'http://bachormagazyn.pl/feed/')
|
||||
]
|
||||
|
||||
keep_only_tags = []
|
||||
keep_only_tags.append(dict(name = 'div', attrs = {'id' : 'content'}))
|
||||
|
||||
remove_tags = []
|
||||
remove_tags.append(dict(attrs = {'id' : 'nav-above'}))
|
||||
remove_tags.append(dict(attrs = {'id' : 'nav-below'}))
|
||||
remove_tags.append(dict(attrs = {'id' : 'comments'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'entry-info'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'comments-link'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'sharedaddy sd-sharing-enabled'}))
|
66
recipes/computer_woche.recipe
Normal file
66
recipes/computer_woche.recipe
Normal file
@ -0,0 +1,66 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
'''
|
||||
Fetch Computerwoche.
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
|
||||
class Computerwoche(BasicNewsRecipe):
|
||||
|
||||
title = 'Computerwoche'
|
||||
description = 'german computer newspaper'
|
||||
language = 'de'
|
||||
__author__ = 'Maria Seliger'
|
||||
use_embedded_content = False
|
||||
timefmt = ' [%d %b %Y]'
|
||||
max_articles_per_feed = 15
|
||||
linearize_tables = True
|
||||
no_stylesheets = True
|
||||
remove_stylesheets = True
|
||||
remove_javascript = True
|
||||
encoding = 'utf-8'
|
||||
html2epub_options = 'base_font_size=10'
|
||||
summary_length = 100
|
||||
auto_cleanup = True
|
||||
|
||||
|
||||
extra_css = '''
|
||||
h2{font-family:Arial,Helvetica,sans-serif; font-size: x-small; color: #003399;}
|
||||
a{font-family:Arial,Helvetica,sans-serif; font-size: x-small; font-style:italic;}
|
||||
.dachzeile p{font-family:Arial,Helvetica,sans-serif; font-size: x-small; }
|
||||
h1{ font-family:Arial,Helvetica,sans-serif; font-size:x-large; font-weight:bold;}
|
||||
.artikelTeaser{font-family:Arial,Helvetica,sans-serif; font-size: x-small; font-weight:bold; }
|
||||
body{font-family:Arial,Helvetica,sans-serif; }
|
||||
.photo {font-family:Arial,Helvetica,sans-serif; font-size: x-small; color: #666666;} '''
|
||||
|
||||
feeds = [ ('Computerwoche', 'http://rss.feedsportal.com/c/312/f/4414/index.rss'),
|
||||
('IDG Events', 'http://rss.feedsportal.com/c/401/f/7544/index.rss'),
|
||||
('Computerwoche Jobs und Karriere', 'http://rss.feedsportal.com/c/312/f/434082/index.rss'),
|
||||
('Computerwoche BI und ECM', 'http://rss.feedsportal.com/c/312/f/434083/index.rss'),
|
||||
('Computerwoche Cloud Computing', 'http://rss.feedsportal.com/c/312/f/534647/index.rss'),
|
||||
('Computerwoche Compliance und Recht', 'http://rss.feedsportal.com/c/312/f/434084/index.rss'),
|
||||
('Computerwoche CRM', 'http://rss.feedsportal.com/c/312/f/434085/index.rss'),
|
||||
('Computerwoche Data Center und Server', 'http://rss.feedsportal.com/c/312/f/434086/index.rss'),
|
||||
('Computerwoche ERP', 'http://rss.feedsportal.com/c/312/f/434087/index.rss'),
|
||||
('Computerwoche IT Macher', 'http://rss.feedsportal.com/c/312/f/534646/index.rss'),
|
||||
('Computerwoche IT-Services', 'http://rss.feedsportal.com/c/312/f/434089/index.rss'),
|
||||
('Computerwoche IT-Strategie', 'http://rss.feedsportal.com/c/312/f/434090/index.rss'),
|
||||
('Computerwoche Mittelstands-IT', 'http://rss.feedsportal.com/c/312/f/434091/index.rss'),
|
||||
('Computerwoche Mobile und Wireless', 'http://rss.feedsportal.com/c/312/f/434092/index.rss'),
|
||||
('Computerwoche Netzwerk', 'http://rss.feedsportal.com/c/312/f/434093/index.rss'),
|
||||
('Computerwoche Notebook und PC', 'http://rss.feedsportal.com/c/312/f/434094/index.rss'),
|
||||
('Computerwoche Office und Tools', 'http://rss.feedsportal.com/c/312/f/434095/index.rss'),
|
||||
('Computerwoche Security', 'http://rss.feedsportal.com/c/312/f/434098/index.rss'),
|
||||
('Computerwoche SOA und BPM', 'http://rss.feedsportal.com/c/312/f/434099/index.rss'),
|
||||
('Computerwoche Software Infrastruktur', 'http://rss.feedsportal.com/c/312/f/434096/index.rss'),
|
||||
('Computerwoche Storage', 'http://rss.feedsportal.com/c/312/f/534645/index.rss'),
|
||||
('Computerwoche VoIP und TK', 'http://rss.feedsportal.com/c/312/f/434102/index.rss'),
|
||||
('Computerwoche Web', 'http://rss.feedsportal.com/c/312/f/434103/index.rss'),
|
||||
('Computerwoche Home-IT', 'http://rss.feedsportal.com/c/312/f/434104/index.rss')]
|
||||
|
||||
|
||||
def print_version(self, url):
|
||||
return url.replace ('/a/', '/a/print/')
|
||||
|
@ -18,6 +18,7 @@ class FrazPC(BasicNewsRecipe):
|
||||
max_articles_per_feed = 100
|
||||
use_embedded_content = False
|
||||
no_stylesheets = True
|
||||
remove_empty_feeds = True
|
||||
cover_url='http://www.frazpc.pl/images/logo.png'
|
||||
feeds = [
|
||||
(u'Aktualno\u015bci', u'http://www.frazpc.pl/feed/aktualnosci'),
|
||||
|
@ -1,5 +1,5 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2008-2012, Darko Miletic <darko.miletic at gmail.com>'
|
||||
__copyright__ = '2008-2013, Darko Miletic <darko.miletic at gmail.com>'
|
||||
'''
|
||||
harpers.org - paid subscription/ printed issue articles
|
||||
This recipe only get's article's published in text format
|
||||
@ -72,7 +72,8 @@ class Harpers_full(BasicNewsRecipe):
|
||||
|
||||
#go to the current issue
|
||||
soup1 = self.index_to_soup(currentIssue_url)
|
||||
date = re.split('\s\|\s',self.tag_to_string(soup1.head.title.string))[0]
|
||||
currentIssue_title = self.tag_to_string(soup1.head.title.string)
|
||||
date = re.split('\s\|\s',currentIssue_title)[0]
|
||||
self.timefmt = u' [%s]'%date
|
||||
|
||||
#get cover
|
||||
@ -84,27 +85,23 @@ class Harpers_full(BasicNewsRecipe):
|
||||
count = 0
|
||||
for item in soup1.findAll('div', attrs={'class':'articleData'}):
|
||||
text_links = item.findAll('h2')
|
||||
for text_link in text_links:
|
||||
if count == 0:
|
||||
count = 1
|
||||
else:
|
||||
url = text_link.a['href']
|
||||
title = text_link.a.contents[0]
|
||||
date = strftime(' %B %Y')
|
||||
articles.append({
|
||||
'title' :title
|
||||
,'date' :date
|
||||
,'url' :url
|
||||
,'description':''
|
||||
})
|
||||
return [(soup1.head.title.string, articles)]
|
||||
if text_links:
|
||||
for text_link in text_links:
|
||||
if count == 0:
|
||||
count = 1
|
||||
else:
|
||||
url = text_link.a['href']
|
||||
title = self.tag_to_string(text_link.a)
|
||||
date = strftime(' %B %Y')
|
||||
articles.append({
|
||||
'title' :title
|
||||
,'date' :date
|
||||
,'url' :url
|
||||
,'description':''
|
||||
})
|
||||
return [(currentIssue_title, articles)]
|
||||
|
||||
def print_version(self, url):
|
||||
return url + '?single=1'
|
||||
|
||||
def cleanup(self):
|
||||
soup = self.index_to_soup('http://harpers.org/')
|
||||
signouturl=self.tag_to_string(soup.find('li', attrs={'class':'subLogOut'}).findNext('li').a['href'])
|
||||
self.log(signouturl)
|
||||
self.browser.open(signouturl)
|
||||
|
||||
|
BIN
recipes/icons/gildia_pl.png
Normal file
BIN
recipes/icons/gildia_pl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
BIN
recipes/icons/nowy_obywatel.png
Executable file
BIN
recipes/icons/nowy_obywatel.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 480 B |
@ -7,6 +7,10 @@ class AdvancedUserRecipe1295262156(BasicNewsRecipe):
|
||||
oldest_article = 7
|
||||
language = 'de'
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
auto_cleanup = True
|
||||
encoding='iso-8859-1'
|
||||
|
||||
|
||||
feeds = [(u'kath.net', u'http://www.kath.net/2005/xml/index.xml')]
|
||||
|
||||
|
@ -16,6 +16,7 @@ class KopalniaWiedzy(BasicNewsRecipe):
|
||||
max_articles_per_feed = 100
|
||||
INDEX = u'http://kopalniawiedzy.pl/'
|
||||
remove_javascript = True
|
||||
remove_empty_feeds = True
|
||||
no_stylesheets = True
|
||||
|
||||
remove_tags = [{'name':'p', 'attrs': {'class': 'keywords'}}, {'name':'div', 'attrs': {'class':'sexy-bookmarks sexy-bookmarks-bg-caring'}}, {'name':'div', 'attrs': {'class':'article-time-and-cat'}}, {'name':'p', 'attrs': {'class':'tags'}}]
|
||||
|
@ -3,7 +3,7 @@ from calibre.ebooks.BeautifulSoup import BeautifulSoup as bs
|
||||
class KurierGalicyjski(BasicNewsRecipe):
|
||||
title = u'Kurier Galicyjski'
|
||||
__author__ = 'fenuks'
|
||||
#description = u''
|
||||
description = u'Kurier Galicyjski - największa gazeta dla Polaków na Ukrainie. Bieżące wydarzenia z życia polskiej mniejszości, historia, kultura, polityka, reportaże.'
|
||||
category = 'news'
|
||||
language = 'pl'
|
||||
cover_url = 'http://www.duszki.pl/Kurier_galicyjski_bis2_small.gif'
|
||||
|
@ -3,7 +3,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
||||
class KurierSzczecinski(BasicNewsRecipe):
|
||||
title = u'Kurier Szczeci\u0144ski'
|
||||
__author__ = 'fenuks'
|
||||
description = u'24Kurier jest portalem Kuriera Szczecińskiego. Zawiera aktualności ze Szczecina oraz wiadomości regionalne z województwa zachodniopomorskiego. '
|
||||
description = u'24Kurier jest portalem Kuriera Szczecińskiego. Zawiera aktualności ze Szczecina oraz wiadomości regionalne z województwa zachodniopomorskiego.'
|
||||
category = 'newspaper'
|
||||
#publication_type = ''
|
||||
language = 'pl'
|
||||
|
@ -97,7 +97,7 @@ class ledevoir(BasicNewsRecipe):
|
||||
.texte {font-size:1.15em;line-height:1.4em;margin-bottom:17px;}
|
||||
'''
|
||||
def get_browser(self):
|
||||
br = BasicNewsRecipe.get_browser()
|
||||
br = BasicNewsRecipe.get_browser(self)
|
||||
if self.username is not None and self.password is not None:
|
||||
br.open('http://www.ledevoir.com')
|
||||
br.select_form(nr=0)
|
||||
|
@ -3,7 +3,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
||||
class Niebezpiecznik_pl(BasicNewsRecipe):
|
||||
title = u'Niebezpiecznik.pl'
|
||||
__author__ = 'fenuks'
|
||||
description = 'Niebezpiecznik.pl'
|
||||
description = u'Niebezpiecznik.pl – o bezpieczeństwie i nie...'
|
||||
category = 'hacking, IT'
|
||||
language = 'pl'
|
||||
oldest_article = 8
|
||||
|
42
recipes/nowy_obywatel.recipe
Normal file
42
recipes/nowy_obywatel.recipe
Normal file
@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = u'Łukasz Grąbczewski 2013'
|
||||
__version__ = '1.0'
|
||||
|
||||
'''
|
||||
nowyobywatel.pl
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class nowyobywatel(BasicNewsRecipe):
|
||||
__author__ = u'Łukasz Grączewski'
|
||||
title = u'Nowy Obywatel'
|
||||
description = u'Pismo na rzecz sprawiedliwości społecznej'
|
||||
language = 'pl'
|
||||
publisher = 'Stowarzyszenie „Obywatele Obywatelom”'
|
||||
publication_type = 'magazine'
|
||||
masthead_url = 'http://lewicowo.pl/wp-content/uploads/2011/11/nowy-obywatel1.png'
|
||||
no_stylesheets = True
|
||||
remove_javascript = True
|
||||
use_embedded_content = True
|
||||
remove_empty_feeds = True
|
||||
|
||||
oldest_article = 32 #monthly +1
|
||||
max_articles_per_feed = 100
|
||||
simultaneous_downloads = 20
|
||||
|
||||
feeds = [
|
||||
(u'Aktualności', u'http://nowyobywatel.pl/category/aktualnosci/feed/'),
|
||||
(u'Opinie', u'http://nowyobywatel.pl/category/opinie/feed/'),
|
||||
(u'Nasze rozmowy', u'http://nowyobywatel.pl/category/nasze-rozmowy/feed/'),
|
||||
(u'Inspiracje', u'http://nowyobywatel.pl/category/inspiracje/feed/')
|
||||
]
|
||||
|
||||
|
||||
remove_tags = []
|
||||
remove_tags.append(dict(attrs = {'class' : 'post-date'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'printfriendly'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'social4i'}))
|
@ -1,7 +1,7 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Swiat_Obrazu(BasicNewsRecipe):
|
||||
title = u'Swiat Obrazu'
|
||||
title = u'Świat Obrazu'
|
||||
__author__ = 'fenuks'
|
||||
description = u'Internetowy Dziennik o Fotografii i Wideo www.SwiatObrazu.pl to źródło informacji o technice fotografii i wideo, o sprzęcie najbardziej znanych i uznanych firm: Canon, Nikon, Sony, Hasselblad i wielu innych. Znajdziecie tu programy do obróbki zdjęć, forum foto i forum wideo i galerie zdjęć. Codziennie najświeższe informacje: aktualności, testy, poradniki, wywiady, felietony. Swiatobrazu.pl stale organizuje konkursy oraz warsztaty fotograficzne i wideo.'
|
||||
category = 'photography'
|
||||
|
@ -19,6 +19,7 @@ class swiatczytnikow(BasicNewsRecipe):
|
||||
|
||||
feeds = [(u'Świat Czytników - wpisy', u'http://swiatczytnikow.pl/feed')]
|
||||
|
||||
remove_tags = [dict(name = 'ul', attrs = {'class' : 'similar-posts'})]
|
||||
remove_tags = [dict(name = 'ul', attrs = {'class' : 'similar-posts'}),
|
||||
dict(name = 'div', attrs = {'class' : 'feedflare'})]
|
||||
|
||||
preprocess_regexps = [(re.compile(u'<h3>Czytaj dalej:</h3>'), lambda match: '')]
|
||||
|
@ -16,11 +16,31 @@ class telepolis(BasicNewsRecipe):
|
||||
use_embedded_content = False
|
||||
|
||||
feeds = [
|
||||
(u'Wiadomości', u'http://www.telepolis.pl/rss/news.php')#,
|
||||
#(u'Artykuły', u'http://www.telepolis.pl/rss/artykuly.php')
|
||||
(u'Wiadomości', u'http://www.telepolis.pl/rss,2,5,0.html')
|
||||
]
|
||||
|
||||
keep_only_tags = [
|
||||
dict(name='div', attrs={'class':'flol w510'}),
|
||||
dict(name='div', attrs={'class':'main_tresc'}),
|
||||
dict(name='div', attrs={'class':'main_tresc_news'})
|
||||
]
|
||||
|
||||
def append_page(self, soup, appendtag):
|
||||
chpage= appendtag.find(attrs={'class':'str'})
|
||||
if chpage:
|
||||
for page in chpage.findAll('a'):
|
||||
if page.renderContents() == 'Następna ›':
|
||||
break
|
||||
soup2 = self.index_to_soup(page['href'])
|
||||
pagetext = soup2.find(attrs={'class':'main_tresc'})
|
||||
pos = len(appendtag.contents)
|
||||
appendtag.insert(pos, pagetext)
|
||||
for r in appendtag.findAll(attrs={'class':'str'}):
|
||||
r.extract()
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
self.append_page(soup, soup.body)
|
||||
for image in soup.findAll('img'):
|
||||
if 'm.jpg' in image['src']:
|
||||
image['src'] = image['src'].replace('m.jpg', '.jpg')
|
||||
return soup
|
||||
|
@ -3,12 +3,13 @@
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = u'Łukasz Grąbczewski 2012-2013'
|
||||
__version__ = '1.1'
|
||||
__version__ = '1.2'
|
||||
|
||||
'''
|
||||
zw.com.pl
|
||||
'''
|
||||
|
||||
import re
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class zyciewarszawy(BasicNewsRecipe):
|
||||
@ -17,12 +18,14 @@ class zyciewarszawy(BasicNewsRecipe):
|
||||
description = u'Wiadomości z Warszawy'
|
||||
language = 'pl'
|
||||
publisher = 'Presspublica'
|
||||
publication_type = 'newspapper'
|
||||
publication_type = 'newspaper'
|
||||
masthead_url = 'http://www.zw.com.pl/static/img/logo_zw.gif'
|
||||
no_stylesheets = True
|
||||
remove_javascript = True
|
||||
use_embedded_content = False
|
||||
remove_empty_feeds = True
|
||||
|
||||
oldest_article = 1 #daily news only
|
||||
oldest_article = 1.5 #last 36h
|
||||
max_articles_per_feed = 100
|
||||
|
||||
feeds = [(u'Najnowsze', u'http://www.zw.com.pl/rss/1.html')]
|
||||
@ -31,15 +34,15 @@ class zyciewarszawy(BasicNewsRecipe):
|
||||
keep_only_tags.append(dict(name = 'div', attrs = {'id' : 'storyp'}))
|
||||
|
||||
remove_tags = []
|
||||
remove_tags.append(dict(name = 'div', attrs = {'class' : 'authordate'}))
|
||||
remove_tags.append(dict(name = 'div', attrs = {'class' : 'author'}))
|
||||
'''remove_tags.append(dict(name = 'div', attrs = {'class' : 'seealso'}))'''
|
||||
remove_tags.append(dict(name = 'div', attrs = {'class' : 'more'}))
|
||||
remove_tags.append(dict(name = 'div', attrs = {'class' : 'clr'}))
|
||||
remove_tags.append(dict(name = 'div', attrs = {'id' : 'adk_0'}))
|
||||
remove_tags.append(dict(name = 'div', attrs = {'id' : 'adsense_0'}))
|
||||
remove_tags.append(dict(name = 'div', attrs = {'id' : 'share_bottom'}))
|
||||
remove_tags.append(dict(name = 'div', attrs = {'id' : 'copyright_law'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'author'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'more'}))
|
||||
remove_tags.append(dict(attrs = {'class' : 'clr'}))
|
||||
remove_tags.append(dict(attrs = {'id' : 'adk_0'}))
|
||||
remove_tags.append(dict(attrs = {'id' : 'adsense_0'}))
|
||||
remove_tags.append(dict(attrs = {'id' : 'share_bottom'}))
|
||||
remove_tags.append(dict(attrs = {'id' : 'copyright_law'}))
|
||||
|
||||
preprocess_regexps = [(re.compile(r',3.jpg'), lambda m: ',2.jpg')]
|
||||
|
||||
def print_version(self, url):
|
||||
url += "?print=tak"
|
||||
|
@ -56,6 +56,8 @@ class TOLINO(EB600):
|
||||
description = _('Communicate with the Tolino Shine reader.')
|
||||
FORMATS = ['epub', 'pdf', 'txt']
|
||||
BCD = [0x226]
|
||||
VENDOR_NAME = ['DEUTSCHE']
|
||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['_TELEKOMTOLINO']
|
||||
|
||||
def linux_swap_drives(self, drives):
|
||||
if len(drives) < 2 or not drives[1] or not drives[2]: return drives
|
||||
|
@ -15,7 +15,7 @@ class ILIAD(USBMS):
|
||||
name = 'IRex Iliad Device Interface'
|
||||
description = _('Communicate with the IRex Iliad eBook reader.')
|
||||
author = 'John Schember'
|
||||
supported_platforms = ['windows', 'linux']
|
||||
supported_platforms = ['windows', 'osx', 'linux']
|
||||
|
||||
# Ordered list of supported formats
|
||||
# Be sure these have an entry in calibre.devices.mime
|
||||
|
@ -89,7 +89,7 @@ class KOBO(USBMS):
|
||||
'Enable if you wish to see/delete them.'),
|
||||
_('Attempt to support newer firmware') +
|
||||
':::'+_('Kobo routinely updates the firmware and the '
|
||||
'database version. With this option Calibre will attempt '
|
||||
'database version. With this option calibre will attempt '
|
||||
'to perform full read-write functionality - Here be Dragons!! '
|
||||
'Enable only if you are comfortable with restoring your kobo '
|
||||
'to factory defaults and testing software'),
|
||||
|
@ -679,7 +679,7 @@ OptionRecommendation(name='search_replace',
|
||||
self.archive_input_tdir = None
|
||||
if input_fmt in ARCHIVE_FMTS:
|
||||
self.log('Processing archive...')
|
||||
tdir = PersistentTemporaryDirectory('_plumber_archive')
|
||||
tdir = PersistentTemporaryDirectory('_pl_arc')
|
||||
self.input, input_fmt = self.unarchive(self.input, tdir)
|
||||
self.archive_input_tdir = tdir
|
||||
if os.access(self.input, os.R_OK):
|
||||
|
@ -104,8 +104,9 @@ def verify_toc_destinations(container, toc):
|
||||
anchor_map[name] = frozenset(anchor_xpath(root))
|
||||
item.dest_exists = item.frag in anchor_map[name]
|
||||
if not item.dest_exists:
|
||||
item.dest_error = _('The anchor %s does not exist in file %s')%(
|
||||
item.frag, name)
|
||||
item.dest_error = _(
|
||||
'The anchor %(a)s does not exist in file %(f)s')%dict(
|
||||
a=item.frag, f=name)
|
||||
|
||||
def get_toc(container, verify_destinations=True):
|
||||
toc = container.opf_xpath('//opf:spine/@toc')
|
||||
|
@ -232,11 +232,14 @@ class CopyToLibraryAction(InterfaceAction):
|
||||
return error_dialog(self.gui, _('No library'),
|
||||
_('No library found at %s')%loc, show=True)
|
||||
|
||||
self.pd = ProgressDialog(_('Copying'), min=0, max=len(ids)-1,
|
||||
aname = _('Moving to') if delete_after else _('Copying to')
|
||||
dtitle = '%s %s'%(aname, os.path.basename(loc))
|
||||
|
||||
self.pd = ProgressDialog(dtitle, min=0, max=len(ids)-1,
|
||||
parent=self.gui, cancelable=False)
|
||||
|
||||
def progress(idx, title):
|
||||
self.pd.set_msg(_('Copying') + ' ' + title)
|
||||
self.pd.set_msg(title)
|
||||
self.pd.set_value(idx)
|
||||
|
||||
self.worker = Worker(ids, db, loc, Dispatcher(progress),
|
||||
@ -245,13 +248,16 @@ class CopyToLibraryAction(InterfaceAction):
|
||||
|
||||
self.pd.exec_()
|
||||
|
||||
donemsg = _('Copied %(num)d books to %(loc)s')
|
||||
if delete_after:
|
||||
donemsg = _('Moved %(num)d books to %(loc)s')
|
||||
|
||||
if self.worker.error is not None:
|
||||
e, tb = self.worker.error
|
||||
error_dialog(self.gui, _('Failed'), _('Could not copy books: ') + e,
|
||||
det_msg=tb, show=True)
|
||||
else:
|
||||
self.gui.status_bar.show_message(
|
||||
_('Copied %(num)d books to %(loc)s') %
|
||||
self.gui.status_bar.show_message(donemsg %
|
||||
dict(num=len(ids), loc=loc), 2000)
|
||||
if self.worker.auto_merged_ids:
|
||||
books = '\n'.join(self.worker.auto_merged_ids.itervalues())
|
||||
|
@ -328,6 +328,8 @@ class TagBrowserWidget(QWidget): # {{{
|
||||
search_layout = QHBoxLayout()
|
||||
self._layout.addLayout(search_layout)
|
||||
self.item_search = HistoryLineEdit(parent)
|
||||
self.item_search.setMinimumContentsLength(10)
|
||||
self.item_search.setSizeAdjustPolicy(self.item_search.AdjustToMinimumContentsLengthWithIcon)
|
||||
try:
|
||||
self.item_search.lineEdit().setPlaceholderText(
|
||||
_('Find item in tag browser'))
|
||||
|
@ -30,6 +30,8 @@ def remove_dir(x):
|
||||
pass
|
||||
|
||||
def app_prefix(prefix):
|
||||
if iswindows:
|
||||
return '%s_'%__appname__
|
||||
return '%s_%s_%s'%(__appname__, __version__, prefix)
|
||||
|
||||
def base_dir():
|
||||
|
@ -5,8 +5,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.9.22\n"
|
||||
"POT-Creation-Date: 2013-03-08 09:34+IST\n"
|
||||
"PO-Revision-Date: 2013-03-08 09:34+IST\n"
|
||||
"POT-Creation-Date: 2013-03-10 19:35+IST\n"
|
||||
"PO-Revision-Date: 2013-03-10 19:35+IST\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -211,27 +211,27 @@ msgstr ""
|
||||
msgid "Cannot configure"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:322
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:331
|
||||
msgid "File type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:368
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:377
|
||||
msgid "Metadata reader"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:398
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:407
|
||||
msgid "Metadata writer"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:428
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:437
|
||||
msgid "Catalog generator"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:551
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:560
|
||||
msgid "User Interface Action"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:585
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:594
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:28
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:197
|
||||
@ -241,12 +241,12 @@ msgstr ""
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:637
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:646
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39
|
||||
msgid "Store"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:641
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:650
|
||||
msgid "An ebook store."
|
||||
msgstr ""
|
||||
|
||||
@ -1021,10 +1021,22 @@ msgstr ""
|
||||
msgid "Cause a running calibre instance, if any, to be shutdown. Note that if there are running jobs, they will be silently aborted, so use with care."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/debug.py:177
|
||||
#: /home/kovid/work/calibre/src/calibre/debug.py:81
|
||||
msgid ""
|
||||
"Run a plugin that provides a command line interface. For example:\n"
|
||||
"calibre-debug -r \"Add Books\" -- file1 --option1\n"
|
||||
"Everything after the -- will be passed to the plugin as arguments."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/debug.py:180
|
||||
msgid "Debug log"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/debug.py:272
|
||||
#, python-format
|
||||
msgid "No plugin named %s found"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:19
|
||||
msgid "Communicate with Android phones."
|
||||
msgstr ""
|
||||
@ -1266,7 +1278,7 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:288
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:296
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
|
||||
msgid "Kovid Goyal"
|
||||
msgstr ""
|
||||
@ -1299,31 +1311,31 @@ msgstr ""
|
||||
msgid "Communicate with the Tolino Shine reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:204
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:212
|
||||
msgid "Communicate with the Astak Mentor EB600"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:227
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:235
|
||||
msgid "Communicate with the PocketBook 301 reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:244
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:252
|
||||
msgid "Communicate with the PocketBook 602/603/902/903/Pro 912 reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:264
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:272
|
||||
msgid "Communicate with the PocketBook 622 reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:277
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:285
|
||||
msgid "Communicate with the PocketBook 360+ reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:287
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:295
|
||||
msgid "Communicate with the PocketBook 701"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:318
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:326
|
||||
msgid "Communicate with the Infibeam Pi2 reader."
|
||||
msgstr ""
|
||||
|
||||
@ -1571,7 +1583,7 @@ msgid "Attempt to support newer firmware"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:91
|
||||
msgid "Kobo routinely updates the firmware and the database version. With this option Calibre will attempt to perform full read-write functionality - Here be Dragons!! Enable only if you are comfortable with restoring your kobo to factory defaults and testing software"
|
||||
msgid "Kobo routinely updates the firmware and the database version. With this option calibre will attempt to perform full read-write functionality - Here be Dragons!! Enable only if you are comfortable with restoring your kobo to factory defaults and testing software"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:619
|
||||
@ -4083,9 +4095,9 @@ msgstr ""
|
||||
msgid "No HTML file named %s exists"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/polish/toc.py:107
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/polish/toc.py:108
|
||||
#, python-format
|
||||
msgid "The anchor %s does not exist in file %s"
|
||||
msgid "The anchor %(a)s does not exist in file %(f)s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98
|
||||
@ -9497,7 +9509,7 @@ msgid "&Search for:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:89
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:349
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:351
|
||||
msgid "F&ind"
|
||||
msgstr ""
|
||||
|
||||
@ -14660,12 +14672,12 @@ msgid "<b>Grouped search terms</b> are search names that permit a query to autom
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/search.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:419
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:421
|
||||
msgid "Match all"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/search.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:419
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:421
|
||||
msgid "Match any"
|
||||
msgstr ""
|
||||
|
||||
@ -15800,11 +15812,11 @@ msgstr ""
|
||||
msgid "%s will be deleted from all books. Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:333
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:335
|
||||
msgid "Find item in tag browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:337
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:339
|
||||
msgid ""
|
||||
"Search for items. This is a \"contains\" search; items containing the\n"
|
||||
"text anywhere in the name will be found. You can limit the search\n"
|
||||
@ -15814,60 +15826,60 @@ msgid ""
|
||||
"containing the text \"foo\""
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:345
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:347
|
||||
msgid "ALT+f"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:350
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:352
|
||||
msgid "Find the first/next matching item"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:355
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:357
|
||||
msgid "Collapse all categories"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:379
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:381
|
||||
msgid "No More Matches.</b><p> Click Find again to go to first match"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:391
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:393
|
||||
msgid "Alter Tag Browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:399
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281
|
||||
msgid "Sort by"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:403
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:405
|
||||
msgid "Sort by name"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:403
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:405
|
||||
msgid "Sort by popularity"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:404
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:406
|
||||
msgid "Sort by average rating"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:410
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:412
|
||||
msgid "Set the sort order for entries in the Tag Browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:413
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:415
|
||||
msgid "Match type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:425
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:427
|
||||
msgid "When selecting multiple entries in the Tag Browser match any or all of them"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:429
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:431
|
||||
msgid "Manage authors, tags, etc"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:430
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:432
|
||||
msgid "All of these category_managers are available by right-clicking on items in the tag browser above"
|
||||
msgstr ""
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user