コード例 #1
0
        void sortItems_ItemSortDirectionChanged(object sender, EventArgs e)
        {
            SortItem sortItem = (SortItem)sender;

            if (((SortItem)SortModes.CurrentItem).SortMode == sortItem.SortMode)
            {
                SortDirection = sortItem.SortDirection;

                refresh();
            }
        }
コード例 #2
0
        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();
            };
        }
コード例 #3
0
        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);
        }