I am running the new version now, everything seems to be working great as always! I will let you know if I run into any problems

re-download it if you are using turbo - there was a flaw relating to random name generation and turbo mode which caused songs to not be downloaded (due to using the same temp name for all the songs sniffed at once - yay psuedorandom random generator).
I've also added an entry on the status page for it, you now get to know known stations count, how many songs are known, avg download speed, turbo mode status, adn some other bits. Most importantly, it shows pending songs and their statuses such as
CODE
waiting for aart Daft Punk - "Aerodynamic" on 'Discovery' (ID S87105)
downloading now Marilyn Manson - "Sweet Dreams (Are Made Of This)" on 'Smells Like Children' (ID S262798)
waiting to download Future Prophecies - "Concrete Combat" on 'Moving Shadow 05.2 - Live Mix By Calyx' (ID S370446)
More importantly, I've added a throttle function to sproxy. go into the settings, and enter the desired download rate in KB/s (up to your connections max ofc). Do note that throttling assumes an equal bandwidth distribution for all active requests, so the end download speed available to one connection is throttleTarget/numActiveConnections. So with 2 active connections, and a 300kb/s target, each gets about 150kb/s.
Why does this matter? it will cause turbo to mess up for 3 songs or so if throttling is active and you are making other requests via sproxy besides pandora, as it thinks your download speed is much higher. (it uses average of the last 3 songs to compute turbo wait time)
I've made motions towards getting the selective downloading implemented (status page RPC and form, + trayicon).
Also, instead of integrating the DatFile, which is used as a "simple" resource storage mechanism, more elegant than using a zip and some outside library, i've made it into a lib. To use it, reference the dll.
Methods are relatively simple->
static bool DatFile.Verify(string filename): verify the md5 hash of the payload
static void DatFile.Create(IList files, string destfilename, bool useCompression): create a new dat file
non-static methods as follows
Constructor(): create a new datfile object. does nothing important
bool Compressed: true if using gzip compression, false otherwise
int Count: number of entries in dat file read
byte[] GetData(DatEntry entry): decompressing an entry if neccisary, it returns a copy of the data for it
byte[] GetData(string entry): same as above, except uses an entry name instead of entry struct
void Read(string filename): read a datfile from disk. verifies md5 before reading
this[int index]: returns datentry for index
this[string key]: returns datentry for key (entry name)
compression is gzip. in the case of the turbo data, which was 14 mp3 and m4a files (blank), ~500kb uncompressed, it reduced it to 14kb. entries are uncompressed on demand rather than as a whole for sake of performance. in addition, when an entry is uncompressed it remains uncompressed for performance reasons as well. zipping the lot gets it to about 8kb, as the gzip entries don't share dictonaries. Nor is there a way to have c# gzip stream support multiple files in one gzip entry - it's all or nothing.
simple GUI to make dats:
http://zzj.itf-inc.c...ds/DatMaker.exe
name of entrys is the filename, minus any slashes (thus C:\Documents and Settings\SProxy.exe becomes SProxy.exe"). Case sensitive.
plugin "interface" is relatively solid now, i'll post about it later. (interface being how saver2 talks to its plugins, not a true c# interface)