diff --git a/resources/images/news/elpais_impreso.png b/resources/images/news/elpais_impreso.png new file mode 100644 index 0000000000..35dcaf2d44 Binary files /dev/null and b/resources/images/news/elpais_impreso.png differ diff --git a/resources/recipes/ap.recipe b/resources/recipes/ap.recipe index 572c0aa392..0118cf0726 100644 --- a/resources/recipes/ap.recipe +++ b/resources/recipes/ap.recipe @@ -12,9 +12,9 @@ class AssociatedPress(BasicNewsRecipe): max_articles_per_feed = 15 html2lrf_options = ['--force-page-break-before-tag="chapter"'] - - - preprocess_regexps = [ (re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in + + + preprocess_regexps = [ (re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in [ (r'.*?' , lambda match : ''), (r'.*?', lambda match : ''), @@ -25,10 +25,10 @@ class AssociatedPress(BasicNewsRecipe): (r'

', lambda match : '

'), (r'Learn more about our Privacy Policy.*?', lambda match : ''), ] - ] - + ] + + - feeds = [ ('AP Headlines', 'http://hosted.ap.org/lineups/TOPHEADS-rss_2.0.xml?SITE=ORAST&SECTION=HOME'), ('AP US News', 'http://hosted.ap.org/lineups/USHEADS-rss_2.0.xml?SITE=CAVIC&SECTION=HOME'), ('AP World News', 'http://hosted.ap.org/lineups/WORLDHEADS-rss_2.0.xml?SITE=SCAND&SECTION=HOME'), @@ -38,4 +38,4 @@ class AssociatedPress(BasicNewsRecipe): ('AP Health News', 'http://hosted.ap.org/lineups/HEALTHHEADS-rss_2.0.xml?SITE=FLDAY&SECTION=HOME'), ('AP Science News', 'http://hosted.ap.org/lineups/SCIENCEHEADS-rss_2.0.xml?SITE=OHCIN&SECTION=HOME'), ('AP Strange News', 'http://hosted.ap.org/lineups/STRANGEHEADS-rss_2.0.xml?SITE=WCNC&SECTION=HOME'), - ] \ No newline at end of file + ] diff --git a/resources/recipes/elpais_impreso.recipe b/resources/recipes/elpais_impreso.recipe new file mode 100644 index 0000000000..b30db0707a --- /dev/null +++ b/resources/recipes/elpais_impreso.recipe @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic ' +''' +www.elpais.com/diario/ +''' + +from calibre import strftime +from calibre.web.feeds.news import BasicNewsRecipe + +class ElPaisImpresa(BasicNewsRecipe): + title = 'El País - edicion impresa' + __author__ = 'Darko Miletic' + description = 'el periodico global en Español' + publisher = 'EDICIONES EL PAIS, S.L.' + category = 'news, politics,Spain,actualidad,noticias,informacion,videos,fotografias,audios,graficos,nacional,internacional,deportes,economia,tecnologia,cultura,gente,television,sociedad,opinion,blogs,foros,chats,encuestas,entrevistas,participacion' + no_stylesheets = True + encoding = 'latin1' + use_embedded_content = False + language = 'es' + publication_type = 'newspaper' + masthead_url = 'http://www.elpais.com/im/tit_logo_global.gif' + index = 'http://www.elpais.com/diario/' + extra_css = ' p{text-align: justify} body{ text-align: left; font-family: Georgia,"Times New Roman",Times,serif } h2{font-family: Arial,Helvetica,sans-serif} img{margin-bottom: 0.4em} ' + + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + } + + feeds = [ + (u'Internacional' , index + u'internacional/' ) + ,(u'España' , index + u'espana/' ) + ,(u'Economia' , index + u'economia/' ) + ,(u'Opinion' , index + u'opinion/' ) + ,(u'Viñetas' , index + u'vineta/' ) + ,(u'Sociedad' , index + u'sociedad/' ) + ,(u'Cultura' , index + u'cultura/' ) + ,(u'Tendencias' , index + u'tendencias/' ) + ,(u'Gente' , index + u'gente/' ) + ,(u'Obituarios' , index + u'obituarios/' ) + ,(u'Deportes' , index + u'deportes/' ) + ,(u'Pantallas' , index + u'radioytv/' ) + ,(u'Ultima' , index + u'ultima/' ) + ,(u'Educacion' , index + u'educacion/' ) + ,(u'Saludo' , index + u'salud/' ) + ,(u'Ciberpais' , index + u'ciberpais/' ) + ,(u'EP3' , index + u'ep3/' ) + ,(u'Cine' , index + u'cine/' ) + ,(u'Babelia' , index + u'babelia/' ) + ,(u'El viajero' , index + u'viajero/' ) + ,(u'Negocios' , index + u'negocios/' ) + ,(u'Domingo' , index + u'domingo/' ) + ,(u'El Pais semanal' , index + u'eps/' ) + ,(u'Quadern Catalunya' , index + u'quadern-catalunya/' ) + ] + + keep_only_tags=[dict(attrs={'class':['cabecera_noticia','contenido_noticia']})] + remove_attributes=['width','height'] + remove_tags=[dict(name='link')] + + def parse_index(self): + totalfeeds = [] + lfeeds = self.get_feeds() + for feedobj in lfeeds: + feedtitle, feedurl = feedobj + self.report_progress(0, _('Fetching feed')+' %s...'%(feedtitle if feedtitle else feedurl)) + articles = [] + soup = self.index_to_soup(feedurl) + for item in soup.findAll('a',attrs={'class':['g19r003','g19i003','g17r003','g17i003']}): + url = 'http://www.elpais.com' + item['href'].rpartition('/')[0] + title = self.tag_to_string(item) + date = strftime(self.timefmt) + articles.append({ + 'title' :title + ,'date' :date + ,'url' :url + ,'description':'' + }) + totalfeeds.append((feedtitle, articles)) + return totalfeeds + + def print_version(self, url): + return url + '?print=1' diff --git a/src/calibre/gui2/layout.py b/src/calibre/gui2/layout.py index c44efa2354..1c853cbdff 100644 --- a/src/calibre/gui2/layout.py +++ b/src/calibre/gui2/layout.py @@ -403,7 +403,7 @@ class MainWindowMixin(object): ac('add', _('Add books'), 'add_book.svg', _('A')) ac('del', _('Remove books'), 'trash.svg', _('Del')) - ac('edit', _('Edit meta info'), 'edit_input.svg', _('E')) + ac('edit', _('Edit metadata'), 'edit_input.svg', _('E')) ac('merge', _('Merge book records'), 'merge_books.svg', _('M')) ac('sync', _('Send to device'), 'sync.svg') ac('save', _('Save to disk'), 'save.svg', _('S')) diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index 529055ecd2..40f7a2e4e0 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -96,7 +96,7 @@ class DateDelegate(QStyledItemDelegate): # {{{ def displayText(self, val, locale): d = val.toDate() - if d == UNDEFINED_QDATE: + if d <= UNDEFINED_QDATE: return '' return format_date(d.toPyDate(), 'dd MMM yyyy') @@ -116,7 +116,7 @@ class PubDateDelegate(QStyledItemDelegate): # {{{ def displayText(self, val, locale): d = val.toDate() - if d == UNDEFINED_QDATE: + if d <= UNDEFINED_QDATE: return '' format = tweaks['gui_pubdate_display_format'] if format is None: @@ -194,7 +194,7 @@ class CcDateDelegate(QStyledItemDelegate): # {{{ def displayText(self, val, locale): d = val.toDate() - if d == UNDEFINED_QDATE: + if d <= UNDEFINED_QDATE: return '' return format_date(d.toPyDate(), self.format) @@ -217,7 +217,7 @@ class CcDateDelegate(QStyledItemDelegate): # {{{ def setModelData(self, editor, model, index): val = editor.date() - if val == UNDEFINED_QDATE: + if val <= UNDEFINED_QDATE: val = None model.setData(index, QVariant(val), Qt.EditRole) diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index d46ae23d90..af950a36fc 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -209,13 +209,13 @@ class ResultCache(SearchQueryParser): if query == 'false': for item in self._data: if item is None: continue - if item[loc] is None or item[loc] == UNDEFINED_DATE: + if item[loc] is None or item[loc] <= UNDEFINED_DATE: matches.add(item[0]) return matches if query == 'true': for item in self._data: if item is None: continue - if item[loc] is not None and item[loc] != UNDEFINED_DATE: + if item[loc] is not None and item[loc] > UNDEFINED_DATE: matches.add(item[0]) return matches