TagLib, symlinks, and an optimized upload queue
The biggest piece of news this time around is that I've managed to integrate TagLib, the super versatile audio file analysis and tagging library into SoulseekQt. Finding TagLib was a pretty major happy accident. I was showing SoulseekQt to a co-worker, and his second question (after: can you search for FLAC files?) was, does it show FLAC file audio properties in search results? No, I said, we only really analyze MP3 files for audio properties. But that's a good idea. A-googling I went for a C/++ library that can analyze FLAC files and TagLib showed up almost immediately. On top of indexing FLAC file audio properties, TagLib also does that for (begin near copypasta:) MP3, MPC, MP4, ASF, AIFF, WAV, TrueAudio, WavPack, Ogg FLAC, Ogg Vorbis, Speex and Opus files. Goodbye my own personal MP3 analysis function, hello TagLib. Though audio attributes for all these file types should already show up in your own private share (I've only really tested MP3s, MP4s, FLACs and Oggs), the only audio attributes I'm currently indexing are bitrate and play length, the latter one which has been lost to us since the dawn of SoulseekQt. Whether the file is VBR or not, interestingly, is not information that's provided by TagLib and so that no longer shows up, but I feel the benefits more than outweigh this loss. I'd be happy to add other audio attributes that you folks feel might be useful, so let me know.
Another bit of good news for those of you who prefer organizing their shared folders via symlinks, those are back in play. Scanning symlinked folders was disabled at some point because it would occasionally create inifinite scan loops. I'm making a list of the real location of each scanned subfolder and checking it twice to prevent those kinds of loops, so hopefully this'll address that.
Finally, I've sort of reworked the way the transfers are processed on the upload queue. The recent "upload small files immediately" feature created a performance problem that led me to slow down the speed at which the client processes new upload requests. That was not ideal, so I moved things around and now hopefully the whole thing should be faster.
These are all very sensitive changes, so I'm expecting more problems than usual. I'll be fixing anything that comes up ASAP, so keep me posted.
Linux builds are pending as I've yet to get TagLib built on Linux.
1/21: Fixed a bug related to scanning filenames with international characters. Included latest language translations.