Changeset 721
- Timestamp:
- 07/20/08 07:43:36 (4 months ago)
- Files:
-
- oss/jlib/designer/ui/createnodedialog.ui (modified) (3 diffs)
- oss/jlib/designer/ui/subscribenodedialog.ui (added)
- oss/jlib/examples/basic/client.py (modified) (8 diffs)
- oss/jlib/jlib/core/connection.py (modified) (1 diff)
- oss/jlib/jlib/core/pubsub.py (modified) (13 diffs)
- oss/jlib/jlib/gui/pubsub/node.py (modified) (3 diffs)
- oss/jlib/jlib/gui/pubsub/subscribenodedialog.py (added)
- oss/jlib/jlib/gui/pubsub/subscribenodedialogui.py (added)
- oss/jlib/jlib/gui/pubsub/subscription.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
oss/jlib/designer/ui/createnodedialog.ui
r719 r721 7 7 <y>0</y> 8 8 <width>405</width> 9 <height>7 0</height>9 <height>73</height> 10 10 </rect> 11 11 </property> … … 13 13 <string>Dialog</string> 14 14 </property> 15 <layout class="QGridLayout" name="gridLayout">15 <layout class="QGridLayout" > 16 16 <item row="0" column="0" > 17 17 <widget class="QLabel" name="label" > … … 30 30 </property> 31 31 <property name="standardButtons" > 32 <set>QDialogButtonBox::Cancel|QDialogButtonBox:: Ok</set>32 <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> 33 33 </property> 34 34 </widget> oss/jlib/examples/basic/client.py
r720 r721 11 11 from jlib.gui.pubsub.feature import jlibPubSubFeatureWidget 12 12 from jlib.core.pubsub import jlibSubscriptionDiscoveryModel, \ 13 jlibFeatureDiscoveryModel, jlibAffiliationDiscoveryModel 13 jlibFeatureDiscoveryModel, jlibAffiliationDiscoveryModel,\ 14 jlibNodeItem, jlibNodeItemModel 14 15 15 16 from clientui import Ui_MainWindow … … 26 27 self.actionStart.setEnabled(False) 27 28 self.actionStop.setEnabled(False) 29 self.options = parse_commandline() 28 30 29 31 self.openedChats = [] … … 44 46 self.affsUi = jlibPubSubAffiliationWidget(parent=self.page_5) 45 47 46 self.toolBox.setItemText(4, " Nodes")48 self.toolBox.setItemText(4, "Items") 47 49 self.nodesUi = jlibPubSubNodeWidget(parent=self.page_4) 48 50 … … 51 53 self.clientReady) 52 54 self.connection.emit(QtCore.SIGNAL("activateChat()")) 53 self.connection.emit(QtCore.SIGNAL("activatePubSub(PyQt_PyObject)"), u 'pubsub.localhost')55 self.connection.emit(QtCore.SIGNAL("activatePubSub(PyQt_PyObject)"), unicode(self.options.pubsub)) 54 56 self.connection.emit(QtCore.SIGNAL("registerLinkages(PyQt_PyObject)"), self.contactUi.contact) 55 57 self.connection.emit(QtCore.SIGNAL("registerLinkages(PyQt_PyObject)"), self.contactUi.presence) … … 67 69 self.dialog = jlibConnectionDialog() 68 70 69 # Just because I can't be bothered to type them over and over again 70 self.dialog.connection.domain.setText('localhost') 71 host, port = self.options.address.rsplit(':', 1) 72 73 self.dialog.connection.username.setText(self.options.username) 74 self.dialog.connection.password.setText(self.options.password) 75 self.dialog.connection.domain.setText(self.options.domain or 'localhost') 71 76 self.dialog.connection.resource.setText('Home') 72 self.dialog.connection.host.setText('localhost') 77 self.dialog.connection.host.setText(host) 78 self.dialog.connection.port.setText(port) 73 79 74 80 if self.dialog.exec_() == QtGui.QDialog.Accepted: … … 96 102 disco.emit(QtCore.SIGNAL("discoverAffiliations()")) 97 103 104 QtCore.QObject.connect(disco, QtCore.SIGNAL("receivedItems(PyQt_PyObject)"), 105 self.setItemsModel) 106 98 107 def setSubscriptionsModel(self, subscriptions): 99 108 model = jlibSubscriptionDiscoveryModel(parent=self.connection.qobj.discovery) 100 109 model.setSubscriptions(subscriptions) 110 self.subsUi.setPubSub(self.connection.qobj.pubsubnode) 111 self.subsUi.setDiscovery(self.connection.qobj.discovery) 101 112 self.subsUi.setModel(model) 102 113 … … 111 122 self.affsUi.setPubSub(self.connection.qobj.pubsubnode) 112 123 self.affsUi.setModel(model) 124 125 def setItemsModel(self, items): 126 model = jlibNodeItemModel(parent=self.connection.qobj.discovery) 127 model.setNodeItems(items) 128 self.nodesUi.setPubSub(self.connection.qobj.pubsubnode) 129 self.nodesUi.setModel(model) 113 130 114 131 def messageReceived(self, message): … … 131 148 self.tabWidget.setCurrentIndex(tab) 132 149 133 150 151 def parse_commandline(): 152 from optparse import OptionParser 153 parser = OptionParser() 154 parser.add_option("-u", "--username", dest="username", 155 help="Jabber username") 156 parser.add_option("-p", "--password", dest="password", 157 help="Jabber password") 158 parser.add_option("-d", "--domain", dest="domain", 159 help="Jabber domain") 160 parser.add_option("-a", "--address", dest="address", 161 help="Jabber server address (default: localhost:5222)") 162 parser.set_defaults(address='localhost:5222') 163 parser.add_option("-s", "--pubsub-service", dest="pubsub", 164 help="Jabber PubSub service name (default: pubsub.localhost)") 165 parser.set_defaults(pubsub='pubsub.localhost') 166 167 args = [str(arg) for arg in QtGui.QApplication.instance().arguments()] 168 (options, args) = parser.parse_args(args=args) 169 170 return options 171 134 172 if __name__ == "__main__": 135 173 import sys oss/jlib/jlib/core/connection.py
r719 r721 109 109 ClientStream.Outboxes["%s.publish" % XMPP_PUBSUB_NS] = "Pubsub item publication handler" 110 110 ClientStream.Outboxes["%s.retract" % XMPP_PUBSUB_NS] = "Pubsub item deletion handler" 111 ClientStream.Outboxes["%s.items" % XMPP_PUBSUB_NS] = "Pubsub item retrieval handler" 111 112 ClientStream.Outboxes["%s.x" % XMPP_PUBSUB_EVENT_NS] = "" 112 113 ClientStream.Outboxes["%s.event" % XMPP_PUBSUB_EVENT_NS] = "" oss/jlib/jlib/core/pubsub.py
r720 r721 25 25 'jlibFeatureItem', 'jlibFeatureDiscoveryModel', 26 26 'jlibAffiliationItem', 'jlibAffiliationDiscoveryModel', 27 'jlibPubSubNode', 'jlibPubSubNodeComponent'] 27 'jlibPubSubNode', 'jlibPubSubNodeComponent', 28 'jlibNodeItem', 'jlibNodeItemModel'] 28 29 29 30 class jlibPubSubDiscovery(QAxonObject): … … 70 71 71 72 def discoverNodeSubscriptions(self, node_name): 72 self._deliver( None, 'request-node-subscriptions-disco')73 self._deliver(node_name, 'request-node-subscriptions-disco') 73 74 74 75 def discoverItems(self, node_name): … … 290 291 291 292 def type(self): 292 return QtGui.QStandardItem.UserType + 10 4293 return QtGui.QStandardItem.UserType + 105 293 294 294 295 class jlibAffiliationDiscoveryModel(QtGui.QStandardItemModel): … … 349 350 QtCore.QObject.connect(self, QtCore.SIGNAL("unsubscribeNode(PyQt_PyObject)"), self.unsubscribeNode) 350 351 QtCore.QObject.connect(self, QtCore.SIGNAL("publishItem(PyQt_PyObject, PyQt_PyObject)"), self.publishItem) 351 QtCore.QObject.connect(self, QtCore.SIGNAL("deleteItem(PyQt_PyObject, PyQt_PyObject)"), self.deleteItem) 352 QtCore.QObject.connect(self, QtCore.SIGNAL("purgeCollectionNode(PyQt_PyObject)"), self.purgeCollectionNode) 352 QtCore.QObject.connect(self, QtCore.SIGNAL("deleteItem(PyQt_PyObject, PyQt_PyObject)"), self.deleteItem) 353 QtCore.QObject.connect(self, QtCore.SIGNAL("retrieveItem(PyQt_PyObject, PyQt_PyObject)"), self.retrieveItem) 354 QtCore.QObject.connect(self, QtCore.SIGNAL("purgeCollectionNode(PyQt_PyObject)"), self.purgeCollectionNode) 353 355 354 356 def setComponent(self, component): … … 364 366 ("xmpp", "%s.publish" % XMPP_PUBSUB_NS): ("pubsubdisp", "publish.inbox"), 365 367 ("xmpp", "%s.retract" % XMPP_PUBSUB_NS): ("pubsubdisp", "retract.inbox"), 368 ("xmpp", "%s.items" % XMPP_PUBSUB_NS): ("pubsubdisp", "retrieve.inbox"), 366 369 ("xmpp", "%s.x" % XMPP_PUBSUB_EVENT_NS): ("pubsubdisp", "message.inbox"), 367 370 ("xmpp", "%s.event" % XMPP_PUBSUB_EVENT_NS): ("pubsubdisp", "message.inbox"), … … 369 372 ("itemshandler", "create-node"): ("pubsubdisp", "create.forward"), 370 373 ("itemshandler", "delete-node"): ("pubsubdisp", "delete.forward"), 374 ("itemshandler", "retrieve-item"): ("pubsubdisp", "retrieve.forward"), 371 375 ("itemshandler", "subscribe-node"): ("pubsubdisp", "subscribe.forward"), 372 376 ("itemshandler", "unsubscribe-node"): ("pubsubdisp", "unsubscribe.forward"), … … 374 378 ('itemshandler', 'delete-item'): ('pubsubdisp', 'retract.forward'), 375 379 ('itemshandler', 'purge-collection-node'): ('pubsubdisp', 'purge.forward'), 380 ("pubsubdisp", "retrieve.outbox"): ("xmpp", "forward"), 376 381 ("pubsubdisp", "create.outbox"): ("xmpp", "forward"), 377 382 ("pubsubdisp", "delete.outbox"): ("xmpp", "forward"), … … 381 386 ("pubsubdisp", "publish.outbox"): ("xmpp", "forward"), 382 387 ("pubsubdisp", "retract.outbox"): ("xmpp", "forward"), 388 ("pubsubdisp", "out.retrieve.result"): ("itemshandler", "retrieved"), 383 389 ("pubsubdisp", "out.create.result"): ("itemshandler", "created"), 384 390 ("pubsubdisp", "out.subscribe.result"): ("itemshandler", "subscribed"), 385 391 ("pubsubdisp", "out.delete.result"): ("itemshandler", "deleted"), 392 ("pubsubdisp", "out.retrieve.error"): ("itemshandler", "error"), 386 393 ("pubsubdisp", "out.create.error"): ("itemshandler", "error"), 387 394 ("pubsubdisp", "out.delete.error"): ("itemshandler", "error"), … … 414 421 def purgeCollectionNode(self, node_id): 415 422 self._deliver(node_id, 'request-purge-collection-node') 423 424 def retrieveItem(self, node_id, item_id): 425 self._deliver((node_id, item_id), 'request-item') 416 426 417 427 class jlibPubSubNodeComponent(component): … … 427 437 "request-publish-item": "", 428 438 "request-delete-item": "", 439 "request-item": "", 429 440 "request-purge-collection-node": "", 430 441 431 442 "subscribed": "", 443 "retrieved": "", 432 444 "created": "", 433 445 "deleted" : "", … … 444 456 "publish-item" : "", 445 457 "delete-item" : "", 458 "retrieve-item": "", 446 459 "purge-collection-node": "", 447 460 "subscribe-node" : "", … … 487 500 p = Node(unicode(self.from_jid), self.pubsub_service, node_name=nodeid) 488 501 self.send(p, "create-node") 502 503 if self.dataReady('request-item'): 504 node_id, item_id = self.recv('request-item') 505 p = Node(unicode(self.from_jid), self.pubsub_service, type=u"get", 506 node_name=node_id, item=Item(id=item_id)) 507 self.send(p, "retrieve-item") 489 508 490 509 if self.dataReady('request-create-collection-node'): … … 532 551 533 552 yield 1 553 554 class jlibNodeItem(QtGui.QStandardItem): 555 def __init__(self, node_item): 556 QtGui.QStandardItem.__init__(self) 557 self.node_item = node_item 558 559 def type(self): 560 return QtGui.QStandardItem.UserType + 106 561 562 class jlibNodeItemModel(QtGui.QStandardItemModel): 563 def __init__(self, parent=None): 564 QtGui.QStandardItemModel.__init__(self, 0, 1, parent) 565 self.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Item ID")) 566 self.items = {} 567 568 def flags(self, index): 569 return QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled 570 571 def setNodeItems(self, node_items): 572 for item in node_items.items: 573 self.setNodeItem(item) 574 575 def hasNodeItem(self, item_id): 576 return item_id in self.items 577 578 def getNodeItemIndex(self, node_item): 579 item_id = str(node_item.name) 580 if self.hasNodeItem(item_id): 581 return self.items[item_id].index() 582 583 return QtCore.QModelIndex() 584 585 def getNodeItem(self, index): 586 return self.itemFromIndex(index) 587 588 def setNodeItem(self, node_item): 589 rootItem = self.invisibleRootItem() 590 591 item_id = str(node_item.name) 592 index = self.getNodeItemIndex(node_item) 593 if index.isValid(): 594 item = self.items[item_id] 595 else: 596 item = jlibNodeItem(node_item) 597 598 rootItem.appendRow(item) 599 self.setData(self.index(item.row(), 0), QtCore.QVariant(QtCore.QString(item_id)), 600 QtCore.Qt.DisplayRole) 601 602 self.items[item_id] = item 603 604 return item oss/jlib/jlib/gui/pubsub/node.py
r719 r721 16 16 17 17 self.nodes.contextMenuEvent = self.contextMenuEvent 18 QtCore.QObject.connect(self.nodes, QtCore.SIGNAL("clicked(QModelIndex)"), self.clicked) 18 19 19 20 def setPubSub(self, pubsub): … … 21 22 QtCore.QObject.connect(self.pubsub, QtCore.SIGNAL("receivedError(PyQt_PyObject)"), 22 23 self.handleError) 24 25 def setModel(self, model): 26 self.nodes.setModel(model) 23 27 24 28 def handleError(self, node): … … 31 35 self.pubsub.emit(QtCore.SIGNAL("createNode(PyQt_PyObject)"), unicode(ui.nodeName.text())) 32 36 37 def clicked(self, index): 38 model = self.nodes.model() 39 item = model.getNodeItem(index) 40 self.pubsub.emit(QtCore.SIGNAL("retrieveItem(PyQt_PyObject, PyQt_PyObject)"), 41 item.node_item.node, item.node_item.name) 42 33 43 def contextMenuEvent(self, event): 34 44 menu = QtGui.QMenu(self.parent()) oss/jlib/jlib/gui/pubsub/subscription.py
r719 r721 3 3 4 4 from jlib.gui.pubsub.subscriptionsui import Ui_jlibPubSubSubscription 5 from jlib.gui.pubsub.subscribenodedialog import jlibSubscribeNodeDialog 5 6 6 7 __all__ = ['jlibPubSubSubscriptionWidget'] … … 13 14 def setupUi(self, parent=None): 14 15 Ui_jlibPubSubSubscription.setupUi(self, parent) 16 self.subscriptions.contextMenuEvent = self.contextMenuEvent 15 17 16 18 def setModel(self, model): 17 19 self.subscriptions.setModel(model) 20 21 def setPubSub(self, pubsub): 22 self.pubsub = pubsub 23 24 def setDiscovery(self, discovery): 25 self.discovery = discovery 26 27 def subscribeNode(self): 28 ui = jlibSubscribeNodeDialog() 29 ui.show() 30 if ui.exec_() == QtGui.QDialog.Accepted: 31 self.pubsub.emit(QtCore.SIGNAL("subscribeNode(PyQt_PyObject)"), unicode(ui.nodeName.text())) 32 self.discovery.emit(QtCore.SIGNAL("discoverSubscriptions()")) 33 34 def unsubscribeNode(self): 35 model = self.subscriptions.model() 36 subscription = model.getSubscriptionItem(self.subscriptions.currentIndex()).subscription 37 self.pubsub.emit(QtCore.SIGNAL("unsubscribeNode(PyQt_PyObject)"), unicode(subscription.node)) 38 self.discovery.emit(QtCore.SIGNAL("discoverSubscriptions()")) 39 40 def discoverNode(self): 41 model = self.subscriptions.model() 42 subscription = model.getSubscriptionItem(self.subscriptions.currentIndex()).subscription 43 self.discovery.emit(QtCore.SIGNAL("discoverNodeSubscriptions(PyQt_PyObject)"), subscription.node) 44 45 def discoverItems(self): 46 model = self.subscriptions.model() 47 subscription = model.getSubscriptionItem(self.subscriptions.currentIndex()).subscription 48 self.discovery.emit(QtCore.SIGNAL("discoverItems(PyQt_PyObject)"), subscription.node) 49 50 def contextMenuEvent(self, event): 51 menu = QtGui.QMenu(self.parent()) 52 53 actionSubscribeNode = QtGui.QAction(QtCore.QString("Subscribe to a node"), self.parent()) 54 QtCore.QObject.connect(actionSubscribeNode, QtCore.SIGNAL("triggered()"), self.subscribeNode) 55 menu.addAction(actionSubscribeNode) 56 57 actionUnsubscribeNode = QtGui.QAction(QtCore.QString("Unsubscribe from a node"), self.parent()) 58 QtCore.QObject.connect(actionUnsubscribeNode, QtCore.SIGNAL("triggered()"), self.unsubscribeNode) 59 menu.addAction(actionUnsubscribeNode) 60 61 actionDiscoverNode = QtGui.QAction(QtCore.QString("Discover node"), self.parent()) 62 QtCore.QObject.connect(actionDiscoverNode, QtCore.SIGNAL("triggered()"), self.discoverNode) 63 menu.addAction(actionDiscoverNode) 64 65 actionDiscoverItem = QtGui.QAction(QtCore.QString("Discover items"), self.parent()) 66 QtCore.QObject.connect(actionDiscoverItem, QtCore.SIGNAL("triggered()"), self.discoverItems) 67 menu.addAction(actionDiscoverItem) 68 69 menu.exec_(event.globalPos())
