ipod-sharp is an open source Mono / .NET wrapper designed to allow the use of an iPod in C# projects. It allowed the user to manage tracks and playlists on the device and could be used in an iTunes clone such as Banshee. I contributed significantly to the project, expanding its scope and adding Windows support..

Some examples from the CHANGELOG are:

2007-08-10 Justin Cherniak

    * src/TrackDatabase.cs: Fixed bug where calling DatabaseRecord.ReassignTrackIds() would invalidate the track ids within the TrackListRecord.

2007-08-04 Justin Cherniak

    * src/Device.cs: changed ListDevices() so that it relies on the platform device to generate IPod.Devices instead of doing the conversion b/w IDevices and Devices itself
    * src/PhotoDatabase.cs: Added checks to LookupPhoto functions (faster than catching exceptions)
    * src/SysInfoExtended.cs: Compatibility fix for Windows Vista.
    * src/Track.cs: Added the following fields: DiscNumber, TotalDiscs, BPM, AlbumArtist, Composer, LatestRating, LastLastModifiedTime. Added write accessors for DateAdded, Size. Compatibility fix for URI generation under Win32
    * src/TrackDatabase.cs: Added TrackAdded/TrackRemoved events, support for Track.LatestRating. Compatibility fixes for Win32. Added CreateTrack overload which copies the track to the iPod immediately versus waiting for TrackDatabase.Save()
    * src/Win32/DeviceEventListener.cs: Rewrote Win32.DeviceEventListener so that it mainly operates statically. This allows it to keep one list of Devices instead of creating different devices for different listeners (when in truth, they would be the same physical device).
    * src/Win32/Device.cs: Now gets its device list from DeviceEventListener.

2007-08-03 Justin Cherniak

    * Recursively applied svn:eol-style=native to all text files
    * src/Win32/WinAPI.cs: Fixed inconsistent eol's
    * src/Device.cs: Fixed inconsistent eol's

2007-07-02 Justin Cherniak

    * Added Win32 support to the library.

    * All Mono specific bits are cased in "#if !DOTNET" blocks to allow the code to compile for windows using Microsoft .NET (All Win32 specific code compiles under Mono, so to build a cross platform build, use mono. This allows the code to be compiled under Micrsoft .NET for Windows use)
    * src/Unix: Moved Unix specific implementations (Device.cs, DeviceAddedHandler.cs, DeviceEventListener.cs, DeviceRemovedHandler.cs, Initializer.cs) to this directory and to IPod.Unix namespace
    * src/Win32: Added Windows specific implementation of Device.cs in IPod.Win32 namespace
    * src/Device.cs: Completely redone. Moved all platform specific stuff to src/Unix/Device.cs and src/Win32/Device.cs. This file now creates and uses one of the platform specific devices depending on the OS on which it is run.
    * src/IDevice.cs: Interface that both Unix and Win32 Devices implement so that Ipod.Device can utilize either one depending on the runtime OS.
    * src/PhotoDatabase.cs: Changed Mono specific call to .NET call.
    * src/TrackDatabase.cs: Added Win32 FlushFileBuffers call for .NET compilation
    * src/SysInfo.cs: Rudementary parser for the SysInfo file stored on the iPod. Currently only used in the Win32 implementation.
    * src/SysInfoExtended.cs: XML Parser for SysInfoExtended stored in the iPod firmware. Some code taken from libipoddevice. Currently only used in the Win32 implementation.
    * src/Win32/WinAPI.cs: Included Win32 API Wrappers used throughout the solution
    * src/Win32/DeviceEventListener.cs:
    * src/Win32/DeviceWatcherWindow.cs: Implements a DeviceEventListener for Win32 by monitoring WM_DEVICECHANGE
    * src/Unix/DeviceEventLister.cs: Moved to IPod.Unix namespace.
    * src/Unix/Device.cs: Removed common (between platforms) functionality to IPod.Device. Added explict conversion between IPod.Device
    * src/ipod-sharp.csproj: Added Visual Studio 2005 project with DOTNET compilation symbol on by default (allowing library to build in Visual Studio for Win32 with Microsoft .NET)
    * src/ipod-sharp.mdp: Updated project to reflect new paths