git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 13 Nov 2017 17:10:02 +0000 (17:10 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 13 Nov 2017 17:10:02 +0000 (17:10 +0000)
19 files changed:
client/AudioRecorder/AudioRecorder.csproj
client/AudioRecorder/Configuration/audiorecorder.json [moved from client/AudioRecorder/Resources/configuration.json with 52% similarity]
client/AudioRecorder/FileNameForm.cs
client/AudioRecorder/MainForm.cs
client/DxPlay/PlayerForm.cs
client/Maestro/ArchiveMetadataForm.Designer.cs
client/Maestro/Configuration/configuration-playout-ingest.json
client/Maestro/Configuration/configuration-sxs.json
client/Maestro/MaestroForm.Metadata.cs
client/Maestro/MaestroForm.Source.cs
client/Maestro/MaestroForm.Target.cs
client/Maestro/Metadata/MetaDataInfo.cs
client/Maestro/Program.cs
client/Maestro/Properties/AssemblyInfo.cs
client/Maestro/Resources/installforge-installer-project.ifp
client/Maestro/Splash.Designer.cs
client/Maestro/Targets/UNCTargetProcessor.cs
client/OctopusClient/OctopusAPI.cs
client/OctopusClient/OctopusIDSelector.cs

index d23812729d3c6981a03066d5064161bf59472804..21120b51456686971a122954d274e4b8aa4acd59 100644 (file)
       <DependentUpon>Settings.settings</DependentUpon>\r
       <DesignTimeSharedInput>True</DesignTimeSharedInput>\r
     </Compile>\r
-    <None Include="Resources\configuration.json">\r
+    <None Include="Configuration\audiorecorder.json">\r
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
     </None>\r
   </ItemGroup>\r
similarity index 52%
rename from client/AudioRecorder/Resources/configuration.json
rename to client/AudioRecorder/Configuration/audiorecorder.json
index e6202afb7365e3e86d477f01d487b347d53c3544..4b8317beb781a2a450e8e35618e8a7206519d0d2 100644 (file)
@@ -1,9 +1,9 @@
 {\r
   "audio_device_name": "",\r
-  "unc_path": "c:\\temp",\r
+  "unc_path": "I:\\",\r
   "working_dir": "C:\\temp",\r
-  "loud_percent": 10,\r
-  "address": "http://10.10.1.28/services/rest/octopus/",\r
+  "loud_percent": 30,\r
+  "address": "http://10.10.1.27/services/rest/octopus/",\r
   "userName": "dani",\r
   "password": "dani",\r
   "timeout": 1000\r
index 8f7169d79e3fe8b8f1a583306c472664488f8d35..b9f2f6036f3f72bb20bba4c30b2d5f5c8b9cc108 100644 (file)
@@ -23,7 +23,7 @@ namespace AudioRecorder {
             };\r
         }\r
 \r
-        private void IdChangedEvent(string id, string name) {\r
+        private void IdChangedEvent(string id, string name, string text) {\r
             //TODO\r
             this.id = name;\r
             buttonRendben.Enabled = !String.IsNullOrEmpty(id);\r
index 41b19f47c1af5d79a5a53c7cade506eb7cb22170..6a4ad3ef5cdc9d76fdf9542bd188d653ba7ce1f4 100644 (file)
@@ -16,7 +16,8 @@ namespace AudioRecorder
         [DllImport("user32.dll")]\r
         public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);\r
 \r
-        private const String CONFIG_FILE = "Resources/configuration.json";\r
+        //private const String CONFIG_FILE = "Resources/configuration.json";\r
+        private const String CONFIG_FILE = "Configuration/audiorecorder.json";\r
 \r
         private IRecorder recorder;\r
         private ISettings settings;\r
@@ -161,11 +162,29 @@ namespace AudioRecorder
 \r
         private void copyFileToUncPath()\r
         {\r
-            String wavFileName = new FileInfo(recorder.getCurentWavFilePath()).Name;\r
-            String wavUncPath = String.Format("{0}{1}{2}", settings.getUncPath(), Path.DirectorySeparatorChar, wavFileName);\r
+            FileInfo fileInfo = new FileInfo(recorder.getCurentWavFilePath());\r
+            String wavFileName = fileInfo.Name;\r
+            String wavUncPath = DetermineWorkingDirectory(settings.getUncPath(), fileInfo.Name);\r
+            if (!Directory.Exists(wavUncPath))\r
+                Directory.CreateDirectory(wavUncPath);\r
+            wavUncPath = Path.Combine(wavUncPath, fileInfo.Name);\r
+                //String.Format("{0}{1}{2}", settings.getUncPath(), Path.DirectorySeparatorChar, wavFileName);\r
             fileWorker.copy(recorder.getCurentWavFilePath(), wavUncPath);\r
         }\r
 \r
+        protected String DetermineWorkingDirectory(string path, string ID) {\r
+            string result = path;\r
+            string subDir = ID;\r
+            if (ID.Contains("_")) {\r
+                subDir = ID.Split('_')[0];\r
+            }\r
+            if (ID.Contains(".")) {\r
+                subDir = ID.Split('.')[0];\r
+            }\r
+            result = Path.Combine(path, subDir);\r
+            return result;\r
+        }\r
+\r
         private void record_Click(object sender, EventArgs e)\r
         {\r
             FileNameForm nameForm = new FileNameForm(this, settings);\r
index 0dae3df5bff178374b57b3412cf5c3c333f100e6..f3965e63e63169004541bb0a9d7a9c8ba6b31426 100644 (file)
@@ -211,6 +211,8 @@ namespace DxPlay {
 \r
         private void DisableHotKeysDefaults(Control.ControlCollection controls) {\r
             foreach (Control control in controls) {\r
+                if (control.Equals(dgSegments))\r
+                    continue;\r
                 control.PreviewKeyDown += new PreviewKeyDownEventHandler(PlayerForm_PreviewKeyDown);\r
                 if (control.HasChildren)\r
                     DisableHotKeysDefaults(control.Controls);\r
@@ -236,12 +238,14 @@ namespace DxPlay {
 \r
         private void PlayerForm_KeyDown(object sender, KeyEventArgs e) {\r
             e.Handled = true;\r
-            e.SuppressKeyPress = true;\r
+            e.SuppressKeyPress = true; \r
         }\r
 \r
         private bool HandleHotKey(Keys keyCode) {\r
-            if (m_play == null)\r
-                return false;\r
+            Debug.WriteLine("Key pressed " + keyCode);\r
+            if (m_play == null || dgSegments.IsCurrentCellInEditMode || (!m_play.IsFullscreen() && !this.ContainsFocus))\r
+                return true; \r
+            Debug.WriteLine("Handling " + keyCode);\r
             bool result = false;\r
             switch (keyCode) {\r
                 case Keys.Escape:\r
index ffd26be7d1ab5ec2b1973fc5ff95dc169d0041b2..8edd6160c69eafc06a7712f587de3d2228c3a615 100644 (file)
             // \r
             // ArchiveMetadataForm\r
             // \r
-            this.AcceptButton = this.btnOk;\r
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
             this.CancelButton = this.btnCancel;\r
index 2cc6c0d2269e63439693f06f4e652c4d47cc0bca..aa818ef78d9a56e12fce43f666f94ee12d06375c 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Lebony betöltő",\r
-  "active": false,\r
+  "active": true,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "player": {\r
     }\r
   },\r
   "metadatas": [\r
+    {\r
+      "$type": "OctopusMetadata",\r
+      "server": {\r
+        "address": "http://10.10.1.27/services/rest/octopus/",\r
+        "timeout": 1000\r
+      }\r
+    },\r
     {\r
       "$type": "TrafficMetadata",\r
       "server": {\r
index 7032fa13c32a65ad91d3999d28a7394b63316fc1..a3a97954fbed4b9474ed8d02d1b5be3fb8624000 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "SxS",\r
-  "active": true,\r
+  "active": false,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "player": {\r
index 56efa401a0f0beea02d797a03feb3d7973199c8d..5a320c8bd36be79d5c79b4b6567f94a0f5c42f25 100644 (file)
@@ -95,6 +95,11 @@ namespace Maestro {
         private void OnArchiveMetadataClick(object sender, EventArgs e) {\r
             if (archiveMetadata == null)\r
                 archiveMetadata = GetArchiveMetadata();\r
+            if (archiveMetadata == null || !archiveMetadata.IsFilled) {\r
+                MessageBox.Show("Nem található archív metaadat!");\r
+                return;\r
+            }\r
+\r
             ArchiveMetadataForm form = new ArchiveMetadataForm(archiveMetadata);\r
             DialogResult result = form.ShowDialog();\r
             if (result == DialogResult.OK && String.IsNullOrEmpty(textSelectedMetadata.Text))\r
@@ -203,8 +208,9 @@ namespace Maestro {
                 case MetadataType.MediaCube:\r
                     result = GetMediaCubeMetadata();\r
                     break;\r
+                case MetadataType.OctopusStory:\r
                 case MetadataType.OctopusPlaceHolder:\r
-                    result = GetOctopusMetadata();\r
+                    result = GetOctopusMetadata(metadataType);\r
                     break;\r
                 case MetadataType.TrafficMaterial:\r
                 case MetadataType.TrafficPromo:\r
@@ -256,45 +262,55 @@ namespace Maestro {
             return result;\r
         }\r
 \r
-        private ArchiveMetadata GetOctopusMetadata() {\r
-            ArchiveMetadata result = new ArchiveMetadata();\r
-            string id = SelectedMetadata?.VariantID.ToString();\r
+        private ArchiveMetadata GetOctopusMetadata(MetadataType metadataType) {\r
+            string id = SelectedMetadata?.ID.ToString();\r
             if (String.IsNullOrEmpty(id))\r
                 return null;\r
             OctopusAPI api = octopusIDSelector.GetClient();\r
-            IEnumerable<Story> storiesEnum = api.GetStoriesByPlaceHolderId(id);\r
-            if (storiesEnum != null) {\r
-                List<Story> stories = storiesEnum.ToList();\r
-                FillModelFromStories(result, stories, api);\r
+            IEnumerable<Story> octopusResult = null;\r
+            switch (metadataType) {\r
+                case MetadataType.OctopusPlaceHolder:\r
+                    octopusResult = api.GetStoriesByPlaceHolderId(id);\r
+                    break;\r
+                case MetadataType.OctopusStory:\r
+                    octopusResult = api.GetStoriesByParentStoryId(id);\r
+                    break;\r
             }\r
-            return result;\r
+            if (octopusResult == null)\r
+                return null;\r
+            List<Story> stories = octopusResult.ToList();\r
+            return GetStoryMetadata(stories);\r
         }\r
 \r
-        private void FillModelFromStories(ArchiveMetadata model, List<Story> stories, OctopusAPI api) {\r
+        private ArchiveMetadata GetStoryMetadata(List<Story> stories) {\r
             if (stories == null || stories.Count == 0)\r
-                return;\r
+                return null;\r
             Story story = stories[0];\r
-            if (story.StoryFolders != null && story.StoryFolders.Length > 0) {\r
-                IEnumerable<StoryFolder> storyFoldersEnum = api.GetStoryFoldersByStoryID(story.ID);\r
-                if (storyFoldersEnum == null)\r
-                    return;\r
-                List<StoryFolder> storyFolders = storyFoldersEnum.ToList();\r
-                StoryFolder folder = storyFolders[0];\r
-                model.itemHouseId = folder.ID;\r
-                model.itemTitle = folder.Name;\r
-            } else if (story.Rundowns != null) {\r
+            ArchiveMetadata result = new ArchiveMetadata();\r
+\r
+            OctopusAPI api = octopusIDSelector.GetClient();\r
+            if (story.Rundowns != null && story.Rundowns.Length > 0) {\r
                 IEnumerable<Rundown> rundownsEnum = api.GetRundownsByStoryID(story.ID);\r
                 if (rundownsEnum == null)\r
-                    return;\r
+                    return null;\r
                 List<Rundown> rundowns = rundownsEnum.ToList();\r
                 Rundown rundown = rundowns[0];\r
-                model.itemHouseId = rundown.ID;\r
-                model.itemTitle = rundown.Name;\r
-                model.itemDescription = rundown.Start.ToString();\r
+                result.itemHouseId = rundown.ID;\r
+                result.itemTitle = rundown.Name;\r
+                result.itemDescription = rundown.Start.ToString();\r
+            } else if (story.StoryFolders != null && story.StoryFolders.Length > 0) {\r
+                IEnumerable<StoryFolder> storyFoldersEnum = api.GetStoryFoldersByStoryID(story.ID);\r
+                if (storyFoldersEnum == null)\r
+                    return null;\r
+                List<StoryFolder> storyFolders = storyFoldersEnum.ToList();\r
+                StoryFolder folder = storyFolders[0];\r
+                result.itemHouseId = folder.ID;\r
+                result.itemTitle = folder.Name;\r
             }\r
-            model.mediaHouseId = story.ID;\r
-            model.mediaTitle = story.Name;\r
-            model.mediaDescription = story.Script;\r
+            result.mediaHouseId = story.ID;\r
+            result.mediaTitle = story.Name;\r
+            result.mediaDescription = story.ScriptContent;\r
+            return result;\r
         }\r
 \r
         private void OnMetadataIDChanged(object sender, EventArgs e) {\r
@@ -320,17 +336,18 @@ namespace Maestro {
             UpdateLookupByMetadataEnabled();\r
         }\r
 \r
-        private void OnOctopusIDSelected(string id, string name) {\r
+        private void OnOctopusIDSelected(string id, string name, string text) {\r
             trafficIDSelector.ClearSelection();\r
             archiveMetadata = null;\r
             if (id == null) {\r
                 SelectedMetadata = null;\r
                 return;\r
             }\r
-            MetadataType metadataType = GuessMetadataType(id);\r
+            MetadataType metadataType = GuessMetadataType(name);\r
             SelectedMetadata = new MetadataInfo() {\r
                 Kind = metadataType,\r
                 ID = name,\r
+                MetadataText = text,\r
                 VariantID = int.Parse(id)\r
             };\r
         }\r
@@ -379,6 +396,10 @@ namespace Maestro {
         }\r
 \r
         private void OnLookupByMetadata(object sender, EventArgs e) {\r
+            Lookup(SelectedMetadata.ID);\r
+        }\r
+\r
+        private void Lookup(string id) {\r
             MetadataProvider config = null;\r
             switch (SelectedMetadata?.Kind) {\r
                 case MetadataType.TrafficAD:\r
@@ -392,19 +413,17 @@ namespace Maestro {
                     config = Configuration.GetMetadataProvider<OctopusMetadata>();\r
                     if (config == null)\r
                         return;\r
-                    octopusIDSelector.LookupByPlaceHolder(SelectedMetadata.ID);\r
+                    octopusIDSelector.LookupByPlaceHolder(id);\r
                     break;\r
                 case MetadataType.OctopusStory:\r
                     config = Configuration.GetMetadataProvider<OctopusMetadata>();\r
                     if (config == null)\r
                         return;\r
-                    octopusIDSelector.LookupByStory(SelectedMetadata.ID);\r
+                    octopusIDSelector.LookupByStory(id);\r
                     break;\r
             }\r
         }\r
 \r
-\r
-\r
         private void UpdateEditArchiveMetadataEnabled() {\r
             ctxiModifyArchiveMetadata.Enabled = SelectedSource != null;\r
         }\r
index 7810788c379ad4cf8b67cceeef266a90f66fe956..fd47e85266716b75bebab22bf8da9572d2c31e0f 100644 (file)
@@ -216,22 +216,23 @@ namespace Maestro {
         }\r
 \r
         private void OnLookupBySource(object sender, EventArgs e) {\r
-            Cursor.Current = Cursors.WaitCursor;\r
-            MetadataType metadataType = GuessMetadataType(SelectedSource?.Prefix);\r
-            switch (metadataType) {\r
-                case MetadataType.TrafficMaterial:\r
-                case MetadataType.TrafficPromo:\r
-                case MetadataType.TrafficAD:\r
-                    LookupTraffic(metadataType);\r
-                    break;\r
-                case MetadataType.OctopusPlaceHolder:\r
-                    LookupOctopus();\r
-                    break;\r
-            }\r
-            trafficIDSelector.ClearSelection();\r
-            octopusIDSelector.ClearSelection();\r
-\r
-            Cursor.Current = Cursors.Default;\r
+            Lookup(SelectedMetadata.ID);\r
+            //Cursor.Current = Cursors.WaitCursor;\r
+            //MetadataType metadataType = GuessMetadataType(SelectedSource?.Prefix);\r
+            //switch (metadataType) {\r
+            //    case MetadataType.TrafficMaterial:\r
+            //    case MetadataType.TrafficPromo:\r
+            //    case MetadataType.TrafficAD:\r
+            //        LookupTraffic(metadataType);\r
+            //        break;\r
+            //    case MetadataType.OctopusPlaceHolder:\r
+            //        LookupOctopus();\r
+            //        break;\r
+            //}\r
+            //trafficIDSelector.ClearSelection();\r
+            //octopusIDSelector.ClearSelection();\r
+\r
+            //Cursor.Current = Cursors.Default;\r
         }\r
 \r
         private void LookupTraffic(MetadataType metadataType) {\r
@@ -282,25 +283,25 @@ namespace Maestro {
         //    Cursor.Current = Cursors.Default;\r
         //}\r
 \r
-        private void LookupOctopus() {\r
-            OctopusAPI api = octopusIDSelector.GetClient();\r
-            IEnumerable<MosObject> mosIDs = api.GetMosObjectsByID(SelectedSource?.Prefix);\r
-            if (mosIDs == null) {\r
-                MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
-                return;\r
-            }\r
-            List<MosObject> mosObjects = mosIDs.ToList();\r
-            if (mosObjects == null || mosObjects.Count == 0) {\r
-                MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
-                return;\r
-            }\r
-            if (mosObjects.Count == 1)\r
-                OnOctopusIDSelected(mosObjects[0].ID, mosObjects[0].ObjID);\r
-            else {\r
-                OctopusLookupResultSelector box = new OctopusLookupResultSelector(mosObjects, OnOctopusIDSelected);\r
-                box.ShowDialog();\r
-            }\r
-        }\r
+        //private void LookupOctopus() {\r
+        //    OctopusAPI api = octopusIDSelector.GetClient();\r
+        //    IEnumerable<MosObject> mosIDs = api.GetMosObjectsByID(SelectedSource?.Prefix);\r
+        //    if (mosIDs == null) {\r
+        //        MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
+        //        return;\r
+        //    }\r
+        //    List<MosObject> mosObjects = mosIDs.ToList();\r
+        //    if (mosObjects == null || mosObjects.Count == 0) {\r
+        //        MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
+        //        return;\r
+        //    }\r
+        //    if (mosObjects.Count == 1)\r
+        //        OnOctopusIDSelected(mosObjects[0].ID, mosObjects[0].ObjID);\r
+        //    else {\r
+        //        OctopusLookupResultSelector box = new OctopusLookupResultSelector(mosObjects, OnOctopusIDSelected);\r
+        //        box.ShowDialog();\r
+        //    }\r
+        //}\r
 \r
 \r
         private void picClearFilter_Click(object sender, EventArgs e) {\r
index f35041e97d386a448221fdc858bf6824567602ae..d16c82ce354c5489f43f37a6572a17a79097a582 100644 (file)
@@ -17,6 +17,7 @@ namespace Maestro {
         public Target TargetConfig { get; set; }\r
         public string InputFileName { get; set; }\r
         public string ID { get; set; }\r
+        public string MetadataText { get; set; }\r
         public List<Segment> Segments { get; set; }\r
         public List<MovieSegment> MovieSegments { get; set; }\r
         public MediaCubeApi MediaCubeApi { get; set; }\r
@@ -157,6 +158,7 @@ namespace Maestro {
                 SourceConfig = Configuration.Source,\r
                 TargetConfig = target,\r
                 ID = textSelectedMetadata.Text,\r
+                MetadataText = SelectedMetadata?.MetadataText,\r
                 InputFileName = sourceItem.Name,\r
                 Segments = segments == null ? null : new List<Segment>(segments),\r
                 MovieSegments = movieSegments == null ? null : movieSegments.ToList(), \r
index bf0b4c196b6a95c2b93837e7e857bdc0731a2a6f..04608efbbc0000ff7a8ed4b3cb56811a3fe7e376 100644 (file)
@@ -1,6 +1,7 @@
 namespace Maestro.Metadata {\r
     public class MetadataInfo {\r
         public string ID { get; set; }\r
+        public string MetadataText { get; set; }\r
         public MetadataType Kind { get; set; }\r
         public int VariantID { get; set; }\r
 \r
index c52406909a3c1a0b19b2fb7419b299ba507bb50c..e4d849e20881a227365ab6c55cf5fdf59e0d51ed 100644 (file)
@@ -82,6 +82,7 @@ namespace Maestro {
 \r
     public class TrayApplicationContext : ApplicationContext {\r
         private const string GLOBAL_JSON = "global.json";\r
+        private const string AUDIORECORDER_JSON = "audiorecorder.json";\r
         private const string JSON_WILDCARD = "*.json";\r
         private const string CONFIG_ERROR = "Nem található aktív konfiguráció.";\r
         private const string SYSCONFIG_ERROR = "Nem található a 'global.json' rendszer konfiguráció.";\r
@@ -113,6 +114,9 @@ namespace Maestro {
             \r
             CheckGlobalConfig(files);\r
             foreach (String file in files) {\r
+                string audioRecorderFile = Path.Combine(CONFIGURATION_FOLDER, AUDIORECORDER_JSON);\r
+                if (file.Equals(audioRecorderFile))\r
+                    continue;\r
                 CreateForm(file);\r
             }\r
             if (forms.Count == 0)\r
index 5664da0d49df6eac1dbbd57ce384eec4b7635874..93a89e8aa6b87d11173b5f6349f6325acafaac35 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("1.9.8")]\r
-[assembly: AssemblyFileVersion("1.9.8")]\r
+[assembly: AssemblyVersion("1.9.9")]\r
+[assembly: AssemblyFileVersion("1.9.9")]\r
index 480eb59c45c53a83bc552cac56d6359434e5f068..899a0df4d1e0cea5565a7c405c63ed371698784e 100644 (file)
Binary files a/client/Maestro/Resources/installforge-installer-project.ifp and b/client/Maestro/Resources/installforge-installer-project.ifp differ
index 840c11a0426185f2939e357ea6e5945fe7bc13fd..7a16fb2504c2004abe55ed81121f3614c9b2113b 100644 (file)
@@ -47,7 +47,6 @@
             this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\r
             this.pictureBox1.TabIndex = 0;\r
             this.pictureBox1.TabStop = false;\r
-            this.pictureBox1.Visible = false;\r
             // \r
             // labelVersion\r
             // \r
index ba7ce562d5683ce9172bc17fc2e3ec9503b46f09..2b48519d33c961be5269980a1b35e3788f55105d 100644 (file)
@@ -9,6 +9,7 @@ using System.Text;
 using Maestro.Commons;\r
 using Commons;\r
 using Maestro.Metadata;\r
+using System.Globalization;\r
 \r
 namespace Maestro.Targets {\r
 \r
@@ -257,7 +258,11 @@ namespace Maestro.Targets {
         }\r
 \r
         protected virtual string CreateOutputFileName() {\r
-            string nameWithoutExtension = parameters.TargetConfig.OutputFormat.Replace("%ID%", ID).Replace("%SOURCENAME%", Path.GetFileNameWithoutExtension(InputName));\r
+            string nameWithoutExtension = parameters.TargetConfig.OutputFormat\r
+                .Replace("%ID%", ID)\r
+                .Replace("%TEXT%", parameters.MetadataText)\r
+                .Replace("%SOURCENAME%", Path.GetFileNameWithoutExtension(InputName))\r
+                .Replace("%TIMESTAMP%", DateTime.Now.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture));\r
             string extension = InputName.Contains(".") ? InputName.Substring(InputName.LastIndexOf(".")) : DEFAULT_EXTENSION;\r
             extension = extension.ToUpper();\r
             string result = String.Format(FILENAME, nameWithoutExtension, extension);\r
index 7e5fee05812b7ae76de4b5830911577502b4eed0..793e76e3bc2f08ac6118e63110d413069f5922c5 100644 (file)
@@ -23,8 +23,10 @@ namespace OctopusClient {
 \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 MosObject[] MosObjects { get; set; }\r
         public StoryFolder[] StoryFolders { get; set; }\r
@@ -136,10 +138,12 @@ namespace OctopusClient {
         private Story ToStory(JToken d) {\r
             return new Story {\r
                 ID = d["id"]?.ToString(),\r
+                ParentStoryID = d["parentStoryId"]?.ToString(),\r
                 Name = d["name"]?.ToString(),\r
                 Format = d["format"]?.ToString(),\r
                 MosObjects = GetMosObjectsFromStory(d)?.ToArray(),\r
                 Script = d["script"]?.ToString(),\r
+                ScriptContent = d["script_content"]?.ToString(),\r
                 StoryFolders = GetStoryFolderFromStory(d)?.ToArray(),\r
                 Rundowns = GetRundownFromStory(d)?.ToArray()\r
             };\r
@@ -270,7 +274,32 @@ namespace OctopusClient {
         public IEnumerable<Story> GetStoriesById(String id) {\r
             IEnumerable<Story> result = null;\r
             try {\r
-                var request = new RestRequest("getStoriesByIDRegex/{id}", Method.GET);\r
+                var request = new RestRequest("getStoriesByID/{id}", Method.GET);\r
+                request.AddParameter("id", id, ParameterType.UrlSegment);\r
+                var response = client.Execute<JsonArray>(request);\r
+                if (response.ContentLength == 0) {\r
+                    if (response.ErrorException != null)\r
+                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
+                    else return null;\r
+                }\r
+                JArray resultObject = JArray.Parse(response.Content);\r
+\r
+                result = resultObject.Children().Select(d => {\r
+                    Story r = ToStory(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<Story> GetStoriesByParentStoryId(String id) {\r
+            IEnumerable<Story> result = null;\r
+            try {\r
+                var request = new RestRequest("getStoriesByParentStoryID/{id}", Method.GET);\r
                 request.AddParameter("id", id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
                 if (response.ContentLength == 0) {\r
index 3226f983e7403e7a98a82f818d8e5f6a0595417a..39b16776ae989942bb5f52c14940fdb9ede52807 100644 (file)
@@ -8,7 +8,7 @@ using LinkDotNet.MessageHandling.Contracts;
 using System.Drawing;\r
 \r
 namespace OctopusClient {\r
-    public delegate void OnSelectedIDChanged(string id, string name);\r
+    public delegate void OnSelectedIDChanged(string id, string name, string text);\r
 \r
     public partial class OctopusIDSelector : UserControl {\r
         private static Logger logger = LogManager.GetCurrentClassLogger();\r
@@ -106,40 +106,6 @@ namespace OctopusClient {
             //selectedRundownIndex = cbRundowns.SelectedIndex;\r
         }\r
 \r
-        private void AddStories(IEnumerable<Story> stories) {\r
-            foreach (var story in stories) {\r
-                string name = story.Name == null ? OctopusAPI.UNNAMED : story.Name;\r
-                string label = story.ID;\r
-                if (!String.IsNullOrEmpty(story.Format))\r
-                    label += String.Format($" [{story.Format}] {story.Name}");\r
-                else\r
-                    label += String.Format($" {story.Name}");\r
-                TreeNode storyNode = treeOctopus.Nodes.Add(story.ID, label);\r
-                storyNode.Tag = story.ID;\r
-                if (configuration.DisableStoryCheck)\r
-                    HideCheckBox(treeOctopus, storyNode);\r
-                else {\r
-                    if (lookupStoryId != null && lookupStoryId.Equals(story.ID))\r
-                        storyNode.Checked = true;\r
-                }\r
-\r
-                MosObject[] mosObjects = story.MosObjects;\r
-                if (mosObjects == null)\r
-                    continue;\r
-                foreach (MosObject mosObject in mosObjects) {\r
-                    TreeNode placeHolderNode = storyNode.Nodes.Add(mosObject.ObjID, String.Format($"{mosObject.ObjID}"));\r
-                    // TODO wich?\r
-                    placeHolderNode.Tag = mosObject.ID;\r
-                    if (configuration.DisablePlaceHolderCheck)\r
-                        HideCheckBox(treeOctopus, placeHolderNode);\r
-                    else {\r
-                        if (lookupPlaceHolderId != null && lookupPlaceHolderId.Equals(mosObject.ID))\r
-                           placeHolderNode.Checked = true;\r
-                    }\r
-                }\r
-            }\r
-        }\r
-\r
         private void comboStoryFolder_SelectedValueChanged(object sender, EventArgs e) {\r
             StoryFolder storyFolder = cbStoryFolder.SelectedValue as StoryFolder;\r
             if (storyFolder == null)\r
@@ -151,7 +117,7 @@ namespace OctopusClient {
             var stories = client.GetStoryFolderStories(storyFolder.ID);\r
             if (stories == null)\r
                 return;\r
-            AddStories(stories);\r
+            AddStories(stories, true);\r
             //selectedStoryFolderIndex = cbStoryFolder.SelectedIndex;\r
         }\r
 \r
@@ -187,15 +153,6 @@ namespace OctopusClient {
             Cursor.Current = Cursors.Default;\r
         }\r
 \r
-        private void InitCheckID(string id, TreeNodeCollection collection) {\r
-            foreach (TreeNode actual in collection) {\r
-                if (id.Equals(actual.Tag)) {\r
-                    actual.Checked = true;\r
-                    break;\r
-                }\r
-            }\r
-        }\r
-\r
         public void ClearSelection() {\r
             if (selectedNode == null)\r
                 return;\r
@@ -203,7 +160,7 @@ namespace OctopusClient {
             selectedNode.Checked = false;\r
             treeOctopus.AfterCheck += OnTreeAfterCheck;\r
             selectedNode = null;\r
-            IDChangedEvent?.Invoke(null, null);\r
+            IDChangedEvent?.Invoke(null, null, null);\r
         }\r
 \r
         private void tabControl1_Selected(object sender, TabControlEventArgs e) {\r
@@ -232,6 +189,43 @@ namespace OctopusClient {
             //this.OnKeyDown(e);\r
         }\r
 \r
+        private void AddStories(IEnumerable<Story> stories, bool isFolderView = false) {\r
+            foreach (var story in stories) {\r
+                string name = story.Name == null ? OctopusAPI.UNNAMED : story.Name;\r
+                String ID = isFolderView ? story.ID : story.ParentStoryID;\r
+                string label = ID;\r
+                if (!String.IsNullOrEmpty(story.Format))\r
+                    label += String.Format($" [{story.Format}] {story.Name}");\r
+                else\r
+                    label += String.Format($" {story.Name}");\r
+\r
+                TreeNode storyNode = treeOctopus.Nodes.Add(ID, label);\r
+                storyNode.Tag = ID;\r
+                if (configuration.DisableStoryCheck)\r
+                    HideCheckBox(treeOctopus, storyNode);\r
+                else {\r
+                    if (lookupStoryId != null && lookupStoryId.Equals(story.ID))\r
+                        storyNode.Checked = true;\r
+                }\r
+\r
+                MosObject[] mosObjects = story.MosObjects;\r
+                if (mosObjects == null)\r
+                    continue;\r
+                foreach (MosObject mosObject in mosObjects) {\r
+                    TreeNode placeHolderNode = storyNode.Nodes.Add(mosObject.ObjID, String.Format($"{mosObject.ObjID}"));\r
+                    placeHolderNode.Tag = mosObject.ID;\r
+                    if (configuration.DisablePlaceHolderCheck)\r
+                        HideCheckBox(treeOctopus, placeHolderNode);\r
+                    else {\r
+                        if (lookupPlaceHolderId != null && lookupPlaceHolderId.Equals(mosObject.ObjID)) {\r
+                            placeHolderNode.Checked = true;\r
+                            storyNode.Expand();\r
+                        }\r
+                    }\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
@@ -258,9 +252,9 @@ namespace OctopusClient {
             }\r
 \r
             if (selectedNode.Checked)\r
-                IDChangedEvent?.Invoke(selectedNode.Tag as string, selectedNode.Name);\r
+                IDChangedEvent?.Invoke(selectedNode.Tag as string, selectedNode.Name, selectedNode.Text);\r
             else\r
-                IDChangedEvent?.Invoke(null, null);\r
+                IDChangedEvent?.Invoke(null, null, null);\r
         }\r
 \r
         public OctopusAPI GetClient() {\r