Пример #1
0
        public static List <string> GetSubtitleDataDirectoris(string movieRootDir, SubtitleData subtitleData)
        {
            var dirs = new List <string>();

            if (subtitleData is null || !string.IsNullOrEmpty(subtitleData.ErrorMessage))
            {
                return(dirs);
            }

            movieRootDir = Path.Combine(movieRootDir, "Subtitles");
            dirs.Add(movieRootDir);

            bool hasFa = subtitleData.Subtitles != null && subtitleData.Subtitles.Count > 0;

            var seasons = new List <int?>();

            if (hasFa)
            {
                dirs.Add(Path.Combine(movieRootDir, SubtitleLanguage.Fa.ToString()));
                seasons.AddRange(subtitleData.Subtitles.Where(sx => sx.SeasonNumber.HasValue).Select(sx => sx.SeasonNumber).Distinct());
            }

            seasons = seasons.Distinct().ToList();
            if (hasFa)
            {
                seasons.ForEach(sx => dirs.Add(Path.Combine(movieRootDir, Language.fa.ToString(), $"Season {sx.Value}")));
            }

            return(dirs);
        }
Пример #2
0
        private async void DownloadSubFileButton_OnClick(object Sender, RoutedEventArgs E)
        {
            SubtitleData data = SubtitlesList.SelectedValue as SubtitleData;

            if (data == null)
            {
                await window.ShowMessageAsync("No subtitles selected", "Please select a subtitles file to download.");
            }
            else
            {
                SaveFileDialog dialog = new SaveFileDialog {
                    FileName = data.SubFileName, Filter = "SubRip (*.srt)|*.srt"
                };
                if (!dialog.ShowDialog( ).GetValueOrDefault( ))
                {
                    return;
                }

                controller = await window.ShowProgressAsync("Downloading subtitles", $"Downloading {data.SubFileName} from opensubtitles.org.");

                controller.Maximum = data.SubFileSize;
                downloadPath       = dialog.FileName;

                downloader.DownloadFileAsync(new Uri(data.SubDownloadLink), tempFile);
            }
        }
Пример #3
0
    public static SubtitleData CreateSubtitleData()
    {
        SubtitleData ret = new SubtitleData();

        ret._filename = null;
        ret._color    = Color.white;
        ret._pos      = Vector3.zero;

        return(ret);
    }
Пример #4
0
        public static void CreateSubtitleDataDirectoris(string movieRootDir, SubtitleData subtitleData)
        {
            var dirs = GetSubtitleDataDirectoris(movieRootDir, subtitleData);

            foreach (var d in dirs)
            {
                if (!Directory.Exists(d))
                {
                    Directory.CreateDirectory(d);
                }
            }
        }
Пример #5
0
        public async Task DownloadSubtitleAsync(string movieRootDir, SubtitleData subtitleData, ProgressData progress = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                var allSubtitles = new List <SubtitleDataDetail>();

                if (subtitleData.Subtitles != null)
                {
                    allSubtitles.AddRange(subtitleData.Subtitles);
                }

                Utils.CreateSubtitleDataDirectoris(movieRootDir, subtitleData);

                movieRootDir = Path.Combine(movieRootDir, "Subtitles");

                int total        = allSubtitles.Count;
                int currentIndex = 1;

                if (subtitleData.Subtitles != null)
                {
                    foreach (var sub in subtitleData.Subtitles)
                    {
                        if (cancellationToken.IsCancellationRequested)
                        {
                            throw new TaskCanceledException("Operation canceled by user.");
                        }
                        progress?.Report(currentIndex, total);
                        currentIndex++;

                        string fileName = Utils.RenameToPhisicalName($"{sub.Title}-{sub.Id}.zip");
                        string fileDir  = Path.Combine(movieRootDir, "Fa");
                        if (sub.SeasonNumber.HasValue)
                        {
                            fileDir = Path.Combine(fileDir, $"Season {sub.SeasonNumber.Value}");
                        }

                        fileName = Path.Combine(fileDir, fileName);
                        await Utils.DownloadFileAsync(fileName, sub.Link);
                    }
                }
            }
            catch (TaskCanceledException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #6
0
        public void RemoveSubtitle(long index)
        {
            if (index < 0 || index > queue.Count - 1)
            {
                return;
            }

            SubtitleData subData = GetSubtitle(index);

            if (subData != null)
            {
                queue.Remove(subData);
            }
        }
        public List<FileInfo> SaveSubtitle(Subtitle subtitle)
        {
            _logger.Info("Saving subtitle " + subtitle.FileName + "[" + subtitle.LanguageCode + "]");

            var fileName = subtitle.FileName;
            var subtitleId = subtitle.Id;
            var languageCode = subtitle.LanguageCode;
            var languageName = DailySubsLanguageUtils.TryGetLanguageNameFromCode(languageCode).Name;

            var subtitleData = new SubtitleData(fileName, subtitleId, languageName);
            var subtitles = new List<SubtitleData>(1) {subtitleData};

            var savedSubtitle = DownloadSubtitles(subtitles, 0);
            _logger.Info("Subtitle saved");

            return savedSubtitle;
        }
        public List <FileInfo> SaveSubtitle(Subtitle subtitle)
        {
            var    fileName     = subtitle.FileName;
            var    subtitleId   = subtitle.Id;
            var    languageName = subtitle.LanguageCode;
            string languageCode;

            ToOpenSubtitlesTwoLetters.TryGetValue(languageName, out languageCode);

            var subtitleData = new SubtitleData(fileName, subtitleId, languageName);
            var subtitles    = new List <SubtitleData>(1)
            {
                subtitleData
            };

            var savedSubtitle = DownloadSubtitles(subtitles, 0);

            return(savedSubtitle);
        }
Пример #9
0
        void Start()
        {
            video.url               = Path.Combine(Application.streamingAssetsPath, StartingCutscene ? StartVideoName : EndVideoName);
            audio.clip              = StartingCutscene ? StartAudio : EndAudio;
            video.loopPointReached += OnVideoEnd;

            string penis = Resources.Load <TextAsset>("subtitles").text;
            string name  = StartingCutscene ? "start scene" : "end scene";
            var    node  = SUCC.DataConverter.DataStructureFromPENIS(penis).Item2[name];

            foreach (var child in node.ChildNodes)
            {
                var heck = (SUCC.KeyNode)child;
                SubtitleData.Add(float.Parse(heck.Key), heck.Value);
            }
            SubtitleTimes = new List <float>(SubtitleData.Keys);
            SubtitleTimes.Sort();

            StartCoroutine(PrepareThenPlay());
        }
Пример #10
0
        public void AddSubtitle(long index, String subtitle, int durationMs)
        {
            if (blocked || subtitle == null || subtitle.Length == 0 || durationMs < 1)
            {
                return;
            }

            durationMs /= Core.UPDATE_INTERVAL;

            SubtitleData subData = GetSubtitle(index);

            if (subData == null)
            {
                queue.Add(new SubtitleData(index, subtitle, durationMs));
            }
            else
            {
                subData.subtitle = subtitle;
                subData.duration = durationMs;
            }
        }
Пример #11
0
        public void Read(Stream input, OWLib.STUD stud)
        {
            using (BinaryReader reader = new BinaryReader(input, Encoding.UTF8, true)) {
                data = reader.Read <SubtitleData>();

                input.Position = data.arrayInfoOffset;
                // seems to use nonstandard array, defined by two uints, with one uint inbetween
                uint count = reader.Read <uint>();
                reader.Read <uint>();  // unk7, seems to be apart of the array definiton
                uint offset = reader.Read <uint>();

                if (count > 0)
                {
                    input.Position = offset;
                    str            = new string(reader.ReadChars((int)count));
                }
                else
                {
                    str = "";
                }
            }
        }
Пример #12
0
    public void OnGUI()
    {
        m_isShowSubtitleArray = EditorGUILayout.Foldout(m_isShowSubtitleArray, "Subtitle List");

        if (m_isShowSubtitleArray)
        {
            EditorGUILayout.BeginHorizontal();
            {
                GUILayout.Space(20);

                EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(Screen.width - 50));

                for (int i = 0; i < m_subtitleDataList.Count; i++)
                {
                    m_isSubtitleDataItemShowList[i] = EditorGUILayout.Foldout(m_isSubtitleDataItemShowList[i], "Item: " + i);
                    if (m_isSubtitleDataItemShowList[i])
                    {
                        EditorGUI.indentLevel += 1; // 层次树 +1
                        m_subtitleDataList[i].OnGUI();
                        EditorGUI.indentLevel -= 1; // 层次树 -1
                    }
                }

                if (GUILayout.Button("Add Child"))
                {
                    m_subtitleDataList.Add(SubtitleData.CreateSubtitleData());
                    m_isSubtitleDataItemShowList.Add(true);
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.Space();
        }
    }