git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 2 Oct 2018 14:37:09 +0000 (14:37 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 2 Oct 2018 14:37:09 +0000 (14:37 +0000)
31 files changed:
client/AudioRecorder/AudioRecorderSettings.cs
client/AudioRecorder/Configuration/audiorecorder.en
client/AudioRecorder/Configuration/audiorecorder.json
client/AudioRecorder/MainForm.Designer.cs
client/AudioRecorder/MainForm.cs
client/AudioRecorder/MainForm.resx
client/AudioRecorder/MetadataSelectorForm.cs
client/AudioRecorder/Program.cs
client/AudioRecorder/Properties/AssemblyInfo.cs
client/AudioRecorder/Properties/Resources.Designer.cs
client/AudioRecorder/Properties/Resources.resx
client/DxPlay/Configuration/dxplay.en
client/DxPlay/Controls/PlayerControls.Designer.cs
client/DxPlay/Controls/PlayerControls.cs
client/DxPlay/Controls/PlayerControls.resx
client/DxPlay/DxPlayer.cs
client/DxPlay/DxPlayerx.cs
client/DxPlay/PlayerForm.Designer.cs
client/DxPlay/PlayerForm.cs
client/DxPlay/PlayerForm.resx
client/DxPlay/PlayerGraph.cs
client/DxPlay/Program.cs
client/DxPlay/Properties/AssemblyInfo.cs
client/DxPlay/Properties/Resources.Designer.cs
client/DxPlay/Properties/Resources.resx
client/Maestro/Configuration/configuration-nle.json
client/MaestroShared/Configuration/ConfigurationInfo.cs
client/MaestroShared/Properties/AssemblyInfo.cs
client/MetadataSelector/MetadataIDSelector.Designer.cs
client/MetadataSelector/MetadataIDSelector.cs
server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java

index 21ff49a37021f85db6aeecdc8012466caca0858e..344638c0414c63148d3fe0b73c7ec3bf32034481 100644 (file)
@@ -11,5 +11,6 @@ namespace AudioRecorder {
         public MetadataProvider[] Metadatas { get; set; }\r
         public Target OctopusTarget { get; set; }\r
         public Target TrafficTarget { get; set; }\r
+        public Target FreeTarget { get; set; }\r
     }\r
 }\r
index 69185a7966f5c4f6a3f3d6c61b9e0465be71e5cf..61ede4267cf45a3c41567fc1c16bab4186f1d481 100644 (file)
@@ -10,5 +10,8 @@
   "PAUSE": "Pause",\r
   "PLAY": "Play",\r
   "RECORD": "Record",\r
-  "STOP": "Stop"\r
+  "STOP": "Stop",\r
+  "SUCCESSMESSAGE": "Successfull transfer to path: '{0}', file name: '{1}'",\r
+  "ERRORCONFIGURATION": "Found incomplete 'audiorecorder.json' configuration file, 'target' section is missing.",\r
+  "ERROREMPTYID": "Selected ID cna not be empty."\r
 }\r
index f44fe6853bf672abec4c33b7620e049429c4a838..4e1f4341566ce2b75ce824ec5aa8e04224c5fa88 100644 (file)
@@ -4,17 +4,17 @@
   "workingDirectory": "file://C:\\temp",\r
   "peekMeterStep": 200,\r
   "octopusTarget": {\r
-    "label": "Octopus mappába küldés",\r
-    "processor": "FTPTargetProcessor",\r
-    "tag": "Betöltés",\r
+    "processor": "UNCTargetProcessor",\r
     "outputFormat": "%ID%",\r
-    "subFolderFormat": "%IDROOT%-%TEXT%",\r
-    "killDateDays": 7,\r
     "remote": {\r
-      "address": "ftp://localhost",\r
-      "userName": "dani",\r
-      "password": "pSCkmnEXm7xhrWh/AzxrnklEcGeJU4SVFkuag3B5H+rTcNVEELDgsF6uTiDISSdnnJyDn/kKwoxg521neTJXV6FIs/p2QmpHKaexiCmm47R1tsZeCFmmpTv4MHuiGjwL",\r
-      "timeout": 1000\r
+      "address": "file://C:\\temp"\r
+    }\r
+  },\r
+  "freeTarget": {\r
+    "processor": "UNCTargetProcessor",\r
+    "outputFormat": "%ID%",\r
+    "remote": {\r
+      "address": "file://C:\\temp1"\r
     }\r
   },\r
   "metadatas": [\r
         "timeout": 3000\r
       },\r
       "uiFileName": "audiorecorder.en"\r
+    },\r
+    {\r
+      "$type": "FreeMetadata",\r
+      "useAlternateTarget": true,\r
+      "uiFileName": "audiorecorder.en"\r
     }\r
   ]\r
 }
\ No newline at end of file
index af36a0b7789fc274b94c86e0280d01d8e687f07b..187001a99e18bd733dc39a058309621e72e90da8 100644 (file)
@@ -38,6 +38,7 @@ namespace AudioRecorder {
             this.groupBox3 = new System.Windows.Forms.GroupBox();\r
             this.txtRecordFilePath = new System.Windows.Forms.TextBox();\r
             this.panel1 = new System.Windows.Forms.Panel();\r
+            this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();\r
             this.pmVolume = new Ernzo.WinForms.Controls.PeakMeterCtrl();\r
             this.groupBox1.SuspendLayout();\r
             this.groupBox2.SuspendLayout();\r
@@ -199,6 +200,12 @@ namespace AudioRecorder {
             this.panel1.Size = new System.Drawing.Size(399, 55);\r
             this.panel1.TabIndex = 11;\r
             // \r
+            // saveFileDialog\r
+            // \r
+            this.saveFileDialog.DefaultExt = "wav";\r
+            this.saveFileDialog.Filter = "WAV files (*.wav)|*.wav";\r
+            this.saveFileDialog.RestoreDirectory = true;\r
+            // \r
             // pmVolume\r
             // \r
             this.pmVolume.BandsCount = 1;\r
@@ -261,6 +268,7 @@ namespace AudioRecorder {
         private System.Windows.Forms.TrackBar tbVolume;\r
         private System.Windows.Forms.TextBox txtRecordFilePath;\r
         private System.Windows.Forms.Panel panel1;\r
+        private System.Windows.Forms.SaveFileDialog saveFileDialog;\r
     }\r
 }\r
 \r
index 4b39726672d088903f30e15823b8bb12877a6b8c..1c9190eb4e987c2615209bb983273d3a6fbf3a64 100644 (file)
@@ -14,6 +14,7 @@ using MaestroShared.Targets;
 using static AudioRecorder.MetadataSelectorForm;\r
 using MaestroShared.Metadata;\r
 using AudioRecorder.Properties;\r
+using System.Threading;\r
 \r
 namespace AudioRecorder {\r
     public delegate void RefreshPanelDelegate();\r
@@ -29,7 +30,7 @@ namespace AudioRecorder {
         private AudioRecorderSettings parameters;\r
         private ITimeCodeWorker timeCodeWorker;\r
         private bool recording;\r
-        private Timer countDownTimer;\r
+        private System.Windows.Forms.Timer countDownTimer;\r
         private int countDown = 3;\r
         private MMDevice currentDevice;\r
         private bool pausing;\r
@@ -76,13 +77,13 @@ namespace AudioRecorder {
 \r
         private void OnMainShown(object sender, EventArgs e) {\r
             try {\r
-                Type[] knownTypes = { typeof(OctopusMetadata), typeof(NativeOctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) };\r
+                Type[] knownTypes = { typeof(FreeMetadata), typeof(OctopusMetadata), typeof(NativeOctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) };\r
                 parameters = ConfigurationSerializer.Load<AudioRecorderSettings>(CONFIG_FILE, knownTypes);\r
                 InitializeControlTexts();\r
 \r
                 UpdateGUI();\r
                 timeCodeWorker = new TimeCodeWorker(timecodeLabel);\r
-                countDownTimer = new Timer();\r
+                countDownTimer = new System.Windows.Forms.Timer();\r
                 countDownTimer.Interval = 1000;\r
                 countDownTimer.Tick += new EventHandler(OnCountDownTick);\r
                 devicesDetector = new AudioDevicesDetector();\r
@@ -204,12 +205,63 @@ namespace AudioRecorder {
             }\r
         }\r
 \r
+\r
+        public DialogResult ShowMTAFileSaveDialog(SaveFileDialog sd) {\r
+            DialogResult dlgRes = DialogResult.Cancel;\r
+            Thread theThread = new Thread((ThreadStart)delegate\r
+            {\r
+                //Create a layout dialog instance on the current thread to align the file dialog Form \r
+                Form frmLayout = new Form();\r
+                frmLayout.StartPosition = FormStartPosition.Manual;\r
+                frmLayout.Location = this.Location;\r
+                frmLayout.DesktopLocation = this.DesktopLocation;\r
+\r
+                //the layout form is not visible \r
+                frmLayout.Width = 0;\r
+                frmLayout.Height = 0;\r
+                dlgRes = sd.ShowDialog(frmLayout);\r
+            });\r
+\r
+            try {\r
+                //set STA as the Open file dialog needs it to work \r
+                theThread.TrySetApartmentState(ApartmentState.STA);\r
+\r
+                //start the thread \r
+                theThread.Start();\r
+\r
+                // Wait for thread to get started \r
+                while (!theThread.IsAlive) { Thread.Sleep(1); }\r
+\r
+                // Wait a tick more (@see: http://scn.sap.com/thread/45710) \r
+                Thread.Sleep(1);\r
+\r
+                //wait for the dialog thread to finish \r
+                theThread.Join();\r
+\r
+            } catch (Exception e) {\r
+                MsgBox.Error(e.Message);\r
+            }\r
+\r
+            return (dlgRes);\r
+        }\r
+\r
         private void OnRecordClick(object sender, EventArgs e) {\r
-            MetadataSelectorForm idSelectorForm = new MetadataSelectorForm(parameters);\r
-            if (idSelectorForm.ShowDialog() == DialogResult.Cancel)\r
-                return;\r
-            currentMetadata = idSelectorForm.SelectedMetadata;\r
-            currentRecordingPath = CreateCurrenRecordingPath(parameters.WorkingDirectory.LocalPath, currentMetadata.ID);\r
+            if (parameters.Metadatas == null || parameters.Metadatas.Length == 0) {\r
+                saveFileDialog.InitialDirectory = parameters.WorkingDirectory.LocalPath;\r
+                saveFileDialog.RestoreDirectory = true;\r
+                if (ShowMTAFileSaveDialog(saveFileDialog) == DialogResult.Cancel)\r
+                    return;\r
+                FileInfo fi = new FileInfo(saveFileDialog.FileName);\r
+                currentMetadata = new Metadata() { ID = Path.GetFileNameWithoutExtension(fi.Name) };\r
+                currentRecordingPath = saveFileDialog.FileName;\r
+            } else {\r
+                MetadataSelectorForm idSelectorForm = new MetadataSelectorForm(parameters);\r
+                if (idSelectorForm.ShowDialog() == DialogResult.Cancel)\r
+                    return;\r
+                currentMetadata = idSelectorForm.SelectedMetadata;\r
+                currentRecordingPath = CreateCurrenRecordingPath(parameters.WorkingDirectory.LocalPath, currentMetadata.ID);\r
+            }\r
+\r
             txtRecordFilePath.Text = currentRecordingPath;\r
             if (String.IsNullOrEmpty(currentRecordingPath))\r
                 return;\r
@@ -233,9 +285,10 @@ namespace AudioRecorder {
         private void OnPlayClick(object sender, EventArgs e) {\r
             if (String.IsNullOrEmpty(currentRecordingPath) || !File.Exists(currentRecordingPath))\r
                 return;\r
-            Process process = new Process();\r
-            process.StartInfo = new ProcessStartInfo() {\r
-                FileName = currentRecordingPath\r
+            Process process = new Process {\r
+                StartInfo = new ProcessStartInfo() {\r
+                    FileName = currentRecordingPath\r
+                }\r
             };\r
             process.Start();\r
         }\r
@@ -280,23 +333,30 @@ namespace AudioRecorder {
 \r
         private void Export() {\r
             if (String.IsNullOrEmpty(currentMetadata.ID)) {\r
-                MsgBox.Error("A kiválasztott metaadat azonosító nem lehet üres.");\r
+                MsgBox.Error(parameters.Resource("ERROREMPTYID", Resources.ERROREMPTYID));\r
                 return;\r
             }\r
 \r
             MetadataType metadataType = MetadataTypeUtil.Guess(currentMetadata.ID);\r
 \r
-            Target target = parameters.OctopusTarget;\r
+            Target target = null;\r
 \r
-            switch (metadataType) {\r
-                case MetadataType.TrafficAD:\r
-                case MetadataType.TrafficPromo:\r
-                case MetadataType.TrafficMaterial:\r
+            switch (currentMetadata.TargetType) {\r
+\r
+                case TargetType.Octopus:\r
+                    target = parameters.OctopusTarget;\r
+                    break;\r
+                case TargetType.TrafficAD:\r
+                case TargetType.TrafficPromo:\r
+                case TargetType.TrafficMaterial:\r
                     target = parameters.TrafficTarget;\r
                     break;\r
+                case TargetType.Free:\r
+                    target = parameters.FreeTarget;\r
+                    break;\r
             }\r
             if (target == null) {\r
-                MsgBox.Error("Hiányos az 'audiorecorder.json' konfigurációs állomány, nem található 'target' beállítás.");\r
+                MsgBox.Error(parameters.Resource("ERRORCONFIGURATION", Resources.ERRORCONFIGURATION));\r
                 return;\r
             }\r
 \r
@@ -320,7 +380,7 @@ namespace AudioRecorder {
             if (TargetProcessor.READY.Equals(processor.Status)) {\r
                 string path = Path.GetDirectoryName(processor.Output);\r
                 string name = Path.GetFileName(processor.Output);\r
-                MsgBox.Info(String.Format($"Sikeres betöltés a '{path}' mappába, '{name}' néven."));\r
+                MsgBox.Info(String.Format(parameters.Resource("SUCCESSMESSAGE", Resources.SUCCESSMESSAGE), path, name));\r
             }\r
             else\r
                 MsgBox.Error(processor.Message);\r
index 6ef2a8267513048d4a4166ce047fca6e7e7aadcb..6631d131e3c3ba732b8a8e36a84e00de893b4c7c 100644 (file)
         2zYMwxC7J/J4J8uyfsunrxvJQkThRl7Jn1zIPz8uSV/nWE9kicDiSwAAAABJRU5ErkJggg==\r
 </value>\r
   </data>\r
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+    <value>17, 17</value>\r
+  </metadata>\r
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
     <value>162</value>\r
   </metadata>\r
index da46e980778493b9a2872e57599dd9c5818a7ca5..cedd49b5d8b8fdc9d857d82e94047dd7346dcf5b 100644 (file)
@@ -1,5 +1,5 @@
 using AudioRecorder.Properties;\r
-using MaestroShared.Configuration;\r
+using MaestroShared.Metadata;\r
 using System;\r
 using System.Windows.Forms;\r
 \r
@@ -7,9 +7,14 @@ namespace AudioRecorder {
     public partial class MetadataSelectorForm : Form {\r
         private Metadata selectedMetadata;\r
 \r
+        public enum TargetType {\r
+            Free, Octopus, TrafficPromo, TrafficAD, TrafficMaterial     \r
+        }\r
+\r
         public class Metadata {\r
             public string ID { get; set; }\r
             public string Text { get; set; }\r
+            public TargetType TargetType { get; set; }\r
         }\r
 \r
         public Metadata SelectedMetadata {\r
@@ -30,6 +35,7 @@ namespace AudioRecorder {
             metadataIDSelector.NativeOctopusIDSelector.IDChangedEvent += NativeOctopusIDChangedEvent;\r
             metadataIDSelector.TrafficIDSelector.IDChangedEvent += TrafficIDChangedEvent;\r
             metadataIDSelector.MetadataIDText.TextChanged += OnMetadataIDChanged;\r
+            metadataIDSelector.FreeIDText.TextChanged += OnFreeIDChanged;\r
             buttonCancel.Text = settings.Resource("CANCEL", Resources.CANCEL);\r
             buttonOK.Text = settings.Resource("DONE", Resources.DONE);\r
             Text = settings.Resource("SELECTORTITLE", Resources.SELECTORTITLE);\r
@@ -39,6 +45,17 @@ namespace AudioRecorder {
             SelectedMetadata = null;\r
         }\r
 \r
+        private void OnFreeIDChanged(object sender, EventArgs e) {\r
+            string text = metadataIDSelector.FreeIDText == null ? null : metadataIDSelector.FreeIDText.Text.Trim();\r
+            if (text == null || text.Length == 0)\r
+                SelectedMetadata = null;\r
+            else\r
+                SelectedMetadata = new Metadata() {\r
+                    ID = text,\r
+                    TargetType = TargetType.Free\r
+                };\r
+        }\r
+\r
         private void UpdateOkButtonEnabled() {\r
             buttonOK.Enabled = !String.IsNullOrEmpty(SelectedMetadata?.ID);\r
         }\r
@@ -49,7 +66,8 @@ namespace AudioRecorder {
             else\r
                 SelectedMetadata = new Metadata() {\r
                     ID = name,\r
-                    Text = text\r
+                    Text = text,\r
+                    TargetType = TargetType.Octopus\r
                 };\r
         }\r
 \r
@@ -59,18 +77,33 @@ namespace AudioRecorder {
             else\r
                 SelectedMetadata = new Metadata() {\r
                     ID = name,\r
-                    Text = text\r
+                    Text = text,\r
+                    TargetType = TargetType.Octopus\r
                 };\r
         }\r
 \r
         private void TrafficIDChangedEvent(string id, int variantID, string text) {\r
             if (id == null)\r
                 SelectedMetadata = null;\r
-            else\r
-                SelectedMetadata = new Metadata() {\r
+            else {\r
+                var metadata = new Metadata() {\r
                     ID = id,\r
                     Text = text\r
                 };\r
+                MetadataType metadataType = MetadataTypeUtil.Guess(id);\r
+                switch (metadataType) {\r
+                    case MetadataType.TrafficAD:\r
+                        metadata.TargetType = TargetType.TrafficAD;\r
+                        break;\r
+                    case MetadataType.TrafficPromo:\r
+                        metadata.TargetType = TargetType.TrafficPromo;\r
+                        break;\r
+                    case MetadataType.TrafficMaterial:\r
+                        metadata.TargetType = TargetType.TrafficMaterial;\r
+                        break;\r
+                }\r
+                SelectedMetadata = metadata;\r
+            }\r
         }\r
 \r
         private void OnCancelClick(object sender, EventArgs e) {\r
index 84a7a7f0401ba91ee493ba32506e48a3023e5a51..56c82bd1478308555458b829af3c9fbbdc7b706f 100644 (file)
@@ -7,6 +7,7 @@ namespace AudioRecorder {
         /// <summary>\r
         /// The main entry point for the application.\r
         /// </summary>\r
+        //[STAThread]\r
         [MTAThread]\r
         static void Main() {\r
             Application.EnableVisualStyles();\r
index 869c8e85f1df1db2f2e4f99f205919bdedc743c1..994f5c8fec4e9607b87ae25e8885ca36df8f9d89 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers \r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.0.7.0")]\r
-[assembly: AssemblyFileVersion("2.0.7.0")]\r
+[assembly: AssemblyVersion("2.0.7.2")]\r
+[assembly: AssemblyFileVersion("2.0.7.2")]\r
index fc729285821f82addaeadbc69d409240f09b4bf4..ccb7ca48c12e41da2ab191de73d7befda42be8cf 100644 (file)
@@ -97,6 +97,24 @@ namespace AudioRecorder.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Hiányos az &apos;audiorecorder.json&apos; konfigurációs állomány, nem található &apos;target&apos; beállítás..\r
+        /// </summary>\r
+        internal static string ERRORCONFIGURATION {\r
+            get {\r
+                return ResourceManager.GetString("ERRORCONFIGURATION", resourceCulture);\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to A kiválasztott metaadat azonosító nem lehet üres..\r
+        /// </summary>\r
+        internal static string ERROREMPTYID {\r
+            get {\r
+                return ResourceManager.GetString("ERROREMPTYID", resourceCulture);\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized string similar to Szunet.\r
         /// </summary>\r
@@ -141,5 +159,14 @@ namespace AudioRecorder.Properties {
                 return ResourceManager.GetString("STOP", resourceCulture);\r
             }\r
         }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Sikeres betöltés a &apos;{0}&apos; mappába, &apos;{1}&apos; néven..\r
+        /// </summary>\r
+        internal static string SUCCESSMESSAGE {\r
+            get {\r
+                return ResourceManager.GetString("SUCCESSMESSAGE", resourceCulture);\r
+            }\r
+        }\r
     }\r
 }\r
index 7f9af9914d1eb2fb9c5421b1963547f9d1fd662f..ca80cd28c93090eef8779b7ae5e9f0ac135de6f0 100644 (file)
   <data name="bs-user-logo" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
     <value>..\Resources\bs-user-logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
+  <data name="ERRORCONFIGURATION" xml:space="preserve">\r
+    <value>Hiányos az 'audiorecorder.json' konfigurációs állomány, nem található 'target' beállítás.</value>\r
+  </data>\r
+  <data name="ERROREMPTYID" xml:space="preserve">\r
+    <value>A kiválasztott metaadat azonosító nem lehet üres.</value>\r
+  </data>\r
+  <data name="SUCCESSMESSAGE" xml:space="preserve">\r
+    <value>Sikeres betöltés a '{0}' mappába, '{1}' néven.</value>\r
+  </data>\r
 </root>
\ No newline at end of file
index 1c2e824e15f3e1d5ac924ff6c9a27ee5c8949a97..6e689af730d852890b3b33def47db2e14d955302 100644 (file)
   "NOINPUT": "NO INPUT",\r
   "OPEN": "Open",\r
   "OPTIONAL": "Optional",\r
-  "PAUSE": "Pause (Esc)",\r
-  "FORWARD": "Forward (->)",\r
-  "REWIND": "Rewind (<-)",\r
+  "PAUSE": "Pause (Space)",\r
+  "FORWARD": "Forward (Ctrl + >)",\r
+  "REWIND": "Rewind (Ctrl + <)",\r
   "PAUSED": "PAUSED",\r
-  "PLAY": "Play (Esc)",\r
+  "PLAY": "Play (Space)",\r
   "PLAYING": "PLAYING",\r
+  "STEPBACK": "Step back (<)",\r
+  "STEPFORWARD":  "Step forward (>)",\r
   "POSITIONASTCIN": "Current position as TC in",\r
   "POSITIONASTCOUT": "Current position as TC out",\r
   "SEGMENTS": "Segments",\r
index 713a359a17baaf500091b08af19ca3d03c8505d5..0493bb4c135af6a23bac5548e4cf1016981ddea0 100644 (file)
             this.lbStatus = new System.Windows.Forms.Label();\r
             this.lbDuration = new System.Windows.Forms.Label();\r
             this.lbEndTC = new System.Windows.Forms.Label();\r
+            this.controlsPanel = new System.Windows.Forms.TableLayoutPanel();\r
             this.buttonsPanel = new System.Windows.Forms.FlowLayoutPanel();\r
             this.btnPlay = new MaestroShared.Controls.NoFocusCueButton();\r
             this.btnRewind = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.btnStepBack = new MaestroShared.Controls.NoFocusCueButton();\r
             this.btnStop = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.btnStepForward = new MaestroShared.Controls.NoFocusCueButton();\r
             this.btnForward = new MaestroShared.Controls.NoFocusCueButton();\r
+            this.logoPanel = new System.Windows.Forms.Panel();\r
             this.mainPanel.SuspendLayout();\r
             this.timecodePanel.SuspendLayout();\r
+            this.controlsPanel.SuspendLayout();\r
             this.buttonsPanel.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
@@ -50,7 +55,7 @@
             this.mainPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
             this.mainPanel.Controls.Add(this.trackBar, 0, 1);\r
             this.mainPanel.Controls.Add(this.timecodePanel, 0, 0);\r
-            this.mainPanel.Controls.Add(this.buttonsPanel, 0, 2);\r
+            this.mainPanel.Controls.Add(this.controlsPanel, 0, 2);\r
             this.mainPanel.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.mainPanel.Location = new System.Drawing.Point(0, 0);\r
             this.mainPanel.Margin = new System.Windows.Forms.Padding(0);\r
@@ -58,8 +63,8 @@
             this.mainPanel.RowCount = 3;\r
             this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
             this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.mainPanel.Size = new System.Drawing.Size(835, 116);\r
+            this.mainPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 65F));\r
+            this.mainPanel.Size = new System.Drawing.Size(835, 121);\r
             this.mainPanel.TabIndex = 0;\r
             // \r
             // trackBar\r
             // \r
             // lbCurrentTC\r
             // \r
+            this.lbCurrentTC.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r
+            | System.Windows.Forms.AnchorStyles.Left) \r
+            | System.Windows.Forms.AnchorStyles.Right)));\r
             this.lbCurrentTC.BackColor = System.Drawing.Color.Transparent;\r
-            this.lbCurrentTC.Dock = System.Windows.Forms.DockStyle.Top;\r
             this.lbCurrentTC.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.lbCurrentTC.Location = new System.Drawing.Point(170, 13);\r
             this.lbCurrentTC.Name = "lbCurrentTC";\r
             this.lbEndTC.Text = "00:00:00.00";\r
             this.lbEndTC.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
             // \r
+            // controlsPanel\r
+            // \r
+            this.controlsPanel.AutoSize = true;\r
+            this.controlsPanel.ColumnCount = 2;\r
+            this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 75F));\r
+            this.controlsPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));\r
+            this.controlsPanel.Controls.Add(this.buttonsPanel, 0, 0);\r
+            this.controlsPanel.Controls.Add(this.logoPanel, 1, 0);\r
+            this.controlsPanel.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.controlsPanel.Location = new System.Drawing.Point(3, 59);\r
+            this.controlsPanel.Name = "controlsPanel";\r
+            this.controlsPanel.RowCount = 1;\r
+            this.controlsPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.controlsPanel.Size = new System.Drawing.Size(829, 59);\r
+            this.controlsPanel.TabIndex = 21;\r
+            // \r
             // buttonsPanel\r
             // \r
             this.buttonsPanel.AutoSize = true;\r
-            this.buttonsPanel.BackgroundImage = global::DxPlay.Properties.Resources.bs_user_logo;\r
             this.buttonsPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;\r
             this.buttonsPanel.Controls.Add(this.btnPlay);\r
             this.buttonsPanel.Controls.Add(this.btnRewind);\r
+            this.buttonsPanel.Controls.Add(this.btnStepBack);\r
             this.buttonsPanel.Controls.Add(this.btnStop);\r
+            this.buttonsPanel.Controls.Add(this.btnStepForward);\r
             this.buttonsPanel.Controls.Add(this.btnForward);\r
-            this.buttonsPanel.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.buttonsPanel.Location = new System.Drawing.Point(0, 56);\r
+            this.buttonsPanel.Dock = System.Windows.Forms.DockStyle.Left;\r
+            this.buttonsPanel.Location = new System.Drawing.Point(0, 0);\r
             this.buttonsPanel.Margin = new System.Windows.Forms.Padding(0);\r
             this.buttonsPanel.Name = "buttonsPanel";\r
-            this.buttonsPanel.Size = new System.Drawing.Size(835, 60);\r
+            this.buttonsPanel.Size = new System.Drawing.Size(360, 60);\r
             this.buttonsPanel.TabIndex = 20;\r
             // \r
             // btnPlay\r
             this.btnRewind.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
             this.btnRewind.UseVisualStyleBackColor = false;\r
             // \r
+            // btnStepBack\r
+            // \r
+            this.btnStepBack.AutoSize = true;\r
+            this.btnStepBack.BackColor = System.Drawing.Color.Transparent;\r
+            this.btnStepBack.Cursor = System.Windows.Forms.Cursors.Hand;\r
+            this.btnStepBack.FlatAppearance.BorderSize = 0;\r
+            this.btnStepBack.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnStepBack.Image = global::DxPlay.Properties.Resources.baseline_skip_previous_black_24dp;\r
+            this.btnStepBack.Location = new System.Drawing.Point(123, 3);\r
+            this.btnStepBack.Name = "btnStepBack";\r
+            this.btnStepBack.Size = new System.Drawing.Size(54, 54);\r
+            this.btnStepBack.TabIndex = 21;\r
+            this.btnStepBack.TabStop = false;\r
+            this.btnStepBack.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnStepBack.UseVisualStyleBackColor = false;\r
+            // \r
             // btnStop\r
             // \r
             this.btnStop.AutoSize = true;\r
             this.btnStop.FlatAppearance.BorderSize = 0;\r
             this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnStop.Image = global::DxPlay.Properties.Resources.ic_stop_black_24dp_2x;\r
-            this.btnStop.Location = new System.Drawing.Point(123, 3);\r
+            this.btnStop.Location = new System.Drawing.Point(183, 3);\r
             this.btnStop.Name = "btnStop";\r
             this.btnStop.Size = new System.Drawing.Size(54, 54);\r
             this.btnStop.TabIndex = 19;\r
             this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
             this.btnStop.UseVisualStyleBackColor = false;\r
             // \r
+            // btnStepForward\r
+            // \r
+            this.btnStepForward.AutoSize = true;\r
+            this.btnStepForward.BackColor = System.Drawing.Color.Transparent;\r
+            this.btnStepForward.Cursor = System.Windows.Forms.Cursors.Hand;\r
+            this.btnStepForward.FlatAppearance.BorderSize = 0;\r
+            this.btnStepForward.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
+            this.btnStepForward.Image = global::DxPlay.Properties.Resources.baseline_skip_next_black_24dp;\r
+            this.btnStepForward.Location = new System.Drawing.Point(243, 3);\r
+            this.btnStepForward.Name = "btnStepForward";\r
+            this.btnStepForward.Size = new System.Drawing.Size(54, 54);\r
+            this.btnStepForward.TabIndex = 22;\r
+            this.btnStepForward.TabStop = false;\r
+            this.btnStepForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+            this.btnStepForward.UseVisualStyleBackColor = false;\r
+            // \r
             // btnForward\r
             // \r
             this.btnForward.AutoSize = true;\r
             this.btnForward.FlatAppearance.BorderSize = 0;\r
             this.btnForward.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnForward.Image = global::DxPlay.Properties.Resources.baseline_fast_forward_black_24dp;\r
-            this.btnForward.Location = new System.Drawing.Point(183, 3);\r
+            this.btnForward.Location = new System.Drawing.Point(303, 3);\r
             this.btnForward.Name = "btnForward";\r
             this.btnForward.Size = new System.Drawing.Size(54, 54);\r
             this.btnForward.TabIndex = 20;\r
             this.btnForward.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
             this.btnForward.UseVisualStyleBackColor = false;\r
             // \r
+            // logoPanel\r
+            // \r
+            this.logoPanel.AutoSize = true;\r
+            this.logoPanel.BackgroundImage = global::DxPlay.Properties.Resources.bs_user_logo;\r
+            this.logoPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;\r
+            this.logoPanel.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.logoPanel.Location = new System.Drawing.Point(621, 0);\r
+            this.logoPanel.Margin = new System.Windows.Forms.Padding(0);\r
+            this.logoPanel.Name = "logoPanel";\r
+            this.logoPanel.Size = new System.Drawing.Size(208, 60);\r
+            this.logoPanel.TabIndex = 21;\r
+            // \r
             // PlayerControls\r
             // \r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
             this.Controls.Add(this.mainPanel);\r
             this.Margin = new System.Windows.Forms.Padding(0);\r
             this.Name = "PlayerControls";\r
-            this.Size = new System.Drawing.Size(835, 116);\r
+            this.Size = new System.Drawing.Size(835, 126);\r
             this.mainPanel.ResumeLayout(false);\r
             this.mainPanel.PerformLayout();\r
             this.timecodePanel.ResumeLayout(false);\r
+            this.controlsPanel.ResumeLayout(false);\r
+            this.controlsPanel.PerformLayout();\r
             this.buttonsPanel.ResumeLayout(false);\r
             this.buttonsPanel.PerformLayout();\r
             this.ResumeLayout(false);\r
         private MaestroShared.Controls.NoFocusCueButton btnStop;\r
         private MaestroShared.Controls.NoFocusCueButton btnRewind;\r
         private MaestroShared.Controls.NoFocusCueButton btnForward;\r
+        private System.Windows.Forms.TableLayoutPanel controlsPanel;\r
+        private System.Windows.Forms.Panel logoPanel;\r
+        private MaestroShared.Controls.NoFocusCueButton btnStepBack;\r
+        private MaestroShared.Controls.NoFocusCueButton btnStepForward;\r
     }\r
 }\r
index 899051f4971dc7b3cfdd21b721aff0ff494dfe73..21cf06cf2071c75e8b7ce2ba5be94a48b6ed90a0 100644 (file)
@@ -18,6 +18,8 @@ namespace DxPlay.Controls {
         public NoFocusCueButton Stop { get => btnStop; }\r
         public NoFocusCueButton Rewind { get => btnRewind; }\r
         public NoFocusCueButton Forward { get => btnForward; }\r
+        public NoFocusCueButton StepBack { get => btnStepBack; }\r
+        public NoFocusCueButton StepForward { get => btnStepForward; }\r
 \r
     }\r
 }\r
index 88f6ba0da74c2928943259b1a964e8742207f171..9b86b793baabe2389ab0b8356f28dd025d3027f5 100644 (file)
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
   <data name="btnRewind.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
     <value>\r
-        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\r
-        YQUAAAEqSURBVGhD7dgtTgNRFMXxCUlFDaZJDboSgWUFaFS3wArYQbsD1oCpZgVYBBJdRWqqmkAInMfk\r
-        JS/Nnem7d46Z5vySf1LMuYaPGRoRERERobpEz+3HQVg7Lrdoi37/v4pj7VSboBX6Qelo9DBrx2WB3lA+\r
-        GD3M2nF5QAd0fNR7mLVTbYZekHUwV4O143KHPpF1rOwU1k61KXpC1hGrLqwdl2v0gawDXVlYO9Uu0CP6\r
-        QtZ4XyXWjssVekXWaE0Za8flHu2RNVhbwtpxWyLGYdZOyKi/hbL8w/eNrPG+SqydsBvE+PXH2gkZ9R+y\r
-        UnoE2CHrWNkprJ2QOWI8hLF2wkb7OF1KLyLvaOhh1k5IehVcI8YrJWMnbLQv9aX075BN+3EQ1o6IiIjI\r
-        mWqaP9Jxlnyjr5KKAAAAAElFTkSuQmCC\r
+        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAASpJREFUaEPt\r
+        2C1OA1EUxfEJSUUNpkkNuhKBZQVoVLfACthBuwPWgKlmBVgEEl1FaqqaQAicx+QlL82d6bt3jpnm/JJ/\r
+        Usy5ho8ZGhERERGhukTP7cdBWDsut2iLfv+/imPtVJugFfpB6Wj0MGvHZYHeUD4YPczacXlAB3R81HuY\r
+        tVNthl6QdTBXg7Xjcoc+kXWs7BTWTrUpekLWEasurB2Xa/SBrANdWVg71S7QI/pC1nhfJdaOyxV6RdZo\r
+        TRlrx+Ue7ZE1WFvC2nFbIsZh1k7IqL+FsvzD942s8b5KrJ2wG8T49cfaCRn1H7JSegTYIetY2SmsnZA5\r
+        YjyEsXbCRvs4XUovIu9o6GHWTkh6FVwjxislYydstC/1pfTvkE37cRDWjoiIiMiZapo/0nGWfKOvkooA\r
+        AAAASUVORK5CYII=\r
 </value>\r
   </data>\r
 </root>
\ No newline at end of file
index 89677b5521204daa239bdf535de85d7dbdc95e90..101655abd0b8a8f1c829f87ab315cc5d112593f0 100644 (file)
@@ -13,7 +13,6 @@ using System.Collections.Generic;
 using Myriadbits.MXF;\r
 using MaestroShared.Metadata;\r
 using NLog;\r
-using MaestroShared.Configuration;\r
 using DxPlay.Properties;\r
 \r
 namespace DxPlay {\r
@@ -48,31 +47,49 @@ namespace DxPlay {
         private object tcLock = new object();\r
         Bitmap m_Bitmap = null;\r
         public bool IsError { get; set; }\r
+\r
+        private object SeekToLock = new object();\r
+        private int seekTo;\r
+        public int SeekTo {\r
+            get {\r
+                lock (SeekToLock) {\r
+                    return seekTo;\r
+                }\r
+            }\r
+            set {\r
+                lock (SeekToLock) {\r
+                    seekTo = value;\r
+                }\r
+            }\r
+        }\r
+\r
         private int m_stride;\r
 \r
 \r
         Control playerWindow;\r
         private PlayerGraph graph;\r
+        private readonly DxPlaySettings settings;\r
 \r
         // Play an avi file into a window.  Allow for snapshots.\r
         // (Control to show video in, Avi file to play\r
-        public DxPlayer(Control hWin, ref MediaDescription mediaDesc, UISettings properties) {\r
-            stringValues.Add(GraphState.Exiting, properties.Resource("EXITING", Resources.EXITING));\r
-            stringValues.Add(GraphState.Paused, properties.Resource("PAUSED", Resources.PAUSED));\r
-            stringValues.Add(GraphState.Playing, properties.Resource("PLAYING", Resources.PLAYING));\r
-            stringValues.Add(GraphState.Stopped, properties.Resource("STOPPED", Resources.STOPPED));\r
-            stringValues.Add(GraphState.Completed, properties.Resource("COMPLETED", Resources.COMPLETED));\r
+        public DxPlayer(Control hWin, ref MediaDescription mediaDesc, DxPlaySettings settings) {\r
+            this.settings = settings;\r
+\r
+            stringValues.Add(GraphState.Exiting, settings.Resource("EXITING", Resources.EXITING));\r
+            stringValues.Add(GraphState.Paused, settings.Resource("PAUSED", Resources.PAUSED));\r
+            stringValues.Add(GraphState.Playing, settings.Resource("PLAYING", Resources.PLAYING));\r
+            stringValues.Add(GraphState.Stopped, settings.Resource("STOPPED", Resources.STOPPED));\r
+            stringValues.Add(GraphState.Completed, settings.Resource("COMPLETED", Resources.COMPLETED));\r
             State = GraphState.Stopped;\r
             try {\r
                 int hr;\r
                 MediaDescription = mediaDesc;\r
                 // Set up the graph\r
                 playerWindow = hWin;\r
-                //playerWindow.Invalidate();\r
                 SetupGraph();\r
 \r
-                hWin.Hide();\r
-                hWin.Show();\r
+                //hWin.Hide();\r
+                //hWin.Show();\r
 \r
                 // Get the event handle the graph will use to signal\r
                 // when events occur\r
@@ -89,33 +106,43 @@ namespace DxPlay {
                 m_eventThread.Name = "Media Event Thread";\r
                 m_eventThread.Start();\r
 \r
-                m_Bitmap = Properties.Resources.lgs;\r
+                m_Bitmap = Resources.lgs;\r
 \r
                 tcWorker = new BackgroundWorker();\r
                 tcWorker.DoWork += TcWorker_DoWork;\r
                 tcWorker.WorkerSupportsCancellation = true;\r
                 tcWorker.RunWorkerAsync(tcLock);\r
 \r
-            } catch {\r
+            } catch (Exception e) {\r
+                logger.Error(e);\r
                 Dispose();\r
                 throw;\r
             }\r
+\r
         }\r
 \r
         private void SetupGraph() {\r
             graph = new PlayerGraph(MediaDescription.FileName, playerWindow.Handle);\r
 \r
+            //TODO hogy lesz igy framrate?\r
+            //if (graph.SampleGrabber == null)\r
+            //    return;\r
+\r
+            if (graph.SampleGrabber == null)\r
+                throw new Exception("Audio only file is not supported.");\r
+\r
             AMMediaType media = new AMMediaType();\r
             graph.SampleGrabber.GetConnectedMediaType(media);\r
             logger.Debug("SaveSizeInfo");\r
             SaveSizeInfo(media);\r
             DsUtils.FreeAMMediaType(media);\r
 \r
-            logger.Debug("ConfigureSampleGrabber");\r
-            ConfigureSampleGrabber(graph.SampleGrabber);\r
             logger.Debug("SetTimeCodes");\r
             SetTimeCodes();\r
-            logger.Debug("ConfigureVideoWindow");\r
+\r
+            logger.Debug("ConfigureSampleGrabber");\r
+            ConfigureSampleGrabber(graph.SampleGrabber);\r
+            logger.Debug("UpdateVideoWindow");\r
             UpdateVideoWindow();\r
             RenderFirstFrame();\r
         }\r
@@ -124,12 +151,20 @@ namespace DxPlay {
             graph.MediaControl.Run();\r
             graph.MediaSeeking.SetPositions(1, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning);\r
             graph.MediaControl.Pause();\r
+            //ForceRepaintFrame();\r
         }\r
 \r
         private void TcWorker_DoWork(object sender, DoWorkEventArgs e) {\r
             while (!e.Cancel) {\r
                 UpdateTC();\r
                 Thread.Sleep(10);\r
+\r
+                if (SeekTo != 0) {\r
+                    RealSeek(SeekTo);\r
+                    Thread.Sleep(100);\r
+                    SeekTo = 0;\r
+                }\r
+\r
             }\r
         }\r
 \r
@@ -183,8 +218,11 @@ namespace DxPlay {
                 Seek(CurrentTC.ZeroBasedFrames + step);\r
             }\r
         }\r
-\r
         public void Seek(int value) {\r
+            SeekTo = value;\r
+        }\r
+\r
+        public void RealSeek(int value) {\r
             if (graph == null || graph.MediaSeeking == null)\r
                 return;\r
             double frameLength = (double)MEDIATIME_REFERENCE / MediaDescription.FrameRate;\r
@@ -205,6 +243,7 @@ namespace DxPlay {
                 DsError.ThrowExceptionForHR(hr);\r
                 corrected = true;\r
             }\r
+            //ForceRepaintFrame();\r
             logger.Debug("Seeking requested frame {0} got frame {1}, media position {2}, frame length {3}, corrected {4}", value, reachedFrames, requestedPosition, avgTimePerFrame, corrected);\r
         }\r
 \r
@@ -236,29 +275,47 @@ namespace DxPlay {
             MediaDescription.duration = new Timecode();\r
             MediaDescription.Duration.Set(ReferenceTimeToFrames(duration));\r
             if (MediaDescription.FirstFrame == null) {\r
-                try {\r
-                    MXFFile mxf = new MXFFile(MediaDescription.FileName);\r
-                    mxf.Inspect();\r
-                    //MediaDescription.firstFrame = new Timecode(mxf.FirstSystemItem?.UserDateFullFrameNb, MediaDescription.FrameRate);\r
-                    MediaDescription.firstFrame = new Timecode((int)mxf.TimecodeComponent.StartTimecode, (float)mxf.TimecodeComponent.RoundedTimecodeBase);\r
-                } catch (Exception ex) {\r
+                if (settings.IsStandalone) {\r
+                    // BSH Kenya playout nem kezel start TC-t, minden 0 alapu\r
                     MediaDescription.firstFrame = new Timecode();\r
+                } else {\r
+                    try {\r
+                        MXFFile mxf = new MXFFile(MediaDescription.FileName);\r
+                        mxf.Inspect();\r
+                        MediaDescription.firstFrame = new Timecode((int)mxf.TimecodeComponent.StartTimecode, (float)mxf.TimecodeComponent.RoundedTimecodeBase);\r
+                    } catch {\r
+                        MediaDescription.firstFrame = new Timecode();\r
+                    }\r
                 }\r
             }\r
-            //MediaDescription.firstFrame = new Timecode();\r
             CurrentTC = new Timecode(MediaDescription.FirstFrame);\r
         }\r
 \r
+        [StructLayout(LayoutKind.Sequential)]\r
+        struct PAINTSTRUCT {\r
+            public IntPtr hdc;\r
+            public bool fErase;\r
+            public RECT rcPaint;\r
+            public bool fRestore;\r
+            public bool fIncUpdate;\r
+            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] rgbReserved;\r
+        }\r
 \r
+        [DllImport("user32.dll")]\r
+        static extern IntPtr BeginPaint(IntPtr hwnd, out PAINTSTRUCT lpPaint);\r
+\r
+        [DllImport("user32.dll")]\r
+        static extern bool EndPaint(IntPtr hWnd, [In] ref PAINTSTRUCT lpPaint);\r
 \r
         public void UpdateVideoWindow() {\r
-            if (graph.WindowlessControl != null) {\r
-                graph.WindowlessControl.GetNativeVideoSize(out int w, out int h, out int aw, out int ah);\r
-                DsRect src = new DsRect(0, 0, w, h);\r
-                DsRect dst = new DsRect(playerWindow.ClientRectangle);\r
-                graph.WindowlessControl.SetVideoPosition(src, dst);\r
-                return;\r
-            }\r
+            //if (graph.WindowlessControl != null) {\r
+            //    graph.WindowlessControl.GetNativeVideoSize(out int w, out int h, out int aw, out int ah);\r
+            //    DsRect src = new DsRect(0, 0, w, h);\r
+            //    DsRect dst = new DsRect(playerWindow.ClientRectangle);\r
+            //    graph.WindowlessControl.SetVideoPosition(src, dst);\r
+            //    ForceRepaintFrame();\r
+            //    return;\r
+            //}\r
 \r
             Size resolution = MediaDescription.Resolution;\r
             if (resolution.Width == 0 || resolution.Height == 0)\r
@@ -285,24 +342,28 @@ namespace DxPlay {
             }\r
         }\r
 \r
+        //private void ForceRepaintFrame() {\r
+        //    if (graph.WindowlessControl == null)\r
+        //        return;\r
+        //    using (Graphics g = playerWindow.CreateGraphics()) {\r
+        //        IntPtr hdc = BeginPaint(playerWindow.Handle, out PAINTSTRUCT lpPaint);\r
+        //        graph.WindowlessControl.RepaintVideo(playerWindow.Handle, hdc);\r
+        //        EndPaint(playerWindow.Handle, ref lpPaint);\r
+        //    }\r
+        //}\r
+\r
         public void ToggleFullscreen() {\r
-            if (graph == null)\r
+            if (graph == null || graph.VideoWindow == null)\r
                 return;\r
             graph.VideoWindow.put_FullScreenMode(IsFullscreen() ? OABool.False : OABool.True);\r
         }\r
 \r
         public bool IsFullscreen() {\r
-\r
-            //if (graph == null)\r
+            if (graph == null || graph.VideoWindow == null)\r
                 return false;\r
-\r
-            if (graph.VideoWindow != null) {\r
-                int hr = graph.VideoWindow.get_FullScreenMode(out OABool isFullscreen);\r
-                DsError.ThrowExceptionForHR(hr);\r
-                return isFullscreen == OABool.True ? true : false;\r
-            }\r
-\r
-            return false;\r
+            int hr = graph.VideoWindow.get_FullScreenMode(out OABool isFullscreen);\r
+            DsError.ThrowExceptionForHR(hr);\r
+            return isFullscreen == OABool.True ? true : false;\r
         }\r
 \r
         // Set the options on the sa_ve grabber\r
@@ -331,16 +392,23 @@ namespace DxPlay {
             //hr = sampGrabber.GetConnectedMediaType(media);\r
             //DsError.ThrowExceptionForHR(hr);\r
 \r
-            if ((media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero)) {\r
-                throw new NotSupportedException("Unknown Grabber Media Format");\r
+            if (media.formatType == FormatType.VideoInfo) {\r
+                VideoInfoHeader videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader));\r
+                MediaDescription.resolution = new Size(videoInfoHeader.BmiHeader.Width, videoInfoHeader.BmiHeader.Height);\r
+                MediaDescription.frameRate = MEDIATIME_REFERENCE / videoInfoHeader.AvgTimePerFrame;\r
+\r
+                m_stride = videoInfoHeader.BmiHeader.Width * (videoInfoHeader.BmiHeader.BitCount / 8);\r
+                return;\r
             }\r
 \r
-            // Grab the size info\r
-            VideoInfoHeader videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader));\r
-            MediaDescription.resolution = new Size(videoInfoHeader.BmiHeader.Width, videoInfoHeader.BmiHeader.Height);\r
-            MediaDescription.frameRate = MEDIATIME_REFERENCE / videoInfoHeader.AvgTimePerFrame;\r
+            if (media.formatType == FormatType.WaveEx) {\r
+                VideoInfoHeader videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader));\r
+                MediaDescription.resolution = new Size(videoInfoHeader.BmiHeader.Width, videoInfoHeader.BmiHeader.Height);\r
+                MediaDescription.frameRate = MEDIATIME_REFERENCE / videoInfoHeader.AvgTimePerFrame;\r
+                return;\r
+            }\r
 \r
-            m_stride = videoInfoHeader.BmiHeader.Width * (videoInfoHeader.BmiHeader.BitCount / 8);\r
+            throw new NotSupportedException("Unknown Grabber Media Format");\r
         }\r
 \r
         // Shut down capture\r
@@ -427,11 +495,7 @@ namespace DxPlay {
         private void EventWait() {\r
             // Returned when GetEvent is called but there are no events\r
             const int E_ABORT = unchecked((int)0x80004004);\r
-\r
             int hr;\r
-            IntPtr p1, p2;\r
-            EventCode ec;\r
-\r
             do {\r
                 // Wait for an event\r
                 m_mre.WaitOne(-1, true);\r
@@ -442,7 +506,7 @@ namespace DxPlay {
                     if (State != GraphState.Exiting) {\r
                         // Read the event\r
                         for (\r
-                            hr = graph.MediaEvent.GetEvent(out ec, out p1, out p2, 0);\r
+                            hr = graph.MediaEvent.GetEvent(out EventCode ec, out IntPtr p1, out IntPtr p2, 0);\r
                             hr >= 0;\r
                             hr = graph.MediaEvent.GetEvent(out ec, out p1, out p2, 0)\r
                             ) {\r
index acf852b114606ce37c09b06de1b69ff0a1fbf7db..0f7c16fed767cbd1b7d5b71073664a9cd7ca7a8d 100644 (file)
@@ -240,6 +240,9 @@ namespace DxPlay {
                 m_mediaCtrl = m_FilterGraph as IMediaControl;\r
                 m_videoWindow = m_FilterGraph as IVideoWindow;\r
 \r
+                logger.Debug("SetTimeCodes");\r
+                SetTimeCodes();\r
+\r
 #if DEBUG\r
                 m_DsRot = new DsROTEntry(m_FilterGraph);\r
 #endif\r
@@ -354,8 +357,6 @@ namespace DxPlay {
 \r
                 //logger.Debug("SaveSizeInfo");\r
                 //SaveSizeInfo(sampGrabber as ISampleGrabber);\r
-                logger.Debug("SetTimeCodes");\r
-                SetTimeCodes();\r
                 logger.Debug("ConfigureVideoWindow");\r
                 ConfigureVideoWindow();\r
 \r
index 79263161e602f35f19f42e5b1e6f7239a04d643b..49944a667d6b29e609d5a90205956e690c954243 100644 (file)
@@ -83,7 +83,7 @@ namespace DxPlay {
             this.pVideo.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.pVideo.Location = new System.Drawing.Point(0, 0);\r
             this.pVideo.Name = "pVideo";\r
-            this.pVideo.Size = new System.Drawing.Size(741, 487);\r
+            this.pVideo.Size = new System.Drawing.Size(478, 419);\r
             this.pVideo.TabIndex = 0;\r
             this.pVideo.TabStop = true;\r
             this.pVideo.SizeChanged += new System.EventHandler(this.panel1_SizeChanged);\r
@@ -106,8 +106,8 @@ namespace DxPlay {
             this.mainSplit.Panel2.Controls.Add(this.tableLayoutPanel1);\r
             this.mainSplit.Panel2.Controls.Add(this.pMetadataDisplay);\r
             this.mainSplit.Panel2MinSize = 300;\r
-            this.mainSplit.Size = new System.Drawing.Size(1068, 489);\r
-            this.mainSplit.SplitterDistance = 743;\r
+            this.mainSplit.Size = new System.Drawing.Size(784, 421);\r
+            this.mainSplit.SplitterDistance = 480;\r
             this.mainSplit.TabIndex = 20;\r
             // \r
             // panelPlayer\r
@@ -116,7 +116,7 @@ namespace DxPlay {
             this.panelPlayer.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.panelPlayer.Location = new System.Drawing.Point(0, 0);\r
             this.panelPlayer.Name = "panelPlayer";\r
-            this.panelPlayer.Size = new System.Drawing.Size(741, 487);\r
+            this.panelPlayer.Size = new System.Drawing.Size(478, 419);\r
             this.panelPlayer.TabIndex = 0;\r
             // \r
             // tableLayoutPanel1\r
@@ -132,7 +132,7 @@ namespace DxPlay {
             this.tableLayoutPanel1.Name = "tableLayoutPanel1";\r
             this.tableLayoutPanel1.RowCount = 1;\r
             this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
-            this.tableLayoutPanel1.Size = new System.Drawing.Size(319, 424);\r
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(298, 356);\r
             this.tableLayoutPanel1.TabIndex = 4;\r
             // \r
             // tabEditor\r
@@ -149,7 +149,7 @@ namespace DxPlay {
             this.tabEditor.Name = "tabEditor";\r
             this.tabEditor.Padding = new System.Drawing.Point(10, 5);\r
             this.tabEditor.SelectedIndex = 0;\r
-            this.tabEditor.Size = new System.Drawing.Size(292, 416);\r
+            this.tabEditor.Size = new System.Drawing.Size(271, 348);\r
             this.tabEditor.TabIndex = 2;\r
             // \r
             // tpMetadata\r
@@ -161,7 +161,7 @@ namespace DxPlay {
             this.tpMetadata.Location = new System.Drawing.Point(4, 4);\r
             this.tpMetadata.Name = "tpMetadata";\r
             this.tpMetadata.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpMetadata.Size = new System.Drawing.Size(284, 377);\r
+            this.tpMetadata.Size = new System.Drawing.Size(263, 309);\r
             this.tpMetadata.TabIndex = 0;\r
             this.tpMetadata.Text = "Metadata";\r
             // \r
@@ -173,7 +173,7 @@ namespace DxPlay {
             this.trafficBrowser.Location = new System.Drawing.Point(3, 3);\r
             this.trafficBrowser.Margin = new System.Windows.Forms.Padding(0);\r
             this.trafficBrowser.Name = "trafficBrowser";\r
-            this.trafficBrowser.Size = new System.Drawing.Size(278, 371);\r
+            this.trafficBrowser.Size = new System.Drawing.Size(257, 303);\r
             this.trafficBrowser.TabIndex = 0;\r
             // \r
             // tpSegments\r
@@ -338,13 +338,13 @@ namespace DxPlay {
             this.pMetadataDisplay.Controls.Add(this.labelSelectedMetadata, 0, 0);\r
             this.pMetadataDisplay.Controls.Add(this.txtSelectedID, 0, 1);\r
             this.pMetadataDisplay.Dock = System.Windows.Forms.DockStyle.Bottom;\r
-            this.pMetadataDisplay.Location = new System.Drawing.Point(0, 424);\r
+            this.pMetadataDisplay.Location = new System.Drawing.Point(0, 356);\r
             this.pMetadataDisplay.Margin = new System.Windows.Forms.Padding(0);\r
             this.pMetadataDisplay.Name = "pMetadataDisplay";\r
             this.pMetadataDisplay.RowCount = 2;\r
             this.pMetadataDisplay.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
             this.pMetadataDisplay.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.pMetadataDisplay.Size = new System.Drawing.Size(319, 63);\r
+            this.pMetadataDisplay.Size = new System.Drawing.Size(298, 63);\r
             this.pMetadataDisplay.TabIndex = 5;\r
             // \r
             // btnApprove\r
@@ -355,7 +355,7 @@ namespace DxPlay {
             this.btnApprove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnApprove.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.btnApprove.Image = ((System.Drawing.Image)(resources.GetObject("btnApprove.Image")));\r
-            this.btnApprove.Location = new System.Drawing.Point(217, 29);\r
+            this.btnApprove.Location = new System.Drawing.Point(196, 29);\r
             this.btnApprove.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);\r
             this.btnApprove.Name = "btnApprove";\r
             this.btnApprove.Size = new System.Drawing.Size(102, 30);\r
@@ -375,7 +375,7 @@ namespace DxPlay {
             this.labelSelectedMetadata.Location = new System.Drawing.Point(3, 0);\r
             this.labelSelectedMetadata.Name = "labelSelectedMetadata";\r
             this.labelSelectedMetadata.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\r
-            this.labelSelectedMetadata.Size = new System.Drawing.Size(211, 25);\r
+            this.labelSelectedMetadata.Size = new System.Drawing.Size(190, 25);\r
             this.labelSelectedMetadata.TabIndex = 13;\r
             this.labelSelectedMetadata.Text = "Selected metadata";\r
             // \r
@@ -387,7 +387,7 @@ namespace DxPlay {
             this.txtSelectedID.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.txtSelectedID.Location = new System.Drawing.Point(3, 28);\r
             this.txtSelectedID.Name = "txtSelectedID";\r
-            this.txtSelectedID.Size = new System.Drawing.Size(211, 32);\r
+            this.txtSelectedID.Size = new System.Drawing.Size(190, 32);\r
             this.txtSelectedID.TabIndex = 12;\r
             // \r
             // mainMenu\r
@@ -396,7 +396,7 @@ namespace DxPlay {
             this.fileToolStripMenuItem});\r
             this.mainMenu.Location = new System.Drawing.Point(0, 0);\r
             this.mainMenu.Name = "mainMenu";\r
-            this.mainMenu.Size = new System.Drawing.Size(1068, 24);\r
+            this.mainMenu.Size = new System.Drawing.Size(784, 24);\r
             this.mainMenu.TabIndex = 21;\r
             this.mainMenu.Text = "menuStrip1";\r
             // \r
@@ -431,10 +431,10 @@ namespace DxPlay {
             this.playerControls.BackColor = System.Drawing.Color.Transparent;\r
             this.playerControls.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;\r
             this.playerControls.Dock = System.Windows.Forms.DockStyle.Bottom;\r
-            this.playerControls.Location = new System.Drawing.Point(0, 513);\r
+            this.playerControls.Location = new System.Drawing.Point(0, 445);\r
             this.playerControls.Margin = new System.Windows.Forms.Padding(0);\r
             this.playerControls.Name = "playerControls";\r
-            this.playerControls.Size = new System.Drawing.Size(1068, 116);\r
+            this.playerControls.Size = new System.Drawing.Size(784, 116);\r
             this.playerControls.TabIndex = 22;\r
             // \r
             // PlayerForm\r
@@ -442,7 +442,7 @@ namespace DxPlay {
             this.AllowDrop = true;\r
             this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\r
             this.BackColor = System.Drawing.Color.White;\r
-            this.ClientSize = new System.Drawing.Size(1068, 629);\r
+            this.ClientSize = new System.Drawing.Size(784, 561);\r
             this.Controls.Add(this.mainSplit);\r
             this.Controls.Add(this.mainMenu);\r
             this.Controls.Add(this.playerControls);\r
index 3fe967d8e90d264d2217fe12c5c41118f74223af..84580376b7ceb148a502494c2cc6cb5c73ea806c 100644 (file)
@@ -45,13 +45,13 @@ namespace DxPlay {
         /// <summary>\r
         /// User control cimkejenek rendszeres frissitese villogast eredmenyez e nelkul \r
         /// </summary>\r
-        protected override CreateParams CreateParams {\r
-            get {\r
-                CreateParams cp = base.CreateParams;\r
-                cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED\r
-                return cp;\r
-            }\r
-        }\r
+        //protected override CreateParams CreateParams {\r
+        //    get {\r
+        //        CreateParams cp = base.CreateParams;\r
+        //        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED\r
+        //        return cp;\r
+        //    }\r
+        //}\r
 \r
         public bool openFileDialogOpened;\r
 \r
@@ -91,15 +91,20 @@ namespace DxPlay {
         public PlayerForm() {\r
             InitializeComponent();\r
 \r
-            playerControls.Play.Click += btnPlay_Click;\r
-            playerControls.Stop.Click += btnStop_Click;\r
-            playerControls.Rewind.MouseDown += btnRewind_MouseDown;\r
-            playerControls.Rewind.MouseUp += btnRewind_MouseUp;\r
-            playerControls.Forward.MouseUp += btnForward_MouseUp;\r
-            playerControls.Forward.MouseDown += btnForward_MouseDown;\r
+            playerControls.Play.Click += OnPlayClick;\r
+            playerControls.Stop.Click += OnStopClick;\r
+            playerControls.Rewind.MouseDown += OnRewindMouseDown;\r
+            playerControls.Rewind.MouseUp += OnRewindMouseUp;\r
+            playerControls.Forward.MouseUp += OnForwardMouseUp;\r
+            playerControls.Forward.MouseDown += OnForwardMouseDown;\r
+            playerControls.StepBack.MouseDown += OnStepBackMouseDown;\r
+            playerControls.StepBack.MouseUp += OnStepBackMouseUp;\r
+            playerControls.StepForward.MouseUp += OnStepForwardMouseUp;\r
+            playerControls.StepForward.MouseDown += OnStepForwardMouseDown;\r
 \r
-            playerControls.TrackBar.MouseDown += trackBar1_MouseDown;\r
-            playerControls.TrackBar.MouseUp += trackBar1_MouseUp;\r
+            playerControls.TrackBar.MouseDown += OnTrackBarMouseDown;\r
+            playerControls.TrackBar.MouseUp += OnTrackBarMouseUp;\r
+            playerControls.TrackBar.Scroll += OnTrackBarScroll;\r
         }\r
 \r
         private void InitializeTexts() {\r
@@ -117,6 +122,8 @@ namespace DxPlay {
             tooltips = new ToolTip();\r
             tooltips.SetToolTip(playerControls.Rewind, Settings.Resource("REWIND", Resources.REWIND));\r
             tooltips.SetToolTip(playerControls.Forward, Settings.Resource("FORWARD", Resources.FORWARD));\r
+            tooltips.SetToolTip(playerControls.StepBack, Settings.Resource("STEPBACK", Resources.STEPBACK));\r
+            tooltips.SetToolTip(playerControls.StepForward, Settings.Resource("STEPFORWARD", Resources.STEPFORWARD));\r
             tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
             tooltips.SetToolTip(playerControls.Stop, Settings.Resource("STOP", Resources.STOP));\r
             playerControls.Status.Text = Settings.Resource("NOINPUT", Resources.NOINPUT);\r
@@ -182,6 +189,13 @@ namespace DxPlay {
                     logger.Error(e);\r
                 }\r
             }\r
+\r
+\r
+            //for (int i = 0; i < 100; i++) {\r
+            //    m_play.Seek(i);\r
+            //    Application.DoEvents();\r
+            //    Thread.Sleep(100);\r
+            //}\r
         }\r
 \r
 \r
@@ -207,28 +221,26 @@ namespace DxPlay {
                 m_play.UpdateVideoWindow();\r
         }\r
 \r
-        private void trackBar1_MouseDown(object sender, MouseEventArgs e) {\r
+        private void OnTrackBarMouseDown(object sender, MouseEventArgs e) {\r
             trackBarAtUser = true;\r
             lastClick = DateTime.Now;\r
         }\r
 \r
-        private void trackBar1_MouseUp(object sender, MouseEventArgs e) {\r
-            if (trackBarAtUser) {\r
-                trackBarAtUser = false;\r
-                if (m_play != null)\r
-                    m_play.Seek(playerControls.TrackBar.Value);\r
-                else\r
-                    playerControls.TrackBar.Value = 0;\r
-            }\r
+        private void OnTrackBarMouseUp(object sender, MouseEventArgs e) {\r
+            trackBarAtUser = false;\r
+        }\r
+\r
+        private void OnTrackBarScroll(object sender, ScrollEventArgs e) {\r
+            if (m_play != null)\r
+                m_play.Seek(playerControls.TrackBar.Value);\r
         }\r
 \r
+\r
         private void PlayOrPause() {\r
             if (m_play == null)\r
                 return;\r
             if (m_play.State == GraphState.Playing) {\r
-                m_play.Pause();\r
-                playerControls.Play.Image = Resources.ic_play_arrow_black_24dp_2x;\r
-                tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
+                Pause();\r
                 return;\r
             }\r
             m_play.Play();\r
@@ -236,11 +248,17 @@ namespace DxPlay {
             tooltips.SetToolTip(playerControls.Play, Settings.Resource("PAUSE", Resources.PAUSE));\r
         }\r
 \r
-        private void btnPlay_Click(object sender, EventArgs e) {\r
+        private void Pause() {\r
+            m_play.Pause();\r
+            playerControls.Play.Image = Resources.ic_play_arrow_black_24dp_2x;\r
+            tooltips.SetToolTip(playerControls.Play, Settings.Resource("PLAY", Resources.PLAY));\r
+        }\r
+\r
+        private void OnPlayClick(object sender, EventArgs e) {\r
             PlayOrPause();\r
         }\r
 \r
-        private void btnStop_Click(object sender, EventArgs e) {\r
+        private void OnStopClick(object sender, EventArgs e) {\r
             if (m_play != null && m_play.State != GraphState.Stopped) {\r
                 m_play.Stop();\r
             }\r
@@ -249,30 +267,51 @@ namespace DxPlay {
 \r
         private bool buttonDown;\r
 \r
-        private void btnRewind_MouseUp(object sender, MouseEventArgs e) {\r
+        private void OnRewindMouseUp(object sender, MouseEventArgs e) {\r
             buttonDown = false;\r
         }\r
 \r
-        private void btnRewind_MouseDown(object sender, MouseEventArgs e) {\r
+        private void OnRewindMouseDown(object sender, MouseEventArgs e) {\r
             buttonDown = true;\r
-            int num = 0;\r
             do {\r
-                num++;\r
-                Rewind();\r
+                m_play.Rewind(10);\r
                 Application.DoEvents();\r
             } while (buttonDown);\r
         }\r
 \r
-        private void btnForward_MouseUp(object sender, MouseEventArgs e) {\r
+        private void OnForwardMouseUp(object sender, MouseEventArgs e) {\r
             buttonDown = false;\r
         }\r
 \r
-        private void btnForward_MouseDown(object sender, EventArgs e) {\r
+        private void OnForwardMouseDown(object sender, EventArgs e) {\r
             buttonDown = true;\r
             int num = 0;\r
             do {\r
-                num++;\r
-                Forward();\r
+                m_play.Forward(10);\r
+                Application.DoEvents();\r
+            } while (buttonDown);\r
+        }\r
+\r
+        private void OnStepBackMouseUp(object sender, MouseEventArgs e) {\r
+            buttonDown = false;\r
+        }\r
+\r
+        private void OnStepBackMouseDown(object sender, MouseEventArgs e) {\r
+            buttonDown = true;\r
+            do {\r
+                m_play.Rewind(1);\r
+                Application.DoEvents();\r
+            } while (buttonDown);\r
+        }\r
+\r
+        private void OnStepForwardMouseUp(object sender, MouseEventArgs e) {\r
+            buttonDown = false;\r
+        }\r
+\r
+        private void OnStepForwardMouseDown(object sender, EventArgs e) {\r
+            buttonDown = true;\r
+            do {\r
+                m_play.Forward(1);\r
                 Application.DoEvents();\r
             } while (buttonDown);\r
         }\r
@@ -280,14 +319,14 @@ namespace DxPlay {
         private void Rewind() {\r
             if (m_play == null)\r
                 return;\r
-            int step = ModifierKeys.HasFlag(Keys.Control) ? 5 : 1;\r
+            int step = ModifierKeys.HasFlag(Keys.Control) ? 10 : 1;\r
             m_play.Rewind(step);\r
         }\r
 \r
         private void Forward() {\r
             if (m_play == null)\r
                 return;\r
-            int step = ModifierKeys.HasFlag(Keys.Control) ? 5 : 1;\r
+            int step = ModifierKeys.HasFlag(Keys.Control) ? 10 : 1;\r
             m_play.Forward(step);\r
         }\r
 \r
@@ -404,11 +443,14 @@ namespace DxPlay {
         }\r
 \r
         private void OnPlayEvent() {\r
-            //if (!IsHandleCreated || Disposing || IsDisposed || m_play == null)\r
-            //    return;\r
-            //if (Disposing || IsDisposed || m_play == null)\r
-            //    return;\r
-            playerControls.Invoke((Action)(() => {\r
+            if (!IsHandleCreated || Disposing || IsDisposed || m_play == null)\r
+                return;\r
+\r
+            BeginInvoke((Action)(() => {\r
+                if (Disposing || IsDisposed || m_play == null)\r
+                    return;\r
+                if (m_play.State == GraphState.Completed)\r
+                    Pause();\r
                 if (!trackBarAtUser)\r
                     playerControls.TrackBar.Value = m_play.CurrentTC.ZeroBasedFrames;\r
                 playerControls.CurrentTC.Text = m_play.CurrentTC.ToString();\r
@@ -431,12 +473,24 @@ namespace DxPlay {
             //    m_play.Dispose();\r
         }\r
 \r
+        private void ProcessCommandLine() {\r
+            String[] arguments = Environment.GetCommandLineArgs();\r
+            if (arguments.Length > 1) {\r
+                FileInfo fi = new FileInfo(arguments[1]);\r
+                if (fi.Exists)\r
+                    OpenFile(fi);\r
+            }\r
+        }\r
+\r
         private void PlayerForm_Shown(object sender, EventArgs e) {\r
             logger.Debug("PlayerForm_Shown");\r
             InitializeTexts();\r
             if (true.Equals(Settings?.Player?.SegmentEditor) && true.Equals(Settings?.IsStandalone)) {\r
                 mainMenu.Visible = true;\r
             }\r
+\r
+            ProcessCommandLine();\r
+        \r
             if (m_play != null && true.Equals(Settings?.Player?.AutoStart))\r
                 m_play.Play();\r
         }\r
index a3f828ceee054fd661a74d731d237a421e89c83c..675af6111805edc7427c4010fcbec382c9e0fc32 100644 (file)
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo\r
-        CAAAAk1TRnQBSQFMAgEBAgEAAXgBAQF4AQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+        CAAAAk1TRnQBSQFMAgEBAgEAAYgBAQGIAQEBGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
         AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
index 967d6ac30378f3625369dd671a04fd45187d69d8..8c38ff3df9977226663d7657efe64a287a361db1 100644 (file)
@@ -15,7 +15,7 @@ namespace DxPlay {
         public IMediaSeeking MediaSeeking { get; private set; }\r
         public IMediaControl MediaControl { get; private set; }\r
         public IMediaEvent MediaEvent { get; private set; }\r
-        public IVMRWindowlessControl9 WindowlessControl { get; private set; }\r
+        //public IVMRWindowlessControl9 WindowlessControl { get; private set; }\r
 \r
         private bool isDisposed;\r
 \r
@@ -24,7 +24,7 @@ namespace DxPlay {
                 MediaSeeking = this as IMediaSeeking;\r
                 MediaControl = this as IMediaControl;\r
                 MediaEvent = this as IMediaEvent;\r
-                //VideoWindow = this as IVideoWindow;\r
+                VideoWindow = this as IVideoWindow;\r
                 IGraphBuilder graphBuilder = this as IGraphBuilder;\r
 #if DEBUG\r
                 m_DsRot = new DsROTEntry(graphBuilder);\r
@@ -33,21 +33,35 @@ namespace DxPlay {
                 DsError.ThrowExceptionForHR(graphBuilder.AddSourceFilter(fileName, fileName, out IBaseFilter sourceFilter));\r
 \r
                 IBaseFilter splitter = AddSplitter(graphBuilder, sourceFilter);\r
-                IBaseFilter videoDecoder = AddVideoDecoder(graphBuilder, splitter);\r
-                IBaseFilter sampleGrabber = AddSampleGrabber(graphBuilder, videoDecoder);\r
-                SampleGrabber = (ISampleGrabber)sampleGrabber;\r
-                IBaseFilter videoRenderer = AddRenderer(graphBuilder, sampleGrabber, handle);\r
-                FilterGraphTools.RenderPin(graphBuilder, sampleGrabber, "Output");\r
-                //IBaseFilter videoRenderer = AddSimpleRenderer(graphBuilder, sampleGrabber);\r
+                bool audioOnly = true;\r
+                if (DsFindPin.ByName(splitter, "Video") != null) {\r
+                    audioOnly = false;\r
+                    IBaseFilter videoDecoder = AddVideoDecoder(graphBuilder, splitter);\r
+                    EnableDeinterlace(videoDecoder);\r
+                    IBaseFilter sampleGrabber = AddSampleGrabber(graphBuilder, videoDecoder);\r
+                    SampleGrabber = (ISampleGrabber)sampleGrabber;\r
+                    //IBaseFilter videoRenderer = AddRenderer(graphBuilder, sampleGrabber, handle);\r
+                    IBaseFilter videoRenderer = AddSimpleRenderer(graphBuilder, sampleGrabber, handle);\r
+                    FilterGraphTools.RenderPin(graphBuilder, sampleGrabber, "Output");\r
+                    ConfigureSimpleRenderer(handle);\r
+\r
+                } else {\r
+                    logger.Warn("Video pin not available");\r
+                }\r
                 if (DsFindPin.ByName(splitter, "Audio") != null) {\r
                     IBaseFilter audioDecoder = AddAudioDecoder(graphBuilder, splitter);\r
-                    FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output");\r
+                    if (audioOnly) {\r
+                        throw new Exception("Audio only file is not supported.");\r
+                        //IBaseFilter sampleGrabber = AddSampleGrabber(graphBuilder, audioDecoder);\r
+                        //SampleGrabber = (ISampleGrabber)sampleGrabber;\r
+                        //FilterGraphTools.RenderPin(graphBuilder, sampleGrabber, "Output");\r
+                    } else\r
+                        FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output");\r
                 } else {\r
                     logger.Warn("Audio pin not available");\r
                 }\r
                 \r
                 SearchAudioTracks(splitter);\r
-                EnableDeinterlace(videoDecoder);\r
 \r
             } catch (Exception e) {\r
                 logger.Error(e.Message);\r
@@ -80,29 +94,23 @@ namespace DxPlay {
             logger.Debug("Connect SampleGrabber -> VideoMixingRenderer9");\r
 \r
             try {\r
-                IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9) videoRenderer;\r
-                filterConfig.SetRenderingMode(VMR9Mode.Windowless);\r
-                WindowlessControl = (IVMRWindowlessControl9) videoRenderer;\r
-                WindowlessControl.SetVideoClippingWindow(handle);\r
-                //VideoWindow = (IVideoWindow) filterConfig;\r
-                //FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
-\r
+                //IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9) videoRenderer;\r
+                //filterConfig.SetRenderingMode(VMR9Mode.Windowless);\r
+                //WindowlessControl = (IVMRWindowlessControl9) videoRenderer;\r
+                //WindowlessControl.SetVideoClippingWindow(handle);\r
+                //WindowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);\r
+                FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
             } catch (Exception e) {\r
                 logger.Error(e);\r
                 graphBuilder.RemoveFilter(videoRenderer);\r
                 logger.Info("Trying default VideoRenderer instead Video Mixing Renderer 9");\r
                 AddSimpleRenderer(graphBuilder, sampleGrabber, handle);\r
             }\r
+\r
             return videoRenderer;\r
         }\r
 \r
-        private IBaseFilter AddSimpleRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber, IntPtr handle) {\r
-            logger.Debug("Add default VideoRenderer to graph");\r
-            IBaseFilter videoRenderer = (IBaseFilter)new VideoRendererDefault();\r
-            DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "VideoRendererDefault"));\r
-            FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
-            VideoWindow = (IVideoWindow)videoRenderer;\r
-\r
+        private void ConfigureSimpleRenderer(IntPtr handle) {\r
             // Set the output window\r
             int hr;\r
 \r
@@ -119,7 +127,13 @@ namespace DxPlay {
             // Make the window visible\r
             hr = VideoWindow.put_Visible(OABool.True);\r
             DsError.ThrowExceptionForHR(hr);\r
+        }\r
 \r
+        private IBaseFilter AddSimpleRenderer(IGraphBuilder graphBuilder, IBaseFilter sampleGrabber, IntPtr handle) {\r
+            logger.Debug("Add default VideoRenderer to graph");\r
+            IBaseFilter videoRenderer = (IBaseFilter)new VideoRendererDefault();\r
+            DsError.ThrowExceptionForHR(graphBuilder.AddFilter(videoRenderer, "VideoRendererDefault"));\r
+            //FilterGraphTools.ConnectFilters(graphBuilder, sampleGrabber, "Output", videoRenderer, "VMR Input0", true);\r
             return videoRenderer;\r
         }\r
 \r
@@ -157,8 +171,7 @@ namespace DxPlay {
         private void SearchAudioTracks(IBaseFilter splitter) {\r
             IAMStreamSelect amStreamSelect = (IAMStreamSelect)splitter;\r
             if (amStreamSelect != null) {\r
-                int count = 0;\r
-                amStreamSelect.Count(out count);\r
+                amStreamSelect.Count(out int count);\r
                 int audioCount = 0;\r
                 for (int i = 0; i < count; i++) {\r
                     amStreamSelect.Info(i, out AMMediaType ppmt, out AMStreamSelectInfoFlags pdwFlags, out int plcid, out int pdwGroup, out string ppszName, out object ppObject, out object ppUnk);\r
index d885389dc5392ec8c3af384350de7e8cecea8022..67c37c1289c5ed936432dcb07e6821a366a8dad9 100644 (file)
@@ -21,21 +21,11 @@ namespace Maestro {
             LoadSettings(playerForm);\r
             if (playerForm.Settings == null)\r
                 playerForm.Settings = new DxPlaySettings();\r
-            if (ProcessCommandLine(playerForm))\r
-                return;\r
+            //if (ProcessCommandLine(playerForm))\r
+            //    return;\r
             Application.Run(playerForm);\r
         }\r
 \r
-        private static bool ProcessCommandLine(PlayerForm playerForm) {\r
-            String[] arguments = Environment.GetCommandLineArgs();\r
-            if (arguments.Length > 1) {\r
-                FileInfo fi = new FileInfo(arguments[1]);\r
-                if (fi.Exists)\r
-                    playerForm.OpenFile(fi);\r
-            }\r
-            return playerForm.IsDisposed;\r
-        }\r
-\r
         private static void LoadSettings(PlayerForm playerForm) {\r
             try {\r
                 FileInfo dxPlayConfig = new FileInfo(ConfigurationSerializer.Combine(DXPLAY_FILE));\r
index 3c7bdc6f9d28cca0ba51508111299f8cbeb0bd22..f0f736d4be95e72f2323367cbfa0ef43e8829851 100644 (file)
@@ -26,7 +26,7 @@ using System.Runtime.CompilerServices;
 // You can specify all the values or you can default the Revision and Build Numbers \r
 // by using the '*' as shown below:\r
 \r
-[assembly: AssemblyVersion("2.0.8.2")]\r
+[assembly: AssemblyVersion("2.0.8.4")]\r
 \r
 //\r
 // In order to sign your assembly you must specify a key to use. Refer to the \r
@@ -56,5 +56,5 @@ using System.Runtime.CompilerServices;
 [assembly: AssemblyDelaySign(false)]\r
 [assembly: AssemblyKeyFile("")]\r
 [assembly: AssemblyKeyName("")]\r
-[assembly: AssemblyFileVersion("2.0.8.2")]\r
+[assembly: AssemblyFileVersion("2.0.8.4")]\r
 \r
index abcb81c9b017271ec6a6818e8d1e2dc7148a8450..6ede38cf3faad4f9d34c7d734c4cf6c74f84d7d8 100644 (file)
@@ -219,7 +219,7 @@ namespace DxPlay.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to Előre csévélés.\r
+        ///   Looks up a localized string similar to Előre csévélés (Ctrl + &gt;).\r
         /// </summary>\r
         internal static string FORWARD {\r
             get {\r
@@ -331,7 +331,7 @@ namespace DxPlay.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to Szünet.\r
+        ///   Looks up a localized string similar to Szünet (Szóköz).\r
         /// </summary>\r
         internal static string PAUSE {\r
             get {\r
@@ -349,7 +349,7 @@ namespace DxPlay.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to Lejátszás.\r
+        ///   Looks up a localized string similar to Lejátszás (Szóköz).\r
         /// </summary>\r
         internal static string PLAY {\r
             get {\r
@@ -385,7 +385,7 @@ namespace DxPlay.Properties {
         }\r
         \r
         /// <summary>\r
-        ///   Looks up a localized string similar to Hátra csévélés.\r
+        ///   Looks up a localized string similar to Hátra csévélés (Ctrl + &lt;).\r
         /// </summary>\r
         internal static string REWIND {\r
             get {\r
@@ -420,6 +420,24 @@ namespace DxPlay.Properties {
             }\r
         }\r
         \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Vissza léptetés (&lt;).\r
+        /// </summary>\r
+        internal static string STEPBACK {\r
+            get {\r
+                return ResourceManager.GetString("STEPBACK", resourceCulture);\r
+            }\r
+        }\r
+        \r
+        /// <summary>\r
+        ///   Looks up a localized string similar to Előre léptetés (&gt;).\r
+        /// </summary>\r
+        internal static string STEPFORWARD {\r
+            get {\r
+                return ResourceManager.GetString("STEPFORWARD", resourceCulture);\r
+            }\r
+        }\r
+        \r
         /// <summary>\r
         ///   Looks up a localized string similar to Leállítás.\r
         /// </summary>\r
index ae3908997f1490d3540103ccf120158648e4d810..258c9ba44c3fe52354c0cafc005fd97617509dee 100644 (file)
     <value>NINCS BEMENET</value>\r
   </data>\r
   <data name="PLAY" xml:space="preserve">\r
-    <value>Lejátszás</value>\r
+    <value>Lejátszás (Szóköz)</value>\r
   </data>\r
   <data name="METADATA" xml:space="preserve">\r
     <value>Metaadat</value>\r
     <value>..\resources\lgs.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
   <data name="PAUSE" xml:space="preserve">\r
-    <value>Szünet</value>\r
+    <value>Szünet (Szóköz)</value>\r
   </data>\r
   <data name="POSITIONASTCIN" xml:space="preserve">\r
     <value>Aktuális pozíció belépőként</value>\r
     <value>..\Resources\baseline_fast_rewind_black_24dp1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
   </data>\r
   <data name="FORWARD" xml:space="preserve">\r
-    <value>Előre csévélés</value>\r
+    <value>Előre csévélés (Ctrl + &gt;)</value>\r
   </data>\r
   <data name="REWIND" xml:space="preserve">\r
-    <value>Hátra csévélés</value>\r
+    <value>Hátra csévélés (Ctrl + &lt;)</value>\r
+  </data>\r
+  <data name="STEPBACK" xml:space="preserve">\r
+    <value>Vissza léptetés (&lt;)</value>\r
+  </data>\r
+  <data name="STEPFORWARD" xml:space="preserve">\r
+    <value>Előre léptetés (&gt;)</value>\r
   </data>\r
 </root>
\ No newline at end of file
index 4040a89de4716cdc1c3e4d2b81a1371d86c35f0d..cacd30fed7008ec49de0d47a022d112146072ec2 100644 (file)
       "outputFormat": "%ID%",\r
       "tag": "Archiválás",\r
       "saveArchiveMetadata": true,\r
+      "deleteAfterCopy": true,\r
+      "temporaryCopy": true,\r
       "remote": {\r
-        "address": "ftp://10.10.1.100/ARCHIVE",\r
+        "address": "ftp://10.10.1.100/ARCHIVE/ONE",\r
         "userName": "mediacube",\r
         "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
index df84699433d4f40cd7517171017c3d1f44d7cc07..9d0ebeba5dffc29513ef398e920662109aff1d67 100644 (file)
@@ -183,6 +183,9 @@ namespace MaestroShared.Configuration {
     public class NativeOctopusMetadata : MetadataProvider {\r
     }\r
 \r
+    public class FreeMetadata : MetadataProvider {\r
+    }\r
+\r
     public class TrafficMetadata : MetadataProvider {\r
         public ProjectSettings ProjectSettings { get; set; }\r
         public string FunctionName { get; set; }\r
index 444c2585b067f0e378269180db8a245c73eac98d..53dd24571fcd486dafa363832a2ed8ce1ecabd4b 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers\r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.0.8.5")]\r
-[assembly: AssemblyFileVersion("2.0.8.5")]\r
+[assembly: AssemblyVersion("2.0.8.6")]\r
+[assembly: AssemblyFileVersion("2.0.8.6")]\r
index dfa74a37dd329d863db1ba9d1dc329e5f3f0e8ac..4e018a702918b7ee574cc1f31d7d55642cb8b74e 100644 (file)
@@ -31,6 +31,9 @@
             this.nativeOctopusIDSelector = new NativeOctopusClient.NativeOctopusIDSelector();\r
             this.tpTraffic = new System.Windows.Forms.TabPage();\r
             this.trafficIDSelector = new TrafficClient.TrafficIDSelector();\r
+            this.tpFree = new System.Windows.Forms.TabPage();\r
+            this.txtID = new System.Windows.Forms.TextBox();\r
+            this.lName = new System.Windows.Forms.Label();\r
             this.pMetadataDisplay = new System.Windows.Forms.TableLayoutPanel();\r
             this.btnLookupMetadata = new System.Windows.Forms.Button();\r
             this.labelSelectedMetadata = new System.Windows.Forms.Label();\r
@@ -39,6 +42,7 @@
             this.tpOctopus.SuspendLayout();\r
             this.tpNativeOctopus.SuspendLayout();\r
             this.tpTraffic.SuspendLayout();\r
+            this.tpFree.SuspendLayout();\r
             this.pMetadataDisplay.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
@@ -47,6 +51,7 @@
             this.tabMetadata.Controls.Add(this.tpOctopus);\r
             this.tabMetadata.Controls.Add(this.tpNativeOctopus);\r
             this.tabMetadata.Controls.Add(this.tpTraffic);\r
+            this.tabMetadata.Controls.Add(this.tpFree);\r
             this.tabMetadata.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.tabMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.tabMetadata.Location = new System.Drawing.Point(0, 0);\r
             this.trafficIDSelector.Size = new System.Drawing.Size(359, 422);\r
             this.trafficIDSelector.TabIndex = 0;\r
             // \r
+            // tpFree\r
+            // \r
+            this.tpFree.Controls.Add(this.txtID);\r
+            this.tpFree.Controls.Add(this.lName);\r
+            this.tpFree.Location = new System.Drawing.Point(4, 24);\r
+            this.tpFree.Name = "tpFree";\r
+            this.tpFree.Padding = new System.Windows.Forms.Padding(3);\r
+            this.tpFree.Size = new System.Drawing.Size(365, 428);\r
+            this.tpFree.TabIndex = 3;\r
+            this.tpFree.Text = "Free";\r
+            this.tpFree.UseVisualStyleBackColor = true;\r
+            // \r
+            // txtID\r
+            // \r
+            this.txtID.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.txtID.Location = new System.Drawing.Point(3, 18);\r
+            this.txtID.Name = "txtID";\r
+            this.txtID.Size = new System.Drawing.Size(359, 21);\r
+            this.txtID.TabIndex = 1;\r
+            // \r
+            // lName\r
+            // \r
+            this.lName.AutoSize = true;\r
+            this.lName.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.lName.Location = new System.Drawing.Point(3, 3);\r
+            this.lName.Name = "lName";\r
+            this.lName.Size = new System.Drawing.Size(19, 15);\r
+            this.lName.TabIndex = 0;\r
+            this.lName.Text = "ID";\r
+            // \r
             // pMetadataDisplay\r
             // \r
             this.pMetadataDisplay.AutoSize = true;\r
             this.tpNativeOctopus.ResumeLayout(false);\r
             this.tpTraffic.ResumeLayout(false);\r
             this.tpTraffic.PerformLayout();\r
+            this.tpFree.ResumeLayout(false);\r
+            this.tpFree.PerformLayout();\r
             this.pMetadataDisplay.ResumeLayout(false);\r
             this.pMetadataDisplay.PerformLayout();\r
             this.ResumeLayout(false);\r
         private TrafficClient.TrafficIDSelector trafficIDSelector;\r
         private System.Windows.Forms.TabPage tpNativeOctopus;\r
         private NativeOctopusClient.NativeOctopusIDSelector nativeOctopusIDSelector;\r
+        private System.Windows.Forms.TabPage tpFree;\r
+        private System.Windows.Forms.TextBox txtID;\r
+        private System.Windows.Forms.Label lName;\r
     }\r
 }\r
index ce2f3b1e412fd883c602f43288aaaed62137b145..a37ae9c0032f417d273d10d284c68d5420825af2 100644 (file)
@@ -23,6 +23,7 @@ namespace MaestroShared.Controls {
         private MetadataProvider[] providers;\r
 \r
         public TextBox MetadataIDText { get => textSelectedMetadata; }\r
+        public TextBox FreeIDText { get => txtID; }\r
         public OctopusIDSelector OctopusIDSelector { get => octopusIDSelector; }\r
         public NativeOctopusIDSelector NativeOctopusIDSelector { get => nativeOctopusIDSelector; }\r
         public TrafficIDSelector TrafficIDSelector { get => trafficIDSelector; }\r
@@ -36,6 +37,7 @@ namespace MaestroShared.Controls {
                 InitializeTrafficSelector();\r
                 InitializeOctopusSelector();\r
                 InitializeNativeOctopusSelector();\r
+                InitializeFreeSelector();\r
             }\r
         }\r
 \r
@@ -74,6 +76,27 @@ namespace MaestroShared.Controls {
             trafficIDSelector.IDChangedEvent += TrafficIDChangedEvent;\r
         }\r
 \r
+        private void InitializeFreeSelector() {\r
+            FreeMetadata freeConfiguration = MetadataProvider.Get<FreeMetadata>(Providers);\r
+            if (freeConfiguration == null) {\r
+                tabMetadata.TabPages.Remove(tpFree);\r
+                return;\r
+            }\r
+\r
+            txtID.TextChanged += OnFreeMetadataChanged;\r
+        }\r
+\r
+        private void ClearFreeMetadata() {\r
+            txtID.Text = "";\r
+        }\r
+\r
+        private void OnFreeMetadataChanged(object sender, EventArgs e) {\r
+            octopusIDSelector.ClearSelection();\r
+            trafficIDSelector.ClearSelection();\r
+            nativeOctopusIDSelector.ClearSelection();\r
+\r
+        }\r
+\r
         private void InitializeOctopusSelector() {\r
             OctopusMetadata octopusConfiguration = MetadataProvider.Get<OctopusMetadata>(Providers);\r
             if (octopusConfiguration == null) {\r
@@ -105,18 +128,21 @@ namespace MaestroShared.Controls {
         private void OctopusIDChangedEvent(string id, string name, string text) {\r
             trafficIDSelector.ClearSelection();\r
             nativeOctopusIDSelector.ClearSelection();\r
+            ClearFreeMetadata();\r
             textSelectedMetadata.Text = name;\r
         }\r
 \r
         private void NativeOctopusIDChangedEvent(string id, string name, string text) {\r
             octopusIDSelector.ClearSelection();\r
             trafficIDSelector.ClearSelection();\r
+            ClearFreeMetadata();\r
             textSelectedMetadata.Text = name;\r
         }\r
 \r
         private void TrafficIDChangedEvent(string id, int variantID, string text) {\r
             octopusIDSelector.ClearSelection();\r
             nativeOctopusIDSelector.ClearSelection();\r
+            ClearFreeMetadata();\r
             textSelectedMetadata.Text = id;\r
         }\r
 \r
index 0921586cbdcee806a428ebb75632330dbcad5294..99c266500bfb1f9ee23d8da72e0ed2ba8b2b2881 100644 (file)
@@ -183,8 +183,10 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
 \r
                logger.info("Checking {}", filePath);\r
                List<Path> killDateFiles = getKillDateFiles(filePath);\r
-               if (killDateFiles.size() == 0)\r
+               if (killDateFiles.size() == 0) {\r
+                       logger.warn(marker, "A {} fájlhoz nem található 'killdate' állomány.", filePath);\r
                        return;\r
+               }\r
 \r
                if (killDateFiles.size() != 1)\r
                        logger.warn(marker, "A {} fájlhoz több 'killdate' állomány található, a legújabb dátum határozza meg a törlés időpontját.", filePath);\r