libobby
=======

Blocker:

Critical:

Major:

Normal:
  * Hide equivalent insert / change calls (#28) [stub]
  * Implement records to (un)indent lines of text (#30) [stub]
  * Undo/Redo (#39)
  * Show the cursors and selections of all participants (#53)
  * Authentication: Database-based authentication using user/password (#57)
  * Authentication: Access control lists (#58)
  * Use precompiled headers (#61)
  * Encoding should be preserved (#65)
  * UPNP support (#77)

Minor:

Trivial:

Enhancement:
  * Implement server-side commands for remote actions (#29) [network]
  * Servers should be elected (#86)


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.''

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.''

39: Undo/Redo
-------------
The current undo/redo implementation is taken directly from GtkSourceView. 
This is not good because text that other people have written may be undone. 
We need a proper undo/redo handling in libobby.

53: Show the cursors and selections of all participants
-------------------------------------------------------
I think that being able to see the cursors and selections of all the 
participants would help me get a sense for where the other participants 
are, and what they're doing.  I think this would make collaboration a 
little bit easier and more comfortable.

Also, once gobby knows where everyone else is, I think it would be great to 
be able to click on someone's name in the Name List to jump their 
cursor/selection into view.

57: Authentication: Database-based authentication using user/password
---------------------------------------------------------------------
''libobby'' should provide the following mean of authentication:
 * The server checks a user/password combination against a user database, 
useful for dedicated private ''obby'' servers.

58: Authentication: Access control lists
----------------------------------------
''libobby'' should provide the following mean of authentication:
 * Single documents should be get some kind of password or access control 
list protection.

61: Use precompiled headers
---------------------------
All projects should make use of precompiled headers.

65: Encoding should be preserved
--------------------------------
The incoming encoding from what it is converted should be saved internally 
on the host which opened them, so that the save function results in a file 
with the original one.

77: UPNP support
----------------
''obby'' or ''Gobby'' should provide UPNP support to open a dynamic port 
forwarding on the router. Universal Plug'n'play seems an invention of 
Microsoft but neverless it is supported by many home routers. It is used 
mainly by games to request a port forwarding for the hosting player from 
the NAT box to the one on which the game runs.

''Nattraverso'' is a Python library developed for the Google Summer of Code 
which implements NAT traversal through UPNP. I don't know yet if we could 
borrow some code there or integrate it. This would solve at least some 
hosting problems of a centralised model.

29: Implement server-side commands for remote actions
-----------------------------------------------------
The possibility to send server-side commands would enable one to e.g. save 
the current document to a directory on the server or to perform other 
actions. ''libobby'' should provide the framework for this and ''Gobby'' 
some command interface to submit such commands to the server.

86: Servers should be elected
-----------------------------
When a server dies, clients should elect a new server from among them.  
This requires that clients know each other's ip addresses (or have a 
third-party server which can coordinate such things).

