From 8a774daaeeb620bdf2167c3edb07fd745d5e58f1 Mon Sep 17 00:00:00 2001 From: Bezleputh Date: Wed, 16 Oct 2013 20:58:56 +0200 Subject: [PATCH] [Qhandjoob] improve qhandjoob --- weboob/applications/qhandjoob/main_window.py | 66 +++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/weboob/applications/qhandjoob/main_window.py b/weboob/applications/qhandjoob/main_window.py index 06eeb8aa..8958dc9b 100644 --- a/weboob/applications/qhandjoob/main_window.py +++ b/weboob/applications/qhandjoob/main_window.py @@ -17,8 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from PyQt4.QtGui import QListWidgetItem -from PyQt4.QtCore import SIGNAL +from PyQt4.QtGui import QListWidgetItem, QApplication, QCompleter +from PyQt4.QtCore import SIGNAL, Qt, QStringList from weboob.tools.application.qt import QtMainWindow, QtDo from weboob.tools.application.qt.backendcfg import BackendCfg @@ -26,6 +26,9 @@ from weboob.capabilities.job import ICapJob from .ui.main_window_ui import Ui_MainWindow +import os +import codecs + class JobListWidgetItem(QListWidgetItem): def __init__(self, job, *args, **kwargs): @@ -33,7 +36,10 @@ class JobListWidgetItem(QListWidgetItem): self.job = job def __lt__(self, other): - return self.job.publication_date < other.job.publication_date + if self.job.publication_date and other.job.publication_date: + return self.job.publication_date < other.job.publication_date + else: + return False def setAttrs(self, storage): text = u'%s - %s' % (self.job.backend, self.job.title) @@ -54,6 +60,10 @@ class MainWindow(QtMainWindow): self.process_photo = {} self.process_bookmarks = {} + # search history is a list of patterns which have been searched + self.search_history = self.loadSearchHistory() + self.updateCompletion() + self.ui.jobFrame.hide() self.connect(self.ui.actionBackends, SIGNAL("triggered()"), self.backendsConfig) @@ -71,17 +81,55 @@ class MainWindow(QtMainWindow): if self.weboob.count_backends() == 0: self.backendsConfig() + def loadSearchHistory(self): + ''' Return search string history list loaded from history file + ''' + result = [] + history_path = os.path.join(self.weboob.workdir, 'qhandjoob_history') + if os.path.exists(history_path): + f = codecs.open(history_path, 'r', 'utf-8') + conf_hist = f.read() + f.close() + if conf_hist is not None and conf_hist.strip() != '': + result = conf_hist.strip().split('\n') + return result + + def saveSearchHistory(self): + ''' Save search history in history file + ''' + if len(self.search_history) > 0: + history_path = os.path.join(self.weboob.workdir, 'qhandjoob_history') + f = codecs.open(history_path, 'w', 'utf-8') + f.write('\n'.join(self.search_history)) + f.close() + + def updateCompletion(self): + qc = QCompleter(QStringList(self.search_history), self) + qc.setCaseSensitivity(Qt.CaseInsensitive) + self.ui.searchEdit.setCompleter(qc) + def tabChange(self, index): if index == 1: self.doAdvancedSearch() def doAdvancedSearch(self): + QApplication.setOverrideCursor(Qt.WaitCursor) self.ui.jobListAdvancedSearch.clear() self.process = QtDo(self.weboob, self.addJobAdvancedSearch) self.process.do('advanced_search_job') def doSearch(self): + QApplication.setOverrideCursor(Qt.WaitCursor) pattern = unicode(self.ui.searchEdit.text()) + + # arbitrary max number of completion word + if pattern: + if len(self.search_history) > 50: + self.search_history.pop(0) + if pattern not in self.search_history: + self.search_history.append(pattern) + self.updateCompletion() + self.ui.jobList.clear() self.process = QtDo(self.weboob, self.addJobSearch) self.process.do('search_job', pattern) @@ -91,11 +139,17 @@ class MainWindow(QtMainWindow): if item: self.ui.jobList.addItem(item) + if not backend: + QApplication.restoreOverrideCursor() + def addJobAdvancedSearch(self, backend, job): item = self.addJob(backend, job) if item: self.ui.jobListAdvancedSearch.addItem(item) + if not backend: + QApplication.restoreOverrideCursor() + def addJob(self, backend, job): if not backend: self.process = None @@ -109,6 +163,7 @@ class MainWindow(QtMainWindow): return item def closeEvent(self, event): + self.saveSearchHistory() QtMainWindow.closeEvent(self, event) def backendsConfig(self): @@ -117,6 +172,7 @@ class MainWindow(QtMainWindow): pass def jobSelected(self, item, prev): + QApplication.setOverrideCursor(Qt.WaitCursor) if item is not None: job = item.job self.ui.queriesTabWidget.setEnabled(False) @@ -133,6 +189,7 @@ class MainWindow(QtMainWindow): prev.setAttrs(self.storage) def openJob(self): + QApplication.setOverrideCursor(Qt.WaitCursor) url = unicode(self.ui.idEdit.text()) if not url: return @@ -146,6 +203,7 @@ class MainWindow(QtMainWindow): self.setJob(job) self.ui.idEdit.clear() + QApplication.restoreOverrideCursor() def gotJob(self, backend, job): if not backend: @@ -172,3 +230,5 @@ class MainWindow(QtMainWindow): self.ui.jobFrame.show() else: self.ui.jobFrame.hide() + + QApplication.restoreOverrideCursor()