Non-threaded file transfers
This change is very technical, but it's also a very big one. Qt sockets aren't generally supposed to be used in secondary threads, instead each socket emits a signal that says when data is available to read on the socket, when data was successfully written, when the socket disconnects... I originally implemented file transfer in SoulseekQt using signals, but transfer speeds ended up being really slow. Not sure if it was due to Qt at the time or my own implementation, but I switched to a threaded model very early on (where each download or upload is managed in its own thread) and transfer speeds improved greatly. At the same time, I've been getting crash reports related to download threads for years, and with Qt 5 almost every new upload or download emits a console warning message: "socket notifiers cannot be enabled from another thread". It's never crashed for me though so I'm not sure how big of a problem it really is.
As an experiment, I decided to try implementing file transfers as non-threaded again using signals and slots. Transfer speeds seem very good this time around. Let me know how it works for you.