diff --git a/imgsrc/trim.svg b/imgsrc/trim.svg
new file mode 100644
index 0000000000..8c8810fc66
--- /dev/null
+++ b/imgsrc/trim.svg
@@ -0,0 +1,688 @@
+
+
+
+
diff --git a/resources/images/trim.png b/resources/images/trim.png
new file mode 100644
index 0000000000..3cb93adfa6
Binary files /dev/null and b/resources/images/trim.png differ
diff --git a/resources/recipes/wsj.recipe b/resources/recipes/wsj.recipe
index fd5e977d10..88e07bcea3 100644
--- a/resources/recipes/wsj.recipe
+++ b/resources/recipes/wsj.recipe
@@ -70,13 +70,16 @@ class WallStreetJournal(BasicNewsRecipe):
def wsj_add_feed(self,feeds,title,url):
self.log('Found section:', title)
- if url.endswith('whatsnews'):
- articles = self.wsj_find_wn_articles(url)
- else:
- articles = self.wsj_find_articles(url)
+ try:
+ if url.endswith('whatsnews'):
+ articles = self.wsj_find_wn_articles(url)
+ else:
+ articles = self.wsj_find_articles(url)
+ except:
+ articles = []
if articles:
feeds.append((title, articles))
- return feeds
+ return feeds
def parse_index(self):
soup = self.wsj_get_index()
@@ -99,7 +102,7 @@ class WallStreetJournal(BasicNewsRecipe):
url = 'http://online.wsj.com' + a['href']
feeds = self.wsj_add_feed(feeds,title,url)
title = 'What''s News'
- url = url.replace('pageone','whatsnews')
+ url = url.replace('pageone','whatsnews')
feeds = self.wsj_add_feed(feeds,title,url)
else:
title = self.tag_to_string(a)
@@ -141,7 +144,7 @@ class WallStreetJournal(BasicNewsRecipe):
articles = []
flavorarea = soup.find('div', attrs={'class':lambda x: x and 'ahed' in x})
- if flavorarea is not None:
+ if flavorarea is not None:
flavorstory = flavorarea.find('a', href=lambda x: x and x.startswith('/article'))
if flavorstory is not None:
flavorstory['class'] = 'mjLinkItem'
diff --git a/resources/recipes/wsj_free.recipe b/resources/recipes/wsj_free.recipe
index 7f3664f1c4..df8234e8e2 100644
--- a/resources/recipes/wsj_free.recipe
+++ b/resources/recipes/wsj_free.recipe
@@ -54,10 +54,13 @@ class WallStreetJournal(BasicNewsRecipe):
def wsj_add_feed(self,feeds,title,url):
self.log('Found section:', title)
- if url.endswith('whatsnews'):
- articles = self.wsj_find_wn_articles(url)
- else:
- articles = self.wsj_find_articles(url)
+ try:
+ if url.endswith('whatsnews'):
+ articles = self.wsj_find_wn_articles(url)
+ else:
+ articles = self.wsj_find_articles(url)
+ except:
+ articles = []
if articles:
feeds.append((title, articles))
return feeds
diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py
index 26dbda6ca4..53788809b6 100644
--- a/src/calibre/gui2/dialogs/metadata_single.py
+++ b/src/calibre/gui2/dialogs/metadata_single.py
@@ -300,6 +300,24 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog):
self.cpixmap = pix
self.cover_data = cdata
+ def trim_cover(self, *args):
+ from calibre.utils.magick import Image
+ cdata = self.cover_data
+ if not cdata:
+ return
+ im = Image()
+ im.load(cdata)
+ im.trim(10)
+ cdata = im.export('jpg')
+ pix = QPixmap()
+ pix.loadFromData(cdata)
+ self.cover.setPixmap(pix)
+ self.cover_changed = True
+ self.cpixmap = pix
+ self.cover_data = cdata
+
+
+
def sync_formats(self):
old_extensions, new_extensions, paths = set(), set(), {}
for row in range(self.formats.count()):
@@ -380,6 +398,7 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog):
self.remove_unused_series)
QObject.connect(self.auto_author_sort, SIGNAL('clicked()'),
self.deduce_author_sort)
+ self.trim_cover_button.clicked.connect(self.trim_cover)
self.connect(self.author_sort, SIGNAL('textChanged(const QString&)'),
self.author_sort_box_changed)
self.connect(self.authors, SIGNAL('editTextChanged(const QString&)'),
diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui
index 74febf9c29..dbf825e706 100644
--- a/src/calibre/gui2/dialogs/metadata_single.ui
+++ b/src/calibre/gui2/dialogs/metadata_single.ui
@@ -625,6 +625,17 @@ Using this button to create author sort will change author sort from red to gree
+ -
+
+
+ Remove border (if any) from cover
+
+
+
+ :/images/trim.png:/images/trim.png
+
+
+
-