Esempio n. 1
0
        public void SrtDifficultLines1()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"303
00:16:22,417 --> 00:16:24,417
sky bots?

304
00:16:24,417 --> 00:16:27,042
how do you think i did


all the stuff
for the show?

305
00:16:27,042 --> 00:16:29,417
you think i went myself?";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            Assert.AreEqual(3, subtitle.Paragraphs.Count);
            const string expected = @"how do you think i did


all the stuff
for the show?";

            Assert.AreEqual(expected, subtitle.Paragraphs[1].Text);
        }
Esempio n. 2
0
        private void buttonTrain_Click(object sender, EventArgs e)
        {
            var startFontSize = Convert.ToInt32(comboBoxSubtitleFontSize.Items[comboBoxSubtitleFontSize.SelectedIndex].ToString());
            var endFontSize   = Convert.ToInt32(comboBoxFontSizeEnd.Items[comboBoxFontSizeEnd.SelectedIndex].ToString());

            if (!File.Exists(textBoxInputFile.Text))
            {
                MessageBox.Show($"Input file '{textBoxInputFile.Text}' does not exist!");
                return;
            }

            if (!Directory.Exists(textBoxNOcrDb.Text))
            {
                MessageBox.Show($"Output folder '{textBoxNOcrDb.Text}' does not exist!");
                return;
            }

            if (listViewFonts.CheckedItems.Count == 1)
            {
                MessageBox.Show("Please select at least one font!");
                return;
            }

            foreach (ListViewItem fontItem in listViewFonts.CheckedItems)
            {
                _subtitleFontName = fontItem.Text;
                for (_subtitleFontSize = startFontSize; _subtitleFontSize <= endFontSize; _subtitleFontSize++)
                {
                    int numberOfCharactersLeaned  = 0;
                    int numberOfCharactersSkipped = 0;
                    var bicDb  = new BinaryOcrDb(Path.Combine(textBoxNOcrDb.Text, $"{_subtitleFontName}_{_subtitleFontSize}.db"));
                    var lines  = File.ReadAllLines(textBoxInputFile.Text).ToList();
                    var format = new SubRip();
                    var sub    = new Subtitle();
                    format.LoadSubtitle(sub, lines, textBoxInputFile.Text);
                    var charactersLearned = new List <string>();
                    foreach (var p in sub.Paragraphs)
                    {
                        foreach (char ch in p.Text)
                        {
                            if (!char.IsWhiteSpace(ch))
                            {
                                var s = ch.ToString();
                                if (!charactersLearned.Contains(s))
                                {
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, bicDb, charactersLearned, s, false, false);
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, bicDb, charactersLearned, s, false, true);
                                    if (checkBoxBold.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, bicDb, charactersLearned, s, true, false);
                                    }
                                }
                            }
                        }
                    }

                    bicDb.Save();
                }
            }
        }
Esempio n. 3
0
        private void buttonTrain_Click(object sender, EventArgs e)
        {
            if (!System.IO.File.Exists(textBoxInputFile.Text))
            {
                return;
            }

            int numberOfCharactersLeaned  = 0;
            int numberOfCharactersSkipped = 0;
            var nOcrD = new NOcrDb(textBoxNOcrDb.Text);
            var lines = new List <string>();

            foreach (string line in System.IO.File.ReadAllLines(textBoxInputFile.Text))
            {
                lines.Add(line);
            }
            var format = new SubRip();
            var sub    = new Subtitle();

            format.LoadSubtitle(sub, lines, textBoxInputFile.Text);

            var charactersLearned = new List <string>();

            foreach (ListViewItem item in listViewFonts.Items)
            {
                if (item.Checked)
                {
                    _subtitleFontName = item.Text;
                    _subtitleFontSize = Convert.ToInt32(comboBoxSubtitleFontSize.Items[comboBoxSubtitleFontSize.SelectedIndex].ToString());
                    charactersLearned = new List <string>();

                    foreach (Paragraph p in sub.Paragraphs)
                    {
                        foreach (char ch in p.Text)
                        {
                            string s = ch.ToString();
                            if (s.Trim().Length > 0)
                            {
                                if (!charactersLearned.Contains(s))
                                {
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, nOcrD, charactersLearned, s, false);
                                    if (checkBoxBold.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, nOcrD, charactersLearned, s, true);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            nOcrD.Save();
        }
Esempio n. 4
0
        public void SrtNoLineNumbers()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"00:00:03,000 --> 00:00:08,000
Line1.

00:00:08,000 --> 00:00:09,920
Line 2.";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            Assert.AreEqual(2, subtitle.Paragraphs.Count);
        }
Esempio n. 5
0
        public void SrtDotsInsteadOfCommas()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"2
00:00:04.501 --> 00:00:08.500
Dots instead of commas";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string       actual   = subtitle.Paragraphs[0].Text;
            const string expected = "Dots instead of commas";

            Assert.AreEqual(expected, actual);
        }
Esempio n. 6
0
        public void SrtCoordinates()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"1
00:00:02,001 --> 00:00:16,001  X1:000 X2:000 Y1:050 Y2:100
Let us have some! Let us have some!";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string       actual   = subtitle.Paragraphs[0].Text;
            const string expected = "Let us have some! Let us have some!";

            Assert.AreEqual(expected, actual);
        }
Esempio n. 7
0
        public void SrtKeepBlankLines()
        {
            var    target   = new SubRip();
            var    subtitle = new Subtitle();
            string subText  = "Now go on!" + Environment.NewLine + Environment.NewLine + "Now go on!";

            subtitle.Paragraphs.Add(new Paragraph(subText, 0, 999));
            var text = target.ToText(subtitle, "title");

            var outSubtitle = new Subtitle();

            target.LoadSubtitle(outSubtitle, text.SplitToLines(), null);
            Assert.IsTrue(outSubtitle.Paragraphs[0].Text == subText);
        }
Esempio n. 8
0
        public void SrtTwoLiner()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"2
00:00:04.501 --> 00:00:08.500
Line 1
Line 2";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string actual   = subtitle.Paragraphs[0].Text;
            string expected = "Line 1" + Environment.NewLine + "Line 2";

            Assert.AreEqual(expected, actual);
        }
Esempio n. 9
0
        public void SrtNoLineNumbers()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"00:00:03,000 --> 00:00:08,000
Line1.

00:00:08,000 --> 00:00:09,920
Line 2.";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            string       actual   = subtitle.Paragraphs.Count.ToString(CultureInfo.InvariantCulture);
            const string expected = "2";

            Assert.AreEqual(expected, actual);
        }
Esempio n. 10
0
        public void SrtDifficultLines2()
        {
            var          target   = new SubRip();
            var          subtitle = new Subtitle();
            const string text     = @"1
01:38:18,534 --> 01:38:20,067
 
6530

2
01:39:17,534 --> 01:39:19,400
ppp
";

            target.LoadSubtitle(subtitle, GetSrtLines(text), null);
            Assert.AreEqual(2, subtitle.Paragraphs.Count);
            const string expected = @" 
6530";

            Assert.AreEqual(expected.Trim(), subtitle.Paragraphs[0].Text.Trim());
        }
Esempio n. 11
0
        private void importTimeCodesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (_subtitle.Paragraphs.Count < 1)
            {
                return;
            }

            openFileDialog1.Title    = Configuration.Settings.Language.General.OpenSubtitle;
            openFileDialog1.FileName = string.Empty;
            openFileDialog1.Filter   = UiUtil.SubtitleExtensionFilter.Value;
            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                var            timeCodeSubtitle = new Subtitle();
                SubtitleFormat format           = null;

                if (openFileDialog1.FileName.EndsWith(".sup", StringComparison.OrdinalIgnoreCase) &&
                    FileUtil.IsBluRaySup(openFileDialog1.FileName))
                {
                    var log       = new StringBuilder();
                    var subtitles = BluRaySupParser.ParseBluRaySup(openFileDialog1.FileName, log);
                    if (subtitles.Count > 0)
                    {
                        foreach (var sup in subtitles)
                        {
                            timeCodeSubtitle.Paragraphs.Add(new Paragraph(sup.StartTimeCode, sup.EndTimeCode, string.Empty));
                        }

                        format = new SubRip(); // just to set format to something
                    }
                }

                if (format == null)
                {
                    format = timeCodeSubtitle.LoadSubtitle(openFileDialog1.FileName, out var encoding, null);
                }

                if (format == null)
                {
                    var formats = SubtitleFormat.GetBinaryFormats(true).Union(SubtitleFormat.GetTextOtherFormats()).Union(new SubtitleFormat[]
                    {
                        new TimeCodesOnly1(),
                        new TimeCodesOnly2()
                    }).ToArray();
                    format = SubtitleFormat.LoadSubtitleFromFile(formats, openFileDialog1.FileName, timeCodeSubtitle);
                }

                if (format == null)
                {
                    return;
                }

                if (timeCodeSubtitle.Paragraphs.Count != _subtitle.Paragraphs.Count)
                {
                    var text = string.Format(Configuration.Settings.Language.Main.ImportTimeCodesDifferentNumberOfLinesWarning, timeCodeSubtitle.Paragraphs.Count, _subtitle.Paragraphs.Count);
                    if (MessageBox.Show(this, text, Text, MessageBoxButtons.YesNoCancel) != DialogResult.Yes)
                    {
                        return;
                    }
                }

                int count = 0;
                for (int i = 0; i < timeCodeSubtitle.Paragraphs.Count; i++)
                {
                    var existing = _subtitle.GetParagraphOrDefault(i);

                    var newTimeCode = timeCodeSubtitle.GetParagraphOrDefault(i);
                    if (existing == null || newTimeCode == null)
                    {
                        break;
                    }

                    existing.StartTime.TotalMilliseconds = newTimeCode.StartTime.TotalMilliseconds;
                    existing.EndTime.TotalMilliseconds   = newTimeCode.EndTime.TotalMilliseconds;
                    count++;
                }

                MessageBox.Show(string.Format(Configuration.Settings.Language.Main.TimeCodeImportedFromXY, Path.GetFileName(openFileDialog1.FileName), count));
                var idx = subtitleListView1.SelectedItems[0].Index;
                subtitleListView1.Fill(_subtitle);
                subtitleListView1.SelectIndexAndEnsureVisible(_subtitle.GetParagraphOrDefault(idx));
            }
        }
Esempio n. 12
0
        internal static SubtitleFormat LoadMatroskaTextSubtitle(MatroskaTrackInfo matroskaSubtitleInfo, MatroskaFile matroska, List<MatroskaSubtitle> sub, Subtitle subtitle)
        {
            if (subtitle == null)
            {
                throw new ArgumentNullException("subtitle");
            }

            subtitle.Paragraphs.Clear();

            var isSsa = false;
            SubtitleFormat format = new SubRip();
            if (matroskaSubtitleInfo.CodecPrivate.Contains("[script info]", StringComparison.OrdinalIgnoreCase))
            {
                if (matroskaSubtitleInfo.CodecPrivate.Contains("[V4 Styles]", StringComparison.OrdinalIgnoreCase))
                {
                    format = new SubStationAlpha();
                }
                else
                {
                    format = new AdvancedSubStationAlpha();
                }

                isSsa = true;
            }

            if (isSsa)
            {
                foreach (var p in LoadMatroskaSSA(matroskaSubtitleInfo, matroska.Path, format, sub).Paragraphs)
                {
                    subtitle.Paragraphs.Add(p);
                }

                if (!string.IsNullOrEmpty(matroskaSubtitleInfo.CodecPrivate))
                {
                    bool eventsStarted = false;
                    bool fontsStarted = false;
                    bool graphicsStarted = false;
                    var header = new StringBuilder();
                    foreach (string line in matroskaSubtitleInfo.CodecPrivate.Replace(Environment.NewLine, "\n").Split('\n'))
                    {
                        if (!eventsStarted && !fontsStarted && !graphicsStarted)
                        {
                            header.AppendLine(line);
                        }

                        if (line.TrimStart().StartsWith("dialog:", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = true;
                            fontsStarted = false;
                            graphicsStarted = false;
                        }
                        else if (line.Trim().Equals("[events]", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = true;
                            fontsStarted = false;
                            graphicsStarted = false;
                        }
                        else if (line.Trim().Equals("[fonts]", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = false;
                            fontsStarted = true;
                            graphicsStarted = false;
                        }
                        else if (line.Trim().Equals("[graphics]", StringComparison.OrdinalIgnoreCase))
                        {
                            eventsStarted = false;
                            fontsStarted = false;
                            graphicsStarted = true;
                        }
                    }

                    subtitle.Header = header.ToString().TrimEnd();
                    if (!subtitle.Header.Contains("[events]", StringComparison.OrdinalIgnoreCase))
                    {
                        subtitle.Header += Environment.NewLine + Environment.NewLine + "[Events]" + Environment.NewLine;
                    }
                }
            }
            else
            {
                foreach (var p in sub)
                {
                    subtitle.Paragraphs.Add(new Paragraph(p.Text, p.Start, p.End));
                }
            }

            subtitle.Renumber();
            return format;
        }
Esempio n. 13
0
        private void buttonTrain_Click(object sender, EventArgs e)
        {
            if (buttonTrain.Text == LanguageSettings.Current.SpellCheck.Abort)
            {
                _abort = true;
                return;
            }

            _abort           = false;
            buttonTrain.Text = LanguageSettings.Current.SpellCheck.Abort;
            buttonOK.Enabled = false;

            saveFileDialog1.DefaultExt = ".db";
            saveFileDialog1.Filter     = "*Binary Image Compare DB files|*.db";
            if (saveFileDialog1.ShowDialog(this) != DialogResult.OK)
            {
                return;
            }

            buttonTrain.Text = LanguageSettings.Current.SpellCheck.Abort;
            var startFontSize = Convert.ToInt32(comboBoxSubtitleFontSize.Items[comboBoxSubtitleFontSize.SelectedIndex].ToString());
            var endFontSize   = Convert.ToInt32(comboBoxFontSizeEnd.Items[comboBoxFontSizeEnd.SelectedIndex].ToString());

            if (!File.Exists(textBoxInputFile.Text))
            {
                MessageBox.Show($"Input file '{textBoxInputFile.Text}' does not exist!");
                return;
            }

            if (listViewFonts.CheckedItems.Count == 0)
            {
                MessageBox.Show("Please select at least one font!");
                return;
            }

            var bicDb = new BinaryOcrDb(saveFileDialog1.FileName);
            int numberOfCharactersLearned = 0;
            int numberOfCharactersSkipped = 0;

            foreach (ListViewItem fontItem in listViewFonts.CheckedItems)
            {
                _subtitleFontName = fontItem.Text;
                for (_subtitleFontSize = startFontSize; _subtitleFontSize <= endFontSize; _subtitleFontSize++)
                {
                    var lines  = File.ReadAllLines(textBoxInputFile.Text).ToList();
                    var format = new SubRip();
                    var sub    = new Subtitle();
                    format.LoadSubtitle(sub, lines, textBoxInputFile.Text);
                    var charactersLearned = new List <string>();
                    foreach (var p in sub.Paragraphs)
                    {
                        labelInfo.Refresh();
                        Application.DoEvents();
                        foreach (char ch in p.Text)
                        {
                            if (!char.IsWhiteSpace(ch))
                            {
                                var s = ch.ToString();
                                if (!charactersLearned.Contains(s))
                                {
                                    charactersLearned.Add(s);
                                    TrainLetter(ref numberOfCharactersLearned, ref numberOfCharactersSkipped, bicDb, s, false, false);
                                    if (checkBoxBold.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLearned, ref numberOfCharactersSkipped, bicDb, s, true, false);
                                    }
                                    if (checkBoxItalic.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLearned, ref numberOfCharactersSkipped, bicDb, s, false, true);
                                    }
                                }
                                labelInfo.Text = string.Format(LanguageSettings.Current.VobSubOcr.NowTraining, numberOfCharactersLearned, _subtitleFontName, numberOfCharactersSkipped);
                            }
                        }

                        foreach (var text in textBoxMerged.Text.Split(' '))
                        {
                            if (!string.IsNullOrWhiteSpace(text))
                            {
                                if (!charactersLearned.Contains(text) && text.Length > 1 && text.Length <= 3)
                                {
                                    charactersLearned.Add(text);
                                    TrainLetter(ref numberOfCharactersLearned, ref numberOfCharactersSkipped, bicDb, text, false, false);
                                    if (checkBoxBold.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLearned, ref numberOfCharactersSkipped, bicDb, text, true, false);
                                    }
                                    if (checkBoxItalic.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLearned, ref numberOfCharactersSkipped, bicDb, text, false, true);
                                    }
                                }
                            }
                        }

                        if (_abort)
                        {
                            break;
                        }
                    }
                    if (_abort)
                    {
                        break;
                    }
                }

                if (_abort)
                {
                    break;
                }
            }
            bicDb.Save();
            if (_abort)
            {
                labelInfo.Text = "Partially (aborted) training completed and saved in " + saveFileDialog1.FileName;
            }
            else
            {
                labelInfo.Text = "Training completed and saved in " + saveFileDialog1.FileName;
            }
            buttonOK.Enabled = true;
            buttonTrain.Text = "Start training";
            _abort           = false;
        }
Esempio n. 14
0
        private void buttonTrain_Click(object sender, EventArgs e)
        {
            if (buttonTrain.Text == "Abort")
            {
                _abort = true;
                return;
            }

            if (!File.Exists(textBoxInputFile.Text))
            {
                return;
            }

            _abort           = false;
            buttonTrain.Text = "Abort";
            buttonOK.Enabled = false;

            int numberOfCharactersLeaned  = 0;
            int numberOfCharactersSkipped = 0;
            var nOcrD = new NOcrDb(null);
            var lines = new List <string>();

            foreach (string line in File.ReadAllLines(textBoxInputFile.Text))
            {
                lines.Add(line);
            }

            var format = new SubRip();
            var sub    = new Subtitle();

            format.LoadSubtitle(sub, lines, textBoxInputFile.Text);

            foreach (ListViewItem item in listViewFonts.Items)
            {
                if (item.Checked)
                {
                    _subtitleFontName = item.Text;
                    _subtitleFontSize = Convert.ToInt32(comboBoxSubtitleFontSize.Items[comboBoxSubtitleFontSize.SelectedIndex].ToString());
                    var charactersLearned = new List <string>();

                    foreach (Paragraph p in sub.Paragraphs)
                    {
                        foreach (char ch in p.Text)
                        {
                            if (!char.IsWhiteSpace(ch))
                            {
                                var s = ch.ToString();
                                if (!charactersLearned.Contains(s))
                                {
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, nOcrD, charactersLearned, s, false);
                                    if (checkBoxBold.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, nOcrD, charactersLearned, s, true);
                                    }
                                }
                            }
                        }

                        if (_abort)
                        {
                            break;
                        }
                    }

                    if (_abort)
                    {
                        break;
                    }
                }
            }

            labelInfo.Text = "Saving...";
            labelInfo.Refresh();
            saveFileDialog1.Filter           = "nOCR DB|*.nocr";
            saveFileDialog1.InitialDirectory = Configuration.OcrDirectory;
            if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                labelInfo.Text = $"Saving to {saveFileDialog1.FileName}...";
                nOcrD.FileName = saveFileDialog1.FileName;
                nOcrD.Save();
                labelInfo.Text = "Training done";
            }
            else
            {
                labelInfo.Text = "Saving aborted";
            }

            buttonOK.Enabled = true;
            buttonTrain.Text = "Start training";
            _abort           = false;
        }
Esempio n. 15
0
        private void buttonTrain_Click(object sender, EventArgs e)
        {
            saveFileDialog1.DefaultExt = ".db";
            saveFileDialog1.Filter     = "*Binary Image Compare DB files|*.db";
            if (saveFileDialog1.ShowDialog(this) != DialogResult.OK)
            {
                return;
            }

            var startFontSize = Convert.ToInt32(comboBoxSubtitleFontSize.Items[comboBoxSubtitleFontSize.SelectedIndex].ToString());
            var endFontSize   = Convert.ToInt32(comboBoxFontSizeEnd.Items[comboBoxFontSizeEnd.SelectedIndex].ToString());

            if (!File.Exists(textBoxInputFile.Text))
            {
                MessageBox.Show($"Input file '{textBoxInputFile.Text}' does not exist!");
                return;
            }

            if (listViewFonts.CheckedItems.Count == 1)
            {
                MessageBox.Show("Please select at least one font!");
                return;
            }

            var bicDb = new BinaryOcrDb(saveFileDialog1.FileName);
            int numberOfCharactersLeaned  = 0;
            int numberOfCharactersSkipped = 0;

            foreach (ListViewItem fontItem in listViewFonts.CheckedItems)
            {
                _subtitleFontName = fontItem.Text;
                for (_subtitleFontSize = startFontSize; _subtitleFontSize <= endFontSize; _subtitleFontSize++)
                {
                    var lines  = File.ReadAllLines(textBoxInputFile.Text).ToList();
                    var format = new SubRip();
                    var sub    = new Subtitle();
                    format.LoadSubtitle(sub, lines, textBoxInputFile.Text);
                    var charactersLearned = new List <string>();
                    foreach (var p in sub.Paragraphs)
                    {
                        foreach (char ch in p.Text)
                        {
                            if (!char.IsWhiteSpace(ch))
                            {
                                var s = ch.ToString();
                                if (!charactersLearned.Contains(s))
                                {
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, bicDb, charactersLearned, s, false, false);
                                    TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, bicDb, charactersLearned, s, false, true);
                                    if (checkBoxBold.Checked)
                                    {
                                        TrainLetter(ref numberOfCharactersLeaned, ref numberOfCharactersSkipped, bicDb, charactersLearned, s, true, false);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            bicDb.Save();
            labelInfo.Text = "Training completed and saved in " + saveFileDialog1.FileName;
        }
Esempio n. 16
0
        private void SortAndLoad()
        {
            JoinedFormat = new SubRip(); // default subtitle format
            string         header     = null;
            SubtitleFormat lastFormat = null;
            var            subtitles  = new List <Subtitle>();

            for (int k = 0; k < _fileNamesToJoin.Count; k++)
            {
                string fileName = _fileNamesToJoin[k];
                try
                {
                    var      sub = new Subtitle();
                    Encoding encoding;
                    var      format = sub.LoadSubtitle(fileName, out encoding, null);
                    if (format == null)
                    {
                        for (int j = k; j < _fileNamesToJoin.Count; j++)
                        {
                            _fileNamesToJoin.RemoveAt(j);
                        }
                        MessageBox.Show("Unkown subtitle format: " + fileName);
                        return;
                    }
                    if (sub.Header != null)
                    {
                        header = sub.Header;
                    }

                    if (lastFormat == null || lastFormat.FriendlyName == format.FriendlyName)
                    {
                        lastFormat = format;
                    }
                    else
                    {
                        lastFormat = new SubRip(); // default subtitle format
                    }
                    subtitles.Add(sub);
                }
                catch (Exception exception)
                {
                    for (int j = k; j < _fileNamesToJoin.Count; j++)
                    {
                        _fileNamesToJoin.RemoveAt(j);
                    }
                    MessageBox.Show(exception.Message);
                    return;
                }
            }
            JoinedFormat = lastFormat;

            for (int outer = 0; outer < subtitles.Count; outer++)
            {
                for (int inner = 1; inner < subtitles.Count; inner++)
                {
                    var a = subtitles[inner - 1];
                    var b = subtitles[inner];
                    if (a.Paragraphs.Count > 0 && b.Paragraphs.Count > 0 && a.Paragraphs[0].StartTime.TotalMilliseconds > b.Paragraphs[0].StartTime.TotalMilliseconds)
                    {
                        string t1 = _fileNamesToJoin[inner - 1];
                        _fileNamesToJoin[inner - 1] = _fileNamesToJoin[inner];
                        _fileNamesToJoin[inner]     = t1;

                        var t2 = subtitles[inner - 1];
                        subtitles[inner - 1] = subtitles[inner];
                        subtitles[inner]     = t2;
                    }
                }
            }

            listViewParts.BeginUpdate();
            listViewParts.Items.Clear();
            int i = 0;

            foreach (string fileName in _fileNamesToJoin)
            {
                Subtitle sub = subtitles[i];
                var      lvi = new ListViewItem(string.Format("{0:#,###,###}", sub.Paragraphs.Count));
                if (sub.Paragraphs.Count > 0)
                {
                    lvi.SubItems.Add(sub.Paragraphs[0].StartTime.ToString());
                    lvi.SubItems.Add(sub.Paragraphs[sub.Paragraphs.Count - 1].StartTime.ToString());
                }
                else
                {
                    lvi.SubItems.Add("-");
                    lvi.SubItems.Add("-");
                }
                lvi.SubItems.Add(fileName);
                listViewParts.Items.Add(lvi);
                i++;
            }
            listViewParts.EndUpdate();

            JoinedSubtitle = new Subtitle();
            if (JoinedFormat.FriendlyName != SubRip.NameOfFormat)
            {
                JoinedSubtitle.Header = header;
            }
            foreach (Subtitle sub in subtitles)
            {
                foreach (Paragraph p in sub.Paragraphs)
                {
                    JoinedSubtitle.Paragraphs.Add(p);
                }
            }
            JoinedSubtitle.Renumber();
            labelTotalLines.Text = string.Format(Configuration.Settings.Language.JoinSubtitles.TotalNumberOfLinesX, JoinedSubtitle.Paragraphs.Count);
        }
Esempio n. 17
0
        private void SortAndLoad()
        {
            JoinedFormat = new SubRip(); // default subtitle format
            string         header     = null;
            SubtitleFormat lastFormat = null;
            var            subtitles  = new List <Subtitle>();

            for (int k = 0; k < _fileNamesToJoin.Count; k++)
            {
                string fileName = _fileNamesToJoin[k];
                try
                {
                    var sub    = new Subtitle();
                    var format = sub.LoadSubtitle(fileName, out _, null);

                    if (format == null)
                    {
                        foreach (var binaryFormat in SubtitleFormat.GetBinaryFormats(true))
                        {
                            if (binaryFormat.IsMine(null, fileName))
                            {
                                _fileNamesToJoin.Add(fileName);
                                binaryFormat.LoadSubtitle(sub, null, fileName);
                                format = binaryFormat;
                                break;
                            }
                        }
                    }

                    if (format == null)
                    {
                        var encoding = LanguageAutoDetect.GetEncodingFromFile(fileName);
                        var lines    = FileUtil.ReadAllTextShared(fileName, encoding).SplitToLines();
                        foreach (var f in SubtitleFormat.GetTextOtherFormats())
                        {
                            if (f.IsMine(lines, fileName))
                            {
                                _fileNamesToJoin.Add(fileName);
                                f.LoadSubtitle(sub, lines, fileName);
                                format = f;
                                break;
                            }
                        }
                    }

                    if (format == null)
                    {
                        for (int j = k; j < _fileNamesToJoin.Count; j++)
                        {
                            _fileNamesToJoin.RemoveAt(j);
                        }

                        MessageBox.Show("Unkown subtitle format: " + fileName);
                        return;
                    }
                    if (sub.Header != null)
                    {
                        header = sub.Header;
                    }

                    if (lastFormat == null || lastFormat.FriendlyName == format.FriendlyName)
                    {
                        lastFormat = format;
                    }
                    else
                    {
                        lastFormat = new SubRip(); // default subtitle format
                    }

                    subtitles.Add(sub);
                }
                catch (Exception exception)
                {
                    for (int j = k; j < _fileNamesToJoin.Count; j++)
                    {
                        _fileNamesToJoin.RemoveAt(j);
                    }

                    MessageBox.Show(exception.Message);
                    return;
                }
            }
            JoinedFormat = lastFormat;

            for (int outer = 0; outer < subtitles.Count; outer++)
            {
                for (int inner = 1; inner < subtitles.Count; inner++)
                {
                    var a = subtitles[inner - 1];
                    var b = subtitles[inner];
                    if (a.Paragraphs.Count > 0 && b.Paragraphs.Count > 0 && a.Paragraphs[0].StartTime.TotalMilliseconds > b.Paragraphs[0].StartTime.TotalMilliseconds)
                    {
                        string t1 = _fileNamesToJoin[inner - 1];
                        _fileNamesToJoin[inner - 1] = _fileNamesToJoin[inner];
                        _fileNamesToJoin[inner]     = t1;

                        var t2 = subtitles[inner - 1];
                        subtitles[inner - 1] = subtitles[inner];
                        subtitles[inner]     = t2;
                    }
                }
            }

            listViewParts.BeginUpdate();
            listViewParts.Items.Clear();
            int i = 0;

            foreach (string fileName in _fileNamesToJoin)
            {
                var sub = subtitles[i];
                var lvi = new ListViewItem($"{sub.Paragraphs.Count:#,###,###}");
                if (sub.Paragraphs.Count > 0)
                {
                    lvi.SubItems.Add(sub.Paragraphs[0].StartTime.ToString());
                    lvi.SubItems.Add(sub.Paragraphs[sub.Paragraphs.Count - 1].StartTime.ToString());
                }
                else
                {
                    lvi.SubItems.Add("-");
                    lvi.SubItems.Add("-");
                }
                lvi.SubItems.Add(fileName);
                listViewParts.Items.Add(lvi);
                i++;
            }
            listViewParts.EndUpdate();

            JoinedSubtitle = new Subtitle();
            if (JoinedFormat != null && JoinedFormat.FriendlyName != SubRip.NameOfFormat)
            {
                JoinedSubtitle.Header = header;
            }

            foreach (var sub in subtitles)
            {
                foreach (var p in sub.Paragraphs)
                {
                    JoinedSubtitle.Paragraphs.Add(p);
                }
            }
            JoinedSubtitle.Renumber();
            labelTotalLines.Text = string.Format(Configuration.Settings.Language.JoinSubtitles.TotalNumberOfLinesX, JoinedSubtitle.Paragraphs.Count);
        }