A super-duper-awesomesauce addition for the future would be the ability to cache a certain amount of music locally for offline playback (limited to a certain user-selectable size). So, for example, I could tell JRemote to cache up to 6GB of data.
What I'm thinking is two-fold:
1. You could designate a certain Playlist/Smartlist (or something) in the server-setup settings, and then JRemote would try to keep these files cached all the time (checking for new items whenever on WiFi and downloading them in the background, for example).
2. It would cache the last-songs-played in a FIFO system. The stuff that hasn't been played the "longest ago" would fall out of the cache as it fills up (but it would preserve the items in #1 first and only do #2 if there was extra room left over in its "allotted space").
Then, just add a special JRemote-side playlist item to the Playlists "Tab" that shows all currently cached media. This would be SUPER SWEET for using JRemote in places with no cell coverage (Airplanes and whatnot). I don't know what the implications of that would be for the App Store, but I suspect it would be fine. iCatcher and all the podcast catchers do essentially the same thing (download tracks in the background and save them in the App's storage). There might even be other music streamers that do this, I'm not sure, as I use JRemote not those.
Also, it would be really awesome if JRemote would do a bit of read-ahead caching.
So, if you are playing an album, when it finishes downloading the current track to play back, start downloading the next one and hold it in the cache, so that when it comes time to switch tracks, you don't have trouble if your 3G connection is weak at that particular moment. Plus, you could probably implement gapless playback then, which would be sweet.
I can tell that with my home server at least, JRemote typically downloads the entire currently playing track well before the track is finished playing. You can tell if you are playing something and then move somewhere where the signal is non-existent/weak. The current track finishes playing, but then it stops when trying to load the next track. So, once you have the caching system, why not keep reading the next upcoming track, to prevent this? Of course, the user might manually switch, and then you'll have to stream the new one anyway, but most of the time it would prevent the "gap" and make playback more reliable.
EDIT: Oh yeah, and the UI isn't great when you do encounter network problems due to weak signal. It doesn't give you an error or any feedback, it just refuses to play, and looks broken. You don't want it popping up modal dialogs all the time (which would be annoying), but some sort of indicator that shows "network problems, please wait" would be good. It also seems like at some point JRemote "gives up" trying to resume when it hits a problem like this. It would be good to keep trying to resume for a while, and then change the indicator to show "I gave up, move somewhere with better signal and try again" or something.