From 66d958241060b59ed95088c60c2bfb1bac474a24 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 14:57:26 -0600 Subject: [PATCH 01/10] Rmf24 - Opinie by Tomasz Dlugosz --- resources/recipes/rmf24_opinie.recipe | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 resources/recipes/rmf24_opinie.recipe diff --git a/resources/recipes/rmf24_opinie.recipe b/resources/recipes/rmf24_opinie.recipe new file mode 100644 index 0000000000..4d2f447dbe --- /dev/null +++ b/resources/recipes/rmf24_opinie.recipe @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +__license__ = 'GPL v3' +__copyright__ = u'2010, Tomasz Dlugosz ' +''' +rmf24.pl +''' + +import re +from calibre.web.feeds.news import BasicNewsRecipe + +class RMF24_opinie(BasicNewsRecipe): + title = u'Rmf24.pl - Opinie' + description = u'Blogi, wywiady i komentarze ze strony rmf24.pl' + language = 'pl' + oldest_article = 7 + max_articles_per_feed = 100 + __author__ = u'Tomasz D\u0142ugosz' + no_stylesheets = True + remove_javascript = True + + feeds = [(u'Blogi', u'http://www.rmf24.pl/opinie/blogi/feed'), + (u'Kontrwywiad', u'http://www.rmf24.pl/opinie/wywiady/kontrwywiad/feed'), + (u'Przes\u0142uchanie', u'http://www.rmf24.pl/opinie/wywiady/przesluchanie/feed'), + (u'Komentarze', u'http://www.rmf24.pl/opinie/komentarze/feed')] + + keep_only_tags = [ + dict(name='div', attrs={'class':'box articleSingle print'}), + dict(name='div', attrs={'class':'box articleSingle print singleCommentary'}), + dict(name='div', attrs={'class':'box articleSingle print blogSingleEntry'})] + + remove_tags = [ + dict(name='div', attrs={'class':'toTop'}), + dict(name='div', attrs={'class':'category'}), + dict(name='div', attrs={'class':'REMOVE'}), + dict(name='div', attrs={'class':'embed embedAd'})] + + extra_css = ''' + h1 { font-size: 1.2em; } + ''' + + # thanks to Kovid Goyal + def get_article_url(self, article): + link = article.get('link') + if 'audio' not in link: + return link + + preprocess_regexps = [ + (re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in + [ + (r'

Zdj.cie

', lambda match: ''), + (r'embed embed(Left|Right|Center) articleEmbed(Audio|Wideo articleEmbedVideo|ArticleFull|ArticleTitle|ArticleListTitle|AlbumHorizontal)">', lambda match: 'REMOVE">'), + (r' Date: Wed, 29 Sep 2010 17:25:59 -0600 Subject: [PATCH 03/10] ... --- imgsrc/plugboard.svg | 7401 +------------------------------- resources/images/plugboard.png | Bin 3694 -> 13054 bytes src/calibre/gui2/metadata.py | 3 +- 3 files changed, 224 insertions(+), 7180 deletions(-) diff --git a/imgsrc/plugboard.svg b/imgsrc/plugboard.svg index 9aa0996193..b8451a6b3a 100644 --- a/imgsrc/plugboard.svg +++ b/imgsrc/plugboard.svg @@ -2,8 +2,6 @@ + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="C:\Dokumente und Einstellungen\Appel\Desktop\PlugboardIcon\plugboard2.png" + inkscape:export-xdpi="72.0466" + inkscape:export-ydpi="72.0466" + version="1.1"> + id="linearGradient3176"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="stop3178" /> + id="stop3180" /> + id="linearGradient3168"> + id="stop3170" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="stop3172" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xlink:href="#linearGradient3176" + id="linearGradient3182" + x1="387.41043" + y1="501.67398" + x2="387.41043" + y2="252.02386" + gradientUnits="userSpaceOnUse" /> + x1="387.41043" + y1="501.67398" + x2="387.41043" + y2="252.02386" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + x1="386.89221" + y1="703.53375" + x2="386.89221" + y2="252.50571" /> - + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:window-maximized="0"> + + + + + @@ -7138,120 +135,166 @@ image/svg+xml - + id="layer1" + transform="translate(-323.06477,-417.41394)"> + id="g3015" + transform="matrix(0.20679483,0,0,0.21391708,307.0229,378.43143)"> - - - + transform="translate(3.581054,-461.3231)" + id="g5213"> + + + + + + + + - - - + id="g3012"> + - - - + transform="translate(45.480079,352.26112)" + d="m 211.27988,125.15305 c 0,45.33685 -36.75278,82.08963 -82.08963,82.08963 -45.336854,0 -82.089634,-36.75278 -82.089634,-82.08963 0,-45.336848 36.75278,-82.089627 82.089634,-82.089627 45.33685,0 82.08963,36.752779 82.08963,82.089627 z" + sodipodi:ry="82.08963" + sodipodi:rx="82.08963" + sodipodi:cy="125.15305" + sodipodi:cx="129.19025" + id="path3140" + style="fill:none;stroke:#3a78be;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="arc" /> + transform="translate(45.480079,550.35281)" + sodipodi:type="arc" + style="fill:none;stroke:#3a78be;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + id="path3142" + sodipodi:cx="129.19025" + sodipodi:cy="125.15305" + sodipodi:rx="82.08963" + sodipodi:ry="82.08963" + d="m 211.27988,125.15305 c 0,45.33685 -36.75278,82.08963 -82.08963,82.08963 -45.336854,0 -82.089634,-36.75278 -82.089634,-82.08963 0,-45.336848 36.75278,-82.089627 82.089634,-82.089627 45.33685,0 82.08963,36.752779 82.08963,82.089627 z" /> + transform="translate(470.27179,154.16937)" + d="m 211.27988,125.15305 c 0,45.33685 -36.75278,82.08963 -82.08963,82.08963 -45.336854,0 -82.089634,-36.75278 -82.089634,-82.08963 0,-45.336848 36.75278,-82.089627 82.089634,-82.089627 45.33685,0 82.08963,36.752779 82.08963,82.089627 z" + sodipodi:ry="82.08963" + sodipodi:rx="82.08963" + sodipodi:cy="125.15305" + sodipodi:cx="129.19025" + id="path3151" + style="fill:none;stroke:#3a78be;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="arc" /> + transform="translate(470.27179,352.26112)" + d="m 211.27988,125.15305 c 0,45.33685 -36.75278,82.08963 -82.08963,82.08963 -45.336854,0 -82.089634,-36.75278 -82.089634,-82.08963 0,-45.336848 36.75278,-82.089627 82.089634,-82.089627 45.33685,0 82.08963,36.752779 82.08963,82.089627 z" + sodipodi:ry="82.08963" + sodipodi:rx="82.08963" + sodipodi:cy="125.15305" + sodipodi:cx="129.19025" + id="path3153" + style="fill:none;stroke:#3a78be;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + sodipodi:type="arc" /> + + + diff --git a/resources/images/plugboard.png b/resources/images/plugboard.png index 345fa6440e612468ad76b3e3fa5bf07c89f18250..db9e8e89f051e5513ef3a370db358be2280b0cc2 100644 GIT binary patch literal 13054 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 literal 3694 zcmWkxc{o&S7(YxHMX5U^OURNK85+!ubWKKXH6K=YBJSMFx@qigtG*nd#>_bN0IJxW3*LP>{n$=Ez>wV{dby{LhXjgVN`HU8S zjTYBoBS_@T8FY5UguTDj8bf2bi-63@#=xY`dJYd&o^y7CiMPMzdK4Zt8R}YJTQ#cX zxZA2TZaXAq=1}Q@Uol$Q;~bVLu6brhY&G^Fy<_q zHi|1Ye6lUT?p^57FlEef=Ddxw3{UK26sKg2(ty(`7jvVzv@EF)E+o=tiQqPWzE7BT zmcIwa48*N<%|{=JT|so6C-sSy;48&29B1?_ETj*fHGhV?v~qhUrR4| zVVn}H{EB(fRe=Ri>OxI8Rx4LMp>>suC215D7dPmcnN1BKzOYB-G4HO9B^}*k6C@6X zv-64rtw2tRMTvV}Kfwei)owG*g21*!l&t&D ze-q9CzybdZLzU-(c1=sm40m)V94eGTLqPx$KoCyx$S*F|T3cV&w!+hUVq(}9KA1K1 z#;DOw`R@2vRaR6~FbNH-=o;kI*WdP$T--LgFMOCS{|KHU1I=|#A>4-qp9jRz zFPVW$z)LuVzPNKxBu`o!Q1n^-^`_76LrslO*WpG>5TDItCn9D~e{ZI<_2l@lXlr4B z^fW7o59qRq>5k)7aLwqLQ>Q(hhHL1Fa6pOaBvJq;=HjYPgViB@?G{$-FJJI9LCw3< z0o_ocL^8R_+uM66yZaQ&?$>1g2!^R_vvghG`^b*j4@=Fjhgh-7s~&y1IIb^YR^^RbvJq19)X(VDPhlU?BTqr0TVikNbByV zU!xfeBgW0fwd_@IjK^R3@$_o*(QhqO0NojR=Z+a;@VW!Ffc@wzey=uopufMyGA5Jw zs^=V-!ob)VbuVQ;cdEhnbZvR0IOw5RQg=f`L(8XU`xU}h<4wMOFeABCj*W(~T%ddT z_;hJ$Y4OXGq!JPmWF&ZEmxB}_SK}ji6n#o^#Cu_A_5L57(OPHEo!fdl^!})gMc}9u zoR=~(d1Jz@#ihk-De+F)1LZ28wQ)ue7knu9SyIyVhc%?W|N1v+-CO4)!n(QdszQe# z0MF8wLqqh<)ad@+UfJuHSg&{adEoK*9uP|zVPRqAzSB<&E6U2sFx0AZ#8+{u*Af6g z5WIrRap40j+lj21(A=!1fZcD_F$sdu z=HcOCwm4dsATgMRGQ{D|+QeK$tMgioA2~w6nzgZ5PDGbBQD;3-R4XgvP5>RLk(f6> zKcAc@UQ-SaP)<VJ~aZ;5Dq8?Wp*xUyp-d+U~f8dOD)gX1DP z!B#eH@}m_b^kT)YV*l28k0HP^vYV#QiAk%nAIh^%rQkTuM?};(k5v@b*48os&Anf~ zG&Tn8uJ1i;F~Q;9)zs9`rOX>q2%D}L+eeSaRl}{+Vz1o#@2&wZc9%}4TgG${UwuB< zS?N({+jVZGZR+rKv%)Fbx;VM-Yd!-v!0BDx*hrOkn{K?$%~n%P_E&**(sx$AcZW+d zq*5@^dG?05ks|W4#iVPk3C9@|EiKB7OqW&6CLxX%9@y%-l%@GEST+ok#ww&8ZY4HA zQYdquZhY!_aB$Gh$;l}Y(J@DXVaz^0D&@}(q~o8}ahsQ=W+ALX*X)+C{=a*!Uw-fg zA#@+sIZZ8m7{mm)q!%!O<-li*Am(M4@4wZ(MXAuYPw!6yzjF-JIWE`^7){6Y30$Jc z{*9>H(iD#X9B$;}FK|*T9+h&%Y#Lyx9-5k(T-s@}1VNk~d2PsmJd-u$`g_g>QIgE0)# zW5aFdp`p>U`t|GAPi>ZnI-Bk|NCmu>vGqy{VPa)@`I7L+5lBbQ(A*+!TDMV&@utD^ z=O;fyLP8ef_!T8sSXiWs$o^b5lb<{n`mJn^OnrwxLxq0s9`5@oWfeM%=ND%AJN8o_ z-o2v$JGIKP#FH$vcqQ>RW zNgU>gf$oR4<(y9W&hX23x!1d}3K0hvhu;2;PZ1z+|5u)um*+5`wDllCJnEPv?{e_W z-hNRrD(@Kt0y&AkEG-ru{p7Fda2X%Rboru^66d+?CF&MBcW{v8){MWQ@wFD1O(J}% zB$FLSxp$obfCEeQAr7LFdbSIbC5`&^adPFLs*!cXx9?zdm33hgN6$}RvY!LEFuDa5 za8jk$(pM%h^bZdYS!!J-YK#)|<2gkX_)z+)36h-%5`BpS!U)7SA z_oJJI0s@LTtnE^)S|(e^&ztxP+c?U+1P4ZD`xln~ zAW;xYjUkiumX?;#D84wxe?&w@nFzMFa033Dn(lB;o8_K=M>snc;AoI@-SIz0g2Nmg z9sL-D5+|66S7A=kKAqlaUEV)FKAzpd3(U3vvtW~tRV2RV{>WP@ zLaHub_dBJdUmfT4_4IxlelXo%{v7$&LNWO^1MmQZ0Eq40id8S*4H85^8mPC~R4P^2 zb*g@+(j7I)2o$1obpk-M;jVBB1)PE42LJ-n8U$&j371cO3l@)J#poUw;BaAWv*5A9 zOG-+Vibv8L{CAcYK$fH8Q|39)4@547*dra|I<2Wtp}#vjJDEg9MLj_g3aE9PIoWS* z{f9;9r&Ff(f}685pU+*!U?0F300RFQQ8nPbK;(vYfsP(-gadeq#bWQIrKQpFm3H$t zEt)5Ds7u`01G`g37J=SkSL17ItE*X~@*b!{v7kO@;`H=>)Pq|7F)z>B0?u_9m-oI5 z#M80xU;M@L6+5P1yk zezFaMK`v99rLV7VaB8Y=2=b{dSzw}Vy@#=OZpm#;|#M( z7~Po}H^1PCRrJ+(7Em}rE;~tD*w-j)K3LXkm~th9?l0GYCp#(WE#=FXGepqN3ZkK! zVoCYs<>l`h8;?-Ho*Y(D0f`(Q8ynlFPBAkCLx3)ZR#5;tBdWj*C;%C}GN7unT!~c! zff>&l`fDN8+~48iz*YfB*+G0te!nyYIn-}wYCEZ@sMr}A8uktj>NJ*?mhSFt()hv1 zOfT>rLI&#U!dhlFPWStS0d=NeQ=rcO0<$sjh8ZXowwoP$oGqsZOQvi+>*`IGEX*$` zXnsy#9lLd1I|Ide_QfO6yCo&4f7YgY@nCe3=$AUMWFS~2+$#M>)In;2Lx_bq@7d>X z5VA*ub-u!EcVk9>ol=6ouVBo~%+vtx$4H(Rm(Bg=E~;?2-@Di0w9ubf>6reXF!9+f z6iOWQ6OtVW(`yL`VInddbO&!`;FOBVkr7U?2cKsufSmRVr=!X1AxvX zwA0!OhYJ)J6~&y6JC(irt#pB%o!v+~OX(>@$SaIiH{ILYJG#brGTjapvUhaM Date: Wed, 29 Sep 2010 18:08:05 -0600 Subject: [PATCH 04/10] Initialize dirtied_cache correctly --- src/calibre/library/database2.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index ca8824ae1c..9d9ebf64c5 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -348,10 +348,10 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): setattr(self, 'title_sort', functools.partial(self.get_property, loc=self.FIELD_MAP['sort'])) - self.dirtied_cache = set() d = self.conn.get('SELECT book FROM metadata_dirtied', all=True) for x in d: self.dirtied_queue.put(x[0]) + self.dirtied_cache = set([x[0] for x in d]) self.refresh_ondevice = functools.partial(self.data.refresh_ondevice, self) self.refresh() @@ -616,9 +616,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): self.conn.commit() def dirtied(self, book_ids, commit=True): - for book in book_ids: - if book in self.dirtied_cache: - continue + for book in frozenset(book_ids) - self.dirtied_cache: try: self.conn.execute( 'INSERT INTO metadata_dirtied (book) VALUES (?)', From 6608dc2cd4b89b19cd922eae7c293d8a6dae7afd Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 18:16:18 -0600 Subject: [PATCH 05/10] Metadata backup: Try to ensure that a dirtied book is not ignored during shutdown --- src/calibre/gui2/ui.py | 3 +++ src/calibre/library/caches.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index cc2975e7a7..4667431d96 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -579,6 +579,9 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ except KeyboardInterrupt: pass time.sleep(2) + if mb is not None: + mb.flush() + QApplication.processEvents() self.hide_windows() return True diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index 0c3904532e..e18f514239 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -40,12 +40,14 @@ class MetadataBackup(Thread): # {{{ self.get_metadata_for_dump = FunctionDispatcher(db.get_metadata_for_dump) self.clear_dirtied = FunctionDispatcher(db.clear_dirtied) self.set_dirtied = FunctionDispatcher(db.dirtied) + self.in_limbo = None def stop(self): self.keep_running = False def run(self): while self.keep_running: + self.in_limbo = None try: time.sleep(0.5) # Limit to two per second id_ = self.db.dirtied_queue.get(True, 1.45) @@ -72,6 +74,7 @@ class MetadataBackup(Thread): # {{{ if mi is None: continue + self.in_limbo = id_ # Give the GUI thread a chance to do something. Python threads don't # have priorities, so this thread would naturally keep the processor @@ -99,6 +102,14 @@ class MetadataBackup(Thread): # {{{ 'again, giving up') continue + def flush(self): + 'Used during shutdown to ensure that a dirtied book is not missed' + if self.in_limbo is not None: + try: + self.set_dirtied([self.in_limbo]) + except: + traceback.print_exc() + def write(self, path, raw): with open(path, 'wb') as f: f.write(raw) From 93d92ee2505d8c8386ddd701484628398995c576 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 18:32:26 -0600 Subject: [PATCH 06/10] LibraryThing plugin: Handle non ascii chars correctly --- src/calibre/ebooks/metadata/library_thing.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/calibre/ebooks/metadata/library_thing.py b/src/calibre/ebooks/metadata/library_thing.py index 669d9478a3..7f312da1d9 100644 --- a/src/calibre/ebooks/metadata/library_thing.py +++ b/src/calibre/ebooks/metadata/library_thing.py @@ -12,6 +12,7 @@ import mechanize from calibre import browser, prints from calibre.utils.config import OptionParser from calibre.ebooks.BeautifulSoup import BeautifulSoup +from calibre.ebooks.chardet import strip_encoding_declarations OPENLIBRARY = 'http://covers.openlibrary.org/b/isbn/%s-L.jpg?default=false' @@ -110,6 +111,8 @@ def get_social_metadata(title, authors, publisher, isbn, username=None, +isbn).read() if not raw: return mi + raw = raw.decode('utf-8', 'replace') + raw = strip_encoding_declarations(raw) root = html.fromstring(raw) h1 = root.xpath('//div[@class="headsummary"]/h1') if h1 and not mi.title: From 05cf311555df62c4a2191617e0bc6e0e42e5373d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 18:48:17 -0600 Subject: [PATCH 07/10] Cleanup ISBNdb metadata plugin --- src/calibre/ebooks/metadata/isbndb.py | 38 ++++++++++++++++++--------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/calibre/ebooks/metadata/isbndb.py b/src/calibre/ebooks/metadata/isbndb.py index 6c321bf9d3..6416dcdc39 100644 --- a/src/calibre/ebooks/metadata/isbndb.py +++ b/src/calibre/ebooks/metadata/isbndb.py @@ -47,29 +47,43 @@ class ISBNDBMetadata(Metadata): def __init__(self, book): Metadata.__init__(self, None, []) + def tostring(e): + if not hasattr(e, 'string'): + return None + ans = e.string + if ans is not None: + ans = unicode(ans).strip() + if not ans: + ans = None + return ans + self.isbn = unicode(book.get('isbn13', book.get('isbn'))) - self.title = unicode(book.find('titlelong').string) + self.title = tostring(book.find('titlelong')) if not self.title: - self.title = unicode(book.find('title').string) + self.title = tostring(book.find('title')) + if not self.title: + self.title = _('Unknown') self.title = unicode(self.title).strip() - au = unicode(book.find('authorstext').string).strip() - temp = au.split(',') self.authors = [] - for au in temp: - if not au: continue - self.authors.extend([a.strip() for a in au.split('&')]) + au = tostring(book.find('authorstext')) + if au: + au = au.strip() + temp = au.split(',') + for au in temp: + if not au: continue + self.authors.extend([a.strip() for a in au.split('&')]) try: - self.author_sort = book.find('authors').find('person').string + self.author_sort = tostring(book.find('authors').find('person')) if self.authors and self.author_sort == self.authors[0]: self.author_sort = None except: pass - self.publisher = unicode(book.find('publishertext').string) + self.publisher = tostring(book.find('publishertext')) - summ = book.find('summary') - if summ and hasattr(summ, 'string') and summ.string: - self.comments = 'SUMMARY:\n'+unicode(summ.string) + summ = tostring(book.find('summary')) + if summ: + self.comments = 'SUMMARY:\n'+summ.string def build_isbn(base_url, opts): From 1874dfbd968d5d0e3ddd1f86497dbc5223715c99 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 20:16:20 -0600 Subject: [PATCH 08/10] Seventh beta --- src/calibre/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 7cb4d78cf8..7c16b9020c 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -2,7 +2,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = 'calibre' -__version__ = '0.7.905' +__version__ = '0.7.906' __author__ = "Kovid Goyal " import re From 56fce8862f220dac65e06620fb5b2f618cd65256 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 20:54:24 -0600 Subject: [PATCH 09/10] ... --- src/calibre/library/caches.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index e18f514239..179262dedc 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -101,12 +101,13 @@ class MetadataBackup(Thread): # {{{ prints('Failed to write backup metadata for id:', id_, 'again, giving up') continue + self.in_limbo = None def flush(self): 'Used during shutdown to ensure that a dirtied book is not missed' if self.in_limbo is not None: try: - self.set_dirtied([self.in_limbo]) + self.db.dirtied([self.in_limbo]) except: traceback.print_exc() From 01d7397cca012326789ffcc8b02a095ef3bc579a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 29 Sep 2010 20:59:00 -0600 Subject: [PATCH 10/10] ... --- src/calibre/gui2/ui.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 4667431d96..937b23b113 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -581,7 +581,6 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{ time.sleep(2) if mb is not None: mb.flush() - QApplication.processEvents() self.hide_windows() return True