root/lang/csharp/iTunesCOMWrap/trunk/iTunesCOMWrap/Tracks.cs @ 18990

Revision 18990, 16.4 kB (checked in by topia, 6 years ago)

make Track.PlayedDate? nullable.

  • Property svn:eol-style set to CRLF
  • Property svn:keywords set to Id URL Date Rev Author
Line 
1// $Id$
2using System;
3using System.Collections;
4using System.Collections.Generic;
5using System.Linq;
6using Clovery.iTunesHelper.COMWrap.Interfaces;
7using iTunes = iTunesLib;
8
9namespace Clovery.iTunesHelper.COMWrap
10{
11    internal class Track : ITObject, ITrack
12    {
13        protected internal Track(iTunes.IITTrack _internal, ITunesApp app)
14            : base(_internal, app)
15        {
16        }
17
18        protected internal iTunes.IITTrack __asIITTrack
19        {
20            get { return (iTunesLib.IITTrack) this._internal; }
21        }
22
23        public void Delete()
24        {
25            this.__asIITTrack.Delete();
26        }
27
28        public void Play()
29        {
30            this.__asIITTrack.Play();
31        }
32
33        public IArtwork AddArtworkFromFile(string filePath)
34        {
35            return this.factory.CreateArtwork(this.__asIITTrack.AddArtworkFromFile(filePath));
36        }
37
38        public TrackKind Kind
39        {
40            get { return (TrackKind) this.__asIITTrack.Kind; }
41        }
42
43        public IPlaylist Playlist
44        {
45            get { return this._app.factory.CreatePlaylist(this.__asIITTrack.Playlist); }
46        }
47
48        public string Album
49        {
50            get { return this.__asIITTrack.Album; }
51            set { this.__asIITTrack.Album = value; }
52        }
53
54        public string Artist
55        {
56            get { return this.__asIITTrack.Artist; }
57            set { this.__asIITTrack.Artist = value; }
58        }
59
60        public int BitRate
61        {
62            get { return this.__asIITTrack.BitRate; }
63        }
64
65        public int BPM
66        {
67            get { return this.__asIITTrack.BPM; }
68            set { this.__asIITTrack.BPM = value; }
69        }
70
71        public string Comment
72        {
73            get { return this.__asIITTrack.Comment; }
74            set { this.__asIITTrack.Comment = value; }
75        }
76
77        public bool Compilation
78        {
79            get { return this.__asIITTrack.Compilation; }
80            set { this.__asIITTrack.Compilation = value; }
81        }
82
83        public string Composer
84        {
85            get { return this.__asIITTrack.Composer; }
86            set { this.__asIITTrack.Composer = value; }
87        }
88
89        public DateTime DateAdded
90        {
91            get { return this.__asIITTrack.DateAdded; }
92        }
93
94        public int DiscCount
95        {
96            get { return this.__asIITTrack.DiscCount; }
97            set { this.__asIITTrack.DiscCount = value; }
98        }
99
100        public int DiscNumber
101        {
102            get { return this.__asIITTrack.DiscNumber; }
103            set { this.__asIITTrack.DiscNumber = value; }
104        }
105
106        public int Duration
107        {
108            get { return this.__asIITTrack.Duration; }
109        }
110
111        public bool Enabled
112        {
113            get { return this.__asIITTrack.Enabled; }
114            set { this.__asIITTrack.Enabled = value; }
115        }
116
117        public string EQName
118        {
119            get { return this.__asIITTrack.EQ; }
120            set { this.__asIITTrack.EQ = value; }
121        }
122
123        public IEQPreset EQ
124        {
125            get { return this._app.EQPresets[this.EQName]; }
126            set { this.__asIITTrack.EQ = value.Name; }
127        }
128
129        public int Finish
130        {
131            get { return this.__asIITTrack.Finish; }
132            set { this.__asIITTrack.Finish = value; }
133        }
134
135        public string Genre
136        {
137            get { return this.__asIITTrack.Genre; }
138            set { this.__asIITTrack.Genre = value; }
139        }
140
141        public string Grouping
142        {
143            get { return this.__asIITTrack.Grouping; }
144            set { this.__asIITTrack.Grouping = value; }
145        }
146
147        public string KindAsString
148        {
149            get { return this.__asIITTrack.KindAsString; }
150        }
151
152        public DateTime ModificationDate
153        {
154            get { return this.__asIITTrack.ModificationDate; }
155        }
156
157        public int PlayedCount
158        {
159            get { return this.__asIITTrack.PlayedCount; }
160            set { this.__asIITTrack.PlayedCount = value; }
161        }
162
163        public DateTime? PlayedDate
164        {
165            get { return this.__asIITTrack.PlayedDate; }
166            set {
167                this.__asIITTrack.PlayedDate = value.HasValue ? value.Value : DateTime.MinValue;
168            }
169        }
170
171        public int PlayOrderIndex
172        {
173            get { return this.__asIITTrack.PlayOrderIndex; }
174        }
175
176        public int Rating
177        {
178            get { return this.__asIITTrack.Rating; }
179            set { this.__asIITTrack.Rating = value; }
180        }
181
182        public int SampleRate
183        {
184            get { return this.__asIITTrack.SampleRate; }
185        }
186
187        public Int64 Size
188        {
189            get { return Convert.ToInt64(this.__asIITTrack.Size); }
190        }
191
192        public int Start
193        {
194            get { return this.__asIITTrack.Start; }
195            set { this.__asIITTrack.Start = value; }
196        }
197
198        public string Time
199        {
200            get { return this.__asIITTrack.Time; }
201        }
202
203        public int TrackCount
204        {
205            get { return this.__asIITTrack.TrackCount; }
206            set { this.__asIITTrack.TrackCount = value; }
207        }
208
209        public int TrackNumber
210        {
211            get { return this.__asIITTrack.TrackNumber; }
212            set { this.__asIITTrack.TrackNumber = value; }
213        }
214
215        public int VolumeAdjustment
216        {
217            get { return this.__asIITTrack.VolumeAdjustment; }
218            set { this.__asIITTrack.VolumeAdjustment = value; }
219        }
220
221        public int Year
222        {
223            get { return this.__asIITTrack.Year; }
224            set { this.__asIITTrack.Year = value; }
225        }
226
227        public IArtworkCollection Artwork
228        {
229            get { return this.factory.CreateArtworkCollection(this.__asIITTrack.Artwork); }
230        }
231    }
232
233    internal class TrackCollection : ITBaseCollection<ITrack>,
234                                     ItemCreatableCollection<iTunesLib.IITTrack, ITrack>, ITrackCollection
235    {
236        private readonly IIndexedCollection<string, ITrack> _itemByName;
237        private readonly IIndexedCollection<int, ITrack> _itemByPlayOrder;
238
239        public TrackCollection(iTunes.IITTrackCollection _internal, ITunesApp _app)
240            : base(_internal, _app)
241        {
242            this._itemByName = new ParentStringIndexerReferrer<TrackCollection, ITrack>(this);
243            this._itemByPlayOrder = new TrackPlayOrderIndex(this);
244        }
245
246        protected internal iTunesLib.IITTrackCollection _asIITTrackCollection
247        {
248            get { return (iTunesLib.IITTrackCollection) this._internal; }
249        }
250
251        public ITrack CreateItem(iTunesLib.IITTrack item)
252        {
253            return this._app.factory.CreateTrack(item);
254        }
255
256        public override int Count
257        {
258            get { return this._asIITTrackCollection.Count; }
259        }
260
261        public ITrack this[int Index]
262        {
263            get { return this.CreateItem(this._asIITTrackCollection[Index]); }
264        }
265
266        public ITrack this[string Name]
267        {
268            get { return this.CreateItem(this._asIITTrackCollection.get_ItemByName(Name)); }
269        }
270
271        public IIndexedCollection<string, ITrack> ItemByName
272        {
273            get { return this._itemByName; }
274        }
275
276        public IIndexedCollection<int, ITrack> ItemByPlayOrder
277        {
278            get { return this._itemByPlayOrder; }
279        }
280
281        protected internal override IEnumerator<ITrack> _GetEnumerator()
282        {
283            return
284                new ITBaseEnumerator<iTunesLib.IITTrack, ITrack, TrackCollection>(
285                    this._asIITTrackCollection.GetEnumerator(), this);
286        }
287    }
288
289    internal class TrackPlayOrderIndex : IIndexedCollection<int, ITrack>
290    {
291        protected internal readonly TrackCollection _parent;
292
293        internal TrackPlayOrderIndex(TrackCollection _parent)
294        {
295            this._parent = _parent;
296        }
297
298        public ITrack this[int Index]
299        {
300            get
301            {
302                TrackCollection collection = this._parent;
303                return collection.CreateItem(collection._asIITTrackCollection.get_ItemByPlayOrder(Index));
304            }
305        }
306    }
307
308    internal class FileOrCDTrack : Track, IFileOrCDTrack
309    {
310        protected internal FileOrCDTrack(iTunesLib.IITFileOrCDTrack _internal, ITunesApp app) : base(_internal, app)
311        {
312        }
313
314        protected internal iTunesLib.IITFileOrCDTrack _asIITFileOrCDTrack
315        {
316            get { return (iTunesLib.IITFileOrCDTrack) this._internal; }
317        }
318
319        public void UpdateInfoFromFile()
320        {
321            this._asIITFileOrCDTrack.UpdateInfoFromFile();
322        }
323
324        public void UpdatePodcastFeed()
325        {
326            this._asIITFileOrCDTrack.UpdatePodcastFeed();
327        }
328
329        public void Reveal()
330        {
331            this._asIITFileOrCDTrack.Reveal();
332        }
333
334        public RatingKind ratingKind
335        {
336            get { return (RatingKind) this._asIITFileOrCDTrack.ratingKind; }
337        }
338
339        public RatingKind AlbumRatingKind
340        {
341            get { return (RatingKind) this._asIITFileOrCDTrack.AlbumRatingKind; }
342        }
343
344        public int AlbumRating
345        {
346            get { return this._asIITFileOrCDTrack.AlbumRating; }
347            set { this._asIITFileOrCDTrack.AlbumRating = value; }
348        }
349
350        public string SortShow
351        {
352            get { return this._asIITFileOrCDTrack.SortShow; }
353            set { this._asIITFileOrCDTrack.SortShow = value; }
354        }
355
356        public string SortName
357        {
358            get { return this._asIITFileOrCDTrack.SortName; }
359            set { this._asIITFileOrCDTrack.SortName = value; }
360        }
361
362        public string SortComposer
363        {
364            get { return this._asIITFileOrCDTrack.SortComposer; }
365            set { this._asIITFileOrCDTrack.SortComposer = value; }
366        }
367
368        public string SortArtist
369        {
370            get { return this._asIITFileOrCDTrack.SortArtist; }
371            set { this._asIITFileOrCDTrack.SortArtist = value; }
372        }
373
374        public string SortAlbumArtist
375        {
376            get { return this._asIITFileOrCDTrack.SortAlbumArtist; }
377            set { this._asIITFileOrCDTrack.SortAlbumArtist = value; }
378        }
379
380        public string SortAlbum
381        {
382            get { return this._asIITFileOrCDTrack.SortAlbum; }
383            set { this._asIITFileOrCDTrack.SortAlbum = value; }
384        }
385
386        public bool Unplayed
387        {
388            get { return this._asIITFileOrCDTrack.Unplayed; }
389            set { this._asIITFileOrCDTrack.Unplayed = value; }
390        }
391
392        public new Int64 Size
393        {
394            get
395            {
396                Int64 high = this._asIITFileOrCDTrack.Size64High;
397                UInt32 low = (UInt32) this._asIITFileOrCDTrack.Size64Low;
398                return high << 32 | low;
399            }
400        }
401
402        public int EpisodeNumber
403        {
404            get { return this._asIITFileOrCDTrack.EpisodeNumber; }
405            set { this._asIITFileOrCDTrack.EpisodeNumber = value; }
406        }
407
408        public string EpisodeID
409        {
410            get { return this._asIITFileOrCDTrack.EpisodeID; }
411            set { this._asIITFileOrCDTrack.EpisodeID = value; }
412        }
413
414        public int SeasonNumber
415        {
416            get { return this._asIITFileOrCDTrack.SeasonNumber; }
417            set { this._asIITFileOrCDTrack.SeasonNumber = value; }
418        }
419
420        public string Show
421        {
422            get { return this._asIITFileOrCDTrack.Show; }
423            set { this._asIITFileOrCDTrack.Show = value; }
424        }
425
426        public string AlbumArtist
427        {
428            get { return this._asIITFileOrCDTrack.AlbumArtist; }
429            set { this._asIITFileOrCDTrack.AlbumArtist = value; }
430        }
431
432        public bool PartOfGaplessAlbum
433        {
434            get { return this._asIITFileOrCDTrack.PartOfGaplessAlbum; }
435            set { this._asIITFileOrCDTrack.PartOfGaplessAlbum = value; }
436        }
437
438        public DateTime SkippedDate
439        {
440            get { return this._asIITFileOrCDTrack.SkippedDate; }
441            set { this._asIITFileOrCDTrack.SkippedDate = value; }
442        }
443
444        public int SkippedCount
445        {
446            get { return this._asIITFileOrCDTrack.SkippedCount; }
447            set { this._asIITFileOrCDTrack.SkippedCount = value; }
448        }
449
450        public VideoKind VideoKind
451        {
452            get { return (VideoKind) this._asIITFileOrCDTrack.VideoKind; }
453            set { this._asIITFileOrCDTrack.VideoKind = (iTunesLib.ITVideoKind) value; }
454        }
455
456        public int BookmarkTime
457        {
458            get { return this._asIITFileOrCDTrack.BookmarkTime; }
459            set { this._asIITFileOrCDTrack.BookmarkTime = value; }
460        }
461
462        public string LongDescription
463        {
464            get { return this._asIITFileOrCDTrack.LongDescription; }
465            set { this._asIITFileOrCDTrack.LongDescription = value; }
466        }
467
468        public string Description
469        {
470            get { return this._asIITFileOrCDTrack.Description; }
471            set { this._asIITFileOrCDTrack.Description = value; }
472        }
473
474        public string Category
475        {
476            get { return this._asIITFileOrCDTrack.Category; }
477            set { this._asIITFileOrCDTrack.Category = value; }
478        }
479
480        public string Lyrics
481        {
482            get { return this._asIITFileOrCDTrack.Lyrics; }
483            set { this._asIITFileOrCDTrack.Lyrics = value; }
484        }
485
486        public bool ExcludeFromShuffle
487        {
488            get { return this._asIITFileOrCDTrack.ExcludeFromShuffle; }
489            set { this._asIITFileOrCDTrack.ExcludeFromShuffle = value; }
490        }
491
492        public bool RememberBookmark
493        {
494            get { return this._asIITFileOrCDTrack.RememberBookmark; }
495            set { this._asIITFileOrCDTrack.RememberBookmark = value; }
496        }
497
498        public bool Podcast
499        {
500            get { return this._asIITFileOrCDTrack.Podcast; }
501        }
502
503        public string Location
504        {
505            get { return this._asIITFileOrCDTrack.Location; }
506        }
507    }
508
509    internal class URLTrack : Track, IURLTrack
510    {
511        protected internal URLTrack(iTunesLib.IITURLTrack _internal, ITunesApp app) : base(_internal, app)
512        {
513        }
514
515        protected internal iTunesLib.IITURLTrack _asIITURLTrack
516        {
517            get { return (iTunesLib.IITURLTrack) this._internal; }
518        }
519
520        public void Reveal()
521        {
522            this._asIITURLTrack.Reveal();
523        }
524
525        public void DownloadPodcastEpisode()
526        {
527            this._asIITURLTrack.DownloadPodcastEpisode();
528        }
529
530        public void UpdatePodcastFeed()
531        {
532            this._asIITURLTrack.UpdatePodcastFeed();
533        }
534
535        public string URL
536        {
537            get { return this._asIITURLTrack.URL; }
538            set { this._asIITURLTrack.URL = value; }
539        }
540
541        public bool Podcast
542        {
543            get { return this._asIITURLTrack.Podcast; }
544        }
545
546        public string Category
547        {
548            get { return this._asIITURLTrack.Category; }
549            set { this._asIITURLTrack.Category = value; }
550        }
551
552        public string Description
553        {
554            get { return this._asIITURLTrack.Description; }
555            set { this._asIITURLTrack.Description = value; }
556        }
557
558        public string LongDescription
559        {
560            get { return this._asIITURLTrack.LongDescription; }
561            set { this._asIITURLTrack.LongDescription = value; }
562        }
563
564        public int AlbumRating
565        {
566            get { return this._asIITURLTrack.AlbumRating; }
567            set { this._asIITURLTrack.AlbumRating = value; }
568        }
569
570        public RatingKind AlbumRatingKind
571        {
572            get { return (RatingKind) this._asIITURLTrack.AlbumRatingKind; }
573        }
574
575        public RatingKind ratingKind
576        {
577            get { return (RatingKind) this._asIITURLTrack.ratingKind; }
578        }
579    }
580}
Note: See TracBrowser for help on using the browser.