TODO list for client
====================

For 2.00: 
- Fix poll mechanism for GUIs:
  - Messages in DriverInterface.update_ should only be sent if gui_poll
      is false
  - Consequently, Get_ messages should receive a reply immediatly if
      gui_poll is true.

- Add special IP addresses with no upload limit and no upload slots for
    good friends.
- Better bandwidth control: take TCP-IP packet header size into account
    and UDP too.
- Server: server: seedIP unused and stats not sent
- Number of messages in Soulseek per room

- Better anticipation of TCP bandwidth
- Web Server inside each server
- GUI stub for multiple GUIs
- Send a message for password retry
- Different users per mldonkey with their own private searches
- Add preview for downloaded files
- Option to completely replace the server list
- Cancel and Redownload doesnot work
- What happens when a shared file cannot be read ?

- Can a file be shared before being enough downloaded.
- Batch file of ed2k:// lines
- to be inserted a line of GMain.Main.set_locale ()
above GMain.Main.init ().
*********

For 2.1:
  - What about having one result per file ?
  - Allow upload at least in Direct Connect... Maybe in gnutella too, even
     if it is probably a waste of bandwidth. Upload should probably be
     concentrated on eDonkey2000, where it is better used. However, if we
     don't want to be kicked from other network, it is better to allow them
     to download from us. Maybe we could use priorities, but how ? Each network
     would have a score, and the better score would be given bandwidth first ?
   - Incomplete files can be automatically deleted when too old (7 days)
   - Add a "cp" function to change the temp directory without breaking
       the sparse file format (ie without increasing the size of copied files)

and more:

   - Objects should be stored in Weak hash tables everywhere, except when they
      are roots (servers, downloaded files, searches).
   - Event list: the current mechanism for notifications to GUIs is
      inefficient: a slow GUI prevents other GUIs from receiving fast
      updates and requires lots of CPU. A better system would be
      to have an event fifo: Each event is stored and kept in the FIFO.
      When a GUI connects, it points to the beginning of the fifo.
      Then, events are sent to it, and he can go ahead in the fifo.
      When an event is obsolete, it is replaced in place by the new state.
      The new state indicates its new position in the fifo. When events are
      sent to the GUI, they must be at the indicated position in the fifo.
   - Client side verification of query results

*********

Later:
  * Plugins.
  * Correct display of availability.
  * Popup
  * Keep (server_ip, server_port, id) for indirect connections.
  * Manager of shared files/directories.
  * Add Friends in console and WEB. 
  * Allow hostname instead of IPs in servers and friends.
  * Queue uploads per chunk.
  * Add prefered servers.
  * Save options in a modular way (each server in a file ?).
  * Recommandation for upload.
  * Download priorities (what does it mean ?).
  * Use source groups for local downloads.
  * Use a cache of data to help diffusing files.
  * Check that program exists before trying to execute.
  * Clean the clients_by_num table from clients which are not useful anymore.
  * remove locations of downloaded files.
  * check that 'cancelled' files cannot be shared also in incoming/
  * don't add sources to files already downloaded.
  * efficient management of buffers
  * background searches: 
   - search and automatically download files
 + remove unused sources (cleanly remove them at least once per hour)
 + commit page to select saved name
 + Imported files should have permission 644.[ Bug #420 ]
 
TODO list for server
====================
* Send a ping to all clients every minute
* Implement the whole protocol for TCP clients
* Implement the whole protocol for UDP clients
* Implement the protocol for UDP servers
* Implement indexation
* Implement localisation

KNOWN COMMENTS (from savannah and forum):
========================================
Browser: Mozilla/4.75 [en] (X11; U; Linux 2.4.17 i686; Nav) On the help page, it still says you can't set uploads
under 1K. 
If a server IP along with a colon seperated port number
is specified in the Server IP box, and enter hit, then
it gets added. This would make copy/paste from a list
of servers lots easier. Saving upstats would be nice, as well as some way of
resetting it, to get a better idea of which files to
keep shared. The downloads panel is a little busy, and not good for
small screens (some people still have to use 640x480) Perhaps move the 'save files' to an incoming tab?
(which can flash when it's got files in) On the same lines, why not show the filename/details
(the one above the colour bar) in a line, with name in
one box, size in the next (perhaps with bytes/Mb
added), and the format in another, with the colour bar
as the last item in the line, taking up the whole width
of the client, with the 'connections' panel only
popping up over the right-hand-side of the screen when
a filename is double-clicked (or when show connections
is picked from the menu)
The MD4 recover might move to the incoming tab, and the
ed2k file to below the filename/colourbar line, and
automatically change when a new file is clicked,
to show the ed2k: link.
Maybe the cancel/retry-connect could move to the
connections panel? On the search results tab, it would be nice to indicate
number of results per file, to give at least an
indication of availability.


