libobby
=======

Blocker:

Critical:

Major:

Normal:
  * Provide some means of authentication (#21)
  * Hide equivalent insert / change calls (#28)
  * Implement server-side commands for remote actions (#29)
  * Implement records to (un)indent lines of text (#30)

Minor:

Trivial:

Enhancement:
  * Flags for obby::user (#8)
  * Syncronise documents on request (#10)
  * Session serialisation (#20)


21: Provide some means of authentication
----------------------------------------
''libobby'' should provide some means of authentication. There should be 
several possibilities of authentication schemes (maybe this ticket should 
be splitted when they are getting implemented one-by-one):

 * If a user logs in the first time since the host restarted a password 
specified by the user will be set on the server with which it could 
authenticate itself after a connection loss.
 * A simple global password is need to login into a server, known to all 
users of it.
 * The server checks a user/password combination against a user database, 
useful for dedicated private ''obby'' servers.
 * Single documents could be get some kind of password or access control 
list protection, but #10 has to be implemented first.

28: Hide equivalent insert / change calls
-----------------------------------------
Hide equivalent insert / change calls

''This is a stub and generated out of the old TODO located in the 
repository.''

29: Implement server-side commands for remote actions
-----------------------------------------------------
Implement server-side commands to let the server act on the remote side

''This is a stub and generated out of the old TODO located in the 
repository.''

30: Implement records to (un)indent lines of text
-------------------------------------------------
Implement indent_record and unindent_record to (un)indent lines of text

''This is a stub and generated out of the old TODO located in the 
repository.''

8: Flags for obby::user
-----------------------
Extend obby::user with a 'flags' field. The idea behind is to introduce a 
flag like obby::user::connected which specifies if this user is currently 
connected to the obby session. We would not need the user_table classes any 
longer and resolve the confusion of obby::user vs. obby::user_table::user.

However, this feature _is_ dangerous because many code would have to be 
adjusted to ignore non-connected user. Maybe we can provide two iterators: 
user_iterator and connected_user_iterator or something. Or 
user_iterator::step(user::flags).

We should think and discuss about this before doing anything.

10: Syncronise documents on request
-----------------------------------
Currently, all documents are synced to incoming clients. Having large 
and/or many documents, this causes much network traffic even if a user just 
wants to edit one of these documents.

The idea is to send just a document list on connection. Users can subscribe 
and unsubscribe to documents which means that the document content is 
synced and they can edit the documents collaboratively until they 
unsubscribe.

create_document should subscribe the creating user automatically.

Of course, Gobby also needs many adjustments to support this feature.

20: Session serialisation
-------------------------
When multiple persons are editing a document the situation that one 
(perhaps the host) has to leave is quite common. ''libobby'' should support 
some kind of session serialisation while preserving the history (and thus 
the attribution of each character to the corresponding user) so that it 
could be easily resumed. Probably (possibly compressed) XML should be used 
to serialise a tree of objects. The following features should be 
implemented:

 * Load/save documents to/from file and/or memory (while preserving 
history)
 * Load/save complete obby session

