<Generator>ResXFileCodeGenerator</Generator>\r
<LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
</EmbeddedResource>\r
+ <None Include="Configuration\audiorecorder.json1">\r
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
+ </None>\r
<None Include="nlog.config">\r
<SubType>Designer</SubType>\r
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
}\r
},\r
"metadatas": [\r
- {\r
- "$type": "OctopusMetadata",\r
- "disableStoryCheck": true,\r
- "server": {\r
- "address": "http://10.10.1.27/services/rest/octopus/",\r
- "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
+ "timeout": 3000\r
}\r
},\r
{\r
--- /dev/null
+{\r
+ "deviceName": "",\r
+ "workingDirectory": "file://C:\\temp",\r
+ "peekMeterStep": 200,\r
+ "octopusTarget": {\r
+ "label": "Octopus mappába küldés",\r
+ "processor": "FTPTargetProcessor",\r
+ "tag": "Betöltés",\r
+ "outputFormat": "%ID%",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%",\r
+ "killDateDays": 7,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/OCTOPUS",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ "trafficTarget": {\r
+ "label": "Traffic mappába küldés",\r
+ "processor": "FTPTargetProcessor",\r
+ "tag": "Betöltés",\r
+ "outputFormat": "%ID%",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%",\r
+ "killDateDays": 7,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ "metadatas": [\r
+ {\r
+ "$type": "OctopusMetadata",\r
+ "disableStoryCheck": true,\r
+ "server": {\r
+ "address": "http://10.10.1.27/services/rest/octopus/",\r
+ "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": 3000\r
+ }\r
+ },\r
+ {\r
+ "$type": "TrafficMetadata",\r
+ "server": {\r
+ "address": "Data Source=10.10.1.45;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
+ "userName": "MAM",\r
+ "password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "$type": "MediaCubeMetadata",\r
+ "server": {\r
+ "address": "http://10.10.1.27/services/rest/jobengine/",\r
+ "timeout": 1000\r
+ }\r
+ }\r
+ ]\r
+}
\ No newline at end of file
public class OctopusMetadata : MetadataProvider {\r
public bool DisablePlaceHolderCheck { get; set; }\r
public bool DisableStoryCheck { get; set; }\r
- public string RundownStoryFormat { get; set; }\r
public ProjectSettings ProjectSettings { get; set; }\r
}\r
\r
- public class NativeOctopusMetadata : OctopusMetadata {\r
+ public class NativeOctopusMetadata : MetadataProvider {\r
+ public ProjectSettings ProjectSettings { get; set; }\r
}\r
\r
public class TrafficMetadata : MetadataProvider {\r
this.tabMetadata = new System.Windows.Forms.TabControl();\r
this.tpOctopus = new System.Windows.Forms.TabPage();\r
this.octopusIDSelector = new OctopusClient.OctopusIDSelector();\r
+ this.tpNativeOctopus = new System.Windows.Forms.TabPage();\r
+ this.nativeOctopusIDSelector = new NativeOctopusClient.NativeOctopusIDSelector();\r
this.tpTraffic = new System.Windows.Forms.TabPage();\r
this.trafficIDSelector = new TrafficClient.TrafficIDSelector();\r
this.pMetadataDisplay = new System.Windows.Forms.TableLayoutPanel();\r
this.btnLookupMetadata = new System.Windows.Forms.Button();\r
this.labelSelectedMetadata = new System.Windows.Forms.Label();\r
this.textSelectedMetadata = new System.Windows.Forms.TextBox();\r
- this.tpNativeOctopus = new System.Windows.Forms.TabPage();\r
- this.nativeOctopusIDSelector = new NativeOctopusClient.NativeOctopusIDSelector();\r
this.tabMetadata.SuspendLayout();\r
this.tpOctopus.SuspendLayout();\r
+ this.tpNativeOctopus.SuspendLayout();\r
this.tpTraffic.SuspendLayout();\r
this.pMetadataDisplay.SuspendLayout();\r
- this.tpNativeOctopus.SuspendLayout();\r
this.SuspendLayout();\r
// \r
// tabMetadata\r
this.octopusIDSelector.Size = new System.Drawing.Size(359, 422);\r
this.octopusIDSelector.TabIndex = 0;\r
// \r
+ // tpNativeOctopus\r
+ // \r
+ this.tpNativeOctopus.BackColor = System.Drawing.Color.Transparent;\r
+ this.tpNativeOctopus.Controls.Add(this.nativeOctopusIDSelector);\r
+ this.tpNativeOctopus.Location = new System.Drawing.Point(4, 24);\r
+ this.tpNativeOctopus.Name = "tpNativeOctopus";\r
+ this.tpNativeOctopus.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tpNativeOctopus.Size = new System.Drawing.Size(365, 428);\r
+ this.tpNativeOctopus.TabIndex = 2;\r
+ this.tpNativeOctopus.Text = "Octopus";\r
+ // \r
+ // nativeOctopusIDSelector\r
+ // \r
+ this.nativeOctopusIDSelector.BackColor = System.Drawing.Color.Transparent;\r
+ this.nativeOctopusIDSelector.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.nativeOctopusIDSelector.IDChangedEvent = null;\r
+ this.nativeOctopusIDSelector.Location = new System.Drawing.Point(3, 3);\r
+ this.nativeOctopusIDSelector.Name = "nativeOctopusIDSelector";\r
+ this.nativeOctopusIDSelector.Size = new System.Drawing.Size(359, 422);\r
+ this.nativeOctopusIDSelector.TabIndex = 0;\r
+ // \r
// tpTraffic\r
// \r
this.tpTraffic.BackColor = System.Drawing.Color.Transparent;\r
this.textSelectedMetadata.TextChanged += new System.EventHandler(this.OnSelectedMetadataIDChanged);\r
this.textSelectedMetadata.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnSelectedMetadataIDKeyDown);\r
// \r
- // tpNativeOctopus\r
- // \r
- this.tpNativeOctopus.Controls.Add(this.nativeOctopusIDSelector);\r
- this.tpNativeOctopus.Location = new System.Drawing.Point(4, 24);\r
- this.tpNativeOctopus.Name = "tpNativeOctopus";\r
- this.tpNativeOctopus.Padding = new System.Windows.Forms.Padding(3);\r
- this.tpNativeOctopus.Size = new System.Drawing.Size(365, 428);\r
- this.tpNativeOctopus.TabIndex = 2;\r
- this.tpNativeOctopus.Text = "Octopus";\r
- this.tpNativeOctopus.UseVisualStyleBackColor = true;\r
- // \r
- // nativeOctopusIDSelector\r
- // \r
- this.nativeOctopusIDSelector.BackColor = System.Drawing.Color.Transparent;\r
- this.nativeOctopusIDSelector.Dock = System.Windows.Forms.DockStyle.Fill;\r
- this.nativeOctopusIDSelector.IDChangedEvent = null;\r
- this.nativeOctopusIDSelector.Location = new System.Drawing.Point(3, 3);\r
- this.nativeOctopusIDSelector.Name = "nativeOctopusIDSelector";\r
- this.nativeOctopusIDSelector.Size = new System.Drawing.Size(359, 422);\r
- this.nativeOctopusIDSelector.TabIndex = 0;\r
- // \r
// MetadataIDSelector\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
this.Size = new System.Drawing.Size(373, 513);\r
this.tabMetadata.ResumeLayout(false);\r
this.tpOctopus.ResumeLayout(false);\r
+ this.tpNativeOctopus.ResumeLayout(false);\r
this.tpTraffic.ResumeLayout(false);\r
this.tpTraffic.PerformLayout();\r
this.pMetadataDisplay.ResumeLayout(false);\r
this.pMetadataDisplay.PerformLayout();\r
- this.tpNativeOctopus.ResumeLayout(false);\r
this.ResumeLayout(false);\r
this.PerformLayout();\r
\r
config = MetadataProvider.Get<TrafficMetadata>(Providers);\r
if (config == null)\r
return;\r
- tabMetadata.SelectedIndex = tabMetadata.TabCount > 1 ? 1 : 0;\r
+ tabMetadata.SelectedTab = tpTraffic;\r
trafficIDSelector.LookupByMaterialID(id);\r
break;\r
case MetadataType.TrafficPromo:\r
config = MetadataProvider.Get<TrafficMetadata>(Providers);\r
if (config == null)\r
return;\r
- tabMetadata.SelectedIndex = tabMetadata.TabCount > 1 ? 1 : 0;\r
+ tabMetadata.SelectedTab = tpTraffic;\r
trafficIDSelector.LookupByPromoID(id);\r
break;\r
case MetadataType.TrafficAD:\r
config = MetadataProvider.Get<TrafficMetadata>(Providers);\r
if (config == null)\r
return;\r
- tabMetadata.SelectedIndex = tabMetadata.TabCount > 1 ? 1 : 0;\r
+ tabMetadata.SelectedTab = tpTraffic;\r
trafficIDSelector.LookupByADID(id);\r
break;\r
case MetadataType.OctopusPlaceHolder:\r
config = MetadataProvider.Get<OctopusMetadata>(Providers);\r
if (config == null)\r
return;\r
- tabMetadata.SelectedIndex = 0;\r
+ tabMetadata.SelectedTab = tpOctopus;\r
octopusIDSelector.LookupByPlaceHolder(id);\r
break;\r
case MetadataType.OctopusStory:\r
config = MetadataProvider.Get<OctopusMetadata>(Providers);\r
- if (config == null)\r
+ if (config != null) {\r
+ tabMetadata.SelectedTab = tpOctopus;\r
+ octopusIDSelector.LookupByStory(id);\r
+ return;\r
+ }\r
+\r
+ config = MetadataProvider.Get<NativeOctopusMetadata>(Providers);\r
+ if (config != null) {\r
+ tabMetadata.SelectedTab = tpNativeOctopus;\r
+ nativeOctopusIDSelector.LookupByStory(id);\r
return;\r
- tabMetadata.SelectedIndex = 0;\r
- octopusIDSelector.LookupByStory(id);\r
+ }\r
+\r
break;\r
}\r
}\r
using Newtonsoft.Json.Linq;\r
using System;\r
-using System.Globalization;\r
\r
namespace NativeOctopusClient.Model {\r
public class Rundown {\r
\r
public static Rundown Create(JToken d) {\r
String scheduledStart = d["scheduledStart"]?.ToString();\r
- Rundown result = new Rundown {\r
+ Rundown result = null;\r
+ 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
+ Start = DateTime.Parse(scheduledStart != null && 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
+ result.FormattedStart = result.Start.ToString("HH:mm:ss");\r
+ //result.FormattedStart = result.Start.ToString("HH:mm:ss", new CultureInfo("hu-HU"));\r
return result;\r
}\r
}\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
+ public DateTime ScheduleFrom { get; set; }\r
\r
public override String ToString() {\r
string displayName = Name?.ToString() ?? NativeOctopusAPI.UNNAMED;\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
+ 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
public static Story Create(JToken slug) {\r
Story result = null;\r
var story = JExtensions.ParseObject(slug, "story");\r
+ if (story == null)\r
+ story = slug as JObject;\r
if (story != null) {\r
+ String scheduleFrom = story["scheduleFrom"]?.ToString();\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
+ //ParentStoryID = GetParentStoryID(story),\r
+ //MosObjects = GetMosObjects(story)?.ToArray(),\r
+ ScheduleFrom = DateTime.Parse(scheduleFrom != null && scheduleFrom.Length > 0 ? scheduleFrom : DateTime.MinValue.ToString()),\r
};\r
- result.ParentStoryID = result.ParentStoryID ?? result.ID;\r
}\r
+ //result.ParentStoryID = result.ParentStoryID ?? result.ID;\r
+ result.ParentStoryID = result.ID;\r
+\r
return result;\r
}\r
\r
using RestSharp.Authenticators;\r
using System;\r
using System.Collections.Generic;\r
-using System.Globalization;\r
using System.Linq;\r
+using System.Net;\r
\r
namespace NativeOctopusClient {\r
\r
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
this.messageBus = messageBus;\r
}\r
\r
+ private List<string> GetRundownStoryIDs(String id) {\r
+ List<string> result = null;\r
+ try {\r
+ var request = new RestRequest("Rundown/{id}", Method.GET);\r
+ request.AddParameter(ID, id, ParameterType.UrlSegment);\r
+ request.AddParameter("fields", "id,slugs,Slug.storyId", 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 resultObject = JExtensions.ParseObject(JExtensions.ParseObject(response.Content), "result");\r
+ if (resultObject == null)\r
+ return null;\r
+ var resultList = JExtensions.ParseArray(resultObject, "slugs");\r
+ if (resultList == null)\r
+ return null;\r
+\r
+ resultList.Children().ToList().ForEach(d => {\r
+ var storyId = d["storyId"]?.ToString();\r
+ if (storyId != null) {\r
+ if (result == null)\r
+ result = new List<string>();\r
+ result.Add(storyId);\r
+ }\r
+ });\r
+ } catch (Exception e) {\r
+ OnError(e);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public Rundown GetRundownByStoryID(String id) {\r
+ Rundown result = null;\r
+ try {\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
+ var resultList = JExtensions.ParseArray(JExtensions.ParseObject(response.Content), "result");\r
+ if (resultList == null)\r
+ return null;\r
+ foreach (JObject d in resultList) {\r
+ var rundownId = d["id"]?.ToString();\r
+ if (rundownId == null)\r
+ continue;\r
+ //logger.Debug($"Checking rundown {rundownId}");\r
+ List<string> ids = GetRundownStoryIDs(rundownId);\r
+ if (ids == null || ids.Count == 0)\r
+ continue;\r
+ if (ids.Contains(id)) {\r
+ result = Rundown.Create(d);\r
+ break;\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ OnError(e);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private List<string> GetStoryFolderStoryIDs(String id) {\r
+ List<string> result = null;\r
+ try {\r
+ var request = new RestRequest("StoryFolder/{id}", Method.GET);\r
+ request.AddParameter(ID, id, ParameterType.UrlSegment);\r
+ request.AddParameter("fields", "id,stories,Story.id", 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 resultObject = JExtensions.ParseObject(JExtensions.ParseObject(response.Content), "result");\r
+ if (resultObject == null)\r
+ return null;\r
+ var resultList = JExtensions.ParseArray(resultObject, "stories");\r
+ if (resultList == null)\r
+ return null;\r
+\r
+ resultList.Children().ToList().ForEach(d => {\r
+ var storyId = d["id"]?.ToString();\r
+ if (storyId != null) {\r
+ if (result == null)\r
+ result = new List<string>();\r
+ result.Add(storyId);\r
+ }\r
+ });\r
+ } catch (Exception e) {\r
+ OnError(e);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public StoryFolder GetStoryFolderByStoryID(String id) {\r
+ 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
+ foreach (JObject d in resultList) {\r
+ var storyFolderId = d["id"]?.ToString();\r
+ if (storyFolderId == null)\r
+ continue;\r
+ \r
+ logger.Debug($"Checking story folder {storyFolderId}");\r
+ List<string> ids = GetStoryFolderStoryIDs(storyFolderId);\r
+ if (ids == null || ids.Count == 0)\r
+ continue;\r
+ if (ids.Contains(id)) {\r
+ result = StoryFolder.Create(d);\r
+ break;\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ OnError(e);\r
+ }\r
+ return result;\r
+ }\r
+\r
public List<Rundown> GetRundowns(DateTime scheduledDate) {\r
List<Rundown> result = null;\r
try {\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
+ List<Rundown> 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
+ } catch (Exception e) {\r
OnError(e);\r
}\r
return result;\r
\r
public List<Story> GetRundownStories(string id) {\r
List<Story> result = null;\r
+ logger.Info($"Selected rundown ID is {id}");\r
try {\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("fields", "slugs,Slug.story,Slug.position,Story.id,Story.name,Story.format,Story.scheduleFrom,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
}\r
});\r
if (result != null)\r
- result = result.OrderBy(s=>s.Position).ToList();\r
+ result = result.OrderBy(s => s.Position).ToList();\r
} catch (Exception e) {\r
OnError(e);\r
}\r
return result;\r
}\r
\r
- public List<Story> GetStoryFolderStories(string id) {\r
- List<Story> result = null;\r
+ private Story GetStory(string id) {\r
+ Story result = null;\r
try {\r
- var request = new RestRequest("storyFolderStories/{id}", Method.GET);\r
+ var request = new RestRequest("Story/{id}", Method.GET);\r
request.AddParameter(ID, id, ParameterType.UrlSegment);\r
+ request.AddParameter("fields", "id,name,format,scheduleFrom,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 => {\r
- Story r = ToStoryFolderStory(d, id);\r
- //logger.Debug($"{r}");\r
- return r;\r
- }).OrderBy(r => {\r
- return r.ID;\r
- }).ToList();\r
+ var resultObject = JExtensions.ParseObject(JExtensions.ParseObject(response.Content), "result");\r
+ result = Story.Create(resultObject);\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
+ public List<Story> GetStoryFolderStories(string id) {\r
+ List<Story> result = null;\r
try {\r
- var request = new RestRequest("rundownsByParentStoryID/{id}", Method.GET);\r
+ var request = new RestRequest("StoryFolder/{id}", Method.GET);\r
request.AddParameter(ID, id, ParameterType.UrlSegment);\r
+ request.AddParameter("fields", "stories,Story.id,Story.name,Story.format,Story.scheduleFrom,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
- }\r
- catch (Exception e) {\r
- OnError(e);\r
- }\r
- return result;\r
- }\r
-\r
- public IEnumerable<Rundown> GetRundownsByPlaceHolderId(string id) {\r
- IEnumerable<Rundown> result = null;\r
- try {\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
+ var resultObject = JExtensions.ParseObject(JExtensions.ParseObject(response.Content), "result");\r
+ var resultList = JExtensions.ParseArray(resultObject, "stories");\r
+ if (resultList == null)\r
return null;\r
- JArray resultObject = JArray.Parse(response.Content);\r
- //result = resultObject.Children().Select(d => ToRundown(d));\r
- }\r
- catch (Exception e) {\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.ScheduleFrom).ToList();\r
+ } catch (Exception e) {\r
OnError(e);\r
}\r
return result;\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
- }\r
- catch (Exception e) {\r
+ //result = resultObject.Children().Select(d => {\r
+ // //Story r = ToRundownStory(d, id);\r
+ // //logger.Debug($"{r}");\r
+ // return null;\r
+ //}).OrderBy(r => {\r
+ // return r.ID;\r
+ //});\r
+ } catch (Exception e) {\r
OnError(e);\r
}\r
return result;\r
//logger.Debug($"{r}");\r
return r;\r
});\r
- }\r
- catch (Exception e) {\r
+ } catch (Exception e) {\r
OnError(e);\r
}\r
return result;\r
}).OrderBy(r => {\r
return r.ID;\r
});\r
- }\r
- catch (Exception e) {\r
+ } catch (Exception e) {\r
OnError(e);\r
}\r
return result;\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> GetStoryFoldersByParentStoryID(String id) {\r
- IEnumerable<StoryFolder> result = null;\r
- try {\r
- var request = new RestRequest("storyFoldersByParentStoryID/{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
- StoryFolder r = new StoryFolder {\r
- ID = d[ID].ToString(),\r
- Name = String.IsNullOrEmpty(d["name"].ToString()) ? NativeOctopusAPI.UNNAMED : d["name"].ToString()\r
- };\r
-\r
- //logger.Debug($"{r}");\r
- return r;\r
- });\r
- }\r
- catch (Exception e) {\r
+ } catch (Exception e) {\r
OnError(e);\r
}\r
return result;\r
}\r
\r
private bool CheckResponse(IRestResponse<JsonArray> response) {\r
+ if (response.StatusCode == HttpStatusCode.NotFound || response.ErrorException != null)\r
+ throw new Exception(response.ErrorMessage);\r
if (String.IsNullOrEmpty(response.Content))\r
return false;\r
- //if (response.ContentLength != 0)\r
- // return false;\r
- if (response.ErrorException != null)\r
- throw new Exception(response.ErrorMessage);\r
- else return true;\r
+ else\r
+ return true;\r
}\r
\r
private void OnError(Exception e) {\r
messageBus.Send(new NativeOctopusAPIMessage("Sikertelen OCTOPUS lekérdezés. Rendszerüzenet: " + e.Message));\r
}\r
\r
-\r
- private IEnumerable<StoryFolder> GetPartialStoryFolderFromStory(JToken d) {\r
- return d["story_folder"]?.Select(t => ToPartialStoryFolder(t));\r
- }\r
-\r
- private IEnumerable<Rundown> GetPartialRundownFromStory(JToken d) {\r
- return d["rundown"]?.Select(t => ToPartialRundown(t));\r
- }\r
-\r
- private IEnumerable<StoryFolder> GetStoryFolderFromStory(JToken d) {\r
- return d["story_folder"]?.Select(t => StoryFolder.Create(t));\r
- }\r
-\r
- private IEnumerable<Rundown> GetRundownFromStory(JToken d) {\r
- return d["rundown"]?.Select(t => Rundown.Create(t));\r
- }\r
-\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 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 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 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 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
-\r
-\r
}\r
\r
public static class JExtensions {\r
this.rbStoryFolder = new System.Windows.Forms.RadioButton();\r
this.txtFilter = new System.Windows.Forms.TextBox();\r
this.noFocusCueButton1 = new MaestroShared.Controls.NoFocusCueButton();\r
- this.treeOctopus = new CheckableTreeView();\r
+ this.treeOctopus = new MaestroShared.Controls.CheckableTreeView();\r
this.pSearch.SuspendLayout();\r
this.pFolderType.SuspendLayout();\r
this.SuspendLayout();\r
this.treeOctopus.BackColor = System.Drawing.Color.White;\r
this.treeOctopus.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
this.treeOctopus.CheckBoxes = true;\r
+ this.treeOctopus.DisableCheckBoxLevels = null;\r
this.treeOctopus.Dock = System.Windows.Forms.DockStyle.Fill;\r
this.treeOctopus.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawText;\r
this.treeOctopus.Location = new System.Drawing.Point(0, 77);\r
this.treeOctopus.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeOctopus_NodeMouseDoubleClick);\r
this.treeOctopus.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeContent_KeyDown);\r
// \r
- // OctopusIDSelector\r
+ // NativeOctopusIDSelector\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
this.Controls.Add(this.treeOctopus);\r
this.Controls.Add(this.pSeparator);\r
this.Controls.Add(this.pSearch);\r
- this.Name = "OctopusIDSelector";\r
+ this.Name = "NativeOctopusIDSelector";\r
this.Size = new System.Drawing.Size(300, 400);\r
this.pSearch.ResumeLayout(false);\r
this.pSearch.PerformLayout();\r
public NativeOctopusParameters Parameters {\r
set {\r
parameters = value;\r
- treeOctopus.DisableCheckBoxLevels = new[] { parameters.Configuration.DisableStoryCheck, parameters.Configuration.DisablePlaceHolderCheck };\r
client = new NativeOctopusAPI(value.Configuration.Server.Address.OriginalString, value.Configuration.Server.UserName, value.Configuration.Server.Password, value.Configuration.Server.Timeout, value.MessageBus);\r
rbRundown.Checked = true;\r
RefreshFolders();\r
TreeNode storyNode = treeOctopus.Nodes.Add(parentStoryID, label);\r
storyNode.Tag = story;\r
\r
- if (parameters.Configuration.DisableStoryCheck)\r
- HideCheckBox(treeOctopus, storyNode);\r
-\r
bool selectFirstChild = false;\r
\r
if (lookupStoryId != null && lookupStoryId.Equals(parentStoryID)) {\r
- if (parameters.Configuration.DisableStoryCheck)\r
- selectFirstChild = true;\r
- else {\r
- storyNode.Checked = true;\r
- }\r
+ storyNode.Checked = true;\r
}\r
\r
MosObject[] mosObjects = story.MosObjects;\r
foreach (MosObject mosObject in mosObjects) {\r
TreeNode placeHolderNode = storyNode.Nodes.Add(mosObject.ObjID, String.Format($"{mosObject.ObjID}"));\r
placeHolderNode.Tag = story;\r
- if (parameters.Configuration.DisablePlaceHolderCheck)\r
- HideCheckBox(treeOctopus, placeHolderNode);\r
- else {\r
- if ((lookupPlaceHolderId != null && lookupPlaceHolderId.Equals(mosObject.ObjID)) || selectFirstChild) {\r
- if (selectFirstChild && selectedNode != null) {\r
- selectFirstChild = false;\r
- MsgBox.Warning("Fokozott flehasználói figyelemre van szükség. Az anyag kiválasztás le van tiltva a konfigurációban, így az első elérhető bejátszó került kiválasztásra.");\r
- continue;\r
- }\r
- placeHolderNode.Checked = true;\r
+ if ((lookupPlaceHolderId != null && lookupPlaceHolderId.Equals(mosObject.ObjID)) || selectFirstChild) {\r
+ if (selectFirstChild && selectedNode != null) {\r
+ selectFirstChild = false;\r
+ MsgBox.Warning("Fokozott flehasználói figyelemre van szükség. Az anyag kiválasztás le van tiltva a konfigurációban, így az első elérhető bejátszó került kiválasztásra.");\r
+ continue;\r
}\r
+ placeHolderNode.Checked = true;\r
}\r
}\r
}\r
\r
private void OnTreeAfterCheck(object sender, TreeViewEventArgs e) {\r
//logger.Debug("Handling {0} {1} {2}", e.Node.Name, e.Node.Text, e.Node.Checked);\r
-\r
- if (parameters.Configuration.DisableStoryCheck && e.Node.Level == 0) {\r
- if (e.Node.Checked) {\r
- e.Node.Checked = false;\r
- HideCheckBox(treeOctopus, e.Node);\r
- }\r
- return;\r
- }\r
-\r
- if (parameters.Configuration.DisablePlaceHolderCheck && e.Node.Level == 1) {\r
- if (e.Node.Checked) {\r
- e.Node.Checked = false;\r
- HideCheckBox(treeOctopus, e.Node);\r
- }\r
- return;\r
- }\r
-\r
if (!e.Node.Equals(selectedNode)) {\r
ClearSelection();\r
selectedNode = e.Node;\r
SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);\r
}\r
\r
- public void LookupByStory(string storyId) {\r
- if (String.IsNullOrEmpty(storyId))\r
- return;\r
- ClearSelection();\r
- lookupStoryId = null;\r
- lookupPlaceHolderId = null;\r
- var rundown = client.GetRundownsByParentStoryID(storyId)?.FirstOrDefault();\r
- if (rundown == null) {\r
- var storyFolder = client.GetStoryFoldersByParentStoryID(storyId)?.FirstOrDefault();\r
- if (storyFolder != null) {\r
- refreshDisabled = true;\r
- bool forceRefresh = rbStoryFolder.Checked;\r
- rbStoryFolder.Checked = true;\r
- refreshDisabled = false;\r
- RefreshFolders();\r
- List<StoryFolder> storyFolders = cbFolders.DataSource as List<StoryFolder>;\r
- if (storyFolders != null) {\r
- var folderToSelect = storyFolders.Where(f => f.ID.Equals(storyFolder.ID)).FirstOrDefault();\r
- if (folderToSelect != null) {\r
- lookupStoryId = storyId;\r
- cbFolders.SelectedItem = folderToSelect;\r
- }\r
- }\r
- }\r
- } else {\r
- refreshDisabled = true;\r
- dtScheduled.Value = rundown.Start;\r
- rbRundown.Checked = true;\r
- refreshDisabled = false;\r
- RefreshFolders();\r
- List<Rundown> rundowns = cbFolders.DataSource as List<Rundown>;\r
- if (rundowns != null) {\r
- var rundownToSelect = rundowns.Where(f => f.ID.Equals(rundown.ID)).FirstOrDefault();\r
- if (rundownToSelect != null) {\r
- lookupStoryId = storyId;\r
- cbFolders.SelectedItem = rundownToSelect;\r
- }\r
- }\r
- }\r
- txtFilter.Text = storyId;\r
- if (selectedNode == null)\r
- MsgBox.Info("Az azonosító jelenleg nem található a rendszerben. Kérem próbálja újra.");\r
- else\r
- treeOctopus.Focus();\r
- }\r
-\r
- public void LookupByPlaceHolder(string placeHolderId) {\r
- if (String.IsNullOrEmpty(placeHolderId))\r
- return;\r
- ClearSelection();\r
- lookupStoryId = null;\r
- lookupPlaceHolderId = null;\r
- var rundown = client.GetRundownsByPlaceHolderId(placeHolderId)?.FirstOrDefault();\r
- if (rundown == null) {\r
- var storyFolder = client.GetStoryFoldersByPlaceHolderID(placeHolderId)?.FirstOrDefault();\r
- if (storyFolder != null) {\r
- refreshDisabled = true;\r
- bool forceRefresh = rbStoryFolder.Checked;\r
- rbStoryFolder.Checked = true;\r
- refreshDisabled = false;\r
- RefreshFolders();\r
- List<StoryFolder> storyFolders = cbFolders.DataSource as List<StoryFolder>;\r
- if (storyFolders != null) {\r
- var folderToSelect = storyFolders.Where(f => f.ID.Equals(storyFolder.ID)).FirstOrDefault();\r
- if (folderToSelect != null) {\r
- lookupPlaceHolderId = placeHolderId;\r
- cbFolders.SelectedItem = folderToSelect;\r
- }\r
- }\r
- }\r
-\r
- } else {\r
- refreshDisabled = true;\r
- dtScheduled.Value = rundown.Start;\r
- rbRundown.Checked = true;\r
- refreshDisabled = false;\r
- RefreshFolders();\r
- List<Rundown> rundowns = cbFolders.DataSource as List<Rundown>;\r
- if (rundowns != null) {\r
- var rundownToSelect = rundowns.Where(f => f.ID.Equals(rundown.ID)).FirstOrDefault();\r
- if (rundownToSelect != null) {\r
- lookupPlaceHolderId = placeHolderId;\r
- cbFolders.SelectedItem = rundownToSelect;\r
- }\r
- }\r
-\r
- }\r
- txtFilter.Text = placeHolderId;\r
- if (selectedNode == null)\r
- MsgBox.Info("Az azonosító jelenleg nem található a rendszerben. Kérem próbálja újra.");\r
- else\r
- treeOctopus.Focus();\r
- }\r
-\r
private void OnTypeCheckChanged(object sender, EventArgs e) {\r
RefreshFolders();\r
}\r
Rundown rundown = cbFolders.SelectedValue as Rundown;\r
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);\r
} else {\r
StoryFolder storyFolder = cbFolders.SelectedValue as StoryFolder;\r
if (storyFolder == null || ZERO.Equals(storyFolder.ID))\r
return;\r
- //logger.Info("Selected StoryFolder {0} {1}", storyFolder.ID, storyFolder.Name);\r
- stories = client.GetStoryFolderStories(storyFolder.ID).OrderBy(s => s.StoryFolders[0].StoryPosition);\r
+ stories = client.GetStoryFolderStories(storyFolder.ID);\r
}\r
\r
if (stories == null)\r
}\r
\r
private void Lookup() {\r
- if (txtFilter.Text.Contains("_"))\r
- LookupByPlaceHolder(txtFilter.Text);\r
+ LookupByStory(txtFilter.Text);\r
+ }\r
+\r
+ public void LookupByStory(string storyId) {\r
+ if (String.IsNullOrEmpty(storyId))\r
+ return;\r
+ Cursor = Cursors.WaitCursor;\r
+ ClearSelection();\r
+ lookupStoryId = null;\r
+ lookupPlaceHolderId = null;\r
+ var rundown = client.GetRundownByStoryID(storyId);\r
+ if (rundown == null) {\r
+ var storyFolder = client.GetStoryFolderByStoryID(storyId);\r
+ if (storyFolder != null) {\r
+ refreshDisabled = true;\r
+ bool forceRefresh = rbStoryFolder.Checked;\r
+ rbStoryFolder.Checked = true;\r
+ refreshDisabled = false;\r
+ RefreshFolders();\r
+ List<StoryFolder> storyFolders = cbFolders.DataSource as List<StoryFolder>;\r
+ if (storyFolders != null) {\r
+ var folderToSelect = storyFolders.Where(f => f.ID.Equals(storyFolder.ID)).FirstOrDefault();\r
+ if (folderToSelect != null) {\r
+ lookupStoryId = storyId;\r
+ cbFolders.SelectedItem = folderToSelect;\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ refreshDisabled = true;\r
+ dtScheduled.Value = rundown.Start;\r
+ rbRundown.Checked = true;\r
+ refreshDisabled = false;\r
+ RefreshFolders();\r
+ List<Rundown> rundowns = cbFolders.DataSource as List<Rundown>;\r
+ if (rundowns != null) {\r
+ var rundownToSelect = rundowns.Where(f => f.ID.Equals(rundown.ID)).FirstOrDefault();\r
+ if (rundownToSelect != null) {\r
+ lookupStoryId = storyId;\r
+ cbFolders.SelectedItem = rundownToSelect;\r
+ }\r
+ }\r
+ }\r
+ txtFilter.Text = storyId;\r
+ Cursor = Cursors.Default;\r
+\r
+ if (selectedNode == null)\r
+ MsgBox.Info("Az azonosító jelenleg nem található a rendszerben. Kérem próbálja újra.");\r
else\r
- LookupByStory(txtFilter.Text);\r
+ treeOctopus.Focus();\r
}\r
\r
+\r
private void treeOctopus_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {\r
}\r
\r
\r
namespace NativeOctopusClient {\r
public class NativeOctopusParameters {\r
- public OctopusMetadata Configuration { get; set; }\r
+ public NativeOctopusMetadata Configuration { get; set; }\r
public string UserName { get; set; }\r
public IMessageBus MessageBus { get; set; }\r
}\r