
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.

* anything with (FEAPI) after requires frontend API change, not including
  simple config options additions

Slated for 0.10:

- Abort mid-upload/download properly. (FEAPI)
- Verify mode, also a --force-overwrite to force updates... maybe 
  --prompt-overwrite too.
- Display more meaningful errors for fetch mode (FEAPI)
- Move global site_ options into struct site.

WebDAV:

- Integrate 'libdav' code from cadaver.
  ignore 4xx resources, do something meaningful with 3xx-type resources:
  fetch DAV:reftarget property and read symlink target. Report 5xx as error?  
- WebDAV: do compressed transfer-encodings (use zlib?).
  Better error messages. Pipelining would be nice, but hard (FEAPI).
  PROPFIND: Okay to use encoding= etc? (not atm, it breaks IIS5-beta) 

Required Features:

- Support the proprietary Microsoft Frontpage HTTP POST-based protocol.
- Interactive prompting for server/proxy username/passwords? (FEAPI)
- Filename conflict resolution for update mode, as per bug.
- "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. (FEAPI)
- 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
- 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. *alloc() returns NULL (FEAPI?)
- Internationalization and localization
- Support access permissions for WebDAV: custom live props, or ACL extns.
- Symlink 'maintain' mode for FTP: can you create symlinks over FTP???
- 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.
- Synch mode: Only connect to the server when needed - i.e., moving/deleting
  local files -> no connection needed.
- Report corrupt info files back to the user (FEAPI)
- 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 (FEAPI).
- Get warning (i.e. non-fatal) messages to the user. Get rid of all
  the perror() calls if possible -> esp. in socket.c (FEAPI?)
- Sort out error reporting between the various abstraction layers.
- Check remote directory exists on initial connection in FTP (chdir/ls)
- Nicer rcfile format - lex'n'yacc.

Possible features, which need more consideration:

- Backup info file on write_stored... optionally? Only implement in frontend?
  GNU-style $VERSION_CONTROL support?
- It may be possible to support GNOME libxml... screem will want this to 
  avoid having to ship expat too.
- Have 'preconnect' and 'postconnect' options which run user-specified
  programs before and after an update, synch etc.
- Per-site lockfiles (FEAPI)
- 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. (FEAPI)
- 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}. Then, update + synch could possibly merge, since
  an synch is an update with the remote and local sides switched (kindof).
- Allow file->file sites (screem wants this)... as above, or simply by
  implementing another protocol driver.
- consequently, read ls-laR.txt files and be more like 'mirror'
- 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?
- Have a list of files which are downloaded on every --update; e.g.
  log files, web counter files, guestbooks, etc etc.

Console frontend specific features:

- console: Allow user to update just a single file? --only=...?

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.

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