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