diff options
author | Jensen Somers <jensen@jsomers.be> | 2010-09-21 20:34:31 +0200 |
---|---|---|
committer | Gabriel Burt <gabriel.burt@gmail.com> | 2010-09-23 14:46:57 -0500 |
commit | 0ca9006011eb2e02ab4cf03305f52ed81d0e8a61 (patch) | |
tree | 996d18d4bb9102c6e5453805eb43e901ec6ae970 /src/Dap | |
parent | 62e46b87990f85e108d4292a4ffdad0f5d820834 (diff) |
[AppleDevice] Correctly set track media attributes (bgo#629103)
Set the track media attributes to a correct value when synchronizing
with or from an AppleDevice. Also, add and remove podcasts from the
podcast playlist.
Signed-off-by: Gabriel Burt <gabriel.burt@gmail.com>
Diffstat (limited to 'src/Dap')
-rw-r--r-- | src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceSource.cs | 10 | ||||
-rw-r--r-- | src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceTrackInfo.cs | 150 |
2 files changed, 84 insertions, 76 deletions
diff --git a/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceSource.cs b/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceSource.cs index a4bff3d44..c51335e67 100644 --- a/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceSource.cs +++ b/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceSource.cs @@ -571,10 +571,18 @@ namespace Banshee.Dap.AppleDevice try { if (track.IpodTrack != null) { UpdateProgress (progressUpdater, message, total - tracks_to_remove.Count, total); - foreach (var playlist in MediaDatabase.Playlists) + + foreach (var playlist in MediaDatabase.Playlists) { playlist.Tracks.Remove (track.IpodTrack); + } + + if (track.IpodTrack.MediaType == GPod.MediaType.Podcast) { + MediaDatabase.PodcastsPlaylist.Tracks.Remove (track.IpodTrack); + } + MediaDatabase.MasterPlaylist.Tracks.Remove (track.IpodTrack); MediaDatabase.Tracks.Remove (track.IpodTrack); + Banshee.IO.File.Delete (new SafeUri (GPod.ITDB.GetLocalPath (Device, track.IpodTrack))); } else { Log.Error ("The ipod track was null"); diff --git a/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceTrackInfo.cs b/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceTrackInfo.cs index 895671856..ddcabb441 100644 --- a/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceTrackInfo.cs +++ b/src/Dap/Banshee.Dap.AppleDevice/Banshee.Dap.AppleDevice/AppleDeviceTrackInfo.cs @@ -41,8 +41,8 @@ namespace Banshee.Dap.AppleDevice get; set; } - // Used for podcasts only - //private string description; + private string mimetype; + private string description; // Only used for podcasts. public AppleDeviceTrackInfo (GPod.Track track) { @@ -101,9 +101,11 @@ namespace Banshee.Dap.AppleDevice var podcast_info = track.ExternalObject as IPodcastInfo; if (podcast_info != null) { - //description = podcast_info.Description; + description = podcast_info.Description; ReleaseDate = podcast_info.ReleaseDate; } + + mimetype = track.MimeType; } private void LoadFromIpodTrack () @@ -140,7 +142,7 @@ namespace Banshee.Dap.AppleDevice TrackNumber = track.TrackNumber; TrackTitle = String.IsNullOrEmpty (track.Title) ? null : track.Title; Year = track.Year; - //description = track.Description; + description = track.Description; ReleaseDate = track.TimeReleased; rating = track.Rating > 5 ? 0 : (int) track.Rating; @@ -149,36 +151,34 @@ namespace Banshee.Dap.AppleDevice PlaybackError = StreamPlaybackError.Drm; } - MediaAttributes = TrackMediaAttributes.AudioStream | TrackMediaAttributes.Music; - -// switch (track.Type) { -// case IPod.MediaType.Audio: -// MediaAttributes |= TrackMediaAttributes.Music; -// break; -// case IPod.MediaType.AudioVideo: -// case IPod.MediaType.Video: -// MediaAttributes |= TrackMediaAttributes.VideoStream; -// break; -// case IPod.MediaType.MusicVideo: -// MediaAttributes |= TrackMediaAttributes.Music | TrackMediaAttributes.VideoStream; -// break; -// case IPod.MediaType.Movie: -// MediaAttributes |= TrackMediaAttributes.VideoStream | TrackMediaAttributes.Movie; -// break; -// case IPod.MediaType.TVShow: -// MediaAttributes |= TrackMediaAttributes.VideoStream | TrackMediaAttributes.TvShow; -// break; -// case IPod.MediaType.VideoPodcast: -// MediaAttributes |= TrackMediaAttributes.VideoStream | TrackMediaAttributes.Podcast; -// break; -// case IPod.MediaType.Podcast: -// MediaAttributes |= TrackMediaAttributes.Podcast; -// // FIXME: persist URL on the track (track.PodcastUrl) -// break; -// case IPod.MediaType.Audiobook: -// MediaAttributes |= TrackMediaAttributes.AudioBook; -// break; -// } + MediaAttributes = TrackMediaAttributes.AudioStream; + switch (track.MediaType) { + case GPod.MediaType.Audio: + MediaAttributes |= TrackMediaAttributes.Music; + break; + case GPod.MediaType.AudioVideo: + MediaAttributes |= TrackMediaAttributes.VideoStream; + break; + case GPod.MediaType.MusicVideo: + MediaAttributes |= TrackMediaAttributes.Music | TrackMediaAttributes.VideoStream; + break; + case GPod.MediaType.Movie: + MediaAttributes |= TrackMediaAttributes.VideoStream | TrackMediaAttributes.Movie; + break; + case GPod.MediaType.TVShow: + MediaAttributes |= TrackMediaAttributes.VideoStream | TrackMediaAttributes.TvShow; + break; + case GPod.MediaType.Podcast: + MediaAttributes |= TrackMediaAttributes.Podcast; + // FIXME: persist URL on the track (track.PodcastUrl) + break; + case GPod.MediaType.Audiobook: + MediaAttributes |= TrackMediaAttributes.AudioBook; + break; + case GPod.MediaType.MusicTVShow: + MediaAttributes |= TrackMediaAttributes.Music | TrackMediaAttributes.VideoStream | TrackMediaAttributes.TvShow; + break; + } } public void CommitToIpod (GPod.ITDB database) @@ -221,53 +221,53 @@ namespace Banshee.Dap.AppleDevice track.Title = TrackTitle; track.Genre = Genre; - switch (Rating) { - case 1: - case 2: - case 3: - case 4: - case 5: - track.Rating = (uint) rating; - break; - default: track.Rating = 0; - break; + track.Rating = ((Rating >= 1) && (Rating <= 5)) ? (uint)Rating : 0; + + if (HasAttribute (TrackMediaAttributes.Podcast)) { + track.Description = description; + track.RememberPlaybackPosition = true; + track.MarkUnplayed = (track.PlayCount == 0); } -// if (HasAttribute (TrackMediaAttributes.Podcast)) { -// track.DateReleased = ReleaseDate; -// track.Description = description; -// track.RememberPosition = true; -// track.NotPlayedMark = track.PlayCount == 0; -// } -// -// if (HasAttribute (TrackMediaAttributes.VideoStream)) { -// if (HasAttribute (TrackMediaAttributes.Podcast)) { -// track.Type = IPod.MediaType.VideoPodcast; -// } else if (HasAttribute (TrackMediaAttributes.Music)) { -// track.Type = IPod.MediaType.MusicVideo; -// } else if (HasAttribute (TrackMediaAttributes.Movie)) { -// track.Type = IPod.MediaType.Movie; -// } else if (HasAttribute (TrackMediaAttributes.TvShow)) { -// track.Type = IPod.MediaType.TVShow; -// } else { -// track.Type = IPod.MediaType.Video; -// } -// } else { -// if (HasAttribute (TrackMediaAttributes.Podcast)) { -// track.Type = IPod.MediaType.Podcast; -// } else if (HasAttribute (TrackMediaAttributes.AudioBook)) { -// track.Type = IPod.MediaType.Audiobook; -// } else if (HasAttribute (TrackMediaAttributes.Music)) { -// track.Type = IPod.MediaType.Audio; -// } else { -// track.Type = IPod.MediaType.Audio; -// } -// } 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 { + track.MediaType = GPod.MediaType.AudioVideo; + } + } 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 = "MP3-file"; + track.Filetype = mimetype; + database.Tracks.Add (IpodTrack); database.MasterPlaylist.Tracks.Add (IpodTrack); + + if (HasAttribute (TrackMediaAttributes.Podcast)) { + database.PodcastsPlaylist.Tracks.Add (IpodTrack); + } + database.CopyTrackToIPod (track, Uri.LocalPath); Uri = new SafeUri (GPod.ITDB.GetLocalPath (database.Device, track)); ExternalId = (long) IpodTrack.DBID; |