Google Summer of Code: Playlist and Collection synchronization

Bart Cerneels bart.cerneels at kde.org
Fri Mar 20 09:43:08 UTC 2009


Hey Rashad

Seems like the GSoC proposals are discussed on the Amarok ML. So replying there.

So it's about this proposal (reference):
http://techbase.kde.org/Projects/Summer_of_Code/2009/Ideas#Project:_Playlist_and_Collection_synchronization

On Thu, Mar 19, 2009 at 2:55 AM, Rashad Tatum <tatum.rashad at gmail.com> wrote:
> Dear Bart Cerneels,
>
> I am interested in applying for the Google Summer of Code program with the
> Amarok project.  I found an idea that I would be interested in: Playlist and
> Collection Synchronization.
> I have copied and filled out (somewhat) the application template from the
> KDE webpage for the Google Summer of Code site.
>
> Name:  Rashad Tatum
>
>
>
> Email Address: tatum.rashad at gmail.com
>
>
>
> Freenode IRC Nick: progmanos
>
>
>
> Location (City, Country and/or Time Zone): Marietta, Ga, USA UTC/GMT -5
> hours (Daylight Saving Offset, +1 hour)
>
>
>
> Proposal Name: Playlist and Collection synchronization
>
>
>
> Motivation for Proposal / Goal:  I have an iPod and I would love to have
> this feature.
>
>
>
> Implementation Details:  The user will be presented with a menu specific to
> his device.  The menu will allow the user to Synchronize All (the entire
> collection) or synchronize select items such as specific Music artists,
> genres, Podcasts, Playlists, etc.  An abstract class could be created to
> handle to the synchronization functions and device specific classes could
> inherit from this class.  Users should have the option of synchronizing new
> items without replacing the current data on their device.  Cover art should
> be synchronized.

You should take a good look at the CollectionLocation code and the
Meta::Playlist/PlaylistManager stuff. That will help you form an idea
about the base framework that is most likely to be your main "work
ground".

There are 2 major parts in my mind: Synchronization algorithm and the
visualization.

- Synchronization algorithm:
i.e. the nut's and bolts.
You'll have to find a way to integrated the synchronization concept
into Meta::Playlist. This will determine why tracks need to be copied
over and update any databases. Collection, TrackProvider,
PlaylistProvider and PodcastProvider are the classes that handle the
databases, the actual copying should be done using CollectionLocation.
I think you'll find that all this infrastructure will make this task
possible with relative few lines of code. But considerate thinking,
reviewing (the current design) and designing will need to be done.
Your academic CS classes should prove useful here.

- Visualization
This will be the tricky part. Everything should be visualized using
the current browser and contextview. For now our CollectionBrowser
shows the (e.g.) iPod collection next to the Local Collection. This
won't directly tell the user which tracks are on both devices or what
the status of any ongoing transfers is.
I propose to merge the 2 collection trees into something with unique
tracks. So there should be only one item per track, regardless of it
being in both Collections. Same for Albums, Artists, Genres and
Playlists, PlaylistGroups in the PlaylistBrowser.
2 small icon's would tell the user that it's on both iPod and Local
Collection. Changing tags, rating, score, ... should be applied to all
copies, i.e. in both databases and in the files on the filesystems.
Similarly, when playing a track, always use the most local one
available. In this case the local file.

I think we should create a Meta::ProxyTrack like class that internally
will contain a list of synced Meta::Tracks. This way for the rest of
Amarok it will behave like any other Track

[OFF-TOPIC: This can also be used for other versions of a tracks on
the same Collection (mp3, ogg, FLAC)]


>
>
>
> Tentative Timeline: I would like to discuss this further.
We need to figure out the major parts of the implementation first
before a timeline can be determined anyway. But you will need to allow
yourself about 2 weeks to get to know the code, set up the
dev-environment, etc.

>
>
>
> Do you have other obligations from late May to early August (school, work,
> etc.)?:  I am currently planning on taking 11 credit hours, but I am willing
> to take fewer hours if the project necessitates it.
/me is not familiar with the school system in the US, could you
elaborate? How much time will you be able to spend on this project
exclusively per week?

>
>
>
> About Me (let us know who you are!):
>
> I am a Computer Science/Mathematics student at Southern Polytechnic State
> University .  I am a 23 yr. old male from LaGrange, Ga.  I have taken the
> following Computer Science Courses: CS 1 & 2 and Data Structures.  I am
> currently taking the following CS courses: Database Systems, Digital Design,
> Algorithm Analysis, and Objective-C and Cocoa.  I enjoy learning new
> algorithms and programming languages.  I intend on pursuing graduate studies
> in Algorithms, Combinatorics, and Optimization or Computational Science at
> Georgia Tech.
>
> I recently began developing for the Amarok project this year.  I started
> using KDE in 2001 (when I started using GNU/Linux).  I began using Amarok in
> 2004.
>
> Sincerely,
>
> Rashad Tatum

I'm considering of handing of this to a mentor closer by, timezone
wise. Perhaps Ian? I have been doing some infrastructure work lately
for Playlists, so there will certainly be input from me at first.

Bart



More information about the Amarok mailing list