Merge pull request #5768 from chshkhr/master

Saving and restoring of the number of active audio track
This commit is contained in:
Nikolaj Olsson 2022-02-08 18:20:42 +01:00 committed by GitHub
commit 957eb56d4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 30 deletions

View File

@ -20,6 +20,7 @@ namespace Nikse.SubtitleEdit.Core.Common
public string FileName { get; set; }
public string OriginalFileName { get; set; }
public string VideoFileName { get; set; }
public int AudioTrack { get; set; }
public int FirstVisibleIndex { get; set; }
public int FirstSelectedIndex { get; set; }
public long VideoOffsetInMs { get; set; }
@ -38,7 +39,7 @@ namespace Nikse.SubtitleEdit.Core.Common
Files = new List<RecentFileEntry>();
}
public void Add(string fileName, int firstVisibleIndex, int firstSelectedIndex, string videoFileName, string originalFileName, long videoOffset, bool isSmpte)
public void Add(string fileName, int firstVisibleIndex, int firstSelectedIndex, string videoFileName, int audioTrack, string originalFileName, long videoOffset, bool isSmpte)
{
Files = Files.Where(p => !string.IsNullOrEmpty(p.FileName)).ToList();
@ -57,7 +58,7 @@ namespace Nikse.SubtitleEdit.Core.Common
var existingEntry = GetRecentFile(fileName, originalFileName);
if (existingEntry == null)
{
Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, OriginalFileName = originalFileName });
Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, AudioTrack = audioTrack, OriginalFileName = originalFileName });
}
else
{
@ -65,6 +66,7 @@ namespace Nikse.SubtitleEdit.Core.Common
existingEntry.FirstSelectedIndex = firstSelectedIndex;
existingEntry.FirstVisibleIndex = firstVisibleIndex;
existingEntry.VideoFileName = videoFileName;
existingEntry.AudioTrack = audioTrack;
existingEntry.OriginalFileName = originalFileName;
existingEntry.VideoOffsetInMs = videoOffset;
existingEntry.VideoIsSmpte = isSmpte;
@ -73,14 +75,14 @@ namespace Nikse.SubtitleEdit.Core.Common
Files = Files.Take(MaxRecentFiles).ToList();
}
public void Add(string fileName, string videoFileName, string originalFileName)
public void Add(string fileName, string videoFileName, int audioTrack, string originalFileName)
{
Files = Files.Where(p => !string.IsNullOrEmpty(p.FileName)).ToList();
var existingEntry = GetRecentFile(fileName, originalFileName);
if (existingEntry == null)
{
Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, OriginalFileName = originalFileName });
Files.Insert(0, new RecentFileEntry { FileName = fileName ?? string.Empty, FirstVisibleIndex = -1, FirstSelectedIndex = -1, VideoFileName = videoFileName, AudioTrack = audioTrack, OriginalFileName = originalFileName});
}
else
{
@ -2830,6 +2832,12 @@ $HorzAlign = Center
videoFileName = listNode.Attributes["VideoFileName"].Value;
}
string audioTrack = "-1";
if (listNode.Attributes["AudioTrack"] != null)
{
audioTrack = listNode.Attributes["AudioTrack"].Value;
}
string originalFileName = null;
if (listNode.Attributes["OriginalFileName"] != null)
{
@ -2848,7 +2856,7 @@ $HorzAlign = Center
bool.TryParse(listNode.Attributes["IsSmpte"].Value, out isSmpte);
}
settings.RecentFiles.Files.Add(new RecentFileEntry { FileName = listNode.InnerText, FirstVisibleIndex = int.Parse(firstVisibleIndex, CultureInfo.InvariantCulture), FirstSelectedIndex = int.Parse(firstSelectedIndex, CultureInfo.InvariantCulture), VideoFileName = videoFileName, OriginalFileName = originalFileName, VideoOffsetInMs = videoOffset, VideoIsSmpte = isSmpte });
settings.RecentFiles.Files.Add(new RecentFileEntry { FileName = listNode.InnerText, FirstVisibleIndex = int.Parse(firstVisibleIndex, CultureInfo.InvariantCulture), FirstSelectedIndex = int.Parse(firstSelectedIndex, CultureInfo.InvariantCulture), VideoFileName = videoFileName, AudioTrack = int.Parse(audioTrack, CultureInfo.InvariantCulture), OriginalFileName = originalFileName, VideoOffsetInMs = videoOffset, VideoIsSmpte = isSmpte });
}
// General
@ -9237,6 +9245,7 @@ $HorzAlign = Center
if (item.VideoFileName != null)
{
textWriter.WriteAttributeString("VideoFileName", item.VideoFileName);
textWriter.WriteAttributeString("AudioTrack", item.AudioTrack.ToString(CultureInfo.InvariantCulture));
}
textWriter.WriteAttributeString("FirstVisibleIndex", item.FirstVisibleIndex.ToString(CultureInfo.InvariantCulture));

View File

@ -501,12 +501,12 @@ namespace Nikse.SubtitleEdit.Forms
{
if (!OpenFromRecentFiles(fileName))
{
OpenSubtitle(fileName, null, VideoFileName, null, true);
OpenSubtitle(fileName, null, VideoFileName, VideoAudioTrackNumber, null, true);
}
}
else
{
OpenSubtitle(fileName, null, VideoFileName, null, true);
OpenSubtitle(fileName, null, VideoFileName, VideoAudioTrackNumber, null, true);
}
if (srcLineNumber >= 0 && GetCurrentSubtitleFormat().GetType() == typeof(SubRip) && srcLineNumber < textBoxSource.Lines.Length)
@ -2490,7 +2490,7 @@ namespace Nikse.SubtitleEdit.Forms
openFileDialog1.InitialDirectory = saveFileDialog1.InitialDirectory;
_fileName = saveFileDialog1.FileName;
SetTitle();
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
}
else
@ -2820,7 +2820,7 @@ namespace Nikse.SubtitleEdit.Forms
private void OpenSubtitle(string fileName, Encoding encoding)
{
OpenSubtitle(fileName, encoding, null, null);
OpenSubtitle(fileName, encoding, null, -1, null);
}
private void ResetHistory()
@ -2829,12 +2829,12 @@ namespace Nikse.SubtitleEdit.Forms
_subtitle.HistoryItems.Clear();
}
private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, string originalFileName)
private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, int audioTrack, string originalFileName)
{
OpenSubtitle(fileName, encoding, videoFileName, originalFileName, false);
OpenSubtitle(fileName, encoding, videoFileName, audioTrack, originalFileName, false);
}
private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, string originalFileName, bool updateRecentFile)
private void OpenSubtitle(string fileName, Encoding encoding, string videoFileName, int audioTrack, string originalFileName, bool updateRecentFile)
{
if (!File.Exists(fileName))
{
@ -2851,7 +2851,7 @@ namespace Nikse.SubtitleEdit.Forms
// save last first visible index + first selected index from listview
if (_fileName != null && updateRecentFile)
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
}
Configuration.Settings.General.CurrentVideoOffsetInMs = 0;
@ -2952,7 +2952,7 @@ namespace Nikse.SubtitleEdit.Forms
{
if (ImportSubtitleFromMp4(fileName) && !Configuration.Settings.General.DisableVideoAutoLoading)
{
OpenVideo(fileName);
OpenVideo(fileName, audioTrack);
}
return;
@ -3815,7 +3815,7 @@ namespace Nikse.SubtitleEdit.Forms
{
if (!string.IsNullOrEmpty(videoFileName) && File.Exists(videoFileName))
{
OpenVideo(videoFileName);
OpenVideo(videoFileName, audioTrack);
}
else if (!string.IsNullOrEmpty(fileName) && (toolStripButtonToggleVideo.Checked || toolStripButtonToggleWaveform.Checked))
{
@ -3829,9 +3829,12 @@ namespace Nikse.SubtitleEdit.Forms
}
}
videoFileLoaded = VideoFileName != null;
Configuration.Settings.RecentFiles.Add(fileName, videoFileName, originalFileName);
VideoAudioTrackNumber = audioTrack;
Configuration.Settings.RecentFiles.Add(fileName, videoFileName, audioTrack, originalFileName);
UpdateRecentFilesUI();
_fileName = fileName;
@ -3980,7 +3983,7 @@ namespace Nikse.SubtitleEdit.Forms
audioVisualizer.SceneChanges = new List<double>();
audioVisualizer.Chapters = new List<MatroskaChapter>();
Configuration.Settings.RecentFiles.Add(fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
UpdateRecentFilesUI();
_fileName = fileName;
@ -4326,7 +4329,7 @@ namespace Nikse.SubtitleEdit.Forms
{
if (!string.IsNullOrEmpty(_fileName))
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
}
RecentFileEntry rfe = null;
@ -4379,7 +4382,7 @@ namespace Nikse.SubtitleEdit.Forms
private void OpenRecentFile(RecentFileEntry rfe)
{
OpenSubtitle(rfe.FileName, null, rfe.VideoFileName, rfe.OriginalFileName, false);
OpenSubtitle(rfe.FileName, null, rfe.VideoFileName, rfe.AudioTrack, rfe.OriginalFileName, false);
Configuration.Settings.General.CurrentVideoOffsetInMs = rfe.VideoOffsetInMs;
if (rfe.VideoOffsetInMs != 0)
{
@ -4592,7 +4595,7 @@ namespace Nikse.SubtitleEdit.Forms
{
Configuration.Settings.General.LastSaveAsFormat = format.Name;
SetCurrentFormat(format);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
UpdateRecentFilesUI();
_changeSubtitleHash = GetFastSubtitleHash();
@ -4639,7 +4642,7 @@ namespace Nikse.SubtitleEdit.Forms
if (ebu.Save(_fileName, sub, !_saveAsCalled, header))
{
_changeSubtitleHash = GetFastSubtitleHash();
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
}
}
@ -4815,7 +4818,7 @@ namespace Nikse.SubtitleEdit.Forms
}, TimeSpan.FromSeconds(1), 4);
}
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
new BookmarkPersistence(_subtitle, _fileName).Save();
_fileDateTime = File.GetLastWriteTime(_fileName);
@ -4867,7 +4870,7 @@ namespace Nikse.SubtitleEdit.Forms
{
if (ebu.Save(_subtitleOriginalFileName, subAlt))
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
ShowStatus(string.Format(_language.SavedOriginalSubtitleX, _subtitleOriginalFileName));
_changeOriginalSubtitleHash = GetFastSubtitleOriginalHash();
@ -5111,7 +5114,7 @@ namespace Nikse.SubtitleEdit.Forms
{
if (Configuration.Settings.General.ShowRecentFiles && File.Exists(_fileName))
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
}
MakeHistoryForUndo(_language.BeforeNew);
@ -12393,11 +12396,11 @@ namespace Nikse.SubtitleEdit.Forms
{
if (!string.IsNullOrEmpty(_fileName))
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
}
else if (Configuration.Settings.RecentFiles.Files.Count > 0)
{
Configuration.Settings.RecentFiles.Add(null, null, null);
Configuration.Settings.RecentFiles.Add(null, null, 1, null);
}
}
@ -20761,7 +20764,7 @@ namespace Nikse.SubtitleEdit.Forms
saveOriginalAstoolStripMenuItem.Enabled = true;
removeOriginalToolStripMenuItem.Enabled = true;
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
UpdateRecentFilesUI();
MainResize();
@ -20905,6 +20908,10 @@ namespace Nikse.SubtitleEdit.Forms
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void OpenVideo(string fileName)
{
OpenVideo(fileName, VideoAudioTrackNumber);
}
private void OpenVideo(string fileName, int audioTrack)
{
if (!_resetVideo)
{
@ -20919,6 +20926,7 @@ namespace Nikse.SubtitleEdit.Forms
if (_loading)
{
VideoFileName = fileName;
VideoAudioTrackNumber = audioTrack;
return;
}
@ -21305,6 +21313,18 @@ namespace Nikse.SubtitleEdit.Forms
System.Threading.SynchronizationContext.Current.Post(TimeSpan.FromMilliseconds(5000), () => LoadVideoInfoAfterVideoFromUrlLoad());
System.Threading.SynchronizationContext.Current.Post(TimeSpan.FromMilliseconds(10000), () => LoadVideoInfoAfterVideoFromUrlLoad());
}
if (VideoAudioTrackNumber > 0)
{
if (mediaPlayer.VideoPlayer is LibVlcDynamic libVlc)
{
libVlc.AudioTrackNumber = VideoAudioTrackNumber;
}
else if (mediaPlayer.VideoPlayer is LibMpvDynamic libMpv2)
{
libMpv2.AudioTrackNumber = VideoAudioTrackNumber;
}
}
}
private void LoadVideoInfoAfterVideoFromUrlLoad()
@ -23428,7 +23448,7 @@ namespace Nikse.SubtitleEdit.Forms
SetShortcuts();
MainResize();
_loading = false;
OpenVideo(VideoFileName);
OpenVideo(VideoFileName, VideoAudioTrackNumber);
ShowSubtitleTimer.Stop();
lock (_syncUndo)
{
@ -27397,7 +27417,7 @@ namespace Nikse.SubtitleEdit.Forms
SetTitle();
if (_fileName != null)
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
}
}
}
@ -27439,7 +27459,7 @@ namespace Nikse.SubtitleEdit.Forms
if (_fileName != null && updateRecentFiles)
{
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.RecentFiles.Add(_fileName, FirstVisibleIndex, FirstSelectedIndex, VideoFileName, VideoAudioTrackNumber, _subtitleOriginalFileName, Configuration.Settings.General.CurrentVideoOffsetInMs, Configuration.Settings.General.CurrentVideoIsSmpte);
Configuration.Settings.Save();
UpdateRecentFilesUI();
}