diff --git a/src/calibre/gui2/store/feedbooks_plugin.py b/src/calibre/gui2/store/feedbooks_plugin.py
index 5c5d430a05..9a3fb163df 100644
--- a/src/calibre/gui2/store/feedbooks_plugin.py
+++ b/src/calibre/gui2/store/feedbooks_plugin.py
@@ -23,6 +23,7 @@ class FeedbooksStore(StorePlugin):
from calibre.gui2.store.web_store_dialog import WebStoreDialog
d = WebStoreDialog(gui, 'http://m.feedbooks.com/', parent, detail_item)
d.setWindowTitle(self.name)
+ d.set_tags(self.name + ',' + _('store'))
d = d.exec_()
def search(self, query, max_results=10, timeout=60):
diff --git a/src/calibre/gui2/store/gutenberg_plugin.py b/src/calibre/gui2/store/gutenberg_plugin.py
index 6917165474..a039ae2c66 100644
--- a/src/calibre/gui2/store/gutenberg_plugin.py
+++ b/src/calibre/gui2/store/gutenberg_plugin.py
@@ -23,6 +23,7 @@ class GutenbergStore(StorePlugin):
from calibre.gui2.store.web_store_dialog import WebStoreDialog
d = WebStoreDialog(gui, 'http://m.gutenberg.org/', parent, detail_item)
d.setWindowTitle(self.name)
+ d.set_tags(self.name + ',' + _('store'))
d = d.exec_()
def search(self, query, max_results=10, timeout=60):
diff --git a/src/calibre/gui2/store/manybooks_plugin.py b/src/calibre/gui2/store/manybooks_plugin.py
index ac9cac5323..3f85c6bec3 100644
--- a/src/calibre/gui2/store/manybooks_plugin.py
+++ b/src/calibre/gui2/store/manybooks_plugin.py
@@ -24,6 +24,7 @@ class ManyBooksStore(StorePlugin):
from calibre.gui2.store.web_store_dialog import WebStoreDialog
d = WebStoreDialog(gui, 'http://manybooks.net/', parent, detail_item)
d.setWindowTitle(self.name)
+ d.set_tags(self.name + ',' + _('store'))
d = d.exec_()
def search(self, query, max_results=10, timeout=60):
diff --git a/src/calibre/gui2/store/search.ui b/src/calibre/gui2/store/search.ui
index 9d14874f10..2ee02b4632 100644
--- a/src/calibre/gui2/store/search.ui
+++ b/src/calibre/gui2/store/search.ui
@@ -55,8 +55,48 @@
+ -
+
+
+ QDialogButtonBox::Close
+
+
+
-
+
+
+ buttonBox
+ accepted()
+ Dialog
+ accept()
+
+
+ 307
+ 524
+
+
+ 307
+ 272
+
+
+
+
+ buttonBox
+ rejected()
+ Dialog
+ accept()
+
+
+ 307
+ 524
+
+
+ 307
+ 272
+
+
+
+
diff --git a/src/calibre/gui2/store/smashwords_plugin.py b/src/calibre/gui2/store/smashwords_plugin.py
index c4eb1bb741..5b84ce58ad 100644
--- a/src/calibre/gui2/store/smashwords_plugin.py
+++ b/src/calibre/gui2/store/smashwords_plugin.py
@@ -24,6 +24,7 @@ class SmashwordsStore(StorePlugin):
from calibre.gui2.store.web_store_dialog import WebStoreDialog
d = WebStoreDialog(gui, 'http://www.smashwords.com/?ref=usernone', parent, detail_item)
d.setWindowTitle(self.name)
+ d.set_tags(self.name + ',' + _('store'))
d = d.exec_()
def search(self, query, max_results=10, timeout=60):
diff --git a/src/calibre/gui2/store/web_control.py b/src/calibre/gui2/store/web_control.py
index 6b149cdd32..e73279ce58 100644
--- a/src/calibre/gui2/store/web_control.py
+++ b/src/calibre/gui2/store/web_control.py
@@ -18,6 +18,7 @@ class NPWebView(QWebView):
def __init__(self, *args):
QWebView.__init__(self, *args)
self.gui = None
+ self.tags = ''
self.setPage(NPWebPage())
self.page().networkAccessManager().setCookieJar(QNetworkCookieJar())
@@ -35,6 +36,9 @@ class NPWebView(QWebView):
def set_gui(self, gui):
self.gui = gui
+ def set_tags(self, tags):
+ self.tags = tags
+
def start_download(self, request):
if not self.gui:
return
@@ -56,7 +60,7 @@ class NPWebView(QWebView):
if name:
self.gui.download_from_store(url, cj, name, False)
else:
- self.gui.download_from_store(url, cj)
+ self.gui.download_from_store(url, cj, tags=self.tags)
def ignore_ssl_errors(self, reply, errors):
reply.ignoreSslErrors(errors)
diff --git a/src/calibre/gui2/store/web_store_dialog.py b/src/calibre/gui2/store/web_store_dialog.py
index fcb294cd69..0c032e26e0 100644
--- a/src/calibre/gui2/store/web_store_dialog.py
+++ b/src/calibre/gui2/store/web_store_dialog.py
@@ -30,6 +30,9 @@ class WebStoreDialog(QDialog, Ui_Dialog):
self.go_home(detail_item=detail_item)
+ def set_tags(self, tags):
+ self.view.set_tags(tags)
+
def load_started(self):
self.progress.setValue(0)
diff --git a/src/calibre/gui2/store/web_store_dialog.ui b/src/calibre/gui2/store/web_store_dialog.ui
index e2f15607ce..b89b9305be 100644
--- a/src/calibre/gui2/store/web_store_dialog.ui
+++ b/src/calibre/gui2/store/web_store_dialog.ui
@@ -17,7 +17,7 @@
true
- -
+
-
QFrame::StyledPanel
@@ -72,6 +72,13 @@
+ -
+
+
+ Close
+
+
+
@@ -87,5 +94,22 @@
-
+
+
+ close
+ clicked()
+ Dialog
+ accept()
+
+
+ 917
+ 635
+
+
+ 480
+ 327
+
+
+
+
diff --git a/src/calibre/gui2/store_download.py b/src/calibre/gui2/store_download.py
index 7b0d68d454..b3c5e6279a 100644
--- a/src/calibre/gui2/store_download.py
+++ b/src/calibre/gui2/store_download.py
@@ -21,13 +21,13 @@ from calibre.utils.ipc.job import BaseJob
class StoreDownloadJob(BaseJob):
- def __init__(self, callback, description, job_manager, db, cookie_jar, url='', save_as_loc='', add_to_lib=True):
+ def __init__(self, callback, description, job_manager, db, cookie_jar, url='', save_as_loc='', add_to_lib=True, tags=[]):
BaseJob.__init__(self, description)
self.exception = None
self.job_manager = job_manager
self.db = db
self.cookie_jar = cookie_jar
- self.args = (url, save_as_loc, add_to_lib)
+ self.args = (url, save_as_loc, add_to_lib, tags)
self.tmp_file_name = ''
self.callback = callback
self.log_path = None
@@ -122,7 +122,7 @@ class StoreDownloader(Thread):
traceback.print_exc()
def _download(self, job):
- url, save_loc, add_to_lib = job.args
+ url, save_loc, add_to_lib, tags = job.args
if not url:
raise Exception(_('No file specified to download.'))
if not save_loc and not add_to_lib:
@@ -140,7 +140,7 @@ class StoreDownloader(Thread):
job.tmp_file_name = tf.name
def _add(self, job):
- url, save_loc, add_to_lib = job.args
+ url, save_loc, add_to_lib, tags = job.args
if not add_to_lib and job.tmp_file_name:
return
ext = os.path.splitext(job.tmp_file_name)[1][1:].lower()
@@ -152,19 +152,20 @@ class StoreDownloader(Thread):
from calibre.ebooks.metadata.meta import get_metadata
with open(job.tmp_file_name) as f:
mi = get_metadata(f, ext)
+ mi.tags.extend(tags)
job.db.add_books([job.tmp_file_name], [ext], [mi])
def _save_as(self, job):
- url, save_loc, add_to_lib = job.args
+ url, save_loc, add_to_lib, tags = job.args
if not save_loc and job.tmp_file_name:
return
shutil.copy(job.tmp_file_name, save_loc)
- def download_from_store(self, callback, db, cookie_jar, url='', save_as_loc='', add_to_lib=True):
+ def download_from_store(self, callback, db, cookie_jar, url='', save_as_loc='', add_to_lib=True, tags=[]):
description = _('Downloading %s') % url
- job = StoreDownloadJob(callback, description, self.job_manager, db, cookie_jar, url, save_as_loc, add_to_lib)
+ job = StoreDownloadJob(callback, description, self.job_manager, db, cookie_jar, url, save_as_loc, add_to_lib, tags)
self.job_manager.add_job(job)
self.jobs.put(job)
@@ -174,10 +175,13 @@ class StoreDownloadMixin(object):
def __init__(self):
self.store_downloader = StoreDownloader(self.job_manager)
- def download_from_store(self, url='', cookie_jar=CookieJar(), save_as_loc='', add_to_lib=True):
+ def download_from_store(self, url='', cookie_jar=CookieJar(), save_as_loc='', add_to_lib=True, tags=[]):
if not self.store_downloader.is_alive():
self.store_downloader.start()
- self.store_downloader.download_from_store(Dispatcher(self.downloaded_from_store), self.library_view.model().db, cookie_jar, url, save_as_loc, add_to_lib)
+ if tags:
+ if isinstance(tags, basestring):
+ tags = tags.split(',')
+ self.store_downloader.download_from_store(Dispatcher(self.downloaded_from_store), self.library_view.model().db, cookie_jar, url, save_as_loc, add_to_lib, tags)
self.status_bar.show_message(_('Downloading') + ' ' + url, 3000)
def downloaded_from_store(self, job):