Changeset 19312

Show
Ignore:
Timestamp:
09/15/08 05:27:02 (4 months ago)
Author:
topia
Message:

add Playlist.SameTrack? methods.
* add TracksNeverDuplicate? internal property.
* fix regression of LibraryPlaylist?.SameTracks?(IItemTrack track).

Location:
lang/csharp/iTunesCOMWrap/trunk/iTunesCOMWrap
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/csharp/iTunesCOMWrap/trunk/iTunesCOMWrap/Interfaces/IPlaylists.cs

    r19308 r19312  
    1515        iTunes.IITPlaylist __asIITPlaylist { get; } 
    1616        ITrackCollection Tracks { get; } 
     17        ITrack SameTrack(ITrack track); 
     18        ITrack SameTrack(IItemTrack track); 
     19        ITrack SameTrack(int trackDatabaseID, string name); 
     20        ITrack SameTrack(int trackDatabaseID); 
    1721        List<ITrack> SameTracks(ITrack track); 
    1822        List<ITrack> SameTracks(IItemTrack track); 
  • lang/csharp/iTunesCOMWrap/trunk/iTunesCOMWrap/Playlists.cs

    r19308 r19312  
    4545        } 
    4646 
     47        public ITrack SameTrack(ITrack track) 
     48        { 
     49            return this.SameTrack(track.TrackDatabaseID, track.Name); 
     50        } 
     51 
     52        public ITrack SameTrack(IItemTrack track) 
     53        { 
     54            return this.Tracks.ItemByPersistentID[track.PersistentID]; 
     55        } 
     56 
     57        public ITrack SameTrack(int trackDatabaseID, string name) 
     58        { 
     59            var trackCollection = name == null 
     60                                      ? this.Tracks 
     61                                      : this.Search(name, PlaylistSearchField.SongNames); 
     62 
     63            if (trackCollection == null) return null; 
     64            foreach (var track in trackCollection) 
     65                if (track.TrackDatabaseID == trackDatabaseID) 
     66                    return track; 
     67            return null; 
     68        } 
     69 
     70        public ITrack SameTrack(int trackDatabaseID) 
     71        { 
     72            return this.SameTrack(trackDatabaseID, null); 
     73        } 
     74 
    4775        public List<ITrack> SameTracks(ITrack track) 
    4876        { 
     77            if (this.TracksNeverDuplicates) 
     78                return new[] {this.SameTrack(track)}.ToList(); 
     79 
    4980            return this.SameTracks(track.TrackDatabaseID, track.Name); 
    5081        } 
     
    5283        public List<ITrack> SameTracks(IItemTrack track) 
    5384        { 
    54             // fall quickly 
     85            if (this.TracksNeverDuplicates) 
     86                return new[] {this.SameTrack(track)}.ToList(); 
     87 
     88            // fall quickly, but didn't work with LibraryPlaylist. 
     89            // LibraryPlaylist.TracksNeverDuplicates should be true, but do double-checking. 
     90            if (this as LibraryPlaylist != null) 
     91                throw new InvalidOperationException("LibraryPlaylist can't use this implementation."); 
     92 
    5593            var playlistCollection = track.Playlists; 
    5694            if (playlistCollection == null || !playlistCollection.Contains(this)) 
     
    6199        public List<ITrack> SameTracks(int trackDatabaseId, string name) 
    62100        { 
     101            if (this.TracksNeverDuplicates) 
     102                return new[] {this.SameTrack(trackDatabaseId, name)}.ToList(); 
     103 
    63104            var trackCollection = name == null 
    64105                                      ? this.Tracks 
     
    71112        public List<ITrack> SameTracks(int trackDatabaseID) 
    72113        { 
     114            if (this.TracksNeverDuplicates) 
     115                return new[] {this.SameTrack(trackDatabaseID)}.ToList(); 
     116 
    73117            return this.SameTracks(trackDatabaseID, null); 
    74118        } 
     
    137181                return this._app._asIiTunes.get_CanSetSongRepeat(ref _temporary); 
    138182            } 
     183        } 
     184 
     185        internal protected virtual bool TracksNeverDuplicates 
     186        { 
     187            get { return false; } 
    139188        } 
    140189    } 
     
    191240            get { return this._asIITAudioCDPlaylist.Year; } 
    192241        } 
     242 
     243        internal protected override bool TracksNeverDuplicates 
     244        { 
     245            get { return true; } 
     246        } 
    193247    } 
    194248 
     
    226280            return this.factory.CreateTrack(this._asIITLibraryPlaylist.AddTrack(ref _real)); 
    227281        } 
     282 
     283        internal protected override bool TracksNeverDuplicates 
     284        { 
     285            get { return true; } 
     286        } 
    228287    } 
    229288 
    230289    internal class UserPlaylist : Playlist, IUserPlaylist 
    231290    { 
     291        protected internal bool _smart; 
     292 
    232293        protected internal UserPlaylist(iTunes.IITUserPlaylist _internal, ITunesApp _app) 
    233294            : base(_internal, _app) 
    234295        { 
     296            this._smart = this._asIITUserPlaylist.Smart; 
    235297        } 
    236298 
     
    305367        public bool Smart 
    306368        { 
    307             get { return this._asIITUserPlaylist.Smart; } 
     369            get { return this._smart; } 
     370        } 
     371 
     372        internal protected override bool TracksNeverDuplicates 
     373        { 
     374            get { return this.Smart; } 
    308375        } 
    309376