In this revision, I added some additional features I would like to have for this project.  One of the features I believe users will enjoy is the synchronization of tag information.  I also defined, (albeit somewhat broadly), how files would be copied.  To speed up synchronization, I could store a history of synchronizations.  I have begun doing some light reading on synchronization algorithms.<br>
<br>My updated proposal is listed below.<br><br><p><strong>Proposal Name:</strong></p>
<p>Playlist and Collection Synchronization</p>
<p> </p>
<p><strong>Motivation for Proposal / Goal:</strong></p>
<p>I own an iPod and would love to have this set of features.</p>
<p><strong>Implementation Details:</strong></p>
<p>Definition: Synchronization will keep copies of selected items from
the Collection and/or Playlists on the a particular media device.</p>
<p>All items will be checked to see if they already exist on the device.</p>
<p>Improve device support in Amarok 2.  Currently podcasts are not
displayed properly for iPods.  I could fix this problem by allowing the
podcasts to be displayed under the device's collection or the device's
podcasts and playlists could be displayed under the Playlist tab.  I
will need more feedback to decide which design would be more usable or
if I should consider an alternative design.</p>
<p>Items that can be synchronized:</p>
<ul><li>All (Parent group of all items)<br> 
<ul><li>Synchronizes all items from the collection, playlists, and podcasts.</li><li>Items on the device not in the collection, playlists, or podcasts will be removed or added to collection, playlist, or podcasts.</li></ul>

</li><li>Collection (Parent group of Artist, Genre, Composer, and Year)<br> 
<ul><li>Synchronizes all items from the collection</li><li>Music on the device not in the collection will be removed or added to collection. </li></ul>
</li><li>Artist   
<ul><li>Synchronizes all items in collection by select artist(s)</li><li>Items by select artist(s) on the device not in the collection will be removed or added to collection.</li></ul>
</li><li>Genre   
<ul><li>Synchronizes all items in collection of select genre(s)</li><li>Items by select genre(s) on the device not in the collection will be removed or added to collection.</li></ul>
</li><li>Composer   
<ul><li>Synchronizes all items in collection by composer(s)</li><li>Items by select composer(s) on the device not in the collection will be removed or added to collection.</li></ul>
</li><li>Year   
<ul><li>Synchronizes all items in collection by year(s) of track(s)</li><li>Items of select year(s) on the device not in the collection will be removed or added to collection.</li></ul>
</li><li>Playlists <br> 
<ul><li>Synchronizes all playlists or select playlist(s)</li><li>Select playlist(s) on the device not in the local list of playlists will be removed or added to collection.</li></ul>
</li><li>Podcast   
<ul><li>Synchronizes all podcasts or select podcasts</li><li>Select podcast(s) on the device not in the local list of podcasts  will be removed or added to podcasts.</li></ul>
</li></ul>
<p>Any combination of subgroups may be selected.  In that case the union of the selected items will be synchronized.</p>
<p>Album art will be synchronized.  Album art may also be back-synchronized.   </p>
<p>Also, if the user updates tag information for files on the device
that are also in the collection, the latest tag information should be
updated.  Tag information should also be updated if the collection tags
are updated.  Tag updates should occur as the files are being checked.</p>
<p>Back-synchronization, as described in the aforementioned list, will
allow the user to automatically add music from his device to the local
collection.  This feature is especially useful for users that add media
from using other applications or computers.</p>
<p>For devices that support user created folders, the user could be
given the option of organizing the files on the device into folders by
the categories of his choice or the collection file heiarchy could be
copied to the device.  For iPods, the iPod file structure will be used
unless the user specifies otherwise.  This will be useful for users that
have media not supported by the iPod firmware but supported by open firmware such as Rockbox.</p><p>The algorithms that will be designed will involve locating files,
comparing file attributes, and determining when synchronization or
back-synchronization should occur.</p>
<p>The graphical visualization could be displayed as a widget. 
Furthermore, options should be added under the right-click menu for the
device's.   The user will be given the option of which items to
synchronize.  The design of the configuration widget could use a tabbed view with one tab per category of synchronization.</p>

<p><strong>Tentative Timeline:</strong></p>
<p>Community Bonding Period: Study Amarok code base (which I have
already started doing) to get an idea of what I classes to use to
implement the project idea.  Become more familiar with development
environment.  Develop algorithm and test cases.  Includes learning
documentation standards.</p>
<p>May 23: Refine algorithm.  Ensure it covers all desired features
(communicate with community and developers).  Begin prototyping (define
classes and functions).  At this point my algorithm and test cases
should be completed.</p>
<p>May 30: Finish prototype of classes and start designing basic gui configuration.</p>
<p>July 6: Test prototype for midterm</p>
<p>July 13: Midterm deadline.</p>
<p>Interim Period: Optimize algorithm and implementation. Continue
refining gui configuration and algorithm implementation.  Mentor
assists with project.  Fix bugs and finalize test cases. Ensure GUI
meets standards.  Write documentation.</p>
<p>August 10: Suggested Pencils Down.  Finalize documentation. </p>
<p>August 17: Firm Pencils Down.  Submit evaluation to Google.</p>
<p>August 24: Evalutation deadline.</p>
<p>August 25: Final Results Announced!  Begin coding my next idea (non-GSoC) for the Amarok project.</p>
<p>September 3: Submit required code samples to Google.</p>