From: Vásáry Dániel Date: Wed, 15 Aug 2018 09:02:57 +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=323205c96e39ec4c10680bcc8916bd0fbd7f53bb;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31242 --- diff --git a/client/AudioRecorder/AudioRecorder.csproj b/client/AudioRecorder/AudioRecorder.csproj index 2f615a27..08654bc1 100644 --- a/client/AudioRecorder/AudioRecorder.csproj +++ b/client/AudioRecorder/AudioRecorder.csproj @@ -180,6 +180,10 @@ ResXFileCodeGenerator Resources.Designer.cs + + Designer + PreserveNewest + Designer @@ -217,6 +221,10 @@ {8cb8266d-2229-47e2-b06d-54fde82cbdc4} MetadataSelector + + {C1A664BE-7852-4418-BF33-6F59434FC5DC} + NativeOctopusClient + {8cc7c930-9dbf-487b-aed5-776937a649d5} OctopusClient diff --git a/client/AudioRecorder/Configuration/audiorecorder.json b/client/AudioRecorder/Configuration/audiorecorder.json index e7be0b57..8355ad25 100644 --- a/client/AudioRecorder/Configuration/audiorecorder.json +++ b/client/AudioRecorder/Configuration/audiorecorder.json @@ -39,6 +39,15 @@ "timeout": 1000 } }, + { + "$type": "NativeOctopusMetadata", + "server": { + "address": " http://10.10.1.11/api/v1/", + "userName": "mam", + "password": "fPLnV9N5gc7aC9ICvspjzJkGLnTWxAgEhwGOrXilAiD8+/IXviRlNJA0lrZ3ZX+7WG5EE3ZlaIitAhRGk+QIPGEOF3fEJCBJI2I9NN1e2JGi/my3WwXt0fu7dgbMxVid", + "timeout": 1000 + } + }, { "$type": "TrafficMetadata", "server": { diff --git a/client/AudioRecorder/MainForm.cs b/client/AudioRecorder/MainForm.cs index 1ff6fbe0..7491923b 100644 --- a/client/AudioRecorder/MainForm.cs +++ b/client/AudioRecorder/MainForm.cs @@ -76,7 +76,7 @@ namespace AudioRecorder { private void OnMainShown(object sender, EventArgs e) { try { - Type[] knownTypes = { typeof(OctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) }; + Type[] knownTypes = { typeof(OctopusMetadata), typeof(NativeOctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) }; parameters = ConfigurationSerializer.Load(CONFIG_FILE, knownTypes); UpdateGUI(); diff --git a/client/AudioRecorder/MetadataSelectorForm.Designer.cs b/client/AudioRecorder/MetadataSelectorForm.Designer.cs index 58cf08b1..f6211982 100644 --- a/client/AudioRecorder/MetadataSelectorForm.Designer.cs +++ b/client/AudioRecorder/MetadataSelectorForm.Designer.cs @@ -41,6 +41,7 @@ this.buttonCancel.TabIndex = 6; this.buttonCancel.Text = "Mégsem"; this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.OnCancelClick); // // buttonOK // diff --git a/client/AudioRecorder/MetadataSelectorForm.cs b/client/AudioRecorder/MetadataSelectorForm.cs index 381c0958..935e7b0d 100644 --- a/client/AudioRecorder/MetadataSelectorForm.cs +++ b/client/AudioRecorder/MetadataSelectorForm.cs @@ -24,6 +24,7 @@ namespace AudioRecorder { InitializeComponent(); metadataIDSelector.Providers = settings.Metadatas; metadataIDSelector.OctopusIDSelector.IDChangedEvent += OctopusIDChangedEvent; + metadataIDSelector.NativeOctopusIDSelector.IDChangedEvent += NativeOctopusIDChangedEvent; metadataIDSelector.TrafficIDSelector.IDChangedEvent += TrafficIDChangedEvent; metadataIDSelector.MetadataIDText.TextChanged += OnMetadataIDChanged; } @@ -46,6 +47,16 @@ namespace AudioRecorder { }; } + private void NativeOctopusIDChangedEvent(string id, string name, string text) { + if (name == null) + SelectedMetadata = null; + else + SelectedMetadata = new Metadata() { + ID = name, + Text = text + }; + } + private void TrafficIDChangedEvent(string id, int variantID, string text) { if (id == null) SelectedMetadata = null; diff --git a/client/AudioRecorder/Program.cs b/client/AudioRecorder/Program.cs index f9cdad2d..68420a5b 100644 --- a/client/AudioRecorder/Program.cs +++ b/client/AudioRecorder/Program.cs @@ -13,7 +13,7 @@ namespace AudioRecorder { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new MainForm()); - Type[] knownTypes = { typeof(OctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) }; + Type[] knownTypes = { typeof(OctopusMetadata), typeof(NativeOctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) }; var parameters = ConfigurationSerializer.Load("./Configuration/audiorecorder.json", knownTypes); Application.Run(new MetadataSelectorForm(parameters)); } diff --git a/client/AudioRecorder/Properties/AssemblyInfo.cs b/client/AudioRecorder/Properties/AssemblyInfo.cs index 5516b1be..869c8e85 100644 --- a/client/AudioRecorder/Properties/AssemblyInfo.cs +++ b/client/AudioRecorder/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.6.9")] -[assembly: AssemblyFileVersion("2.0.6.9")] +[assembly: AssemblyVersion("2.0.7.0")] +[assembly: AssemblyFileVersion("2.0.7.0")] diff --git a/client/AudioRecorder/nlog.config b/client/AudioRecorder/nlog.config new file mode 100644 index 00000000..70d5e798 --- /dev/null +++ b/client/AudioRecorder/nlog.config @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/client/MetadataSelector/MetadataIDSelector.cs b/client/MetadataSelector/MetadataIDSelector.cs index f9716f5b..0f6e5a7f 100644 --- a/client/MetadataSelector/MetadataIDSelector.cs +++ b/client/MetadataSelector/MetadataIDSelector.cs @@ -1,7 +1,7 @@ -using LinkDotNet.MessageHandling; -using LinkDotNet.MessageHandling.Contracts; +using LinkDotNet.MessageHandling.Contracts; using MaestroShared.Commons; using MaestroShared.Configuration; +using MaestroShared.MessageBus; using MaestroShared.Metadata; using MediaCubeClient; using NativeOctopusClient; @@ -24,6 +24,7 @@ namespace MaestroShared.Controls { public TextBox MetadataIDText { get => textSelectedMetadata; } public OctopusIDSelector OctopusIDSelector { get => octopusIDSelector; } + public NativeOctopusIDSelector NativeOctopusIDSelector { get => nativeOctopusIDSelector; } public TrafficIDSelector TrafficIDSelector { get => trafficIDSelector; } public MetadataProvider[] Providers { get => providers; set { @@ -47,18 +48,8 @@ namespace MaestroShared.Controls { } private void OnMessage(IMessage message) { - NativeOctopusAPIMessage nm = message as NativeOctopusAPIMessage; - if (nm != null) + if (message is MaestroMessage nm) MsgBox.Error(nm.Content); - OctopusAPIMessage om = message as OctopusAPIMessage; - if (om != null) - MsgBox.Error(om.Content); - TrafficAPIMessage tm = message as TrafficAPIMessage; - if (tm != null) - MsgBox.Error(tm.Content); - MediaCubeMessage mm = message as MediaCubeMessage; - if (mm != null) - MsgBox.Error(mm.Content); } private void InitializeTrafficSelector() { diff --git a/client/NativeOctopusClient/Model/MosObject.cs b/client/NativeOctopusClient/Model/MosObject.cs new file mode 100644 index 00000000..3b9b98fa --- /dev/null +++ b/client/NativeOctopusClient/Model/MosObject.cs @@ -0,0 +1,24 @@ +using Newtonsoft.Json.Linq; + +namespace NativeOctopusClient.Model { + public class MosObject { + public string MosID { get; set; } + public string ObjID { get; set; } + public string ObjectType { get; set; } + public string ID { get; set; } + public string GlobalID { get; set; } + + public static MosObject Create(JToken d) { + string sMosID = d["mosId"]?.ToString(); + if ("NEXIO.MOS" != sMosID) + return null; + return new MosObject() { + //ID = d["id"]?.ToString(), + //GlobalID = d["globalId"]?.ToString(), + //MosID = sMosID, + //ObjectType = d["objectType"]?.ToString(), + ObjID = d["id"]?.ToString() + }; + } + } +} diff --git a/client/NativeOctopusClient/Model/Rundown.cs b/client/NativeOctopusClient/Model/Rundown.cs new file mode 100644 index 00000000..c1954dbc --- /dev/null +++ b/client/NativeOctopusClient/Model/Rundown.cs @@ -0,0 +1,32 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Globalization; + +namespace NativeOctopusClient.Model { + public class Rundown { + public string ID { get; set; } + public string Name { get; set; } + public DateTime Start { get; set; } + public string FormattedStart { get; set; } + public int? StoryPosition { get; set; } + + public override String ToString() { + string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED; + return "0".Equals(ID) ? displayName : String.Format($"{FormattedStart} {displayName}"); + } + + public static Rundown Create(JToken d) { + String scheduledStart = d["scheduledStart"]?.ToString(); + Rundown result = new Rundown { + ID = d["id"]?.ToString(), + Name = d["name"]?.ToString() ?? "unnamed", + Start = DateTime.Parse(scheduledStart.Length > 0 ? scheduledStart : DateTime.MinValue.ToString()), + }; + if (result.Start == null) + result.FormattedStart = "?"; + else + result.FormattedStart = result.Start.ToString("HH:mm:ss", new CultureInfo("hu-HU")); + return result; + } + } +} diff --git a/client/NativeOctopusClient/Model/Story.cs b/client/NativeOctopusClient/Model/Story.cs new file mode 100644 index 00000000..d45d04a2 --- /dev/null +++ b/client/NativeOctopusClient/Model/Story.cs @@ -0,0 +1,67 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace NativeOctopusClient.Model { + public class Story { + public string ID { get; set; } + public string ParentStoryID { get; set; } + public string Name { get; set; } + public string Script { get; set; } + public string ScriptContent { get; set; } + public string Format { get; set; } + public int? Position { get; set; } + public MosObject[] MosObjects { get; set; } + public StoryFolder[] StoryFolders { get; set; } + public Rundown[] Rundowns { get; set; } + + public override String ToString() { + string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED; + return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} "); + } + + private static List GetMosObjects(JToken story) { + List result = null; + var mosObjects = JExtensions.ParseArray(story, "mosObjects"); + if (mosObjects == null) + return null; + + mosObjects.ToList().ForEach(t => { + var mosObject = MosObject.Create(t); + if (mosObject != null) { + if (result == null) + result = new List(); + result.Add(mosObject); + } + }); + return result; + } + + private static string GetParentStoryID(JToken story) { + var customColumns = JExtensions.ParseArray(story, "customColumns"); + if (customColumns == null) + return null; + return customColumns.ToList().Where(c => "ParentStoryID" == c["label"]?.ToString()).Select(c => c["value"]).FirstOrDefault().ToString(); + } + + public static Story Create(JToken slug) { + Story result = null; + var story = JExtensions.ParseObject(slug, "story"); + if (story != null) { + result = new Story { + ID = story["id"]?.ToString(), + Name = story["name"]?.ToString() ?? "unnamed", + Format = story["format"]?.ToString(), + Position = slug["position"]?.Value(), + ParentStoryID = GetParentStoryID(story), + MosObjects = GetMosObjects(story)?.ToArray() + }; + result.ParentStoryID = result.ParentStoryID ?? result.ID; + } + return result; + } + + + } +} diff --git a/client/NativeOctopusClient/Model/StoryFolder.cs b/client/NativeOctopusClient/Model/StoryFolder.cs new file mode 100644 index 00000000..83848f30 --- /dev/null +++ b/client/NativeOctopusClient/Model/StoryFolder.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json.Linq; +using System; + +namespace NativeOctopusClient.Model { + public class StoryFolder { + public string ID { get; set; } + public string Name { get; set; } + public int? StoryPosition { get; set; } + public override String ToString() { + string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED; + return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} "); + } + + public static StoryFolder Create(JToken d) { + return new StoryFolder() { + ID = d["id"]?.ToString(), + Name = d["name"]?.ToString() + }; + } + + + } +} diff --git a/client/NativeOctopusClient/NativeOctopusAPI.cs b/client/NativeOctopusClient/NativeOctopusAPI.cs index 1bf20a35..2c57c480 100644 --- a/client/NativeOctopusClient/NativeOctopusAPI.cs +++ b/client/NativeOctopusClient/NativeOctopusAPI.cs @@ -1,4 +1,5 @@ using LinkDotNet.MessageHandling.Contracts; +using NativeOctopusClient.Model; using Newtonsoft.Json.Linq; using NLog; using RestSharp; @@ -10,54 +11,6 @@ using System.Linq; namespace NativeOctopusClient { - public class Rundown { - public string ID { get; set; } - public string Name { get; set; } - public DateTime Start { get; set; } - public string FormattedStart { get; set; } - public int? StoryPosition { get; set; } - public override String ToString() { - string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED; - return "0".Equals(ID) ? displayName : String.Format($"{FormattedStart} {displayName} "); - } - } - - public class Story { - public string ID { get; set; } - public string ParentStoryID { get; set; } - public string Name { get; set; } - public string Script { get; set; } - public string ScriptContent { get; set; } - public string Format { get; set; } - public int? Position { get; set; } - public MosObject[] MosObjects { get; set; } - public StoryFolder[] StoryFolders { get; set; } - public Rundown[] Rundowns { get; set; } - - public override String ToString() { - string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED; - return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} "); - } - } - - public class MosObject { - public string MosID { get; set; } - public string ObjID { get; set; } - public string ObjectType { get; set; } - public string ID { get; set; } - public string GlobalID { get; set; } - } - - public class StoryFolder { - public string ID { get; set; } - public string Name { get; set; } - public int? StoryPosition { get; set; } - public override String ToString() { - string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED; - return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} "); - } - } - public class NativeOctopusAPI { private static Logger logger = LogManager.GetCurrentClassLogger(); public const string UNNAMED = "<üres>"; @@ -66,6 +19,7 @@ namespace NativeOctopusClient { private string user; private string pwd; private IMessageBus messageBus; + private IEnumerable rundowns; public NativeOctopusAPI(string address, string user, string pwd, int timeout, IMessageBus messageBus) { this.user = user; @@ -77,17 +31,22 @@ namespace NativeOctopusClient { this.messageBus = messageBus; } - public IEnumerable GetRundowns(DateTime scheduledDate) { - IEnumerable result = null; + public List GetRundowns(DateTime scheduledDate) { + List result = null; try { - var request = new RestRequest("rundowns/{scheduledDate}", Method.GET); - var dt = scheduledDate.ToString("s", CultureInfo.CurrentCulture); - request.AddParameter("scheduledDate", dt, ParameterType.UrlSegment); + var request = new RestRequest("Rundown", Method.GET); + request.AddParameter("fields", "id,name,scheduledStart", ParameterType.QueryString); + request.AddParameter("Octopus-Device-Name", user, ParameterType.HttpHeader); + request.AddParameter("Octopus-Device-Id", pwd, ParameterType.HttpHeader); var response = client.Execute(request); if (!CheckResponse(response)) return null; - JArray resultObject = JArray.Parse(response.Content); - result = resultObject.Children().Select(d => ToRundown(d)); + var resultList = JExtensions.ParseArray(JExtensions.ParseObject(response.Content), "result"); + if (resultList == null) + return null; + rundowns = resultList.Children().Select(d => Rundown.Create(d)).ToList(); + DateTime end = scheduledDate + new TimeSpan(1, 0, 0, 0); + result = rundowns.Where(r => r.Start >= scheduledDate && r.Start < end).OrderBy(r => r.Start).ToList(); } catch (Exception e) { OnError(e); @@ -95,33 +54,90 @@ namespace NativeOctopusClient { return result; } - public IEnumerable GetRundownsByParentStoryID(String id) { - IEnumerable result = null; + public List GetRundownStories(string id) { + List result = null; try { - var request = new RestRequest("rundownsByParentStoryID/{id}", Method.GET); + var request = new RestRequest("Rundown/{id}", Method.GET); request.AddParameter(ID, id, ParameterType.UrlSegment); + request.AddParameter("fields", "slugs,Slug.story,Slug.position,Story.id,Story.name,Story.format,Story.mosObjects,Story.customColumns,CustomColumn.label,CustomColumn.value", ParameterType.QueryString); + request.AddParameter("Octopus-Device-Name", user, ParameterType.HttpHeader); + request.AddParameter("Octopus-Device-Id", pwd, ParameterType.HttpHeader); var response = client.Execute(request); if (!CheckResponse(response)) return null; - JArray resultObject = JArray.Parse(response.Content); - result = resultObject.Children().Select(d => ToRundown(d)); + var resultObject = JExtensions.ParseObject(JExtensions.ParseObject(response.Content), "result"); + var resultList = JExtensions.ParseArray(resultObject, "slugs"); + if (resultList == null) + return null; + + resultList.Children().ToList().ForEach(d => { + Story s = Story.Create(d); + if (s != null) { + if (result == null) + result = new List(); + result.Add(s); + } + }); + if (result != null) + result = result.OrderBy(s=>s.Position).ToList(); + } catch (Exception e) { + OnError(e); } - catch (Exception e) { + return result; + } + + public List getStoryFolders() { + List result = null; + try { + var request = new RestRequest("StoryFolder", Method.GET); + request.AddParameter("fields", "id,name", ParameterType.QueryString); + request.AddParameter("Octopus-Device-Name", user, ParameterType.HttpHeader); + request.AddParameter("Octopus-Device-Id", pwd, ParameterType.HttpHeader); + var response = client.Execute(request); + if (!CheckResponse(response)) + return null; + var resultList = JExtensions.ParseArray(JExtensions.ParseObject(response.Content), "result"); + if (resultList == null) + return null; + result = resultList.ToList().Select(sf => StoryFolder.Create(sf)).OrderBy(sf => sf.Name).ToList(); + } catch (Exception e) { OnError(e); } return result; } - public IEnumerable GetRundownsByPlaceHolderId(string id) { + public List GetStoryFolderStories(string id) { + List result = null; + try { + var request = new RestRequest("storyFolderStories/{id}", Method.GET); + request.AddParameter(ID, id, ParameterType.UrlSegment); + var response = client.Execute(request); + if (!CheckResponse(response)) + return null; + JArray resultObject = JArray.Parse(response.Content); + result = resultObject.Children().Select(d => { + Story r = ToStoryFolderStory(d, id); + //logger.Debug($"{r}"); + return r; + }).OrderBy(r => { + return r.ID; + }).ToList(); + } catch (Exception e) { + OnError(e); + } + return result; + } + + public IEnumerable GetRundownsByParentStoryID(String id) { IEnumerable result = null; try { - var request = new RestRequest("rundownsByPlaceHolderID/{id}", Method.GET); + var request = new RestRequest("rundownsByParentStoryID/{id}", Method.GET); request.AddParameter(ID, id, ParameterType.UrlSegment); var response = client.Execute(request); if (!CheckResponse(response)) return null; JArray resultObject = JArray.Parse(response.Content); - result = resultObject.Children().Select(d => ToRundown(d)); + //result = resultObject.Children().Select(d => ToRundown(d)); } catch (Exception e) { OnError(e); @@ -129,22 +145,16 @@ namespace NativeOctopusClient { return result; } - public IEnumerable GetRundownStories(string id) { - IEnumerable result = null; + public IEnumerable GetRundownsByPlaceHolderId(string id) { + IEnumerable result = null; try { - var request = new RestRequest("rundownStories/{id}", Method.GET); + var request = new RestRequest("rundownsByPlaceHolderID/{id}", Method.GET); request.AddParameter(ID, id, ParameterType.UrlSegment); var response = client.Execute(request); if (!CheckResponse(response)) return null; JArray resultObject = JArray.Parse(response.Content); - result = resultObject.Children().Select(d => { - Story r = ToRundownStory(d, id); - //logger.Debug($"{r}"); - return r; - }).OrderBy(r => { - return r.ID; - }); + //result = resultObject.Children().Select(d => ToRundown(d)); } catch (Exception e) { OnError(e); @@ -185,7 +195,7 @@ namespace NativeOctopusClient { return null; JArray resultObject = JArray.Parse(response.Content); result = resultObject.Children().Select(d => { - Story r = ToStory(d); + Story r = Story.Create(d); //logger.Debug($"{r}"); return r; }); @@ -206,7 +216,7 @@ namespace NativeOctopusClient { return null; JArray resultObject = JArray.Parse(response.Content); result = resultObject.Children().Select(d => { - Story r = ToStory(d); + Story r = Story.Create(d); //logger.Debug($"{r}"); return r; }).OrderBy(r => { @@ -219,26 +229,6 @@ namespace NativeOctopusClient { return result; } - public IEnumerable getStoryFolders() { - IEnumerable result = null; - try { - var request = new RestRequest("storyFolders", Method.GET); - var response = client.Execute(request); - if (!CheckResponse(response)) - return null; - JArray resultObject = JArray.Parse(response.Content); - result = resultObject.Children().Select(d => { - StoryFolder r = ToStoryFolder(d); - //logger.Debug($"{r}"); - return r; - }); - } - catch (Exception e) { - OnError(e); - } - return result; - } - public IEnumerable GetStoryFoldersByPlaceHolderID(string id) { IEnumerable result = null; try { @@ -249,7 +239,7 @@ namespace NativeOctopusClient { return null; JArray resultObject = JArray.Parse(response.Content); result = resultObject.Children().Select(d => { - StoryFolder r = ToStoryFolder(d); + StoryFolder r = StoryFolder.Create(d); //logger.Debug($"{r}"); return r; }); @@ -285,29 +275,6 @@ namespace NativeOctopusClient { return result; } - public IEnumerable GetStoryFolderStories(string id) { - IEnumerable result = null; - try { - var request = new RestRequest("storyFolderStories/{id}", Method.GET); - request.AddParameter(ID, id, ParameterType.UrlSegment); - var response = client.Execute(request); - if (!CheckResponse(response)) - return null; - JArray resultObject = JArray.Parse(response.Content); - result = resultObject.Children().Select(d => { - Story r = ToStoryFolderStory(d, id); - //logger.Debug($"{r}"); - return r; - }).OrderBy(r => { - return r.ID; - }); - } - catch (Exception e) { - OnError(e); - } - return result; - } - private bool CheckResponse(IRestResponse response) { if (String.IsNullOrEmpty(response.Content)) return false; @@ -324,111 +291,85 @@ namespace NativeOctopusClient { messageBus.Send(new NativeOctopusAPIMessage("Sikertelen OCTOPUS lekérdezés. Rendszerüzenet: " + e.Message)); } - private static IEnumerable GetMosObjectsFromStory(JToken d) { - return d["mosObjects"]?.Select(t => ToMosObject(t)); - } - private static IEnumerable GetPartialStoryFolderFromStory(JToken d) { + private IEnumerable GetPartialStoryFolderFromStory(JToken d) { return d["story_folder"]?.Select(t => ToPartialStoryFolder(t)); } - private static IEnumerable GetPartialRundownFromStory(JToken d) { + private IEnumerable GetPartialRundownFromStory(JToken d) { return d["rundown"]?.Select(t => ToPartialRundown(t)); } - private static IEnumerable GetStoryFolderFromStory(JToken d) { - return d["story_folder"]?.Select(t => ToStoryFolder(t)); - } - - private static IEnumerable GetRundownFromStory(JToken d) { - return d["rundown"]?.Select(t => ToRundown(t)); + private IEnumerable GetStoryFolderFromStory(JToken d) { + return d["story_folder"]?.Select(t => StoryFolder.Create(t)); } - private static StoryFolder ToStoryFolder(JToken d) { - return new StoryFolder() { - ID = d.Value(ID), - Name = d.Value("name") - }; + private IEnumerable GetRundownFromStory(JToken d) { + return d["rundown"]?.Select(t => Rundown.Create(t)); } - private static StoryFolder ToPartialStoryFolder(JToken d) { + private StoryFolder ToPartialStoryFolder(JToken d) { return new StoryFolder() { ID = d.Value(ID), StoryPosition = d.Value("position") }; } - private static Rundown ToPartialRundown(JToken d) { + private Rundown ToPartialRundown(JToken d) { return new Rundown() { ID = d.Value(ID), StoryPosition = d.Value("position") }; } - private static Story ToRundownStory(JToken d, string id) { - Story result = ToPartialStory(d); + private Story ToRundownStory(JToken d, string id) { + Story result = Story.Create(d); result.Position = result.Rundowns.Where(r => id.Equals(r.ID)).FirstOrDefault()?.StoryPosition; return result; } - private static Story ToStoryFolderStory(JToken d, string id) { - Story result = ToPartialStory(d); + private Story ToStoryFolderStory(JToken d, string id) { + Story result = Story.Create(d); result.Position = result.StoryFolders.Where(r => id.Equals(r.ID)).FirstOrDefault()?.StoryPosition; return result; } - private static Story ToPartialStory(JToken d) { - Story result = new Story { - ID = d[ID]?.ToString(), - ParentStoryID = d["parentStoryId"]?.ToString(), - Name = d["name"]?.ToString() ?? UNNAMED, - Format = d["format"]?.ToString(), - Script = d["script"]?.ToString(), - ScriptContent = d["script_content"]?.ToString(), - MosObjects = GetMosObjectsFromStory(d)?.ToArray(), - StoryFolders = GetPartialStoryFolderFromStory(d)?.ToArray(), - Rundowns = GetPartialRundownFromStory(d)?.ToArray() - }; + //private Story ToStory(JToken d) { + // Story result = new Story { + // ID = d[ID]?.ToString(), + // ParentStoryID = d["parentStoryId"]?.ToString(), + // Name = d["name"]?.ToString() ?? UNNAMED, + // Format = d["format"]?.ToString(), + // Script = d["script"]?.ToString(), + // ScriptContent = d["script_content"]?.ToString(), + // MosObjects = GetMosObjectsFromStory(d)?.ToArray(), + // StoryFolders = GetStoryFolderFromStory(d)?.ToArray(), + // Rundowns = GetRundownFromStory(d)?.ToArray() + // }; + // return result; + //} - return result; + + + } + + public static class JExtensions { + public static JObject ParseObject(String data) { + return data == null ? null : JObject.Parse(data); } - private static Story ToStory(JToken d) { - Story result = new Story { - ID = d[ID]?.ToString(), - ParentStoryID = d["parentStoryId"]?.ToString(), - Name = d["name"]?.ToString() ?? UNNAMED, - Format = d["format"]?.ToString(), - Script = d["script"]?.ToString(), - ScriptContent = d["script_content"]?.ToString(), - MosObjects = GetMosObjectsFromStory(d)?.ToArray(), - StoryFolders = GetStoryFolderFromStory(d)?.ToArray(), - Rundowns = GetRundownFromStory(d)?.ToArray() - }; - return result; + public static JObject ParseObject(JToken d, String name) { + string sData = d[name]?.ToString(); + return ParseObject(sData); } - private static Rundown ToRundown(JToken d) { - Rundown result = new Rundown { - ID = d[ID].ToString(), - Name = d["name"]?.ToString() ?? UNNAMED, - Start = DateTime.Parse(d["scheduledStart"]?.ToString()), - }; - if (result.Start == null) - result.FormattedStart = "?"; - else - result.FormattedStart = result.Start.ToString("HH:mm:ss", new CultureInfo("hu-HU")); - return result; + public static JArray ParseArray(String data) { + return data == null ? null : JArray.Parse(data); } - private static MosObject ToMosObject(JToken d) { - return new MosObject() { - GlobalID = d.Value("globalId"), - ID = d.Value(ID), - MosID = d.Value("mosId"), - ObjectType = d.Value("objectType"), - ObjID = d.Value("objId") - }; + public static JArray ParseArray(JToken d, String name) { + string sData = d[name]?.ToString(); + return ParseArray(sData); } } } diff --git a/client/NativeOctopusClient/NativeOctopusClient.csproj b/client/NativeOctopusClient/NativeOctopusClient.csproj index aa8e87c1..9b89ea4c 100644 --- a/client/NativeOctopusClient/NativeOctopusClient.csproj +++ b/client/NativeOctopusClient/NativeOctopusClient.csproj @@ -58,6 +58,7 @@ + UserControl @@ -72,6 +73,9 @@ True Resources.resx + + + diff --git a/client/NativeOctopusClient/NativeOctopusIDSelector.cs b/client/NativeOctopusClient/NativeOctopusIDSelector.cs index 5e75c2c0..1e5b688f 100644 --- a/client/NativeOctopusClient/NativeOctopusIDSelector.cs +++ b/client/NativeOctopusClient/NativeOctopusIDSelector.cs @@ -7,6 +7,7 @@ using System.Runtime.InteropServices; using MaestroShared.Configuration; using MaestroShared.Commons; using MaestroShared.MessageBus; +using NativeOctopusClient.Model; namespace NativeOctopusClient { public delegate void OnSelectedIDChanged(string id, string name, string text); @@ -103,7 +104,7 @@ namespace NativeOctopusClient { string name = story.Name == null ? NativeOctopusAPI.UNNAMED : story.Name; //String ID = isFolderView ? story.ID : story.ParentStoryID; string label = String.Empty; - string parentStoryID = story.ParentStoryID; + string parentStoryID = story.ParentStoryID; if (!String.IsNullOrEmpty(story.Format)) { label = string.Format($"{parentStoryID} [{story.Format}] {story.Name}"); } else @@ -351,7 +352,7 @@ namespace NativeOctopusClient { if (rundown == null || ZERO.Equals(rundown.ID)) return; //logger.Info("Selected rundown {0} {1}", rundown.ID, rundown.Name); - stories = client.GetRundownStories(rundown.ID)?.OrderBy(s => s.Rundowns[0].StoryPosition); + stories = client.GetRundownStories(rundown.ID); } else { StoryFolder storyFolder = cbFolders.SelectedValue as StoryFolder; if (storyFolder == null || ZERO.Equals(storyFolder.ID))