async Task <string> GetTranslatedWEBVTT(string uri, string inputLanguage, string outputLanguage) { string translatedContent = string.Empty; if (!string.IsNullOrEmpty(uri) && !string.IsNullOrEmpty(inputLanguage) && !string.IsNullOrEmpty(outputLanguage)) { string content = await GetContent(uri); if (!string.IsNullOrEmpty(content)) { TextBoxLogWriteLine("Original Subtitles downloaded"); List <SubtitileItem> SubtitleList = ParseWEBVTT(content); if (SubtitleList.Count > 0) { TextBoxLogWriteLine("Original Subtitles parsed"); translatedContent += "\xFEFF"; translatedContent += "WEBVTT\r\n\r\n"; SubtitileItem newItem = new SubtitileItem("", "", ""); bool bError = false; foreach (SubtitileItem item in SubtitleList) { newItem.startTime = item.startTime; newItem.endTime = item.endTime; if (!string.IsNullOrEmpty(item.subtitle)) { newItem.subtitle = await _ttc.Translate(item.subtitle, inputLanguage, outputLanguage); if (!string.IsNullOrEmpty(newItem.subtitle)) { translatedContent += newItem.ToString(); } else { bError = true; break; } } } if (bError == true) { TextBoxLogWriteLine("Error while translating subtitles at " + newItem.startTime); } else { TextBoxLogWriteLine("Translating subtitles done:" + translatedContent); } } } else { TextBoxLogWriteLine("Error while downloading subtitles: subtitle string empty"); } } return(translatedContent); }
List <SubtitileItem> ParseWEBVTT(string content) { List <SubtitileItem> result = new List <SubtitileItem>(); // Remove the first WCHAR FEFF from the string int n = 0; while ((n < content.Length) && (content[n] != 'W')) { n++; } content = content.Substring(n); if (!string.IsNullOrEmpty(content) && (result != null)) { string separator = "\r\n\r\n"; string separator1 = "\r\n"; string separator2 = "-->"; string[] tabLineSeparator = { separator }; string[] tabItemSeparator = { separator1, separator2 }; string[] lines = content.Split(tabLineSeparator, StringSplitOptions.RemoveEmptyEntries); if (lines.Count() > 0) { if (lines[0] == "WEBVTT") { for (int i = 1; i < lines.Count(); i++) { string[] items = lines[i].Split(tabItemSeparator, StringSplitOptions.RemoveEmptyEntries); if (items.Count() == 3) { string startTime = ParseWEBVTTTime(items[0]); string endTime = ParseWEBVTTTime(items[1]); string subtitle = items[2].Trim(); if (!string.IsNullOrEmpty(startTime) && !string.IsNullOrEmpty(endTime) && !string.IsNullOrEmpty(subtitle)) { SubtitileItem item = new SubtitileItem(startTime, endTime, subtitle); if (item != null) { result.Add(item); } } } } } } } ; return(result); }