It's been a long time since I last updated BitSlug. Refactoring took more time than expected, and
I was very busy with final exams, project works and my thesis. Right now is not good either, but
a last release is planned, and after that, I will come up with a new concept for BitSlug.
Actually, it's already in the works, but I can't tell any details yet. The general idea will be
separating the BitTorrent engine and the user interface into separate programs. I was also
thinking about making the engine network-aware, but this requires work on security measures.
By making this change, it will be possible to provide BitTorrent services to any program that
requires them, but the user will still have full control over the file sharing process.
Aside from a simple command line front end and a GUI (similar to the current one, but
without Metal ;) ), other apps are to be written (I have something specific in mind which
I will reveal later).
About
BitSlug is a BitTorrent client for Mac OS X, aiming at low CPU usage and tight integration
into the desktop. Since there are already some native implementations of the BitTorrent protocol
available, I decided not to implement one of my own, but instead use one that's suitable
for a GUI application.
First, I wanted to use libbt, because it's written in C and doesn't require external libraries.
Unfortunately, libbt has a very strange design, and is by all means not a good solution
for an object-oriented GUI application.
Now, there are two C++ libraries. libtorrent and libtorrent. Yes, they've both got the same name.
One uses sigc++ and targets mainly Linux (it works on OS X though), the other is extremely portable
thanks to the C++ class library boost. I chose the latter, and I think it saved me a lot of effort.
Thus, basically, thanks go to Rasterbar Software for their good implementation.
Please note this is my first Cocoa application. I just wanted something useful for me and others, so
I chose a BitTorrent client.
If you'd like a feature to be implemented or a bug fixed, don't hesitate to contact me.
I hope I can handle the traffic. If you like, you can also directly go to the SourceForge project
page and file your complaints in the bug tracking system.
Downloads
These are universal binaries compiled for both PowerPC and Intel Macs.
The Panther (10.3) release has been cancelled for now. I didn't realize Universal Binaries require Tiger to build/run... *sigh*
Anyway, here's the next release towards 0.2: BitSlug-0.2b.dmg
This is the older 0.1 release. It has been tested on a PowerBook G4, several iBook G4s and an iMac Core Duo with Mac OS X Tiger (10.4). BitSlug-0.1.dmg
Screenshots
To see what it looks like in full action:
Development
The development page can be found on SourceForge
There are still a lot of features missing, and of course there are bugs.
My top priority at the moment, though, is preparing an easily buildable source package.
BitSlug is statically linked to a custom-built libtorrent, which in turn is statically linked
to a custom-built boost. I'm aiming at packing the three Xcode projects into one and supplying
a libtorrent framework inside the final application bundle. I'm having difficulties with this, though.
Please provide hints if you know how it works.
Roadmap
0.2
Copy torrents to a persistent location before starting, like
~/Library/Application Support/BitSlug OR serializing the bdecoded dictionaries
(this is a requirement for the next 2 features)
Delete copied torrents on disk when they are removed from the list
Save torrent list on exit and load on startup
Drag&drop support
Fast resume
Multiple selection in torrent list possible (to start/stop/delete a whole group of torrents)
Recheck when done (if some fast resume broke the data)
0.3
Add more configuration options
Make the displayed info configurable
If it makes sense, download into a temporary location
Provide autoloading and autodeleting of torrent files (like Azureus)
A download queue (finally)
0.4
Info window for a selected torrent with peer info etc.
Add an option for prioritizing first and last pieces (to allow video preview etc.)
Allow selecting specific files for download
Rules for the download queue
Finish port (if feasible)
0.5
A preview feature, preferably using libavcodec/libavformat (or QT? That's unportable though...)
1.0
Feature freeze
If port done, final binaries for the major platforms
2.0
Write our own BitTorrent backend or reduce binary size by moving away from boost?
-> Huge amounts of work!