I’m writing a program. It’s quite exciting in a way, because it’s a very long time since I coded anything more than a few lines just for the fun of it. I’m coding something that I’ve needed for a while. First I’ll state the problem:
When downloading music files from the net, you are often going to have duplicates and bad files. All the music players I have at the moment do a good job of divorcing the music from the file system; this is a Good Thing when I am listening to music I’ve happily categorised. However, there is the time between downloading a file and importing it into your music library when you are deciding whether the downloaded file is good enough. Here, the connection to the file system is essential: you want to be able to delete bad files and move good files to reasonably named folders within your music library, ready for importing to your favourite music player.
What I am trying to write is a nice program that allows you to browse music that you have downloaded and quickly and efficiently decide whether or not to keep that music. If you don’t want the music, delete should be one-click away; conversely, it should also be a one click operation to keep the music and place it in the appropriate place. I have an absolute mountain of music waiting for this treatment; I discovered two hundred and fifty odd more files when I was seeing what was on my old XP disk that I wanted to keep!
I have also been meaning to have a look at what it is like to code in Mono — and coding on Linux in general — so I am going to be using Mono/C#/Gtk# combination. I shall probably move onto the GStreamer framework once the C# bindings are released.
My progress so far (one afternoon’s work so nothing special!) is shown to the right in my Linux screenshot. At the moment I am just passing off to mpg123 to play the music. This introduces several problems of its own, as I don’t have much control over the external process. I think I shall dig into Muine’s code to work out how they do it; from what I can tell so far they use some native code to interface with either Xine or GStreamer. Whether I get round to this depends on how annoying mpg123 turns out to be, how long Gst# takes to become stable and how much I want to look into native library bindings.
From my work so far, Gtk and the Gtk# bindings seem to be a nice framework to work with. Whilst somewhat, ehm, different to work with than the GUI toolkits I’m used to, the way the toolkit works presents some interesting possibilities. I particularly like the way the tree- and list-view widgets are the same thing, allowing for very simple creating of the tree-with-details UI you can see in the screenshot.
Back to coding, then, I go. Time will tell whether this initiative is successful or not =)