git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 15 Aug 2018 09:02:57 +0000 (09:02 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 15 Aug 2018 09:02:57 +0000 (09:02 +0000)
16 files changed:
client/AudioRecorder/AudioRecorder.csproj
client/AudioRecorder/Configuration/audiorecorder.json
client/AudioRecorder/MainForm.cs
client/AudioRecorder/MetadataSelectorForm.Designer.cs
client/AudioRecorder/MetadataSelectorForm.cs
client/AudioRecorder/Program.cs
client/AudioRecorder/Properties/AssemblyInfo.cs
client/AudioRecorder/nlog.config [new file with mode: 0644]
client/MetadataSelector/MetadataIDSelector.cs
client/NativeOctopusClient/Model/MosObject.cs [new file with mode: 0644]
client/NativeOctopusClient/Model/Rundown.cs [new file with mode: 0644]
client/NativeOctopusClient/Model/Story.cs [new file with mode: 0644]
client/NativeOctopusClient/Model/StoryFolder.cs [new file with mode: 0644]
client/NativeOctopusClient/NativeOctopusAPI.cs
client/NativeOctopusClient/NativeOctopusClient.csproj
client/NativeOctopusClient/NativeOctopusIDSelector.cs

index 2f615a27670627b2614e024e0ffcc390a87b4717..08654bc14082a616805db72fae6df907f6dffb34 100644 (file)
       <Generator>ResXFileCodeGenerator</Generator>\r
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
     </EmbeddedResource>\r
+    <None Include="nlog.config">\r
+      <SubType>Designer</SubType>\r
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+    </None>\r
     <None Include="packages.config">\r
       <SubType>Designer</SubType>\r
     </None>\r
       <Project>{8cb8266d-2229-47e2-b06d-54fde82cbdc4}</Project>\r
       <Name>MetadataSelector</Name>\r
     </ProjectReference>\r
+    <ProjectReference Include="..\NativeOctopusClient\NativeOctopusClient.csproj">\r
+      <Project>{C1A664BE-7852-4418-BF33-6F59434FC5DC}</Project>\r
+      <Name>NativeOctopusClient</Name>\r
+    </ProjectReference>\r
     <ProjectReference Include="..\OctopusClient\OctopusClient.csproj">\r
       <Project>{8cc7c930-9dbf-487b-aed5-776937a649d5}</Project>\r
       <Name>OctopusClient</Name>\r
index e7be0b57cb06e5ac19debd64097dd28c4f0e41a6..8355ad25a3132eacb56fbeaab7289b2fd8b276f5 100644 (file)
         "timeout": 1000\r
       }\r
     },\r
+    {\r
+      "$type": "NativeOctopusMetadata",\r
+      "server": {\r
+        "address": " http://10.10.1.11/api/v1/",\r
+        "userName": "mam",\r
+        "password": "fPLnV9N5gc7aC9ICvspjzJkGLnTWxAgEhwGOrXilAiD8+/IXviRlNJA0lrZ3ZX+7WG5EE3ZlaIitAhRGk+QIPGEOF3fEJCBJI2I9NN1e2JGi/my3WwXt0fu7dgbMxVid",\r
+        "timeout": 1000\r
+      }\r
+    },\r
     {\r
       "$type": "TrafficMetadata",\r
       "server": {\r
index 1ff6fbe02db55e261baad05b6d15d4ae580f13c0..7491923b90dbec707cbccdbfdaea931f310e0abe 100644 (file)
@@ -76,7 +76,7 @@ namespace AudioRecorder {
 \r
         private void OnMainShown(object sender, EventArgs e) {\r
             try {\r
-                Type[] knownTypes = { typeof(OctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) };\r
+                Type[] knownTypes = { typeof(OctopusMetadata), typeof(NativeOctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) };\r
                 parameters = ConfigurationSerializer.Load<AudioRecorderSettings>(CONFIG_FILE, knownTypes);\r
 \r
                 UpdateGUI();\r
index 58cf08b1ca54888f0f845aaa77f264bdc1ca5d9e..f6211982cf5da1fba0dd51bd6539a53cad3cb717 100644 (file)
@@ -41,6 +41,7 @@
             this.buttonCancel.TabIndex = 6;\r
             this.buttonCancel.Text = "Mégsem";\r
             this.buttonCancel.UseVisualStyleBackColor = true;\r
+            this.buttonCancel.Click += new System.EventHandler(this.OnCancelClick);\r
             // \r
             // buttonOK\r
             // \r
index 381c09588ea42f1eab20790a194a7b05024fe75c..935e7b0db8f6cafea99e7ca9e2dffd445c5d9f62 100644 (file)
@@ -24,6 +24,7 @@ namespace AudioRecorder {
             InitializeComponent();\r
             metadataIDSelector.Providers = settings.Metadatas;\r
             metadataIDSelector.OctopusIDSelector.IDChangedEvent += OctopusIDChangedEvent;\r
+            metadataIDSelector.NativeOctopusIDSelector.IDChangedEvent += NativeOctopusIDChangedEvent;\r
             metadataIDSelector.TrafficIDSelector.IDChangedEvent += TrafficIDChangedEvent;\r
             metadataIDSelector.MetadataIDText.TextChanged += OnMetadataIDChanged;\r
         }\r
@@ -46,6 +47,16 @@ namespace AudioRecorder {
                 };\r
         }\r
 \r
+        private void NativeOctopusIDChangedEvent(string id, string name, string text) {\r
+            if (name == null)\r
+                SelectedMetadata = null;\r
+            else\r
+                SelectedMetadata = new Metadata() {\r
+                    ID = name,\r
+                    Text = text\r
+                };\r
+        }\r
+\r
         private void TrafficIDChangedEvent(string id, int variantID, string text) {\r
             if (id == null)\r
                 SelectedMetadata = null;\r
index f9cdad2db7a01e7fc2fa68a40c1bafd3f0186615..68420a5b38c88d5adeb32d790928af8a96f0ad46 100644 (file)
@@ -13,7 +13,7 @@ namespace AudioRecorder {
             Application.EnableVisualStyles();\r
             Application.SetCompatibleTextRenderingDefault(false);\r
             //Application.Run(new MainForm());\r
-            Type[] knownTypes = { typeof(OctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) };\r
+            Type[] knownTypes = { typeof(OctopusMetadata), typeof(NativeOctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata) };\r
             var parameters = ConfigurationSerializer.Load<AudioRecorderSettings>("./Configuration/audiorecorder.json", knownTypes);\r
             Application.Run(new MetadataSelectorForm(parameters));\r
         }\r
index 5516b1be6b340a36832fecdc7426380aba14d321..869c8e85f1df1db2f2e4f99f205919bdedc743c1 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.6.9")]\r
-[assembly: AssemblyFileVersion("2.0.6.9")]\r
+[assembly: AssemblyVersion("2.0.7.0")]\r
+[assembly: AssemblyFileVersion("2.0.7.0")]\r
diff --git a/client/AudioRecorder/nlog.config b/client/AudioRecorder/nlog.config
new file mode 100644 (file)
index 0000000..70d5e79
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>\r
+<!--Bedolgozók naplózásának beállítása-->\r
+<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">\r
+  <!--Kimenetek-->\r
+  <targets>\r
+    <target name="t1" xsi:type="Debugger" layout="${date:format=HH\:mm\:ss} ${level:uppercase=true} ${callsite:includeNamespace=false:includeSourcePath=false} | ${message} ${callsite:fileName=true:className=false:includeSourcePath=false:methodName=false:includeNamespace=false}" />\r
+    <target name="t2" xsi:type="Debugger" layout="ERROR stack: ${stacktrace:format=Raw}" />\r
+    <target name="file" xsi:type="File" \r
+            layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level:uppercase=true} ${logger:shortName=true} | ${message}" \r
+            fileName="${basedir}/logs/${machinename}-maestro.log" keepFileOpen="false" encoding="utf-8" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="7" />\r
+    <target name="errorfile" xsi:type="File" \r
+            layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level:uppercase=true} ${logger:shortName=true} | ${message} ${stacktrace:format=Raw}" \r
+            fileName="${basedir}/logs/maestro-err.log" keepFileOpen="false" encoding="utf-8" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="7" />\r
+  </targets>\r
+  <!--Naplózási szint-->\r
+  <rules>\r
+    <logger name="*" minlevel="Trace" writeTo="t1" />\r
+    <logger name="*" minlevel="Error" writeTo="t2" />\r
+    <logger name="*" minlevel="Trace" writeTo="file" />\r
+    <logger name="*" minlevel="Error" writeTo="errorfile" />\r
+  </rules>\r
+</nlog>\r
index f9716f5bcb870ff108047a758d8856cd4743ba54..0f6e5a7fa2e61a8c0c379e946646baa41eb204b2 100644 (file)
@@ -1,7 +1,7 @@
-using LinkDotNet.MessageHandling;\r
-using LinkDotNet.MessageHandling.Contracts;\r
+using LinkDotNet.MessageHandling.Contracts;\r
 using MaestroShared.Commons;\r
 using MaestroShared.Configuration;\r
+using MaestroShared.MessageBus;\r
 using MaestroShared.Metadata;\r
 using MediaCubeClient;\r
 using NativeOctopusClient;\r
@@ -24,6 +24,7 @@ namespace MaestroShared.Controls {
 \r
         public TextBox MetadataIDText { get => textSelectedMetadata; }\r
         public OctopusIDSelector OctopusIDSelector { get => octopusIDSelector; }\r
+        public NativeOctopusIDSelector NativeOctopusIDSelector { get => nativeOctopusIDSelector; }\r
         public TrafficIDSelector TrafficIDSelector { get => trafficIDSelector; }\r
         public MetadataProvider[] Providers { get => providers;\r
             set {\r
@@ -47,18 +48,8 @@ namespace MaestroShared.Controls {
         }\r
 \r
         private void OnMessage(IMessage message) {\r
-            NativeOctopusAPIMessage nm = message as NativeOctopusAPIMessage;\r
-            if (nm != null)\r
+            if (message is MaestroMessage nm)\r
                 MsgBox.Error(nm.Content);\r
-            OctopusAPIMessage om = message as OctopusAPIMessage;\r
-            if (om != null)\r
-                MsgBox.Error(om.Content);\r
-            TrafficAPIMessage tm = message as TrafficAPIMessage;\r
-            if (tm != null)\r
-                MsgBox.Error(tm.Content);\r
-            MediaCubeMessage mm = message as MediaCubeMessage;\r
-            if (mm != null)\r
-                MsgBox.Error(mm.Content);\r
         }\r
 \r
         private void InitializeTrafficSelector() {\r
diff --git a/client/NativeOctopusClient/Model/MosObject.cs b/client/NativeOctopusClient/Model/MosObject.cs
new file mode 100644 (file)
index 0000000..3b9b98f
--- /dev/null
@@ -0,0 +1,24 @@
+using Newtonsoft.Json.Linq;\r
+\r
+namespace NativeOctopusClient.Model {\r
+    public class MosObject {\r
+        public string MosID { get; set; }\r
+        public string ObjID { get; set; }\r
+        public string ObjectType { get; set; }\r
+        public string ID { get; set; }\r
+        public string GlobalID { get; set; }\r
+\r
+        public static MosObject Create(JToken d) {\r
+            string sMosID = d["mosId"]?.ToString();\r
+            if ("NEXIO.MOS" != sMosID)\r
+                return null;\r
+            return new MosObject() {\r
+                //ID = d["id"]?.ToString(),\r
+                //GlobalID = d["globalId"]?.ToString(),\r
+                //MosID = sMosID,\r
+                //ObjectType = d["objectType"]?.ToString(),\r
+                ObjID = d["id"]?.ToString()\r
+            };\r
+        }\r
+    }\r
+}\r
diff --git a/client/NativeOctopusClient/Model/Rundown.cs b/client/NativeOctopusClient/Model/Rundown.cs
new file mode 100644 (file)
index 0000000..c1954db
--- /dev/null
@@ -0,0 +1,32 @@
+using Newtonsoft.Json.Linq;\r
+using System;\r
+using System.Globalization;\r
+\r
+namespace NativeOctopusClient.Model {\r
+    public class Rundown {\r
+        public string ID { get; set; }\r
+        public string Name { get; set; }\r
+        public DateTime Start { get; set; }\r
+        public string FormattedStart { get; set; }\r
+        public int? StoryPosition { get; set; }\r
+\r
+        public override String ToString() {\r
+            string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\r
+            return "0".Equals(ID) ? displayName : String.Format($"{FormattedStart} {displayName}");\r
+        }\r
+\r
+        public static Rundown Create(JToken d) {\r
+            String scheduledStart = d["scheduledStart"]?.ToString();\r
+            Rundown result = new Rundown {\r
+                ID = d["id"]?.ToString(),\r
+                Name = d["name"]?.ToString() ?? "unnamed",\r
+                Start = DateTime.Parse(scheduledStart.Length > 0 ? scheduledStart : DateTime.MinValue.ToString()),\r
+            };\r
+            if (result.Start == null)\r
+                result.FormattedStart = "?";\r
+            else\r
+                result.FormattedStart = result.Start.ToString("HH:mm:ss", new CultureInfo("hu-HU"));\r
+            return result;\r
+        }\r
+    }\r
+}\r
diff --git a/client/NativeOctopusClient/Model/Story.cs b/client/NativeOctopusClient/Model/Story.cs
new file mode 100644 (file)
index 0000000..d45d04a
--- /dev/null
@@ -0,0 +1,67 @@
+using Newtonsoft.Json.Linq;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+\r
+namespace NativeOctopusClient.Model {\r
+    public class Story {\r
+        public string ID { get; set; }\r
+        public string ParentStoryID { get; set; }\r
+        public string Name { get; set; }\r
+        public string Script { get; set; }\r
+        public string ScriptContent { get; set; }\r
+        public string Format { get; set; }\r
+        public int? Position { get; set; }\r
+        public MosObject[] MosObjects { get; set; }\r
+        public StoryFolder[] StoryFolders { get; set; }\r
+        public Rundown[] Rundowns { get; set; }\r
+\r
+        public override String ToString() {\r
+            string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\r
+            return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} ");\r
+        }\r
+\r
+        private static List<MosObject> GetMosObjects(JToken story) {\r
+            List<MosObject> result = null;\r
+            var mosObjects = JExtensions.ParseArray(story, "mosObjects");\r
+            if (mosObjects == null)\r
+                return null;\r
+\r
+            mosObjects.ToList().ForEach(t => {\r
+                    var mosObject = MosObject.Create(t);\r
+                    if (mosObject != null) {\r
+                        if (result == null)\r
+                            result = new List<MosObject>();\r
+                        result.Add(mosObject);\r
+                    }\r
+            });\r
+            return result;\r
+        }\r
+\r
+        private static string GetParentStoryID(JToken story) {\r
+            var customColumns = JExtensions.ParseArray(story, "customColumns");\r
+            if (customColumns == null)\r
+                return null;\r
+            return customColumns.ToList().Where(c => "ParentStoryID" == c["label"]?.ToString()).Select(c => c["value"]).FirstOrDefault().ToString();\r
+        }\r
+\r
+        public static Story Create(JToken slug) {\r
+            Story result = null;\r
+            var story = JExtensions.ParseObject(slug, "story");\r
+            if (story != null) {\r
+                result = new Story {\r
+                    ID = story["id"]?.ToString(),\r
+                    Name = story["name"]?.ToString() ?? "unnamed",\r
+                    Format = story["format"]?.ToString(),\r
+                    Position = slug["position"]?.Value<int?>(),\r
+                    ParentStoryID = GetParentStoryID(story),\r
+                    MosObjects = GetMosObjects(story)?.ToArray()\r
+                };\r
+                result.ParentStoryID = result.ParentStoryID ?? result.ID;\r
+            }\r
+            return result;\r
+        }\r
+\r
+\r
+    }\r
+}\r
diff --git a/client/NativeOctopusClient/Model/StoryFolder.cs b/client/NativeOctopusClient/Model/StoryFolder.cs
new file mode 100644 (file)
index 0000000..83848f3
--- /dev/null
@@ -0,0 +1,23 @@
+using Newtonsoft.Json.Linq;\r
+using System;\r
+\r
+namespace NativeOctopusClient.Model {\r
+    public class StoryFolder {\r
+        public string ID { get; set; }\r
+        public string Name { get; set; }\r
+        public int? StoryPosition { get; set; }\r
+        public override String ToString() {\r
+            string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\r
+            return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} ");\r
+        }\r
+\r
+        public static StoryFolder Create(JToken d) {\r
+            return new StoryFolder() {\r
+                ID = d["id"]?.ToString(),\r
+                Name = d["name"]?.ToString()\r
+            };\r
+        }\r
+\r
+\r
+    }\r
+}\r
index 1bf20a358e501344f9fbb41b56eebffc8f443eed..2c57c48025099f2b170d8d8ef93675d170ad7379 100644 (file)
@@ -1,4 +1,5 @@
 using LinkDotNet.MessageHandling.Contracts;\r
+using NativeOctopusClient.Model;\r
 using Newtonsoft.Json.Linq;\r
 using NLog;\r
 using RestSharp;\r
@@ -10,54 +11,6 @@ using System.Linq;
 \r
 namespace NativeOctopusClient {\r
 \r
-    public class Rundown {\r
-        public string ID { get; set; }\r
-        public string Name { get; set; }\r
-        public DateTime Start { get; set; }\r
-        public string FormattedStart { get; set; }\r
-        public int? StoryPosition { get; set; }\r
-        public override String ToString() {\r
-            string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\r
-            return "0".Equals(ID) ? displayName : String.Format($"{FormattedStart} {displayName} ");\r
-        }\r
-    }\r
-\r
-    public class Story {\r
-        public string ID { get; set; }\r
-        public string ParentStoryID { get; set; }\r
-        public string Name { get; set; }\r
-        public string Script { get; set; }\r
-        public string ScriptContent { get; set; }\r
-        public string Format { get; set; }\r
-        public int? Position { get; set; }\r
-        public MosObject[] MosObjects { get; set; }\r
-        public StoryFolder[] StoryFolders { get; set; }\r
-        public Rundown[] Rundowns { get; set; }\r
-\r
-        public override String ToString() {\r
-            string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\r
-            return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} ");\r
-        }\r
-    }\r
-\r
-    public class MosObject {\r
-        public string MosID { get; set; }\r
-        public string ObjID { get; set; }\r
-        public string ObjectType { get; set; }\r
-        public string ID { get; set; }\r
-        public string GlobalID { get; set; }\r
-    }\r
-\r
-    public class StoryFolder {\r
-        public string ID { get; set; }\r
-        public string Name { get; set; }\r
-        public int? StoryPosition { get; set; }\r
-        public override String ToString() {\r
-            string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\r
-            return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} ");\r
-        }\r
-    }\r
-\r
     public class NativeOctopusAPI {\r
         private static Logger logger = LogManager.GetCurrentClassLogger();\r
         public const string UNNAMED = "<üres>";\r
@@ -66,6 +19,7 @@ namespace NativeOctopusClient {
         private string user;\r
         private string pwd;\r
         private IMessageBus messageBus;\r
+        private IEnumerable<Rundown> rundowns;\r
 \r
         public NativeOctopusAPI(string address, string user, string pwd, int timeout, IMessageBus messageBus) {\r
             this.user = user;\r
@@ -77,17 +31,22 @@ namespace NativeOctopusClient {
             this.messageBus = messageBus;\r
         }\r
 \r
-        public IEnumerable<Rundown> GetRundowns(DateTime scheduledDate) {\r
-            IEnumerable<Rundown> result = null;\r
+        public List<Rundown> GetRundowns(DateTime scheduledDate) {\r
+            List<Rundown> result = null;\r
             try {\r
-                var request = new RestRequest("rundowns/{scheduledDate}", Method.GET);\r
-                var dt = scheduledDate.ToString("s", CultureInfo.CurrentCulture);\r
-                request.AddParameter("scheduledDate", dt, ParameterType.UrlSegment);\r
+                var request = new RestRequest("Rundown", Method.GET);\r
+                request.AddParameter("fields", "id,name,scheduledStart", ParameterType.QueryString);\r
+                request.AddParameter("Octopus-Device-Name", user, ParameterType.HttpHeader);\r
+                request.AddParameter("Octopus-Device-Id", pwd, ParameterType.HttpHeader);\r
                 var response = client.Execute<JsonArray>(request);\r
                 if (!CheckResponse(response))\r
                     return null;\r
-                JArray resultObject = JArray.Parse(response.Content);\r
-                result = resultObject.Children().Select(d => ToRundown(d));\r
+                var resultList = JExtensions.ParseArray(JExtensions.ParseObject(response.Content), "result");\r
+                if (resultList == null)\r
+                    return null;\r
+                rundowns = resultList.Children().Select(d => Rundown.Create(d)).ToList();\r
+                DateTime end = scheduledDate + new TimeSpan(1, 0, 0, 0);\r
+                result = rundowns.Where(r => r.Start >= scheduledDate && r.Start < end).OrderBy(r => r.Start).ToList();\r
             }\r
             catch (Exception e) {\r
                 OnError(e);\r
@@ -95,33 +54,90 @@ namespace NativeOctopusClient {
             return result;\r
         }\r
 \r
-        public IEnumerable<Rundown> GetRundownsByParentStoryID(String id) {\r
-            IEnumerable<Rundown> result = null;\r
+        public List<Story> GetRundownStories(string id) {\r
+            List<Story> result = null;\r
             try {\r
-                var request = new RestRequest("rundownsByParentStoryID/{id}", Method.GET);\r
+                var request = new RestRequest("Rundown/{id}", Method.GET);\r
                 request.AddParameter(ID, id, ParameterType.UrlSegment);\r
+                request.AddParameter("fields", "slugs,Slug.story,Slug.position,Story.id,Story.name,Story.format,Story.mosObjects,Story.customColumns,CustomColumn.label,CustomColumn.value", ParameterType.QueryString);\r
+                request.AddParameter("Octopus-Device-Name", user, ParameterType.HttpHeader);\r
+                request.AddParameter("Octopus-Device-Id", pwd, ParameterType.HttpHeader);\r
                 var response = client.Execute<JsonArray>(request);\r
                 if (!CheckResponse(response))\r
                     return null;\r
-                JArray resultObject = JArray.Parse(response.Content);\r
-                result = resultObject.Children().Select(d => ToRundown(d));\r
+                var resultObject = JExtensions.ParseObject(JExtensions.ParseObject(response.Content), "result");\r
+                var resultList = JExtensions.ParseArray(resultObject, "slugs");\r
+                if (resultList == null)\r
+                    return null;\r
+\r
+                resultList.Children().ToList().ForEach(d => {\r
+                    Story s = Story.Create(d);\r
+                    if (s != null) {\r
+                        if (result == null)\r
+                            result = new List<Story>();\r
+                        result.Add(s);\r
+                    }\r
+                });\r
+                if (result != null)\r
+                    result = result.OrderBy(s=>s.Position).ToList();\r
+            } catch (Exception e) {\r
+                OnError(e);\r
             }\r
-            catch (Exception e) {\r
+            return result;\r
+        }\r
+\r
+        public List<StoryFolder> getStoryFolders() {\r
+            List<StoryFolder> result = null;\r
+            try {\r
+                var request = new RestRequest("StoryFolder", Method.GET);\r
+                request.AddParameter("fields", "id,name", ParameterType.QueryString);\r
+                request.AddParameter("Octopus-Device-Name", user, ParameterType.HttpHeader);\r
+                request.AddParameter("Octopus-Device-Id", pwd, ParameterType.HttpHeader);\r
+                var response = client.Execute<JsonArray>(request);\r
+                if (!CheckResponse(response))\r
+                    return null;\r
+                var resultList = JExtensions.ParseArray(JExtensions.ParseObject(response.Content), "result");\r
+                if (resultList == null)\r
+                    return null;\r
+                result = resultList.ToList().Select(sf => StoryFolder.Create(sf)).OrderBy(sf => sf.Name).ToList();\r
+            } catch (Exception e) {\r
                 OnError(e);\r
             }\r
             return result;\r
         }\r
 \r
-        public IEnumerable<Rundown> GetRundownsByPlaceHolderId(string id) {\r
+        public List<Story> GetStoryFolderStories(string id) {\r
+            List<Story> result = null;\r
+            try {\r
+                var request = new RestRequest("storyFolderStories/{id}", Method.GET);\r
+                request.AddParameter(ID, id, ParameterType.UrlSegment);\r
+                var response = client.Execute<JsonArray>(request);\r
+                if (!CheckResponse(response))\r
+                    return null;\r
+                JArray resultObject = JArray.Parse(response.Content);\r
+                result = resultObject.Children().Select(d => {\r
+                    Story r = ToStoryFolderStory(d, id);\r
+                    //logger.Debug($"{r}");\r
+                    return r;\r
+                }).OrderBy(r => {\r
+                    return r.ID;\r
+                }).ToList();\r
+            } catch (Exception e) {\r
+                OnError(e);\r
+            }\r
+            return result;\r
+        }\r
+\r
+        public IEnumerable<Rundown> GetRundownsByParentStoryID(String id) {\r
             IEnumerable<Rundown> result = null;\r
             try {\r
-                var request = new RestRequest("rundownsByPlaceHolderID/{id}", Method.GET);\r
+                var request = new RestRequest("rundownsByParentStoryID/{id}", Method.GET);\r
                 request.AddParameter(ID, id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
                 if (!CheckResponse(response))\r
                     return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-                result = resultObject.Children().Select(d => ToRundown(d));\r
+                //result = resultObject.Children().Select(d => ToRundown(d));\r
             }\r
             catch (Exception e) {\r
                 OnError(e);\r
@@ -129,22 +145,16 @@ namespace NativeOctopusClient {
             return result;\r
         }\r
 \r
-        public IEnumerable<Story> GetRundownStories(string id) {\r
-            IEnumerable<Story> result = null;\r
+        public IEnumerable<Rundown> GetRundownsByPlaceHolderId(string id) {\r
+            IEnumerable<Rundown> result = null;\r
             try {\r
-                var request = new RestRequest("rundownStories/{id}", Method.GET);\r
+                var request = new RestRequest("rundownsByPlaceHolderID/{id}", Method.GET);\r
                 request.AddParameter(ID, id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
                 if (!CheckResponse(response))\r
                     return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-                result = resultObject.Children().Select(d => {\r
-                    Story r = ToRundownStory(d, id);\r
-                    //logger.Debug($"{r}");\r
-                    return r;\r
-                }).OrderBy(r => {\r
-                    return r.ID;\r
-                });\r
+                //result = resultObject.Children().Select(d => ToRundown(d));\r
             }\r
             catch (Exception e) {\r
                 OnError(e);\r
@@ -185,7 +195,7 @@ namespace NativeOctopusClient {
                     return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
                 result = resultObject.Children().Select(d => {\r
-                    Story r = ToStory(d);\r
+                    Story r = Story.Create(d);\r
                     //logger.Debug($"{r}");\r
                     return r;\r
                 });\r
@@ -206,7 +216,7 @@ namespace NativeOctopusClient {
                     return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
                 result = resultObject.Children().Select(d => {\r
-                    Story r = ToStory(d);\r
+                    Story r = Story.Create(d);\r
                     //logger.Debug($"{r}");\r
                     return r;\r
                 }).OrderBy(r => {\r
@@ -219,26 +229,6 @@ namespace NativeOctopusClient {
             return result;\r
         }\r
 \r
-        public IEnumerable<StoryFolder> getStoryFolders() {\r
-            IEnumerable<StoryFolder> result = null;\r
-            try {\r
-                var request = new RestRequest("storyFolders", Method.GET);\r
-                var response = client.Execute<JsonArray>(request);\r
-                if (!CheckResponse(response))\r
-                    return null;\r
-                JArray resultObject = JArray.Parse(response.Content);\r
-                result = resultObject.Children().Select(d => {\r
-                    StoryFolder r = ToStoryFolder(d);\r
-                    //logger.Debug($"{r}");\r
-                    return r;\r
-                });\r
-            }\r
-            catch (Exception e) {\r
-                OnError(e);\r
-            }\r
-            return result;\r
-        }\r
-\r
         public IEnumerable<StoryFolder> GetStoryFoldersByPlaceHolderID(string id) {\r
             IEnumerable<StoryFolder> result = null;\r
             try {\r
@@ -249,7 +239,7 @@ namespace NativeOctopusClient {
                     return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
                 result = resultObject.Children().Select(d => {\r
-                    StoryFolder r = ToStoryFolder(d);\r
+                    StoryFolder r = StoryFolder.Create(d);\r
                     //logger.Debug($"{r}");\r
                     return r;\r
                 });\r
@@ -285,29 +275,6 @@ namespace NativeOctopusClient {
             return result;\r
         }\r
 \r
-        public IEnumerable<Story> GetStoryFolderStories(string id) {\r
-            IEnumerable<Story> result = null;\r
-            try {\r
-                var request = new RestRequest("storyFolderStories/{id}", Method.GET);\r
-                request.AddParameter(ID, id, ParameterType.UrlSegment);\r
-                var response = client.Execute<JsonArray>(request);\r
-                if (!CheckResponse(response))\r
-                    return null;\r
-                JArray resultObject = JArray.Parse(response.Content);\r
-                result = resultObject.Children().Select(d => {\r
-                    Story r = ToStoryFolderStory(d, id);\r
-                    //logger.Debug($"{r}");\r
-                    return r;\r
-                }).OrderBy(r => {\r
-                    return r.ID;\r
-                });\r
-            }\r
-            catch (Exception e) {\r
-                OnError(e);\r
-            }\r
-            return result;\r
-        }\r
-\r
         private bool CheckResponse(IRestResponse<JsonArray> response) {\r
             if (String.IsNullOrEmpty(response.Content))\r
                 return false;\r
@@ -324,111 +291,85 @@ namespace NativeOctopusClient {
                 messageBus.Send(new NativeOctopusAPIMessage("Sikertelen OCTOPUS lekérdezés. Rendszerüzenet: " + e.Message));\r
         }\r
 \r
-        private static IEnumerable<MosObject> GetMosObjectsFromStory(JToken d) {\r
-            return d["mosObjects"]?.Select(t => ToMosObject(t));\r
-        }\r
 \r
-        private static IEnumerable<StoryFolder> GetPartialStoryFolderFromStory(JToken d) {\r
+        private IEnumerable<StoryFolder> GetPartialStoryFolderFromStory(JToken d) {\r
             return d["story_folder"]?.Select(t => ToPartialStoryFolder(t));\r
         }\r
 \r
-        private static IEnumerable<Rundown> GetPartialRundownFromStory(JToken d) {\r
+        private IEnumerable<Rundown> GetPartialRundownFromStory(JToken d) {\r
             return d["rundown"]?.Select(t => ToPartialRundown(t));\r
         }\r
 \r
-        private static IEnumerable<StoryFolder> GetStoryFolderFromStory(JToken d) {\r
-            return d["story_folder"]?.Select(t => ToStoryFolder(t));\r
-        }\r
-\r
-        private static IEnumerable<Rundown> GetRundownFromStory(JToken d) {\r
-            return d["rundown"]?.Select(t => ToRundown(t));\r
+        private IEnumerable<StoryFolder> GetStoryFolderFromStory(JToken d) {\r
+            return d["story_folder"]?.Select(t => StoryFolder.Create(t));\r
         }\r
 \r
-        private static StoryFolder ToStoryFolder(JToken d) {\r
-            return new StoryFolder() {\r
-                ID = d.Value<string>(ID),\r
-                Name = d.Value<string>("name")\r
-            };\r
+        private IEnumerable<Rundown> GetRundownFromStory(JToken d) {\r
+            return d["rundown"]?.Select(t => Rundown.Create(t));\r
         }\r
 \r
-        private static StoryFolder ToPartialStoryFolder(JToken d) {\r
+        private StoryFolder ToPartialStoryFolder(JToken d) {\r
             return new StoryFolder() {\r
                 ID = d.Value<string>(ID),\r
                 StoryPosition = d.Value<int>("position")\r
             };\r
         }\r
 \r
-        private static Rundown ToPartialRundown(JToken d) {\r
+        private Rundown ToPartialRundown(JToken d) {\r
             return new Rundown() {\r
                 ID = d.Value<string>(ID),\r
                 StoryPosition = d.Value<int>("position")\r
             };\r
         }\r
 \r
-        private static Story ToRundownStory(JToken d, string id) {\r
-            Story result = ToPartialStory(d);\r
+        private Story ToRundownStory(JToken d, string id) {\r
+            Story result = Story.Create(d);\r
             result.Position = result.Rundowns.Where(r => id.Equals(r.ID)).FirstOrDefault()?.StoryPosition;\r
             return result;\r
         }\r
 \r
-        private static Story ToStoryFolderStory(JToken d, string id) {\r
-            Story result = ToPartialStory(d);\r
+        private Story ToStoryFolderStory(JToken d, string id) {\r
+            Story result = Story.Create(d);\r
             result.Position = result.StoryFolders.Where(r => id.Equals(r.ID)).FirstOrDefault()?.StoryPosition;\r
             return result;\r
         }\r
 \r
-        private static Story ToPartialStory(JToken d) {\r
-            Story result = new Story {\r
-                ID = d[ID]?.ToString(),\r
-                ParentStoryID = d["parentStoryId"]?.ToString(),\r
-                Name = d["name"]?.ToString() ?? UNNAMED,\r
-                Format = d["format"]?.ToString(),\r
-                Script = d["script"]?.ToString(),\r
-                ScriptContent = d["script_content"]?.ToString(),\r
-                MosObjects = GetMosObjectsFromStory(d)?.ToArray(),\r
-                StoryFolders = GetPartialStoryFolderFromStory(d)?.ToArray(),\r
-                Rundowns = GetPartialRundownFromStory(d)?.ToArray()\r
-            };\r
+        //private Story ToStory(JToken d) {\r
+        //    Story result = new Story {\r
+        //        ID = d[ID]?.ToString(),\r
+        //        ParentStoryID = d["parentStoryId"]?.ToString(),\r
+        //        Name = d["name"]?.ToString() ?? UNNAMED,\r
+        //        Format = d["format"]?.ToString(),\r
+        //        Script = d["script"]?.ToString(),\r
+        //        ScriptContent = d["script_content"]?.ToString(),\r
+        //        MosObjects = GetMosObjectsFromStory(d)?.ToArray(),\r
+        //        StoryFolders = GetStoryFolderFromStory(d)?.ToArray(),\r
+        //        Rundowns = GetRundownFromStory(d)?.ToArray()\r
+        //    };\r
+        //    return result;\r
+        //}\r
 \r
-            return result;\r
+\r
+\r
+    }\r
+\r
+    public static class JExtensions {\r
+        public static JObject ParseObject(String data) {\r
+            return data == null ? null : JObject.Parse(data);\r
         }\r
 \r
-        private static Story ToStory(JToken d) {\r
-            Story result = new Story {\r
-                ID = d[ID]?.ToString(),\r
-                ParentStoryID = d["parentStoryId"]?.ToString(),\r
-                Name = d["name"]?.ToString() ?? UNNAMED,\r
-                Format = d["format"]?.ToString(),\r
-                Script = d["script"]?.ToString(),\r
-                ScriptContent = d["script_content"]?.ToString(),\r
-                MosObjects = GetMosObjectsFromStory(d)?.ToArray(),\r
-                StoryFolders = GetStoryFolderFromStory(d)?.ToArray(),\r
-                Rundowns = GetRundownFromStory(d)?.ToArray()\r
-            };\r
-            return result;\r
+        public static JObject ParseObject(JToken d, String name) {\r
+            string sData = d[name]?.ToString();\r
+            return ParseObject(sData);\r
         }\r
 \r
-        private static Rundown ToRundown(JToken d) {\r
-            Rundown result = new Rundown {\r
-                ID = d[ID].ToString(),\r
-                Name = d["name"]?.ToString() ?? UNNAMED,\r
-                Start = DateTime.Parse(d["scheduledStart"]?.ToString()),\r
-            };\r
-            if (result.Start == null)\r
-                result.FormattedStart = "?";\r
-            else\r
-                result.FormattedStart = result.Start.ToString("HH:mm:ss", new CultureInfo("hu-HU"));\r
-            return result;\r
+        public static JArray ParseArray(String data) {\r
+            return data == null ? null : JArray.Parse(data);\r
         }\r
 \r
-        private static MosObject ToMosObject(JToken d) {\r
-            return new MosObject() {\r
-                GlobalID = d.Value<string>("globalId"),\r
-                ID = d.Value<string>(ID),\r
-                MosID = d.Value<string>("mosId"),\r
-                ObjectType = d.Value<string>("objectType"),\r
-                ObjID = d.Value<string>("objId")\r
-            };\r
+        public static JArray ParseArray(JToken d, String name) {\r
+            string sData = d[name]?.ToString();\r
+            return ParseArray(sData);\r
         }\r
     }\r
 }\r
index aa8e87c1f5559cdc40b92b516cf2a7850e917f70..9b89ea4c8461c2b93135c5f1dfe883ebce95cef3 100644 (file)
@@ -58,6 +58,7 @@
     <Reference Include="System.Xml" />\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <Compile Include="Model\MosObject.cs" />\r
     <Compile Include="NativeOctopusAPI.cs" />\r
     <Compile Include="NativeOctopusIDSelector.cs">\r
       <SubType>UserControl</SubType>\r
@@ -72,6 +73,9 @@
       <DesignTime>True</DesignTime>\r
       <DependentUpon>Resources.resx</DependentUpon>\r
     </Compile>\r
+    <Compile Include="Model\Rundown.cs" />\r
+    <Compile Include="Model\Story.cs" />\r
+    <Compile Include="Model\StoryFolder.cs" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <EmbeddedResource Include="NativeOctopusIDSelector.resx">\r
index 5e75c2c07ab096456bd5817c6c42d1074a372c57..1e5b688f32d07feb1b4ce50ea2a6bdd468255e64 100644 (file)
@@ -7,6 +7,7 @@ using System.Runtime.InteropServices;
 using MaestroShared.Configuration;\r
 using MaestroShared.Commons;\r
 using MaestroShared.MessageBus;\r
+using NativeOctopusClient.Model;\r
 \r
 namespace NativeOctopusClient {\r
     public delegate void OnSelectedIDChanged(string id, string name, string text);\r
@@ -103,7 +104,7 @@ namespace NativeOctopusClient {
                 string name = story.Name == null ? NativeOctopusAPI.UNNAMED : story.Name;\r
                 //String ID = isFolderView ? story.ID : story.ParentStoryID;\r
                 string label = String.Empty;\r
-                    string parentStoryID = story.ParentStoryID;\r
+                string parentStoryID = story.ParentStoryID;\r
                 if (!String.IsNullOrEmpty(story.Format)) {\r
                     label = string.Format($"{parentStoryID} [{story.Format}] {story.Name}");\r
                 } else\r
@@ -351,7 +352,7 @@ namespace NativeOctopusClient {
                 if (rundown == null || ZERO.Equals(rundown.ID))\r
                     return;\r
                 //logger.Info("Selected rundown {0} {1}", rundown.ID, rundown.Name);\r
-                stories = client.GetRundownStories(rundown.ID)?.OrderBy(s => s.Rundowns[0].StoryPosition);\r
+                stories = client.GetRundownStories(rundown.ID);\r
             } else {\r
                 StoryFolder storyFolder = cbFolders.SelectedValue as StoryFolder;\r
                 if (storyFolder == null || ZERO.Equals(storyFolder.ID))\r