private void GeneratePreviewReal() { var uknownFormatImporter = new UknownFormatImporter(); uknownFormatImporter.UseFrames = radioButtonTimeCodeFrames.Checked; ImportedSubitle = uknownFormatImporter.AutoGuessImport(textBoxText.Lines); groupBoxImportResult.Text = string.Format(Configuration.Settings.Language.ImportText.PreviewLinesModifiedX, ImportedSubitle.Paragraphs.Count); SubtitleListview1.Fill(ImportedSubitle); if (ImportedSubitle.Paragraphs.Count > 0) SubtitleListview1.SelectIndexAndEnsureVisible(0); }
private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, string originalFileName) { if (File.Exists(fileName)) { bool videoFileLoaded = false; string ext = Path.GetExtension(fileName).ToLower(); // save last first visible index + first selected index from listview if (!string.IsNullOrEmpty(_fileName)) Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, originalFileName); openFileDialog1.InitialDirectory = Path.GetDirectoryName(fileName); if (ext == ".sub" && IsVobSubFile(fileName, false)) { if (MessageBox.Show(this, _language.ImportThisVobSubSubtitle, _title, MessageBoxButtons.YesNo) == DialogResult.Yes) { ImportAndOcrVobSubSubtitleNew(fileName, _loading); } return; } if (ext == ".sup") { if (IsBluRaySupFile(fileName)) { ImportAndOcrBluRaySup(fileName, _loading); return; } else if (IsSpDvdSupFile(fileName)) { ImportAndOcrSpDvdSup(fileName, _loading); return; } } if (ext == ".mkv" || ext == ".mks") { Matroska mkv = new Matroska(); bool isValid = false; bool hasConstantFrameRate = false; double frameRate = 0; int width = 0; int height = 0; double milliseconds = 0; string videoCodec = string.Empty; mkv.GetMatroskaInfo(fileName, ref isValid, ref hasConstantFrameRate, ref frameRate, ref width, ref height, ref milliseconds, ref videoCodec); if (isValid) { ImportSubtitleFromMatroskaFile(fileName); return; } } if (ext == ".divx" || ext == ".avi") { if (ImportSubtitleFromDivX(fileName)) return; } var fi = new FileInfo(fileName); if ((ext == ".ts" || ext == ".rec" || ext == ".mpeg" || ext == ".mpg") && fi.Length > 10000 && IsTransportStream(fileName)) { ImportSubtitleFromTransportStream(fileName); return; } if ((ext == ".m2ts") && fi.Length > 10000 && IsM2TransportStream(fileName)) { ImportSubtitleFromTransportStream(fileName); return; } if ((ext == ".mp4" || ext == ".m4v" || ext == ".3gp") && fi.Length > 10000) { if (ImportSubtitleFromMp4(fileName)) OpenVideo(fileName); return; } if (fi.Length > 1024 * 1024 * 10) // max 10 mb { // retry bluray sup (file with wrong extension) if (IsBluRaySupFile(fileName)) { ImportAndOcrBluRaySup(fileName, _loading); return; } // retry vobsub (file with wrong extension) if (IsVobSubFile(fileName, false)) { if (MessageBox.Show(this, _language.ImportThisVobSubSubtitle, _title, MessageBoxButtons.YesNo) == DialogResult.Yes) { ImportAndOcrVobSubSubtitleNew(fileName, _loading); } return; } if (MessageBox.Show(this, string.Format(_language.FileXIsLargerThan10Mb + Environment.NewLine + Environment.NewLine + _language.ContinueAnyway, fileName), Title, MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; } if (_subtitle.HistoryItems.Count > 0 || _subtitle.Paragraphs.Count > 0) MakeHistoryForUndo(string.Format(_language.BeforeLoadOf, Path.GetFileName(fileName))); bool change = _changeSubtitleToString != SerializeSubtitle(_subtitle); if (change) change = _lastDoNotPrompt != SerializeSubtitle(_subtitle); SubtitleFormat format = _subtitle.LoadSubtitle(fileName, out encoding, encoding); if (!change) _changeSubtitleToString = SerializeSubtitle(_subtitle); bool justConverted = false; if (format == null) { var ebu = new Ebu(); if (ebu.IsMine(null, fileName)) { ebu.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = ebu; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var pac = new Pac(); if (pac.IsMine(null, fileName)) { pac.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = pac; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var cavena890 = new Cavena890(); if (cavena890.IsMine(null, fileName)) { cavena890.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = cavena890; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var spt = new Spt(); if (spt.IsMine(null, fileName)) { spt.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = spt; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null && ext == ".wsb") { string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); var wsb = new Wsb(); if (wsb.IsMine(list, fileName)) { wsb.LoadSubtitle(_subtitle, list, fileName); _oldSubtitleFormat = wsb; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var cheetahCaption = new CheetahCaption(); if (cheetahCaption.IsMine(null, fileName)) { cheetahCaption.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = cheetahCaption; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var capMakerPlus = new CapMakerPlus(); if (capMakerPlus.IsMine(null, fileName)) { capMakerPlus.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = capMakerPlus; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var captionsInc = new CaptionsInc(); if (captionsInc.IsMine(null, fileName)) { captionsInc.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = captionsInc; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var ultech130 = new Ultech130(); if (ultech130.IsMine(null, fileName)) { ultech130.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = ultech130; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var nciCaption = new NciCaption(); if (nciCaption.IsMine(null, fileName)) { nciCaption.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = nciCaption; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var tsb4 = new TSB4(); if (tsb4.IsMine(null, fileName)) { tsb4.LoadSubtitle(this._subtitle, null, fileName); _oldSubtitleFormat = tsb4; this.SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); this.SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { var avidStl = new AvidStl(); if (avidStl.IsMine(null, fileName)) { avidStl.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = avidStl; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (format == null) { try { var bdnXml = new BdnXml(); string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); if (bdnXml.IsMine(list, fileName)) { if (ContinueNewOrExit()) { ImportAndOcrBdnXml(fileName, bdnXml, list); } return; } } catch { format = null; } } if (format == null) { try { var fcpImage = new FinalCutProImage(); string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); if (fcpImage.IsMine(list, fileName)) { if (ContinueNewOrExit()) { ImportAndOcrDost(fileName, fcpImage, list); } return; } } catch { format = null; } } if (format == null) { var elr = new ELRStudioClosedCaption(); if (elr.IsMine(null, fileName)) { elr.LoadSubtitle(_subtitle, null, fileName); _oldSubtitleFormat = elr; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } if (fileName.ToLower().EndsWith(".dost")) { try { var dost = new Dost(); string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); if (dost.IsMine(list, fileName)) { if (ContinueNewOrExit()) ImportAndOcrDost(fileName, dost, list); return; } } catch { format = null; } } if (format == null || format.Name == new Scenarist().Name) { try { var son = new Son(); string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); if (son.IsMine(list, fileName)) { if (ContinueNewOrExit()) ImportAndOcrSon(fileName, son, list); return; } } catch { format = null; } } if (format == null || format.Name == new SubRip().Name) { if (_subtitle.Paragraphs.Count > 1) { int imageCount = 0; foreach (Paragraph p in _subtitle.Paragraphs) { string s = p.Text.ToLower(); if (s.EndsWith(".bmp") || s.EndsWith(".png") || s.EndsWith(".jpg") || s.EndsWith(".tif")) { imageCount++; } } if (imageCount > 2 && imageCount >= _subtitle.Paragraphs.Count - 2) { if (ContinueNewOrExit()) ImportAndOcrSrt(fileName, _subtitle); return; } } } if (format == null || format.Name == new Scenarist().Name) { try { var sst = new SonicScenaristBitmaps(); string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); if (sst.IsMine(list, fileName)) { if (ContinueNewOrExit()) ImportAndOcrSst(fileName, sst, list); return; } } catch { format = null; } } if (format == null) { try { var htmlSamiArray = new HtmlSamiArray(); string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var list = new List<string>(); foreach (string l in arr) list.Add(l); if (htmlSamiArray.IsMine(list, fileName)) { htmlSamiArray.LoadSubtitle(_subtitle, list, fileName); _oldSubtitleFormat = htmlSamiArray; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); } } catch { format = null; } } // retry vobsub (file with wrong extension) if (format == null && fi.Length > 500 && IsVobSubFile(fileName, false)) { if (MessageBox.Show(this, _language.ImportThisVobSubSubtitle, _title, MessageBoxButtons.YesNo) == DialogResult.Yes) { ImportAndOcrVobSubSubtitleNew(fileName, _loading); } return; } // retry bluray (file with wrong extension) if (format == null && fi.Length > 500 && IsBluRaySupFile(fileName)) { ImportAndOcrBluRaySup(fileName, _loading); return; } // retry SP dvd (file with wrong extension) if (format == null && fi.Length > 500 && IsSpDvdSupFile(fileName)) { ImportAndOcrSpDvdSup(fileName, _loading); return; } // check for idx file if (format == null && fi.Length > 100 && ext == ".idx") { if (string.IsNullOrEmpty(_language.ErrorLoadIdx)) MessageBox.Show("Cannot read/edit .idx files. Idx files are a part of an idx/sub file pair (also called VobSub), and SE can open the .sub file."); else MessageBox.Show(_language.ErrorLoadIdx); return; } // check for .rar file if (format == null && fi.Length > 100 && IsRarFile(fileName)) { if (string.IsNullOrEmpty(_language.ErrorLoadRar)) MessageBox.Show("This file seems to be a compressed .rar file. SE cannot open compressed files."); else MessageBox.Show(_language.ErrorLoadRar); return; } // check for .zip file if (format == null && fi.Length > 100 && IsZipFile(fileName)) { if (string.IsNullOrEmpty(_language.ErrorLoadZip)) MessageBox.Show("This file seems to be a compressed .zip file. SE cannot open compressed files."); else MessageBox.Show(_language.ErrorLoadZip); return; } if (format == null && fi.Length < 500000) { // Try to use a generic subtitle format parser (guessing subtitle format) try { Encoding enc = Utilities.GetEncodingFromFile(fileName); string s = File.ReadAllText(fileName, enc); // check for RTF file if (fileName.ToLower().EndsWith(".rtf") && !s.Trim().StartsWith("{\\rtf")) { var rtBox = new System.Windows.Forms.RichTextBox(); rtBox.Rtf = s; s = rtBox.Text; } var uknownFormatImporter = new UknownFormatImporter(); uknownFormatImporter.UseFrames = true; var genericParseSubtitle = uknownFormatImporter.AutoGuessImport(s.Replace(Environment.NewLine, "\n").Split('\n')); if (genericParseSubtitle.Paragraphs.Count > 1) { _subtitle = genericParseSubtitle; SetCurrentFormat(Configuration.Settings.General.DefaultSubtitleFormat); SetEncoding(Configuration.Settings.General.DefaultEncoding); encoding = GetCurrentEncoding(); justConverted = true; format = GetCurrentSubtitleFormat(); ShowStatus("Guessed subtitle format via generic subtitle parser!"); } } catch { } } _fileDateTime = File.GetLastWriteTime(fileName); if (format != null && format.IsFrameBased) _subtitle.CalculateTimeCodesFromFrameNumbers(CurrentFrameRate); else _subtitle.CalculateFrameNumbersFromTimeCodes(CurrentFrameRate); if (format != null) { if (Configuration.Settings.General.RemoveBlankLinesWhenOpening) { _subtitle.RemoveEmptyLines(); } foreach (Paragraph p in _subtitle.Paragraphs) { p.Text = p.Text.Replace("<і>", "<i>").Replace("</і>", "</i>"); // different unicode chars } _subtitleListViewIndex = -1; SetCurrentFormat(format); _subtitleAlternateFileName = null; if (LoadAlternateSubtitleFile(originalFileName)) _subtitleAlternateFileName = originalFileName; // Seungki begin _splitDualSami = false; if (Configuration.Settings.SubtitleSettings.SamiDisplayTwoClassesAsTwoSubtitles && format.GetType() == typeof(Sami) && Sami.GetStylesFromHeader(_subtitle.Header).Count == 2) { List<string> classes = Sami.GetStylesFromHeader(_subtitle.Header); var s1 = new Subtitle(_subtitle); var s2 = new Subtitle(_subtitle); s1.Paragraphs.Clear(); s2.Paragraphs.Clear(); foreach (Paragraph p in _subtitle.Paragraphs) { if (p.Extra != null && p.Extra.ToLower() == classes[0].ToLower()) s1.Paragraphs.Add(p); else s2.Paragraphs.Add(p); } if (s1.Paragraphs.Count == 0 || s2.Paragraphs.Count == 0) return; _subtitle = s1; _subtitleAlternate = s2; _subtitleAlternateFileName = _fileName; SubtitleListview1.HideExtraColumn(); SubtitleListview1.ShowAlternateTextColumn(classes[1]); _splitDualSami = true; } // Seungki end textBoxSource.Text = _subtitle.ToText(format); SubtitleListview1.Fill(_subtitle, _subtitleAlternate); if (SubtitleListview1.Items.Count > 0) SubtitleListview1.Items[0].Selected = true; _findHelper = null; _spellCheckForm = null; if (_resetVideo) { _videoFileName = null; _videoInfo = null; _videoAudioTrackNumber = -1; labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded; audioVisualizer.WavePeaks = null; audioVisualizer.ResetSpectrogram(); audioVisualizer.Invalidate(); } if (Configuration.Settings.General.ShowVideoPlayer || Configuration.Settings.General.ShowAudioVisualizer) { if (!Configuration.Settings.General.DisableVideoAutoLoading) { if (!string.IsNullOrEmpty(videoFileName) && File.Exists(videoFileName)) { OpenVideo(videoFileName); } else if (!string.IsNullOrEmpty(fileName) && (toolStripButtonToggleVideo.Checked || toolStripButtonToggleWaveForm.Checked)) { TryToFindAndOpenVideoFile(Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName))); } } } videoFileLoaded = _videoFileName != null; if (Configuration.Settings.RecentFiles.Files.Count > 0 && Configuration.Settings.RecentFiles.Files[0].FileName == fileName) { } else { Configuration.Settings.RecentFiles.Add(fileName, _videoFileName, _subtitleAlternateFileName); Configuration.Settings.Save(); UpdateRecentFilesUI(); } _fileName = fileName; SetTitle(); ShowStatus(string.Format(_language.LoadedSubtitleX, _fileName)); _sourceViewChange = false; _changeSubtitleToString = SerializeSubtitle(_subtitle); _converted = false; ResetHistory(); SetUndockedWindowsTitle(); if (justConverted) { _converted = true; ShowStatus(string.Format(_language.LoadedSubtitleX, _fileName) + " - " + string.Format(_language.ConvertedToX, format.FriendlyName)); } if (Configuration.Settings.General.AutoConvertToUtf8) encoding = Encoding.UTF8; SetEncoding(encoding); if (format.GetType() == typeof(SubStationAlpha)) { string errors = AdvancedSubStationAlpha.CheckForErrors(_subtitle.Header); if (!string.IsNullOrEmpty(errors)) MessageBox.Show(this, errors, Title, MessageBoxButtons.OK, MessageBoxIcon.Warning); errors = (format as SubStationAlpha).Errors; if (!string.IsNullOrEmpty(errors)) MessageBox.Show(this, errors, Title, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (format.GetType() == typeof(AdvancedSubStationAlpha)) { string errors = AdvancedSubStationAlpha.CheckForErrors(_subtitle.Header); if (!string.IsNullOrEmpty(errors)) MessageBox.Show(this, errors, Title, MessageBoxButtons.OK, MessageBoxIcon.Warning); errors = (format as AdvancedSubStationAlpha).Errors; if (!string.IsNullOrEmpty(errors)) MessageBox.Show(errors, Title, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (format.GetType() == typeof(SubRip)) { string errors = (format as SubRip).Errors; if (!string.IsNullOrEmpty(errors)) MessageBox.Show(this, errors, Title, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (format.GetType() == typeof(MicroDvd)) { string errors = (format as MicroDvd).Errors; if (!string.IsNullOrEmpty(errors)) MessageBox.Show(this, errors, Title, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { var info = new FileInfo(fileName); if (info.Length < 50) { _findHelper = null; _spellCheckForm = null; _videoFileName = null; _videoInfo = null; _videoAudioTrackNumber = -1; labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded; audioVisualizer.WavePeaks = null; audioVisualizer.ResetSpectrogram(); audioVisualizer.Invalidate(); Configuration.Settings.RecentFiles.Add(fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, _subtitleAlternateFileName); Configuration.Settings.Save(); UpdateRecentFilesUI(); _fileName = fileName; SetTitle(); ShowStatus(string.Format(_language.LoadedEmptyOrShort, _fileName)); _sourceViewChange = false; _converted = false; MessageBox.Show(_language.FileIsEmptyOrShort); } else { if (!string.IsNullOrEmpty(fileName) && fileName.ToLower().EndsWith(".xml")) { string[] arr = File.ReadAllLines(fileName, Utilities.GetEncodingFromFile(fileName)); var sb = new StringBuilder(); foreach (string l in arr) sb.AppendLine(l); string xmlAsString = sb.ToString().Trim(); if (xmlAsString.Contains("http://www.w3.org/ns/ttml") && xmlAsString.Contains("<?xml version=")) { var xml = new System.Xml.XmlDocument(); try { xml.LoadXml(xmlAsString); } catch (Exception ex) { MessageBox.Show("Timed text is not valid: " + ex.Message); return; } } if (xmlAsString.Contains("http://www.w3.org/") && xmlAsString.Contains("/ttaf1")) { var xml = new System.Xml.XmlDocument(); try { xml.LoadXml(xmlAsString); } catch (Exception ex) { MessageBox.Show("Timed text is not valid: " + ex.Message); return; } } } ShowUnknownSubtitle(); return; } } if (!videoFileLoaded && mediaPlayer.VideoPlayer != null) { mediaPlayer.VideoPlayer.DisposeVideoPlayer(); mediaPlayer.VideoPlayer = null; timer1.Stop(); } } else { MessageBox.Show(string.Format(_language.FileNotFound, fileName)); } }