Subtitle CreateSubtitle(SubtitleInfomation subtitleInfomation)
        {
            if (subtitleInfomation.type != SubtitlePacketType.SUBTITLE_ASS &&
                subtitleInfomation.type != SubtitlePacketType.SUBTITLE_TEXT)
            {
                return(null);
            }

            Subtitle subtitle   = null;
            string   nameFormat = "[MKV] {0}";

            subtitle = new Subtitle()
            {
                SubtitleFileKind = SubtitleFileKind.Internal
            };
            subtitle.AddLanguage(subtitleInfomation.language + ":" + subtitleInfomation.streamIndex, new List <KeyValuePair <string, string> >());

            if (subtitleInfomation.type == SubtitlePacketType.SUBTITLE_ASS)
            {
                //ASS의 경우 스타일 로딩
                AssParser assParser = new AssParser();
                assParser.LoadHeader(subtitleInfomation.header);

                subtitle.Parser = assParser;
                subtitle.Title  = string.Format(nameFormat, GetSubtitleName(subtitleInfomation));
            }
            else if (subtitleInfomation.type == SubtitlePacketType.SUBTITLE_TEXT)
            {
                subtitle.Parser = new SrtParser();
                subtitle.Title  = string.Format(nameFormat, GetSubtitleName(subtitleInfomation));
            }

            return(subtitle);
        }
        void ffmpegSubtitleSupport_SubtitleUpdatedEvent(SubtitleSupport sender, SubtitleInfomation subtitleInfomation)
        {
            Subtitle subtitle = CreateSubtitle(subtitleInfomation);;

            if (subtitle != null)
            {
                PickerItem <string, string> item = new PickerItem <string, string>
                {
                    Key      = subtitleInfomation.streamIndex.ToString(),
                    Name     = subtitle.Title,
                    Payload  = subtitle,
                    Payload2 = (byte)4
                };

                //재생패널 콤보 변경
                MessengerInstance.Send <Message>(new Message("SubtitleUpdated", item), TransportControlViewModel.NAME);
            }
        }
        void ffmpegSubtitleSupport_SubtitleFoundEvent(SubtitleSupport sender, SubtitleInfomation subtitleInfomation)
        {
            Subtitle subtitle = CreateSubtitle(subtitleInfomation);;

            if (subtitle != null)
            {
                List <PickerItem <string, string> > list = new List <PickerItem <string, string> >();
                list.Add(new PickerItem <string, string>
                {
                    Key      = subtitleInfomation.streamIndex.ToString(),
                    Name     = subtitle.Title,
                    Payload  = subtitle,
                    Payload2 = (byte)4
                });

                //재생패널 콤보에 추가
                MessengerInstance.Send <Message>(new Message("SubtitlesLoaded", list), TransportControlViewModel.NAME);
            }
        }
        private string GetSubtitleName(SubtitleInfomation subtitleInfomation)
        {
            string nativeName = string.Empty;
            string engName    = string.Empty;

            if (!string.IsNullOrEmpty(subtitleInfomation.language))
            {
                System.Globalization.CultureInfo cultureInfo = null;

                try
                {
                    if (subtitleInfomation.language.Length == 2 || (subtitleInfomation.language.Length == 5 && subtitleInfomation.language.ElementAt(2) == '-'))
                    {
                        cultureInfo = new System.Globalization.CultureInfo(subtitleInfomation.language);
                    }
                    else if (subtitleInfomation.language.Length == 3)
                    {
                        cultureInfo = LanguageCodeHelper.LangCodeToCultureInfo(subtitleInfomation.language);
                    }

                    if (cultureInfo != null)
                    {
                        nativeName = cultureInfo.NativeName;
                        engName    = cultureInfo.EnglishName;
                    }
                }
                catch (Exception) { }
            }

            if (!string.IsNullOrEmpty(subtitleInfomation.title))
            {
                if (string.IsNullOrEmpty(nativeName))
                {
                    nativeName = subtitleInfomation.title;
                }
                else
                {
                    string[] titles = subtitleInfomation.title.Split(new char[] { ':' });

                    if (titles.Length >= 1)
                    {
                        nativeName += " : ";
                        if (titles[0] != engName && titles[0] != nativeName)
                        {
                            nativeName += subtitleInfomation.title;
                        }
                        else if (titles.Length >= 2 && !string.IsNullOrEmpty(titles[1]))
                        {
                            nativeName += titles[1];
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(nativeName))
            {
                nativeName = LanguageCodeHelper.UNKOWN_LANGUAGE;
            }

            return(nativeName);
        }