
Bugs:

- So far unreproducable synch mode bugs reported by David Massart
- Possible that the WebDAV 422 seen against Cyberteams is a sitecopy
  bug.
- Fetch mode for FTP rarely works
- Synch mode won't transfer in ASCII mode, nor maintain symlinks, nor
  correctly order file deletions.
- Filename conflicts are not handled by update or synch mode: case:
  Directory exists remote called "foo". Delete locally, replaced with 
  file called "foo". Bang.

Known Standards Compliance Problems:

- RFC959: handle telnet control characters?
- RFC1945: better persistent connection handling for HTTP/1.0 servers
- RFC2616: cope with arbitrarily long header lines.
- RFC2518: accept collection URI's in DAV:href without trailing slash,
           parse DAV:status
- RFC2617: possibly realm, domain issues. auth-int untested.

Features:

- It may be possible to support GNOME libxml... screem will want this to 
  avoid having to ship expat too.
- Filename conflict resolution for update mode, as per bug.
- Verify mode for 'safe mode' sites, also a --force-overwrite to force
  updates... maybe --prompt-overwrite too.
- Some kind of user-feedback for slow startup in checksumming mode?
  takes approx 1 sec to MD5 a 10mb file on a K5 166 -> okay for average-sized
  sites.
- "Check server" function, --check-server, probes for 100-expect capability,
  gives Server: line, authentication level etc. Could go further and
  include a complete method test suite... compile-time option, maybe.
- Support for other better/faster checksumming algorithms: SHA1?
  (implemented under GPL in gnupg... could nick code).
- Abstract out expat handling a bit? cdata code is copy'n'paste between
  sitestore.c and httpdav.c
- Get rid of namespace violations: *_t
- Per-site lockfiles?
- Interactive prompting for server/proxy username/passwords?
- Display more meaningful errors for fetch mode
- Parse DAV:status cdata, and collect only 2xx-type resources,
  ignore 4xx resources, do something meaningful with 3xx-type resources:
  fetch DAV:reftarget property and read symlink target. Report 5xx as error?  
- Frontends using other GUI toolkits, e.g. Qt, fltk, wx-Windows, Windows 
  native, (n)curses.
- Read HTTP proxy from HTTP_PROXY/http_proxy environment variable.
- Support FTP proxying (how?)
- Cope with out-of-memory situations i.e. malloc()/realloc() returns NULL
- Internationalization and localization
- WebDAV: do compressed transfer-encodings (use zlib?).
  Better error messages. Pipelining would be nice, but hard.
  PROPFIND: Okay to use encoding= etc? (not atm, it breaks IIS5-beta) 
- Backup info file on write_stored... optionally? Only implement in frontend?
  GNU-style $VERSION_CONTROL support?
- Support access permissions for WebDAV: custom live props, or ACL extns.
- Symlink 'maintain' mode for FTP: can you create symlinks over FTP???
- Determine and remove or document files list order dependancies.
- IPv6 support.
- Env. var CONF_PREFIX which is used to choose rcfile+storepath like:
    $HOME + $CONF_PREFIX + sitecopyrc
- Do default ports, netrc lookups for the proxy too
- SOCKS5 support.
- Make the WebDAV code more modular - abstract out XML/207 response
  handling somewhat.
- Synch mode: Only connect to the server when needed - i.e., moving/deleting
  local files -> no connection needed.
- console: Allow user to update just a single file? --only=...?
- Report corrupt info files back to the user.
- Check write return codes in site_writefiles, signal the error if
  the info file doesn't get written properly.
- Get WebDAV auth failures back to the user properly.
- Get warning (i.e. non-fatal) messages to the user. Get rid of all
  the perror() calls if possible -> esp. in socket.c
- Sort out error reporting between the various abstraction layers.
- Add quota management, specify a per-site quota and only do update
  if the result means the site will stay under quota.
  -> problem: a directory uses up k's, but how many?
- Check remote directory exists on initial connection in FTP (chdir/ls)
- Nicer rcfile format - lex'n'yacc.

Must-have-for-1.0 features:

- Cope with out-of-memory situations i.e. malloc()/realloc() returns NULL
- Full RFC2068, 2518 compliance audit.
- Write complete documentation using GNU texinfo or DocBook, for a 
  printed manual and info pages.

Not-till-after-1.0 features:

- Use an better data structure for the files list, indexed by filename,
  to speed up site_readfiles, which has time O(n*m) (n=#local files, m=
  #remote files) at the moment. Hash by MD5 - ideal for checksum sites?
  Separate hash by filename?
- Intelligent file movement detector, to spot whole moved directories
- Make the protocol drivers and sites code thread-safe.
- Abstract protocol drivers into a mc VFS-like 'open', 'read' etc.
  Abstract sites code so that "local" and "remote" can be handled by any 
  of {file, http, ftp}. Allows file->file sites, which screem wants.
- consequently, read ls-laR.txt files and be more like 'mirror'

Possible features:

- Have 'preconnect' and 'postconnect' options which run user-specified
  programs before and after an update, synch etc.

Things You Might Like to Do On A Rainy Day:

- Investigate any extra handling needed for servers which have case
  insensitive filenames
- Native Windows port (e.g. reimplement socket.c using the Winsock API)
- Convince the maintainer that it's more productive to spend time 
  implementing features than carefully crafting a mile-long TODO list.

XSitecopy TODO
--------------

Left For 0.9.x:

- Bring site creation into sync with the rest of the code base.
- Tooltip(s) for the site widgets; specifically safe mode.
- Integrating fetch-mode and resynch into the app.
- Fix rescan bug seen when rescanning local dir of lyra.org
- View files using gnome mime types.
- Transition from time-size to checksum.
- Investigate sporadic bug with changing local directory.
* Prefs

Future releases:

- Bring back optional 'slim' mode which will take up less desktop real estate.
- Popup menus for the site/file tree.
- Single file updates.
- Update all.

Longer term things:

- Panel applet for easily updating sites in a couple of clicks.
- Html based reports - integration into FE apps, and possible auto uploading
  to the remote site. (useful as a "recent changes" page)
* Please send any suggestions you may have as to the format/design/type of
  reports that you might find useful.
