public List<Subtitle> OrderSubtitles(IEnumerable<Subtitle> subtitleCollection, IEnumerable<string> preferredLanguages)
        {
            if (subtitleCollection == null)
                return null;

            var currentIndexCounter = new Dictionary<string, int>();
            var subs = new List<OrderedSubtitle>();

            foreach (var subtitle in subtitleCollection)
            {
                var key = subtitle.FromProvider + subtitle.Langugage;

                var doesContain = currentIndexCounter.ContainsKey(key);
                if (doesContain)
                {
                    var currentIndex = currentIndexCounter[key];
                    var newIndex = currentIndex + 1;
                    subs.Add(new OrderedSubtitle(newIndex, subtitle));

                    currentIndexCounter[key] = newIndex;
                    continue;
                }

                var orderedSubtitle = new OrderedSubtitle(0, subtitle);
                currentIndexCounter.Add(key, 0);

                subs.Add(orderedSubtitle);
            }

            return (from language in preferredLanguages
                    from ordSubtitle in subs
                    where ordSubtitle.Subtitle.Langugage == language
                    orderby ordSubtitle.Index
                    select ordSubtitle.Subtitle).ToList();
        }
예제 #2
0
        public List <Subtitle> OrderSubtitles(IEnumerable <Subtitle> subtitleCollection, IEnumerable <string> preferredLanguages)
        {
            if (subtitleCollection == null)
            {
                return(null);
            }

            var currentIndexCounter = new Dictionary <string, int>();
            var subs = new List <OrderedSubtitle>();

            foreach (var subtitle in subtitleCollection)
            {
                var key = subtitle.FromProvider + subtitle.Langugage;

                var doesContain = currentIndexCounter.ContainsKey(key);
                if (doesContain)
                {
                    var currentIndex = currentIndexCounter[key];
                    var newIndex     = currentIndex + 1;
                    subs.Add(new OrderedSubtitle(newIndex, subtitle));

                    currentIndexCounter[key] = newIndex;
                    continue;
                }

                var orderedSubtitle = new OrderedSubtitle(0, subtitle);
                currentIndexCounter.Add(key, 0);

                subs.Add(orderedSubtitle);
            }

            return((from language in preferredLanguages
                    from ordSubtitle in subs
                    where ordSubtitle.Subtitle.Langugage == language
                    orderby ordSubtitle.Index
                    select ordSubtitle.Subtitle).ToList());
        }