git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 19 Oct 2017 12:35:56 +0000 (12:35 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 19 Oct 2017 12:35:56 +0000 (12:35 +0000)
15 files changed:
client/Maestro/Configuration/configuration-playout.json
client/Maestro/Configuration/configuration-studio.json
client/Maestro/MaestroForm.Designer.cs
client/Maestro/MaestroForm.Metadata.cs
client/Maestro/MaestroForm.Source.cs
client/Maestro/MaestroForm.Target.cs
client/Maestro/MaestroForm.cs
client/Maestro/Metadata/IDTypes.cs
client/Maestro/Metadata/MetadataType.cs
client/Maestro/Program.cs
client/Maestro/Targets/FTPTargetProcessor.cs
client/Maestro/Targets/FXPTargetProcessor.cs
client/Maestro/Targets/UNCTargetProcessor.cs
client/OctopusClient/OctopusIDSelector.cs
client/PlanAIRClient/TrafficIDSelector.cs

index 997f8f76406cec2c1ada811e8dc14624eb314a18..37a61c15fde3b5ef30a2af36dba80165ba8ce75e 100644 (file)
@@ -74,7 +74,7 @@
         "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
       },\r
-      "sendSEmailOnSuccess": true,\r
+      "sendEmailOnSuccess": true,\r
       "successEmailRecipient": "vasary@elgekko.net",\r
       "successEmailPattern": "A %TARGETNAME% újravágása szükséges."\r
     },\r
index 60518050b9d4e48a956644709aa3fac111ba9a2d..d832d94bc292f9e52eb93c57c4b1894df352826a 100644 (file)
@@ -64,7 +64,7 @@
       "tag": "Archiválás",\r
       "createMetadata": true,\r
       "remote": {\r
-        "address": "ftp://10.10.1.100:21/BRAAVOS/ARCHIVE",\r
+        "address": "ftp://10.10.1.100:21/ARCHIVE",\r
         "userName": "mediacube",\r
         "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
index a3442bed9eb8359e35677c3a0471c66d649ec28c..6315d1643064daa129ed7322e0757ac8f4708ed1 100644 (file)
@@ -292,8 +292,7 @@ namespace Maestro {
             this.lbSourceTitle.Name = "lbSourceTitle";\r
             this.lbSourceTitle.Size = new System.Drawing.Size(394, 13);\r
             this.lbSourceTitle.TabIndex = 15;\r
-            this.lbSourceTitle.Text = " sklj jgja gjfldjg fdljg fdkljg fldkjg jfdg sklj jgja gjfldjg fdljg fdkljg fldkjg" +\r
-    " jfdg sklj jgja gjfldjg fdljg fdkljg fldkjg jfdg";\r
+            this.lbSourceTitle.Text = "source";\r
             // \r
             // ctxmActions\r
             // \r
index 5e1eb7d3f2ef340befa848c100a8477fdb7121d1..9d889efb022f5024ec4e8615c01c1f2d5cde2e8b 100644 (file)
@@ -25,7 +25,7 @@ namespace Maestro {
             }\r
             set {\r
                 selectedMetadata = value;\r
-                textSelectedMetadata.Text = selectedMetadata.ID;\r
+                textSelectedMetadata.Text = selectedMetadata?.ID;\r
                 movieSegments = null;\r
                 segments = null;\r
             }\r
@@ -49,7 +49,7 @@ namespace Maestro {
                 Timeout = metadata.Server.Timeout,\r
                 ErrorReporter = ReportError\r
             };\r
-            trafficIDSelector.IDChangedEvent += TrafficIDSelected;\r
+            trafficIDSelector.IDChangedEvent += OnTrafficIDSelected;\r
         }\r
 \r
         private void InitializeOctopusSelector() {\r
@@ -72,31 +72,24 @@ namespace Maestro {
             mediaCubeApi = new MediaCubeApi(metadata.Server.Address.ToString(), metadata.Server.UserName, metadata.Server.Password, metadata.Server.Timeout) { ErrorReporter = ReportError };\r
         }\r
 \r
-        private void OnOctopusIDSelected(string selectedID) {\r
-            SelectedMetadata = new MetadataInfo() {\r
-                Kind = MetadataType.OctopusStory,\r
-                Tooltip = "Story ID",\r
-                ID = selectedID\r
-            };\r
-            EnableArchiveMetadataButtonAndCreateMetadataModel();\r
-        }\r
-\r
         private void ModifyArchiveMetadataClick(object sender, EventArgs e) {\r
+            if (archiveMetadata == null)\r
+                archiveMetadata = GetArchiveMetadata();\r
             ArchiveMetadataForm form = new ArchiveMetadataForm(archiveMetadata);\r
             form.ShowDialog();\r
         }\r
 \r
-        private IDTypes GetIDType(string id) {\r
-            IDTypes result = IDTypes.None;\r
+        private SourceIDType GetSourceType(string id) {\r
+            SourceIDType result = SourceIDType.None;\r
             if (!String.IsNullOrEmpty(id)) {\r
                 Match match = Regex.Match(id, "[A-Z]{1}[0-9]{6}[A-Z]{1}");\r
                 if (match.Success)\r
-                    result = IDTypes.TrafficID;\r
+                    result = SourceIDType.TrafficID;\r
                 else {\r
                     //"^[0-9]+$";\r
                     match = Regex.Match(id, "[0-9]");\r
                     if (match.Success)\r
-                        result = IDTypes.OctopusID;\r
+                        result = SourceIDType.OctopusID;\r
                 }\r
             }\r
             return result;\r
@@ -137,47 +130,13 @@ namespace Maestro {
             return result;\r
         }\r
 \r
-        private void TrafficIDSelected(string selectedID, int variantID) {\r
-            SelectedMetadata = new MetadataInfo() {\r
-                Kind = GetTrafficMetadataType(selectedID),\r
-                Tooltip = "Epizod ID",\r
-                ID = selectedID,\r
-                VariantID = variantID\r
-            };\r
-            // EnableArchiveMetadataButtonAndCreateMetadataModel();\r
-        }\r
-\r
-        private MetadataType GetTrafficMetadataType(string id) {\r
-            MetadataType result = MetadataType.TrafficMaterial;\r
-            switch (id[0]) {\r
-                case 'M':\r
-                    result = MetadataType.TrafficMaterial;\r
-                    break;\r
-                case 'P':\r
-                    result = MetadataType.TrafficPromo;\r
-                    break;\r
-                case 'R':\r
-                    result = MetadataType.TrafficAD;\r
-                    break;\r
-            }\r
-            return result;\r
-        }\r
-\r
-        private void EnableArchiveMetadataButtonAndCreateMetadataModel() {\r
-            ctxiModifyArchiveMetadata.Enabled = selectedMetadata != null;\r
-            if (ctxiModifyArchiveMetadata.Enabled) {\r
-                archiveMetadata = GetArchiveMetadata();\r
-            } else\r
-                archiveMetadata = null;\r
-        }\r
-\r
         private ArchiveMetadata GetArchiveMetadata() {\r
             ArchiveMetadata result = null;\r
-            IDTypes idType = GetIDType(textSelectedMetadata.Text);\r
+            SourceIDType idType = GetSourceType(textSelectedMetadata.Text);\r
             Cursor.Current = Cursors.WaitCursor;\r
-            if (idType == IDTypes.OctopusID)\r
+            if (idType == SourceIDType.OctopusID)\r
                 result = GetOctopusMetadata();\r
-            if (idType == IDTypes.TrafficID)\r
+            if (idType == SourceIDType.TrafficID)\r
                 result = GetTrafficMetadata();\r
             Cursor.Current = Cursors.Default;\r
             return result;\r
@@ -252,5 +211,71 @@ namespace Maestro {
             model.mediaDescription = story.Script;\r
         }\r
 \r
+        private MetadataType GetTrafficMetadataType(string id) {\r
+            MetadataType result = MetadataType.None;\r
+            if (id.Length < 1)\r
+                return result;\r
+            switch (id[0]) {\r
+                case 'M':\r
+                    result = MetadataType.TrafficMaterial;\r
+                    break;\r
+                case 'P':\r
+                    result = MetadataType.TrafficPromo;\r
+                    break;\r
+                case 'R':\r
+                    result = MetadataType.TrafficAD;\r
+                    break;\r
+            }\r
+            return result;\r
+        }\r
+\r
+        private void OnOctopusIDSelected(string selectedID) {\r
+            if (selectedID == null) {\r
+                SelectedMetadata = null;\r
+                return;\r
+            }\r
+            SelectedMetadata = new MetadataInfo() {\r
+                Kind = MetadataType.OctopusStory,\r
+                Tooltip = "Story ID",\r
+                ID = selectedID\r
+            };\r
+            EnableArchiveMetadataButtonAndCreateMetadataModel();\r
+            UpdateDefineSegmentEnabled();\r
+        }\r
+\r
+        private void OnTrafficIDSelected(string selectedID, int variantID) {\r
+            if (selectedID == null) {\r
+                SelectedMetadata = null;\r
+                return;\r
+            }\r
+            SelectedMetadata = new MetadataInfo() {\r
+                Kind = GetTrafficMetadataType(selectedID),\r
+                Tooltip = "Epizod ID",\r
+                ID = selectedID,\r
+                VariantID = variantID\r
+            };\r
+            EnableArchiveMetadataButtonAndCreateMetadataModel();\r
+            UpdateDefineSegmentEnabled();\r
+        }\r
+\r
+        private void EnableArchiveMetadataButtonAndCreateMetadataModel() {\r
+            ctxiModifyArchiveMetadata.Enabled = selectedMetadata != null;\r
+            if (!ctxiModifyArchiveMetadata.Enabled)\r
+                archiveMetadata = null;\r
+        }\r
+\r
+        private void UpdateDefineSegmentEnabled() {\r
+            MetadataType[] validTypes = { MetadataType.TrafficAD, MetadataType.TrafficMaterial, MetadataType.TrafficPromo };\r
+            ctxiDefineSegments.Enabled =\r
+                                        Configuration.Player != null &&\r
+                                        Configuration.Player.SegmentEditor &&\r
+                                        SelectedSource != null &&\r
+                                        SelectedSource.FileInfo != null &&\r
+                                        SelectedMetadata != null &&\r
+                                        validTypes.ToList().Contains(SelectedMetadata.Kind);\r
+            //TODO\r
+            buttonMetadata.Enabled = GetSourceType(startingName) != SourceIDType.None;\r
+        }\r
+\r
     }\r
 }\r
index 15b8dcd4146ed3e1031608530dbb697e8fb989ad..54156772d21bb62cd8a92c3cac3a839e22493ec2 100644 (file)
@@ -20,7 +20,7 @@ namespace Maestro {
         private string startingName;\r
         private List<DataGridViewRow> selectedSourceRows = new List<DataGridViewRow>();\r
 \r
-        public IDTypes IDType { get; set; }\r
+        public SourceIDType SourceIDType { get; set; }\r
 \r
         public SourceInfo SelectedSource {\r
             get {\r
@@ -221,6 +221,8 @@ namespace Maestro {
                 else\r
                     startingName = query.Substring(0, dotPosition);\r
             }\r
+\r
+            SourceIDType = GetSourceType(startingName);\r
         }\r
 \r
         private void SetTextSelectedSourceTextFromCheckBoxes() {\r
@@ -294,5 +296,17 @@ namespace Maestro {
                 UpdateSelectedSources(selectedRows);\r
             }\r
         }\r
+\r
+        private void buttonMetadata_Click(object sender, EventArgs e) {\r
+            switch (SourceIDType) {\r
+                case Metadata.SourceIDType.TrafficID:\r
+                    SetTrafficIDToMetadataText();\r
+                    break;\r
+                case Metadata.SourceIDType.OctopusID:\r
+                    SetOctopusIDToMetadataText();\r
+                    break;\r
+            }\r
+        }\r
+\r
     }\r
 }\r
index ee38e44226f00b2fec3c5ddc11c13746f41fa935..033bdf3470d49a58370cb5207a7aa43c0473fd72 100644 (file)
@@ -28,8 +28,10 @@ namespace Maestro {
     public partial class MaestroForm {\r
 \r
         private SegmentConverter segmentConverter;\r
+        private ToolTip targetTooltip;\r
 \r
         private void InitializeTarget() {\r
+            targetTooltip = new ToolTip();\r
             btnExecute.Enabled = false;\r
             if (Configuration.Targets == null)\r
                 return;\r
@@ -54,6 +56,7 @@ namespace Maestro {
                 Dock = DockStyle.Top,\r
                 Tag = target\r
             };\r
+            targetTooltip.SetToolTip(checkBox, target.Remote?.Address?.ToString());\r
             checkBox.CheckStateChanged += (s, e) => OnChecked(checkBox, target);\r
             panelActions.Controls.Add(checkBox);\r
             panelActions.RowCount = panelActions.Controls.Count;\r
@@ -218,18 +221,6 @@ namespace Maestro {
             EnableArchiveMetadataButtonAndCreateMetadataModel();\r
         }\r
 \r
-        private void UpdateDefineSegmentEnabled() {\r
-            MetadataType[] validTypes = { MetadataType.TrafficAD, MetadataType.TrafficMaterial, MetadataType.TrafficPromo };\r
-            ctxiDefineSegments.Enabled =\r
-                                        Configuration.Player != null &&\r
-                                        Configuration.Player.SegmentEditor &&\r
-                                        SelectedSource != null &&\r
-                                        SelectedSource.FileInfo != null &&\r
-                                        SelectedMetadata != null &&\r
-                                        validTypes.ToList().Contains(SelectedMetadata.Kind);\r
-            buttonMetadata.Enabled = GetIDType(startingName) != IDTypes.None;\r
-        }\r
-\r
         public void OnTargetPanelsMouseClick(object sender, MouseEventArgs e) {\r
             (sender as Control).Select();\r
         }\r
index 462a3760e224a8873dc1b07c288fc70358f9ba7f..76456b8ea7c0b87a7ea057a1a254edf8ce406268 100644 (file)
@@ -46,7 +46,7 @@ namespace Maestro {
             octopusIDSelector.ClearCheckBox = trafficIDSelector.ClearSelectionSource;\r
             octopusIDSelector.ErrorReporter = ReportError;\r
             groups = new GroupBox[] { groupSource, groupMetadata, groupTarget, groupActions };\r
-            trafficMetadataSelected = TrafficIDSelected;\r
+            trafficMetadataSelected = OnTrafficIDSelected;\r
             octopusMetadataSelected = OnOctopusIDSelected;\r
         }\r
 \r
@@ -179,17 +179,6 @@ namespace Maestro {
             }\r
         }\r
 \r
-        private void buttonMetadata_Click(object sender, EventArgs e) {\r
-            switch (IDType) {\r
-                case Metadata.IDTypes.TrafficID:\r
-                    SetTrafficIDToMetadataText();\r
-                    break;\r
-                case Metadata.IDTypes.OctopusID:\r
-                    SetOctopusIDToMetadataText();\r
-                    break;\r
-            }\r
-        }\r
-\r
         private void SetOctopusIDToMetadataText() {\r
             OctopusAPI api = octopusIDSelector.GetClient();\r
             Cursor.Current = Cursors.WaitCursor;\r
index d998c5e29dc5989b265f95934bf4a1293cf4aa66..83c38aff302a09bb41ba05adabf6b84f4029fd1d 100644 (file)
@@ -1,5 +1,5 @@
 namespace Maestro.Metadata {\r
-    public enum IDTypes {\r
+    public enum SourceIDType {\r
         TrafficID = 1,\r
         OctopusID = 2,\r
         None = 0\r
index bfbd4ed5b594a9161fbcbfde1e5e72e7b4a3c37c..28d932746a6c7a0101dcaf6471bf3a291ede2429 100644 (file)
@@ -1,5 +1,5 @@
 namespace Maestro.Metadata {\r
     public enum MetadataType {\r
-        OctopusStory, OctopusPlaceHolder, TrafficMaterial, TrafficPromo, TrafficAD \r
+        None, OctopusStory, OctopusPlaceHolder, TrafficMaterial, TrafficPromo, TrafficAD \r
     }\r
 }\r
index 1c75e6cd9fd3e32a0acdddd67cf69f127eba83f0..382eaf5a0dc5b2c6a67d7af169985e704cf3ca12 100644 (file)
@@ -26,33 +26,36 @@ namespace Maestro {
         /// </summary>\r
         [STAThread]\r
         static void Main() {\r
-            string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();\r
-            string mutexId = string.Format("Global\\{{{0}}}", appGuid);\r
-            bool createdNew;\r
-            var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);\r
-            var securitySettings = new MutexSecurity();\r
-            securitySettings.AddAccessRule(allowEveryoneRule);\r
-            using (var mutex = new Mutex(false, mutexId, out createdNew, securitySettings)) {\r
-                var hasHandle = false;\r
-                try {\r
-                    try {\r
-                        hasHandle = mutex.WaitOne(500, false);\r
-                        if (hasHandle == false)\r
-                            MessageBox.Show("A MediaCube Maestro alkalmazás már fut egy példányban.");\r
-                    }\r
-                    catch (AbandonedMutexException) {\r
-                        hasHandle = true;\r
-                    }\r
-                }\r
-                finally {\r
-                    if (hasHandle) {\r
-                        Application.EnableVisualStyles();\r
-                        Application.SetCompatibleTextRenderingDefault(false);\r
-                        Application.Run(new TrayApplicationContext());\r
-                        mutex.ReleaseMutex();\r
-                    }\r
-                }\r
-            }\r
+            //string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();\r
+            //string mutexId = string.Format("Global\\{{{0}}}", appGuid);\r
+            //bool createdNew;\r
+            //var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);\r
+            //var securitySettings = new MutexSecurity();\r
+            //securitySettings.AddAccessRule(allowEveryoneRule);\r
+            //using (var mutex = new Mutex(false, mutexId, out createdNew, securitySettings)) {\r
+            //    var hasHandle = false;\r
+            //    try {\r
+            //        try {\r
+            //            hasHandle = mutex.WaitOne(500, false);\r
+            //            if (hasHandle == false)\r
+            //                MessageBox.Show("A MediaCube Maestro alkalmazás már fut egy példányban.");\r
+            //        }\r
+            //        catch (AbandonedMutexException) {\r
+            //            hasHandle = true;\r
+            //        }\r
+            //    }\r
+            //    finally {\r
+            //        if (hasHandle) {\r
+            //            Application.EnableVisualStyles();\r
+            //            Application.SetCompatibleTextRenderingDefault(false);\r
+            //            Application.Run(new TrayApplicationContext());\r
+            //            mutex.ReleaseMutex();\r
+            //        }\r
+            //    }\r
+            //}\r
+            Application.EnableVisualStyles();\r
+            Application.SetCompatibleTextRenderingDefault(false);\r
+            Application.Run(new TrayApplicationContext());\r
         }\r
     }\r
 \r
index 39faad523cc627cb9c83e625bb6b73b7cef720fc..b5a198b91d182878103f9bc06d829edd40bda8f7 100644 (file)
@@ -96,6 +96,10 @@ namespace Maestro.Targets {
             return x > -1;\r
         }\r
 \r
+        protected override string GetOutputFilePath(string fileName) {\r
+            return fileName;\r
+        }\r
+\r
         protected override void EnsureDirectoryExistence(string path) {\r
             if (!targetFTP.DirectoryExists(path))\r
                 targetFTP.CreateDirectory(path, true);\r
index 776ba4fd834bd0906d3b782b3611fb084685c509..bc1e62dc8e21cb8f1d7935e8da8b958e28c417fe 100644 (file)
@@ -2,6 +2,7 @@
 using Maestro.Configuration;\r
 using NLog;\r
 using System;\r
+using System.IO;\r
 using System.Text.RegularExpressions;\r
 using System.Threading;\r
 using System.Windows.Forms;\r
@@ -16,9 +17,9 @@ namespace Maestro.Targets {
         public FXPTargetProcessor(Control parent,TargetProcessorParameter parameters) :\r
             base(parent, parameters) {\r
             sourceConfig = parameters.SourceConfig;\r
-            inputUri = new Uri(String.Format("{0}/{1}", parameters.SourceConfig.Remote.Address, parameters.InputFileName));\r
+            //inputUri = new Uri(String.Format("{0}/{1}", parameters.SourceConfig.Remote.Address, parameters.InputFileName));\r
+            inputUri = new Uri(Path.Combine(parameters.SourceConfig.Remote.Address.ToString(), parameters.InputFileName));\r
             Input = inputUri.ToString();\r
-\r
         }\r
 \r
         protected override void UploadFile() {\r
@@ -49,7 +50,11 @@ namespace Maestro.Targets {
                 if (!sourceReplyTYPE.Success)\r
                     throw new Exception(sourceReplyTYPE.ErrorMessage);\r
 \r
-                FtpReply replyRETR = sourceFTP.Execute("RETR " + inputUri.AbsolutePath);\r
+                string input = inputUri.AbsolutePath;\r
+                if (input.LastIndexOf("/") == 0)\r
+                    input = input.Replace("/", "");\r
+                FtpReply replyRETR = sourceFTP.Execute("RETR " + input);\r
+\r
                 if (!replyRETR.Success) {\r
 \r
                     replyRETR = sourceFTP.Execute("RETR " + inputUri.Segments[inputUri.Segments.Length - 1]);\r
index 0eea131f506613a1489ad5f9a4a779e125a9aaaf..6120be7ebdaf80fbb95b62989d8b1ea82fb2fc19 100644 (file)
@@ -22,7 +22,7 @@ namespace Maestro.Targets {
         private const string STATUS_FOLDER = ".STATUS";\r
         private const string KILLDATE_FILE = "{0}.{1}.killdate";\r
         private const string METADATA_FILE = "{0}.json";\r
-        private const string DEFAULT_EXTENSION = ".mxf";\r
+        private const string DEFAULT_EXTENSION = ".MXF";\r
         protected FileInfo inputFile;\r
         protected string workingDir;\r
         protected TargetProcessorParameter parameters;\r
@@ -157,7 +157,7 @@ namespace Maestro.Targets {
         private void SendEmail(string to, string messagePattern) {\r
             try {\r
                 string message = messagePattern.Replace("%TARGETNAME%", OutputName);\r
-                parameters.MediaCubeApi.Notify(to, messagePattern);\r
+                parameters.MediaCubeApi.Notify(to, message);\r
             }\r
             catch (Exception e) {\r
                 MessageBox.Show(parent, e.Message);\r
@@ -175,6 +175,7 @@ namespace Maestro.Targets {
             Finished = DateTime.Now;\r
             workFlowAction.finished = Finished;\r
             SendWorkFlowAction();\r
+            Progress = 0;\r
         }\r
 \r
         protected virtual bool FileExists(string path) {\r
@@ -253,17 +254,21 @@ namespace Maestro.Targets {
             Win32File.CopyFileEx(Input, Output, new CopyProgressRoutine(this.CopyProgressHandler), IntPtr.Zero, ref pbCancel, CopyFileFlags.COPY_FILE_RESTARTABLE);\r
         }\r
 \r
+        protected virtual string GetOutputFilePath(string fileName) {\r
+            return "/".Equals(workingDir) ? fileName : Path.Combine(workingDir, fileName);\r
+        }\r
+\r
         protected virtual string CreateOutputFileName() {\r
             string nameWithoutExtension = parameters.TargetConfig.OutputFormat.Replace("%ID%", ID).Replace("%SOURCENAME%", Path.GetFileNameWithoutExtension(InputName));\r
             string extension = InputName.Contains(".") ? InputName.Substring(InputName.LastIndexOf(".")) : DEFAULT_EXTENSION;\r
+            extension = extension.ToUpper();\r
+\r
             string result = String.Format(FILENAME, nameWithoutExtension, extension);\r
             int version = 1;\r
-            string target = "/".Equals(workingDir) ? result : Path.Combine(workingDir, result);\r
-            while (FileExists(target)) {\r
+            while (FileExists(GetOutputFilePath(result))) {\r
                 string versioned = String.Format(VERSIONED_FILENAME, nameWithoutExtension, version, extension);\r
                 logger.Debug(ALREADY_EXISTS, result, versioned);\r
                 result = versioned;\r
-                target = "/".Equals(workingDir) ? result : Path.Combine(workingDir, result);\r
                 version++;\r
             }\r
             return result;\r
index 4b8ba9a46e5072115766bb4f2e076afddcde1ebe..bdf326d4ac62d36a211818176f23b5e519485429 100644 (file)
@@ -236,7 +236,7 @@ namespace OctopusClient {
             checkFromCode = false;\r
             ClearCheckBox?.Invoke();\r
             ClearSelectionSource(node, treeContent.Nodes);\r
-            id = node.Checked ? text : string.Empty;\r
+            id = node.Checked ? text : null;\r
             IDChangedEvent?.Invoke(id);\r
             checkFromCode = false;\r
         }\r
index b96c10bbb9fed1830918568aec27231c1838a601..45ddfc0ff2bd0b086acb00c40d20d71ad575ef83 100644 (file)
@@ -157,7 +157,7 @@ namespace TrafficClient {
             if (selected) {\r
                 IDChangedEvent?.Invoke(res.MediaID, res.VariantID);\r
             } else\r
-                IDChangedEvent?.Invoke(string.Empty, 0);\r
+                IDChangedEvent?.Invoke(null, 0);\r
         }\r
 \r
         public void ClearSelectionSource() {\r