4 Ideas for Google Summer of Code 2010
Shane Bell edited this page 2014-05-06 19:37:24 -07:00

Status

Clementine wasn't accepted to GSoC as a mentor organisation this year, but we'll keep this list of ideas here anyway for reference.

Ideas

Here are some ideas that we've thought up that are about the right size for students to take on over the summer. Keep in mind that these are only suggestions - we'd love someone to come up with some entirely new feature we hadn't thought of before!

iPod and Mobile Device Support

This is a big set of features that we want to get in to Clementine before version 1.0. Amarok had great support for MP3 players, and we want something even better. Taking on this project would involve some or all of the following:

  • Design a C++ interface for supporting and abstracting away the differences between different types of device. Ideally it should be possible for a new class to be dropped in to support a new type of MP3 player. The interface should allow the following operations:
  • Checking if there are any supported devices attached to the system.
  • Monitoring for new devices (using HAL, Solid, etc.) and emitting a signal when the user plugs one in.
  • Listing music on the device.
  • Copying music to/from the device.
  • Design and implement a GUI that lets the user see which devices are connected and copy files to/from each one.
  • Allow the user to select files, folders, artists or albums to keep synchronised between the library and a device.
  • Support (an implementation of your interface) for iPods (maybe using libgpod) and generic removable-storage.

This is a big project, and we'd be quite happy with a proposal that only tackled a couple of these points.

Scripting Support

Other music players have had a lot of success allowing users to create scripts that run inside the application and add new features. We'd like some scripting bindings for Clementine, and a GUI for creating and loading scripts. Some ideas:

  • Python is probably a good choice for scripting language, although QtScript, JavaScript, LUA or maybe even Perl would be ok too. Bonus points if the system is flexible enough for new languages to be added easily.
  • Create interfaces (and tidy the existing ones where appropriate) for the big classes in Clementine - such as the library, the playlist and the player.
  • Design and implement a GUI that lets the user see what scripts are available, enable/disable them, and add new ones from disk.

DBUS Support

This is loosely related to scripting support above. It would be nice to be able to control Clementine over DBUS or through the commandline. A DBUS interface should be created that allows a user to:

  • Query information about the current track (metadata, album art, etc.)
  • Receive notifications when the current track changes
  • Query the songs in the library
  • Query the songs in the playlist
  • Add new songs to the playlist
  • Control the player directly (ie. next, previous, stop, pause)
  • Notify other apps on certain events (eg. new track started)

Podcast Support

We'd like users to be able to browse and subscribe to Podcasts through Clementine. This would probably involve doing some or all of:

  • Looking for some big podcast directories on the internet, and finding whether they have public APIs for fetching content.
  • Designing a C++ interface for communicating with these podcast directories. Ideally a new class could be dropped in to add support for a new podcast directory.
  • Designing a kind of "manager" class that is responsible for keeping a list of these podcast directories and updating every week/month.
  • Designing and implementing a GUI that lets the user browse and search through lists of podcasts (and adding their own by URL).
  • Letting the user subscribe to individual podcasts. Clementine should then check the podcast for updates at some predetermined interval, download the newest items, make them available in a list in the GUI somewhere (probably the "Radio" tab) and finally show a notification telling the user that new stuff is available.

Automatic Tag Management

There are a couple of other applications available that will automatically fix untagged files in your music collection. It would be great if Clementine could do this too!

  • Find some way to identify MP3s (probably using a service like musicbrainz) that has a public API.
  • Add some menu item or dialog to the GUI that allows the user to either select individual files for retagging, or that automatically finds badly tagged files in the library.
  • Write some code to process files and retag them if necessary.

Other Ideas

The ideas above are by no means exhaustive - we'd welcome new suggestions that we haven't thought of before! If you need some inspiration check out the issues list. If nothing there sounds interesting then feel free to suggest your favourite feature from another music player :-)