add tab to send queries
This commit is contained in:
parent
e524098842
commit
0f1ce1d4b1
6 changed files with 248 additions and 5 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright(C) 2010-2011 Romain Bignon
|
||||
# Copyright(C) 2010-2014 Romain Bignon
|
||||
#
|
||||
# This file is part of weboob.
|
||||
#
|
||||
|
|
@ -127,6 +127,12 @@ class AuMBackend(BaseBackend, CapMessages, CapMessagesPost, CapDating, CapChat,
|
|||
e.message = message % e.contact.name
|
||||
yield e
|
||||
|
||||
def iter_new_contacts(self):
|
||||
with self.browser:
|
||||
for _id in self.browser.search_profiles():#.difference(self.OPTIM_PROFILE_WALKER.visited_profiles):
|
||||
contact = Contact(_id, '', 0)
|
||||
yield contact
|
||||
|
||||
# ---- CapMessages methods ---------------------
|
||||
|
||||
def fill_thread(self, thread, fields):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright(C) 2010-2011 Romain Bignon
|
||||
# Copyright(C) 2010-2014 Romain Bignon
|
||||
#
|
||||
# This file is part of weboob.
|
||||
#
|
||||
|
|
@ -313,7 +313,7 @@ class ContactProfile(QWidget):
|
|||
self.display_photo()
|
||||
|
||||
def display_photo(self):
|
||||
if self.displayed_photo_idx >= len(self.contact.photos):
|
||||
if self.displayed_photo_idx >= len(self.contact.photos) or self.displayed_photo_idx < 0:
|
||||
self.displayed_photo_idx = len(self.contact.photos) - 1
|
||||
if self.displayed_photo_idx < 0:
|
||||
self.ui.photoUrlLabel.setText('')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright(C) 2010-2011 Romain Bignon
|
||||
# Copyright(C) 2010-2014 Romain Bignon
|
||||
#
|
||||
# This file is part of weboob.
|
||||
#
|
||||
|
|
@ -34,6 +34,7 @@ from .ui.main_window_ui import Ui_MainWindow
|
|||
from .status import AccountsStatus
|
||||
from .contacts import ContactsWidget
|
||||
from .events import EventsWidget
|
||||
from .search import SearchWidget
|
||||
|
||||
|
||||
class MainWindow(QtMainWindow):
|
||||
|
|
@ -54,6 +55,7 @@ class MainWindow(QtMainWindow):
|
|||
self.addTab(MessagesManager(self.weboob) if HAVE_BOOBMSG else None, self.tr('Messages'))
|
||||
self.addTab(ContactsWidget(self.weboob), self.tr('Contacts'))
|
||||
self.addTab(EventsWidget(self.weboob), self.tr('Events'))
|
||||
self.addTab(SearchWidget(self.weboob), self.tr('Search'))
|
||||
self.addTab(None, self.tr('Calendar'))
|
||||
self.addTab(None, self.tr('Optimizations'))
|
||||
|
||||
|
|
|
|||
104
weboob/applications/qhavedate/search.py
Normal file
104
weboob/applications/qhavedate/search.py
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright(C) 2010-2014 Romain Bignon
|
||||
#
|
||||
# This file is part of weboob.
|
||||
#
|
||||
# weboob is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# weboob is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from PyQt4.QtGui import QWidget
|
||||
from PyQt4.QtCore import SIGNAL
|
||||
|
||||
from weboob.tools.application.qt import QtDo
|
||||
|
||||
from .ui.search_ui import Ui_Search
|
||||
from .contacts import ContactProfile
|
||||
from .status import Account
|
||||
|
||||
|
||||
class SearchWidget(QWidget):
|
||||
def __init__(self, weboob, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
self.ui = Ui_Search()
|
||||
self.ui.setupUi(self)
|
||||
|
||||
self.weboob = weboob
|
||||
self.contacts = []
|
||||
self.accounts = []
|
||||
self.current = None
|
||||
|
||||
self.connect(self.ui.nextButton, SIGNAL('clicked()'), self.next)
|
||||
self.connect(self.ui.queryButton, SIGNAL('clicked()'), self.sendQuery)
|
||||
|
||||
def load(self):
|
||||
while self.ui.statusFrame.layout().count() > 0:
|
||||
item = self.ui.statusFrame.layout().takeAt(0)
|
||||
if item.widget():
|
||||
item.widget().deinit()
|
||||
item.widget().hide()
|
||||
item.widget().deleteLater()
|
||||
|
||||
self.accounts = []
|
||||
|
||||
for backend in self.weboob.iter_backends():
|
||||
account = Account(self.weboob, backend)
|
||||
account.title.setText(u'<h2>%s</h2>' % backend.name)
|
||||
self.accounts.append(account)
|
||||
self.ui.statusFrame.layout().addWidget(account)
|
||||
self.ui.statusFrame.layout().addStretch()
|
||||
|
||||
self.getNewProfiles()
|
||||
|
||||
def updateStats(self):
|
||||
for account in self.accounts:
|
||||
account.updateStats()
|
||||
|
||||
def getNewProfiles(self):
|
||||
self.newprofiles_process = QtDo(self.weboob, self.retrieveNewContacts_cb)
|
||||
self.newprofiles_process.do('iter_new_contacts')
|
||||
|
||||
def retrieveNewContacts_cb(self, backend, contact):
|
||||
if not backend:
|
||||
return
|
||||
|
||||
self.contacts.insert(0, contact)
|
||||
self.ui.queueLabel.setText('%d' % len(self.contacts))
|
||||
if self.current is None:
|
||||
self.next()
|
||||
|
||||
def next(self):
|
||||
try:
|
||||
contact = self.contacts.pop()
|
||||
except IndexError:
|
||||
contact = None
|
||||
|
||||
self.ui.queueLabel.setText('%d' % len(self.contacts))
|
||||
self.setContact(contact)
|
||||
self.updateStats()
|
||||
|
||||
def setContact(self, contact):
|
||||
self.current = contact
|
||||
if contact is not None:
|
||||
widget = ContactProfile(self.weboob, contact)
|
||||
self.ui.scrollArea.setWidget(widget)
|
||||
else:
|
||||
self.ui.scrollArea.setWidget(None)
|
||||
|
||||
def sendQuery(self):
|
||||
self.newprofiles_process = QtDo(self.weboob, self.querySent)
|
||||
self.newprofiles_process.do('send_query', self.current.id, backends=[self.current.backend])
|
||||
|
||||
def querySent(self, backend, query):
|
||||
if backend is None:
|
||||
self.next()
|
||||
122
weboob/applications/qhavedate/ui/search.ui
Normal file
122
weboob/applications/qhavedate/ui/search.ui
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Search</class>
|
||||
<widget class="QWidget" name="Search">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>438</width>
|
||||
<height>349</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QFrame" name="statusFrame">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>4</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>300</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2"/>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="queueLabel">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string><b>Profiles in queue:</b></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="queryButton">
|
||||
<property name="text">
|
||||
<string>Query</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="nextButton">
|
||||
<property name="text">
|
||||
<string>Next</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>178</width>
|
||||
<height>235</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright(C) 2010-2011 Romain Bignon
|
||||
# Copyright(C) 2010-2014 Romain Bignon
|
||||
#
|
||||
# This file is part of weboob.
|
||||
#
|
||||
|
|
@ -147,3 +147,12 @@ class CapDating(CapBase):
|
|||
:rtype: iter[:class:`Event`]
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def iter_new_contacts(self):
|
||||
"""
|
||||
Iter new contacts.
|
||||
|
||||
:rtype: iter[:class:`Contact`]
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue