From 45afd1a1f0d7c5f2a0aad27013ee0c815f791ace Mon Sep 17 00:00:00 2001 From: niksedk Date: Mon, 19 Sep 2011 06:19:02 +0000 Subject: [PATCH] Added progress indicator when importing subtitles from mkv files git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@655 99eadd0c-20b8-1223-b5c4-2a2b2df33de2 --- src/Forms/Main.cs | 14 +++++++++++--- src/Forms/Main.resx | 2 +- src/Logic/VideoFormats/Matroska.cs | 7 +++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index e78ec62d9..3d21ac42a 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -16,6 +16,7 @@ using Nikse.SubtitleEdit.Logic.VobSub; namespace Nikse.SubtitleEdit.Forms { + public sealed partial class Main : Form { @@ -5454,6 +5455,13 @@ namespace Nikse.SubtitleEdit.Forms } } + private void MatroskaProgress(long position, long total) + { + ShowStatus(string.Format("{0}, {1:0}%", _language.ParsingMatroskaFile, position * 100 / total)); + System.Threading.Thread.Sleep(100); + statusStrip1.Refresh(); + } + private void LoadMatroskaSubtitle(MatroskaSubtitleInfo matroskaSubtitleInfo, string fileName) { bool isValid; @@ -5489,7 +5497,7 @@ namespace Nikse.SubtitleEdit.Forms ShowStatus(_language.ParsingMatroskaFile); Refresh(); Cursor.Current = Cursors.WaitCursor; - List sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid); + List sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid, MatroskaProgress); Cursor.Current = Cursors.Default; if (isValid) { @@ -5587,7 +5595,7 @@ namespace Nikse.SubtitleEdit.Forms ShowStatus(_language.ParsingMatroskaFile); Refresh(); Cursor.Current = Cursors.WaitCursor; - List sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid); + List sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid, MatroskaProgress); Cursor.Current = Cursors.Default; if (isValid) @@ -5671,7 +5679,7 @@ namespace Nikse.SubtitleEdit.Forms ShowStatus(_language.ParsingMatroskaFile); Refresh(); Cursor.Current = Cursors.WaitCursor; - List sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid); + List sub = matroska.GetMatroskaSubtitle(fileName, (int)matroskaSubtitleInfo.TrackNumber, out isValid, MatroskaProgress); Cursor.Current = Cursors.Default; int noOfErrors = 0; string lastError = string.Empty; diff --git a/src/Forms/Main.resx b/src/Forms/Main.resx index ebef7bc22..3fd92c9b0 100644 --- a/src/Forms/Main.resx +++ b/src/Forms/Main.resx @@ -681,7 +681,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2 - CAAAAk1TRnQBSQFMAgEBAgEAASgBCwEoAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAATABCwEwAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/src/Logic/VideoFormats/Matroska.cs b/src/Logic/VideoFormats/Matroska.cs index 8de727506..bb68db289 100644 --- a/src/Logic/VideoFormats/Matroska.cs +++ b/src/Logic/VideoFormats/Matroska.cs @@ -42,6 +42,8 @@ namespace Nikse.SubtitleEdit.Logic public class Matroska { + public delegate void LoadMatroskaCallback(long position, long total); + [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit, Pack = 2)] private struct ByteLayout16 { @@ -1208,7 +1210,7 @@ namespace Nikse.SubtitleEdit.Logic return _subtitleList; } - public List GetMatroskaSubtitle(string fileName, int trackNumber, out bool isValid) + public List GetMatroskaSubtitle(string fileName, int trackNumber, out bool isValid, Matroska.LoadMatroskaCallback callback) { byte b; bool done; @@ -1273,7 +1275,8 @@ namespace Nikse.SubtitleEdit.Logic f.Seek(dataSize, SeekOrigin.Current); } } - + if (callback != null) + callback.Invoke(f.Position, f.Length); endOfFile = f.Position >= f.Length; } }