make sure character set handling stuff works as expected

look up fd leak?

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

From Michael Seewald:
- Favorites: Is it possible to maintain a stats file of all tracks played? 
  That way, one could automatically generate a playlist with favourite tracks. 
  Ideally, this tracks also the genre, because the favourite Britney Spears 
  might not blend well into piano concerts. ;)
- Updates: Is there a faster way of updating the file lists? It takes some 15  
  minutes on my computer (~13000 mp3). It may be faster, for example, by using 
  the file system to look for "last changed/accessed" attributes.

inform when closing a file (webserver)

make sure strings sent to device in contentdir are HTML-escaped properly! check XML requirements
mention CVS on mailing list

mp101 uses UTF-8! but what parts of UTF-8 does it support? try and check! use --device-charset=UTF-8 in profile?

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.

test regular browsing/searching now that so much has changed!
test sort criteria
update translations prior to release. use utf-8 editor!

---

write mail to everyone to ask for charset info?
mp101: what unencoded formats does mp101 support? document supported formats of mp101 in texinfo doc.

coding internals: rethink conv_filename/log-charset... smarter string memory management functions?

better identification of files - improve buffering and reading (read more?)

support G_FILENAME_ENCODING as well as G_BROKEN_FILENAMES
check unread mails in mailing list
add DETAIL_SPECIAL_FILE instead?

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
caching of metadata, even across restarts (storing to cache file), keeping partial tree in memory

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;
};
