#add djmount to toplist of supported devices in README, index.html
look into pupnp.sf.net (1.6.1 or later)!

virtual tree
  virtual and real(local) in one tree?
  virtual and real, complete separation
sorting: add default sorting option, --sort=...

character sets, escaping and encoding: make sure character set handling stuff works as expected:
[DONE] make sure strings sent to device in contentdir are HTML-escaped properly!
  mp101 uses UTF-8!
  what about functions like 'quote' and 'quotearg' in regard to UTF-8 filenames?
    make sure all code, esp. strbuf_ works so that wide chars are handled correctly!!!
    multibyte: mbrtowc. uses current locale settings! (setlocale?) problem: don't want to change locale!?
  write mail to everyone to ask for charset info?
  support G_FILENAME_ENCODING (as well) as G_BROKEN_FILENAMES
   G_FILENAME_ENCODING.  This environment variable can be set to a comma-separated list of character set names. GLib assumes that filenames are encoded in the first character set from that list rather than in UTF-8. The special token "@locale" can be used to specify the character set for the current locale.
   G_BROKEN_FILENAMES.  If this environment variable is set, GLib assumes that filenames are in the locale encoding rather than in UTF-8. G_FILENAME_ENCODING takes priority over G_BROKEN_FILENAMES.
  coding internals: rethink conv_filename/log-charset... smarter string memory management functions?

metadata caching
  (also from Michael Seewald)
  cache even across restarts (storing to cache file)
  keeping partial tree in memory
  how to cache:
    when a file is modified, its mtime is updated. but not the containing directory.
    so we really need to do a stat on every file, to see if it has changed.
    we only need to rescan a dir if its mtime has changed.
    "stat" vs "opendir+readdir+closedir" & "open,read,..,close,taglib/id3lib info"
  to add: for each file and directory: mtime
  to add: support serialization of known file and dir data
  to add: must keep info on dirs as well?

look up fd leak?

from Jan Ceuleers:
- Add support for images, movie files etc. Send the right upnp:class.

statistics file
  (also from Michael Seewald)
  that way, one could automatically generate a playlist with favourite tracks. 
  tracks genre also


inform when closing a file (webserver)
test regular browsing/searching now that so much has changed!
test sort criteria

---

on request: add option to specify magic file (see magic_load manpage)

add DETAIL_SPECIAL_FILE instead?

check unread mails in mailing list

shoutcast ICY http://www.smackfu.com/wiki/Programming/ShoutcastMetadataProtocol
  implement ICY data every 4096 bytes? (must send ICY-MetaData:1)

inject virtual id3v2 tags (see Jiri Wichern mail)
better Event action result dump - complete tree

make session example (i.e. screenshot) for homepage

rethink taglib tag_c support... request taglib_c pkg-config?

transcoding
  FLAC and other audio decoders (or something!)
  convert into supported audio format in realtime (mp3 encoder or just decode to wave?)
  add support for libsndfile: http://www.mega-nerd.com/libsndfile/

better display of scanned files - those not scanned, ... + summary (totally matched)
--version should print whether id3lib and taglib support is available.
fix compilation warning in iconvme module (from James)

moderated: 2hz max event for certain variables. check spec. make sure they're not sent more often!
look into code of other free software media servers or players
remember: free may clobber errno!!
add patches subdirectory to dist
support ASX playlists:
  <ASX version="3.0"><Entry><ref HREF="mms://[...]"/></Entry></ASX>
  http://gonze.com/playlists/playlist-format-survey.html#ASX
support mms streams
support other playlists found in http://gonze.com/playlists/playlist-format-survey.html ?
escape certain character (space => %20 etc) when doing http requests? or reverse?

attempt to GET immediately if HEAD fails? or skip HEAD support altogether?
check Content-Type in HTTP/ICY GET/HEAD headers against --file-types list?

improve error messages:
  Attempting to read 1048602 bytes at 1235  =>>> BUT READ HOW MANY!?
  Found URL  =>> DISCARDING OR ADDING!?

if a playlist has a single file, merge that one into the playlist!
audioBroadcast cannot be paused by mp101!! but other types can
http://forums.radiotoolbox.com/viewtopic.php?t=74
add HTTP buffering somehow (not at first - mp101 does it automaticly)
add rtsp types
fix name identification for HTTP urls (don't use base_name)
rename --file-types to --data-types or just --types (for http)?

give up after N invalid entries in simple playlists?
support for urls in playlists (playlists only?)
can playlist support be implemented by not processing playlists? check how other apps do it.

try intel tools again, in regard to <res> @protocolInfo, @size etc.
assumption: specifying res specifies all res attributes. (or at least the required ones?!)
should @protocolInfo be specified or protocolInfo?
MP101 does: res, class, duration, upnp:artist, upnp:album, upnp:genre

test search parsing:
  unterminated strings: should cause error every time
  test other and any strings!

from Daniel Bachfeld:
  FYI: the twonkyvision ini-File for the musicserver contains a specific
  setting for the m1000:
    # param -nosearch [n] = set to 1 to supress search support
    # mainly needed for ROKU which brings own UI when search is enabled
    nosearch=0
  The vendor suggest to set it to 1. However, it works still with 0

read UPNP device architecture.
add section to doc/README about relevant standards and documentation

upnp: What do we do with A_ARG_* variables? Handle in get_variable_request?

??? when do we need to report 'res' URL? check contentdir docs. why doesn't twonky do it?
improved debugging for webserver.c, metadata.c, contentdir.c
log connected control points - needs libupnp patching
implement stuff in connectmgr.c, contentdir.c
set up web server to serve all SPCD documents. already done?
communication over subnets: does it work in Windows? if yes, then something must be incorrectly set up in linux (multicast?)

improve parsing of --expire-time in main.c: allow for 1h2s or 1m2s (see 'info coreutils sleep').

gnulib: use closeout?
external or (why not) native rtsp support (see GStreamer)

directory file discovery
  plain filename (no extension)
  id3
  db4 database lookup
    key=full path|relative path|filename only
    value=cvs of key=value
  file table lookup
    FILESPEC\nKEY=VALUE,..
  postgresql database lookup
    QUERY+FILESPEC TYPE+COLUMN MAP (colname,..)
    DATABASE URL
  mysql database lookup

external program
  generates XML?
    in: directory
    out: xml

xml database
  complete file

custom database
  n-level
  level 1: query, column map
  level 2: query, column map

feature: search caching

-I include file match
-X exclude file match
-m method of getting song information
   name
   id3
   filelookup
   external program: PATH
   db file
   database lookup: DATABASE SPEC, QUERY
-c FILE read config
-C cache discovered info into FILE (for this dir/all dirs). keeps modified-time for all dirs?

basic client for gmediaserver, console based
replace manual page with help2man?
summarize number of scanned files/dirs?

===

metadata category entries
  Randy Scott: metadata categories
  virtual directory layer (artists, "on disk", etc)
  physical directory "incremental" reload (not full reload)
  virtual representation vs physical representation

Alt 1.
  <item>
    <title>Foobar</title>
    <file>
       <path>...</path>
    </file>
  </item>

Alt 2.
  <file title="Foobar">
    <path>...</path>
  </file>

Alt 3.
  <item title="Foobar">
    <file>
      ...
    </file>
  </item>


Example 1:
  <item>  <!-- root item -->
    <directory path="/d/new-audio-albums" />
    <directory path="/d/sto-audio-albums" />
  </item>

Example 2:
  <item>
    <item title="Artists">
      <categorization type="artist" fileset="{referal id}">
        <categorization type="files" fileset="{referal id}" />
      </categorization>
    <item>
    <item title="Albums">
      <categorization type="album">
        <categorization type="files" />
      </categorization>
    </item>
    <item title="Genres">
      <categorization type="genre">
        <categorization type="files" />
      </categorization>
    </item>
  </item>

  <fileset id="{referal id}">
    <directory ...>
    <filter ...>
  </fileset>


<url address="http://..." contenttype="...">
</url>

<file title="{title in ContentDirectory hierarchy}">
  <path>/path/to/my/song.mp3</path>
  <mime>audio/mpeg</mime>
  <tag:title>Overridden title</title>
  <tag:artist>Overriden artist</artist>
</file>

<directory>
  <path>/path/to/directory</path>
</directory>

<collection title="{title}" type="artist">
  <collection type="album">
  </collection>
</collection>

all
<menu>


Songs=all
Albums=album,files
Genres=genre,files  (?)

how to configure root categorization?

example: Artists->{artist}->{songs}

typedef enum {
    C12N_ALBUM,
    C12N_ARTIST,
    C12N_GENRE,
} EntryC12nType;

typedef struct _EntryC12n EntryC12n;

struct _EntryC12n {
    uint32_t count;
    EntryC12nType *c12n;
};
