For those not familiar with it, the Rockford-Fosgate Omnifi DMP1 is basically a 20 gig hard drive which connects to your car stereo via an aux input, and has a display/interface to control playback. MediaCenter supports (or is in the process of supporting) the DMS1, a music streamer from the same product line. Both devices are supposedly UPNP. The software which comes with them, SimpleCenter, is pure crap. It's written in Java, is slow and buggy as hell. Obviously, some way to manage the DMP1 via MediaCenter would be great, especially as several thousand of these have recently been liquidated by Woot, meaning there are several thousand new customers actively seeking a better solution.
Basically all SimpleCenter does is copy the files to the DMP1 (which shows up just fine as a drive under windows) in a folder called "content", renaming them (such as "1c490697.trm") via some scheme. It then places or updates an index file (such as "173ddf13.000") in a folder called "db", which is an ascii file similar to some sort of HTML (the examples I gave are not necessarily related). The content of one of these file is:
<upnp:BrowseResponse xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/">
<Result>
<DIDL-Lite>
<container id="9517595c" parentID="9517595b" childCount="16" restricted="true" searchable="false">
<dc:title>Chuck</dc:title>
<res></res>
<upnp:class>object.container.album.musicAlbum</upnp:class>
</container>
</DIDL-Lite>
</Result>
<NumberReturned>1</NumberReturned>
<TotalMatches>1</TotalMatches>
<UpdateID>0</UpdateID>
</upnp:BrowseResponse>
Apparantly that's an index to an album, the filename of which is "9517595b.000". The index to the songs, named "9517595c.000" contains:
<upnp:BrowseResponse xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/">
<Result>
<DIDL-Lite>
<item id="f1cba6a1" parentID="9517595c" restricted="false" refId="f1cba69f">
<dc:title>Some Say</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="5045131">file://usr/content/f1cba69f.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cdf096" parentID="9517595c" restricted="false" refId="f1cba6a4">
<dc:title>Open Your Eyes</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="4056455">file://usr/content/f1cba6a4.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cba697" parentID="9517595c" restricted="false" refId="f1cba695">
<dc:title>I'm Not The One</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="5247640">file://usr/content/f1cba695.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cba69c" parentID="9517595c" restricted="false" refId="f1cba69a">
<dc:title>Welcome To Hell</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="2898500">file://usr/content/f1cba69a.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cdf0a5" parentID="9517595c" restricted="false" refId="f1cdf0a3">
<dc:title>No Reason</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="4526654">file://usr/content/f1cdf0a3.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cdf0aa" parentID="9517595c" restricted="false" refId="f1cdf0a8">
<dc:title>Slipping Away</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="3686560">file://usr/content/f1cdf0a8.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cdf09b" parentID="9517595c" restricted="false" refId="f1cdf099">
<dc:title>88</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="6801181">file://usr/content/f1cdf099.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cdf0a0" parentID="9517595c" restricted="false" refId="f1cdf09e">
<dc:title>Subject To Change (bonus)</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="4800015">file://usr/content/f1cdf09e.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1c6c479" parentID="9517595c" restricted="false" refId="f1c6c477">
<dc:title>Angels With Dirty Faces</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="3537359">file://usr/content/f1c6c477.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1c9357e" parentID="9517595c" restricted="false" refId="f1c9357c">
<dc:title>The Bitter End</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="4223221">file://usr/content/f1c9357c.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1c47a7f" parentID="9517595c" restricted="false" refId="f1c47a7d">
<dc:title>Pieces</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="4465211">file://usr/content/f1c47a7d.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1c6c474" parentID="9517595c" restricted="false" refId="f1c6c472">
<dc:title>Moron (bonus)</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="2978746">file://usr/content/f1c6c472.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cba68d" parentID="9517595c" restricted="false" refId="f1cba68b">
<dc:title>Intro</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="1209517">file://usr/content/f1cba68b.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1cba692" parentID="9517595c" restricted="false" refId="f1cba690">
<dc:title>Noots (bonus)</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="5646998">file://usr/content/f1cba690.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1c93583" parentID="9517595c" restricted="false" refId="f1c93581">
<dc:title>We're All To Blame</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="5357357">file://usr/content/f1c93581.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
<item id="f1c93588" parentID="9517595c" restricted="false" refId="f1c93586">
<dc:title>There's No Solution</dc:title>
<res protocolInfo="file:*:audio/mpeg:*" size="4855180">file://usr/content/f1c93586.trm</res>
<upnp:artist>Sum 41</upnp:artist>
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
</item>
</DIDL-Lite>
</Result>
<NumberReturned>16</NumberReturned>
<TotalMatches>16</TotalMatches>
<UpdateID>0</UpdateID>
</upnp:BrowseResponse>
Obviously, if one of you smart programmer types could figure out the way the files are named, it doesn't seem like it'd be very difficult to get MediaCenter to handle adding and removing files from these devices...