
------------------------------------------------------------------------
- TODO List
------------------------------------------------------------------------

 - D-Bus interface optimizations
   - problem: right now a lot of round-tripping is needed
   - solution: for Foo=Device,Adapter,Expander,Port
     - EnumerateFoo() should return a(oa{sv}) instead of just 'ao'
       where the a{sv} contains the properties
     - FooAdded() should be 'oa{sv}' instead of just 'o'
       where the a{sv} contains all properties
     - FooChanged() should be 'oa{sv}' instead of just 'o'
       where the a{sv} contains the properties that has
       changed
   - this will break the D-Bus interface so we we need to bump the
     minor number (e.g. 1.0.x -> 1.1.0 transition)

 - We should probably use "Phy" instead of "Port"
   - do this when breaking the D-Bus interface for other reasons

 - When the GDBus stuff lands in GLib we should probably start using it
   - probably do this when breaking the D-Bus interface for other reasons

 - UTF-8 assumptions
   - Some properties contain file paths. Since Linux/UNIX allows any
     NUL-terminated string of bytes as file names (restricting file
     names to UTF-8 is clearly insane, *boggle*), we could end up with
     strings that are not UTF-8. We should probably use the type 'ay'
     instead of 's' for such things.

 - We probably have too many polkit actions - probably just two are enough
   - reads should require org.fd.udisks.read
     - this should be 'yes'
   - write/modification should require org.fd.udisks.write
     - this should be 'auth_admin_keep'

 - Jobs should be separate D-Bus objects instead of Job* properties
   on the Device objects. We should probably also synthesize Job objects
   for jobs being tracked/managed by separate kernel- and/or user-subsystems.
   For example, if the user does

     # echo check > /sys/block/md0/md/sync_action

   from the command-line, we should create a Job object. Things like that

 - We should have a notion of events and a history of events. This
   would include SMART data, IO errors and such things. Each event
   would have generic metadata (type, collection date, source,
   relationship to 0 or more devices, human readable string,
   type-specific blobs) and UI like Palimpsest would allow searching,
   viewing, organizing and purging any type of event.

   We probably want some way of rate-limiting / collapsing multiple events
   into one etc. Think tons of IO errors.

   The type-specific blob could contain e.g. SMART data and this could be
   used to realize SMART graphs.

 - It would be nice to be able to have different back-ends

 - The D-BUS API is supposed to be synchronous, but property updates are racy
   in many cases (tests/run --no-workarounds exposes those). These should get
   fixed by having the methods only return after the properties that were
   affected by the call got updated.

------------------------------------------------------------------------
- Future features
------------------------------------------------------------------------

 - iSCSI
   - target (share drive)
   - see notes in doc/TODO-ISCSI

 - Filesystem check
   - how can we do interactive fsck? Connect to a socket on the
     client and then make the client includes a terminal emulator?
     Yuck

 - Partition/Filesystem resizing
   - Maybe just enhance PartitionModify

 - SES2 Enclosure Management
   - In particular, we should do something with the LEDs

 - make integration-test run in uninstalled mode

 - LSM man page rewrite to docbook format
