mirror of
https://github.com/kovidgoyal/calibre.git
synced 2026-05-30 18:45:20 -04:00
Sync to trunk.
This commit is contained in:
@@ -19,6 +19,60 @@
|
||||
# new recipes:
|
||||
# - title:
|
||||
|
||||
- version: 0.8.27
|
||||
date: 2011-11-18
|
||||
|
||||
new features:
|
||||
- title: "Drivers for the Kindle Fire and the Nook Tablet"
|
||||
tickets: [890918]
|
||||
|
||||
- title: "Conversion: Add an option under Look & Feel to remove specified style information (CSS) from the document during conversion."
|
||||
tickets: [871384]
|
||||
|
||||
- title: "Add an option in the bulk metadata edit dialog to restore the pre-conversion files for many books with a single click."
|
||||
tickets: [886116]
|
||||
|
||||
- title: "Jobs list: Add the ability to search for and to hide jobs, useful if you have run a lot of jobs and the list is getting crowded."
|
||||
tickets: [883734]
|
||||
|
||||
- title: "Book jacket generation: Add ability to customize the book jacket template and add custom columns into the jacket."
|
||||
tickets: [889912]
|
||||
|
||||
- title: "MOBI Input: Performance improvement when viewing/converting a file with a lot of links"
|
||||
|
||||
bug fixes:
|
||||
- title: "Fix regression in 0.8.26 that broke disabling the update of particular fields during a bulk metadata download."
|
||||
tickets: [889696]
|
||||
|
||||
- title: "Get Books: Fix DRM status for legimi"
|
||||
|
||||
- title: "When parsing for lxml via BeatifulSoup, use the calibre modified copy of BeautifulSoup (more robust)."
|
||||
tickets: [889890]
|
||||
|
||||
- title: "HTML Input: Handle double encoded URLs in img tags"
|
||||
tickets: [889323]
|
||||
|
||||
improved recipes:
|
||||
- Various Polish recipes
|
||||
- Academia Catavencu
|
||||
- El Periodico de Aragon
|
||||
- Weblogs SL
|
||||
- Folha de Sao Paolo (subscription)
|
||||
|
||||
new recipes:
|
||||
- title: News on Japan
|
||||
author: Krittika Goyal
|
||||
|
||||
- title: Formula AS
|
||||
author: Silviu Cotoara
|
||||
|
||||
- title: Various Turkish news sources
|
||||
author: Osman Kaysan
|
||||
|
||||
- title: Infra.pl and Spider's Web
|
||||
author: fenuks
|
||||
|
||||
|
||||
- version: 0.8.26
|
||||
date: 2011-11-12
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ class GN(BasicNewsRecipe):
|
||||
EDITION = 0
|
||||
|
||||
__author__ = 'Piotr Kontek'
|
||||
title = u'Gość niedzielny'
|
||||
description = 'Weekly magazine'
|
||||
encoding = 'utf-8'
|
||||
no_stylesheets = True
|
||||
@@ -20,6 +19,8 @@ class GN(BasicNewsRecipe):
|
||||
remove_javascript = True
|
||||
temp_files = []
|
||||
simultaneous_downloads = 1
|
||||
masthead_url = 'http://gosc.pl/files/11/03/12/949089_top.gif'
|
||||
title = u'Gość niedzielny'
|
||||
|
||||
articles_are_obfuscated = True
|
||||
|
||||
@@ -64,7 +65,6 @@ class GN(BasicNewsRecipe):
|
||||
if img != None:
|
||||
a = img.parent
|
||||
self.EDITION = a['href']
|
||||
self.title = img['alt']
|
||||
self.cover_url = 'http://www.gosc.pl' + img['src']
|
||||
if not first:
|
||||
break
|
||||
|
||||
+22
-19
@@ -1,11 +1,11 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
import re
|
||||
|
||||
class AdvancedUserRecipe(BasicNewsRecipe):
|
||||
|
||||
title = 'heise online'
|
||||
title = 'Heise-online'
|
||||
description = 'News vom Heise-Verlag'
|
||||
__author__ = 'schuster'
|
||||
masthead_url = 'http://www.heise.de/icons/ho/heise_online_logo.gif'
|
||||
publisher = 'Heise Zeitschriften Verlag GmbH & Co. KG'
|
||||
use_embedded_content = False
|
||||
language = 'de'
|
||||
oldest_article = 2
|
||||
@@ -14,11 +14,10 @@ class AdvancedUserRecipe(BasicNewsRecipe):
|
||||
remove_empty_feeds = True
|
||||
timeout = 5
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
|
||||
|
||||
remove_tags_after = dict(name ='p', attrs={'class':'editor'})
|
||||
remove_tags = [{'class':'navi_top_container'},
|
||||
remove_tags = [dict(id='navi_top_container'),
|
||||
dict(id='navi_bottom'),
|
||||
dict(id='mitte_rechts'),
|
||||
dict(id='navigation'),
|
||||
@@ -29,27 +28,31 @@ class AdvancedUserRecipe(BasicNewsRecipe):
|
||||
dict(id='seiten_navi'),
|
||||
dict(id='adbottom'),
|
||||
dict(id='sitemap'),
|
||||
dict(name='a', href=re.compile(r'^/([a-zA-Z]+/)?')),
|
||||
]
|
||||
dict(name='div', attrs={'id':'sitemap'}),
|
||||
dict(name='ul', attrs={'class':'erste_zeile'}),
|
||||
dict(name='ul', attrs={'class':'zweite_zeile'}),
|
||||
dict(name='div', attrs={'class':'navi_top_container'})]
|
||||
|
||||
feeds = [
|
||||
('Newsticker', 'http://www.heise.de/newsticker/heise.rdf'),
|
||||
('iX', 'http://www.heise.de/ix/news/news.rdf'),
|
||||
('Technology Review', 'http://www.heise.de/tr/news-atom.xml'),
|
||||
('mobil', 'http://www.heise.de/mobil/newsticker/heise-atom.xml'),
|
||||
('Security', 'http://www.heise.de/security/news/news-atom.xml'),
|
||||
('Netze', 'http://www.heise.de/netze/rss/netze-atom.xml'),
|
||||
('Open Source', 'http://www.heise.de/open/news/news-atom.xml'),
|
||||
('Resale ', 'http://www.heise.de/resale/rss/resale.rdf'),
|
||||
('Auto', 'http://www.heise.de/autos/rss/news.rdf'),
|
||||
('Foto ', 'http://www.heise.de/foto/rss/news-atom.xml'),
|
||||
('Autos', 'http://www.heise.de/autos/rss/news.rdf'),
|
||||
('Mac & i', 'http://www.heise.de/mac-and-i/news.rdf'),
|
||||
('Mac&i', 'http://www.heise.de/mac-and-i/news.rdf'),
|
||||
('Mobile ', 'http://www.heise.de/mobil/newsticker/heise-atom.xml'),
|
||||
('Netz ', 'http://www.heise.de/netze/rss/netze-atom.xml'),
|
||||
('Open ', 'http://www.heise.de/open/news/news-atom.xml'),
|
||||
('Resale ', 'http://www.heise.de/resale/rss/resale.rdf'),
|
||||
('Security ', 'http://www.heise.de/security/news/news-atom.xml'),
|
||||
('C`t', 'http://www.heise.de/ct/rss/artikel-atom.xml'),
|
||||
('iX', 'http://www.heise.de/ix/news/news.rdf'),
|
||||
('Mach-flott', 'http://www.heise.de/mach-flott/rss/mach-flott-atom.xml'),
|
||||
('Blog: Babel-Bulletin', 'http://www.heise.de/developer/rss/babel-bulletin/blog.rdf'),
|
||||
('Blog: Der Dotnet-Doktor', 'http://www.heise.de/developer/rss/dotnet-doktor/blog.rdf'),
|
||||
('Blog: Bernds Management-Welt', 'http://www.heise.de/developer/rss/bernds-management-welt/blog.rdf'),
|
||||
('Blog: The World of IT', 'http://www.heise.de/developer/rss/world-of-it/blog.rdf'),
|
||||
('Blog: Kais bewegtes Web', 'http://www.heise.de/developer/rss/kais-bewegtes-web/blog.rdf')
|
||||
]
|
||||
('Blog: IT conversation', 'http://www.heise.de/developer/rss/world-of-it/blog.rdf'),
|
||||
('Blog: Kais bewegtes Web', 'http://www.heise.de/developer/rss/kais-bewegtes-web/blog.rdf')]
|
||||
|
||||
def print_version(self, url):
|
||||
return url + '?view=print'
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2010, matek09, matek09@gmail.com'
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
import re
|
||||
|
||||
class Histmag(BasicNewsRecipe):
|
||||
title = u'Histmag'
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||
|
||||
class NewsOnJapan(BasicNewsRecipe):
|
||||
title = u'News On Japan'
|
||||
@@ -14,6 +13,6 @@ class NewsOnJapan(BasicNewsRecipe):
|
||||
|
||||
|
||||
feeds = [
|
||||
('News',
|
||||
('News',
|
||||
'http://newsonjapan.com/rss/top.xml'),
|
||||
]
|
||||
]
|
||||
|
||||
@@ -37,11 +37,13 @@ class TagesspiegelRSS(BasicNewsRecipe):
|
||||
keep_only_tags = dict(name='div', attrs={'class':["hcf-article"]})
|
||||
remove_tags = [
|
||||
dict(name='link'), dict(name='iframe'),dict(name='style'),dict(name='meta'),dict(name='button'),
|
||||
dict(name='div', attrs={'class':["hcf-jump-to-comments","hcf-clear","hcf-magnify hcf-media-control"] }),
|
||||
dict(name='div', attrs={'class':["hcf-jump-to-comments","hcf-clear","hcf-magnify hcf-media-control",
|
||||
"hcf-socials-widgets hcf-socials-top","hcf-socials-widgets hcf-socials-bottom"] }),
|
||||
dict(name='span', attrs={'class':["hcf-mainsearch",] }),
|
||||
dict(name='ul', attrs={'class':["hcf-tools"]}),
|
||||
dict(name='ul', attrs={'class': re.compile('hcf-services')})
|
||||
]
|
||||
|
||||
|
||||
def parse_index(self):
|
||||
soup = self.index_to_soup('http://www.tagesspiegel.de/zeitung/')
|
||||
|
||||
@@ -5,7 +5,6 @@ www.theweek.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
import re
|
||||
|
||||
class TheWeek(BasicNewsRecipe):
|
||||
title = 'The Week Magazine'
|
||||
@@ -21,23 +20,7 @@ class TheWeek(BasicNewsRecipe):
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
preprocess_regexps = [(re.compile(r'<h3><a href=.*</body>', re.DOTALL), lambda match: '</body>')]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags_after = dict(name='div', attrs={'class':'articleSubscribe4free'})
|
||||
remove_tags = [
|
||||
dict(name='div', attrs={'class':['floatLeft','imageCaption','slideshowImageAttribution','postDate','utilities','cartoonInfo','left','middle','col300','articleSubscribe4free',' articleFlyout','articleFlyout floatRight','fourFreeBar']})
|
||||
,dict(name='div', attrs={'id':['cartoonThumbs','rightColumn','header','partners']})
|
||||
,dict(name='ul', attrs={'class':['slideshowNav','hotTopicsList topicList']})
|
||||
]
|
||||
remove_attributes = ['width','height', 'style', 'font', 'color']
|
||||
extra_css = '''
|
||||
h1{font-family:Geneva, Arial, Helvetica, sans-serif;color:#154B7A;}
|
||||
h3{font-size: 14px;color:#999999; font-family:Geneva, Arial, Helvetica, sans-serif;font-weight: bold;}
|
||||
h2{color:#666666; font-family:Geneva, Arial, Helvetica, sans-serif;font-size:small;}
|
||||
p {font-family:Arial,Helvetica,sans-serif;}
|
||||
'''
|
||||
filter_regexps = [r'www\.palmcoastdata\.com']
|
||||
|
||||
auto_cleanup = True
|
||||
feeds = [
|
||||
(u'News-Opinion', u'http://theweek.com/section/index/news_opinion.rss'),
|
||||
(u'Business', u'http://theweek.com/section/index/business.rss'),
|
||||
|
||||
@@ -16,6 +16,7 @@ class ZAOBAO(BasicNewsRecipe):
|
||||
recursions = 1
|
||||
language = 'zh'
|
||||
encoding = 'gbk'
|
||||
masthead_url = 'http://www.zaobao.com/ssi/images1/zblogo_original.gif'
|
||||
# multithreaded_fetch = True
|
||||
|
||||
keep_only_tags = [
|
||||
|
||||
@@ -38,10 +38,12 @@
|
||||
<hr class="cbj_kindle_banner_hr" />
|
||||
<!--
|
||||
In addition you can add code to show the values of custom columns here.
|
||||
The value is available as _column_name and the title as _column_name_label.
|
||||
For example, if you have a custom column with label #genre, you can add it to
|
||||
this template with:
|
||||
<div>{_genre_label}: {_genre}</div>
|
||||
The value is available as _column_name and the title as
|
||||
_column_name_label. For example, if you have a custom column with
|
||||
label #genre, you can add it to this template with _genre_label and
|
||||
_genre. Note that the # is replaced by an underscore. For example
|
||||
|
||||
<div><b>{_genre_label}:</b> {_genre}</div>
|
||||
-->
|
||||
|
||||
<div class="cbj_comments">{comments}</div>
|
||||
|
||||
+135
-135
@@ -12,14 +12,14 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
|
||||
"devel@lists.alioth.debian.org>\n"
|
||||
"POT-Creation-Date: 2011-09-27 14:31+0000\n"
|
||||
"PO-Revision-Date: 2011-11-04 23:01+0000\n"
|
||||
"PO-Revision-Date: 2011-11-13 15:24+0000\n"
|
||||
"Last-Translator: Ferran Rius <frius64@hotmail.com>\n"
|
||||
"Language-Team: Catalan <linux@softcatala.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-14 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14277)\n"
|
||||
"Language: ca\n"
|
||||
|
||||
#. name for aaa
|
||||
@@ -8572,43 +8572,43 @@ msgstr "Guntai"
|
||||
|
||||
#. name for gnu
|
||||
msgid "Gnau"
|
||||
msgstr ""
|
||||
msgstr "Gnau"
|
||||
|
||||
#. name for gnw
|
||||
msgid "Guaraní; Western Bolivian"
|
||||
msgstr ""
|
||||
msgstr "Guaraní; bolivià occidental"
|
||||
|
||||
#. name for gnz
|
||||
msgid "Ganzi"
|
||||
msgstr ""
|
||||
msgstr "Ganzi"
|
||||
|
||||
#. name for goa
|
||||
msgid "Guro"
|
||||
msgstr ""
|
||||
msgstr "Guro"
|
||||
|
||||
#. name for gob
|
||||
msgid "Playero"
|
||||
msgstr ""
|
||||
msgstr "Playero"
|
||||
|
||||
#. name for goc
|
||||
msgid "Gorakor"
|
||||
msgstr ""
|
||||
msgstr "Gorakor"
|
||||
|
||||
#. name for god
|
||||
msgid "Godié"
|
||||
msgstr ""
|
||||
msgstr "Godié"
|
||||
|
||||
#. name for goe
|
||||
msgid "Gongduk"
|
||||
msgstr ""
|
||||
msgstr "Gongduk"
|
||||
|
||||
#. name for gof
|
||||
msgid "Gofa"
|
||||
msgstr ""
|
||||
msgstr "Gofa"
|
||||
|
||||
#. name for gog
|
||||
msgid "Gogo"
|
||||
msgstr ""
|
||||
msgstr "Gogo"
|
||||
|
||||
#. name for goh
|
||||
msgid "German; Old High (ca. 750-1050)"
|
||||
@@ -8616,23 +8616,23 @@ msgstr "Alt alemany; antic (ca. 750-1050)"
|
||||
|
||||
#. name for goi
|
||||
msgid "Gobasi"
|
||||
msgstr ""
|
||||
msgstr "Gobasi"
|
||||
|
||||
#. name for goj
|
||||
msgid "Gowlan"
|
||||
msgstr ""
|
||||
msgstr "Gowlan"
|
||||
|
||||
#. name for gok
|
||||
msgid "Gowli"
|
||||
msgstr ""
|
||||
msgstr "Gowli"
|
||||
|
||||
#. name for gol
|
||||
msgid "Gola"
|
||||
msgstr ""
|
||||
msgstr "Gola"
|
||||
|
||||
#. name for gom
|
||||
msgid "Konkani; Goan"
|
||||
msgstr ""
|
||||
msgstr "Konkani; goanès"
|
||||
|
||||
#. name for gon
|
||||
msgid "Gondi"
|
||||
@@ -8640,71 +8640,71 @@ msgstr "Gondi"
|
||||
|
||||
#. name for goo
|
||||
msgid "Gone Dau"
|
||||
msgstr ""
|
||||
msgstr "Gone Dau"
|
||||
|
||||
#. name for gop
|
||||
msgid "Yeretuar"
|
||||
msgstr ""
|
||||
msgstr "Yeretuar"
|
||||
|
||||
#. name for goq
|
||||
msgid "Gorap"
|
||||
msgstr ""
|
||||
msgstr "Gorap"
|
||||
|
||||
#. name for gor
|
||||
msgid "Gorontalo"
|
||||
msgstr ""
|
||||
msgstr "Gorontalo"
|
||||
|
||||
#. name for gos
|
||||
msgid "Gronings"
|
||||
msgstr ""
|
||||
msgstr "Gronings"
|
||||
|
||||
#. name for got
|
||||
msgid "Gothic"
|
||||
msgstr ""
|
||||
msgstr "Gòtic"
|
||||
|
||||
#. name for gou
|
||||
msgid "Gavar"
|
||||
msgstr ""
|
||||
msgstr "Gavar"
|
||||
|
||||
#. name for gow
|
||||
msgid "Gorowa"
|
||||
msgstr ""
|
||||
msgstr "Gorowa"
|
||||
|
||||
#. name for gox
|
||||
msgid "Gobu"
|
||||
msgstr ""
|
||||
msgstr "Gobu"
|
||||
|
||||
#. name for goy
|
||||
msgid "Goundo"
|
||||
msgstr ""
|
||||
msgstr "Goundo"
|
||||
|
||||
#. name for goz
|
||||
msgid "Gozarkhani"
|
||||
msgstr ""
|
||||
msgstr "Gozarkhani"
|
||||
|
||||
#. name for gpa
|
||||
msgid "Gupa-Abawa"
|
||||
msgstr ""
|
||||
msgstr "Gupa-Abawa"
|
||||
|
||||
#. name for gpn
|
||||
msgid "Taiap"
|
||||
msgstr ""
|
||||
msgstr "Taiap"
|
||||
|
||||
#. name for gqa
|
||||
msgid "Ga'anda"
|
||||
msgstr ""
|
||||
msgstr "Gaanda"
|
||||
|
||||
#. name for gqi
|
||||
msgid "Guiqiong"
|
||||
msgstr ""
|
||||
msgstr "Guiqiong"
|
||||
|
||||
#. name for gqn
|
||||
msgid "Guana (Brazil)"
|
||||
msgstr ""
|
||||
msgstr "Guana (Brasil)"
|
||||
|
||||
#. name for gqr
|
||||
msgid "Gor"
|
||||
msgstr ""
|
||||
msgstr "Gor"
|
||||
|
||||
#. name for gra
|
||||
msgid "Garasia; Rajput"
|
||||
@@ -8720,19 +8720,19 @@ msgstr "Grec antic (fins el 1453)"
|
||||
|
||||
#. name for grd
|
||||
msgid "Guruntum-Mbaaru"
|
||||
msgstr ""
|
||||
msgstr "Guruntum"
|
||||
|
||||
#. name for grg
|
||||
msgid "Madi"
|
||||
msgstr ""
|
||||
msgstr "Madi"
|
||||
|
||||
#. name for grh
|
||||
msgid "Gbiri-Niragu"
|
||||
msgstr ""
|
||||
msgstr "Gbiri-Niragu"
|
||||
|
||||
#. name for gri
|
||||
msgid "Ghari"
|
||||
msgstr ""
|
||||
msgstr "Ghari"
|
||||
|
||||
#. name for grj
|
||||
msgid "Grebo; Southern"
|
||||
@@ -8740,35 +8740,35 @@ msgstr "Grebo; meridional"
|
||||
|
||||
#. name for grm
|
||||
msgid "Kota Marudu Talantang"
|
||||
msgstr ""
|
||||
msgstr "Kota Marudu; Talantang"
|
||||
|
||||
#. name for grn
|
||||
msgid "Guarani"
|
||||
msgstr "guaraní"
|
||||
msgstr "Guaraní"
|
||||
|
||||
#. name for gro
|
||||
msgid "Groma"
|
||||
msgstr ""
|
||||
msgstr "Groma"
|
||||
|
||||
#. name for grq
|
||||
msgid "Gorovu"
|
||||
msgstr ""
|
||||
msgstr "Gorovu"
|
||||
|
||||
#. name for grr
|
||||
msgid "Taznatit"
|
||||
msgstr ""
|
||||
msgstr "Taznatit"
|
||||
|
||||
#. name for grs
|
||||
msgid "Gresi"
|
||||
msgstr ""
|
||||
msgstr "Gresi"
|
||||
|
||||
#. name for grt
|
||||
msgid "Garo"
|
||||
msgstr ""
|
||||
msgstr "Garo"
|
||||
|
||||
#. name for gru
|
||||
msgid "Kistane"
|
||||
msgstr ""
|
||||
msgstr "Gurage; septentrional"
|
||||
|
||||
#. name for grv
|
||||
msgid "Grebo; Central"
|
||||
@@ -8776,11 +8776,11 @@ msgstr "Grebo; central"
|
||||
|
||||
#. name for grw
|
||||
msgid "Gweda"
|
||||
msgstr ""
|
||||
msgstr "Gweda"
|
||||
|
||||
#. name for grx
|
||||
msgid "Guriaso"
|
||||
msgstr ""
|
||||
msgstr "Guriaso"
|
||||
|
||||
#. name for gry
|
||||
msgid "Grebo; Barclayville"
|
||||
@@ -8788,7 +8788,7 @@ msgstr "Grebo; Barclayville"
|
||||
|
||||
#. name for grz
|
||||
msgid "Guramalum"
|
||||
msgstr ""
|
||||
msgstr "Guramalum"
|
||||
|
||||
#. name for gse
|
||||
msgid "Ghanaian Sign Language"
|
||||
@@ -8800,7 +8800,7 @@ msgstr "Llenguatge de signes alemany"
|
||||
|
||||
#. name for gsl
|
||||
msgid "Gusilay"
|
||||
msgstr ""
|
||||
msgstr "Gusilay"
|
||||
|
||||
#. name for gsm
|
||||
msgid "Guatemalan Sign Language"
|
||||
@@ -8808,7 +8808,7 @@ msgstr "Llenguatge de signes guatemaltec"
|
||||
|
||||
#. name for gsn
|
||||
msgid "Gusan"
|
||||
msgstr ""
|
||||
msgstr "Gusan"
|
||||
|
||||
#. name for gso
|
||||
msgid "Gbaya; Southwest"
|
||||
@@ -8816,7 +8816,7 @@ msgstr "Gbaya; Sudoccidental"
|
||||
|
||||
#. name for gsp
|
||||
msgid "Wasembo"
|
||||
msgstr ""
|
||||
msgstr "Wasembo"
|
||||
|
||||
#. name for gss
|
||||
msgid "Greek Sign Language"
|
||||
@@ -8828,23 +8828,23 @@ msgstr "Alemany; suís"
|
||||
|
||||
#. name for gta
|
||||
msgid "Guató"
|
||||
msgstr ""
|
||||
msgstr "Guató"
|
||||
|
||||
#. name for gti
|
||||
msgid "Gbati-ri"
|
||||
msgstr ""
|
||||
msgstr "Gbati-ri"
|
||||
|
||||
#. name for gua
|
||||
msgid "Shiki"
|
||||
msgstr ""
|
||||
msgstr "Shiki"
|
||||
|
||||
#. name for gub
|
||||
msgid "Guajajára"
|
||||
msgstr ""
|
||||
msgstr "Guajajara"
|
||||
|
||||
#. name for guc
|
||||
msgid "Wayuu"
|
||||
msgstr ""
|
||||
msgstr "Guajiro"
|
||||
|
||||
#. name for gud
|
||||
msgid "Dida; Yocoboué"
|
||||
@@ -8852,23 +8852,23 @@ msgstr "Dida; Yocoboué"
|
||||
|
||||
#. name for gue
|
||||
msgid "Gurinji"
|
||||
msgstr ""
|
||||
msgstr "Gurindji"
|
||||
|
||||
#. name for guf
|
||||
msgid "Gupapuyngu"
|
||||
msgstr ""
|
||||
msgstr "Gupapuyngu"
|
||||
|
||||
#. name for gug
|
||||
msgid "Guaraní; Paraguayan"
|
||||
msgstr ""
|
||||
msgstr "Guaraní; paraguaià"
|
||||
|
||||
#. name for guh
|
||||
msgid "Guahibo"
|
||||
msgstr ""
|
||||
msgstr "Guahibo"
|
||||
|
||||
#. name for gui
|
||||
msgid "Guaraní; Eastern Bolivian"
|
||||
msgstr ""
|
||||
msgstr "Guaraní; bolivià oriental"
|
||||
|
||||
#. name for guj
|
||||
msgid "Gujarati"
|
||||
@@ -8876,7 +8876,7 @@ msgstr "gujarati"
|
||||
|
||||
#. name for guk
|
||||
msgid "Gumuz"
|
||||
msgstr ""
|
||||
msgstr "Gumús"
|
||||
|
||||
#. name for gul
|
||||
msgid "Creole English; Sea Island"
|
||||
@@ -8884,27 +8884,27 @@ msgstr "Anglès crioll; Sea Island"
|
||||
|
||||
#. name for gum
|
||||
msgid "Guambiano"
|
||||
msgstr ""
|
||||
msgstr "Guambià"
|
||||
|
||||
#. name for gun
|
||||
msgid "Guaraní; Mbyá"
|
||||
msgstr ""
|
||||
msgstr "Guaraní; Mbyà"
|
||||
|
||||
#. name for guo
|
||||
msgid "Guayabero"
|
||||
msgstr ""
|
||||
msgstr "Guayabero"
|
||||
|
||||
#. name for gup
|
||||
msgid "Gunwinggu"
|
||||
msgstr ""
|
||||
msgstr "Gunwinggu"
|
||||
|
||||
#. name for guq
|
||||
msgid "Aché"
|
||||
msgstr ""
|
||||
msgstr "Aché"
|
||||
|
||||
#. name for gur
|
||||
msgid "Farefare"
|
||||
msgstr ""
|
||||
msgstr "Gurenne"
|
||||
|
||||
#. name for gus
|
||||
msgid "Guinean Sign Language"
|
||||
@@ -8912,67 +8912,67 @@ msgstr "Llenguatge de signes guineà"
|
||||
|
||||
#. name for gut
|
||||
msgid "Maléku Jaíka"
|
||||
msgstr ""
|
||||
msgstr "Guatuso"
|
||||
|
||||
#. name for guu
|
||||
msgid "Yanomamö"
|
||||
msgstr ""
|
||||
msgstr "Guaharibo"
|
||||
|
||||
#. name for guv
|
||||
msgid "Gey"
|
||||
msgstr ""
|
||||
msgstr "Gey"
|
||||
|
||||
#. name for guw
|
||||
msgid "Gun"
|
||||
msgstr ""
|
||||
msgstr "Gun-Gbe"
|
||||
|
||||
#. name for gux
|
||||
msgid "Gourmanchéma"
|
||||
msgstr ""
|
||||
msgstr "Gourmanchéma"
|
||||
|
||||
#. name for guz
|
||||
msgid "Gusii"
|
||||
msgstr ""
|
||||
msgstr "Gusí"
|
||||
|
||||
#. name for gva
|
||||
msgid "Guana (Paraguay)"
|
||||
msgstr ""
|
||||
msgstr "Guana (Paraguai)"
|
||||
|
||||
#. name for gvc
|
||||
msgid "Guanano"
|
||||
msgstr ""
|
||||
msgstr "Guanano"
|
||||
|
||||
#. name for gve
|
||||
msgid "Duwet"
|
||||
msgstr ""
|
||||
msgstr "Duwet"
|
||||
|
||||
#. name for gvf
|
||||
msgid "Golin"
|
||||
msgstr ""
|
||||
msgstr "Golin"
|
||||
|
||||
#. name for gvj
|
||||
msgid "Guajá"
|
||||
msgstr ""
|
||||
msgstr "Guajà"
|
||||
|
||||
#. name for gvl
|
||||
msgid "Gulay"
|
||||
msgstr ""
|
||||
msgstr "Gulay"
|
||||
|
||||
#. name for gvm
|
||||
msgid "Gurmana"
|
||||
msgstr ""
|
||||
msgstr "Gurmana"
|
||||
|
||||
#. name for gvn
|
||||
msgid "Kuku-Yalanji"
|
||||
msgstr ""
|
||||
msgstr "Kuku; Yalanji"
|
||||
|
||||
#. name for gvo
|
||||
msgid "Gavião Do Jiparaná"
|
||||
msgstr ""
|
||||
msgstr "Gaviao Jiparanà"
|
||||
|
||||
#. name for gvp
|
||||
msgid "Gavião; Pará"
|
||||
msgstr ""
|
||||
msgstr "Gaviao Parà"
|
||||
|
||||
#. name for gvr
|
||||
msgid "Gurung; Western"
|
||||
@@ -8980,75 +8980,75 @@ msgstr "Gurung; occidental"
|
||||
|
||||
#. name for gvs
|
||||
msgid "Gumawana"
|
||||
msgstr ""
|
||||
msgstr "Gumawana"
|
||||
|
||||
#. name for gvy
|
||||
msgid "Guyani"
|
||||
msgstr ""
|
||||
msgstr "Guyani"
|
||||
|
||||
#. name for gwa
|
||||
msgid "Mbato"
|
||||
msgstr ""
|
||||
msgstr "Mbato"
|
||||
|
||||
#. name for gwb
|
||||
msgid "Gwa"
|
||||
msgstr ""
|
||||
msgstr "Gwa"
|
||||
|
||||
#. name for gwc
|
||||
msgid "Kalami"
|
||||
msgstr ""
|
||||
msgstr "Kalami"
|
||||
|
||||
#. name for gwd
|
||||
msgid "Gawwada"
|
||||
msgstr ""
|
||||
msgstr "Gawwada"
|
||||
|
||||
#. name for gwe
|
||||
msgid "Gweno"
|
||||
msgstr ""
|
||||
msgstr "Gweno"
|
||||
|
||||
#. name for gwf
|
||||
msgid "Gowro"
|
||||
msgstr ""
|
||||
msgstr "Gowro"
|
||||
|
||||
#. name for gwg
|
||||
msgid "Moo"
|
||||
msgstr ""
|
||||
msgstr "Moo"
|
||||
|
||||
#. name for gwi
|
||||
msgid "Gwichʼin"
|
||||
msgstr ""
|
||||
msgstr "Gwichin"
|
||||
|
||||
#. name for gwj
|
||||
msgid "/Gwi"
|
||||
msgstr ""
|
||||
msgstr "Gwi"
|
||||
|
||||
#. name for gwn
|
||||
msgid "Gwandara"
|
||||
msgstr ""
|
||||
msgstr "Gwandara"
|
||||
|
||||
#. name for gwr
|
||||
msgid "Gwere"
|
||||
msgstr ""
|
||||
msgstr "Gwere"
|
||||
|
||||
#. name for gwt
|
||||
msgid "Gawar-Bati"
|
||||
msgstr ""
|
||||
msgstr "Gawar-Bati"
|
||||
|
||||
#. name for gwu
|
||||
msgid "Guwamu"
|
||||
msgstr ""
|
||||
msgstr "Guwamu"
|
||||
|
||||
#. name for gww
|
||||
msgid "Kwini"
|
||||
msgstr ""
|
||||
msgstr "Goonan"
|
||||
|
||||
#. name for gwx
|
||||
msgid "Gua"
|
||||
msgstr ""
|
||||
msgstr "Gua"
|
||||
|
||||
#. name for gxx
|
||||
msgid "Wè Southern"
|
||||
msgstr ""
|
||||
msgstr "We; meridional"
|
||||
|
||||
#. name for gya
|
||||
msgid "Gbaya; Northwest"
|
||||
@@ -9056,35 +9056,35 @@ msgstr "Gbaya; Nordoccidental"
|
||||
|
||||
#. name for gyb
|
||||
msgid "Garus"
|
||||
msgstr ""
|
||||
msgstr "Garus"
|
||||
|
||||
#. name for gyd
|
||||
msgid "Kayardild"
|
||||
msgstr ""
|
||||
msgstr "Gayardilt"
|
||||
|
||||
#. name for gye
|
||||
msgid "Gyem"
|
||||
msgstr ""
|
||||
msgstr "Gyem"
|
||||
|
||||
#. name for gyf
|
||||
msgid "Gungabula"
|
||||
msgstr ""
|
||||
msgstr "Gungabula"
|
||||
|
||||
#. name for gyg
|
||||
msgid "Gbayi"
|
||||
msgstr ""
|
||||
msgstr "Gbayi"
|
||||
|
||||
#. name for gyi
|
||||
msgid "Gyele"
|
||||
msgstr ""
|
||||
msgstr "Gyele"
|
||||
|
||||
#. name for gyl
|
||||
msgid "Gayil"
|
||||
msgstr ""
|
||||
msgstr "Galila"
|
||||
|
||||
#. name for gym
|
||||
msgid "Ngäbere"
|
||||
msgstr ""
|
||||
msgstr "Ngabere"
|
||||
|
||||
#. name for gyn
|
||||
msgid "Creole English; Guyanese"
|
||||
@@ -9092,27 +9092,27 @@ msgstr "Creole English; Guyana"
|
||||
|
||||
#. name for gyr
|
||||
msgid "Guarayu"
|
||||
msgstr ""
|
||||
msgstr "Guaraiú"
|
||||
|
||||
#. name for gyy
|
||||
msgid "Gunya"
|
||||
msgstr ""
|
||||
msgstr "Gunya"
|
||||
|
||||
#. name for gza
|
||||
msgid "Ganza"
|
||||
msgstr ""
|
||||
msgstr "Ganza"
|
||||
|
||||
#. name for gzi
|
||||
msgid "Gazi"
|
||||
msgstr ""
|
||||
msgstr "Gazi"
|
||||
|
||||
#. name for gzn
|
||||
msgid "Gane"
|
||||
msgstr ""
|
||||
msgstr "Gane"
|
||||
|
||||
#. name for haa
|
||||
msgid "Han"
|
||||
msgstr ""
|
||||
msgstr "Han"
|
||||
|
||||
#. name for hab
|
||||
msgid "Hanoi Sign Language"
|
||||
@@ -9120,11 +9120,11 @@ msgstr "Llenguatge de signes de Hanoi"
|
||||
|
||||
#. name for hac
|
||||
msgid "Gurani"
|
||||
msgstr ""
|
||||
msgstr "Hawrami"
|
||||
|
||||
#. name for had
|
||||
msgid "Hatam"
|
||||
msgstr ""
|
||||
msgstr "Hatam"
|
||||
|
||||
#. name for hae
|
||||
msgid "Oromo; Eastern"
|
||||
@@ -9136,19 +9136,19 @@ msgstr "Llenguatge de signes Haipong"
|
||||
|
||||
#. name for hag
|
||||
msgid "Hanga"
|
||||
msgstr ""
|
||||
msgstr "Hanga"
|
||||
|
||||
#. name for hah
|
||||
msgid "Hahon"
|
||||
msgstr ""
|
||||
msgstr "Hahon"
|
||||
|
||||
#. name for hai
|
||||
msgid "Haida"
|
||||
msgstr ""
|
||||
msgstr "Haida"
|
||||
|
||||
#. name for haj
|
||||
msgid "Hajong"
|
||||
msgstr ""
|
||||
msgstr "Hajong"
|
||||
|
||||
#. name for hak
|
||||
msgid "Chinese; Hakka"
|
||||
@@ -9156,11 +9156,11 @@ msgstr "Xinès; Hakka"
|
||||
|
||||
#. name for hal
|
||||
msgid "Halang"
|
||||
msgstr ""
|
||||
msgstr "Halang"
|
||||
|
||||
#. name for ham
|
||||
msgid "Hewa"
|
||||
msgstr ""
|
||||
msgstr "Hewa"
|
||||
|
||||
#. name for han
|
||||
msgid "Hangaza"
|
||||
@@ -18216,7 +18216,7 @@ msgstr ""
|
||||
|
||||
#. name for nhd
|
||||
msgid "Guaraní; Ava"
|
||||
msgstr ""
|
||||
msgstr "Guaraní; Ava"
|
||||
|
||||
#. name for nhe
|
||||
msgid "Nahuatl; Eastern Huasteca"
|
||||
@@ -22916,7 +22916,7 @@ msgstr ""
|
||||
|
||||
#. name for sgw
|
||||
msgid "Sebat Bet Gurage"
|
||||
msgstr ""
|
||||
msgstr "Gurage; occidental"
|
||||
|
||||
#. name for sgx
|
||||
msgid "Sierra Leone Sign Language"
|
||||
@@ -26588,7 +26588,7 @@ msgstr ""
|
||||
|
||||
#. name for ugb
|
||||
msgid "Kuku-Ugbanh"
|
||||
msgstr ""
|
||||
msgstr "Kuku; Ugbanh"
|
||||
|
||||
#. name for uge
|
||||
msgid "Ughele"
|
||||
@@ -26984,7 +26984,7 @@ msgstr ""
|
||||
|
||||
#. name for uwa
|
||||
msgid "Kuku-Uwanh"
|
||||
msgstr ""
|
||||
msgstr "Kuku; Uwanh"
|
||||
|
||||
#. name for uya
|
||||
msgid "Doko-Uyanga"
|
||||
@@ -27564,7 +27564,7 @@ msgstr ""
|
||||
|
||||
#. name for wec
|
||||
msgid "Wè Western"
|
||||
msgstr ""
|
||||
msgstr "We; occidental"
|
||||
|
||||
#. name for wed
|
||||
msgid "Wedau"
|
||||
@@ -27932,7 +27932,7 @@ msgstr ""
|
||||
|
||||
#. name for wob
|
||||
msgid "Wè Northern"
|
||||
msgstr ""
|
||||
msgstr "We; septentrional"
|
||||
|
||||
#. name for woc
|
||||
msgid "Wogeo"
|
||||
@@ -28716,7 +28716,7 @@ msgstr ""
|
||||
|
||||
#. name for xmh
|
||||
msgid "Kuku-Muminh"
|
||||
msgstr ""
|
||||
msgstr "Kuku: Muminh"
|
||||
|
||||
#. name for xmj
|
||||
msgid "Majera"
|
||||
@@ -28744,11 +28744,11 @@ msgstr ""
|
||||
|
||||
#. name for xmp
|
||||
msgid "Kuku-Mu'inh"
|
||||
msgstr ""
|
||||
msgstr "Kuku; Mu'inh"
|
||||
|
||||
#. name for xmq
|
||||
msgid "Kuku-Mangk"
|
||||
msgstr ""
|
||||
msgstr "Kuku; Mangk"
|
||||
|
||||
#. name for xmr
|
||||
msgid "Meroitic"
|
||||
|
||||
+4
-4
@@ -9,13 +9,13 @@ msgstr ""
|
||||
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
|
||||
"devel@lists.alioth.debian.org>\n"
|
||||
"POT-Creation-Date: 2011-09-27 14:31+0000\n"
|
||||
"PO-Revision-Date: 2011-11-10 07:13+0000\n"
|
||||
"PO-Revision-Date: 2011-11-12 07:52+0000\n"
|
||||
"Last-Translator: Devilinside <Unknown>\n"
|
||||
"Language-Team: Hungarian <debian-l10n-hungarian@lists.d.o>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-11 04:52+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-13 05:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14277)\n"
|
||||
"X-Poedit-Country: HUNGARY\n"
|
||||
"Language: hu\n"
|
||||
@@ -4969,7 +4969,7 @@ msgstr ""
|
||||
|
||||
#. name for cha
|
||||
msgid "Chamorro"
|
||||
msgstr "chamorro"
|
||||
msgstr "csamorro"
|
||||
|
||||
#. name for chb
|
||||
msgid "Chibcha"
|
||||
@@ -19625,7 +19625,7 @@ msgstr ""
|
||||
|
||||
#. name for oco
|
||||
msgid "Cornish; Old"
|
||||
msgstr ""
|
||||
msgstr "cornwalli; ócornwalli"
|
||||
|
||||
#. name for ocu
|
||||
msgid "Matlatzinca; Atzingo"
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-11 04:53+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-12 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14277)\n"
|
||||
"Language: tr\n"
|
||||
|
||||
|
||||
+60
-12
@@ -6,7 +6,7 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import os, re, cStringIO, base64, httplib, subprocess, hashlib, shutil, time, \
|
||||
glob, stat
|
||||
glob, stat, sys
|
||||
from subprocess import check_call
|
||||
from tempfile import NamedTemporaryFile, mkdtemp
|
||||
from zipfile import ZipFile
|
||||
@@ -58,6 +58,47 @@ class ReUpload(Command): # {{{
|
||||
os.remove(x)
|
||||
# }}}
|
||||
|
||||
class ReadFileWithProgressReporting(file): # {{{
|
||||
|
||||
def __init__(self, path, mode='rb'):
|
||||
file.__init__(self, path, mode)
|
||||
self.seek(0, os.SEEK_END)
|
||||
self._total = self.tell()
|
||||
self.seek(0)
|
||||
self.start_time = time.time()
|
||||
|
||||
def __len__(self):
|
||||
return self._total
|
||||
|
||||
def read(self, size):
|
||||
data = file.read(self, size)
|
||||
if data:
|
||||
self.report_progress(len(data))
|
||||
return data
|
||||
|
||||
def report_progress(self, size):
|
||||
sys.stdout.write(b'\x1b[s')
|
||||
sys.stdout.write(b'\x1b[K')
|
||||
frac = float(self.tell())/self._total
|
||||
mb_pos = self.tell()/float(1024**2)
|
||||
mb_tot = self._total/float(1024**2)
|
||||
kb_pos = self.tell()/1024.0
|
||||
kb_rate = kb_pos/(time.time()-self.start_time)
|
||||
bit_rate = kb_rate * 1024
|
||||
eta = int((self._total - self.tell())/bit_rate) + 1
|
||||
eta_m, eta_s = eta / 60, eta % 60
|
||||
sys.stdout.write(
|
||||
' %.1f%% %.1f/%.1fMB %.1f KB/sec %d minutes, %d seconds left'%(
|
||||
frac*100, mb_pos, mb_tot, kb_rate, eta_m, eta_s))
|
||||
sys.stdout.write(b'\x1b[u')
|
||||
if self.tell() >= self._total:
|
||||
sys.stdout.write('\n')
|
||||
t = int(time.time() - self.start_time) + 1
|
||||
print ('Upload took %d minutes and %d seconds at %.1f KB/sec' % (
|
||||
t/60, t%60, kb_rate))
|
||||
sys.stdout.flush()
|
||||
# }}}
|
||||
|
||||
class UploadToGoogleCode(Command): # {{{
|
||||
|
||||
USERNAME = 'kovidgoyal'
|
||||
@@ -92,7 +133,7 @@ class UploadToGoogleCode(Command): # {{{
|
||||
self.upload_one(src)
|
||||
|
||||
def upload_one(self, fname):
|
||||
self.info('Uploading', fname)
|
||||
self.info('\nUploading', fname)
|
||||
typ = 'Type-' + ('Source' if fname.endswith('.gz') else 'Archive' if
|
||||
fname.endswith('.zip') else 'Installer')
|
||||
ext = os.path.splitext(fname)[1][1:]
|
||||
@@ -102,7 +143,7 @@ class UploadToGoogleCode(Command): # {{{
|
||||
start = time.time()
|
||||
path = self.upload(os.path.abspath(fname), desc,
|
||||
labels=[typ, op, 'Featured'])
|
||||
self.info('\tUploaded to:', path, 'in', int(time.time() - start),
|
||||
self.info('Uploaded to:', path, 'in', int(time.time() - start),
|
||||
'seconds')
|
||||
return path
|
||||
|
||||
@@ -198,9 +239,8 @@ class UploadToGoogleCode(Command): # {{{
|
||||
|
||||
# Now add the file itself
|
||||
file_name = os.path.basename(file_path)
|
||||
f = open(file_path, 'rb')
|
||||
file_content = f.read()
|
||||
f.close()
|
||||
with open(file_path, 'rb') as f:
|
||||
file_content = f.read()
|
||||
|
||||
body.extend(
|
||||
['--' + BOUNDARY,
|
||||
@@ -230,10 +270,17 @@ class UploadToGoogleCode(Command): # {{{
|
||||
'Content-Type': content_type,
|
||||
}
|
||||
|
||||
server = httplib.HTTPSConnection(self.UPLOAD_HOST)
|
||||
server.request('POST', upload_uri, body, headers)
|
||||
resp = server.getresponse()
|
||||
server.close()
|
||||
with NamedTemporaryFile(delete=False) as f:
|
||||
f.write(body)
|
||||
|
||||
try:
|
||||
body = ReadFileWithProgressReporting(f.name)
|
||||
server = httplib.HTTPSConnection(self.UPLOAD_HOST)
|
||||
server.request('POST', upload_uri, body, headers)
|
||||
resp = server.getresponse()
|
||||
server.close()
|
||||
finally:
|
||||
os.remove(f.name)
|
||||
|
||||
if resp.status == 201:
|
||||
return resp.getheader('Location')
|
||||
@@ -265,7 +312,7 @@ class UploadToSourceForge(Command): # {{{
|
||||
if not os.path.exists(x): continue
|
||||
start = time.time()
|
||||
self.info('Uploading', x)
|
||||
check_call(['rsync', '-v', '-e', 'ssh -x', x,
|
||||
check_call(['rsync', '-z', '--progress', '-e', 'ssh -x', x,
|
||||
'%s,%s@frs.sourceforge.net:%s'%(self.USERNAME, self.PROJECT,
|
||||
self.rdir+'/')])
|
||||
print 'Uploaded in', int(time.time() - start), 'seconds'
|
||||
@@ -376,7 +423,8 @@ class UploadUserManual(Command): # {{{
|
||||
for x in glob.glob(self.j(path, '*')):
|
||||
self.build_plugin_example(x)
|
||||
|
||||
check_call(' '.join(['scp', '-r', 'src/calibre/manual/.build/html/*',
|
||||
check_call(' '.join(['rsync', '-z', '-r', '--progress',
|
||||
'src/calibre/manual/.build/html/',
|
||||
'bugs:%s'%USER_MANUAL]), shell=True)
|
||||
# }}}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
__appname__ = u'calibre'
|
||||
numeric_version = (0, 8, 26)
|
||||
numeric_version = (0, 8, 27)
|
||||
__version__ = u'.'.join(map(unicode, numeric_version))
|
||||
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class IREXDR1000(USBMS):
|
||||
|
||||
MAIN_MEMORY_VOLUME_LABEL = 'IRex Digital Reader 1000 Main Memory'
|
||||
|
||||
EBOOK_DIR_MAIN = 'ebooks'
|
||||
EBOOK_DIR_MAIN = ''
|
||||
DELETE_EXTS = ['.mbp']
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
|
||||
@@ -44,7 +44,7 @@ class IREXDR800(IREXDR1000):
|
||||
WINDOWS_MAIN_MEM = 'DR800'
|
||||
FORMATS = ['epub', 'pdb', 'html', 'pdf', 'txt']
|
||||
|
||||
EBOOK_DIR_MAIN = 'Books'
|
||||
EBOOK_DIR_MAIN = ''
|
||||
DELETE_EXTS = []
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
|
||||
|
||||
@@ -388,11 +388,9 @@ class KINDLE_FIRE(KINDLE2):
|
||||
|
||||
EBOOK_DIR_MAIN = 'Documents'
|
||||
SUPPORTS_SUB_DIRS = False
|
||||
|
||||
def get_main_ebook_dir(self, for_upload=False):
|
||||
if for_upload:
|
||||
return self.EBOOK_DIR_MAIN
|
||||
return ''
|
||||
|
||||
SCAN_FROM_ROOT = True
|
||||
SUPPORTS_SUB_DIRS_FOR_SCAN = True
|
||||
VENDOR_NAME = 'AMAZON'
|
||||
WINDOWS_MAIN_MEM = 'KINDLE'
|
||||
|
||||
|
||||
|
||||
@@ -81,12 +81,12 @@ class NOOK(USBMS):
|
||||
return [x.replace('#', '_') for x in components]
|
||||
|
||||
class NOOK_COLOR(NOOK):
|
||||
description = _('Communicate with the Nook Color and TSR eBook readers.')
|
||||
description = _('Communicate with the Nook Color, TSR and Tablet eBook readers.')
|
||||
|
||||
PRODUCT_ID = [0x002, 0x003, 0x004]
|
||||
BCD = [0x216]
|
||||
|
||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'EBOOK_DISK'
|
||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['EBOOK_DISK', 'NOOK_TABLET']
|
||||
EBOOK_DIR_MAIN = 'My Files'
|
||||
NEWS_IN_FOLDER = False
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ class DeviceConfig(object):
|
||||
EXTRA_CUSTOMIZATION_DEFAULT = None
|
||||
|
||||
SUPPORTS_SUB_DIRS = False
|
||||
SUPPORTS_SUB_DIRS_FOR_SCAN = False # This setting is used when scanning for
|
||||
# books when SUPPORTS_SUB_DIRS is False
|
||||
MUST_READ_METADATA = False
|
||||
SUPPORTS_USE_AUTHOR_SORT = False
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@ class USBMS(CLI, Device):
|
||||
debug_print('USBMS: scan from root', self.SCAN_FROM_ROOT, ebook_dir)
|
||||
if not os.path.exists(ebook_dir): continue
|
||||
# Get all books in the ebook_dir directory
|
||||
if self.SUPPORTS_SUB_DIRS:
|
||||
if self.SUPPORTS_SUB_DIRS or self.SUPPORTS_SUB_DIRS_FOR_SCAN:
|
||||
# build a list of files to check, so we can accurately report progress
|
||||
flist = []
|
||||
for path, dirs, files in os.walk(ebook_dir):
|
||||
|
||||
@@ -6,11 +6,12 @@ Created on 4 Jun 2010
|
||||
|
||||
from base64 import b64encode, b64decode
|
||||
import json, traceback
|
||||
from datetime import datetime, time
|
||||
|
||||
from calibre.ebooks.metadata.book import SERIALIZABLE_FIELDS
|
||||
from calibre.constants import filesystem_encoding, preferred_encoding
|
||||
from calibre.library.field_metadata import FieldMetadata
|
||||
from calibre.utils.date import parse_date, isoformat, UNDEFINED_DATE
|
||||
from calibre.utils.date import parse_date, isoformat, UNDEFINED_DATE, local_tz
|
||||
from calibre.utils.magick import Image
|
||||
from calibre import isbytestring
|
||||
|
||||
@@ -22,7 +23,13 @@ def string_to_datetime(src):
|
||||
return parse_date(src)
|
||||
|
||||
def datetime_to_string(dateval):
|
||||
if dateval is None or dateval == UNDEFINED_DATE:
|
||||
if dateval is None:
|
||||
return "None"
|
||||
if not isinstance(dateval, datetime):
|
||||
dateval = datetime.combine(dateval, time())
|
||||
if hasattr(dateval, 'tzinfo') and dateval.tzinfo is None:
|
||||
dateval = dateval.replace(tzinfo=local_tz)
|
||||
if dateval <= UNDEFINED_DATE:
|
||||
return "None"
|
||||
return isoformat(dateval)
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||
from calibre.ebooks.oeb.base import XPath, XHTML_NS, XHTML
|
||||
from calibre.library.comments import comments_to_html
|
||||
from calibre.utils.date import is_date_undefined
|
||||
from calibre.ebooks.chardet import strip_encoding_declarations
|
||||
|
||||
JACKET_XPATH = '//h:meta[@name="calibre-content" and @content="jacket"]'
|
||||
|
||||
@@ -175,15 +176,20 @@ def render_jacket(mi, output_profile,
|
||||
try:
|
||||
display_name, val = mi.format_field_extended(key)[:2]
|
||||
key = key.replace('#', '_')
|
||||
args[key] = val
|
||||
args[key+'_label'] = display_name
|
||||
args[key] = escape(val)
|
||||
args[key+'_label'] = escape(display_name)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Used in the comment describing use of custom columns in templates
|
||||
args['_genre_label'] = args.get('_genre_label', '{_genre_label}')
|
||||
args['_genre'] = args.get('_genre', '{_genre}')
|
||||
|
||||
generated_html = P('jacket/template.xhtml',
|
||||
data=True).decode('utf-8').format(**args)
|
||||
|
||||
# Post-process the generated html to strip out empty header items
|
||||
|
||||
soup = BeautifulSoup(generated_html)
|
||||
if not series:
|
||||
series_tag = soup.find(attrs={'class':'cbj_series'})
|
||||
@@ -206,7 +212,8 @@ def render_jacket(mi, output_profile,
|
||||
if hr_tag is not None:
|
||||
hr_tag.extract()
|
||||
|
||||
return soup.renderContents(None)
|
||||
return strip_encoding_declarations(
|
||||
soup.renderContents('utf-8').decode('utf-8'))
|
||||
|
||||
from calibre.ebooks.oeb.base import RECOVER_PARSER
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ from calibre.utils.icu import sort_key, capitalize
|
||||
from calibre.utils.config import prefs, tweaks
|
||||
from calibre.utils.magick.draw import identify_data
|
||||
from calibre.utils.date import qt_to_dt
|
||||
from calibre.ptempfile import SpooledTemporaryFile
|
||||
from calibre.db import SPOOL_SIZE
|
||||
|
||||
def get_cover_data(stream, ext): # {{{
|
||||
from calibre.ebooks.metadata.meta import get_metadata
|
||||
@@ -134,11 +136,12 @@ class MyBlockingBusy(QDialog): # {{{
|
||||
do_autonumber, do_remove_format, remove_format, do_swap_ta, \
|
||||
do_remove_conv, do_auto_author, series, do_series_restart, \
|
||||
series_start_value, do_title_case, cover_action, clear_series, \
|
||||
pubdate, adddate, do_title_sort, languages, clear_languages = self.args
|
||||
pubdate, adddate, do_title_sort, languages, clear_languages, \
|
||||
restore_original = self.args
|
||||
|
||||
|
||||
# first loop: do author and title. These will commit at the end of each
|
||||
# operation, because each operation modifies the file system. We want to
|
||||
# first loop: All changes that modify the filesystem and commit
|
||||
# immediately. We want to
|
||||
# try hard to keep the DB and the file system in sync, even in the face
|
||||
# of exceptions or forced exits.
|
||||
if self.current_phase == 1:
|
||||
@@ -196,6 +199,27 @@ class MyBlockingBusy(QDialog): # {{{
|
||||
if covers:
|
||||
self.db.set_cover(id, covers[-1][0])
|
||||
covers = []
|
||||
|
||||
if do_remove_format:
|
||||
self.db.remove_format(id, remove_format, index_is_id=True,
|
||||
notify=False, commit=True)
|
||||
|
||||
if restore_original:
|
||||
formats = self.db.formats(id, index_is_id=True)
|
||||
formats = formats.split(',') if formats else []
|
||||
originals = [x.upper() for x in formats if
|
||||
x.upper().startswith('ORIGINAL_')]
|
||||
for ofmt in originals:
|
||||
fmt = ofmt.replace('ORIGINAL_', '')
|
||||
with SpooledTemporaryFile(SPOOL_SIZE) as stream:
|
||||
self.db.copy_format_to(id, ofmt, stream,
|
||||
index_is_id=True)
|
||||
stream.seek(0)
|
||||
self.db.add_format(id, fmt, stream, index_is_id=True,
|
||||
notify=False)
|
||||
self.db.remove_format(id, ofmt, index_is_id=True,
|
||||
notify=False, commit=True)
|
||||
|
||||
elif self.current_phase == 2:
|
||||
# All of these just affect the DB, so we can tolerate a total rollback
|
||||
if do_auto_author:
|
||||
@@ -233,9 +257,6 @@ class MyBlockingBusy(QDialog): # {{{
|
||||
num = next if do_autonumber and series else 1.0
|
||||
self.db.set_series_index(id, num, notify=False, commit=False)
|
||||
|
||||
if do_remove_format:
|
||||
self.db.remove_format(id, remove_format, index_is_id=True, notify=False, commit=False)
|
||||
|
||||
if do_remove_conv:
|
||||
self.db.delete_conversion_options(id, 'PIPE', commit=False)
|
||||
|
||||
@@ -351,13 +372,13 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
|
||||
self.apply_pubdate.setChecked(True)
|
||||
|
||||
def clear_pubdate(self, *args):
|
||||
self.pubdate.setMinimumDateTime(UNDEFINED_QDATETIME)
|
||||
self.pubdate.setDateTime(UNDEFINED_QDATETIME)
|
||||
|
||||
def do_apply_adddate(self, *args):
|
||||
self.apply_adddate.setChecked(True)
|
||||
|
||||
def clear_adddate(self, *args):
|
||||
self.adddate.setMinimumDateTime(UNDEFINED_QDATETIME)
|
||||
self.adddate.setDateTime(UNDEFINED_QDATETIME)
|
||||
|
||||
def button_clicked(self, which):
|
||||
if which == self.button_box.button(QDialogButtonBox.Apply):
|
||||
@@ -936,6 +957,7 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
|
||||
do_title_case = self.change_title_to_title_case.isChecked()
|
||||
do_title_sort = self.update_title_sort.isChecked()
|
||||
clear_languages = self.clear_languages.isChecked()
|
||||
restore_original = self.restore_original.isChecked()
|
||||
languages = self.languages.lang_codes
|
||||
pubdate = adddate = None
|
||||
if self.apply_pubdate.isChecked():
|
||||
@@ -955,7 +977,8 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog):
|
||||
do_autonumber, do_remove_format, remove_format, do_swap_ta,
|
||||
do_remove_conv, do_auto_author, series, do_series_restart,
|
||||
series_start_value, do_title_case, cover_action, clear_series,
|
||||
pubdate, adddate, do_title_sort, languages, clear_languages)
|
||||
pubdate, adddate, do_title_sort, languages, clear_languages,
|
||||
restore_original)
|
||||
|
||||
bb = MyBlockingBusy(_('Applying changes to %d books.\nPhase {0} {1}%%.')
|
||||
%len(self.ids), args, self.db, self.ids,
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<string>Edit Meta information</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../../work/calibre/resources/images.qrc">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/edit_input.png</normaloff>:/images/edit_input.png</iconset>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
@@ -210,7 +210,7 @@
|
||||
<string>Open Tag Editor</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../work/calibre/resources/images.qrc">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/chapters.png</normaloff>:/images/chapters.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -381,7 +381,7 @@ from the value in the box</string>
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../work/calibre/resources/images.qrc">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/trash.png</normaloff>:/images/trash.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -429,7 +429,7 @@ from the value in the box</string>
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../work/calibre/resources/images.qrc">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/trash.png</normaloff>:/images/trash.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -443,7 +443,30 @@ from the value in the box</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<item row="11" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>&Languages:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>languages</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="1">
|
||||
<widget class="LanguagesEdit" name="languages"/>
|
||||
</item>
|
||||
<item row="11" column="2">
|
||||
<widget class="QCheckBox" name="clear_languages">
|
||||
<property name="text">
|
||||
<string>Remove &all</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Remove &format:</string>
|
||||
@@ -453,17 +476,44 @@ from the value in the box</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="1">
|
||||
<widget class="QComboBox" name="remove_format">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>120</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="12" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QComboBox" name="remove_format">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>120</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="restore_original">
|
||||
<property name="toolTip">
|
||||
<string>When doing a same format to same format conversion, for e.g., EPUB to EPUB, calibre saves the original EPUB as ORIGINAL_EPUB. This option tells calibre to restore the EPUB from ORIGINAL_EPUB. Useful if you did a bulk conversion of a large number of books and something went wrong.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Restore pre conversion &originals, if available</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<item row="13" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@@ -479,7 +529,7 @@ from the value in the box</string>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="15" column="0" colspan="3">
|
||||
<item row="14" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="change_title_to_title_case">
|
||||
@@ -529,7 +579,7 @@ Future conversion of these books will use the default settings.</string>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="16" column="0" colspan="3">
|
||||
<item row="15" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Change &cover</string>
|
||||
@@ -559,7 +609,7 @@ Future conversion of these books will use the default settings.</string>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="0">
|
||||
<item row="16" column="0">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@@ -572,29 +622,6 @@ Future conversion of these books will use the default settings.</string>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>&Languages:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>languages</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="1">
|
||||
<widget class="LanguagesEdit" name="languages"/>
|
||||
</item>
|
||||
<item row="11" column="2">
|
||||
<widget class="QCheckBox" name="clear_languages">
|
||||
<property name="text">
|
||||
<string>Remove &all</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab">
|
||||
@@ -1199,13 +1226,13 @@ not multiple and the destination field is multiple</string>
|
||||
<tabstop>languages</tabstop>
|
||||
<tabstop>clear_languages</tabstop>
|
||||
<tabstop>remove_format</tabstop>
|
||||
<tabstop>restore_original</tabstop>
|
||||
<tabstop>change_title_to_title_case</tabstop>
|
||||
<tabstop>update_title_sort</tabstop>
|
||||
<tabstop>remove_conversion_settings</tabstop>
|
||||
<tabstop>cover_generate</tabstop>
|
||||
<tabstop>cover_remove</tabstop>
|
||||
<tabstop>cover_from_fmt</tabstop>
|
||||
<tabstop>starting_from</tabstop>
|
||||
<tabstop>multiple_separator</tabstop>
|
||||
<tabstop>test_text</tabstop>
|
||||
<tabstop>test_result</tabstop>
|
||||
@@ -1229,9 +1256,10 @@ not multiple and the destination field is multiple</string>
|
||||
<tabstop>destination_field</tabstop>
|
||||
<tabstop>search_for</tabstop>
|
||||
<tabstop>case_sensitive</tabstop>
|
||||
<tabstop>starting_from</tabstop>
|
||||
</tabstops>
|
||||
<resources>
|
||||
<include location="../../../work/calibre/resources/images.qrc"/>
|
||||
<include location="../../../../resources/images.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
|
||||
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+597
-488
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+579
-484
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+583
-488
File diff suppressed because it is too large
Load Diff
+604
-504
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+589
-494
File diff suppressed because it is too large
Load Diff
+734
-639
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+610
-490
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+814
-502
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+584
-486
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+615
-505
File diff suppressed because it is too large
Load Diff
+610
-515
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+608
-487
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+580
-485
File diff suppressed because it is too large
Load Diff
+585
-490
File diff suppressed because it is too large
Load Diff
+582
-485
File diff suppressed because it is too large
Load Diff
+580
-485
File diff suppressed because it is too large
Load Diff
+579
-484
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+613
-518
File diff suppressed because it is too large
Load Diff
+578
-483
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+580
-485
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+585
-488
File diff suppressed because it is too large
Load Diff
+577
-482
File diff suppressed because it is too large
Load Diff
+580
-485
File diff suppressed because it is too large
Load Diff
@@ -291,6 +291,11 @@ def clean_date_for_sort(dt, format):
|
||||
if not isinstance(dt, datetime):
|
||||
dt = datetime.combine(dt, time())
|
||||
|
||||
if hasattr(dt, 'tzinfo'):
|
||||
if dt.tzinfo is None:
|
||||
dt = dt.replace(tzinfo=_local_tz)
|
||||
dt = as_local_time(dt)
|
||||
|
||||
if format == 'iso':
|
||||
format = 'yyMdhms'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user