void sortItems_ItemSortDirectionChanged(object sender, EventArgs e) { SortItem sortItem = (SortItem)sender; if (((SortItem)SortModes.CurrentItem).SortMode == sortItem.SortMode) { SortDirection = sortItem.SortDirection; refresh(); } }
public YoutubeCollectionView(MediaState mediaState) : base(mediaState) { Filter = filterFunc; InfoIconsCache = InfoIconsCacheStatic; FilterModes = new System.Windows.Data.ListCollectionView(Enum.GetValues(typeof(FilterMode))); FilterModes.CurrentChanged += (s, e) => { refresh(); }; SortItemCollection <SortItem, SortMode> sortItems = new SortItemCollection <SortItem, SortMode>(); foreach (SortMode mode in Enum.GetValues(typeof(SortMode))) { sortItems.Add(new SortItem(mode)); } sortItems.ItemSortDirectionChanged += sortItems_ItemSortDirectionChanged; SortModes = new System.Windows.Data.ListCollectionView(sortItems); SortModes.CurrentChanged += (s, e) => { SortItem item = (SortItem)SortModes.CurrentItem; switch (item.SortMode) { case SortMode.Relevance: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { YoutubeItem itemA = (YoutubeItem)a.Item; YoutubeItem itemB = (YoutubeItem)b.Item; return(itemA.Relevance.CompareTo(itemB.Relevance)); }); break; case SortMode.Width: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <int>(metaA.Width, metaB.Width)); }); break; case SortMode.Height: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <int>(metaA.Height, metaB.Height)); }); break; case SortMode.Duration: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <long>(metaA.DurationSeconds, metaB.DurationSeconds)); }); break; case SortMode.MimeType: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(String.Compare(metaA.MimeType, metaB.MimeType)); }); break; case SortMode.Author: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(String.Compare(metaA.Author, metaB.Author)); }); break; case SortMode.PublishedAt: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <DateTime>(metaA.CreationDate, metaB.CreationDate)); }); break; case SortMode.ViewCount: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <long>(metaA.ViewCount, metaB.ViewCount)); }); break; case SortMode.Rating: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <double>(metaA.Rating, metaB.Rating)); }); break; case SortMode.FramesPerSecond: SortFunc = new Func <SelectableMediaItem, SelectableMediaItem, int>((a, b) => { int result = hasMediaTest(a, b); if (result != 0) { return(result); } YoutubeItemMetadata metaA = (YoutubeItemMetadata)a.Item.Metadata; YoutubeItemMetadata metaB = (YoutubeItemMetadata)b.Item.Metadata; return(Nullable.Compare <double>(metaA.Rating, metaB.Rating)); }); break; default: break; } SortDirection = item.SortDirection; refresh(); }; }
public override object getExtraInfo(SelectableMediaItem selectableItem) { String info = null; //string dateFormat = "MMM d, yyyy"; YoutubeItemMetadata metadata = (YoutubeItemMetadata)selectableItem.Item.Metadata; if (metadata == null) { return(info); } SortItem item = (SortItem)SortModes.CurrentItem; switch (item.SortMode) { case SortMode.Width: case SortMode.Height: if (metadata.Width.HasValue && metadata.Height.HasValue) { info = metadata.Width + " x " + metadata.Height; } break; case SortMode.MimeType: info = metadata.MimeType; break; case SortMode.Duration: if (metadata.DurationSeconds != null) { info = MiscUtils.formatTimeSeconds(metadata.DurationSeconds.Value); } break; case SortMode.Author: info = metadata.Author; break; case SortMode.PublishedAt: info = MiscUtils.formatTimeAgo(metadata.CreationDate.Value) + " ago"; break; case SortMode.ViewCount: if (metadata.ViewCount != null) { info = metadata.ViewCount.Value.ToString("#,##0", new CultureInfo("en-US")); } break; case SortMode.Rating: if (metadata.Rating != null) { return(RatingCache.RatingBitmap[(int)(metadata.Rating.Value + 0.5)]); } break; case SortMode.FramesPerSecond: if (metadata.FramesPerSecond != null) { return(metadata.FramesPerSecond.Value.ToString() + "fps"); } break; default: break; } return(info); }