Changeset 731

Show
Ignore:
Timestamp:
07/21/08 10:27:31 (4 months ago)
Author:
sylvain
Message:

Allowed for items to be published
Started to handle pubsub message

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • oss/jlib/examples/basic/client.py

    r725 r731  
    134134        self.nodesUi.setPubSub(self.connection.qobj.pubsubnode) 
    135135        self.nodesUi.setModel(model) 
     136        self.nodesUi.setNode(items.node_name) 
    136137 
    137138    def messageReceived(self, message): 
     
    153154        tab = self.tabWidget.addTab(widget, QtCore.QString(contact_jid)) 
    154155        self.tabWidget.setCurrentIndex(tab) 
     156 
     157    def updatedItem(self, node_name, item_id, entry): 
     158        pubsub = self.connection.qobj.pubsubnode 
     159        pubsub.emit(QtCore.SIGNAL("publishItem(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"),  
     160                    node_name, item_id, entry) 
    155161 
    156162    def retrievedItems(self, node): 
     
    163169                    widget = QtGui.QWidget() 
    164170                    form = jlibAtomEntryForm(parent=widget) 
     171                    form.setNode(node.node_name) 
    165172                    form.setEntry(child) 
    166173                    tab = self.tabWidget.addTab(widget, QtCore.QString(str(id_element))) 
    167174                    self.tabWidget.setCurrentIndex(tab) 
     175                     
     176                    QtCore.QObject.connect(form, QtCore.SIGNAL("itemReady(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"), 
     177                                           self.updatedItem) 
    168178 
    169179def parse_commandline(): 
  • oss/jlib/jlib/core/pubsub.py

    r729 r731  
    387387                    ("pubsubdisp", "publish.outbox"): ("xmpp", "forward"), 
    388388                    ("pubsubdisp", "retract.outbox"): ("xmpp", "forward"), 
     389                    ("pubsubdisp", "out.message"): ('itemshandler', 'message.received'), 
    389390                    ("pubsubdisp", "out.retrieve.result"): ("itemshandler", "retrieved"), 
    390391                    ("pubsubdisp", "out.create.result"): ("itemshandler", "created"), 
     
    446447               "deleted" : "", 
    447448               "error"       : "", 
     449               "message.received": "", 
    448450               "xmpp.result": "", 
    449451               "published": "", 
     
    510512            if self.dataReady('request-publish-item'): 
    511513                node_id, item_id, data = self.recv('request-publish-item') 
    512                 p = Node(unicode(self.from_jid), self.pubsub_service, type=u"get", 
    513                          node_name=node_id, item=Item(id=item_id)) 
    514                 self.send(p, "retrieve-item") 
     514                i = Item(id=item_id, payload=data) 
     515                p = Node(unicode(self.from_jid), self.pubsub_service,  
     516                         node_name=node_id, item=i) 
     517                self.send(p, "publish-item") 
    515518 
    516519            if self.dataReady('request-create-collection-node'): 
     
    558561                self.qobj.emit(QtCore.SIGNAL("errorNode(PyQt_PyObject)"), node) 
    559562                 
     563            if self.dataReady("message.received"): 
     564                msg = self.recv("message.received") 
     565                self.qobj.emit(QtCore.SIGNAL("receivedPubSubMessage(PyQt_PyObject)"), message)  
     566                 
    560567            if not self.anyReady(): 
    561568                self.pause() 
     
    614621 
    615622        return item 
     623 
     624 
     625 
     626 
  • oss/jlib/jlib/gui/atom/entry.py

    r729 r731  
    11# -*- coding: utf-8 -*- 
     2import datetime 
    23from PyQt4 import QtCore, QtGui 
    3 from bridge.common import ATOM10_NS 
     4 
     5from bridge import Element as E 
     6from bridge.common import ATOM10_NS, ATOM10_PREFIX 
    47 
    58from jlib.gui.atom.entryui import Ui_jlibAtomEntryForm 
    69from jlib.core.atom import jlibAtomAuthorModel, jlibAtomLinkModel 
    710 
    8 __all__ = ['jlibAtomEntryForm'
     11__all__ = ['jlibAtomEntryForm', 'jlibAtomEntryFormDialog'
    912 
    1013class jlibAtomEntryForm(QtGui.QWidget, Ui_jlibAtomEntryForm): 
     
    1215        QtGui.QWidget.__init__(self, parent) 
    1316        self.setupUi(parent=parent) 
     17        self.entry = None 
    1418        self.node = None 
    15         self.entry = None 
    1619 
    1720    def setupUi(self, parent): 
     
    1922        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), 
    2023                               self.saveEntry) 
    21          
    22     def setPubSub(self, pubsub): 
    23         self.pubsub = pubsub 
    2424 
    2525    def setNode(self, node): 
    2626        self.node = node 
     27 
     28    def makeDefaultEntry(self): 
     29        entry = E(u'entry', namespace=ATOM10_NS, prefix=ATOM10_PREFIX) 
     30        E(u'id', namespace=ATOM10_NS, prefix=ATOM10_PREFIX, 
     31          content=unicode(self.atomID.text()), parent=entry) 
     32        date = unicode(datetime.datetime.utcnow().isoformat()) + u'Z' 
     33        E(u'published', namespace=ATOM10_NS, prefix=ATOM10_PREFIX, 
     34          content=date, parent=entry) 
     35        E(u'updated', namespace=ATOM10_NS, prefix=ATOM10_PREFIX, 
     36          content=date, parent=entry) 
     37        E(u'title', namespace=ATOM10_NS, prefix=ATOM10_PREFIX, 
     38          attributes={u'type': u'text'}, content=unicode(self.title.text()), parent=entry) 
     39        E(u'content', namespace=ATOM10_NS, prefix=ATOM10_PREFIX, 
     40          attributes={u'type': u'text'}, parent=entry) 
     41 
     42        self.entry = entry 
    2743         
    2844    def setEntry(self, entry): 
     
    3147        if id_element: 
    3248            self.atomID.setText(QtCore.QString(str(id_element))) 
     49            self.atomID.setEnabled(False) 
    3350 
    3451        title_element = entry.get_child('title', ATOM10_NS) 
     
    4966 
    5067    def saveEntry(self): 
    51         self.pubsub.emit(QtCore.SIGNAL("publishItem(PyQt_PyObject, PyQt_PyObject)"),  
    52                          self.publishItem)   
     68        id_element = self.entry.get_child('id', ATOM10_NS) 
     69        id_element.xml_text = unicode(self.atomID.text()) 
     70 
     71        title_element = self.entry.get_child('title', ATOM10_NS) 
     72        title_element.xml_text = unicode(self.title.text()) 
     73 
     74        updated_element = self.entry.get_child('updated', ATOM10_NS) 
     75        updated_element.xml_text = unicode(datetime.datetime.utcnow().isoformat()) + u'Z' 
    5376         
    54         
     77        self.emit(QtCore.SIGNAL("itemReady(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"), 
     78                  self.node, id_element.xml_text, self.entry) 
     79                      
     80class jlibAtomEntryFormDialog(QtGui.QDialog):   
     81    def __init__(self, parent=None): 
     82        QtGui.QDialog.__init__(self, parent) 
     83        self.setObjectName("jlibAtomEntryFormDialog") 
     84 
     85        self.form = jlibAtomEntryForm(parent=self) 
     86        self.form.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save) 
     87         
     88        self.resize(QtCore.QSize(QtCore.QRect(0,0,444,461).size()).expandedTo(self.form.minimumSizeHint())) 
     89        self.retranslateUi(self) 
     90        QtCore.QObject.connect(self.form.buttonBox,QtCore.SIGNAL("accepted()"), self.accept) 
     91        QtCore.QObject.connect(self.form.buttonBox,QtCore.SIGNAL("rejected()"), self.reject) 
     92        QtCore.QMetaObject.connectSlotsByName(self) 
     93 
     94    def retranslateUi(self, Dialog): 
     95        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) 
     96     
     97    def accept(self): 
     98        self.form.makeDefaultEntry() 
     99        return QtGui.QDialog.accept(self) 
     100 
  • oss/jlib/jlib/gui/pubsub/node.py

    r721 r731  
    44from jlib.gui.pubsub.nodesui import Ui_jlibPubSubNodes 
    55from jlib.gui.pubsub.createnodedialog import jlibCreateNodeDialog 
     6from jlib.gui.atom.entry import jlibAtomEntryFormDialog 
    67 
    78__all__ = ['jlibPubSubNodeWidget'] 
     
    2324                               self.handleError) 
    2425 
     26    def setNode(self, node): 
     27        self.node = node 
     28 
    2529    def setModel(self, model): 
    2630        self.nodes.setModel(model) 
     
    3539            self.pubsub.emit(QtCore.SIGNAL("createNode(PyQt_PyObject)"), unicode(ui.nodeName.text())) 
    3640 
     41    def publishAtomEntry(self): 
     42        dialog = jlibAtomEntryFormDialog() 
     43        if dialog.exec_() == QtGui.QDialog.Accepted: 
     44            self.pubsub.emit(QtCore.SIGNAL("publishItem(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"),  
     45                             self.node, unicode(dialog.form.atomID.text()), dialog.form.entry) 
     46 
    3747    def clicked(self, index): 
    3848        model = self.nodes.model() 
     
    4454        menu = QtGui.QMenu(self.parent()) 
    4555 
    46         actionCreateNode = QtGui.QAction(QtCore.QString("Create node"), self.parent()) 
    47         QtCore.QObject.connect(actionCreateNode, QtCore.SIGNAL("triggered()"), self.createNode) 
    48         menu.addAction(actionCreateNode) 
     56        publishMenu = QtGui.QMenu(menu) 
     57        publishMenu.setTitle(QtCore.QString("Publish")) 
     58         
     59        actionPublishAtomEntry = QtGui.QAction(QtCore.QString("Atom Entry"), self.parent()) 
     60        QtCore.QObject.connect(actionPublishAtomEntry, QtCore.SIGNAL("triggered()"), 
     61                               self.publishAtomEntry) 
     62        publishMenu.addAction(actionPublishAtomEntry) 
    4963 
     64        menu.addAction(publishMenu.menuAction()) 
    5065        menu.exec_(event.globalPos())