public void CommitToIpod (GPod.ITDB database)
{
bool addTrack = IpodTrack == null;
if (IpodTrack == null) {
IpodTrack = new GPod.Track ();
}
var track = IpodTrack;
track.Compilation = IsCompilation;
track.AlbumArtist = AlbumArtist;
track.Bitrate = BitRate;
track.Samplerate= (ushort)SampleRate;
track.BPM = (short)Bpm;
track.Comment = Comment;
track.Composer = Composer;
track.TimeAdded = DateTime.Now;
track.CDs = DiscCount;
track.CDNumber = DiscNumber;
track.TrackLength = (int) Duration.TotalMilliseconds;
track.Size = (int)FileSize;
track.Grouping = Grouping;
try {
track.TimePlayed = LastPlayed;
} catch {
Hyena.Log.InformationFormat ("Couldn't set TimePlayed to '{0}'", LastPlayed);
}
track.PlayCount = (uint) PlayCount;
track.Tracks = TrackCount;
track.TrackNumber = TrackNumber;
track.Year = Year;
try {
track.TimeReleased = ReleaseDate;
} catch {
Hyena.Log.InformationFormat ("Couldn't set TimeReleased to '{0}'", ReleaseDate);
}
track.Album = AlbumTitle;
track.Artist = ArtistName;
track.Title = TrackTitle;
track.Genre = Genre;
track.SortArtist = ArtistNameSort;
track.SortAlbum = AlbumTitleSort;
track.SortAlbumArtist = AlbumArtistSort;
track.SortTitle = TrackTitleSort;
track.Rating = ((Rating >= 1) && (Rating <= 5)) ? (uint)Rating : 0;
if (HasAttribute (TrackMediaAttributes.Podcast)) {
track.Description = description;
track.RememberPlaybackPosition = true;
track.SkipWhenShuffling = true;
track.Flag4 = (byte)1;
track.MarkUnplayed = (track.PlayCount == 0);
}
track.MediaType = GPod.MediaType.Audio;
if (HasAttribute (TrackMediaAttributes.VideoStream)) {
if (HasAttribute (TrackMediaAttributes.Podcast)) {
track.MediaType = GPod.MediaType.Podcast | GPod.MediaType.Movie;
} else if (HasAttribute (TrackMediaAttributes.Music)) {
if (HasAttribute (TrackMediaAttributes.TvShow)) {
track.MediaType = GPod.MediaType.MusicTVShow;
} else {
track.MediaType = GPod.MediaType.MusicVideo;
}
} else if (HasAttribute (TrackMediaAttributes.Movie)) {
track.MediaType = GPod.MediaType.Movie;
} else if (HasAttribute (TrackMediaAttributes.TvShow)) {
track.MediaType = GPod.MediaType.TVShow;
} else {
// I dont' think AudioVideo should be used here; upon loading the tracks
// into Banshee, audio files often have AudioVideo (aka MediaType == 0) too.
//track.MediaType = GPod.MediaType.AudioVideo;
track.MediaType = GPod.MediaType.Movie;
}
} else {
if (HasAttribute (TrackMediaAttributes.Podcast)) {
track.MediaType = GPod.MediaType.Podcast;
} else if (HasAttribute (TrackMediaAttributes.AudioBook)) {
track.MediaType = GPod.MediaType.Audiobook;
} else if (HasAttribute (TrackMediaAttributes.Music)) {
track.MediaType = GPod.MediaType.Audio;
} else {
track.MediaType = GPod.MediaType.Audio;
}
}
if (addTrack) {
track.Filetype = mimetype;
database.Tracks.Add (IpodTrack);
database.MasterPlaylist.Tracks.Add (IpodTrack);
if (HasAttribute (TrackMediaAttributes.Podcast) && database.Device.SupportsPodcast) {
database.PodcastsPlaylist.Tracks.Add (IpodTrack);
}
database.CopyTrackToIPod (track, Uri.LocalPath);
Uri = new SafeUri (GPod.ITDB.GetLocalPath (database.Device, track));
ExternalId = (long) IpodTrack.DBID;
}
if (CoverArtSpec.CoverExists (ArtworkId)) {
string path = CoverArtSpec.GetPath (ArtworkId);
if (!track.ThumbnailsSet (path)) {
Log.Error (String.Format ("Could not set cover art for {0}.", path));
}
} else {
track.ThumbnailsRemoveAll ();
}
}
}