From 08038fb3418780d601e270078ae3032005ebc1b2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 12 Dec 2008 12:56:56 -0800 Subject: [PATCH 01/22] IGN:... --- src/calibre/trac/plugins/download.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/trac/plugins/download.py b/src/calibre/trac/plugins/download.py index 0483690b64..43ca425114 100644 --- a/src/calibre/trac/plugins/download.py +++ b/src/calibre/trac/plugins/download.py @@ -240,7 +240,7 @@ If not, head over to " ''' Various run time constants. From 0e6674820ffc9675ea911dccd5be30f8741b60c7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 12 Dec 2008 13:59:55 -0800 Subject: [PATCH 06/22] IGN:Tag release From 18a59e5f3af3d40640e990af2d7a84209ada7a15 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 14 Dec 2008 07:58:42 -0800 Subject: [PATCH 07/22] Updated recipe for The New Yorker (thanks to Darko Miletic) --- .pydevproject | 4 - src/calibre/gui2/images/news/new_yorker.png | Bin 0 -> 670 bytes src/calibre/gui2/images/news/newyorker.png | Bin 4294 -> 0 bytes src/calibre/gui2/main.py | 2 +- src/calibre/gui2/status.py | 5 +- src/calibre/web/feeds/recipes/new_yorker.py | 112 ++++++-------------- 6 files changed, 39 insertions(+), 84 deletions(-) create mode 100644 src/calibre/gui2/images/news/new_yorker.png delete mode 100644 src/calibre/gui2/images/news/newyorker.png diff --git a/.pydevproject b/.pydevproject index 416319d077..fba36e6fb7 100644 --- a/.pydevproject +++ b/.pydevproject @@ -5,9 +5,5 @@ python 2.5 /calibre/src -/calibre/devices -/calibre/libprs500.devices.prs500 -/calibre/prs500 -/calibre/gui2 diff --git a/src/calibre/gui2/images/news/new_yorker.png b/src/calibre/gui2/images/news/new_yorker.png new file mode 100644 index 0000000000000000000000000000000000000000..562b3b15557b5e95f5af373e3bc67e33f29bb035 GIT binary patch literal 670 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3S@gZ0%tN2FBx_E{-77Ew zI}Fau`Ca&4=7M_UG}lc!lXXs)Sj~N*&Lns-YpYW1bxwznyLsQ!8IBir6w77TO?hl_ zpE)J6?lw<@#q;~?n68(08h%q>m*F--2 zo*d#iDM7-`#Ok@s;fDgVmMPBlV`eb%JzTZdO`>h0K2u8~$NA5T*bf^7Xia5cc>GbK zYte!LjRW6n&piKpVtR#4&h29*R;&y!cJR6dwT!fJmvZ47ssu47IF2M)bjZ!&+Tm&GfXC&OnIbj z^SZ)DiG%4&m92`<|J*sBS6EIvw0YCbH>c++aO{X%zfr=T!I5M2{=$#PW&-0^wZt`| zB)KRxu_RSD1xPR$85mgT8XD;u8iyDfSeY7F8Jg%CSXdbtIM2_R4AYRCpOTqYiK)TF b%E;6Ts2QxGAawp2paup{S3j3^P6V^m~ literal 0 HcmV?d00001 diff --git a/src/calibre/gui2/images/news/newyorker.png b/src/calibre/gui2/images/news/newyorker.png deleted file mode 100644 index a5bb5ee183eca8e672b44fe71508f1913251cd5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4294 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 oVPkY}asU8$+B2*$)G>r$01 Date: Sun, 14 Dec 2008 08:37:22 -0800 Subject: [PATCH 08/22] IGN:... --- src/calibre/ebooks/epub/iterator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/epub/iterator.py b/src/calibre/ebooks/epub/iterator.py index d47630a970..08c275e81f 100644 --- a/src/calibre/ebooks/epub/iterator.py +++ b/src/calibre/ebooks/epub/iterator.py @@ -170,7 +170,10 @@ class EbookIterator(object): dat = self.serialize_bookmarks(bookmarks) if os.path.splitext(self.pathtoebook)[1].lower() == '.epub' and \ os.access(self.pathtoebook, os.R_OK): - zf = open(self.pathtoebook, 'r+b') + try: + zf = open(self.pathtoebook, 'r+b') + except IOError: + return zipf = ZipFile(zf, mode='a') for name in zipf.namelist(): if name == 'META-INF/calibre_bookmarks.txt': From 80dcfebe4b806ab80324f62ffca09514c81a78d9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 15 Dec 2008 09:44:42 -0800 Subject: [PATCH 09/22] Fix #1388 (Creation of the default cover in a recipe crashes) --- src/calibre/web/feeds/news.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/calibre/web/feeds/news.py b/src/calibre/web/feeds/news.py index 7b86263bc7..0207ee016c 100644 --- a/src/calibre/web/feeds/news.py +++ b/src/calibre/web/feeds/news.py @@ -17,7 +17,8 @@ from PyQt4.Qt import QApplication, QFile, Qt, QPalette, QSize, QImage, QPainter, from PyQt4.QtWebKit import QWebPage -from calibre import browser, __appname__, iswindows, LoggingInterface, strftime, __version__ +from calibre import browser, __appname__, iswindows, LoggingInterface, \ + strftime, __version__, preferred_encoding from calibre.ebooks.BeautifulSoup import BeautifulSoup, NavigableString, CData, Tag from calibre.ebooks.metadata.opf import OPFCreator from calibre.ebooks.lrf import entity_to_unicode @@ -817,8 +818,9 @@ class BasicNewsRecipe(object, LoggingInterface): - '''%dict(title=self.title, author=self.__author__, - date=time.strftime(self.timefmt), + '''%dict(title=self.title if isinstance(self.title, unicode) else self.title.decode(preferred_encoding, 'replace'), + author=self.__author__ if isinstance(self.__author__, unicode) else self.__author__.decode(preferred_encoding, 'replace'), + date=strftime(self.timefmt), app=__appname__ +' '+__version__, img=img) f2 = tempfile.NamedTemporaryFile(suffix='cover.html') From 8e8e7ec55884cca2b16e9dc46f460ef16da1ebd0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 15 Dec 2008 10:12:13 -0800 Subject: [PATCH 10/22] New recipe for Liberation (thanks to Darko Miletic) --- src/calibre/gui2/images/news/liberation.png | Bin 0 -> 899 bytes src/calibre/web/feeds/recipes/__init__.py | 2 +- src/calibre/web/feeds/recipes/liberation.py | 38 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/calibre/gui2/images/news/liberation.png create mode 100644 src/calibre/web/feeds/recipes/liberation.py diff --git a/src/calibre/gui2/images/news/liberation.png b/src/calibre/gui2/images/news/liberation.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c6d7b8849057abd7ae970c758b807e6f906f3f GIT binary patch literal 899 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7lwZz_*&vh6HtV+z$3C4 zNPB>>+sSM@kYHJXV>*yl0OR&wbLKKIFs<=)aSVw#{C3)H?+{0s|pCRaa z@$4sEO|M-xE=$v%ExlL$!k_b3`YX+@Bkdo;F1Z?YaZL$|59tZGc%U_XA;zp*Qd+hAzg%KG|7qpJ9%kHLjn`%$TEi?LD8PPg zp_aC%%v#lq*9xU8C#KZeuG*7ynA?@b+}{7oBgw>k{=|IqvMiy_PYZ0PTx(@aT6}-+ zSDQbxlv#RxS#;N`_|JEJe=GFEhh>_^Y`-&S)zs@J`kVh;&V1wM&5FmKc2YH-BIM_{iEkZdqq zandM$gV$VA*Y@c9L%oiHC@oCvDgFn|E+10DbRQRl0J^97Y;5TQ^MCq<6 zIq0t&9_sq&i038Q>z?H?hph_)rh15^-bgi?!LOY1?w;cRCGy5*T`qxh%9md2+HgVU zN8yW#-~1D@cKQ4|6*}p;{(|y%cXsfuJ?iH#{H;{DtW=11?~!w7*H%V9xU-)9;`b9P zHW>*Wf5kB?nj`AA=as7qFQ;zY-reo8K7L~LkA^=7gwOntNIGMc&+VD}HGGed=oYu| zaAA`;wTwK+qMH`mo11s6_l}-bcbiE=LiBz-^Jg28BMhz?r~5BzZ46o+w{B0}Dg9rw z-ZHOg{^|SozWpL02hIonFQm`KZrI_MWWErXfK^LeBTABsQWHy3byI)@gOP!Og|4BI zuAym&p@EfwrIo3Hu7QP>fx%nPHDWLgx%nxXX_c57jIE3etc*+`8bS|pz6EMv@O1Ta JS?83{1OT_OibDVZ literal 0 HcmV?d00001 diff --git a/src/calibre/web/feeds/recipes/__init__.py b/src/calibre/web/feeds/recipes/__init__.py index 6c3c25370f..6d4f399d10 100644 --- a/src/calibre/web/feeds/recipes/__init__.py +++ b/src/calibre/web/feeds/recipes/__init__.py @@ -17,7 +17,7 @@ recipe_modules = [ 'blic', 'novosti', 'danas', 'vreme', 'times_online', 'the_scotsman', 'nytimes_sub', 'security_watch', 'cyberpresse', 'st_petersburg_times', 'clarin', 'financial_times', 'heise', 'le_monde', 'harpers', 'science_aas', - 'science_news', 'the_nation', 'lrb', 'harpers_full' + 'science_news', 'the_nation', 'lrb', 'harpers_full', 'liberation', ] import re, imp, inspect, time, os diff --git a/src/calibre/web/feeds/recipes/liberation.py b/src/calibre/web/feeds/recipes/liberation.py new file mode 100644 index 0000000000..9f85433d11 --- /dev/null +++ b/src/calibre/web/feeds/recipes/liberation.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +__license__ = 'GPL v3' +__copyright__ = '2008, Darko Miletic ' +''' +liberation.fr +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Liberation(BasicNewsRecipe): + title = u'Liberation' + __author__ = 'Darko Miletic' + description = 'News from France' + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + + html2lrf_options = ['--base-font-size', '10'] + + keep_only_tags = [ + dict(name='h1') + ,dict(name='div', attrs={'class':'articleContent'}) + ,dict(name='div', attrs={'class':'entry'}) + ] + remove_tags = [ + dict(name='p', attrs={'class':'clear'}) + ,dict(name='ul', attrs={'class':'floatLeft clear'}) + ,dict(name='div', attrs={'class':'clear floatRight'}) + ,dict(name='object') + ] + + feeds = [ + (u'La une', u'http://www.liberation.fr/rss/laune') + ,(u'Monde' , u'http://www.liberation.fr/rss/monde') + ,(u'Sports', u'http://www.liberation.fr/rss/sports') + ] From cb9bd2621a51320aaeaa4b558e9f5bc5333357e0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 15 Dec 2008 10:59:49 -0800 Subject: [PATCH 11/22] Fix #1402 (automatic downloading error) --- src/calibre/gui2/main.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 1fdb76c2ee..200ebcc225 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -621,13 +621,13 @@ class Main(MainWindow, Ui_MainWindow): files, names, on_card=on_card, titles=titles ) - self.upload_memory[job] = (metadata, on_card, memory) + self.upload_memory[job] = (metadata, on_card, memory, files) def books_uploaded(self, job): ''' Called once books have been uploaded. ''' - metadata, on_card, memory = self.upload_memory.pop(job) + metadata, on_card, memory, files = self.upload_memory.pop(job) if job.exception is not None: if isinstance(job.exception, FreeSpaceError): @@ -648,6 +648,8 @@ class Main(MainWindow, Ui_MainWindow): view = self.card_view if on_card else self.memory_view view.model().resort(reset=False) view.model().research() + for f in files: + getattr(f, 'close', lambda : True)() if memory and memory[1]: self.library_view.model().delete_books_by_id(memory[1]) From e2232e64c376f5c131f5436a96d277aeb05d13fc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 15 Dec 2008 13:34:17 -0800 Subject: [PATCH 12/22] Add 'Show similar books' item to eight click menu' --- src/calibre/gui2/images/books_in_series.svg | 581 ++++++++++++++++++++ src/calibre/gui2/library.py | 4 +- src/calibre/gui2/main.py | 53 +- src/calibre/gui2/main.ui | 36 ++ 4 files changed, 672 insertions(+), 2 deletions(-) create mode 100644 src/calibre/gui2/images/books_in_series.svg diff --git a/src/calibre/gui2/images/books_in_series.svg b/src/calibre/gui2/images/books_in_series.svg new file mode 100644 index 0000000000..a9f39ca982 --- /dev/null +++ b/src/calibre/gui2/images/books_in_series.svg @@ -0,0 +1,581 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index f2571c5de7..75d2aade59 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -575,7 +575,7 @@ class BooksView(TableView): self.setItemDelegateForColumn(col, self.rating_delegate) def set_context_menu(self, edit_metadata, send_to_device, convert, view, - save, open_folder, book_details): + save, open_folder, book_details, similar_menu=None): self.setContextMenuPolicy(Qt.DefaultContextMenu) self.context_menu = QMenu(self) if edit_metadata is not None: @@ -590,6 +590,8 @@ class BooksView(TableView): self.context_menu.addAction(open_folder) if book_details is not None: self.context_menu.addAction(book_details) + if similar_menu is not None: + self.context_menu.addMenu(similar_menu) def contextMenuEvent(self, event): self.context_menu.popup(event.globalPos()) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 200ebcc225..f0a0ad1d40 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -234,10 +234,33 @@ class Main(MainWindow, Ui_MainWindow): QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), self.do_advanced_search) ####################### Library view ######################## + similar_menu = QMenu(_('Similar books...')) + similar_menu.addAction(self.action_books_by_same_author) + similar_menu.addAction(self.action_books_in_this_series) + similar_menu.addAction(self.action_books_with_the_same_tags) + similar_menu.addAction(self.action_books_by_this_publisher) + self.action_books_by_same_author.setShortcut(Qt.ALT + Qt.Key_A) + self.action_books_in_this_series.setShortcut(Qt.ALT + Qt.Key_S) + self.action_books_by_this_publisher.setShortcut(Qt.ALT + Qt.Key_P) + self.action_books_with_the_same_tags.setShortcut(Qt.ALT+Qt.Key_T) + self.addAction(self.action_books_by_same_author) + self.addAction(self.action_books_by_this_publisher) + self.addAction(self.action_books_in_this_series) + self.addAction(self.action_books_with_the_same_tags) + self.similar_menu = similar_menu + self.connect(self.action_books_by_same_author, SIGNAL('triggered()'), + lambda : self.show_similar_books('author')) + self.connect(self.action_books_in_this_series, SIGNAL('triggered()'), + lambda : self.show_similar_books('series')) + self.connect(self.action_books_with_the_same_tags, SIGNAL('triggered()'), + lambda : self.show_similar_books('tag')) + self.connect(self.action_books_by_this_publisher, SIGNAL('triggered()'), + lambda : self.show_similar_books('publisher')) self.library_view.set_context_menu(self.action_edit, self.action_sync, self.action_convert, self.action_view, self.action_save, self.action_open_containing_folder, - self.action_show_book_details) + self.action_show_book_details, + similar_menu=similar_menu) self.memory_view.set_context_menu(None, None, None, self.action_view, self.action_save, None, None) self.card_view.set_context_menu(None, None, None, self.action_view, self.action_save, None, None) QObject.connect(self.library_view, SIGNAL('files_dropped(PyQt_PyObject)'), @@ -341,6 +364,34 @@ class Main(MainWindow, Ui_MainWindow): error_dialog(self, _('Failed to start content server'), unicode(self.content_server.exception)).exec_() + def show_similar_books(self, type): + search, join = [], ' ' + idx = self.library_view.currentIndex() + if not idx.isValid(): + return + row = idx.row() + if type == 'series': + series = idx.model().db.series(row) + if series: + search = ['series:'+series] + elif type == 'publisher': + publisher = idx.model().db.publisher(row) + if publisher: + search = ['publisher:'+publisher] + elif type == 'tag': + tags = idx.model().db.tags(row) + if tags: + search = ['tag:'+t for t in tags.split(',')] + elif type == 'author': + authors = idx.model().db.authors(row) + if authors: + search = ['author:'+a.strip().replace('|', ',') for a in authors.split(',')] + join = ' or ' + if search: + self.search.set_search_string(join.join(search)) + + + def toggle_cover_flow(self, show): if show: self.library_view.setCurrentIndex(self.library_view.currentIndex()) diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index 18d6f5228d..1833789f61 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -581,6 +581,42 @@ Show book details + + + + :/images/user_profile.svg:/images/user_profile.svg + + + Books by same author + + + + + + :/images/books_in_series.svg:/images/books_in_series.svg + + + Books in this series + + + + + + :/images/publisher.png:/images/publisher.png + + + Books by this publisher + + + + + + :/images/tags.svg:/images/tags.svg + + + Books with the same tags + + From 61e6def583e1934a1e6451ec44ee34f8eb20593b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 15 Dec 2008 13:38:34 -0800 Subject: [PATCH 13/22] IGN:Updated translations --- src/calibre/translations/bg.po | 447 +++++++++++----------- src/calibre/translations/ca.po | 452 ++++++++++++----------- src/calibre/translations/cs.po | 447 +++++++++++----------- src/calibre/translations/de.po | 464 +++++++++++------------ src/calibre/translations/el.po | 447 +++++++++++----------- src/calibre/translations/es.po | 452 ++++++++++++----------- src/calibre/translations/fr.po | 452 ++++++++++++----------- src/calibre/translations/gl.po | 447 +++++++++++----------- src/calibre/translations/it.po | 515 +++++++++++++------------- src/calibre/translations/nb.po | 447 +++++++++++----------- src/calibre/translations/nds.po | 457 ++++++++++++----------- src/calibre/translations/nl.po | 452 ++++++++++++----------- src/calibre/translations/pl.po | 632 +++++++++++++++++--------------- src/calibre/translations/pt.po | 447 +++++++++++----------- src/calibre/translations/ru.po | 451 ++++++++++++----------- src/calibre/translations/sk.po | 587 +++++++++++++++-------------- src/calibre/translations/sl.po | 452 ++++++++++++----------- src/calibre/translations/sv.po | 447 +++++++++++----------- src/calibre/translations/te.po | 447 +++++++++++----------- 19 files changed, 4597 insertions(+), 4345 deletions(-) diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po index 64d6624ffc..cb3c5d3171 100644 --- a/src/calibre/translations/bg.po +++ b/src/calibre/translations/bg.po @@ -6,25 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-09 02:03+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-05-24 06:23+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-10 21:48+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "" @@ -219,13 +219,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -234,12 +234,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -248,10 +248,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "" @@ -263,11 +263,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -278,7 +278,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -292,7 +292,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -934,11 +934,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1138,16 +1138,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1166,25 +1166,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1288,7 +1288,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1428,9 +1428,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1438,8 +1438,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1555,7 +1555,7 @@ msgid "Access log:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" @@ -1952,7 +1952,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -2023,14 +2023,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2051,14 +2051,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2071,7 +2071,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2080,7 +2080,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2089,8 +2089,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2507,87 +2507,91 @@ msgid "" "indent:0px;\">

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

Enter your username and password for LibraryThing.com.
If you " "do not have one, you can
register " "for free!.

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2693,9 +2697,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" @@ -3088,11 +3092,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:55 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:70 msgid "No match" msgstr "" @@ -3178,12 +3182,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3191,25 +3195,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3368,7 +3372,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3402,7 +3406,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3410,23 +3414,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

The database of books on the reader is corrupted. Try the " @@ -3442,288 +3446,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

Books with the same title as the following already exist in the database. " "Add them anyway?