GSoC08 Message History
From PsiWiki
This page does not describe Psi's code. I'm Aleksey Palazchenko and these are just notes for writing a Google's Summer of Code 2008 project. You can find my code at github, and little more details at my blog and Flyspray.
Contents |
Milestones
Milestone zero
-
Setup a blog, wiki-page, e-mail filters, feeds, send documents to Google, etc. -
Preliminary implementation of storage engine for collect real-life logs. -
Understanding structure of Psi's code.
local-1
-
Discuss engine's structure with Kevin and Remko. -
Design and discuss UI with Remko and Kevin.
local-2
-
Implementation of storage engine — code.
local-3
-
UI – models. -
UI — views, main window.
remote-1
-
Reading and understanding of XEP-136. -
Understanding Iris' API. -
Find or install jabber-server with support of XEP-136; experiments with it and XML-console.
remote-2
-
RSM -
XEP-82 - archive task
remote-3
- integration with model and GUI
integraion
- UI — options window.
- Integration with Psi — private messages, MUC.
...
Back-end
There are two main types of objects: collections and entries.
Collection is... well... a collection of entries. :) It have several attributes: buddy's JID, creation time, subject, thread.
Entries have several types: private message to/from user, MUC user and system message.
Also there are bookmarks – references to entries, collections or several other bookmarks.
Database design
Main principles
- It's impossible to create an entry without a collection; entries may be created only by collection, or by copying another valid entry.
- All information stored in db without delay; for example, creating entry by collection will call INSERT statement.
UI
Trillian
Nice, but activity graph is useless.
Miranda
Very nice! Integration list of collections with calendar into tree is really useful feature.
Jaiku :)
Proposed for Psi
Options and parameters
- One database is used for all accounts – it's useful for search and must not be performance problem.
- User may switch off logging for particular JID, group or account.
- Whole database must be encrypted. (to discuss how)
Notes
TODO (someday)
- done - Backend redesign:
- done - prepared queries ( bindValue )
- done - columns by name ( query.record().indexOf("colname") )
- done - arg()'s are evil: QString("%1 : %2").arg("%1X").arg("foo")
- done - to save more data
- database encryption!
- special interface for "normal" messages (may be like e-mail?)
- store PEPs?
- autoexport to plain text (for textshell)
Google Talk
http://code.google.com/apis/talk/jep_extensions/otr.html
http://code.google.com/apis/talk/jep_extensions/usersettings.html
GTalk's disco info contains "http://jabber.org/protocol/archive#otr" and "http://jabber.org/protocol/archive#save" features, which are old namespaces for XEP-136. This means you can save or not to save your messages, but you can't retrieve them. ( version 0.6? that is the last one edited by Jon Perlow from Google )
Servers with support of XEP-136
- OpenFire with Open Archive by Stefan Reuter. (bug-tracker)
- ejabberd(2?) with mod_archive(_odbc)
Feature
| Open Archive 1.04
| mod_archive
|
| Namespace | http://www.xmpp.org/extensions/xep-0136.html#ns | |
| 2. Archiving Preferences | not implemented at all | |
| 2.3 Determining Preferences | feature-not-implemented | |
| 2.4 Setting Default Modes | feature-not-implemented | |
| 2.5 Setting Modes for a Contact | ||
| 2.6 Setting Archiving Method Preferences | ||
| 5. Manual Archiving | not implemented at all | |
| 5.2 Uploading Messages to a Collection | feature-not-implemented | |
| 5.3 Changing the Subject of a Collection | ||
| 5.4 Offline Messages | ||
| 5.5 Groupchat Messages | ||
| 6. Automatic Archiving | unable to enable/disable by user request | |
| 7. Archive Management | ||
| 7.1 Retrieving a List of Collections | works | |
| 7.2 Retrieving a Collection | works | |
| 7.3 Removing a Collection | feature-not-implemented | |
| 8. Replication | feature-not-implemented | |
| 9. Determining Server Support (disco) | no |
Files to be changed
Integration:
- psicon.* – d->edb stuff ( constructor, destructor, edb() )
- psiaccount.* – logEvent(), edb_finished()
--AlekSi 10:43, 14 August 2008 (EDT)






