internal void Initialize(Ebu.EbuGeneralSubtitleInformation header, byte justificationCode, string fileName, Subtitle subtitle)
        {
            _header = header;
            _subtitle = subtitle;

            FillFromHeader(header);
            if (!string.IsNullOrEmpty(fileName))
            {
                try
                {
                    FillHeaderFromFile(fileName);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine("EbuOptions unable to read existing file: " + fileName + "  - " + ex.Message);
                }
                string title = Path.GetFileNameWithoutExtension(fileName);
                if (title.Length > 32)
                    title = title.Substring(0, 32).Trim();
                textBoxOriginalProgramTitle.Text = title;
            }

            comboBoxJustificationCode.SelectedIndex = justificationCode;

            Text = Configuration.Settings.Language.EbuSaveOptions.Title;
            buttonOK.Text = Configuration.Settings.Language.General.Ok;
            buttonCancel.Text = Configuration.Settings.Language.General.Cancel;
        }
 public void Initialize(Ebu.EbuGeneralSubtitleInformation header, byte justificationCode, string fileName, Subtitle subtitle)
 {
     _header = header;
     _justificationCode = justificationCode;
     _fileName = fileName;
     _subtitle = subtitle;
 }
Exemple #3
0
 private void toolStripMenuItemEbuProperties_Click(object sender, EventArgs e)
 {
     using (var properties = new EbuSaveOptions())
     {
         if (_subtitle != null && _subtitle.Header != null && (_subtitle.Header.Contains("STL2") || _subtitle.Header.Contains("STL3")))
         {
             var header = Ebu.ReadHeader(Encoding.UTF8.GetBytes(_subtitle.Header));
             properties.Initialize(header, 0, null, _subtitle);
         }
         else
         {
             var header = new Ebu.EbuGeneralSubtitleInformation();
             if (!string.IsNullOrEmpty(_fileName) && new Ebu().IsMine(null, _fileName))
                 properties.Initialize(header, 0, _fileName, _subtitle);
             else
                 properties.Initialize(header, 0, null, _subtitle);
         }
         properties.ShowDialog(this);
     }
 }
 private void ComboBoxSubtitleFormatsSelectedIndexChanged(object sender, EventArgs e)
 {
     if (comboBoxSubtitleFormats.Text == AdvancedSubStationAlpha.NameOfFormat || comboBoxSubtitleFormats.Text == SubStationAlpha.NameOfFormat)
     {
         buttonStyles.Text = Configuration.Settings.Language.BatchConvert.Style;
         buttonStyles.Visible = true;
         comboBoxEncoding.Enabled = true;
     }
     else if (comboBoxSubtitleFormats.Text == Ebu.NameOfFormat)
     {
         buttonStyles.Text = Configuration.Settings.Language.BatchConvert.Settings;
         buttonStyles.Visible = true;
         if (_ebuGeneralInformation == null)
             _ebuGeneralInformation = new Ebu.EbuGeneralSubtitleInformation();
         comboBoxEncoding.Enabled = true;
     }
     else if (comboBoxSubtitleFormats.Text == BluRaySubtitle)
     {
         buttonStyles.Text = Configuration.Settings.Language.BatchConvert.Settings;
         buttonStyles.Visible = true;
         comboBoxEncoding.Enabled = false;
     }
     else
     {
         buttonStyles.Visible = false;
         comboBoxEncoding.Enabled = true;
     }
     _assStyle = null;
     _ssaStyle = null;
 }
Exemple #5
0
        private DialogResult SaveSubtitle(SubtitleFormat format)
        {
            if (string.IsNullOrEmpty(_fileName) || _converted)
                return FileSaveAs(false);

            try
            {
                var sub = GetSaveSubtitle(_subtitle);

                if (format != null && !format.IsTextBased)
                {
                    var ebu = format as Ebu;
                    if (ebu != null)
                    {
                        var header = new Ebu.EbuGeneralSubtitleInformation();
                        if (_subtitle != null && _subtitle.Header != null && (_subtitle.Header.Contains("STL2") || _subtitle.Header.Contains("STL3")))
                        {
                            header = Ebu.ReadHeader(Encoding.UTF8.GetBytes(_subtitle.Header));
                        }
                        if (ebu.Save(_fileName, sub, !_saveAsCalled, header))
                        {
                            _changeSubtitleToString = _subtitle.GetFastHashCode();
                            Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, _subtitleAlternateFileName, Configuration.Settings.General.CurrentVideoOffsetInMs);
                            Configuration.Settings.Save();
                        }
                    }
                    return DialogResult.OK;
                }

                string allText = sub.ToText(format);

                // Seungki begin
                if (_splitDualSami && _subtitleAlternate != null)
                {
                    var s = new Subtitle(_subtitle);
                    foreach (var p in _subtitleAlternate.Paragraphs)
                        s.Paragraphs.Add(p);
                    allText = s.ToText(format);
                }
                // Seungki end

                var currentEncoding = GetCurrentEncoding();
                bool isUnicode = currentEncoding == Encoding.Unicode || currentEncoding == Encoding.UTF32 || currentEncoding == Encoding.GetEncoding(12001) || currentEncoding == Encoding.UTF7 || currentEncoding == Encoding.UTF8;
                if (!isUnicode && (allText.Contains(new[] { '♪', '♫', '♥', '—', '―', '…' }))) // ANSI & music/unicode symbols
                {
                    if (MessageBox.Show(string.Format(_language.UnicodeMusicSymbolsAnsiWarning), Title, MessageBoxButtons.YesNo) == DialogResult.No)
                        return DialogResult.No;
                }

                if (!isUnicode)
                {
                    allText = NormalizeUnicode(allText);
                }

                bool containsNegativeTime = false;
                foreach (var p in sub.Paragraphs)
                {
                    if (p.StartTime.TotalMilliseconds < 0 || p.EndTime.TotalMilliseconds < 0)
                    {
                        containsNegativeTime = true;
                        break;
                    }
                }
                if (containsNegativeTime)
                {
                    if (MessageBox.Show(_language.NegativeTimeWarning, Title, MessageBoxButtons.YesNo) == DialogResult.No)
                        return DialogResult.No;
                }

                if (File.Exists(_fileName))
                {
                    var fileInfo = new FileInfo(_fileName);
                    var fileOnDisk = fileInfo.LastWriteTime;
                    if (_fileDateTime != fileOnDisk && _fileDateTime != new DateTime())
                    {
                        if (MessageBox.Show(string.Format(_language.OverwriteModifiedFile,
                            _fileName, fileOnDisk.ToShortDateString(), fileOnDisk.ToString("HH:mm:ss"),
                            Environment.NewLine, _fileDateTime.ToShortDateString(), _fileDateTime.ToString("HH:mm:ss")),
                            Title + " - " + _language.FileOnDiskModified, MessageBoxButtons.YesNo) == DialogResult.No)
                            return DialogResult.No;
                    }
                    if (fileInfo.IsReadOnly)
                    {
                        MessageBox.Show(string.Format(_language.FileXIsReadOnly, _fileName));
                        return DialogResult.No;
                    }
                }

                if ((format.GetType() == typeof(WebVTT) || format.GetType() == typeof(WebVTTFileWithLineNumber)))
                {
                    SetEncoding(Encoding.UTF8);
                    currentEncoding = Encoding.UTF8;
                }

                if (ModifierKeys == (Keys.Control | Keys.Shift))
                    allText = allText.Replace("\r\n", "\n");

                if (format.GetType() == typeof(ItunesTimedText) || format.GetType() == typeof(ScenaristClosedCaptions) || format.GetType() == typeof(ScenaristClosedCaptionsDropFrame))
                {
                    var outputEnc = new UTF8Encoding(false); // create encoding with no BOM
                    using (var file = new StreamWriter(_fileName, false, outputEnc)) // open file with encoding
                    {
                        file.Write(allText);
                    }
                }
                else if (currentEncoding == Encoding.UTF8 && (format.GetType() == typeof(TmpegEncAW5) || format.GetType() == typeof(TmpegEncXml)))
                {
                    var outputEnc = new UTF8Encoding(false); // create encoding with no BOM
                    using (var file = new StreamWriter(_fileName, false, outputEnc)) // open file with encoding
                    {
                        file.Write(allText);
                    }
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(allText))
                    {
                        MessageBox.Show(string.Format(_language.UnableToSaveSubtitleX, _fileName), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return DialogResult.Cancel;
                    }

                    using (var fs = new FileStream(_fileName, FileMode.Create, FileAccess.Write, FileShare.Read))
                    using (var sw = new StreamWriter(fs, currentEncoding))
                    {
                        sw.Write(allText);
                    }
                }
                Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, _subtitleAlternateFileName, Configuration.Settings.General.CurrentVideoOffsetInMs);
                Configuration.Settings.Save();
                _fileDateTime = File.GetLastWriteTime(_fileName);
                ShowStatus(string.Format(_language.SavedSubtitleX, _fileName));
                _changeSubtitleToString = _subtitle.GetFastHashCode();
                return DialogResult.OK;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
                return DialogResult.Cancel;
            }
        }