diff --git a/src/calibre/gui2/dialogs/config.py b/src/calibre/gui2/dialogs/config.py index a2c77187b5..1d1b220f60 100644 --- a/src/calibre/gui2/dialogs/config.py +++ b/src/calibre/gui2/dialogs/config.py @@ -199,7 +199,7 @@ class EmailAccounts(QAbstractTableModel): return (account, self.accounts[account]) if role == Qt.ToolTipRole: return self.tooltips[col] - if role == Qt.DisplayRole: + if role in [Qt.DisplayRole, Qt.EditRole]: if col == 0: return QVariant(account) if col == 1: diff --git a/src/calibre/gui2/images/news/msdnmag_en.png b/src/calibre/gui2/images/news/msdnmag_en.png new file mode 100644 index 0000000000..05308b62c4 Binary files /dev/null and b/src/calibre/gui2/images/news/msdnmag_en.png differ diff --git a/src/calibre/web/feeds/recipes/__init__.py b/src/calibre/web/feeds/recipes/__init__.py index e35d1f0ff8..43d25b876f 100644 --- a/src/calibre/web/feeds/recipes/__init__.py +++ b/src/calibre/web/feeds/recipes/__init__.py @@ -38,7 +38,7 @@ recipe_modules = ['recipe_' + r for r in ( 'mondedurable', 'instapaper', 'dnevnik_cro', 'vecernji_list', 'nacional_cro', '24sata', 'dnevni_avaz', 'glas_srpske', '24sata_rs', 'krstarica', 'krstarica_en', 'tanjug', 'laprensa_ni', 'azstarnet', - 'corriere_della_sera_it', 'corriere_della_sera_en', + 'corriere_della_sera_it', 'corriere_della_sera_en', 'msdnmag_en', )] import re, imp, inspect, time, os diff --git a/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py b/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py new file mode 100644 index 0000000000..09813c1a70 --- /dev/null +++ b/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python + +__license__ = 'GPL v3' +__copyright__ = '2009, Darko Miletic ' +''' +msdn.microsoft.com/en-us/magazine +''' +from calibre.web.feeds.news import BasicNewsRecipe + +class MSDNMagazine_en(BasicNewsRecipe): + title = 'MSDN Magazine' + __author__ = 'Darko Miletic' + description = 'The Microsoft Journal for Developers' + publisher = 'Microsoft Press' + category = 'news, IT, Microsoft, programming, windows' + oldest_article = 31 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + encoding = 'utf-8' + remove_javascript = True + current_issue = 'http://msdn.microsoft.com/en-us/magazine/default.aspx' + language = _('English') + + html2lrf_options = [ + '--comment', description + , '--category', category + , '--publisher', publisher + ] + + html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"' + + feeds = [(u'Articles', u'http://msdn.microsoft.com/en-us/magazine/rss/default.aspx?z=z&iss=1')] + + keep_only_tags = [dict(name='div', attrs={'class':'topic'})] + + remove_tags = [ + dict(name=['object','link','base','table']) + ,dict(name='div', attrs={'class':'MTPS_CollapsibleRegion'}) + ] + + def get_cover_url(self): + cover_url = None + soup = self.index_to_soup(self.current_issue) + link_item = soup.find('span',attrs={'class':'ContentsImageSpacer'}) + if link_item: + imgt = link_item.find('img') + if imgt: + cover_url = imgt['src'] + return cover_url + + + def preprocess_html(self, soup): + for item in soup.findAll('div',attrs={'class':['FeatureSmallHead','ColumnTypeSubTitle']}): + item.name="h2" + for item in soup.findAll('div',attrs={'class':['FeatureHeadline','ColumnTypeTitle']}): + item.name="h1" + for item in soup.findAll('div',attrs={'class':'ArticleTypeTitle'}): + item.name="h3" + return soup + \ No newline at end of file