Late last year Yiorgis Gozadinos who at the time was still working for Jarn, released a video showing his work in integrating XMPP (eXtended Messaging and Presence Protocol) into Zope/Plone.
I had some experience in creating a chat client for Plone before and was inspired by the possibility of porting it to XMPP. In the end it wasn't so much of a port but rather a complete rewrite.
Today, I'm relieved and happy that it's finally in a state where I can show it to you. I've been spending most of my free time the last two months writing collective.xmpp.chat.
It's been both frustrating and fun (mostly fun) and a very valuable learning experience. Like that one week where I rewrote the entire codebase to make use of backbone.js. Aaah, fun times.
Some features already implemented:
- Single user chat
- Roster support (adding/removing contacts) (XEP-0144)
- Setting presence status (online, offline, away, busy)
- Custom status messages
- Multi-user chatrooms (XEP-0045)
- Chat windows stay open upon page reload
- Offline storage of messages using HTML5 localstorage (still needs to be secured)
- Message actions (/me)
- Setting the topic of a chatroom (/topic)
Because almost all the code is written in Javascript (converse.js is about 1500 LOC), you can even stop the Zope server and still continue to chat. Unfortunately I forgot to show this in the screencast.
If anyone has any questions about the code, how to install, configure and use it, please don't hesitate to contact me. The add-on includes a buildout.cfg file that will set up Zope/Plone, Nginx and ejabberd for you. But please beware, the code is still in a pre-alpha state.
And then lastly, I plan to give a talk at the upcoming Plone Conference in Arnhem. This talk will focus on collective.xmpp.chat, the underlying technologies and how to write XMPP-enabled add-ons.
If you consider this an interesting topic, please go and vote for this talk to ensure that it gets accepted.
Screencast
Note: If you have trouble reading the test, click on the gear icon and set the video to High Definition.