--- /dev/null
+<?xml version="1.0"?>\r
+<configuration>\r
+ <startup>\r
+\r
+ \r
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup>\r
+ <appSettings>\r
+ <add key="AUDIO_DEVICE_NAME" value=""/>\r
+ <add key="UNC_PATH" value="\\store.in.user.hu\upload"/>\r
+ <add key="LOUD_PERCENT" value="30"/>\r
+ </appSettings>\r
+</configuration>\r
--- /dev/null
+namespace AudioRecorder {\r
+ partial class AudioDeviceSelectorForm {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.audioDevicesComboBox = new System.Windows.Forms.ComboBox();\r
+ this.okButton = new System.Windows.Forms.Button();\r
+ this.label1 = new System.Windows.Forms.Label();\r
+ this.cancelButton = new System.Windows.Forms.Button();\r
+ this.groupBox1 = new System.Windows.Forms.GroupBox();\r
+ this.groupBox2 = new System.Windows.Forms.GroupBox();\r
+ this.groupBox1.SuspendLayout();\r
+ this.groupBox2.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // audioDevicesComboBox\r
+ // \r
+ this.audioDevicesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
+ this.audioDevicesComboBox.FormattingEnabled = true;\r
+ this.audioDevicesComboBox.Location = new System.Drawing.Point(9, 32);\r
+ this.audioDevicesComboBox.Name = "audioDevicesComboBox";\r
+ this.audioDevicesComboBox.Size = new System.Drawing.Size(359, 21);\r
+ this.audioDevicesComboBox.TabIndex = 0;\r
+ // \r
+ // okButton\r
+ // \r
+ this.okButton.Location = new System.Drawing.Point(293, 16);\r
+ this.okButton.Name = "okButton";\r
+ this.okButton.Size = new System.Drawing.Size(75, 23);\r
+ this.okButton.TabIndex = 1;\r
+ this.okButton.Text = "OK";\r
+ this.okButton.UseVisualStyleBackColor = true;\r
+ this.okButton.Click += new System.EventHandler(this.okButton_Click);\r
+ // \r
+ // label1\r
+ // \r
+ this.label1.AutoEllipsis = true;\r
+ this.label1.AutoSize = true;\r
+ this.label1.Location = new System.Drawing.Point(10, 7);\r
+ this.label1.Name = "label1";\r
+ this.label1.Size = new System.Drawing.Size(101, 13);\r
+ this.label1.TabIndex = 2;\r
+ this.label1.Text = "Select audio device";\r
+ // \r
+ // cancelButton\r
+ // \r
+ this.cancelButton.Location = new System.Drawing.Point(9, 19);\r
+ this.cancelButton.Name = "cancelButton";\r
+ this.cancelButton.Size = new System.Drawing.Size(75, 23);\r
+ this.cancelButton.TabIndex = 3;\r
+ this.cancelButton.Text = "Cancel";\r
+ this.cancelButton.UseVisualStyleBackColor = true;\r
+ this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);\r
+ // \r
+ // groupBox1\r
+ // \r
+ this.groupBox1.Controls.Add(this.label1);\r
+ this.groupBox1.Controls.Add(this.audioDevicesComboBox);\r
+ this.groupBox1.Location = new System.Drawing.Point(2, 2);\r
+ this.groupBox1.Name = "groupBox1";\r
+ this.groupBox1.Size = new System.Drawing.Size(376, 69);\r
+ this.groupBox1.TabIndex = 4;\r
+ this.groupBox1.TabStop = false;\r
+ // \r
+ // groupBox2\r
+ // \r
+ this.groupBox2.Controls.Add(this.okButton);\r
+ this.groupBox2.Controls.Add(this.cancelButton);\r
+ this.groupBox2.Location = new System.Drawing.Point(2, 77);\r
+ this.groupBox2.Name = "groupBox2";\r
+ this.groupBox2.Size = new System.Drawing.Size(376, 45);\r
+ this.groupBox2.TabIndex = 5;\r
+ this.groupBox2.TabStop = false;\r
+ // \r
+ // AudioDeviceSelectorForm\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.ClientSize = new System.Drawing.Size(381, 127);\r
+ this.ControlBox = false;\r
+ this.Controls.Add(this.groupBox2);\r
+ this.Controls.Add(this.groupBox1);\r
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;\r
+ this.Name = "AudioDeviceSelectorForm";\r
+ this.Text = "AudioRecorder input device selector";\r
+ this.groupBox1.ResumeLayout(false);\r
+ this.groupBox1.PerformLayout();\r
+ this.groupBox2.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.ComboBox audioDevicesComboBox;\r
+ private System.Windows.Forms.Button okButton;\r
+ private System.Windows.Forms.Label label1;\r
+ private System.Windows.Forms.Button cancelButton;\r
+ private System.Windows.Forms.GroupBox groupBox1;\r
+ private System.Windows.Forms.GroupBox groupBox2;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using NAudio.CoreAudioApi;\r
+using System.Windows.Forms;\r
+\r
+namespace AudioRecorder {\r
+ public partial class AudioDeviceSelectorForm : Form, IAudioDeviceSelectorForm {\r
+\r
+ private IAudioDevicesDetector devicesDetector;\r
+ private List<String> deviceNames = new List<String>();\r
+ private IMainForm mainForm;\r
+ private bool deviceConnected;\r
+\r
+ public AudioDeviceSelectorForm(IMainForm mainForm) {\r
+ InitializeComponent();\r
+ InitializeControlTexts();\r
+ StartPosition = FormStartPosition.CenterParent;\r
+ devicesDetector = new AudioDevicesDetector();\r
+ this.mainForm = mainForm;\r
+ audioDevicesComboBox.KeyDown += (sender, args) => {\r
+ if (args.KeyCode == Keys.Return)\r
+ okButton.PerformClick();\r
+ };\r
+ audioDevicesComboBox.KeyDown += (sender, args) => {\r
+ if (args.KeyCode == Keys.Escape)\r
+ {\r
+ Dispose();\r
+ }\r
+ };\r
+ findDevicesAnd();\r
+ }\r
+\r
+ private void InitializeControlTexts()\r
+ {\r
+ cancelButton.Text = Resources.MEGSE;\r
+ label1.Text = Resources.VALASSZON_MIKROFONT;\r
+ this.Text = Resources.MIKROFON_VALASZTAS;\r
+ }\r
+\r
+ public AudioDeviceSelectorForm(IMainForm mainForm, IAudioDevicesDetector devicesDetector) {\r
+ InitializeComponent();\r
+ this.devicesDetector = devicesDetector;\r
+ this.mainForm = mainForm;\r
+ findDevicesAnd();\r
+ }\r
+\r
+ private void findDevicesAnd() {\r
+ devicesDetector.findDevices();\r
+ deviceNames = devicesDetector.getDeviceNames();\r
+ foreach (String actual in deviceNames)\r
+ audioDevicesComboBox.Items.Add(actual);\r
+ if (deviceNames.Count > 0) {\r
+ audioDevicesComboBox.SelectedIndex = 0;\r
+ okButton.Enabled = true;\r
+ deviceConnected = true;\r
+ } else {\r
+ DialogResult result = MessageBox.Show(StringResources.CONNECT_AUDIO_DEVICE, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ deviceConnected = false;\r
+ mainForm.disableRecordButton();\r
+ Dispose();\r
+ }\r
+ }\r
+\r
+ private void okButton_Click(object sender, EventArgs e) {\r
+ int index = audioDevicesComboBox.SelectedIndex;\r
+ String value = deviceNames[index];\r
+ mainForm.initWavRecorder(index, value);\r
+ Dispose();\r
+ }\r
+\r
+ public List<String> getDeviceNames() {\r
+ return deviceNames;\r
+ }\r
+\r
+ public bool isDeviceConnected() {\r
+ return deviceConnected;\r
+ }\r
+\r
+ public bool isDisposed() {\r
+ return IsDisposed;\r
+ }\r
+\r
+ public List<MMDevice> getDevices() {\r
+ return devicesDetector.getDevices();\r
+ }\r
+\r
+ private void cancelButton_Click(object sender, EventArgs e)\r
+ {\r
+ Dispose();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+</root>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Management;\r
+using NAudio.CoreAudioApi;\r
+using System.Diagnostics;\r
+\r
+namespace AudioRecorder {\r
+ public class AudioDevicesDetector : IAudioDevicesDetector {\r
+\r
+ private List<String> deviceNames;\r
+ private List<MMDevice> devices;\r
+\r
+ public AudioDevicesDetector() {\r
+ deviceNames = new List<String>();\r
+ devices = new List<MMDevice>();\r
+ }\r
+\r
+ public void findDevices() {\r
+ var deviceEnum = new MMDeviceEnumerator();\r
+ MMDeviceCollection d = deviceEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);\r
+ foreach (MMDevice actualDevice in d)\r
+ {\r
+ deviceNames.Add(actualDevice.FriendlyName);\r
+ devices.Add(actualDevice);\r
+ }\r
+ }\r
+\r
+ protected virtual ManagementObjectSearcher newManagementObjectSearcher() {\r
+ return new ManagementObjectSearcher(StringResources.QUERY_STRING);\r
+ }\r
+\r
+ public List<String> getDeviceNames() {\r
+ return deviceNames;\r
+ }\r
+\r
+ public List<MMDevice> getDevices() {\r
+ return devices;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProjectGuid>{616D8912-16A4-493B-BC45-53BF2A5D9B92}</ProjectGuid>\r
+ <OutputType>WinExe</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>AudioRecorder</RootNamespace>\r
+ <AssemblyName>AudioRecorder</AssemblyName>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <TargetFrameworkProfile />\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <PlatformTarget>AnyCPU</PlatformTarget>\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <DebugType>full</DebugType>\r
+ <Optimize>false</Optimize>\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <PlatformTarget>AnyCPU</PlatformTarget>\r
+ <DebugType>pdbonly</DebugType>\r
+ <Optimize>true</Optimize>\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <OutputPath>bin\x86\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <DebugType>full</DebugType>\r
+ <PlatformTarget>x86</PlatformTarget>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">\r
+ <OutputPath>bin\x86\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <Optimize>true</Optimize>\r
+ <DebugType>pdbonly</DebugType>\r
+ <PlatformTarget>x86</PlatformTarget>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="Microsoft.CSharp" />\r
+ <Reference Include="NAudio, Version=1.8.3.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\NAudio.1.8.3\lib\net35\NAudio.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="Newtonsoft.Json">\r
+ <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net20\Newtonsoft.Json.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.configuration" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Deployment" />\r
+ <Reference Include="System.Drawing" />\r
+ <Reference Include="System.Management" />\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="System.Xml" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="AudioDevicesDetector.cs" />\r
+ <Compile Include="AudioDeviceSelectorForm.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="AudioDeviceSelectorForm.Designer.cs">\r
+ <DependentUpon>AudioDeviceSelectorForm.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="CustomTrackBar.cs">\r
+ <SubType>UserControl</SubType>\r
+ </Compile>\r
+ <Compile Include="CustomTrackBar.Designer.cs">\r
+ <DependentUpon>CustomTrackBar.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="FileNameForm.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="FileNameForm.Designer.cs">\r
+ <DependentUpon>FileNameForm.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="FileWorker.cs" />\r
+ <Compile Include="IAudioDeviceSelectorForm.cs" />\r
+ <Compile Include="IFileWorker.cs" />\r
+ <Compile Include="IMainForm.cs" />\r
+ <Compile Include="ISettings.cs" />\r
+ <Compile Include="JsonSettings.cs" />\r
+ <Compile Include="KnownTypesBinder.cs" />\r
+ <Compile Include="MainForm.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="MainForm.Designer.cs">\r
+ <DependentUpon>MainForm.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="IAudioDevicesDetector.cs" />\r
+ <Compile Include="IRecorder.cs" />\r
+ <Compile Include="ITimeCodeWorker.cs" />\r
+ <Compile Include="Pause.cs" />\r
+ <Compile Include="Program.cs" />\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ <Compile Include="Resources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTime>True</DesignTime>\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="Settings.cs" />\r
+ <Compile Include="StringResources.cs" />\r
+ <Compile Include="TimeCodeWorker.cs" />\r
+ <Compile Include="WavRecorder.cs" />\r
+ <EmbeddedResource Include="AudioDeviceSelectorForm.resx">\r
+ <DependentUpon>AudioDeviceSelectorForm.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="CustomTrackBar.resx">\r
+ <DependentUpon>CustomTrackBar.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="FileNameForm.resx">\r
+ <DependentUpon>FileNameForm.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="MainForm.resx">\r
+ <DependentUpon>MainForm.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="Properties\Resources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
+ <Compile Include="Properties\Resources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ <DesignTime>True</DesignTime>\r
+ </Compile>\r
+ <EmbeddedResource Include="Resources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ </EmbeddedResource>\r
+ <None Include="packages.config" />\r
+ <None Include="Properties\Settings.settings">\r
+ <Generator>SettingsSingleFileGenerator</Generator>\r
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>\r
+ </None>\r
+ <Compile Include="Properties\Settings.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DependentUpon>Settings.settings</DependentUpon>\r
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>\r
+ </Compile>\r
+ <None Include="Resources\configuration.json">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="App.config">\r
+ <SubType>Designer</SubType>\r
+ </None>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Content Include="Resources\pause.png" />\r
+ <Content Include="Resources\record.png" />\r
+ <Content Include="Resources\stop.png" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <ProjectReference Include="..\OctopusClient\OctopusClient.csproj">\r
+ <Project>{8cc7c930-9dbf-487b-aed5-776937a649d5}</Project>\r
+ <Name>OctopusClient</Name>\r
+ </ProjectReference>\r
+ </ItemGroup>\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+ <PropertyGroup>\r
+ <PreBuildEvent>\r
+ </PreBuildEvent>\r
+ </PropertyGroup>\r
+ <PropertyGroup>\r
+ <PostBuildEvent>\r
+ </PostBuildEvent>\r
+ </PropertyGroup>\r
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
+ Other similar extension points exist, see Microsoft.Common.targets.\r
+ <Target Name="BeforeBuild">\r
+ </Target>\r
+ <Target Name="AfterBuild">\r
+ </Target>\r
+ -->\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+namespace AudioRecorder\r
+{\r
+ partial class CustomTrackBar\r
+ {\r
+ /// <summary> \r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary> \r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing)\r
+ {\r
+ if (disposing && (components != null))\r
+ {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Component Designer generated code\r
+\r
+ /// <summary> \r
+ /// Required method for Designer support - do not modify \r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent()\r
+ {\r
+ this.trackBar1 = new System.Windows.Forms.TrackBar();\r
+ this.tickLabel = new System.Windows.Forms.Label();\r
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();\r
+ this.SuspendLayout();\r
+ // \r
+ // trackBar1\r
+ // \r
+ this.trackBar1.Location = new System.Drawing.Point(0, 0);\r
+ this.trackBar1.Name = "trackBar1";\r
+ this.trackBar1.Orientation = System.Windows.Forms.Orientation.Vertical;\r
+ this.trackBar1.Size = new System.Drawing.Size(45, 214);\r
+ this.trackBar1.TabIndex = 0;\r
+ this.trackBar1.TickFrequency = 0;\r
+ this.trackBar1.ValueChanged += new System.EventHandler(this.trackBar1_ValueChanged);\r
+ // \r
+ // tickLabel\r
+ // \r
+ this.tickLabel.AutoSize = true;\r
+ this.tickLabel.ForeColor = System.Drawing.SystemColors.AppWorkspace;\r
+ this.tickLabel.Location = new System.Drawing.Point(19, 100);\r
+ this.tickLabel.Name = "tickLabel";\r
+ this.tickLabel.Size = new System.Drawing.Size(13, 13);\r
+ this.tickLabel.TabIndex = 1;\r
+ this.tickLabel.Text = "_";\r
+ // \r
+ // CustomTrackBar\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.Controls.Add(this.tickLabel);\r
+ this.Controls.Add(this.trackBar1);\r
+ this.Name = "CustomTrackBar";\r
+ this.Size = new System.Drawing.Size(40, 213);\r
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();\r
+ this.ResumeLayout(false);\r
+ this.PerformLayout();\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.TrackBar trackBar1;\r
+ private System.Windows.Forms.Label tickLabel;\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Data;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public partial class CustomTrackBar : UserControl\r
+ {\r
+ public MainForm MainForm { get; set; }\r
+\r
+ public CustomTrackBar()\r
+ {\r
+ InitializeComponent();\r
+ }\r
+\r
+ public void setMinimumMaximumSizesAndVolume(int minimum, int maximum, int value)\r
+ {\r
+ trackBar1.Maximum = maximum;\r
+ trackBar1.Minimum = minimum;\r
+ trackBar1.Value = value;\r
+ }\r
+\r
+ public void setTickLabelLocationByPercentage(int percentage)\r
+ {\r
+ //mert a magasága a trackbarnak 200\r
+ tickLabel.Location = new Point(tickLabel.Location.X, 200 - (percentage * 2));\r
+ }\r
+\r
+ private void trackBar1_ValueChanged(object sender, EventArgs e)\r
+ {\r
+ MainForm.volumeChanged(sender, e);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+</root>
\ No newline at end of file
--- /dev/null
+namespace AudioRecorder {\r
+ partial class FileNameForm {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.octopusIDSelector1 = new OctopusClient.OctopusIDSelector();\r
+ this.SuspendLayout();\r
+ // \r
+ // octopusIDSelector1\r
+ // \r
+ this.octopusIDSelector1.BackColor = System.Drawing.Color.White;\r
+ this.octopusIDSelector1.IDChangedEvent = null;\r
+ this.octopusIDSelector1.Location = new System.Drawing.Point(7, 8);\r
+ this.octopusIDSelector1.Margin = new System.Windows.Forms.Padding(10);\r
+ this.octopusIDSelector1.Name = "octopusIDSelector1";\r
+ this.octopusIDSelector1.Padding = new System.Windows.Forms.Padding(10);\r
+ this.octopusIDSelector1.Size = new System.Drawing.Size(271, 376);\r
+ this.octopusIDSelector1.TabIndex = 5;\r
+ // \r
+ // FileNameForm\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.BackColor = System.Drawing.Color.White;\r
+ this.ClientSize = new System.Drawing.Size(276, 383);\r
+ this.ControlBox = false;\r
+ this.Controls.Add(this.octopusIDSelector1);\r
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;\r
+ this.Name = "FileNameForm";\r
+ this.Text = "File Name";\r
+ this.Load += new System.EventHandler(this.FileNameForm_Load);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+ private OctopusClient.OctopusIDSelector octopusIDSelector1;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Windows.Forms;\r
+using OctopusClient;\r
+\r
+namespace AudioRecorder {\r
+ public partial class FileNameForm : Form {\r
+\r
+ private String result;\r
+ private IMainForm mainForm;\r
+ private ISettings settings;\r
+ public FileNameForm(IMainForm mainForm, ISettings settings) {\r
+ StartPosition = FormStartPosition.CenterParent;\r
+ InitializeComponent();\r
+ this.settings = settings;\r
+ this.mainForm = mainForm;\r
+ octopusIDSelector1.Disposeabel = true;\r
+ octopusIDSelector1.IDChangedEvent = IdChangedEvent;\r
+ octopusIDSelector1.Configuration = new OctopusConfiguration() { Address = settings.getAddress(), Password = settings.getPassword(), UserName = settings.getUserName(), Timeout = settings.getTimeout() };\r
+ octopusIDSelector1.KeyDown += (sender, args) => {\r
+ if (args.KeyCode == Keys.Escape)\r
+ {\r
+ Dispose();\r
+ }\r
+ };\r
+ }\r
+\r
+ private void IdChangedEvent(String id) {\r
+ result = String.Format("{0}.wav", id);\r
+ if (!result.EndsWith(".wav"))\r
+ result = String.Format("{0}{1}", result, StringResources.DOT_WAV);\r
+ mainForm.recordFireEvent(result, id);\r
+ Dispose();\r
+ }\r
+\r
+ private void FileNameForm_Load(object sender, EventArgs e)\r
+ {\r
+\r
+ }\r
+\r
+ private void cancelButton_Click(object sender, EventArgs e)\r
+ {\r
+ Dispose();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+</root>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+\r
+namespace AudioRecorder {\r
+ public class FileWorker : IFileWorker {\r
+\r
+ public void copy(String source, String destination) {\r
+ File.Copy(source, destination, true);\r
+ }\r
+\r
+ public void deleteFiles(List<String> files) {\r
+ foreach (String actual in files)\r
+ if (File.Exists(actual))\r
+ File.Delete(actual);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using NAudio.CoreAudioApi;\r
+using System.Windows.Forms;\r
+namespace AudioRecorder {\r
+ public interface IAudioDeviceSelectorForm {\r
+ DialogResult ShowDialog();\r
+ List<String> getDeviceNames();\r
+ bool isDeviceConnected();\r
+ bool isDisposed();\r
+ List<MMDevice> getDevices();\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using NAudio.CoreAudioApi;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public interface IAudioDevicesDetector\r
+ {\r
+ void findDevices();\r
+ List<String> getDeviceNames();\r
+ List<MMDevice> getDevices();\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace AudioRecorder {\r
+ public interface IFileWorker {\r
+ void copy(String source, String destination);\r
+ void deleteFiles(List<String> files);\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace AudioRecorder {\r
+ public interface IMainForm {\r
+ void initWavRecorder(int index, String selectedAudioName);\r
+ void recordFireEvent(String currentFilePath, String id);\r
+ void disableRecordButton();\r
+\r
+ void setPanelSizeHeight(float height);\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public interface IRecorder\r
+ {\r
+ void StartRecording(String filePath);\r
+ void StopRecording();\r
+ void pauseRecording(bool pausing);\r
+ List<String> getCreatedFiles();\r
+ String getCurentWavFilePath();\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+\r
+namespace AudioRecorder {\r
+ public interface ISettings {\r
+ String getAudioDeviceName();\r
+ String getUncPath();\r
+ int getLoudValue();\r
+ String getWorkingDir();\r
+ Uri getAddress();\r
+ String getUserName();\r
+ String getPassword();\r
+ int getTimeout();\r
+ void addSelectedAudio(String value, String fileName);\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace AudioRecorder {\r
+ public interface ITimeCodeWorker {\r
+ void Start();\r
+ void Stop();\r
+\r
+ void Pause(bool pausing);\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using Newtonsoft.Json;\r
+using System.IO;\r
+namespace AudioRecorder\r
+{\r
+ public class JsonSettings : ISettings\r
+ {\r
+ public String audio_device_name { get; set; }\r
+ public String unc_path { get; set; }\r
+ public int loud_percent { get; set; }\r
+ public String working_dir { get; set; }\r
+\r
+ public Uri address;\r
+ public String userName;\r
+ public String password;\r
+ public int timeout;\r
+\r
+ private JsonSettings()\r
+ {\r
+\r
+ }\r
+\r
+ public static JsonSettings GetInstance(string configFileName)\r
+ {\r
+ string configuration = File.ReadAllText(configFileName);\r
+ KnownTypesBinder knownTypesBinder = new KnownTypesBinder\r
+ {\r
+ KnownTypes = new List<Type> { typeof(String), typeof(String), typeof(String), typeof(int), }\r
+ };\r
+ JsonSerializerSettings settings = new JsonSerializerSettings\r
+ {\r
+ TypeNameHandling = TypeNameHandling.Objects,\r
+ SerializationBinder = knownTypesBinder,\r
+ };\r
+\r
+ return JsonConvert.DeserializeObject<JsonSettings>(configuration, settings);\r
+ }\r
+\r
+ //public void addSelectedAudio(String value, String fileName) { }\r
+ public String getAudioDeviceName()\r
+ {\r
+ return audio_device_name;\r
+ }\r
+ public String getUncPath()\r
+ {\r
+ return unc_path;\r
+ }\r
+\r
+ public int getLoudValue()\r
+ {\r
+ return loud_percent;\r
+ }\r
+\r
+ public String getWorkingDir()\r
+ {\r
+ return working_dir;\r
+ }\r
+\r
+ Uri ISettings.getAddress()\r
+ {\r
+ return address;\r
+ }\r
+\r
+ string ISettings.getUserName()\r
+ {\r
+ return userName;\r
+ }\r
+\r
+ string ISettings.getPassword()\r
+ {\r
+ return password;\r
+ }\r
+\r
+ int ISettings.getTimeout()\r
+ {\r
+ return timeout;\r
+ }\r
+\r
+ public void addSelectedAudio(string value, string fileName)\r
+ {\r
+ try\r
+ {\r
+ string json = File.ReadAllText(fileName);\r
+ dynamic jsonObj = JsonConvert.DeserializeObject(json);\r
+ jsonObj["audio_device_name"] = value;\r
+ string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);\r
+ File.Delete(fileName);\r
+ File.WriteAllText(fileName, output);\r
+ }\r
+ catch (Exception e) { }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using Newtonsoft.Json.Serialization;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public class KnownTypesBinder : ISerializationBinder\r
+ {\r
+ public IList<Type> KnownTypes { get; set; }\r
+\r
+ public Type BindToType(string assemblyName, string typeName)\r
+ {\r
+ return KnownTypes.SingleOrDefault(t => t.Name == typeName);\r
+ }\r
+\r
+ public void BindToName(Type serializedType, out string assemblyName, out string typeName)\r
+ {\r
+ assemblyName = null;\r
+ typeName = serializedType.Name;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+namespace AudioRecorder {\r
+\r
+ partial class MainForm {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));\r
+ this.recordButton = new System.Windows.Forms.Button();\r
+ this.stopButton = new System.Windows.Forms.Button();\r
+ this.timecodeLabel = new System.Windows.Forms.Label();\r
+ this.selectAudioButton = new System.Windows.Forms.Button();\r
+ this.groupBox1 = new System.Windows.Forms.GroupBox();\r
+ this.groupBox4 = new System.Windows.Forms.GroupBox();\r
+ this.pauseButton = new System.Windows.Forms.Button();\r
+ this.groupBox2 = new System.Windows.Forms.GroupBox();\r
+ this.volumePanel = new System.Windows.Forms.Panel();\r
+ this.customTrackBar1 = new AudioRecorder.CustomTrackBar();\r
+ this.fileNameLabel = new System.Windows.Forms.Label();\r
+ this.playButton = new System.Windows.Forms.Button();\r
+ this.groupBox3 = new System.Windows.Forms.GroupBox();\r
+ this.groupBox1.SuspendLayout();\r
+ this.groupBox4.SuspendLayout();\r
+ this.groupBox2.SuspendLayout();\r
+ this.groupBox3.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // recordButton\r
+ // \r
+ this.recordButton.BackColor = System.Drawing.Color.White;\r
+ this.recordButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;\r
+ this.recordButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.recordButton.Image = ((System.Drawing.Image)(resources.GetObject("recordButton.Image")));\r
+ this.recordButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;\r
+ this.recordButton.Location = new System.Drawing.Point(15, 14);\r
+ this.recordButton.Name = "recordButton";\r
+ this.recordButton.Size = new System.Drawing.Size(181, 56);\r
+ this.recordButton.TabIndex = 0;\r
+ this.recordButton.Text = "Record";\r
+ this.recordButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.recordButton.UseVisualStyleBackColor = false;\r
+ this.recordButton.Click += new System.EventHandler(this.record_Click);\r
+ // \r
+ // stopButton\r
+ // \r
+ this.stopButton.BackColor = System.Drawing.Color.White;\r
+ this.stopButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;\r
+ this.stopButton.Enabled = false;\r
+ this.stopButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.stopButton.Image = ((System.Drawing.Image)(resources.GetObject("stopButton.Image")));\r
+ this.stopButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;\r
+ this.stopButton.Location = new System.Drawing.Point(15, 115);\r
+ this.stopButton.Name = "stopButton";\r
+ this.stopButton.Size = new System.Drawing.Size(181, 38);\r
+ this.stopButton.TabIndex = 1;\r
+ this.stopButton.Text = "Stop ";\r
+ this.stopButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.stopButton.UseVisualStyleBackColor = false;\r
+ this.stopButton.Click += new System.EventHandler(this.stop_Click);\r
+ // \r
+ // timecodeLabel\r
+ // \r
+ this.timecodeLabel.AutoSize = true;\r
+ this.timecodeLabel.Font = new System.Drawing.Font("Calibri", 28F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.timecodeLabel.Location = new System.Drawing.Point(9, 15);\r
+ this.timecodeLabel.Name = "timecodeLabel";\r
+ this.timecodeLabel.Size = new System.Drawing.Size(202, 46);\r
+ this.timecodeLabel.TabIndex = 2;\r
+ this.timecodeLabel.Text = "00:00:00:00";\r
+ // \r
+ // selectAudioButton\r
+ // \r
+ this.selectAudioButton.BackColor = System.Drawing.Color.White;\r
+ this.selectAudioButton.Location = new System.Drawing.Point(8, 19);\r
+ this.selectAudioButton.Name = "selectAudioButton";\r
+ this.selectAudioButton.Size = new System.Drawing.Size(307, 23);\r
+ this.selectAudioButton.TabIndex = 3;\r
+ this.selectAudioButton.Text = "Select audio";\r
+ this.selectAudioButton.UseVisualStyleBackColor = false;\r
+ this.selectAudioButton.Click += new System.EventHandler(this.selectAudioButton_Click);\r
+ // \r
+ // groupBox1\r
+ // \r
+ this.groupBox1.Controls.Add(this.groupBox4);\r
+ this.groupBox1.Controls.Add(this.timecodeLabel);\r
+ this.groupBox1.Location = new System.Drawing.Point(15, 12);\r
+ this.groupBox1.Name = "groupBox1";\r
+ this.groupBox1.Size = new System.Drawing.Size(228, 240);\r
+ this.groupBox1.TabIndex = 5;\r
+ this.groupBox1.TabStop = false;\r
+ // \r
+ // groupBox4\r
+ // \r
+ this.groupBox4.Controls.Add(this.pauseButton);\r
+ this.groupBox4.Controls.Add(this.recordButton);\r
+ this.groupBox4.Controls.Add(this.stopButton);\r
+ this.groupBox4.Location = new System.Drawing.Point(8, 62);\r
+ this.groupBox4.Name = "groupBox4";\r
+ this.groupBox4.Size = new System.Drawing.Size(214, 163);\r
+ this.groupBox4.TabIndex = 11;\r
+ this.groupBox4.TabStop = false;\r
+ // \r
+ // pauseButton\r
+ // \r
+ this.pauseButton.BackColor = System.Drawing.Color.White;\r
+ this.pauseButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;\r
+ this.pauseButton.Enabled = false;\r
+ this.pauseButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold);\r
+ this.pauseButton.Image = ((System.Drawing.Image)(resources.GetObject("pauseButton.Image")));\r
+ this.pauseButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;\r
+ this.pauseButton.Location = new System.Drawing.Point(15, 77);\r
+ this.pauseButton.Name = "pauseButton";\r
+ this.pauseButton.Size = new System.Drawing.Size(181, 32);\r
+ this.pauseButton.TabIndex = 3;\r
+ this.pauseButton.Text = "Pause ";\r
+ this.pauseButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.pauseButton.UseVisualStyleBackColor = false;\r
+ this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);\r
+ // \r
+ // groupBox2\r
+ // \r
+ this.groupBox2.Controls.Add(this.volumePanel);\r
+ this.groupBox2.Controls.Add(this.customTrackBar1);\r
+ this.groupBox2.Location = new System.Drawing.Point(262, 12);\r
+ this.groupBox2.Name = "groupBox2";\r
+ this.groupBox2.Size = new System.Drawing.Size(85, 240);\r
+ this.groupBox2.TabIndex = 6;\r
+ this.groupBox2.TabStop = false;\r
+ // \r
+ // volumePanel\r
+ // \r
+ this.volumePanel.Anchor = System.Windows.Forms.AnchorStyles.Bottom;\r
+ this.volumePanel.AutoSize = true;\r
+ this.volumePanel.BackColor = System.Drawing.Color.Transparent;\r
+ this.volumePanel.Location = new System.Drawing.Point(14, 72);\r
+ this.volumePanel.Name = "volumePanel";\r
+ this.volumePanel.Size = new System.Drawing.Size(15, 150);\r
+ this.volumePanel.TabIndex = 4;\r
+ // \r
+ // customTrackBar1\r
+ // \r
+ this.customTrackBar1.Location = new System.Drawing.Point(39, 15);\r
+ this.customTrackBar1.MainForm = null;\r
+ this.customTrackBar1.Name = "customTrackBar1";\r
+ this.customTrackBar1.Size = new System.Drawing.Size(40, 213);\r
+ this.customTrackBar1.TabIndex = 11;\r
+ // \r
+ // fileNameLabel\r
+ // \r
+ this.fileNameLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.fileNameLabel.Location = new System.Drawing.Point(8, 45);\r
+ this.fileNameLabel.Name = "fileNameLabel";\r
+ this.fileNameLabel.Size = new System.Drawing.Size(233, 23);\r
+ this.fileNameLabel.TabIndex = 8;\r
+ // \r
+ // playButton\r
+ // \r
+ this.playButton.BackColor = System.Drawing.Color.White;\r
+ this.playButton.Enabled = false;\r
+ this.playButton.Image = ((System.Drawing.Image)(resources.GetObject("playButton.Image")));\r
+ this.playButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;\r
+ this.playButton.Location = new System.Drawing.Point(247, 45);\r
+ this.playButton.Name = "playButton";\r
+ this.playButton.Size = new System.Drawing.Size(68, 23);\r
+ this.playButton.TabIndex = 9;\r
+ this.playButton.Text = "Play";\r
+ this.playButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.playButton.UseVisualStyleBackColor = false;\r
+ this.playButton.Click += new System.EventHandler(this.playButton_Click);\r
+ // \r
+ // groupBox3\r
+ // \r
+ this.groupBox3.Controls.Add(this.selectAudioButton);\r
+ this.groupBox3.Controls.Add(this.playButton);\r
+ this.groupBox3.Controls.Add(this.fileNameLabel);\r
+ this.groupBox3.Location = new System.Drawing.Point(15, 258);\r
+ this.groupBox3.Name = "groupBox3";\r
+ this.groupBox3.Size = new System.Drawing.Size(332, 86);\r
+ this.groupBox3.TabIndex = 10;\r
+ this.groupBox3.TabStop = false;\r
+ // \r
+ // MainForm\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.BackColor = System.Drawing.Color.White;\r
+ this.ClientSize = new System.Drawing.Size(365, 350);\r
+ this.Controls.Add(this.groupBox3);\r
+ this.Controls.Add(this.groupBox2);\r
+ this.Controls.Add(this.groupBox1);\r
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;\r
+ this.Name = "MainForm";\r
+ this.Text = "AudioRecorder";\r
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);\r
+ this.Load += new System.EventHandler(this.Form1_Load);\r
+ this.groupBox1.ResumeLayout(false);\r
+ this.groupBox1.PerformLayout();\r
+ this.groupBox4.ResumeLayout(false);\r
+ this.groupBox2.ResumeLayout(false);\r
+ this.groupBox2.PerformLayout();\r
+ this.groupBox3.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.Button recordButton;\r
+ private System.Windows.Forms.Button stopButton;\r
+ private System.Windows.Forms.Label timecodeLabel;\r
+ private System.Windows.Forms.Button selectAudioButton;\r
+ private System.Windows.Forms.GroupBox groupBox1;\r
+ private System.Windows.Forms.GroupBox groupBox2;\r
+ private System.Windows.Forms.Label fileNameLabel;\r
+ private System.Windows.Forms.Button playButton;\r
+ private System.Windows.Forms.Button pauseButton;\r
+ private System.Windows.Forms.GroupBox groupBox3;\r
+ private System.Windows.Forms.Panel volumePanel;\r
+ private System.Windows.Forms.GroupBox groupBox4;\r
+ private CustomTrackBar customTrackBar1;\r
+ }\r
+}\r
+\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Diagnostics;\r
+using System.Drawing;\r
+using NAudio.CoreAudioApi;\r
+using System.Windows.Forms;\r
+using System.IO;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public partial class MainForm : Form, IMainForm\r
+ {\r
+\r
+ private const String CONFIG_FILE = "Resources/configuration.json";\r
+\r
+ private IRecorder recorder;\r
+ private ISettings settings;\r
+ private ITimeCodeWorker timeCodeWorker;\r
+ private IAudioDeviceSelectorForm selectorForm;\r
+ private IFileWorker fileWorker;\r
+ private String selectedAudioName;\r
+ private String currentFileName;\r
+ private String currentFilePath;\r
+ private bool recording;\r
+ private Timer countDownTimer;\r
+ private int countDown = 3;\r
+ private Point startingPanelLocation;\r
+ private Point originalPanelLocation;\r
+ private MMDevice currentDevice;\r
+ private bool pausing;\r
+ private float volumeHeight;\r
+\r
+ public MainForm()\r
+ {\r
+ InitializeComponent();\r
+ InitializeControlTexts();\r
+ volumePanel.Paint += panelPaintEvent;\r
+ customTrackBar1.MainForm = this;\r
+ setVolumePanelData();\r
+ try\r
+ {\r
+ settings = JsonSettings.GetInstance(CONFIG_FILE);\r
+ fileWorker = new FileWorker();\r
+ countDownTimer = new Timer();\r
+ countDownTimer.Interval = 1000;\r
+ countDownTimer.Tick += new EventHandler(timer_Tick);\r
+ selectorForm = new AudioDeviceSelectorForm(this);\r
+ if (selectorForm.isDeviceConnected())\r
+ saveAudioDeviceToConfig();\r
+ timeCodeWorker = new TimeCodeWorker(timecodeLabel);\r
+ }\r
+ catch (Exception e)\r
+ {\r
+ MessageBox.Show(e.Message, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+ }\r
+\r
+ private void InitializeControlTexts()\r
+ {\r
+ recordButton.Text = Resources.FELVETEL;\r
+ stopButton.Text = Resources.LEALLITAS;\r
+ pauseButton.Text = Resources.SZUNET;\r
+ selectAudioButton.Text = Resources.VALASSZON_MIKROFONT;\r
+ playButton.Text = Resources.LEJATSZAS;\r
+ }\r
+\r
+ private void setVolumeTrackerEdgesAndValue()\r
+ {\r
+ if (currentDevice != null)\r
+ {\r
+ customTrackBar1.setMinimumMaximumSizesAndVolume((int)currentDevice.AudioEndpointVolume.VolumeRange.MinDecibels,\r
+ (int)currentDevice.AudioEndpointVolume.VolumeRange.MaxDecibels,\r
+ (int)currentDevice.AudioEndpointVolume.MasterVolumeLevel);\r
+ }\r
+ }\r
+\r
+ private void setVolumePanelData()\r
+ {\r
+ originalPanelLocation = volumePanel.Location;\r
+ startingPanelLocation = volumePanel.Location;\r
+ startingPanelLocation.X = 12;\r
+ startingPanelLocation.Y = 230;\r
+ }\r
+\r
+ private void saveAudioDeviceToConfig()\r
+ {\r
+ if (String.IsNullOrEmpty(settings.getAudioDeviceName()))\r
+ recordButton.Enabled = false;\r
+ else\r
+ {\r
+ List<String> devices = selectorForm.getDeviceNames();\r
+ int indexOfDeviceName = devices.IndexOf(settings.getAudioDeviceName());\r
+ if (indexOfDeviceName == -1)\r
+ showAudioDeviceSelectorForm();\r
+ else\r
+ initWavRecorder(indexOfDeviceName, settings.getAudioDeviceName());\r
+ }\r
+ }\r
+\r
+ public void initWavRecorder(int index, String selectedAudioName)\r
+ {\r
+ int inputDeviceIndex = index;\r
+ this.selectedAudioName = selectedAudioName;\r
+ currentDevice = selectorForm.getDevices()[index];\r
+ recorder = new WavRecorder(inputDeviceIndex, currentDevice, this);\r
+ recordButton.Enabled = true;\r
+ recordButton.BackColor = Color.Lime;\r
+ selectAudioButton.Text = selectedAudioName;\r
+ settings.addSelectedAudio(selectedAudioName, CONFIG_FILE);\r
+ setVolumeTrackerEdgesAndValue();\r
+ customTrackBar1.setTickLabelLocationByPercentage(settings.getLoudValue());\r
+ }\r
+\r
+ public void setPanelSizeHeight(float height)\r
+ {\r
+ Debug.WriteLine(String.Format("height {0}", height));\r
+ volumeHeight = height;\r
+ //volumePanel.Invalidate();\r
+ //volumePanel.Update();\r
+ volumePanel.Refresh();\r
+ }\r
+\r
+ private void panelPaintEvent(object sender, PaintEventArgs e)\r
+ {\r
+ //Debug.WriteLine(String.Format("volumeHeight {0}", volumeHeight));\r
+ if (volumeHeight >= 200)\r
+ return;\r
+ if (!recording)\r
+ {\r
+ volumePanel.Controls.Clear();\r
+ return;\r
+ }\r
+ if (volumeHeight > 500)\r
+ return;\r
+ float volumePercent = 100 / (200 / volumeHeight);// / 10;\r
+ Graphics g = e.Graphics;\r
+ Point panelLocation = startingPanelLocation;\r
+ panelLocation.Y = panelLocation.Y - (int)volumeHeight;\r
+ volumePanel.Location = panelLocation;\r
+ //volumeHeightnak mennyi a max értéke? akkor már tudnám, hogy az adott érték az hány %, és azt\r
+ //hasonlítanám össze a getLoudValue()-val\r
+ Color color = (volumePercent > settings.getLoudValue()) ? Color.Red : Color.Chartreuse;\r
+ SolidBrush brush = new SolidBrush(color);\r
+ //itt is a Rectangle.height értéke a volumeHeight százalékból lenne kiszámolva\r
+ //ha 70% a volumeHeight akkor a magasság is 70%-a lenne a területnek\r
+ Rectangle rectangle = new Rectangle(0, -10, 500, (int)volumeHeight);\r
+ g.FillRectangle(brush, rectangle);\r
+ }\r
+\r
+ private void Form1_Load(object sender, EventArgs e)\r
+ {\r
+\r
+ }\r
+\r
+ private void stop_Click(object sender, EventArgs e)\r
+ {\r
+ stopRecording();\r
+ }\r
+\r
+ private void stopRecording()\r
+ {\r
+ try\r
+ {\r
+ recording = false;\r
+ recordButton.Enabled = true;\r
+ stopButton.Enabled = false;\r
+ selectAudioButton.Enabled = true;\r
+ pauseButton.Enabled = false;\r
+ recorder.StopRecording();\r
+ timeCodeWorker.Stop();\r
+ copyFileToUncPath();\r
+ playButton.Enabled = true;\r
+ stopButton.BackColor = Color.White;\r
+ recordButton.BackColor = Color.Lime;\r
+ volumePanel.Refresh();\r
+ }\r
+ catch (Exception e)\r
+ {\r
+ MessageBox.Show(e.Message, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+ }\r
+\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
+ fileWorker.copy(recorder.getCurentWavFilePath(), wavUncPath);\r
+ }\r
+\r
+ private void record_Click(object sender, EventArgs e)\r
+ {\r
+ FileNameForm nameForm = new FileNameForm(this, settings);\r
+ nameForm.ShowDialog();\r
+ }\r
+\r
+ private void startRecord()\r
+ {\r
+ try\r
+ {\r
+ recording = true;\r
+ recorder.StartRecording(currentFilePath);\r
+ timeCodeWorker.Start();\r
+ pauseButton.Enabled = true;\r
+ recordButton.Enabled = false;\r
+ stopButton.Enabled = true;\r
+ selectAudioButton.Enabled = false;\r
+ playButton.Enabled = false;\r
+ stopButton.BackColor = Color.Red;\r
+ recordButton.BackColor = Color.White;\r
+ }\r
+ catch (Exception e)\r
+ {\r
+ MessageBox.Show(e.Message, StringResources.ERROR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+ }\r
+\r
+ public void recordFireEvent(String currentFileName, string id)\r
+ {\r
+ recordButton.Enabled = false;\r
+ String path = String.Format("{0}\\{1}", settings.getWorkingDir(), id);\r
+ if (!Directory.Exists(path))\r
+ Directory.CreateDirectory(path);\r
+ SetCurrentFileNameAndPath(currentFileName, path);\r
+ fileNameLabel.Text = currentFileName;\r
+ setToolTipToFileNameLabel(currentFilePath);\r
+ countDownTimer.Start();\r
+ }\r
+\r
+ private void SetCurrentFileNameAndPath(string currentFileName, string path)\r
+ {\r
+ String filePath = String.Format("{0}\\{1}", path, currentFileName);\r
+ int i = 0;\r
+ this.currentFileName = currentFileName;\r
+ currentFilePath = String.Format("{0}\\{1}", path, currentFileName);\r
+ while (File.Exists(this.currentFilePath)) {\r
+ this.currentFileName = File.Exists(filePath) ? currentFileName.Insert(currentFileName.IndexOf("."), String.Format("_{0}", i)) : currentFileName;\r
+ currentFilePath = String.Format("{0}\\{1}", path, this.currentFileName);\r
+ i++;\r
+ }\r
+\r
+ }\r
+\r
+ void timer_Tick(object sender, EventArgs e)\r
+ {\r
+ recordButton.Text = countDown.ToString();\r
+ countDown -= 1;\r
+ if (countDown < 0)\r
+ {\r
+ countDownTimer.Stop();\r
+ recordButton.Text = StringResources.RECORD;\r
+ startRecord();\r
+ countDown = 3;\r
+ }\r
+ }\r
+\r
+ private void setToolTipToFileNameLabel(String filePath)\r
+ {\r
+ ToolTip toolTip = new ToolTip();\r
+ String uncPath = String.Format("{0}{1}{2}", settings.getUncPath(), Path.DirectorySeparatorChar, currentFileName);\r
+ String tip = String.Format("{0}\n{1}", filePath, uncPath);\r
+ toolTip.SetToolTip(fileNameLabel, tip);\r
+ }\r
+\r
+ private void selectAudioButton_Click(object sender, EventArgs e)\r
+ {\r
+ showAudioDeviceSelectorForm();\r
+ }\r
+\r
+ private void showAudioDeviceSelectorForm()\r
+ {\r
+ selectorForm = new AudioDeviceSelectorForm(this);\r
+ if (!selectorForm.isDisposed())\r
+ selectorForm.ShowDialog();\r
+ }\r
+\r
+ private void MainForm_FormClosing(object sender, FormClosingEventArgs e)\r
+ {\r
+ if (recording)\r
+ {\r
+ DialogResult result = MessageBox.Show(StringResources.ARE_YOU_SURE_TO_QUIT_DURING_RECORDING,\r
+ StringResources.EXIT_TITLE, MessageBoxButtons.YesNo);\r
+ if (result == DialogResult.Yes)\r
+ {\r
+ stopRecording();\r
+ deleteTemporariFiles();\r
+ }\r
+ else\r
+ e.Cancel = true;\r
+ }\r
+ else\r
+ {\r
+ if (String.IsNullOrEmpty(settings.getAudioDeviceName()))\r
+ settings.addSelectedAudio(selectedAudioName, CONFIG_FILE);\r
+ deleteTemporariFiles();\r
+ }\r
+ }\r
+\r
+ private void deleteTemporariFiles()\r
+ {\r
+ if (recorder != null)\r
+ {\r
+ List<String> createdFiles = recorder.getCreatedFiles();\r
+ fileWorker.deleteFiles(createdFiles);\r
+ }\r
+ }\r
+\r
+ public void disableRecordButton()\r
+ {\r
+ recordButton.Enabled = false;\r
+ }\r
+\r
+ private void playButton_Click(object sender, EventArgs e)\r
+ {\r
+ Process process = new Process();\r
+ ProcessStartInfo startInfo = new ProcessStartInfo();\r
+ startInfo.FileName = new FileInfo(currentFileName).FullName;\r
+ process.StartInfo = startInfo;\r
+ process.Start();\r
+ }\r
+\r
+ private void volumeTrackBar_ValueChanged(object sender, EventArgs e)\r
+ {\r
+ TrackBar trackbar = sender as TrackBar;\r
+ if (trackbar == null)\r
+ return;\r
+ if (currentDevice == null)\r
+ return;\r
+ int value = trackbar.Value;\r
+ currentDevice.AudioEndpointVolume.MasterVolumeLevel = value;\r
+ }\r
+\r
+ private void pauseButton_Click(object sender, EventArgs e)\r
+ {\r
+ pausing = !pausing;\r
+ recorder.pauseRecording(pausing);\r
+ timeCodeWorker.Pause(pausing);\r
+ }\r
+\r
+ public void volumeChanged(object sender, EventArgs e)\r
+ {\r
+ TrackBar trackbar = sender as TrackBar;\r
+ if (trackbar == null)\r
+ return;\r
+ if (currentDevice == null)\r
+ return;\r
+ int value = trackbar.Value;\r
+ currentDevice.AudioEndpointVolume.MasterVolumeLevel = value;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
+ <data name="recordButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>\r
+ iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAABHxJREFUSEuV\r
+ lntXGlcUxVldq5+jDCKJ7QyOIAIqIvj4BM33yR/N92oSBfGRiLaV9JGmicFU06rQILTE073vAwaEaO5a\r
+ Z8nCmftj77PPnQndtuThwy92o/FExXEf7US8A1S94nhtFj/zO/6P1/Bac9vnr91k8sstJ/7ttuOd7EXj\r
+ jVcz6U5jMS9Xy0X5uLqmip/5Hf/Ha3gt7+G9Zpu7rZ2YF8HNR/sxv9lcKoisr9+peO3+pN/kvdzDbPfp\r
+ VYlMx2BX6yyT647adFxdr61LF6r/XVmVk9RCdzviXZaj/rLZdvTaDnv5ctiV84WlkZsO1zXq49qa/AcI\r
+ Qe3iirQKRfkAq9+lF4V7UYDZfnAZGy8uFvIjNw/WNSAKBEUdgDrFVWkBQtA/+aJcLi3LRW5ZXs9mhW7d\r
+ sJdNBqx2m420TYOMosKKXKEIauYLPdA5gvQXXDqbX5KXfqa7hZ4OBAm/4gEDMgrConXsD0Ed2DYAQlAs\r
+ 6G+4Y0F/ZnPyLrModViLkWkyvQrG2WGcR6VRg1b7PQLE9qiB61nnBClF+R7oxIDezi3I69S8/OKnBSpP\r
+ 1JxyYDlDN0E6DEoRw6D6U9DW0TYDeg9IDwRIEPTH7Lz8nszKy0RWkNoGWbDTfcTBVaBAtBkG2kZFDALV\r
+ XBpFVMM6BURbl1Og4wDolQJl5NeZjFL4/J7fKYMV2p2IVy/wS3sgJO7K2GYVqSAYEBWdDll3nFqQNyhC\r
+ qOg3BUrLzwC9mE7LUTwlB18npex4ByGehw00nbb1FQWsM4l7b8JANQTRtr4igGCbBmUCoDn50UvJD+6s\r
+ VKeSGBG3zoS2P8AyO0OEB6Nte2Rte4t6AwhB1jZtnVZUm56TnwAh6PCbWTlAVaHu+f2EVMJuWwEbueEZ\r
+ 6lunFPVAWlHQOvZHgaCG1llFPdBUQvbuz8juvRmePO0Q0lM/zS4OWBecIWsdbbOKLOgF1ChFBmQV7QNi\r
+ QTsAbcd82YrGqbDOHlaPkaqz+ZxKHUFKke0REweYAqE/7JEFDfQIavZRzxQo0QdNTks5Oi2liCclxz3g\r
+ WHx35CY7CmTCwB4NKAqCrHWAaEUAARIEVZQiQFAbkbg8BWzTcc1YYBh3JrwG1dwA0TqEwYJoHdUcqh7p\r
+ /jwDRIN8qUz6Wg1qc4KguDxxPPkeTw3A9ODzuEFwTtgTDcoORTvVAxFStSCrCGqUIsBK6JMGefLYcRWI\r
+ 9YTAsKuPNi4e3jsT8WYfZMJg+kPrgiAmjv2hIvaIkA0LMpBglb5y+4c3Fx8dgNYOp5JdWqeDgNMhoMhG\r
+ W/UIEIJ0jzxl3SgQ62nY65bC7uDjiYsPSZzorf2pGa1oaIYGQEYR+/PY9GhU0cotx70c+37D1wG+FuzF\r
+ +iBlHUqFwdh2G4hl+ob77vBew19VmfC7BNkg9BQFNh1XtLEc9lpj32eGl7I37NZKjtdkj2y0byuq2kRA\r
+ 0LPaWBvHLROkB4wzZ4iDyw2pMFj8bkMPdYPX8p4bAfmcxdnhwPJEwoZVKK/jb5tlPld5gvCa3pyNXaHQ\r
+ /xR4sIm4FsxbAAAAAElFTkSuQmCC\r
+</value>\r
+ </data>\r
+ <data name="stopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>\r
+ iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAglJREFUSEvt\r
+ lFdPYnEUxOmEovTQBFFBegcRjFRFiqGFDqH6afyuPvo83nOzEHbXyH/3YbMPTjLJDTn3zI8hHMG3/ktJ\r
+ RSLRq1gsfuOewWKapXe4Zynnr0WDVqv1fTwe4+Xlhck0S+/8CPlaRPMny9frNRaLBdrtNrgA+tZH9emi\r
+ Q282GyyXS8xmM56+3++j2+3uKjuqT5eSV6sV5vM5JpMJhsMher0eT95sNvH09PR3AURLFRDtaDTiaTud\r
+ Dp6fn1Gv11GtVlEul1EoFNgDttvtnpYqGAwGfAWtVguNRoOnfXh4QLFYxP39PbLZLG5ubtgDptPpTxUQ\r
+ ba1Ww+PjI0qlEk+by+WQyWSQTCYRi8UQDofZAw5pqYJKpbKnvb29RTqdRiKRQCQSQTAYhM/ng9vtZg8g\r
+ 2l0F+Xyep6UKiDYajSIUCvFLPR4PLi8v4XQ6Ybfb2QOogru7O542lUohHo/ztIFAAF6vF1dXVzg/P4fD\r
+ 4aA/GEwmE/R6PXsAVUC0tHRHSxVcXFzwtDabDWazGQaDARqNBmq1GgqFgj2AfjC/34/r6+s97dnZGSwW\r
+ C4xGI3Q6HU5PT6FSqSCXyyGRSHbLjwcIhcI3WuhyuX6r4JBWKpWCmz1cTGY6Fa8ymeydSMlarRYnJydQ\r
+ KpXgPqfL+evSnd85Hz92nOjk0iDzueZMs2zn+lv/WALBB77ufbz/1a4AAAAAAElFTkSuQmCC\r
+</value>\r
+ </data>\r
+ <data name="pauseButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>\r
+ iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAT1JREFUSEvt\r
+ lEGLgmAQhqVYijwpeohIOol0EcmLEV4i8pTSJbVO1Z9p/+t26/yukxa40wdzaw89MDDMPMPrxU/78C/5\r
+ 6nQ6391u90pFPc3qVQup16YSL8Ph8JbnOYqiAPXNcQupx6i+5oeOzufzvainWbN+IvVe8Tw6nU44Ho+g\r
+ Wb1qIfUYOBwO2O/3KMsSu91OGSD0GNhut8iyDGmaYrPZKAOEHgNJkmC9XmO1WmG5XCoDhB4DcRxjsVhg\r
+ Pp8jiiJlgNBjIAxDzGYzBEEA3/eVAUKPgel0Cs/z4LruvWhWr1pIPQYmkwkcx8F4PMZoNFIGCD0GbNuG\r
+ ZVkwTROGYSgDhB4Duq5jMBig3++j1+spA4Qeg373h/yoV0+A1GPQg3Wr6nFE/aWqv0g9Bj25dHxtivqX\r
+ z3VVEu/DW9G0X4qI8GE5H4QmAAAAAElFTkSuQmCC\r
+</value>\r
+ </data>\r
+ <data name="playButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>\r
+ iVBORw0KGgoAAAANSUhEUgAAAAkAAAALCAYAAACtWacbAAAABGdBTUEAALGPC/xhBQAAANtJREFUKFN9\r
+ kD1qhEAAhf1JUGx1EcRiBQsFLawEG1nEykJ2QcRS8Ba7B9iL5Fg5QaqIhWDx8kYTzJIlDz6Yme/NMDMS\r
+ cyZ3chSTp1EUZYyiaFFVdeL4yqWXzTwGwzCgbVs4jjOx/M6106b2rKUfyrKEpmni1De6w1b5LvV9j67r\r
+ UNc1iqKA67qzLMuf9O1aapoGVVWtMssyJEmCIAhgmiboP9ZSnudI0xRxHMP3fXE36Lo+0+0nhWEIz/Ng\r
+ 2zYMwxC7J/J4J8uyfsunrxvJQkThRl7Jn1zIPz8uSV/nWE9kicDiSwAAAABJRU5ErkJggg==\r
+</value>\r
+ </data>\r
+ <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>162</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+\r
+namespace AudioRecorder\r
+{\r
+ class Pause\r
+ {\r
+ public int Hours { get; set; }\r
+ public int Minutes { get; set; }\r
+ public int Seconds { get; set; }\r
+ public int Milliseconds { get; set; }\r
+\r
+ public Pause(int hours, int minutes, int seconds, int millisseconds)\r
+ {\r
+ Hours = hours;\r
+ Minutes = minutes;\r
+ Seconds = seconds;\r
+ Milliseconds = millisseconds;\r
+ }\r
+\r
+ public void subtractDateTime(DateTime actual) {\r
+ Hours = actual.Hour - Hours;\r
+ Minutes = actual.Minute - Minutes;\r
+ Seconds = actual.Second - Seconds;\r
+ Milliseconds = (actual.Millisecond - Milliseconds);\r
+ }\r
+\r
+ public override String ToString()\r
+ {\r
+ return String.Format("{0:00}:{1:00}:{2:00}:{3:00}",\r
+ Hours,\r
+ Minutes,\r
+ Seconds,\r
+ Milliseconds);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Windows.Forms;\r
+\r
+namespace AudioRecorder {\r
+ static class Program {\r
+ /// <summary>\r
+ /// The main entry point for the application.\r
+ /// </summary>\r
+ [STAThread]\r
+ static void Main() {\r
+ Application.EnableVisualStyles();\r
+ Application.SetCompatibleTextRenderingDefault(false);\r
+ Application.Run(new MainForm());\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+// General Information about an assembly is controlled through the following \r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+[assembly: AssemblyTitle("AudioRecorder")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("AudioRecorder")]\r
+[assembly: AssemblyCopyright("Copyright © 2017")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// Setting ComVisible to false makes the types in this assembly not visible \r
+// to COM components. If you need to access a type in this assembly from \r
+// COM, set the ComVisible attribute to true on that type.\r
+[assembly: ComVisible(false)]\r
+\r
+// The following GUID is for the ID of the typelib if this project is exposed to COM\r
+[assembly: Guid("bfc274c4-17c8-445f-9590-ec21b12db48a")]\r
+\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version \r
+// Build Number\r
+// Revision\r
+//\r
+// 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.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace AudioRecorder.Properties {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AudioRecorder.Properties.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Felvétel.\r
+ /// </summary>\r
+ internal static string FELVETEL {\r
+ get {\r
+ return ResourceManager.GetString("FELVETEL", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Leállítás.\r
+ /// </summary>\r
+ internal static string LEALLITAS {\r
+ get {\r
+ return ResourceManager.GetString("LEALLITAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Lejátszás.\r
+ /// </summary>\r
+ internal static string LEJATSZAS {\r
+ get {\r
+ return ResourceManager.GetString("LEJATSZAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Szunet.\r
+ /// </summary>\r
+ internal static string SZUNET {\r
+ get {\r
+ return ResourceManager.GetString("SZUNET", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Válasszon mikrofont.\r
+ /// </summary>\r
+ internal static string VALASSZON_MIKROFONT {\r
+ get {\r
+ return ResourceManager.GetString("VALASSZON_MIKROFONT", resourceCulture);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+</root>
\ No newline at end of file
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace AudioRecorder.Properties {\r
+ \r
+ \r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]\r
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r
+ \r
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r
+ \r
+ public static Settings Default {\r
+ get {\r
+ return defaultInstance;\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version='1.0' encoding='utf-8'?>\r
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">\r
+ <Profiles>\r
+ <Profile Name="(Default)" />\r
+ </Profiles>\r
+ <Settings />\r
+</SettingsFile>\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace AudioRecorder {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AudioRecorder.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Felvétel.\r
+ /// </summary>\r
+ internal static string FELVETEL {\r
+ get {\r
+ return ResourceManager.GetString("FELVETEL", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Leállítás.\r
+ /// </summary>\r
+ internal static string LEALLITAS {\r
+ get {\r
+ return ResourceManager.GetString("LEALLITAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Lejátszás.\r
+ /// </summary>\r
+ internal static string LEJATSZAS {\r
+ get {\r
+ return ResourceManager.GetString("LEJATSZAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Mégse.\r
+ /// </summary>\r
+ internal static string MEGSE {\r
+ get {\r
+ return ResourceManager.GetString("MEGSE", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Mikrofon választás.\r
+ /// </summary>\r
+ internal static string MIKROFON_VALASZTAS {\r
+ get {\r
+ return ResourceManager.GetString("MIKROFON_VALASZTAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Szunet.\r
+ /// </summary>\r
+ internal static string SZUNET {\r
+ get {\r
+ return ResourceManager.GetString("SZUNET", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Válasszon mikrofont.\r
+ /// </summary>\r
+ internal static string VALASSZON_MIKROFONT {\r
+ get {\r
+ return ResourceManager.GetString("VALASSZON_MIKROFONT", resourceCulture);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <data name="FELVETEL" xml:space="preserve">\r
+ <value>Felvétel</value>\r
+ </data>\r
+ <data name="LEALLITAS" xml:space="preserve">\r
+ <value>Leállítás</value>\r
+ </data>\r
+ <data name="LEJATSZAS" xml:space="preserve">\r
+ <value>Lejátszás</value>\r
+ </data>\r
+ <data name="MEGSE" xml:space="preserve">\r
+ <value>Mégse</value>\r
+ </data>\r
+ <data name="MIKROFON_VALASZTAS" xml:space="preserve">\r
+ <value>Mikrofon választás</value>\r
+ </data>\r
+ <data name="SZUNET" xml:space="preserve">\r
+ <value>Szunet</value>\r
+ </data>\r
+ <data name="VALASSZON_MIKROFONT" xml:space="preserve">\r
+ <value>Válasszon mikrofont</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+{\r
+ "audio_device_name": "",\r
+ "unc_path": "\\\\store.in.user.hu\\upload",\r
+ "working_dir": "C:\\temp",\r
+ "loud_percent": 30,\r
+ "address": "http://localhost:8080/services/rest/octopus/",\r
+ "userName": "dani",\r
+ "password": "dani",\r
+ "timeout": 1000\r
+}\r
--- /dev/null
+using System;\r
+using System.Configuration;\r
+using System.IO;\r
+namespace AudioRecorder\r
+{\r
+ class Settings \r
+ {\r
+\r
+ private String audioDeviceName;\r
+ private String uncPath;\r
+ private int loudPercent;\r
+\r
+ public Settings()\r
+ {\r
+ uncPath = ConfigurationManager.AppSettings[StringResources.UNC_PATH_KEY];\r
+ audioDeviceName = ConfigurationManager.AppSettings[StringResources.AUDIO_DEVICE_NAME_KEY];\r
+ try\r
+ {\r
+ loudPercent = Int32.Parse(ConfigurationManager.AppSettings[StringResources.LOUD_PERCENT]);\r
+ }\r
+ catch\r
+ {\r
+ throw new Exception(StringResources.EXCEPTION_WRONG_LOUD_VALUE);\r
+ }\r
+ }\r
+\r
+ public void addSelectedAudio(String value)\r
+ {\r
+ Configuration config = ConfigurationManager.OpenExeConfiguration(\r
+ String.Format("{0}{1}{2}", Environment.CurrentDirectory, Path.DirectorySeparatorChar, StringResources.CONFIG_NAME));\r
+ config.AppSettings.Settings.Remove(StringResources.AUDIO_DEVICE_NAME_KEY);\r
+ config.AppSettings.Settings.Add(StringResources.AUDIO_DEVICE_NAME_KEY, value);\r
+ config.Save(ConfigurationSaveMode.Minimal);\r
+ }\r
+\r
+ public String getAudioDeviceName()\r
+ {\r
+ return audioDeviceName;\r
+ }\r
+ public String getUncPath()\r
+ {\r
+ return uncPath;\r
+ }\r
+\r
+ public int getLoudValue()\r
+ {\r
+ return loudPercent;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace AudioRecorder {\r
+ public class StringResources {\r
+\r
+ public const String CONFIG_NAME = "AudioRecorder.exe";\r
+ public const String AUDIO_DEVICE_NAME_KEY = "AUDIO_DEVICE_NAME";\r
+ public const String UNC_PATH_KEY = "UNC_PATH";\r
+ public const String LOUD_PERCENT = "LOUD_PERCENT";\r
+ public const String TEMP = "TEMP";\r
+ public const String AUDIO_RECORDER = "AudioRecorder";\r
+ public const String EXTENSION = "wav";\r
+ public const String QUERY_STRING = "SELECT Name FROM Win32_SoundDevice";\r
+ public const String MP3 = "mp3";\r
+ public const String DOT_WAV = ".wav";\r
+ public const String ARE_YOU_SURE_TO_QUIT_DURING_RECORDING = "Are you sure to want to quit during recording?";\r
+ public const String EXIT_TITLE = "Exit AudioRecorder";\r
+ public const String RECORD = "Record";\r
+\r
+ public const String EXCEPTION_WAV_FILE_CAN_NOT_BE_NULL = "wavFile parameter can not be null.";\r
+ public const String EXCEPTION_WRONG_LOUD_VALUE = "The \"LOUD_VALUE\" paramtere is not a number in the configuration.";\r
+ public const String CONNECT_AUDIO_DEVICE = "Connect an audio device.";\r
+ public const String ERROR_TITLE = "Error";\r
+\r
+ public static String TEST_FILE_PATH = String.Format("{0}{1}testFiles\\test.wav", Environment.CurrentDirectory, System.IO.Path.DirectorySeparatorChar);\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Windows.Forms;\r
+using System.Diagnostics;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public class TimeCodeWorker : ITimeCodeWorker\r
+ {\r
+ private Label timecodeLabel;\r
+ private DateTime dateTime = new DateTime();\r
+ protected Timer timer;\r
+ private DateTime startTime;\r
+ private int frame = 0;\r
+ private bool pausing;\r
+ private String previousText;\r
+ private Pause pause;\r
+ private bool added;\r
+\r
+ public TimeCodeWorker(Label timecodeLabel)\r
+ {\r
+ this.timecodeLabel = timecodeLabel;\r
+ timer = new Timer();\r
+ }\r
+\r
+ void timer_Tick(object sender, EventArgs e)\r
+ {\r
+ if (!pausing)\r
+ {\r
+ DateTime endTime = DateTime.Now;\r
+ dateTime = endTime;\r
+ addPauseToStartTime();\r
+ TimeSpan timeSpan = dateTime.Subtract(startTime);\r
+ frame = (timeSpan.Milliseconds / 41);\r
+ String text = String.Format("{0:00}:{1:00}:{2:00}:{3:00}",\r
+ timeSpan.Hours,\r
+ timeSpan.Minutes,\r
+ timeSpan.Seconds,\r
+ frame);\r
+ if (!String.IsNullOrEmpty(previousText))\r
+ if (!previousText.Equals(text))\r
+ timecodeLabel.Text = text;\r
+ previousText = text;\r
+ }\r
+ }\r
+\r
+ private void addPauseToStartTime()\r
+ {\r
+ if (pause != null & !added)\r
+ {\r
+ startTime = startTime.AddHours(pause.Hours).\r
+ AddMinutes(pause.Minutes).\r
+ AddSeconds(pause.Seconds).\r
+ AddMilliseconds(pause.Milliseconds);\r
+ //Debug.WriteLine(String.Format("startTime: {0}", startTime));\r
+ added = true;\r
+ }\r
+ }\r
+\r
+ public void Start()\r
+ {\r
+ frame = 0;\r
+ timer.Interval = 1;\r
+ timer.Tick += newEventHandler();\r
+ timer.Enabled = true;\r
+ startTime = DateTime.Now;\r
+ timer.Start();\r
+ }\r
+\r
+ protected virtual EventHandler newEventHandler()\r
+ {\r
+ return new EventHandler(timer_Tick);\r
+ }\r
+\r
+ public void Stop()\r
+ {\r
+ timer.Stop();\r
+ pause = null;\r
+ }\r
+\r
+ public void Pause(bool pausing)\r
+ {\r
+ this.pausing = pausing;\r
+ if (pausing)\r
+ {\r
+ DateTime startPausing = DateTime.Now;\r
+ pause = new Pause(startPausing.Hour, startPausing.Minute, startPausing.Second, startPausing.Millisecond);\r
+ added = false;\r
+ }\r
+ else\r
+ {\r
+ DateTime stopPausing = DateTime.Now;\r
+ pause.subtractDateTime(stopPausing);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using NAudio.Wave;\r
+using NAudio.CoreAudioApi;\r
+using System.Diagnostics;\r
+\r
+namespace AudioRecorder\r
+{\r
+ public class WavRecorder : IRecorder\r
+ {\r
+ private const int MONO_CHANEL = 1;\r
+\r
+ private int inputDeviceIndex;\r
+ private WaveIn sourceStream;\r
+ private WaveFileWriter waveWriter;\r
+ private String filePath;\r
+ private List<String> createdWavFiles;\r
+ private MMDevice device;\r
+ private IMainForm mainForm;\r
+ private bool pausing;\r
+\r
+ public WavRecorder(int inputDeviceIndex, MMDevice device, IMainForm mainForm)\r
+ {\r
+ this.inputDeviceIndex = inputDeviceIndex;\r
+ createdWavFiles = new List<String>();\r
+ this.device = device;\r
+ this.mainForm = mainForm;\r
+ }\r
+\r
+ public void StartRecording(String filePath)\r
+ {\r
+ this.filePath = filePath;\r
+ sourceStream = newWaveIn();\r
+ sourceStream.DataAvailable += newEventHandler();\r
+ waveWriter = newWavFileWriter();\r
+ sourceStream.StartRecording();\r
+ createdWavFiles.Add(filePath);\r
+ }\r
+\r
+ protected virtual EventHandler<WaveInEventArgs> newEventHandler()\r
+ {\r
+ return new EventHandler<WaveInEventArgs>(SourceStreamDataAvailable);\r
+ }\r
+\r
+ protected virtual WaveFileWriter newWavFileWriter()\r
+ {\r
+ return new WaveFileWriter(filePath, sourceStream.WaveFormat);\r
+ }\r
+\r
+ protected virtual WaveIn newWaveIn()\r
+ {\r
+ return new WaveIn\r
+ {\r
+ DeviceNumber = inputDeviceIndex,\r
+ WaveFormat =\r
+ new WaveFormat(44100, MONO_CHANEL)\r
+ };\r
+\r
+ }\r
+\r
+ public void SourceStreamDataAvailable(object sender, WaveInEventArgs e)\r
+ {\r
+ if (waveWriter == null) return;\r
+ if (!pausing)\r
+ {\r
+ waveWriter.Write(e.Buffer, 0, e.BytesRecorded);\r
+ float panelHeight = (device.AudioMeterInformation.MasterPeakValue + device.AudioSessionManager.SimpleAudioVolume.Volume) * 100;\r
+ //float panelHeight = device.AudioMeterInformation.MasterPeakValue * 1000;\r
+ Debug.WriteLine(String.Format("device.AudioMeterInformation.MasterPeakValue {0}", device.AudioMeterInformation.MasterPeakValue));\r
+ mainForm.setPanelSizeHeight(panelHeight);\r
+ //Debug.WriteLine(String.Format("device.AudioMeterInformation.MasterPeakValue {0}", device.AudioMeterInformation.MasterPeakValue));\r
+ Debug.WriteLine(String.Format("panelHeight {0}", panelHeight));\r
+ waveWriter.Flush();\r
+ }\r
+ }\r
+\r
+ public void StopRecording()\r
+ {\r
+ if (sourceStream != null)\r
+ {\r
+ sourceStream.StopRecording();\r
+ sourceStream.Dispose();\r
+ sourceStream = null;\r
+ }\r
+ if (waveWriter == null)\r
+ {\r
+ return;\r
+ }\r
+ waveWriter.Dispose();\r
+ waveWriter = null;\r
+ }\r
+\r
+ public void pauseRecording(bool pausing)\r
+ {\r
+ this.pausing = pausing;\r
+ }\r
+\r
+ public List<String> getCreatedFiles()\r
+ {\r
+ return createdWavFiles;\r
+ }\r
+\r
+ public String getCurentWavFilePath()\r
+ {\r
+ return filePath;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<packages>\r
+ <package id="NAudio" version="1.8.3" targetFramework="net461" />\r
+</packages>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Drawing.Drawing2D;\r
+using System.Windows.Forms;\r
+\r
+namespace DxPlay\r
+{\r
+ /// <summary>\r
+ /// Encapsulates control that visualy displays certain integer value and allows user to change it within desired range. It imitates <see cref="System.Windows.Forms.TrackBar"/> as far as mouse usage is concerned.\r
+ /// </summary>\r
+ [ToolboxBitmap(typeof(TrackBar))]\r
+ [DefaultEvent("Scroll"), DefaultProperty("BarInnerColor")]\r
+ public partial class ColorSlider : Control\r
+ {\r
+ #region Events\r
+\r
+ /// <summary>\r
+ /// Fires when Slider position has changed\r
+ /// </summary>\r
+ [Description("Event fires when the Value property changes")]\r
+ [Category("Action")]\r
+ public event EventHandler ValueChanged;\r
+\r
+ /// <summary>\r
+ /// Fires when user scrolls the Slider\r
+ /// </summary>\r
+ [Description("Event fires when the Slider position is changed")]\r
+ [Category("Behavior")]\r
+ public event ScrollEventHandler Scroll;\r
+\r
+ #endregion\r
+\r
+ #region Properties\r
+\r
+ private Rectangle thumbRect; //bounding rectangle of thumb area\r
+ /// <summary>\r
+ /// Gets the thumb rect. Usefull to determine bounding rectangle when creating custom thumb shape.\r
+ /// </summary>\r
+ /// <value>The thumb rect.</value>\r
+ [Browsable(false)]\r
+ public Rectangle ThumbRect\r
+ {\r
+ get { return thumbRect; }\r
+ }\r
+\r
+ private Rectangle barRect; //bounding rectangle of bar area\r
+ private Rectangle barHalfRect;\r
+ private Rectangle thumbHalfRect;\r
+ private Rectangle elapsedRect; //bounding rectangle of elapsed area\r
+\r
+ private int thumbSize = 15;\r
+ /// <summary>\r
+ /// Gets or sets the size of the thumb.\r
+ /// </summary>\r
+ /// <value>The size of the thumb.</value>\r
+ /// <exception cref="T:System.ArgumentOutOfRangeException">exception thrown when value is lower than zero or grather than half of appropiate dimension</exception>\r
+ [Description("Set Slider thumb size")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(15)]\r
+ public int ThumbSize\r
+ {\r
+ get { return thumbSize; }\r
+ set\r
+ {\r
+ if (value > 0 &\r
+ value < (barOrientation == Orientation.Horizontal ? ClientRectangle.Width : ClientRectangle.Height))\r
+ thumbSize = value;\r
+ else\r
+ throw new ArgumentOutOfRangeException(\r
+ "TrackSize has to be greather than zero and lower than half of Slider width");\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private GraphicsPath thumbCustomShape = null;\r
+ /// <summary>\r
+ /// Gets or sets the thumb custom shape. Use ThumbRect property to determine bounding rectangle.\r
+ /// </summary>\r
+ /// <value>The thumb custom shape. null means default shape</value>\r
+ [Description("Set Slider's thumb's custom shape")]\r
+ [Category("ColorSlider")]\r
+ [Browsable(false)]\r
+ [DefaultValue(typeof(GraphicsPath), "null")]\r
+ public GraphicsPath ThumbCustomShape\r
+ {\r
+ get { return thumbCustomShape; }\r
+ set\r
+ {\r
+ thumbCustomShape = value;\r
+ thumbSize = (int) (barOrientation == Orientation.Horizontal ? value.GetBounds().Width : value.GetBounds().Height) + 1;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private Size thumbRoundRectSize = new Size(8, 8);\r
+ /// <summary>\r
+ /// Gets or sets the size of the thumb round rectangle edges.\r
+ /// </summary>\r
+ /// <value>The size of the thumb round rectangle edges.</value>\r
+ [Description("Set Slider's thumb round rect size")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Size), "8; 8")]\r
+ public Size ThumbRoundRectSize\r
+ {\r
+ get { return thumbRoundRectSize; }\r
+ set\r
+ {\r
+ int h = value.Height, w = value.Width;\r
+ if (h <= 0) h = 1;\r
+ if (w <= 0) w = 1;\r
+ thumbRoundRectSize = new Size(w, h);\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private Size borderRoundRectSize = new Size(8, 8);\r
+ /// <summary>\r
+ /// Gets or sets the size of the border round rect.\r
+ /// </summary>\r
+ /// <value>The size of the border round rect.</value>\r
+ [Description("Set Slider's border round rect size")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Size), "8; 8")]\r
+ public Size BorderRoundRectSize\r
+ {\r
+ get { return borderRoundRectSize; }\r
+ set\r
+ {\r
+ int h = value.Height, w = value.Width;\r
+ if (h <= 0) h = 1;\r
+ if (w <= 0) w = 1;\r
+ borderRoundRectSize = new Size(w, h);\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private Orientation barOrientation = Orientation.Horizontal;\r
+ /// <summary>\r
+ /// Gets or sets the orientation of Slider.\r
+ /// </summary>\r
+ /// <value>The orientation.</value>\r
+ [Description("Set Slider orientation")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(Orientation.Horizontal)]\r
+ public Orientation Orientation\r
+ {\r
+ get { return barOrientation; }\r
+ set\r
+ {\r
+ if (barOrientation != value)\r
+ {\r
+ barOrientation = value;\r
+ int temp = Width;\r
+ Width = Height;\r
+ Height = temp;\r
+ if (thumbCustomShape != null)\r
+ thumbSize =\r
+ (int)\r
+ (barOrientation == Orientation.Horizontal\r
+ ? thumbCustomShape.GetBounds().Width\r
+ : thumbCustomShape.GetBounds().Height) + 1;\r
+ Invalidate();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ private int trackerValue = 50;\r
+ /// <summary>\r
+ /// Gets or sets the value of Slider.\r
+ /// </summary>\r
+ /// <value>The value.</value>\r
+ /// <exception cref="T:System.ArgumentOutOfRangeException">exception thrown when value is outside appropriate range (min, max)</exception>\r
+ [Description("Set Slider value")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(50)]\r
+ public int Value\r
+ {\r
+ get { return trackerValue; }\r
+ set\r
+ {\r
+ if (value >= barMinimum & value <= barMaximum)\r
+ {\r
+ trackerValue = value;\r
+ if (ValueChanged != null) ValueChanged(this, new EventArgs());\r
+ Invalidate();\r
+ }\r
+ else throw new ArgumentOutOfRangeException("Value is outside appropriate range (min, max)");\r
+ }\r
+ }\r
+\r
+\r
+ private int barMinimum = 0;\r
+ /// <summary>\r
+ /// Gets or sets the minimum value.\r
+ /// </summary>\r
+ /// <value>The minimum value.</value>\r
+ /// <exception cref="T:System.ArgumentOutOfRangeException">exception thrown when minimal value is greather than maximal one</exception>\r
+ [Description("Set Slider minimal point")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(0)]\r
+ public int Minimum\r
+ {\r
+ get { return barMinimum; }\r
+ set\r
+ {\r
+ if (value < barMaximum)\r
+ {\r
+ barMinimum = value;\r
+ if (trackerValue < barMinimum)\r
+ {\r
+ trackerValue = barMinimum;\r
+ if (ValueChanged != null) ValueChanged(this, new EventArgs());\r
+ }\r
+ Invalidate();\r
+ }\r
+ else throw new ArgumentOutOfRangeException("Minimal value is greather than maximal one");\r
+ }\r
+ }\r
+\r
+\r
+ private int barMaximum = 100;\r
+ /// <summary>\r
+ /// Gets or sets the maximum value.\r
+ /// </summary>\r
+ /// <value>The maximum value.</value>\r
+ /// <exception cref="T:System.ArgumentOutOfRangeException">exception thrown when maximal value is lower than minimal one</exception>\r
+ [Description("Set Slider maximal point")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(100)]\r
+ public int Maximum\r
+ {\r
+ get { return barMaximum; }\r
+ set\r
+ {\r
+ if (value > barMinimum)\r
+ {\r
+ barMaximum = value;\r
+ if (trackerValue > barMaximum)\r
+ {\r
+ trackerValue = barMaximum;\r
+ if (ValueChanged != null) ValueChanged(this, new EventArgs());\r
+ }\r
+ Invalidate();\r
+ }\r
+ else throw new ArgumentOutOfRangeException("Maximal value is lower than minimal one");\r
+ }\r
+ }\r
+\r
+ private uint smallChange = 1;\r
+ /// <summary>\r
+ /// Gets or sets trackbar's small change. It affects how to behave when directional keys are pressed\r
+ /// </summary>\r
+ /// <value>The small change value.</value>\r
+ [Description("Set trackbar's small change")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(1)]\r
+ public uint SmallChange\r
+ {\r
+ get { return smallChange; }\r
+ set { smallChange = value; }\r
+ }\r
+\r
+ private uint largeChange = 5;\r
+\r
+ /// <summary>\r
+ /// Gets or sets trackbar's large change. It affects how to behave when PageUp/PageDown keys are pressed\r
+ /// </summary>\r
+ /// <value>The large change value.</value>\r
+ [Description("Set trackbar's large change")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(5)]\r
+ public uint LargeChange\r
+ {\r
+ get { return largeChange; }\r
+ set { largeChange = value; }\r
+ }\r
+\r
+ private bool drawFocusRectangle = true;\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether to draw focus rectangle.\r
+ /// </summary>\r
+ /// <value><c>true</c> if focus rectangle should be drawn; otherwise, <c>false</c>.</value>\r
+ [Description("Set whether to draw focus rectangle")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(true)]\r
+ public bool DrawFocusRectangle\r
+ {\r
+ get { return drawFocusRectangle; }\r
+ set\r
+ {\r
+ drawFocusRectangle = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private bool drawSemitransparentThumb = true;\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether to draw semitransparent thumb.\r
+ /// </summary>\r
+ /// <value><c>true</c> if semitransparent thumb should be drawn; otherwise, <c>false</c>.</value>\r
+ [Description("Set whether to draw semitransparent thumb")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(true)]\r
+ public bool DrawSemitransparentThumb\r
+ {\r
+ get { return drawSemitransparentThumb; }\r
+ set\r
+ {\r
+ drawSemitransparentThumb = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private bool mouseEffects = true;\r
+ /// <summary>\r
+ /// Gets or sets whether mouse entry and exit actions have impact on how control look.\r
+ /// </summary>\r
+ /// <value><c>true</c> if mouse entry and exit actions have impact on how control look; otherwise, <c>false</c>.</value>\r
+ [Description("Set whether mouse entry and exit actions have impact on how control look")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(true)]\r
+ public bool MouseEffects\r
+ {\r
+ get { return mouseEffects; }\r
+ set\r
+ {\r
+ mouseEffects = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private int mouseWheelBarPartitions = 10;\r
+ /// <summary>\r
+ /// Gets or sets the mouse wheel bar partitions.\r
+ /// </summary>\r
+ /// <value>The mouse wheel bar partitions.</value>\r
+ /// <exception cref="T:System.ArgumentOutOfRangeException">exception thrown when value isn't greather than zero</exception>\r
+ [Description("Set to how many parts is bar divided when using mouse wheel")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(10)]\r
+ public int MouseWheelBarPartitions\r
+ {\r
+ get { return mouseWheelBarPartitions; }\r
+ set\r
+ {\r
+ if (value > 0)\r
+ mouseWheelBarPartitions = value;\r
+ else throw new ArgumentOutOfRangeException("MouseWheelBarPartitions has to be greather than zero");\r
+ }\r
+ }\r
+ \r
+ private Color thumbOuterColor = Color.White;\r
+ /// <summary>\r
+ /// Gets or sets the thumb outer color .\r
+ /// </summary>\r
+ /// <value>The thumb outer color.</value>\r
+ [Description("Set Slider thumb outer color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "White")]\r
+ public Color ThumbOuterColor\r
+ {\r
+ get { return thumbOuterColor; }\r
+ set\r
+ {\r
+ thumbOuterColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+\r
+ private Color thumbInnerColor = Color.Gainsboro;\r
+ /// <summary>\r
+ /// Gets or sets the inner color of the thumb.\r
+ /// </summary>\r
+ /// <value>The inner color of the thumb.</value>\r
+ [Description("Set Slider thumb inner color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "Gainsboro")]\r
+ public Color ThumbInnerColor\r
+ {\r
+ get { return thumbInnerColor; }\r
+ set\r
+ {\r
+ thumbInnerColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+\r
+ private Color thumbPenColor = Color.Silver;\r
+ /// <summary>\r
+ /// Gets or sets the color of the thumb pen.\r
+ /// </summary>\r
+ /// <value>The color of the thumb pen.</value>\r
+ [Description("Set Slider thumb pen color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "Silver")]\r
+ public Color ThumbPenColor\r
+ {\r
+ get { return thumbPenColor; }\r
+ set\r
+ {\r
+ thumbPenColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+\r
+ private Color barOuterColor = Color.SkyBlue;\r
+ /// <summary>\r
+ /// Gets or sets the outer color of the bar.\r
+ /// </summary>\r
+ /// <value>The outer color of the bar.</value>\r
+ [Description("Set Slider bar outer color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "SkyBlue")]\r
+ public Color BarOuterColor\r
+ {\r
+ get { return barOuterColor; }\r
+ set\r
+ {\r
+ barOuterColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+\r
+ private Color barInnerColor = Color.DarkSlateBlue;\r
+ /// <summary>\r
+ /// Gets or sets the inner color of the bar.\r
+ /// </summary>\r
+ /// <value>The inner color of the bar.</value>\r
+ [Description("Set Slider bar inner color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "DarkSlateBlue")]\r
+ public Color BarInnerColor\r
+ {\r
+ get { return barInnerColor; }\r
+ set\r
+ {\r
+ barInnerColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+\r
+ private Color barPenColor = Color.Gainsboro;\r
+ /// <summary>\r
+ /// Gets or sets the color of the bar pen.\r
+ /// </summary>\r
+ /// <value>The color of the bar pen.</value>\r
+ [Description("Set Slider bar pen color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "Gainsboro")]\r
+ public Color BarPenColor\r
+ {\r
+ get { return barPenColor; }\r
+ set\r
+ {\r
+ barPenColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private Color elapsedOuterColor = Color.DarkGreen;\r
+ /// <summary>\r
+ /// Gets or sets the outer color of the elapsed.\r
+ /// </summary>\r
+ /// <value>The outer color of the elapsed.</value>\r
+ [Description("Set Slider's elapsed part outer color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "DarkGreen")]\r
+ public Color ElapsedOuterColor\r
+ {\r
+ get { return elapsedOuterColor; }\r
+ set\r
+ {\r
+ elapsedOuterColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ private Color elapsedInnerColor = Color.Chartreuse;\r
+ /// <summary>\r
+ /// Gets or sets the inner color of the elapsed.\r
+ /// </summary>\r
+ /// <value>The inner color of the elapsed.</value>\r
+ [Description("Set Slider's elapsed part inner color")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(Color), "Chartreuse")]\r
+ public Color ElapsedInnerColor\r
+ {\r
+ get { return elapsedInnerColor; }\r
+ set\r
+ {\r
+ elapsedInnerColor = value;\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Color schemas\r
+\r
+ //define own color schemas\r
+ private Color[,] aColorSchema = new Color[,]\r
+ {\r
+ {\r
+ Color.White, Color.Gainsboro, Color.Silver, Color.SkyBlue, Color.DarkSlateBlue, Color.Gainsboro,\r
+ Color.DarkGreen, Color.Chartreuse\r
+ },\r
+ {\r
+ Color.White, Color.Gainsboro, Color.Silver, Color.Red, Color.DarkRed, Color.Gainsboro, Color.Coral,\r
+ Color.LightCoral\r
+ },\r
+ {\r
+ Color.White, Color.Gainsboro, Color.Silver, Color.GreenYellow, Color.Yellow, Color.Gold, Color.Orange,\r
+ Color.OrangeRed\r
+ },\r
+ {\r
+ Color.White, Color.Gainsboro, Color.Silver, Color.Red, Color.Crimson, Color.Gainsboro, Color.DarkViolet\r
+ , Color.Violet\r
+ }\r
+ };\r
+\r
+ public enum ColorSchemas\r
+ {\r
+ PerlBlueGreen,\r
+ PerlRedCoral,\r
+ PerlGold,\r
+ PerlRoyalColors\r
+ }\r
+\r
+ private ColorSchemas colorSchema = ColorSchemas.PerlBlueGreen;\r
+ /// <summary>\r
+ /// Sets color schema. Color generalization / fast color changing. Has no effect when slider colors are changed manually after schema was applied. \r
+ /// </summary>\r
+ /// <value>New color schema value</value>\r
+ [Description("Set Slider color schema. Has no effect when slider colors are changed manually after schema was applied.")]\r
+ [Category("ColorSlider")]\r
+ [DefaultValue(typeof(ColorSchemas), "PerlBlueGreen")]\r
+ public ColorSchemas ColorSchema\r
+ {\r
+ get { return colorSchema; }\r
+ set\r
+ {\r
+ colorSchema = value;\r
+ byte sn = (byte)value;\r
+ thumbOuterColor = aColorSchema[sn, 0];\r
+ thumbInnerColor = aColorSchema[sn, 1];\r
+ thumbPenColor = aColorSchema[sn, 2];\r
+ barOuterColor = aColorSchema[sn, 3];\r
+ barInnerColor = aColorSchema[sn, 4];\r
+ barPenColor = aColorSchema[sn, 5];\r
+ elapsedOuterColor = aColorSchema[sn, 6];\r
+ elapsedInnerColor = aColorSchema[sn, 7];\r
+\r
+ Invalidate();\r
+ }\r
+ }\r
+\r
+ #endregion\r
+ \r
+ #region Constructors\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="ColorSlider"/> class.\r
+ /// </summary>\r
+ /// <param name="min">The minimum value.</param>\r
+ /// <param name="max">The maximum value.</param>\r
+ /// <param name="value">The current value.</param>\r
+ public ColorSlider(int min, int max, int value)\r
+ {\r
+ InitializeComponent();\r
+ SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer |\r
+ ControlStyles.ResizeRedraw | ControlStyles.Selectable |\r
+ ControlStyles.SupportsTransparentBackColor | ControlStyles.UserMouse |\r
+ ControlStyles.UserPaint, true);\r
+ BackColor = Color.Transparent;\r
+\r
+ Minimum = min;\r
+ Maximum = max;\r
+ Value = value;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="ColorSlider"/> class.\r
+ /// </summary>\r
+ public ColorSlider() : this(0, 100, 50) { }\r
+\r
+ #endregion\r
+\r
+ #region Paint\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.Paint"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.Windows.Forms.PaintEventArgs"></see> that contains the event data.</param>\r
+ protected override void OnPaint(PaintEventArgs e)\r
+ {\r
+ if (!Enabled)\r
+ {\r
+ Color[] desaturatedColors = DesaturateColors(thumbOuterColor, thumbInnerColor, thumbPenColor,\r
+ barOuterColor, barInnerColor, barPenColor,\r
+ elapsedOuterColor, elapsedInnerColor);\r
+ DrawColorSlider(e, desaturatedColors[0], desaturatedColors[1], desaturatedColors[2],\r
+ desaturatedColors[3],\r
+ desaturatedColors[4], desaturatedColors[5], desaturatedColors[6], desaturatedColors[7]);\r
+ }\r
+ else\r
+ {\r
+ if (mouseEffects && mouseInRegion)\r
+ {\r
+ Color[] lightenedColors = LightenColors(thumbOuterColor, thumbInnerColor, thumbPenColor,\r
+ barOuterColor, barInnerColor, barPenColor,\r
+ elapsedOuterColor, elapsedInnerColor);\r
+ DrawColorSlider(e, lightenedColors[0], lightenedColors[1], lightenedColors[2], lightenedColors[3],\r
+ lightenedColors[4], lightenedColors[5], lightenedColors[6], lightenedColors[7]);\r
+ }\r
+ else\r
+ {\r
+ DrawColorSlider(e, thumbOuterColor, thumbInnerColor, thumbPenColor,\r
+ barOuterColor, barInnerColor, barPenColor,\r
+ elapsedOuterColor, elapsedInnerColor);\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Draws the colorslider control using passed colors.\r
+ /// </summary>\r
+ /// <param name="e">The <see cref="T:System.Windows.Forms.PaintEventArgs"/> instance containing the event data.</param>\r
+ /// <param name="thumbOuterColorPaint">The thumb outer color paint.</param>\r
+ /// <param name="thumbInnerColorPaint">The thumb inner color paint.</param>\r
+ /// <param name="thumbPenColorPaint">The thumb pen color paint.</param>\r
+ /// <param name="barOuterColorPaint">The bar outer color paint.</param>\r
+ /// <param name="barInnerColorPaint">The bar inner color paint.</param>\r
+ /// <param name="barPenColorPaint">The bar pen color paint.</param>\r
+ /// <param name="elapsedOuterColorPaint">The elapsed outer color paint.</param>\r
+ /// <param name="elapsedInnerColorPaint">The elapsed inner color paint.</param>\r
+ private void DrawColorSlider(PaintEventArgs e, Color thumbOuterColorPaint, Color thumbInnerColorPaint,\r
+ Color thumbPenColorPaint, Color barOuterColorPaint, Color barInnerColorPaint,\r
+ Color barPenColorPaint, Color elapsedOuterColorPaint, Color elapsedInnerColorPaint)\r
+ {\r
+ try\r
+ {\r
+ //set up thumbRect aproprietly\r
+ if (barOrientation == Orientation.Horizontal)\r
+ {\r
+ int TrackX = (((trackerValue - barMinimum) * (ClientRectangle.Width - thumbSize)) / (barMaximum - barMinimum));\r
+ thumbRect = new Rectangle(TrackX, 1, thumbSize - 1, ClientRectangle.Height - 3);\r
+ }\r
+ else\r
+ {\r
+ int TrackY = (((trackerValue - barMinimum) * (ClientRectangle.Height - thumbSize)) / (barMaximum - barMinimum));\r
+ thumbRect = new Rectangle(1, TrackY, ClientRectangle.Width - 3, thumbSize - 1);\r
+ }\r
+\r
+ //adjust drawing rects\r
+ barRect = ClientRectangle;\r
+ thumbHalfRect = thumbRect;\r
+ LinearGradientMode gradientOrientation;\r
+ if (barOrientation == Orientation.Horizontal)\r
+ {\r
+ barRect.Inflate(-1, -barRect.Height / 3);\r
+ barHalfRect = barRect;\r
+ barHalfRect.Height /= 2;\r
+ gradientOrientation = LinearGradientMode.Vertical;\r
+ thumbHalfRect.Height /= 2;\r
+ elapsedRect = barRect;\r
+ elapsedRect.Width = thumbRect.Left + thumbSize / 2;\r
+ }\r
+ else\r
+ {\r
+ barRect.Inflate(-barRect.Width / 3, -1);\r
+ barHalfRect = barRect;\r
+ barHalfRect.Width /= 2;\r
+ gradientOrientation = LinearGradientMode.Horizontal;\r
+ thumbHalfRect.Width /= 2;\r
+ elapsedRect = barRect;\r
+ elapsedRect.Height = thumbRect.Top + thumbSize / 2;\r
+ }\r
+ //get thumb shape path \r
+ GraphicsPath thumbPath;\r
+ if (thumbCustomShape == null)\r
+ thumbPath = CreateRoundRectPath(thumbRect, thumbRoundRectSize);\r
+ else\r
+ {\r
+ thumbPath = thumbCustomShape;\r
+ Matrix m = new Matrix();\r
+ m.Translate(thumbRect.Left - thumbPath.GetBounds().Left, thumbRect.Top - thumbPath.GetBounds().Top);\r
+ thumbPath.Transform(m);\r
+ }\r
+\r
+ //draw bar\r
+ using (\r
+ LinearGradientBrush lgbBar =\r
+ new LinearGradientBrush(barHalfRect, barOuterColorPaint, barInnerColorPaint, gradientOrientation)\r
+ )\r
+ {\r
+ lgbBar.WrapMode = WrapMode.TileFlipXY;\r
+ e.Graphics.FillRectangle(lgbBar, barRect);\r
+ //draw elapsed bar\r
+ using (\r
+ LinearGradientBrush lgbElapsed =\r
+ new LinearGradientBrush(barHalfRect, elapsedOuterColorPaint, elapsedInnerColorPaint,\r
+ gradientOrientation))\r
+ {\r
+ lgbElapsed.WrapMode = WrapMode.TileFlipXY;\r
+ if (Capture && drawSemitransparentThumb)\r
+ {\r
+ Region elapsedReg = new Region(elapsedRect);\r
+ elapsedReg.Exclude(thumbPath);\r
+ e.Graphics.FillRegion(lgbElapsed, elapsedReg);\r
+ }\r
+ else\r
+ e.Graphics.FillRectangle(lgbElapsed, elapsedRect);\r
+ }\r
+ //draw bar band \r
+ using (Pen barPen = new Pen(barPenColorPaint, 0.5f))\r
+ {\r
+ e.Graphics.DrawRectangle(barPen, barRect);\r
+ }\r
+ }\r
+\r
+ //draw thumb\r
+ Color newthumbOuterColorPaint = thumbOuterColorPaint, newthumbInnerColorPaint = thumbInnerColorPaint;\r
+ if (Capture && drawSemitransparentThumb)\r
+ {\r
+ newthumbOuterColorPaint = Color.FromArgb(175, thumbOuterColorPaint);\r
+ newthumbInnerColorPaint = Color.FromArgb(175, thumbInnerColorPaint);\r
+ }\r
+ using (\r
+ LinearGradientBrush lgbThumb =\r
+ new LinearGradientBrush(thumbHalfRect, newthumbOuterColorPaint, newthumbInnerColorPaint,\r
+ gradientOrientation))\r
+ {\r
+ lgbThumb.WrapMode = WrapMode.TileFlipXY;\r
+ e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;\r
+ e.Graphics.FillPath(lgbThumb, thumbPath);\r
+ //draw thumb band\r
+ Color newThumbPenColor = thumbPenColorPaint;\r
+ if (mouseEffects && (Capture || mouseInThumbRegion))\r
+ newThumbPenColor = ControlPaint.Dark(newThumbPenColor);\r
+ using (Pen thumbPen = new Pen(newThumbPenColor))\r
+ {\r
+ e.Graphics.DrawPath(thumbPen, thumbPath);\r
+ }\r
+ //gp.Dispose(); \r
+ /*if (Capture || mouseInThumbRegion)\r
+ using (LinearGradientBrush lgbThumb2 = new LinearGradientBrush(thumbHalfRect, Color.FromArgb(150, Color.Blue), Color.Transparent, gradientOrientation))\r
+ {\r
+ lgbThumb2.WrapMode = WrapMode.TileFlipXY;\r
+ e.Graphics.FillPath(lgbThumb2, gp);\r
+ }*/\r
+ }\r
+\r
+ //draw focusing rectangle\r
+ if (Focused & drawFocusRectangle)\r
+ using (Pen p = new Pen(Color.FromArgb(200, barPenColorPaint)))\r
+ {\r
+ p.DashStyle = DashStyle.Dot;\r
+ Rectangle r = ClientRectangle;\r
+ r.Width -= 2;\r
+ r.Height--;\r
+ r.X++;\r
+ //ControlPaint.DrawFocusRectangle(e.Graphics, r); \r
+ using (GraphicsPath gpBorder = CreateRoundRectPath(r, borderRoundRectSize))\r
+ {\r
+ e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;\r
+ e.Graphics.DrawPath(p, gpBorder);\r
+ }\r
+ }\r
+ }\r
+ catch (Exception Err)\r
+ {\r
+ Console.WriteLine("DrawBackGround Error in " + Name + ":" + Err.Message);\r
+ }\r
+ finally\r
+ {\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Overided events\r
+\r
+ private bool mouseInRegion = false;\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.EnabledChanged"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>\r
+ protected override void OnEnabledChanged(EventArgs e)\r
+ {\r
+ base.OnEnabledChanged(e);\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.MouseEnter"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>\r
+ protected override void OnMouseEnter(EventArgs e)\r
+ {\r
+ base.OnMouseEnter(e);\r
+ mouseInRegion = true;\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.MouseLeave"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>\r
+ protected override void OnMouseLeave(EventArgs e)\r
+ {\r
+ base.OnMouseLeave(e);\r
+ mouseInRegion = false;\r
+ mouseInThumbRegion = false;\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.MouseDown"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs"></see> that contains the event data.</param>\r
+ protected override void OnMouseDown(MouseEventArgs e)\r
+ {\r
+ base.OnMouseDown(e);\r
+ if (e.Button == MouseButtons.Left)\r
+ {\r
+ Capture = true;\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.ThumbTrack, trackerValue));\r
+ if (ValueChanged != null) ValueChanged(this, new EventArgs());\r
+ OnMouseMove(e);\r
+ }\r
+ }\r
+\r
+ private bool mouseInThumbRegion = false;\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.MouseMove"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs"></see> that contains the event data.</param>\r
+ protected override void OnMouseMove(MouseEventArgs e)\r
+ {\r
+ base.OnMouseMove(e);\r
+ mouseInThumbRegion = IsPointInRect(e.Location, thumbRect);\r
+ if (Capture & e.Button == MouseButtons.Left)\r
+ {\r
+ ScrollEventType set = ScrollEventType.ThumbPosition;\r
+ Point pt = e.Location;\r
+ int p = barOrientation == Orientation.Horizontal ? pt.X : pt.Y;\r
+ int margin = thumbSize >> 1;\r
+ p -= margin;\r
+ float coef = (float)(barMaximum - barMinimum) /\r
+ (float)\r
+ ((barOrientation == Orientation.Horizontal ? ClientSize.Width : ClientSize.Height) -\r
+ 2 * margin);\r
+ trackerValue = (int)(p * coef + barMinimum);\r
+\r
+ if (trackerValue <= barMinimum)\r
+ {\r
+ trackerValue = barMinimum;\r
+ set = ScrollEventType.First;\r
+ }\r
+ else if (trackerValue >= barMaximum)\r
+ {\r
+ trackerValue = barMaximum;\r
+ set = ScrollEventType.Last;\r
+ }\r
+\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(set, trackerValue));\r
+ if (ValueChanged != null) ValueChanged(this, new EventArgs());\r
+ }\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.MouseUp"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs"></see> that contains the event data.</param>\r
+ protected override void OnMouseUp(MouseEventArgs e)\r
+ {\r
+ base.OnMouseUp(e);\r
+ Capture = false;\r
+ mouseInThumbRegion = IsPointInRect(e.Location, thumbRect);\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.EndScroll, trackerValue));\r
+ if (ValueChanged != null) ValueChanged(this, new EventArgs());\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.MouseWheel"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.Windows.Forms.MouseEventArgs"></see> that contains the event data.</param>\r
+ protected override void OnMouseWheel(MouseEventArgs e)\r
+ {\r
+ base.OnMouseWheel(e);\r
+ int v = e.Delta / 120 * (barMaximum - barMinimum) / mouseWheelBarPartitions;\r
+ SetProperValue(Value + v);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.GotFocus"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>\r
+ protected override void OnGotFocus(EventArgs e)\r
+ {\r
+ base.OnGotFocus(e);\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.LostFocus"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">An <see cref="T:System.EventArgs"></see> that contains the event data.</param>\r
+ protected override void OnLostFocus(EventArgs e)\r
+ {\r
+ base.OnLostFocus(e);\r
+ Invalidate();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Raises the <see cref="E:System.Windows.Forms.Control.KeyUp"></see> event.\r
+ /// </summary>\r
+ /// <param name="e">A <see cref="T:System.Windows.Forms.KeyEventArgs"></see> that contains the event data.</param>\r
+ protected override void OnKeyUp(KeyEventArgs e)\r
+ {\r
+ base.OnKeyUp(e);\r
+ switch (e.KeyCode)\r
+ {\r
+ case Keys.Down:\r
+ case Keys.Left:\r
+ SetProperValue(Value - (int)smallChange);\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.SmallDecrement, Value));\r
+ break;\r
+ case Keys.Up:\r
+ case Keys.Right:\r
+ SetProperValue(Value + (int)smallChange);\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.SmallIncrement, Value));\r
+ break;\r
+ case Keys.Home:\r
+ Value = barMinimum;\r
+ break;\r
+ case Keys.End:\r
+ Value = barMaximum;\r
+ break;\r
+ case Keys.PageDown:\r
+ SetProperValue(Value - (int)largeChange);\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.LargeDecrement, Value));\r
+ break;\r
+ case Keys.PageUp:\r
+ SetProperValue(Value + (int)largeChange);\r
+ if (Scroll != null) Scroll(this, new ScrollEventArgs(ScrollEventType.LargeIncrement, Value));\r
+ break;\r
+ }\r
+ if (Scroll != null && Value == barMinimum) Scroll(this, new ScrollEventArgs(ScrollEventType.First, Value));\r
+ if (Scroll != null && Value == barMaximum) Scroll(this, new ScrollEventArgs(ScrollEventType.Last, Value));\r
+ Point pt = PointToClient(Cursor.Position);\r
+ OnMouseMove(new MouseEventArgs(MouseButtons.None, 0, pt.X, pt.Y, 0));\r
+ }\r
+\r
+ /// <summary>\r
+ /// Processes a dialog key.\r
+ /// </summary>\r
+ /// <param name="keyData">One of the <see cref="T:System.Windows.Forms.Keys"></see> values that represents the key to process.</param>\r
+ /// <returns>\r
+ /// true if the key was processed by the control; otherwise, false.\r
+ /// </returns>\r
+ protected override bool ProcessDialogKey(Keys keyData)\r
+ {\r
+ if (keyData == Keys.Tab | ModifierKeys == Keys.Shift)\r
+ return base.ProcessDialogKey(keyData);\r
+ else\r
+ {\r
+ OnKeyDown(new KeyEventArgs(keyData));\r
+ return true;\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Help routines\r
+\r
+ /// <summary>\r
+ /// Creates the round rect path.\r
+ /// </summary>\r
+ /// <param name="rect">The rectangle on which graphics path will be spanned.</param>\r
+ /// <param name="size">The size of rounded rectangle edges.</param>\r
+ /// <returns></returns>\r
+ public static GraphicsPath CreateRoundRectPath(Rectangle rect, Size size)\r
+ {\r
+ GraphicsPath gp = new GraphicsPath();\r
+ gp.AddLine(rect.Left + size.Width / 2, rect.Top, rect.Right - size.Width / 2, rect.Top);\r
+ gp.AddArc(rect.Right - size.Width, rect.Top, size.Width, size.Height, 270, 90);\r
+\r
+ gp.AddLine(rect.Right, rect.Top + size.Height / 2, rect.Right, rect.Bottom - size.Width / 2);\r
+ gp.AddArc(rect.Right - size.Width, rect.Bottom - size.Height, size.Width, size.Height, 0, 90);\r
+\r
+ gp.AddLine(rect.Right - size.Width / 2, rect.Bottom, rect.Left + size.Width / 2, rect.Bottom);\r
+ gp.AddArc(rect.Left, rect.Bottom - size.Height, size.Width, size.Height, 90, 90);\r
+\r
+ gp.AddLine(rect.Left, rect.Bottom - size.Height / 2, rect.Left, rect.Top + size.Height / 2);\r
+ gp.AddArc(rect.Left, rect.Top, size.Width, size.Height, 180, 90);\r
+ return gp;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Desaturates colors from given array.\r
+ /// </summary>\r
+ /// <param name="colorsToDesaturate">The colors to be desaturated.</param>\r
+ /// <returns></returns>\r
+ public static Color[] DesaturateColors(params Color[] colorsToDesaturate)\r
+ {\r
+ Color[] colorsToReturn = new Color[colorsToDesaturate.Length];\r
+ for (int i = 0; i < colorsToDesaturate.Length; i++)\r
+ {\r
+ //use NTSC weighted avarage\r
+ int gray =\r
+ (int)(colorsToDesaturate[i].R * 0.3 + colorsToDesaturate[i].G * 0.6 + colorsToDesaturate[i].B * 0.1);\r
+ colorsToReturn[i] = Color.FromArgb(-0x010101 * (255 - gray) - 1);\r
+ }\r
+ return colorsToReturn;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Lightens colors from given array.\r
+ /// </summary>\r
+ /// <param name="colorsToLighten">The colors to lighten.</param>\r
+ /// <returns></returns>\r
+ public static Color[] LightenColors(params Color[] colorsToLighten)\r
+ {\r
+ Color[] colorsToReturn = new Color[colorsToLighten.Length];\r
+ for (int i = 0; i < colorsToLighten.Length; i++)\r
+ {\r
+ colorsToReturn[i] = ControlPaint.Light(colorsToLighten[i]);\r
+ }\r
+ return colorsToReturn;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Sets the trackbar value so that it wont exceed allowed range.\r
+ /// </summary>\r
+ /// <param name="val">The value.</param>\r
+ private void SetProperValue(int val)\r
+ {\r
+ if (val < barMinimum) Value = barMinimum;\r
+ else if (val > barMaximum) Value = barMaximum;\r
+ else Value = val;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Determines whether rectangle contains given point.\r
+ /// </summary>\r
+ /// <param name="pt">The point to test.</param>\r
+ /// <param name="rect">The base rectangle.</param>\r
+ /// <returns>\r
+ /// <c>true</c> if rectangle contains given point; otherwise, <c>false</c>.\r
+ /// </returns>\r
+ private static bool IsPointInRect(Point pt, Rectangle rect)\r
+ {\r
+ if (pt.X > rect.Left & pt.X < rect.Right & pt.Y > rect.Top & pt.Y < rect.Bottom)\r
+ return true;\r
+ else return false;\r
+ }\r
+\r
+ #endregion\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+namespace DxPlay {\r
+ partial class ColorSlider {\r
+ /// <summary> \r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary> \r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Component Designer generated code\r
+\r
+ /// <summary> \r
+ /// Required method for Designer support - do not modify \r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.SuspendLayout();\r
+ // \r
+ // ColorSlider\r
+ // \r
+ this.Size = new System.Drawing.Size(200, 30);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>False</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">\r
+ <PropertyGroup>\r
+ <ProjectType>Local</ProjectType>\r
+ <ProductVersion>8.0.50727</ProductVersion>\r
+ <SchemaVersion>2.0</SchemaVersion>\r
+ <ProjectGuid>{0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}</ProjectGuid>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ApplicationIcon>App.ico</ApplicationIcon>\r
+ <AssemblyKeyContainerName>\r
+ </AssemblyKeyContainerName>\r
+ <AssemblyName>DxPlay</AssemblyName>\r
+ <AssemblyOriginatorKeyFile>\r
+ </AssemblyOriginatorKeyFile>\r
+ <DefaultClientScript>JScript</DefaultClientScript>\r
+ <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>\r
+ <DefaultTargetSchema>IE50</DefaultTargetSchema>\r
+ <DelaySign>false</DelaySign>\r
+ <OutputType>WinExe</OutputType>\r
+ <RootNamespace>DxPlay</RootNamespace>\r
+ <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\r
+ <StartupObject>\r
+ </StartupObject>\r
+ <FileUpgradeFlags>\r
+ </FileUpgradeFlags>\r
+ <UpgradeBackupLocation>\r
+ </UpgradeBackupLocation>\r
+ <OldToolsVersion>3.5</OldToolsVersion>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <IsWebBootstrapper>false</IsWebBootstrapper>\r
+ <TargetFrameworkProfile />\r
+ <PublishUrl>publish\</PublishUrl>\r
+ <Install>true</Install>\r
+ <InstallFrom>Disk</InstallFrom>\r
+ <UpdateEnabled>false</UpdateEnabled>\r
+ <UpdateMode>Foreground</UpdateMode>\r
+ <UpdateInterval>7</UpdateInterval>\r
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r
+ <UpdatePeriodically>false</UpdatePeriodically>\r
+ <UpdateRequired>false</UpdateRequired>\r
+ <MapFileExtensions>true</MapFileExtensions>\r
+ <ApplicationRevision>0</ApplicationRevision>\r
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>\r
+ <UseApplicationTrust>false</UseApplicationTrust>\r
+ <BootstrapperEnabled>true</BootstrapperEnabled>\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r
+ <BaseAddress>285212672</BaseAddress>\r
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r
+ <ConfigurationOverrideFile>\r
+ </ConfigurationOverrideFile>\r
+ <DefineConstants>TRACE;DEBUG;USING_NET20</DefineConstants>\r
+ <DocumentationFile>\r
+ </DocumentationFile>\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <FileAlignment>4096</FileAlignment>\r
+ <NoStdLib>false</NoStdLib>\r
+ <NoWarn>\r
+ </NoWarn>\r
+ <Optimize>false</Optimize>\r
+ <RegisterForComInterop>false</RegisterForComInterop>\r
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>\r
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r
+ <WarningLevel>4</WarningLevel>\r
+ <DebugType>full</DebugType>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\r
+ <BaseAddress>285212672</BaseAddress>\r
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>\r
+ <ConfigurationOverrideFile>\r
+ </ConfigurationOverrideFile>\r
+ <DefineConstants>TRACE;USING_NET20</DefineConstants>\r
+ <DocumentationFile>\r
+ </DocumentationFile>\r
+ <DebugSymbols>false</DebugSymbols>\r
+ <FileAlignment>4096</FileAlignment>\r
+ <NoStdLib>false</NoStdLib>\r
+ <NoWarn>\r
+ </NoWarn>\r
+ <Optimize>true</Optimize>\r
+ <RegisterForComInterop>false</RegisterForComInterop>\r
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>\r
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r
+ <WarningLevel>4</WarningLevel>\r
+ <DebugType>none</DebugType>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <OutputPath>bin\x64\Debug\</OutputPath>\r
+ <DefineConstants>TRACE;DEBUG;USING_NET20</DefineConstants>\r
+ <BaseAddress>285212672</BaseAddress>\r
+ <FileAlignment>4096</FileAlignment>\r
+ <DebugType>full</DebugType>\r
+ <PlatformTarget>x64</PlatformTarget>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">\r
+ <OutputPath>bin\x64\Release\</OutputPath>\r
+ <DefineConstants>TRACE;USING_NET20</DefineConstants>\r
+ <BaseAddress>285212672</BaseAddress>\r
+ <Optimize>true</Optimize>\r
+ <FileAlignment>4096</FileAlignment>\r
+ <PlatformTarget>x64</PlatformTarget>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="DirectShowLib, Version=2.1.0.28167, Culture=neutral, processorArchitecture=MSIL">\r
+ <SpecificVersion>False</SpecificVersion>\r
+ <HintPath>lib\DirectShowLib.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System">\r
+ <Name>System</Name>\r
+ </Reference>\r
+ <Reference Include="System.Data">\r
+ <Name>System.Data</Name>\r
+ </Reference>\r
+ <Reference Include="System.Drawing">\r
+ <Name>System.Drawing</Name>\r
+ </Reference>\r
+ <Reference Include="System.Windows.Forms">\r
+ <Name>System.Windows.Forms</Name>\r
+ </Reference>\r
+ <Reference Include="System.Xml">\r
+ <Name>System.XML</Name>\r
+ </Reference>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="ColorSlider.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
+ <Compile Include="ColorSlider.designer.cs">\r
+ <DependentUpon>ColorSlider.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="DxPlayer.cs" />\r
+ <Compile Include="FilterGraphTools.cs" />\r
+ <Compile Include="FlexibleMessageBox.cs" />\r
+ <Compile Include="InterceptKeys.cs" />\r
+ <Compile Include="MediaDescription.cs" />\r
+ <Compile Include="MediaDetector.cs" />\r
+ <Compile Include="MediaInfoDLL.cs" />\r
+ <Compile Include="MenuButton.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
+ <Compile Include="Messages.cs" />\r
+ <Compile Include="MovieSegment.cs" />\r
+ <Compile Include="NativeMethods.cs" />\r
+ <Compile Include="Program.cs" />\r
+ <Compile Include="Properties\Resources.Designer.cs">\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTime>True</DesignTime>\r
+ </Compile>\r
+ <Compile Include="SafeHandles.cs" />\r
+ <Compile Include="SMTPETimeCode\Enums.cs" />\r
+ <Compile Include="SMTPETimeCode\Extensions.cs" />\r
+ <Compile Include="SMTPETimeCode\TimeCode.cs" />\r
+ <Compile Include="Timecode.cs" />\r
+ <Compile Include="URCOMLoader.cs" />\r
+ <Compile Include="VideoTrackBar.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
+ <Content Include="App.ico" />\r
+ <Compile Include="Properties\AssemblyInfo.cs">\r
+ <SubType>Code</SubType>\r
+ </Compile>\r
+ <Compile Include="PlayerForm.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="PlayerForm.Designer.cs">\r
+ <DependentUpon>PlayerForm.cs</DependentUpon>\r
+ </Compile>\r
+ <Content Include="DirectShowLib.dll" />\r
+ <None Include="Resources\lgs.jpg" />\r
+ <None Include="Resources\Play.png" />\r
+ <None Include="Resources\Stop.png" />\r
+ <None Include="Resources\Pause.png" />\r
+ <EmbeddedResource Include="Properties\Resources.resx">\r
+ <Generator>PublicResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
+ <None Include="app.config" />\r
+ <None Include="MediaInfo.dll">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ <EmbeddedResource Include="ColorSlider.resx">\r
+ <DependentUpon>ColorSlider.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="PlayerForm.resx">\r
+ <DependentUpon>PlayerForm.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <None Include="readme.txt" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">\r
+ <Visible>False</Visible>\r
+ <ProductName>.NET Framework 3.5 SP1</ProductName>\r
+ <Install>true</Install>\r
+ </BootstrapperPackage>\r
+ </ItemGroup>\r
+ <ItemGroup />\r
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />\r
+ <PropertyGroup>\r
+ <PreBuildEvent>\r
+ </PreBuildEvent>\r
+ <PostBuildEvent>\r
+ </PostBuildEvent>\r
+ </PropertyGroup>\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+using System;\r
+using System.Drawing;\r
+using System.Runtime.InteropServices;\r
+using System.Diagnostics;\r
+using System.Windows.Forms;\r
+using System.Threading;\r
+\r
+using DirectShowLib;\r
+using DirectShowLib.Utils;\r
+using Microsoft.Win32.SafeHandles;\r
+using System.ComponentModel;\r
+using System.Drawing.Imaging;\r
+using System.Drawing.Drawing2D;\r
+\r
+namespace DxPlay {\r
+ internal class DxPlayer : ISampleGrabberCB, IDisposable {\r
+\r
+ [DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory")]\r
+ private static extern void CopyMemory(IntPtr Destination, IntPtr Source, [MarshalAs(UnmanagedType.U4)] uint Length);\r
+\r
+ private const int MEDIATIME_REFERENCE = 10000000;\r
+\r
+ public enum GraphState {\r
+ Stopped,\r
+ Paused,\r
+ Playing,\r
+ Exiting\r
+ }\r
+\r
+ public MediaDescription MediaDescription { get; internal set; }\r
+ public Timecode CurrentTC { get; internal set; }\r
+ public GraphState State { get; internal set; }\r
+\r
+ private IFilterGraph2 m_FilterGraph;\r
+ private IMediaControl m_mediaCtrl;\r
+ private IMediaEvent m_mediaEvent;\r
+ private int m_videoWidth;\r
+ private int m_videoHeight;\r
+\r
+ // Event used by Media Event thread\r
+ private ManualResetEvent m_mre;\r
+ private BackgroundWorker tcWorker;\r
+ // Current state of the graph (can change async)\r
+\r
+ public event DxPlayEvent PlayEvent;\r
+ public delegate void DxPlayEvent();\r
+\r
+ private Thread m_eventThread = null;\r
+ private IMediaSeeking m_mediaSeek = null;\r
+ private IMediaPosition m_mediaPosition = null;\r
+\r
+ private IVideoWindow m_videoWindow = null;\r
+ private IBaseFilter m_videoRenderer = null;\r
+ private object tcLock = new object();\r
+ Bitmap m_Bitmap = null;\r
+\r
+#if DEBUG\r
+ // Allow you to "Connect to remote graph" from GraphEdit\r
+ DsROTEntry m_DsRot;\r
+#endif\r
+ private int m_stride;\r
+\r
+ // Release everything.\r
+ public void Dispose() {\r
+ CloseInterfaces();\r
+ }\r
+\r
+ ~DxPlayer() {\r
+ CloseInterfaces();\r
+ }\r
+\r
+ // Play an avi file into a window. Allow for snapshots.\r
+ // (Control to show video in, Avi file to play\r
+ public DxPlayer(Control hWin, MediaDescription mediaDesc) {\r
+ State = GraphState.Stopped;\r
+ try {\r
+ int hr;\r
+ IntPtr hEvent;\r
+ MediaDescription = mediaDesc;\r
+ CurrentTC = new Timecode(mediaDesc.FirstFrame);\r
+ Debug.WriteLine("SetupGraph");\r
+ // Set up the graph\r
+ SetupGraph(hWin);\r
+\r
+ hWin.Hide();\r
+ hWin.Show();\r
+\r
+ // Get the event handle the graph will use to signal\r
+ // when events occur\r
+ Debug.WriteLine("GetEventHandle");\r
+ hr = m_mediaEvent.GetEventHandle(out hEvent);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ // Wrap the graph event with a ManualResetEvent\r
+ m_mre = new ManualResetEvent(false);\r
+ m_mre.SafeWaitHandle = new SafeWaitHandle(hEvent, true);\r
+\r
+ // Create a new thread to wait for events\r
+ Debug.WriteLine("m_eventThread.Start()");\r
+ m_eventThread = new Thread(new ThreadStart(EventWait));\r
+ m_eventThread.Name = "Media Event Thread";\r
+ m_eventThread.Start();\r
+\r
+ m_Bitmap = Properties.Resources.lgs;\r
+\r
+ tcWorker = new BackgroundWorker();\r
+ tcWorker.DoWork += TcWorker_DoWork;\r
+ tcWorker.WorkerSupportsCancellation = true;\r
+ tcWorker.RunWorkerAsync(tcLock);\r
+\r
+ }\r
+ catch {\r
+ Dispose();\r
+ throw;\r
+ }\r
+ }\r
+\r
+ private void TcWorker_DoWork(object sender, DoWorkEventArgs e) {\r
+ while (!e.Cancel) {\r
+ UpdateTC();\r
+ Thread.Sleep(10);\r
+ }\r
+ }\r
+\r
+\r
+ // start playing\r
+ public void Play() {\r
+ // If we aren't already playing (or shutting down)\r
+ if (State == GraphState.Stopped || State == GraphState.Paused) {\r
+ int hr = m_mediaCtrl.Run();\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ State = GraphState.Playing;\r
+ }\r
+ }\r
+\r
+ // Pause the capture graph.\r
+ public void Pause() {\r
+ // If we are playing\r
+ if (State == GraphState.Playing) {\r
+ int hr = m_mediaCtrl.Pause();\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ State = GraphState.Paused;\r
+ Seek(CurrentTC.ZeroBasedFrames);\r
+ }\r
+ }\r
+\r
+ // Pause the capture graph.\r
+ public void Stop() {\r
+ // Can only Stop when playing or paused\r
+ if (State == GraphState.Playing || State == GraphState.Paused) {\r
+ int hr = m_mediaCtrl.Stop();\r
+ DsError.ThrowExceptionForHR(hr);\r
+ State = GraphState.Stopped;\r
+ }\r
+ Rewind();\r
+ PlayEvent?.Invoke();\r
+ }\r
+\r
+ // Reset the clip back to the beginning\r
+ public void Rewind() {\r
+ Seek(0);\r
+ }\r
+\r
+ public void Seek(int value) {\r
+ double frameLength = (double)MEDIATIME_REFERENCE / MediaDescription.FrameRate;\r
+ long avgTimePerFrame = (long)Math.Ceiling(MEDIATIME_REFERENCE / MediaDescription.FrameRate);\r
+ long requestedPosition = (long)Math.Ceiling(value * frameLength);\r
+ int hr = m_mediaSeek.SetPositions(requestedPosition, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ long currentPosition;\r
+ hr = m_mediaSeek.GetCurrentPosition(out currentPosition);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ bool corrected = false;\r
+ int reachedFrames = (int)Math.Abs((double)currentPosition / avgTimePerFrame);\r
+ if (reachedFrames != value) {\r
+ //NTSC-n nem megy a seek a kerekítési hibák miatt, mindíg ua. a frame jön ki \r
+ requestedPosition += (int)frameLength / 2;\r
+ hr = m_mediaSeek.SetPositions(requestedPosition, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ corrected = true;\r
+ }\r
+\r
+ Debug.WriteLine("Seeking requested frame {0} got frame {1}, media position {2}, frame length {3}, corrected {4}", value, reachedFrames, requestedPosition, avgTimePerFrame, corrected);\r
+ }\r
+\r
+ private void UpdateTC() {\r
+ if (m_mediaSeek == null)\r
+ return;\r
+ long currentPosition;\r
+ int hr = m_mediaSeek.GetCurrentPosition(out currentPosition);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ long AvgTimePerFrame = (long)Math.Ceiling(MEDIATIME_REFERENCE / MediaDescription.FrameRate);\r
+ int frames = (int)Math.Abs((double)currentPosition / AvgTimePerFrame);\r
+ if (CurrentTC.ZeroBasedFrames != frames) {\r
+ CurrentTC.Set(frames);\r
+ //Debug.WriteLine("Current frame is {0} ({1}), media position is {2}, AVG frame time is {3}", frames, CurrentTC.ToString(), currentPosition, AvgTimePerFrame);\r
+ }\r
+ PlayEvent?.Invoke();\r
+\r
+ }\r
+\r
+ // Build the capture graph for grabber and renderer.</summary>\r
+ // (Control to show video in, Filename to play)\r
+ private void SetupGraph(Control hWin) {\r
+ int hr;\r
+\r
+ m_videoWidth = MediaDescription.Resolution.Width;\r
+ m_videoHeight = MediaDescription.Resolution.Height;\r
+\r
+ try {\r
+ m_FilterGraph = new FilterGraph() as IFilterGraph2;\r
+\r
+ IGraphBuilder graphBuilder = m_FilterGraph as IGraphBuilder;\r
+ m_mediaSeek = m_FilterGraph as IMediaSeeking;\r
+ m_mediaPosition = m_FilterGraph as IMediaPosition;\r
+ m_mediaEvent = m_FilterGraph as IMediaEvent;\r
+ m_mediaCtrl = m_FilterGraph as IMediaControl;\r
+ m_videoWindow = m_FilterGraph as IVideoWindow;\r
+\r
+#if DEBUG\r
+ m_DsRot = new DsROTEntry(m_FilterGraph);\r
+#endif\r
+ IBaseFilter sourceFilter = null;\r
+ hr = m_FilterGraph.AddSourceFilter(MediaDescription.FileName, MediaDescription.FileName, out sourceFilter);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ IBaseFilter splitter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Splitter");\r
+ //IBaseFilter splitter = FilterGraphTools.AddFilterByDevicePath(graphBuilder, @"c:\Programs\LAVFilters\LAVSplitter.ax", "LAV Splitter");\r
+ if (splitter == null)\r
+ throw new Exception("No splitter!");\r
+\r
+ FilterGraphTools.ConnectFilters(graphBuilder, sourceFilter, "Output", splitter, "Input", true);\r
+\r
+ IBaseFilter videoDecoder = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Video Decoder");\r
+ if (videoDecoder == null)\r
+ throw new Exception("No video decoder!");\r
+\r
+ FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Video", videoDecoder, "Input", true);\r
+\r
+ IBaseFilter sampGrabber = (IBaseFilter)new SampleGrabber();\r
+ ConfigureSampleGrabber((ISampleGrabber)sampGrabber);\r
+ hr = m_FilterGraph.AddFilter(sampGrabber, "Sample Grabber");\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ FilterGraphTools.ConnectFilters(graphBuilder, videoDecoder, "Output", sampGrabber, "Input", true);\r
+\r
+ m_videoRenderer = (IBaseFilter)new VideoMixingRenderer9();\r
+ hr = m_FilterGraph.AddFilter(m_videoRenderer, "Video Mixing Renderer 9");\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ FilterGraphTools.ConnectFilters(graphBuilder, sampGrabber, "Output", m_videoRenderer, "VMR Input0", true);\r
+\r
+ ConfigureVideoWindow(hWin);\r
+\r
+ if (DsFindPin.ByName(splitter, "Audio") != null) {\r
+ IBaseFilter audioDecoder = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "LAV Audio Decoder");\r
+ if (audioDecoder == null)\r
+ throw new Exception("No audio decoder!");\r
+\r
+ FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Audio", audioDecoder, "Input", true);\r
+ FilterGraphTools.RenderPin(graphBuilder, audioDecoder, "Output");\r
+ }\r
+\r
+ SaveSizeInfo(sampGrabber as ISampleGrabber);\r
+\r
+ }\r
+ catch (Exception e) {\r
+ Debug.WriteLine(e.Message);\r
+ }\r
+ finally {\r
+ }\r
+#if DEBUG\r
+ // Double check to make sure we aren't releasing something\r
+ // important.\r
+ //GC.Collect();\r
+ //GC.WaitForPendingFinalizers();\r
+#endif\r
+ }\r
+\r
+\r
+ // Configure the video window\r
+ private void ConfigureVideoWindow(Control hWin) {\r
+ int hr;\r
+\r
+ // Set the output window\r
+ hr = m_videoWindow.put_Owner(hWin.Handle);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ hr = m_videoWindow.put_MessageDrain(hWin.Handle);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ // Set the window style\r
+ hr = m_videoWindow.put_WindowStyle((WindowStyle.Child | WindowStyle.ClipChildren | WindowStyle.ClipSiblings));\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ // Make the window visible\r
+ hr = m_videoWindow.put_Visible(OABool.True);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ UpdateVideoWindow(hWin);\r
+ }\r
+\r
+ public void UpdateVideoWindow(Control hWin) {\r
+ int hr;\r
+ // Position the playing location\r
+ Rectangle rc = hWin.ClientRectangle;\r
+ double x = (double)m_videoWidth / m_videoHeight;\r
+ double y = (double)rc.Right / rc.Bottom;\r
+ int playerWidth = 0;\r
+ int playerHeight = 0;\r
+ if (x - y < 0) {\r
+ playerWidth = (int)Math.Ceiling(rc.Bottom * x);\r
+ playerHeight = rc.Bottom;\r
+ } else {\r
+ x = (double)m_videoHeight / m_videoWidth;\r
+ playerWidth = rc.Right;\r
+ playerHeight = (int)Math.Ceiling(rc.Right * x); ;\r
+ }\r
+\r
+ hr = m_videoWindow.SetWindowPosition((rc.Right - playerWidth) / 2, (rc.Bottom - playerHeight) / 2, playerWidth, playerHeight);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+\r
+ public void ToggleFullscreen() {\r
+ m_videoWindow.put_FullScreenMode(IsFullscreen() ? OABool.False : OABool.True);\r
+ }\r
+\r
+ public bool IsFullscreen() {\r
+ OABool isFullscreen;\r
+ int hr = m_videoWindow.get_FullScreenMode(out isFullscreen);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ return isFullscreen == OABool.True ? true : false;\r
+ }\r
+\r
+ // Set the options on the sample grabber\r
+ private void ConfigureSampleGrabber(ISampleGrabber sampGrabber) {\r
+ AMMediaType media;\r
+ int hr;\r
+\r
+ // Set the media type to Video/RBG24\r
+ media = new AMMediaType();\r
+ media.majorType = MediaType.Video;\r
+ media.subType = MediaSubType.RGB24;\r
+ media.formatType = FormatType.VideoInfo;\r
+ hr = sampGrabber.SetMediaType(media);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ DsUtils.FreeAMMediaType(media);\r
+ media = null;\r
+\r
+ hr = sampGrabber.SetCallback(this, 1);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ // Configure the samplegrabber\r
+ hr = sampGrabber.SetBufferSamples(true);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+\r
+ private void SaveSizeInfo(ISampleGrabber sampGrabber) {\r
+ int hr;\r
+\r
+ // Get the media type from the SampleGrabber\r
+ AMMediaType media = new AMMediaType();\r
+ hr = sampGrabber.GetConnectedMediaType(media);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ if ((media.formatType != FormatType.VideoInfo) || (media.formatPtr == IntPtr.Zero)) {\r
+ throw new NotSupportedException("Unknown Grabber Media Format");\r
+ }\r
+\r
+ // Grab the size info\r
+ VideoInfoHeader videoInfoHeader = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader));\r
+ m_videoWidth = videoInfoHeader.BmiHeader.Width;\r
+ m_videoHeight = videoInfoHeader.BmiHeader.Height;\r
+ m_stride = m_videoWidth * (videoInfoHeader.BmiHeader.BitCount / 8);\r
+\r
+ DsUtils.FreeAMMediaType(media);\r
+ media = null;\r
+ }\r
+\r
+ // Shut down capture\r
+ private void CloseInterfaces() {\r
+ Debug.WriteLine("CloseInterfaces");\r
+ int hr;\r
+ GC.SuppressFinalize(this);\r
+ tcWorker.CancelAsync();\r
+ lock (this) {\r
+ if (State != GraphState.Exiting) {\r
+ State = GraphState.Exiting;\r
+\r
+ // Release the thread (if the thread was started)\r
+ if (m_mre != null) {\r
+ m_mre.Set();\r
+ }\r
+ }\r
+\r
+ if (m_mediaCtrl != null) {\r
+ // Stop the graph\r
+ hr = m_mediaCtrl.Stop();\r
+ FilterGraphTools.DisconnectAllPins((IGraphBuilder)m_mediaCtrl);\r
+ FilterGraphTools.RemoveAllFilters((IGraphBuilder)m_mediaCtrl);\r
+ m_mediaCtrl = null;\r
+\r
+ }\r
+\r
+ if (m_videoWindow != null) {\r
+ hr = m_videoWindow.put_Visible(OABool.False);\r
+ hr = m_videoWindow.put_MessageDrain(IntPtr.Zero);\r
+ hr = m_videoWindow.put_Owner(IntPtr.Zero);\r
+ m_videoWindow = null;\r
+ }\r
+\r
+ m_mediaEvent = null;\r
+ m_mediaSeek = null;\r
+ m_mediaPosition = null;\r
+\r
+#if DEBUG\r
+ if (m_DsRot != null) {\r
+ m_DsRot.Dispose();\r
+ m_DsRot = null;\r
+ }\r
+#endif\r
+ if (m_FilterGraph != null) {\r
+ Marshal.ReleaseComObject(m_FilterGraph);\r
+ m_FilterGraph = null;\r
+ }\r
+ }\r
+ GC.Collect();\r
+ //if (m_eventThread != null)\r
+ // m_eventThread.Join();\r
+ }\r
+\r
+ public int SampleCB(double SampleTime, IMediaSample pSample) {\r
+ Marshal.ReleaseComObject(pSample);\r
+ return 0;\r
+ }\r
+\r
+ public int BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen) {\r
+ return 0;\r
+ int frames = (int)Math.Abs(SampleTime * MediaDescription.FrameRate);\r
+ //Debug.WriteLine("BufferCB frames {0}, sample time {1}", frames, SampleTime);\r
+ Font font = new Font("Tahoma", 30);\r
+ string display = frames.ToString();\r
+ SizeF size = new SizeF(100, 100);\r
+ m_Bitmap = new Bitmap((int)Math.Ceiling(size.Width), (int)Math.Ceiling(size.Height));\r
+ GraphicsUnit units = GraphicsUnit.Point;\r
+ RectangleF bitmapRectF = m_Bitmap.GetBounds(ref units);\r
+\r
+ Graphics g = Graphics.FromImage(m_Bitmap);\r
+\r
+ g.SmoothingMode = SmoothingMode.AntiAlias;\r
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;\r
+ g.PixelOffsetMode = PixelOffsetMode.HighQuality;\r
+ g.FillRectangle(Brushes.Transparent, bitmapRectF);\r
+ g.DrawString(display, font, Brushes.White, bitmapRectF);\r
+ g.Flush();\r
+\r
+ m_Bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);\r
+ Rectangle r = new Rectangle(0, 0, m_Bitmap.Width, m_Bitmap.Height);\r
+ lock (this) {\r
+ BitmapData bmdLogo = m_Bitmap.LockBits(r, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);\r
+ if (bmdLogo != null) {\r
+ IntPtr ipSource = bmdLogo.Scan0;\r
+ IntPtr ipDest = pBuffer;\r
+\r
+ for (int x = 0; x < bmdLogo.Height; x++) {\r
+ CopyMemory(ipDest, ipSource, (uint)bmdLogo.Stride);\r
+ ipDest = (IntPtr)(ipDest.ToInt64() + m_stride);\r
+ ipSource = (IntPtr)(ipSource.ToInt64() + bmdLogo.Stride);\r
+ }\r
+ }\r
+ m_Bitmap.UnlockBits(bmdLogo);\r
+ bmdLogo = null;\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ // Wait for events to happen. This approach uses waiting on an event handle.\r
+ // The nice thing about doing it this way is that you aren't in the windows message\r
+ // loop, and don't have to worry about re-entrency or taking too long. Plus, being\r
+ // in a class as we are, we don't have access to the message loop.\r
+ // Alternately, you can receive your events as windows messages. See\r
+ // IMediaEventEx.SetNotifyWindow.\r
+ private void EventWait() {\r
+ // Returned when GetEvent is called but there are no events\r
+ const int E_ABORT = unchecked((int)0x80004004);\r
+\r
+ int hr;\r
+ IntPtr p1, p2;\r
+ EventCode ec;\r
+\r
+ do {\r
+ // Wait for an event\r
+ m_mre.WaitOne(-1, true);\r
+\r
+ // Avoid contention for m_State\r
+ lock (this) {\r
+ // If we are not shutting down\r
+ if (State != GraphState.Exiting) {\r
+ // Read the event\r
+ for (\r
+ hr = m_mediaEvent.GetEvent(out ec, out p1, out p2, 0);\r
+ hr >= 0;\r
+ hr = m_mediaEvent.GetEvent(out ec, out p1, out p2, 0)\r
+ ) {\r
+ // Write the event name to the debug window\r
+ Debug.WriteLine(ec.ToString());\r
+\r
+ // If the clip is finished playing\r
+ if (ec == EventCode.Complete) {\r
+ //Stop();\r
+ }\r
+\r
+ // Release any resources the message allocated\r
+ hr = m_mediaEvent.FreeEventParams(ec, p1, p2);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ //lock (tcLock) {\r
+ // UpdateTC("");\r
+ //}\r
+\r
+ }\r
+\r
+ // If the error that exited the loop wasn't due to running out of events\r
+ if (hr != E_ABORT) {\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+ } else {\r
+ // We are shutting down\r
+ Debug.WriteLine("Shutdown");\r
+ break;\r
+ }\r
+ }\r
+ } while (true);\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+/****************************************************************************\r
+While the underlying libraries are covered by LGPL, this sample is released \r
+as public domain. It is distributed in the hope that it will be useful, but \r
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY \r
+or FITNESS FOR A PARTICULAR PURPOSE. \r
+*****************************************************************************/\r
+\r
+using System;\r
+using System.Collections;\r
+using System.Runtime.InteropServices;\r
+using System.Security.Permissions;\r
+\r
+using DirectShowLib;\r
+\r
+#if !USING_NET11\r
+using System.Runtime.InteropServices.ComTypes;\r
+using System.Collections.Generic;\r
+using System.Text.RegularExpressions;\r
+#endif\r
+\r
+namespace DirectShowLib.Utils {\r
+ /// <summary>\r
+ /// A collection of methods to do common DirectShow tasks.\r
+ /// </summary>\r
+\r
+ public sealed class FilterGraphTools {\r
+ private FilterGraphTools() { }\r
+\r
+ /// <summary>\r
+ /// Add a filter to a DirectShow Graph using its CLSID\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="clsid">a valid CLSID. This object must implement IBaseFilter</param>\r
+ /// <param name="name">the name used in the graph (may be null)</param>\r
+ /// <returns>an instance of the filter if the method successfully created it, null if not</returns>\r
+ /// <remarks>\r
+ /// You can use <see cref="IsThisComObjectInstalled">IsThisComObjectInstalled</see> to check is the CLSID is valid before calling this method\r
+ /// </remarks>\r
+ /// <example>This sample shows how to programmatically add a NVIDIA Video decoder filter to a graph\r
+ /// <code>\r
+ /// Guid nvidiaVideoDecClsid = new Guid("71E4616A-DB5E-452B-8CA5-71D9CC7805E9");\r
+ /// \r
+ /// if (FilterGraphTools.IsThisComObjectInstalled(nvidiaVideoDecClsid))\r
+ /// {\r
+ /// filter = FilterGraphTools.AddFilterFromClsid(graphBuilder, nvidiaVideoDecClsid, "NVIDIA Video Decoder");\r
+ /// }\r
+ /// else\r
+ /// {\r
+ /// // use another filter...\r
+ /// }\r
+ /// </code>\r
+ /// </example>\r
+ /// <seealso cref="IsThisComObjectInstalled"/>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if errors occur when the filter is add to the graph</exception>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static IBaseFilter AddFilterFromClsid(IGraphBuilder graphBuilder, Guid clsid, string name) {\r
+ int hr = 0;\r
+ IBaseFilter filter = null;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ try {\r
+ Type type = Type.GetTypeFromCLSID(clsid);\r
+ filter = (IBaseFilter)Activator.CreateInstance(type);\r
+\r
+ hr = graphBuilder.AddFilter(filter, name);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+ catch {\r
+ if (filter != null) {\r
+ Marshal.ReleaseComObject(filter);\r
+ filter = null;\r
+ }\r
+ }\r
+\r
+ return filter;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static object CreateComObjectFromClsid(Guid clsid) {\r
+ try {\r
+ Type type = Type.GetTypeFromCLSID(clsid);\r
+ return Activator.CreateInstance(type);\r
+ }\r
+ catch {\r
+ return null;\r
+ }\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// Add a filter to a DirectShow Graph using its name\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="deviceCategory">the filter category (see DirectShowLib.FilterCategory)</param>\r
+ /// <param name="friendlyName">the filter name (case-sensitive)</param>\r
+ /// <returns>an instance of the filter if the method successfully created it, null if not</returns>\r
+ /// <example>This sample shows how to programmatically add a NVIDIA Video decoder filter to a graph\r
+ /// <code>\r
+ /// filter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, "NVIDIA Video Decoder");\r
+ /// </code>\r
+ /// </example>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if errors occur when the filter is add to the graph</exception>\r
+\r
+ public static IBaseFilter AddFilterByName(IGraphBuilder graphBuilder, Guid deviceCategory, string friendlyName) {\r
+ int hr = 0;\r
+ IBaseFilter filter = null;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ DsDevice[] devices = DsDevice.GetDevicesOfCat(deviceCategory);\r
+\r
+ for (int i = 0; i < devices.Length; i++) {\r
+ if (string.IsNullOrEmpty(devices[i].Name)) //if the name is empty ignore the filter\r
+ continue;\r
+ else {\r
+ if (!devices[i].Name.Equals(friendlyName))\r
+ continue;\r
+ }\r
+\r
+ hr = (graphBuilder as IFilterGraph2).AddSourceFilterForMoniker(devices[i].Mon, null, friendlyName, out filter);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ break;\r
+ }\r
+\r
+ return filter;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Add a filter to a DirectShow Graph using its Moniker's device path\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="devicePath">a moniker path</param>\r
+ /// <param name="name">the name to use for the filter in the graph</param>\r
+ /// <returns>an instance of the filter if the method successfully creates it, null if not</returns>\r
+ /// <example>This sample shows how to programmatically add a NVIDIA Video decoder filter to a graph\r
+ /// <code>\r
+ /// string devicePath = @"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{71E4616A-DB5E-452B-8CA5-71D9CC7805E9}";\r
+ /// filter = FilterGraphTools.AddFilterByDevicePath(graphBuilder, devicePath, "NVIDIA Video Decoder");\r
+ /// </code>\r
+ /// </example>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if errors occur when the filter is add to the graph</exception>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static IBaseFilter AddFilterByDevicePath(IGraphBuilder graphBuilder, string devicePath, string name) {\r
+ int hr = 0;\r
+ IBaseFilter filter = null;\r
+#if USING_NET11\r
+ UCOMIBindCtx bindCtx = null;\r
+ UCOMIMoniker moniker = null;\r
+#else\r
+ IBindCtx bindCtx = null;\r
+ IMoniker moniker = null;\r
+#endif\r
+ int eaten;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ try {\r
+ hr = NativeMethods.CreateBindCtx(0, out bindCtx);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = NativeMethods.MkParseDisplayName(bindCtx, devicePath, out eaten, out moniker);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = (graphBuilder as IFilterGraph2).AddSourceFilterForMoniker(moniker, bindCtx, name, out filter);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+ catch {\r
+ // An error occur. Just returning null...\r
+ }\r
+ finally {\r
+ if (bindCtx != null) Marshal.ReleaseComObject(bindCtx);\r
+ if (moniker != null) Marshal.ReleaseComObject(moniker);\r
+ }\r
+\r
+ return filter;\r
+ }\r
+\r
+ public static IBaseFilter CreateFilterFromPath(Guid category, string devicePath) {\r
+ object source = null;\r
+ Guid iid = typeof(IBaseFilter).GUID;\r
+ foreach (DsDevice device in DsDevice.GetDevicesOfCat(category)) {\r
+ if (device.DevicePath.CompareTo(devicePath) == 0) {\r
+ device.Mon.BindToObject(null, null, ref iid, out source);\r
+ break;\r
+ }\r
+ }\r
+ return (IBaseFilter)source;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Find a filter in a DirectShow Graph using its name\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="filterName">the filter name to find (case-sensitive)</param>\r
+ /// <returns>an instance of the filter if found, null if not</returns>\r
+ /// <seealso cref="FindFilterByClsid"/>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static IBaseFilter FindFilterByName(IGraphBuilder graphBuilder, string filterName) {\r
+ int hr = 0;\r
+ IBaseFilter filter = null;\r
+ IEnumFilters enumFilters = null;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ if (hr == 0) {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+ int pcFetched;\r
+ while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) {\r
+ FilterInfo filterInfo;\r
+\r
+ hr = filters[0].QueryFilterInfo(out filterInfo);\r
+ if (hr == 0) {\r
+ if (filterInfo.pGraph != null)\r
+ Marshal.ReleaseComObject(filterInfo.pGraph);\r
+\r
+ if (filterInfo.achName.Equals(filterName)) {\r
+ filter = filters[0];\r
+ break;\r
+ }\r
+ }\r
+\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ }\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+\r
+ return filter;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static string GetFilterName(IBaseFilter filter) {\r
+ int hr = 0;\r
+ string filterName = string.Empty;\r
+\r
+ FilterInfo filterInfo;\r
+ hr = filter.QueryFilterInfo(out filterInfo);\r
+ if (hr == 0) {\r
+ if (filterInfo.pGraph != null)\r
+ Marshal.ReleaseComObject(filterInfo.pGraph);\r
+\r
+ filterName = filterInfo.achName;\r
+ }\r
+\r
+ return filterName;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static IBaseFilter FindFilterByClsid(IGraphBuilder graphBuilder, string filterClsid) {\r
+ int hr = 0;\r
+ IBaseFilter filter = null;\r
+ IEnumFilters enumFilters = null;\r
+ Guid gClsid = new Guid(filterClsid);\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ if (hr == 0) {\r
+ while (true) {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+ int fetched;\r
+ hr = enumFilters.Next(1, filters, out fetched);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ if (fetched > 0) {\r
+ Guid clsid;\r
+\r
+ hr = filters[0].GetClassID(out clsid);\r
+\r
+ if ((hr == 0) && (clsid == gClsid)) {\r
+ filter = filters[0];\r
+ break;\r
+ }\r
+\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ } else\r
+ break;\r
+ }\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+\r
+ return filter;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Find a filter in a DirectShow Graph using its CLSID\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="filterClsid">the CLSID to find</param>\r
+ /// <returns>an instance of the filter if found, null if not</returns>\r
+ /// <seealso cref="FindFilterByName"/>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static IBaseFilter FindFilterByClsid(IGraphBuilder graphBuilder, Guid filterClsid) {\r
+ int hr = 0;\r
+ IBaseFilter filter = null;\r
+ IEnumFilters enumFilters = null;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ if (hr == 0) {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+\r
+ int pcFetched;\r
+ while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) {\r
+ Guid clsid;\r
+\r
+ hr = filters[0].GetClassID(out clsid);\r
+\r
+ if ((hr == 0) && (clsid == filterClsid)) {\r
+ filter = filters[0];\r
+ break;\r
+ }\r
+\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ }\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+\r
+ return filter;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void SetGraphOutputFile(IGraphBuilder graphBuilder, string OutputFile) {\r
+ int hr = 0;\r
+ IEnumFilters enumFilters = null;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ if (hr == 0) {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+\r
+ int pcFetched;\r
+ while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) {\r
+ Guid clsid;\r
+\r
+ IFileSinkFilter fsf = filters[0] as IFileSinkFilter;\r
+\r
+ if (fsf != null) {\r
+ hr = fsf.SetFileName(OutputFile, null);\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ break;\r
+ }\r
+\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ }\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Render a filter's pin in a DirectShow Graph\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="source">the filter containing the pin to render</param>\r
+ /// <param name="pinName">the pin name</param>\r
+ /// <returns>true if rendering is a success, false if not</returns>\r
+ /// <example>\r
+ /// <code>\r
+ /// hr = graphBuilder.AddSourceFilter(@"foo.avi", "Source Filter", out filter);\r
+ /// DsError.ThrowExceptionForHR(hr);\r
+ /// \r
+ /// if (!FilterGraphTools.RenderPin(graphBuilder, filter, "Output"))\r
+ /// {\r
+ /// // Something went wrong...\r
+ /// }\r
+ /// </code>\r
+ /// </example>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder or source is null</exception>\r
+ /// <remarks>This method assumes that the filter is part of the given graph</remarks>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static bool RenderPin(IGraphBuilder graphBuilder, IBaseFilter source, string pinName) {\r
+ int hr = 0;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ if (source == null)\r
+ throw new ArgumentNullException("source");\r
+\r
+ IPin pin = DsFindPin.ByName(source, pinName);\r
+\r
+ if (pin != null) {\r
+ hr = graphBuilder.Render(pin);\r
+ Marshal.ReleaseComObject(pin);\r
+\r
+ return (hr >= 0);\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static IBaseFilter GetFilterFromPin(IPin pin) {\r
+ PinInfo pi = default(PinInfo);\r
+ IBaseFilter filter;\r
+ int hr;\r
+\r
+ //try\r
+ //{\r
+ hr = pin.QueryPinInfo(out pi);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ filter = pi.filter;\r
+ return filter;\r
+ //}\r
+ //finally\r
+ //{\r
+ // DsUtils.FreePinInfo(pi);\r
+ //}\r
+ }\r
+\r
+ /// <summary>\r
+ /// Disconnect all pins on a given filter\r
+ /// </summary>\r
+ /// <param name="filter">the filter on which to disconnect all the pins</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if filter is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if errors occured during the disconnection process</exception>\r
+ /// <remarks>Both input and output pins are disconnected</remarks>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void DisconnectPins(IBaseFilter filter) {\r
+ int hr = 0;\r
+\r
+ if (filter == null)\r
+ throw new ArgumentNullException("filter");\r
+\r
+ IEnumPins enumPins;\r
+ IPin[] pins = new IPin[1];\r
+\r
+ hr = filter.EnumPins(out enumPins);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ try {\r
+ int pcFetched;\r
+ while (enumPins.Next(pins.Length, pins, out pcFetched) == 0) {\r
+ try {\r
+ hr = pins[0].Disconnect();\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+ finally {\r
+ Marshal.ReleaseComObject(pins[0]);\r
+ }\r
+ }\r
+ }\r
+ finally {\r
+ Marshal.ReleaseComObject(enumPins);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Disconnect pins of all the filters in a DirectShow Graph\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if the method can't enumerate its filters</exception>\r
+ /// <remarks>This method doesn't throw an exception if an error occurs during pin disconnections</remarks>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void DisconnectAllPins(IGraphBuilder graphBuilder) {\r
+ int hr = 0;\r
+ IEnumFilters enumFilters;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ try {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+ int pcFetched;\r
+ while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) {\r
+ try {\r
+ DisconnectPins(filters[0]);\r
+ }\r
+ catch { }\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ }\r
+ }\r
+ finally {\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Remove and release all filters from a DirectShow Graph\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if the method can't enumerate its filters</exception>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void RemoveAllFilters(IGraphBuilder graphBuilder) {\r
+ int hr = 0;\r
+ IEnumFilters enumFilters;\r
+ ArrayList filtersArray = new ArrayList();\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ try {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+ int pcFetched;\r
+ while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) {\r
+ filtersArray.Add(filters[0]);\r
+ }\r
+ }\r
+ finally {\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+\r
+ foreach (IBaseFilter filter in filtersArray) {\r
+ hr = graphBuilder.RemoveFilter(filter);\r
+ Marshal.ReleaseComObject(filter);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Save a DirectShow Graph to a GRF file\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="fileName">the file to be saved</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if errors occur during the file creation</exception>\r
+ /// <seealso cref="LoadGraphFile"/>\r
+ /// <remarks>This method overwrites any existing file</remarks>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void SaveGraphFile(IGraphBuilder graphBuilder, string fileName) {\r
+ int hr = 0;\r
+ IStorage storage = null;\r
+#if USING_NET11\r
+ UCOMIStream stream = null;\r
+#else\r
+ IStream stream = null;\r
+#endif\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ try {\r
+ hr = NativeMethods.StgCreateDocfile(\r
+ fileName,\r
+ STGM.Create | STGM.Transacted | STGM.ReadWrite | STGM.ShareExclusive,\r
+ 0,\r
+ out storage\r
+ );\r
+\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = storage.CreateStream(\r
+ @"ActiveMovieGraph",\r
+ STGM.Write | STGM.Create | STGM.ShareExclusive,\r
+ 0,\r
+ 0,\r
+ out stream\r
+ );\r
+\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = (graphBuilder as IPersistStream).Save(stream, true);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = storage.Commit(STGC.Default);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+ }\r
+ finally {\r
+ if (stream != null)\r
+ Marshal.ReleaseComObject(stream);\r
+ if (storage != null)\r
+ Marshal.ReleaseComObject(storage);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Load a DirectShow Graph from a file\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="fileName">the file to be loaded</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder is null</exception>\r
+ /// <exception cref="System.ArgumentException">Thrown if the given file is not a valid graph file</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if errors occur during loading</exception>\r
+ /// <seealso cref="SaveGraphFile"/>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void LoadGraphFile(IGraphBuilder graphBuilder, string fileName) {\r
+ int hr = 0;\r
+ IStorage storage = null;\r
+#if USING_NET11\r
+ UCOMIStream stream = null;\r
+#else\r
+ IStream stream = null;\r
+#endif\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ try {\r
+ if (NativeMethods.StgIsStorageFile(fileName) != 0)\r
+ throw new ArgumentException();\r
+\r
+ hr = NativeMethods.StgOpenStorage(\r
+ fileName,\r
+ null,\r
+ STGM.Transacted | STGM.Read | STGM.ShareDenyWrite,\r
+ IntPtr.Zero,\r
+ 0,\r
+ out storage\r
+ );\r
+\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = storage.OpenStream(\r
+ @"ActiveMovieGraph",\r
+ IntPtr.Zero,\r
+ STGM.Read | STGM.ShareExclusive,\r
+ 0,\r
+ out stream\r
+ );\r
+\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = (graphBuilder as IPersistStream).Load(stream);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+ }\r
+ finally {\r
+ if (stream != null)\r
+ Marshal.ReleaseComObject(stream);\r
+ if (storage != null)\r
+ Marshal.ReleaseComObject(storage);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Check if a DirectShow filter can display Property Pages\r
+ /// </summary>\r
+ /// <param name="filter">A DirectShow Filter</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if filter is null</exception>\r
+ /// <seealso cref="ShowFilterPropertyPage"/>\r
+ /// <returns>true if the filter has Property Pages, false if not</returns>\r
+ /// <remarks>\r
+ /// This method is intended to be used with <see cref="ShowFilterPropertyPage">ShowFilterPropertyPage</see>\r
+ /// </remarks>\r
+\r
+ public static bool HasPropertyPages(IBaseFilter filter) {\r
+ if (filter == null)\r
+ throw new ArgumentNullException("filter");\r
+\r
+ return ((filter as ISpecifyPropertyPages) != null);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Display Property Pages of a given DirectShow filter\r
+ /// </summary>\r
+ /// <param name="filter">A DirectShow Filter</param>\r
+ /// <param name="parent">A hwnd handle of a window to contain the pages</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if filter is null</exception>\r
+ /// <seealso cref="HasPropertyPages"/>\r
+ /// <remarks>\r
+ /// You can check if a filter supports Property Pages with the <see cref="HasPropertyPages">HasPropertyPages</see> method.<br/>\r
+ /// <strong>Warning</strong> : This method is blocking. It only returns when the Property Pages are closed.\r
+ /// </remarks>\r
+ /// <example>This sample shows how to check if a filter supports Property Pages and displays them\r
+ /// <code>\r
+ /// if (FilterGraphTools.HasPropertyPages(myFilter))\r
+ /// {\r
+ /// FilterGraphTools.ShowFilterPropertyPage(myFilter, myForm.Handle);\r
+ /// }\r
+ /// </code>\r
+ /// </example>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void ShowFilterPropertyPage(IBaseFilter filter, IntPtr parent) {\r
+ int hr = 0;\r
+ FilterInfo filterInfo;\r
+ DsCAUUID caGuid;\r
+ object[] objs;\r
+\r
+ if (filter == null)\r
+ throw new ArgumentNullException("filter");\r
+\r
+ if (HasPropertyPages(filter)) {\r
+ hr = filter.QueryFilterInfo(out filterInfo);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ if (filterInfo.pGraph != null)\r
+ Marshal.ReleaseComObject(filterInfo.pGraph);\r
+\r
+ hr = (filter as ISpecifyPropertyPages).GetPages(out caGuid);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ try {\r
+ objs = new object[1];\r
+ objs[0] = filter;\r
+\r
+ NativeMethods.OleCreatePropertyFrame(\r
+ parent, 0, 0,\r
+ filterInfo.achName,\r
+ objs.Length, objs,\r
+ caGuid.cElems, caGuid.pElems,\r
+ 0, 0,\r
+ IntPtr.Zero\r
+ );\r
+ }\r
+ finally {\r
+ Marshal.FreeCoTaskMem(caGuid.pElems);\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Check if a COM Object is available\r
+ /// </summary>\r
+ /// <param name="clsid">The CLSID of this object</param>\r
+ /// <example>This sample shows how to check if the MPEG-2 Demultiplexer filter is available\r
+ /// <code>\r
+ /// if (FilterGraphTools.IsThisComObjectInstalled(typeof(MPEG2Demultiplexer).GUID))\r
+ /// {\r
+ /// // Use it...\r
+ /// }\r
+ /// </code>\r
+ /// </example>\r
+ /// <returns>true if the object is available, false if not</returns>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static bool IsThisComObjectInstalled(Guid clsid) {\r
+ bool retval = false;\r
+\r
+ try {\r
+ Type type = Type.GetTypeFromCLSID(clsid);\r
+ object o = Activator.CreateInstance(type);\r
+ retval = true;\r
+ Marshal.ReleaseComObject(o);\r
+ }\r
+ catch { }\r
+\r
+ return retval;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static bool IsThisDeviceInstalled(string devicePath) {\r
+ bool retval = false;\r
+ IBindCtx bindCtx = null;\r
+ IMoniker moniker = null;\r
+\r
+ int eaten;\r
+\r
+ try {\r
+ int hr = NativeMethods.CreateBindCtx(0, out bindCtx);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ hr = NativeMethods.MkParseDisplayName(bindCtx, devicePath, out eaten, out moniker);\r
+ Marshal.ThrowExceptionForHR(hr);\r
+\r
+ retval = true;\r
+ }\r
+ catch { }\r
+ finally {\r
+ if (bindCtx != null) Marshal.ReleaseComObject(bindCtx);\r
+ if (moniker != null) Marshal.ReleaseComObject(moniker);\r
+ }\r
+\r
+ return retval;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Check if the Video Mixing Renderer 9 Filter is available\r
+ /// <seealso cref="IsThisComObjectInstalled"/>\r
+ /// </summary>\r
+ /// <remarks>\r
+ /// This method uses <see cref="IsThisComObjectInstalled">IsThisComObjectInstalled</see> internally\r
+ /// </remarks>\r
+ /// <returns>true if VMR9 is present, false if not</returns>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static bool IsVMR9Present() {\r
+ return IsThisComObjectInstalled(typeof(VideoMixingRenderer9).GUID);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Check if the Video Mixing Renderer 7 Filter is available\r
+ /// <seealso cref="IsThisComObjectInstalled"/>\r
+ /// </summary>\r
+ /// <remarks>\r
+ /// This method uses <see cref="IsThisComObjectInstalled">IsThisComObjectInstalled</see> internally\r
+ /// </remarks>\r
+ /// <returns>true if VMR7 is present, false if not</returns>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static bool IsVMR7Present() {\r
+ return IsThisComObjectInstalled(typeof(VideoMixingRenderer).GUID);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Connect pins from two filters\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="upFilter">the upstream filter</param>\r
+ /// <param name="sourcePinName">the upstream filter pin name</param>\r
+ /// <param name="downFilter">the downstream filter</param>\r
+ /// <param name="destPinName">the downstream filter pin name</param>\r
+ /// <param name="useIntelligentConnect">indicate if the method should use DirectShow's Intelligent Connect</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder, upFilter or downFilter are null</exception>\r
+ /// <exception cref="System.ArgumentException">Thrown if pin names are not found in filters</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if pins can't connect</exception>\r
+ /// <remarks>\r
+ /// If useIntelligentConnect is true, this method can add missing filters between the two pins.<br/>\r
+ /// If useIntelligentConnect is false, this method works only if the two media types are compatible.\r
+ /// </remarks>\r
+\r
+ public static void ConnectFilters(IGraphBuilder graphBuilder, IBaseFilter upFilter, string sourcePinName, IBaseFilter downFilter, string destPinName, bool useIntelligentConnect) {\r
+ ConnectFilters(graphBuilder, upFilter, sourcePinName, downFilter, destPinName, useIntelligentConnect, false);\r
+ }\r
+\r
+ public static void ConnectFilters(IGraphBuilder graphBuilder, IBaseFilter upFilter, string sourcePinName, IBaseFilter downFilter, string destPinName, bool useIntelligentConnect, bool ignoreConnectedPins) {\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ if (upFilter == null)\r
+ throw new ArgumentNullException("upFilter");\r
+\r
+ if (downFilter == null)\r
+ throw new ArgumentNullException("downFilter");\r
+\r
+ IPin sourcePin, destPin;\r
+ IPin cPin = null;\r
+\r
+ sourcePin = DsFindPin.ByName(upFilter, sourcePinName);\r
+ if (sourcePin == null)\r
+ throw new ArgumentException("The source filter has no pin called : " + sourcePinName, sourcePinName);\r
+\r
+ destPin = DsFindPin.ByName(downFilter, destPinName);\r
+ if (destPin == null)\r
+ throw new ArgumentException("The downstream filter has no pin called : " + destPinName, destPinName);\r
+\r
+ try {\r
+ sourcePin.ConnectedTo(out cPin);\r
+ if (cPin == null || !ignoreConnectedPins)\r
+ ConnectFilters(graphBuilder, sourcePin, destPin, useIntelligentConnect);\r
+ }\r
+ finally {\r
+ if (cPin != null)\r
+ Marshal.ReleaseComObject(cPin);\r
+\r
+ Marshal.ReleaseComObject(sourcePin);\r
+ Marshal.ReleaseComObject(destPin);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Connect pins from two filters\r
+ /// </summary>\r
+ /// <param name="graphBuilder">the IGraphBuilder interface of the graph</param>\r
+ /// <param name="sourcePin">the source (upstream / output) pin</param>\r
+ /// <param name="destPin">the destination (downstream / input) pin</param>\r
+ /// <param name="useIntelligentConnect">indicates if the method should use DirectShow's Intelligent Connect</param>\r
+ /// <exception cref="System.ArgumentNullException">Thrown if graphBuilder, sourcePin or destPin are null</exception>\r
+ /// <exception cref="System.Runtime.InteropServices.COMException">Thrown if pins can't connect</exception>\r
+ /// <remarks>\r
+ /// If useIntelligentConnect is true, this method can add missing filters between the two pins.<br/>\r
+ /// If useIntelligentConnect is false, this method works only if the two media types are compatible.\r
+ /// </remarks>\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void ConnectFilters(IGraphBuilder graphBuilder, IPin sourcePin, IPin destPin, bool useIntelligentConnect) {\r
+ int hr = 0;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ if (sourcePin == null)\r
+ throw new ArgumentNullException("sourcePin");\r
+\r
+ if (destPin == null)\r
+ throw new ArgumentNullException("destPin");\r
+\r
+ if (useIntelligentConnect) {\r
+ hr = graphBuilder.Connect(sourcePin, destPin);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ } else {\r
+ hr = graphBuilder.ConnectDirect(sourcePin, destPin, null);\r
+ DsError.ThrowExceptionForHR(hr);\r
+ }\r
+ }\r
+\r
+ public static IPin FindPinByMediaType(IBaseFilter filter, PinDirection direction, Guid mType, Guid sType) {\r
+ IPin pRet = null;\r
+ IPin tPin = null;\r
+ int hr;\r
+ int index = 0;\r
+\r
+ tPin = DsFindPin.ByDirection(filter, direction, index);\r
+ while (tPin != null) {\r
+\r
+ IEnumMediaTypes emtDvr = null;\r
+ AMMediaType[] amtDvr = new AMMediaType[1];\r
+\r
+ try {\r
+ tPin.EnumMediaTypes(out emtDvr);\r
+ int pcFetched;\r
+ hr = emtDvr.Next(1, amtDvr, out pcFetched);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ if (amtDvr[0] != null && amtDvr[0].majorType == mType && (amtDvr[0].subType == sType || sType == MediaSubType.Null)) {\r
+ pRet = tPin;\r
+ break;\r
+ }\r
+ }\r
+ finally {\r
+ DsUtils.FreeAMMediaType(amtDvr[0]);\r
+ if (emtDvr != null)\r
+ Marshal.ReleaseComObject(emtDvr);\r
+ }\r
+\r
+ if (tPin != null)\r
+ Marshal.ReleaseComObject(tPin);\r
+ tPin = null;\r
+ index++;\r
+ tPin = DsFindPin.ByDirection(filter, direction, index);\r
+ }\r
+\r
+ return pRet;\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public static void SetSyncSource(IGraphBuilder graphBuilder, IReferenceClock clock) {\r
+ int hr = 0;\r
+ IEnumFilters enumFilters = null;\r
+\r
+ if (graphBuilder == null)\r
+ throw new ArgumentNullException("graphBuilder");\r
+\r
+ hr = graphBuilder.EnumFilters(out enumFilters);\r
+ if (hr == 0) {\r
+ IBaseFilter[] filters = new IBaseFilter[1];\r
+ int pcFetched;\r
+ while (enumFilters.Next(filters.Length, filters, out pcFetched) == 0) {\r
+ hr = filters[0].SetSyncSource(clock);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ Marshal.ReleaseComObject(filters[0]);\r
+ }\r
+ Marshal.ReleaseComObject(enumFilters);\r
+ }\r
+ }\r
+ }\r
+\r
+ #region Unmanaged Code declarations\r
+\r
+ [Flags]\r
+ internal enum STGM {\r
+ Read = 0x00000000,\r
+ Write = 0x00000001,\r
+ ReadWrite = 0x00000002,\r
+ ShareDenyNone = 0x00000040,\r
+ ShareDenyRead = 0x00000030,\r
+ ShareDenyWrite = 0x00000020,\r
+ ShareExclusive = 0x00000010,\r
+ Priority = 0x00040000,\r
+ Create = 0x00001000,\r
+ Convert = 0x00020000,\r
+ FailIfThere = 0x00000000,\r
+ Direct = 0x00000000,\r
+ Transacted = 0x00010000,\r
+ NoScratch = 0x00100000,\r
+ NoSnapShot = 0x00200000,\r
+ Simple = 0x08000000,\r
+ DirectSWMR = 0x00400000,\r
+ DeleteOnRelease = 0x04000000,\r
+ }\r
+\r
+ [Flags]\r
+ internal enum STGC {\r
+ Default = 0,\r
+ Overwrite = 1,\r
+ OnlyIfCurrent = 2,\r
+ DangerouslyCommitMerelyToDiskCache = 4,\r
+ Consolidate = 8\r
+ }\r
+\r
+ [Guid("0000000b-0000-0000-C000-000000000046"),\r
+ InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r
+ internal interface IStorage {\r
+ [PreserveSig]\r
+ int CreateStream(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] STGM grfMode,\r
+ [In] int reserved1,\r
+ [In] int reserved2,\r
+#if USING_NET11\r
+ [Out] out UCOMIStream ppstm\r
+#else\r
+ [Out] out IStream ppstm\r
+#endif\r
+ );\r
+\r
+ [PreserveSig]\r
+ int OpenStream(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] IntPtr reserved1,\r
+ [In] STGM grfMode,\r
+ [In] int reserved2,\r
+#if USING_NET11\r
+ [Out] out UCOMIStream ppstm\r
+#else\r
+ [Out] out IStream ppstm\r
+#endif\r
+ );\r
+\r
+ [PreserveSig]\r
+ int CreateStorage(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] STGM grfMode,\r
+ [In] int reserved1,\r
+ [In] int reserved2,\r
+ [Out] out IStorage ppstg\r
+ );\r
+\r
+ [PreserveSig]\r
+ int OpenStorage(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] IStorage pstgPriority,\r
+ [In] STGM grfMode,\r
+ [In] int snbExclude,\r
+ [In] int reserved,\r
+ [Out] out IStorage ppstg\r
+ );\r
+\r
+ [PreserveSig]\r
+ int CopyTo(\r
+ [In] int ciidExclude,\r
+ [In] Guid[] rgiidExclude,\r
+ [In] string[] snbExclude,\r
+ [In] IStorage pstgDest\r
+ );\r
+\r
+ [PreserveSig]\r
+ int MoveElementTo(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] IStorage pstgDest,\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsNewName,\r
+ [In] STGM grfFlags\r
+ );\r
+\r
+ [PreserveSig]\r
+ int Commit([In] STGC grfCommitFlags);\r
+\r
+ [PreserveSig]\r
+ int Revert();\r
+\r
+ [PreserveSig]\r
+ int EnumElements(\r
+ [In] int reserved1,\r
+ [In] IntPtr reserved2,\r
+ [In] int reserved3,\r
+ [Out, MarshalAs(UnmanagedType.Interface)] out object ppenum\r
+ );\r
+\r
+ [PreserveSig]\r
+ int DestroyElement([In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName);\r
+\r
+ [PreserveSig]\r
+ int RenameElement(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsOldName,\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsNewName\r
+ );\r
+\r
+ [PreserveSig]\r
+ int SetElementTimes(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+#if USING_NET11\r
+ [In] FILETIME pctime,\r
+ [In] FILETIME patime,\r
+ [In] FILETIME pmtime\r
+#else\r
+ [In] System.Runtime.InteropServices.ComTypes.FILETIME pctime,\r
+ [In] System.Runtime.InteropServices.ComTypes.FILETIME patime,\r
+ [In] System.Runtime.InteropServices.ComTypes.FILETIME pmtime\r
+#endif\r
+ );\r
+\r
+ [PreserveSig]\r
+ int SetClass([In, MarshalAs(UnmanagedType.LPStruct)] Guid clsid);\r
+\r
+ [PreserveSig]\r
+ int SetStateBits(\r
+ [In] int grfStateBits,\r
+ [In] int grfMask\r
+ );\r
+\r
+ [PreserveSig]\r
+ int Stat(\r
+#if USING_NET11\r
+ [Out] out STATSTG pStatStg, \r
+#else\r
+ [Out] out System.Runtime.InteropServices.ComTypes.STATSTG pStatStg,\r
+#endif\r
+ [In] int grfStatFlag\r
+ );\r
+ }\r
+\r
+ internal sealed class NativeMethods {\r
+ private NativeMethods() { }\r
+\r
+ [DllImport("ole32.dll")]\r
+#if USING_NET11\r
+ public static extern int CreateBindCtx(int reserved, out UCOMIBindCtx ppbc);\r
+#else\r
+ public static extern int CreateBindCtx(int reserved, out IBindCtx ppbc);\r
+#endif\r
+\r
+ [DllImport("ole32.dll")]\r
+#if USING_NET11\r
+ public static extern int MkParseDisplayName(UCOMIBindCtx pcb, [MarshalAs(UnmanagedType.LPWStr)] string szUserName, out int pchEaten, out UCOMIMoniker ppmk);\r
+#else\r
+ public static extern int MkParseDisplayName(IBindCtx pcb, [MarshalAs(UnmanagedType.LPWStr)] string szUserName, out int pchEaten, out IMoniker ppmk);\r
+#endif\r
+\r
+ [DllImport("oleaut32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]\r
+ public static extern int OleCreatePropertyFrame(\r
+ [In] IntPtr hwndOwner,\r
+ [In] int x,\r
+ [In] int y,\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string lpszCaption,\r
+ [In] int cObjects,\r
+ [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.IUnknown)] object[] ppUnk,\r
+ [In] int cPages,\r
+ [In] IntPtr pPageClsID,\r
+ [In] int lcid,\r
+ [In] int dwReserved,\r
+ [In] IntPtr pvReserved\r
+ );\r
+\r
+ [DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]\r
+ public static extern int StgCreateDocfile(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] STGM grfMode,\r
+ [In] int reserved,\r
+ [Out] out IStorage ppstgOpen\r
+ );\r
+\r
+ [DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]\r
+ public static extern int StgIsStorageFile([In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName);\r
+\r
+ [DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]\r
+ public static extern int StgOpenStorage(\r
+ [In, MarshalAs(UnmanagedType.LPWStr)] string pwcsName,\r
+ [In] IStorage pstgPriority,\r
+ [In] STGM grfMode,\r
+ [In] IntPtr snbExclude,\r
+ [In] int reserved,\r
+ [Out] out IStorage ppstgOpen\r
+ );\r
+\r
+ }\r
+ #endregion\r
+\r
+}\r
--- /dev/null
+using System;\r
+using System.Diagnostics;\r
+using System.Drawing;\r
+using System.Globalization;\r
+using System.Windows.Forms;\r
+\r
+namespace JR.Utils.GUI.Forms {\r
+ public class FlexibleMessageBox {\r
+ #region Public statics\r
+\r
+ /// <summary>\r
+ /// Defines the maximum width for all FlexibleMessageBox instances in percent of the working area.\r
+ /// \r
+ /// Allowed values are 0.2 - 1.0 where: \r
+ /// 0.2 means: The FlexibleMessageBox can be at most half as wide as the working area.\r
+ /// 1.0 means: The FlexibleMessageBox can be as wide as the working area.\r
+ /// \r
+ /// Default is: 70% of the working area width.\r
+ /// </summary>\r
+ public static double MAX_WIDTH_FACTOR = 0.7;\r
+\r
+ /// <summary>\r
+ /// Defines the maximum height for all FlexibleMessageBox instances in percent of the working area.\r
+ /// \r
+ /// Allowed values are 0.2 - 1.0 where: \r
+ /// 0.2 means: The FlexibleMessageBox can be at most half as high as the working area.\r
+ /// 1.0 means: The FlexibleMessageBox can be as high as the working area.\r
+ /// \r
+ /// Default is: 90% of the working area height.\r
+ /// </summary>\r
+ public static double MAX_HEIGHT_FACTOR = 0.9;\r
+\r
+ /// <summary>\r
+ /// Defines the font for all FlexibleMessageBox instances.\r
+ /// \r
+ /// Default is: SystemFonts.MessageBoxFont\r
+ /// </summary>\r
+ public static Font FONT = SystemFonts.MessageBoxFont;\r
+\r
+ #endregion\r
+\r
+ #region Public show functions\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="text">The text.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(string text) {\r
+ return FlexibleMessageBoxForm.Show(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="owner">The owner.</param>\r
+ /// <param name="text">The text.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(IWin32Window owner, string text) {\r
+ return FlexibleMessageBoxForm.Show(owner, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(string text, string caption) {\r
+ return FlexibleMessageBoxForm.Show(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="owner">The owner.</param>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(IWin32Window owner, string text, string caption) {\r
+ return FlexibleMessageBoxForm.Show(owner, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(string text, string caption, MessageBoxButtons buttons) {\r
+ return FlexibleMessageBoxForm.Show(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="owner">The owner.</param>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) {\r
+ return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <param name="icon">The icon.</param>\r
+ /// <returns></returns>\r
+ public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) {\r
+ return FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="owner">The owner.</param>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <param name="icon">The icon.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) {\r
+ return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <param name="icon">The icon.</param>\r
+ /// <param name="defaultButton">The default button.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) {\r
+ return FlexibleMessageBoxForm.Show(null, text, caption, buttons, icon, defaultButton);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="owner">The owner.</param>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <param name="icon">The icon.</param>\r
+ /// <param name="defaultButton">The default button.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) {\r
+ return FlexibleMessageBoxForm.Show(owner, text, caption, buttons, icon, defaultButton);\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Internal form class\r
+\r
+ /// <summary>\r
+ /// The form to show the customized message box.\r
+ /// It is defined as an internal class to keep the public interface of the FlexibleMessageBox clean.\r
+ /// </summary>\r
+ class FlexibleMessageBoxForm : Form {\r
+ #region Form-Designer generated code\r
+\r
+ /// <summary>\r
+ /// Erforderliche Designervariable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Verwendete Ressourcen bereinigen.\r
+ /// </summary>\r
+ /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Erforderliche Methode für die Designerunterstützung.\r
+ /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ this.button1 = new System.Windows.Forms.Button();\r
+ this.richTextBoxMessage = new System.Windows.Forms.RichTextBox();\r
+ this.FlexibleMessageBoxFormBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
+ this.panel1 = new System.Windows.Forms.Panel();\r
+ this.pictureBoxForIcon = new System.Windows.Forms.PictureBox();\r
+ this.button2 = new System.Windows.Forms.Button();\r
+ this.button3 = new System.Windows.Forms.Button();\r
+ ((System.ComponentModel.ISupportInitialize)(this.FlexibleMessageBoxFormBindingSource)).BeginInit();\r
+ this.panel1.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxForIcon)).BeginInit();\r
+ this.SuspendLayout();\r
+ // \r
+ // button1\r
+ // \r
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.button1.AutoSize = true;\r
+ this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;\r
+ this.button1.Location = new System.Drawing.Point(11, 67);\r
+ this.button1.MinimumSize = new System.Drawing.Size(0, 24);\r
+ this.button1.Name = "button1";\r
+ this.button1.Size = new System.Drawing.Size(75, 24);\r
+ this.button1.TabIndex = 2;\r
+ this.button1.Text = "OK";\r
+ this.button1.UseVisualStyleBackColor = true;\r
+ this.button1.Visible = false;\r
+ // \r
+ // richTextBoxMessage\r
+ // \r
+ this.richTextBoxMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\r
+ | System.Windows.Forms.AnchorStyles.Left)\r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.richTextBoxMessage.BackColor = System.Drawing.Color.White;\r
+ this.richTextBoxMessage.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.richTextBoxMessage.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlexibleMessageBoxFormBindingSource, "MessageText", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));\r
+ this.richTextBoxMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r
+ this.richTextBoxMessage.Location = new System.Drawing.Point(50, 26);\r
+ this.richTextBoxMessage.Margin = new System.Windows.Forms.Padding(0);\r
+ this.richTextBoxMessage.Name = "richTextBoxMessage";\r
+ this.richTextBoxMessage.ReadOnly = true;\r
+ this.richTextBoxMessage.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;\r
+ this.richTextBoxMessage.Size = new System.Drawing.Size(200, 20);\r
+ this.richTextBoxMessage.TabIndex = 0;\r
+ this.richTextBoxMessage.TabStop = false;\r
+ this.richTextBoxMessage.Text = "<Message>";\r
+ this.richTextBoxMessage.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextBoxMessage_LinkClicked);\r
+ // \r
+ // panel1\r
+ // \r
+ this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\r
+ | System.Windows.Forms.AnchorStyles.Left)\r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.panel1.BackColor = System.Drawing.Color.White;\r
+ this.panel1.Controls.Add(this.pictureBoxForIcon);\r
+ this.panel1.Controls.Add(this.richTextBoxMessage);\r
+ this.panel1.Location = new System.Drawing.Point(-3, -4);\r
+ this.panel1.Name = "panel1";\r
+ this.panel1.Size = new System.Drawing.Size(268, 59);\r
+ this.panel1.TabIndex = 1;\r
+ // \r
+ // pictureBoxForIcon\r
+ // \r
+ this.pictureBoxForIcon.BackColor = System.Drawing.Color.Transparent;\r
+ this.pictureBoxForIcon.Location = new System.Drawing.Point(15, 19);\r
+ this.pictureBoxForIcon.Name = "pictureBoxForIcon";\r
+ this.pictureBoxForIcon.Size = new System.Drawing.Size(32, 32);\r
+ this.pictureBoxForIcon.TabIndex = 8;\r
+ this.pictureBoxForIcon.TabStop = false;\r
+ // \r
+ // button2\r
+ // \r
+ this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.button2.DialogResult = System.Windows.Forms.DialogResult.OK;\r
+ this.button2.Location = new System.Drawing.Point(92, 67);\r
+ this.button2.MinimumSize = new System.Drawing.Size(0, 24);\r
+ this.button2.Name = "button2";\r
+ this.button2.Size = new System.Drawing.Size(75, 24);\r
+ this.button2.TabIndex = 3;\r
+ this.button2.Text = "OK";\r
+ this.button2.UseVisualStyleBackColor = true;\r
+ this.button2.Visible = false;\r
+ // \r
+ // button3\r
+ // \r
+ this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.button3.AutoSize = true;\r
+ this.button3.DialogResult = System.Windows.Forms.DialogResult.OK;\r
+ this.button3.Location = new System.Drawing.Point(173, 67);\r
+ this.button3.MinimumSize = new System.Drawing.Size(0, 24);\r
+ this.button3.Name = "button3";\r
+ this.button3.Size = new System.Drawing.Size(75, 24);\r
+ this.button3.TabIndex = 0;\r
+ this.button3.Text = "OK";\r
+ this.button3.UseVisualStyleBackColor = true;\r
+ this.button3.Visible = false;\r
+ // \r
+ // FlexibleMessageBoxForm\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.ClientSize = new System.Drawing.Size(260, 102);\r
+ this.Controls.Add(this.button3);\r
+ this.Controls.Add(this.button2);\r
+ this.Controls.Add(this.panel1);\r
+ this.Controls.Add(this.button1);\r
+ this.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlexibleMessageBoxFormBindingSource, "CaptionText", true));\r
+ this.MaximizeBox = false;\r
+ this.MinimizeBox = false;\r
+ this.MinimumSize = new System.Drawing.Size(276, 140);\r
+ this.Name = "FlexibleMessageBoxForm";\r
+ this.ShowIcon = false;\r
+ this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;\r
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\r
+ this.Text = "<Caption>";\r
+ this.Shown += new System.EventHandler(this.FlexibleMessageBoxForm_Shown);\r
+ ((System.ComponentModel.ISupportInitialize)(this.FlexibleMessageBoxFormBindingSource)).EndInit();\r
+ this.panel1.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBoxForIcon)).EndInit();\r
+ this.ResumeLayout(false);\r
+ this.PerformLayout();\r
+ }\r
+\r
+ private System.Windows.Forms.Button button1;\r
+ private System.Windows.Forms.BindingSource FlexibleMessageBoxFormBindingSource;\r
+ private System.Windows.Forms.RichTextBox richTextBoxMessage;\r
+ private System.Windows.Forms.Panel panel1;\r
+ private System.Windows.Forms.PictureBox pictureBoxForIcon;\r
+ private System.Windows.Forms.Button button2;\r
+ private System.Windows.Forms.Button button3;\r
+\r
+ #endregion\r
+\r
+ #region Private constants\r
+\r
+ //These separators are used for the "copy to clipboard" standard operation, triggered by Ctrl + C (behavior and clipboard format is like in a standard MessageBox)\r
+ private static readonly String STANDARD_MESSAGEBOX_SEPARATOR_LINES = "---------------------------\n";\r
+ private static readonly String STANDARD_MESSAGEBOX_SEPARATOR_SPACES = " ";\r
+\r
+ //These are the possible buttons (in a standard MessageBox)\r
+ private enum ButtonID { OK = 0, CANCEL, YES, NO, ABORT, RETRY, IGNORE };\r
+\r
+ //These are the buttons texts for different languages. \r
+ //If you want to add a new language, add it here and in the GetButtonText-Function\r
+ private enum TwoLetterISOLanguageID { en, de, es, it };\r
+ private static readonly String[] BUTTON_TEXTS_ENGLISH_EN = { "OK", "Cancel", "&Yes", "&No", "&Abort", "&Retry", "&Ignore" }; //Note: This is also the fallback language\r
+ private static readonly String[] BUTTON_TEXTS_GERMAN_DE = { "OK", "Abbrechen", "&Ja", "&Nein", "&Abbrechen", "&Wiederholen", "&Ignorieren" };\r
+ private static readonly String[] BUTTON_TEXTS_SPANISH_ES = { "Aceptar", "Cancelar", "&Sí", "&No", "&Abortar", "&Reintentar", "&Ignorar" };\r
+ private static readonly String[] BUTTON_TEXTS_ITALIAN_IT = { "OK", "Annulla", "&Sì", "&No", "&Interrompi", "&Riprova", "&Ignora" };\r
+\r
+ #endregion\r
+\r
+ #region Private members\r
+\r
+ private MessageBoxDefaultButton defaultButton;\r
+ private int visibleButtonsCount;\r
+ private TwoLetterISOLanguageID languageID = TwoLetterISOLanguageID.en;\r
+\r
+ #endregion\r
+\r
+ #region Private constructor\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="FlexibleMessageBoxForm"/> class.\r
+ /// </summary>\r
+ private FlexibleMessageBoxForm() {\r
+ InitializeComponent();\r
+\r
+ //Try to evaluate the language. If this fails, the fallback language English will be used\r
+ //Enum.TryParse<TwoLetterISOLanguageID>(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName, out this.languageID);\r
+\r
+ //this.languageID = (TwoLetterISOLanguageID)Enum.Parse(typeof(CultureInfo), CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);\r
+\r
+ this.KeyPreview = true;\r
+ this.KeyUp += FlexibleMessageBoxForm_KeyUp;\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Private helper functions\r
+\r
+ /// <summary>\r
+ /// Gets the string rows.\r
+ /// </summary>\r
+ /// <param name="message">The message.</param>\r
+ /// <returns>The string rows as 1-dimensional array</returns>\r
+ private static string[] GetStringRows(string message) {\r
+ if (string.IsNullOrEmpty(message)) return null;\r
+\r
+ var messageRows = message.Split(new char[] { '\n' }, StringSplitOptions.None);\r
+ return messageRows;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the button text for the CurrentUICulture language.\r
+ /// Note: The fallback language is English\r
+ /// </summary>\r
+ /// <param name="buttonID">The ID of the button.</param>\r
+ /// <returns>The button text</returns>\r
+ private string GetButtonText(ButtonID buttonID) {\r
+ var buttonTextArrayIndex = Convert.ToInt32(buttonID);\r
+\r
+ switch (this.languageID) {\r
+ case TwoLetterISOLanguageID.de: return BUTTON_TEXTS_GERMAN_DE[buttonTextArrayIndex];\r
+ case TwoLetterISOLanguageID.es: return BUTTON_TEXTS_SPANISH_ES[buttonTextArrayIndex];\r
+ case TwoLetterISOLanguageID.it: return BUTTON_TEXTS_ITALIAN_IT[buttonTextArrayIndex];\r
+\r
+ default: return BUTTON_TEXTS_ENGLISH_EN[buttonTextArrayIndex];\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Ensure the given working area factor in the range of 0.2 - 1.0 where: \r
+ /// \r
+ /// 0.2 means: 20 percent of the working area height or width.\r
+ /// 1.0 means: 100 percent of the working area height or width.\r
+ /// </summary>\r
+ /// <param name="workingAreaFactor">The given working area factor.</param>\r
+ /// <returns>The corrected given working area factor.</returns>\r
+ private static double GetCorrectedWorkingAreaFactor(double workingAreaFactor) {\r
+ const double MIN_FACTOR = 0.2;\r
+ const double MAX_FACTOR = 1.0;\r
+\r
+ if (workingAreaFactor < MIN_FACTOR) return MIN_FACTOR;\r
+ if (workingAreaFactor > MAX_FACTOR) return MAX_FACTOR;\r
+\r
+ return workingAreaFactor;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Set the dialogs start position when given. \r
+ /// Otherwise center the dialog on the current screen.\r
+ /// </summary>\r
+ /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>\r
+ /// <param name="owner">The owner.</param>\r
+ private static void SetDialogStartPosition(FlexibleMessageBoxForm flexibleMessageBoxForm, IWin32Window owner) {\r
+ //If no owner given: Center on current screen\r
+ if (owner == null) {\r
+ var screen = Screen.FromPoint(Cursor.Position);\r
+ flexibleMessageBoxForm.StartPosition = FormStartPosition.Manual;\r
+ flexibleMessageBoxForm.Left = screen.Bounds.Left + screen.Bounds.Width / 2 - flexibleMessageBoxForm.Width / 2;\r
+ flexibleMessageBoxForm.Top = screen.Bounds.Top + screen.Bounds.Height / 2 - flexibleMessageBoxForm.Height / 2;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Calculate the dialogs start size (Try to auto-size width to show longest text row).\r
+ /// Also set the maximum dialog size. \r
+ /// </summary>\r
+ /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>\r
+ /// <param name="text">The text (the longest text row is used to calculate the dialog width).</param>\r
+ /// <param name="text">The caption (this can also affect the dialog width).</param>\r
+ private static void SetDialogSizes(FlexibleMessageBoxForm flexibleMessageBoxForm, string text, string caption) {\r
+ //First set the bounds for the maximum dialog size\r
+ flexibleMessageBoxForm.MaximumSize = new Size(Convert.ToInt32(SystemInformation.WorkingArea.Width * FlexibleMessageBoxForm.GetCorrectedWorkingAreaFactor(MAX_WIDTH_FACTOR)),\r
+ Convert.ToInt32(SystemInformation.WorkingArea.Height * FlexibleMessageBoxForm.GetCorrectedWorkingAreaFactor(MAX_HEIGHT_FACTOR)));\r
+\r
+ //Get rows. Exit if there are no rows to render...\r
+ var stringRows = GetStringRows(text);\r
+ if (stringRows == null) return;\r
+\r
+ //Calculate whole text height\r
+ var textHeight = TextRenderer.MeasureText(text, FONT).Height;\r
+\r
+ //Calculate width for longest text line\r
+ const int SCROLLBAR_WIDTH_OFFSET = 15;\r
+\r
+ var longestTextRowWidth = 0;\r
+ foreach (string textForRow in stringRows) {\r
+ int c = TextRenderer.MeasureText(textForRow, FONT).Width;\r
+ if (c > longestTextRowWidth)\r
+ longestTextRowWidth = c;\r
+ }\r
+ //stringRows.Max(textForRow => TextRenderer.MeasureText(textForRow, FONT).Width);\r
+ var captionWidth = TextRenderer.MeasureText(caption, SystemFonts.CaptionFont).Width;\r
+ var textWidth = Math.Max(longestTextRowWidth + SCROLLBAR_WIDTH_OFFSET, captionWidth);\r
+\r
+ //Calculate margins\r
+ var marginWidth = flexibleMessageBoxForm.Width - flexibleMessageBoxForm.richTextBoxMessage.Width;\r
+ var marginHeight = flexibleMessageBoxForm.Height - flexibleMessageBoxForm.richTextBoxMessage.Height;\r
+\r
+ //Set calculated dialog size (if the calculated values exceed the maximums, they were cut by windows forms automatically)\r
+ flexibleMessageBoxForm.Size = new Size(textWidth + marginWidth,\r
+ textHeight + marginHeight);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Set the dialogs icon. \r
+ /// When no icon is used: Correct placement and width of rich text box.\r
+ /// </summary>\r
+ /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>\r
+ /// <param name="icon">The MessageBoxIcon.</param>\r
+ private static void SetDialogIcon(FlexibleMessageBoxForm flexibleMessageBoxForm, MessageBoxIcon icon) {\r
+ switch (icon) {\r
+ case MessageBoxIcon.Information:\r
+ flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Information.ToBitmap();\r
+ break;\r
+ case MessageBoxIcon.Warning:\r
+ flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Warning.ToBitmap();\r
+ break;\r
+ case MessageBoxIcon.Error:\r
+ flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Error.ToBitmap();\r
+ break;\r
+ case MessageBoxIcon.Question:\r
+ flexibleMessageBoxForm.pictureBoxForIcon.Image = SystemIcons.Question.ToBitmap();\r
+ break;\r
+ default:\r
+ //When no icon is used: Correct placement and width of rich text box.\r
+ flexibleMessageBoxForm.pictureBoxForIcon.Visible = false;\r
+ flexibleMessageBoxForm.richTextBoxMessage.Left -= flexibleMessageBoxForm.pictureBoxForIcon.Width;\r
+ flexibleMessageBoxForm.richTextBoxMessage.Width += flexibleMessageBoxForm.pictureBoxForIcon.Width;\r
+ break;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Set dialog buttons visibilities and texts. \r
+ /// Also set a default button.\r
+ /// </summary>\r
+ /// <param name="flexibleMessageBoxForm">The FlexibleMessageBox dialog.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <param name="defaultButton">The default button.</param>\r
+ private static void SetDialogButtons(FlexibleMessageBoxForm flexibleMessageBoxForm, MessageBoxButtons buttons, MessageBoxDefaultButton defaultButton) {\r
+ //Set the buttons visibilities and texts\r
+ switch (buttons) {\r
+ case MessageBoxButtons.AbortRetryIgnore:\r
+ flexibleMessageBoxForm.visibleButtonsCount = 3;\r
+\r
+ flexibleMessageBoxForm.button1.Visible = true;\r
+ flexibleMessageBoxForm.button1.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.ABORT);\r
+ flexibleMessageBoxForm.button1.DialogResult = DialogResult.Abort;\r
+\r
+ flexibleMessageBoxForm.button2.Visible = true;\r
+ flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.RETRY);\r
+ flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry;\r
+\r
+ flexibleMessageBoxForm.button3.Visible = true;\r
+ flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.IGNORE);\r
+ flexibleMessageBoxForm.button3.DialogResult = DialogResult.Ignore;\r
+\r
+ flexibleMessageBoxForm.ControlBox = false;\r
+ break;\r
+\r
+ case MessageBoxButtons.OKCancel:\r
+ flexibleMessageBoxForm.visibleButtonsCount = 2;\r
+\r
+ flexibleMessageBoxForm.button2.Visible = true;\r
+ flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.OK);\r
+ flexibleMessageBoxForm.button2.DialogResult = DialogResult.OK;\r
+\r
+ flexibleMessageBoxForm.button3.Visible = true;\r
+ flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL);\r
+ flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel;\r
+\r
+ flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;\r
+ break;\r
+\r
+ case MessageBoxButtons.RetryCancel:\r
+ flexibleMessageBoxForm.visibleButtonsCount = 2;\r
+\r
+ flexibleMessageBoxForm.button2.Visible = true;\r
+ flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.RETRY);\r
+ flexibleMessageBoxForm.button2.DialogResult = DialogResult.Retry;\r
+\r
+ flexibleMessageBoxForm.button3.Visible = true;\r
+ flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL);\r
+ flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel;\r
+\r
+ flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;\r
+ break;\r
+\r
+ case MessageBoxButtons.YesNo:\r
+ flexibleMessageBoxForm.visibleButtonsCount = 2;\r
+\r
+ flexibleMessageBoxForm.button2.Visible = true;\r
+ flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.YES);\r
+ flexibleMessageBoxForm.button2.DialogResult = DialogResult.Yes;\r
+\r
+ flexibleMessageBoxForm.button3.Visible = true;\r
+ flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.NO);\r
+ flexibleMessageBoxForm.button3.DialogResult = DialogResult.No;\r
+\r
+ flexibleMessageBoxForm.ControlBox = false;\r
+ break;\r
+\r
+ case MessageBoxButtons.YesNoCancel:\r
+ flexibleMessageBoxForm.visibleButtonsCount = 3;\r
+\r
+ flexibleMessageBoxForm.button1.Visible = true;\r
+ flexibleMessageBoxForm.button1.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.YES);\r
+ flexibleMessageBoxForm.button1.DialogResult = DialogResult.Yes;\r
+\r
+ flexibleMessageBoxForm.button2.Visible = true;\r
+ flexibleMessageBoxForm.button2.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.NO);\r
+ flexibleMessageBoxForm.button2.DialogResult = DialogResult.No;\r
+\r
+ flexibleMessageBoxForm.button3.Visible = true;\r
+ flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.CANCEL);\r
+ flexibleMessageBoxForm.button3.DialogResult = DialogResult.Cancel;\r
+\r
+ flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;\r
+ break;\r
+\r
+ case MessageBoxButtons.OK:\r
+ default:\r
+ flexibleMessageBoxForm.visibleButtonsCount = 1;\r
+ flexibleMessageBoxForm.button3.Visible = true;\r
+ flexibleMessageBoxForm.button3.Text = flexibleMessageBoxForm.GetButtonText(ButtonID.OK);\r
+ flexibleMessageBoxForm.button3.DialogResult = DialogResult.OK;\r
+\r
+ flexibleMessageBoxForm.CancelButton = flexibleMessageBoxForm.button3;\r
+ break;\r
+ }\r
+\r
+ //Set default button (used in FlexibleMessageBoxForm_Shown)\r
+ flexibleMessageBoxForm.defaultButton = defaultButton;\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Private event handlers\r
+\r
+ /// <summary>\r
+ /// Handles the Shown event of the FlexibleMessageBoxForm control.\r
+ /// </summary>\r
+ /// <param name="sender">The source of the event.</param>\r
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>\r
+ private void FlexibleMessageBoxForm_Shown(object sender, EventArgs e) {\r
+ int buttonIndexToFocus = 1;\r
+ Button buttonToFocus;\r
+\r
+ //Set the default button...\r
+ switch (this.defaultButton) {\r
+ case MessageBoxDefaultButton.Button1:\r
+ default:\r
+ buttonIndexToFocus = 1;\r
+ break;\r
+ case MessageBoxDefaultButton.Button2:\r
+ buttonIndexToFocus = 2;\r
+ break;\r
+ case MessageBoxDefaultButton.Button3:\r
+ buttonIndexToFocus = 3;\r
+ break;\r
+ }\r
+\r
+ if (buttonIndexToFocus > this.visibleButtonsCount) buttonIndexToFocus = this.visibleButtonsCount;\r
+\r
+ if (buttonIndexToFocus == 3) {\r
+ buttonToFocus = this.button3;\r
+ } else if (buttonIndexToFocus == 2) {\r
+ buttonToFocus = this.button2;\r
+ } else {\r
+ buttonToFocus = this.button1;\r
+ }\r
+\r
+ buttonToFocus.Focus();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handles the LinkClicked event of the richTextBoxMessage control.\r
+ /// </summary>\r
+ /// <param name="sender">The source of the event.</param>\r
+ /// <param name="e">The <see cref="System.Windows.Forms.LinkClickedEventArgs"/> instance containing the event data.</param>\r
+ private void richTextBoxMessage_LinkClicked(object sender, LinkClickedEventArgs e) {\r
+ try {\r
+ Cursor.Current = Cursors.WaitCursor;\r
+ Process.Start(e.LinkText);\r
+ }\r
+ catch (Exception) {\r
+ //Let the caller of FlexibleMessageBoxForm decide what to do with this exception...\r
+ throw;\r
+ }\r
+ finally {\r
+ Cursor.Current = Cursors.Default;\r
+ }\r
+\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handles the KeyUp event of the richTextBoxMessage control.\r
+ /// </summary>\r
+ /// <param name="sender">The source of the event.</param>\r
+ /// <param name="e">The <see cref="System.Windows.Forms.KeyEventArgs"/> instance containing the event data.</param>\r
+ void FlexibleMessageBoxForm_KeyUp(object sender, KeyEventArgs e) {\r
+ //Handle standard key strikes for clipboard copy: "Ctrl + C" and "Ctrl + Insert"\r
+ if (e.Control && (e.KeyCode == Keys.C || e.KeyCode == Keys.Insert)) {\r
+ var buttonsTextLine = (this.button1.Visible ? this.button1.Text + STANDARD_MESSAGEBOX_SEPARATOR_SPACES : string.Empty)\r
+ + (this.button2.Visible ? this.button2.Text + STANDARD_MESSAGEBOX_SEPARATOR_SPACES : string.Empty)\r
+ + (this.button3.Visible ? this.button3.Text + STANDARD_MESSAGEBOX_SEPARATOR_SPACES : string.Empty);\r
+\r
+ //Build same clipboard text like the standard .Net MessageBox\r
+ var textForClipboard = STANDARD_MESSAGEBOX_SEPARATOR_LINES\r
+ + this.Text + Environment.NewLine\r
+ + STANDARD_MESSAGEBOX_SEPARATOR_LINES\r
+ + this.richTextBoxMessage.Text + Environment.NewLine\r
+ + STANDARD_MESSAGEBOX_SEPARATOR_LINES\r
+ + buttonsTextLine.Replace("&", string.Empty) + Environment.NewLine\r
+ + STANDARD_MESSAGEBOX_SEPARATOR_LINES;\r
+\r
+ //Set text in clipboard\r
+ Clipboard.SetText(textForClipboard);\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Properties (only used for binding)\r
+\r
+ /// <summary>\r
+ /// The text that is been used for the heading.\r
+ /// </summary>\r
+ public string CaptionText { get; set; }\r
+\r
+ /// <summary>\r
+ /// The text that is been used in the FlexibleMessageBoxForm.\r
+ /// </summary>\r
+ public string MessageText { get; set; }\r
+\r
+ #endregion\r
+\r
+ #region Public show function\r
+\r
+ /// <summary>\r
+ /// Shows the specified message box.\r
+ /// </summary>\r
+ /// <param name="owner">The owner.</param>\r
+ /// <param name="text">The text.</param>\r
+ /// <param name="caption">The caption.</param>\r
+ /// <param name="buttons">The buttons.</param>\r
+ /// <param name="icon">The icon.</param>\r
+ /// <param name="defaultButton">The default button.</param>\r
+ /// <returns>The dialog result.</returns>\r
+ public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) {\r
+ //Create a new instance of the FlexibleMessageBox form\r
+ var flexibleMessageBoxForm = new FlexibleMessageBoxForm();\r
+ flexibleMessageBoxForm.ShowInTaskbar = false;\r
+\r
+ //Bind the caption and the message text\r
+ flexibleMessageBoxForm.CaptionText = caption;\r
+ flexibleMessageBoxForm.MessageText = text;\r
+ flexibleMessageBoxForm.FlexibleMessageBoxFormBindingSource.DataSource = flexibleMessageBoxForm;\r
+\r
+ //Set the buttons visibilities and texts. Also set a default button.\r
+ SetDialogButtons(flexibleMessageBoxForm, buttons, defaultButton);\r
+\r
+ //Set the dialogs icon. When no icon is used: Correct placement and width of rich text box.\r
+ SetDialogIcon(flexibleMessageBoxForm, icon);\r
+\r
+ //Set the font for all controls\r
+ flexibleMessageBoxForm.Font = FONT;\r
+ flexibleMessageBoxForm.richTextBoxMessage.Font = FONT;\r
+\r
+ //Calculate the dialogs start size (Try to auto-size width to show longest text row). Also set the maximum dialog size. \r
+ SetDialogSizes(flexibleMessageBoxForm, text, caption);\r
+\r
+ //Set the dialogs start position when given. Otherwise center the dialog on the current screen.\r
+ SetDialogStartPosition(flexibleMessageBoxForm, owner);\r
+\r
+ //Show the dialog\r
+ return flexibleMessageBoxForm.ShowDialog(owner);\r
+ }\r
+\r
+ #endregion\r
+ } //class FlexibleMessageBoxForm\r
+\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Diagnostics;\r
+using System.Windows.Forms;\r
+using System.Runtime.InteropServices;\r
+\r
+namespace DxPlay {\r
+ class InterceptKeys {\r
+ private const int WH_KEYBOARD_LL = 13;\r
+ private const int WM_KEYDOWN = 0x0100;\r
+ private static LowLevelKeyboardProc _proc = HookCallback;\r
+ private static IntPtr _hookID = IntPtr.Zero;\r
+\r
+ public static void Start() {\r
+ _hookID = SetHook(_proc);\r
+ }\r
+ public static void Stop() {\r
+ UnhookWindowsHookEx(_hookID);\r
+ }\r
+\r
+ private static IntPtr SetHook(LowLevelKeyboardProc proc) {\r
+ using (Process curProcess = Process.GetCurrentProcess())\r
+ using (ProcessModule curModule = curProcess.MainModule) {\r
+ return SetWindowsHookEx(WH_KEYBOARD_LL, proc,\r
+ GetModuleHandle(curModule.ModuleName), 0);\r
+ }\r
+ }\r
+\r
+ public delegate bool GlobalKeyEventDelegate(Keys key);\r
+\r
+ public static GlobalKeyEventDelegate GlobalKeyEvent { get; set; }\r
+\r
+ private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);\r
+\r
+ private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) {\r
+ if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) {\r
+ int vkCode = Marshal.ReadInt32(lParam);\r
+ //Debug.WriteLine((Keys)vkCode);\r
+ //if (GlobalKeyEvent != null) {\r
+ // if (GlobalKeyEvent.Invoke((Keys)vkCode))\r
+ // return (IntPtr)1;\r
+ //}\r
+ GlobalKeyEvent?.Invoke((Keys)vkCode);\r
+\r
+ }\r
+\r
+ return CallNextHookEx(_hookID, nCode, wParam, lParam);\r
+ }\r
+\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);\r
+\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ private static extern bool UnhookWindowsHookEx(IntPtr hhk);\r
+\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ private static extern IntPtr GetModuleHandle(string lpModuleName);\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Windows.Forms;\r
+\r
+namespace DxPlay {\r
+ /// <summary>\r
+ /// This class is mainly a storage class.\r
+ /// Its primary purpose is to be used with a PropertyGrid.\r
+ /// </summary>\r
+ public class MediaDescription {\r
+ internal Timecode firstFrame;\r
+ internal Timecode duration;\r
+ internal float frameRate;\r
+ internal string fileName;\r
+ internal Guid audioSubType;\r
+ internal int channels;\r
+ internal float samplesPerSec;\r
+ internal int bitsPerSample;\r
+ internal TimeSpan audioLength;\r
+ internal Guid videoSubType;\r
+ internal Size resolution;\r
+ internal int bitsPerPixel;\r
+ internal string fourCC;\r
+ internal TimeSpan videoLength;\r
+ internal Bitmap snapshot;\r
+ internal string description;\r
+\r
+ [Category("General"), ReadOnly(true), Description("Content description")]\r
+ public string Description {\r
+ get { return description; }\r
+ }\r
+\r
+ [Category("General"), ReadOnly(true), Description("The file name with its path")]\r
+ public string FileName {\r
+ get { return fileName; }\r
+ }\r
+\r
+ [Category("Audio"), ReadOnly(true), Description("Audio subtype GUID")]\r
+ public Guid AudioSubType {\r
+ get { return audioSubType; }\r
+ }\r
+\r
+ [Category("Audio"), ReadOnly(true), Description("Audio channel count")]\r
+ public int Channels {\r
+ get { return channels; }\r
+ }\r
+\r
+ [Category("Audio"), ReadOnly(true), Description("Samples per second in kHz")]\r
+ public float SamplesPerSec {\r
+ get { return samplesPerSec; }\r
+ }\r
+\r
+ [Category("Audio"), ReadOnly(true), Description("How many bits are used per samples")]\r
+ public int BitsPerSample {\r
+ get { return bitsPerSample; }\r
+ }\r
+\r
+ [Category("Audio"), ReadOnly(true), Description("The audio stream length")]\r
+ public TimeSpan AudioLength {\r
+ get { return audioLength; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("Video subtype GUID")]\r
+ public Guid VideoSubType {\r
+ get { return videoSubType; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("Specifies the width and height of the bitmap, in pixels")]\r
+ public Size Resolution {\r
+ get { return resolution; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("Specifies the number of bits per pixel (bpp)")]\r
+ public int BitsPerPixel {\r
+ get { return bitsPerPixel; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("The Video's FOURCC code")]\r
+ public string FourCC {\r
+ get { return fourCC; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("The video stream length")]\r
+ public TimeSpan VideoLength {\r
+ get { return videoLength; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("A snapshot of the video stream at half its duration")]\r
+ public Bitmap Snapshot {\r
+ get { return snapshot; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("Video frame rate (FPS)")]\r
+ public float FrameRate {\r
+ get { return frameRate; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("Video duration in Timecode")]\r
+ public Timecode Duration {\r
+ get { return duration; }\r
+ }\r
+\r
+ [Category("Video"), ReadOnly(true), Description("First frame Timecode")]\r
+ public Timecode FirstFrame {\r
+ get { return firstFrame; }\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+using System;\r
+using System.Drawing;\r
+using System.Drawing.Imaging;\r
+using System.Runtime.InteropServices;\r
+using System.Text;\r
+using System.Windows.Forms;\r
+\r
+using DirectShowLib;\r
+using DirectShowLib.DES;\r
+using MediaInfoLib;\r
+using System.Diagnostics;\r
+using System.Globalization;\r
+\r
+namespace DxPlay {\r
+ /// <summary>\r
+ /// A wrapper class around the DirectShow's MediaDet object.\r
+ /// </summary>\r
+ public sealed class MediaDetector {\r
+\r
+ private static CultureInfo USCU = new CultureInfo("en-US");\r
+\r
+ public static MediaDescription GetDescription(string fileName) {\r
+ MediaDescription mediaDesc = new MediaDescription();\r
+ mediaDesc.fileName = fileName;\r
+\r
+ MediaInfo MI = new MediaInfo();\r
+ MI.Open(fileName);\r
+ Debug.WriteLine(MI.Inform());\r
+ try {\r
+ setResolution(mediaDesc, MI);\r
+ mediaDesc.frameRate = float.Parse(MI.Get(StreamKind.Video, 0, "FrameRate"), USCU.NumberFormat);\r
+ mediaDesc.duration = new Timecode(MI.Get(StreamKind.Video, 0, "Duration/String4"), mediaDesc.FrameRate);\r
+ Debug.WriteLine("Duration is " + mediaDesc.Duration.ToString());\r
+ mediaDesc.description = MI.Inform();\r
+ tryAssignTimeCode(mediaDesc, MI, StreamKind.Video, 0);\r
+ int otherStreams = MI.Count_Get(StreamKind.Other);\r
+ while (mediaDesc.firstFrame.StartsAtZeroFrame() && otherStreams-- > 0)\r
+ tryAssignTimeCode(mediaDesc, MI, StreamKind.Other, 0);\r
+ }\r
+ finally {\r
+ MI.Close();\r
+ }\r
+\r
+ return mediaDesc;\r
+ }\r
+\r
+ private static void tryAssignTimeCode(MediaDescription mediaDesc, MediaInfo MI, StreamKind streamKind, int track) {\r
+ //bool valid = bool.Parse(MI.Get(StreamKind.Other, track, "TimeCode_Striped/String"));\r
+ string tc = MI.Get(streamKind, track, "TimeCode_FirstFrame");\r
+ string TimeCode_Settings = MI.Get(streamKind, track, "TimeCode_Settings");\r
+ string TimeCode_Source = MI.Get(streamKind, track, "TimeCode_Source");\r
+ mediaDesc.firstFrame = new Timecode(tc, mediaDesc.FrameRate);\r
+ Debug.WriteLine(String.Format("Using TC {0} from {1}-{2} track.", tc, TimeCode_Settings, TimeCode_Source));\r
+ }\r
+\r
+ private static void setResolution(MediaDescription mediaDesc, MediaInfo MI) {\r
+ int videoStreams = MI.Count_Get(StreamKind.Video);\r
+ if (videoStreams != 1)\r
+ throw new Exception("Multiple video streams found!");\r
+ int Width = int.Parse(MI.Get(StreamKind.Video, 0, "Width"));\r
+ int Height = int.Parse(MI.Get(StreamKind.Video, 0, "Height"));\r
+ mediaDesc.resolution = new Size(Width, Height);\r
+ }\r
+\r
+ private static void UpdateAudioPart(IMediaDet mediaDet, MediaDescription mediaDesc) {\r
+ int hr = 0;\r
+ AMMediaType mediaType = new AMMediaType();\r
+\r
+ hr = mediaDet.get_StreamMediaType(mediaType);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ mediaDesc.audioSubType = mediaType.subType;\r
+\r
+ double streamLength;\r
+ hr = mediaDet.get_StreamLength(out streamLength);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ mediaDesc.audioLength = TimeSpan.FromSeconds(streamLength);\r
+\r
+ if (mediaType.formatType == FormatType.WaveEx) {\r
+ WaveFormatEx waveFormatEx = (WaveFormatEx)Marshal.PtrToStructure(mediaType.formatPtr, typeof(WaveFormatEx));\r
+ mediaDesc.channels = waveFormatEx.nChannels;\r
+ mediaDesc.samplesPerSec = ((float)waveFormatEx.nSamplesPerSec) / 1000;\r
+ mediaDesc.bitsPerSample = waveFormatEx.wBitsPerSample;\r
+ }\r
+ }\r
+\r
+ private static void UpdateVideoInfoPart(string fileName, int streamNumber) {\r
+ }\r
+\r
+ private static void UpdateVideoPart(IMediaDet mediaDet, MediaDescription mediaDesc) {\r
+ int hr = 0;\r
+ AMMediaType mediaType = new AMMediaType();\r
+\r
+ hr = mediaDet.get_StreamMediaType(mediaType);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ mediaDesc.videoSubType = mediaType.subType;\r
+\r
+ double streamLength;\r
+ hr = mediaDet.get_StreamLength(out streamLength);\r
+ DsError.ThrowExceptionForHR(hr);\r
+\r
+ mediaDesc.videoLength = TimeSpan.FromSeconds(streamLength);\r
+\r
+ if (mediaType.formatType == FormatType.VideoInfo) {\r
+ VideoInfoHeader videoHeader = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));\r
+\r
+ mediaDesc.resolution = new Size(videoHeader.BmiHeader.Width, videoHeader.BmiHeader.Height);\r
+ mediaDesc.bitsPerPixel = videoHeader.BmiHeader.BitCount;\r
+ mediaDesc.fourCC = FourCCToString(videoHeader.BmiHeader.Compression);\r
+ }\r
+\r
+\r
+\r
+ }\r
+\r
+ private static string FourCCToString(int fourcc) {\r
+ byte[] bytes = new byte[4];\r
+\r
+ bytes[0] = (byte)(fourcc & 0x000000ff); fourcc = fourcc >> 8;\r
+ bytes[1] = (byte)(fourcc & 0x000000ff); fourcc = fourcc >> 8;\r
+ bytes[2] = (byte)(fourcc & 0x000000ff); fourcc = fourcc >> 8;\r
+ bytes[3] = (byte)(fourcc & 0x000000ff);\r
+\r
+ return Encoding.ASCII.GetString(bytes);\r
+ }\r
+\r
+ private static Bitmap GetSnapshot(IMediaDet mediaDet, int width, int height, double position) {\r
+ int hr = 0;\r
+ Bitmap bitmap = null;\r
+ int bufferSize = 0;\r
+ IntPtr buffer = IntPtr.Zero;\r
+\r
+ try {\r
+ hr = mediaDet.GetBitmapBits(position, out bufferSize, IntPtr.Zero, width, height);\r
+ if (hr == 0) {\r
+ buffer = Marshal.AllocCoTaskMem(bufferSize);\r
+ hr = mediaDet.GetBitmapBits(position, out bufferSize, buffer, width, height);\r
+\r
+ BitmapInfoHeader bitmapHeader = (BitmapInfoHeader)Marshal.PtrToStructure(buffer, typeof(BitmapInfoHeader));\r
+ IntPtr bitmapData;\r
+\r
+ if (IntPtr.Size == 4)\r
+ bitmapData = new IntPtr(buffer.ToInt32() + bitmapHeader.Size);\r
+ else\r
+ bitmapData = new IntPtr(buffer.ToInt64() + bitmapHeader.Size);\r
+\r
+ bitmap = new Bitmap(bitmapHeader.Width, bitmapHeader.Height, PixelFormat.Format24bppRgb);\r
+ BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmapHeader.Width, bitmapHeader.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);\r
+\r
+ /*\r
+ for (int i = 0; i < width * height * 3 ; i++)\r
+ {\r
+ byte b = Marshal.ReadByte(bitmapData, i);\r
+ Marshal.WriteByte(bmpData.Scan0, i, b);\r
+ }\r
+ */\r
+\r
+ CopyMemory(bmpData.Scan0, bitmapData, width * height * 3);\r
+ bitmap.UnlockBits(bmpData);\r
+\r
+ bitmap.RotateFlip(RotateFlipType.Rotate180FlipX);\r
+ }\r
+ }\r
+ finally {\r
+ if (buffer != IntPtr.Zero)\r
+ Marshal.FreeCoTaskMem(buffer);\r
+ }\r
+ return bitmap;\r
+ }\r
+\r
+ [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]\r
+ private static extern void CopyMemory(IntPtr Destination, IntPtr Source, int Length);\r
+\r
+ }\r
+}\r
--- /dev/null
+/* Copyright (c) MediaArea.net SARL. All Rights Reserved.\r
+ *\r
+ * Use of this source code is governed by a BSD-style license that can\r
+ * be found in the License.html file in the root of the source tree.\r
+ */\r
+\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//\r
+// Microsoft Visual C# wrapper for MediaInfo Library\r
+// See MediaInfo.h for help\r
+//\r
+// To make it working, you must put MediaInfo.Dll\r
+// in the executable folder\r
+//\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+\r
+using System;\r
+using System.Runtime.InteropServices;\r
+\r
+#pragma warning disable 1591 // Disable XML documentation warnings\r
+\r
+namespace MediaInfoLib\r
+{\r
+ public enum StreamKind\r
+ {\r
+ General,\r
+ Video,\r
+ Audio,\r
+ Text,\r
+ Other,\r
+ Image,\r
+ Menu,\r
+ }\r
+\r
+ public enum InfoKind\r
+ {\r
+ Name,\r
+ Text,\r
+ Measure,\r
+ Options,\r
+ NameText,\r
+ MeasureText,\r
+ Info,\r
+ HowTo\r
+ }\r
+\r
+ public enum InfoOptions\r
+ {\r
+ ShowInInform,\r
+ Support,\r
+ ShowInSupported,\r
+ TypeOfValue\r
+ }\r
+\r
+ public enum InfoFileOptions\r
+ {\r
+ FileOption_Nothing = 0x00,\r
+ FileOption_NoRecursive = 0x01,\r
+ FileOption_CloseAll = 0x02,\r
+ FileOption_Max = 0x04\r
+ };\r
+\r
+ public enum Status\r
+ {\r
+ None = 0x00,\r
+ Accepted = 0x01,\r
+ Filled = 0x02,\r
+ Updated = 0x04,\r
+ Finalized = 0x08,\r
+ }\r
+\r
+ public class MediaInfo\r
+ {\r
+ //Import of DLL functions. DO NOT USE until you know what you do (MediaInfo DLL do NOT use CoTaskMemAlloc to allocate memory)\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_New();\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern void MediaInfo_Delete(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string FileName);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Open(IntPtr Handle, IntPtr FileName);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Open_Buffer_Init(IntPtr Handle, Int64 File_Size, Int64 File_Offset);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Open(IntPtr Handle, Int64 File_Size, Int64 File_Offset);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Open_Buffer_Continue(IntPtr Handle, IntPtr Buffer, IntPtr Buffer_Size);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Open_Buffer_Continue(IntPtr Handle, Int64 File_Size, byte[] Buffer, IntPtr Buffer_Size);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern Int64 MediaInfo_Open_Buffer_Continue_GoTo_Get(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern Int64 MediaInfoA_Open_Buffer_Continue_GoTo_Get(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Open_Buffer_Finalize(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Open_Buffer_Finalize(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern void MediaInfo_Close(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Inform(IntPtr Handle, IntPtr Reserved);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Inform(IntPtr Handle, IntPtr Reserved);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, [MarshalAs(UnmanagedType.LPWStr)] string Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] string Value);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoA_Option(IntPtr Handle, IntPtr Option, IntPtr Value);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_State_Get(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfo_Count_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber);\r
+\r
+ //MediaInfo class\r
+ public MediaInfo()\r
+ {\r
+ try\r
+ {\r
+ Handle = MediaInfo_New();\r
+ }\r
+ catch\r
+ {\r
+ Handle = (IntPtr)0;\r
+ }\r
+ if (Environment.OSVersion.ToString().IndexOf("Windows") == -1)\r
+ MustUseAnsi=true;\r
+ else\r
+ MustUseAnsi=false;\r
+ }\r
+ ~MediaInfo() { if (Handle == (IntPtr)0) return; MediaInfo_Delete(Handle); }\r
+ public int Open(String FileName)\r
+ {\r
+ if (Handle == (IntPtr)0)\r
+ return 0;\r
+ if (MustUseAnsi)\r
+ {\r
+ IntPtr FileName_Ptr = Marshal.StringToHGlobalAnsi(FileName);\r
+ int ToReturn = (int)MediaInfoA_Open(Handle, FileName_Ptr);\r
+ Marshal.FreeHGlobal(FileName_Ptr);\r
+ return ToReturn;\r
+ }\r
+ else\r
+ return (int)MediaInfo_Open(Handle, FileName);\r
+ }\r
+ public int Open_Buffer_Init(Int64 File_Size, Int64 File_Offset)\r
+ {\r
+ if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Init(Handle, File_Size, File_Offset);\r
+ }\r
+ public int Open_Buffer_Continue(IntPtr Buffer, IntPtr Buffer_Size)\r
+ {\r
+ if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size);\r
+ }\r
+ public Int64 Open_Buffer_Continue_GoTo_Get()\r
+ {\r
+ if (Handle == (IntPtr)0) return 0; return (Int64)MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle);\r
+ }\r
+ public int Open_Buffer_Finalize()\r
+ {\r
+ if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Finalize(Handle);\r
+ }\r
+ public void Close() { if (Handle == (IntPtr)0) return; MediaInfo_Close(Handle); }\r
+ public String Inform()\r
+ {\r
+ if (Handle == (IntPtr)0)\r
+ return "Unable to load MediaInfo library";\r
+ if (MustUseAnsi)\r
+ return Marshal.PtrToStringAnsi(MediaInfoA_Inform(Handle, (IntPtr)0));\r
+ else\r
+ return Marshal.PtrToStringUni(MediaInfo_Inform(Handle, (IntPtr)0));\r
+ }\r
+ public String Get(StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo, InfoKind KindOfSearch)\r
+ {\r
+ if (Handle == (IntPtr)0)\r
+ return "Unable to load MediaInfo library";\r
+ if (MustUseAnsi)\r
+ {\r
+ IntPtr Parameter_Ptr=Marshal.StringToHGlobalAnsi(Parameter);\r
+ String ToReturn=Marshal.PtrToStringAnsi(MediaInfoA_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter_Ptr, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch));\r
+ Marshal.FreeHGlobal(Parameter_Ptr);\r
+ return ToReturn;\r
+ }\r
+ else\r
+ return Marshal.PtrToStringUni(MediaInfo_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch));\r
+ }\r
+ public String Get(StreamKind StreamKind, int StreamNumber, int Parameter, InfoKind KindOfInfo)\r
+ {\r
+ if (Handle == (IntPtr)0)\r
+ return "Unable to load MediaInfo library";\r
+ if (MustUseAnsi)\r
+ return Marshal.PtrToStringAnsi(MediaInfoA_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo));\r
+ else\r
+ return Marshal.PtrToStringUni(MediaInfo_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo));\r
+ }\r
+ public String Option(String Option, String Value)\r
+ {\r
+ if (Handle == (IntPtr)0)\r
+ return "Unable to load MediaInfo library";\r
+ if (MustUseAnsi)\r
+ {\r
+ IntPtr Option_Ptr=Marshal.StringToHGlobalAnsi(Option);\r
+ IntPtr Value_Ptr=Marshal.StringToHGlobalAnsi(Value);\r
+ String ToReturn=Marshal.PtrToStringAnsi(MediaInfoA_Option(Handle, Option_Ptr, Value_Ptr));\r
+ Marshal.FreeHGlobal(Option_Ptr);\r
+ Marshal.FreeHGlobal(Value_Ptr);\r
+ return ToReturn;\r
+ }\r
+ else\r
+ return Marshal.PtrToStringUni(MediaInfo_Option(Handle, Option, Value));\r
+ }\r
+ public int State_Get() { if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_State_Get(Handle); }\r
+ public int Count_Get(StreamKind StreamKind, int StreamNumber) { if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Count_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber); }\r
+ private IntPtr Handle;\r
+ private bool MustUseAnsi;\r
+\r
+ //Default values, if you know how to set default values in C#, say me\r
+ public String Get(StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo) { return Get(StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); }\r
+ public String Get(StreamKind StreamKind, int StreamNumber, String Parameter) { return Get(StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); }\r
+ public String Get(StreamKind StreamKind, int StreamNumber, int Parameter) { return Get(StreamKind, StreamNumber, Parameter, InfoKind.Text); }\r
+ public String Option(String Option_) { return Option(Option_, ""); }\r
+ public int Count_Get(StreamKind StreamKind) { return Count_Get(StreamKind, -1); }\r
+ }\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ public class MediaInfoList\r
+ {\r
+ //Import of DLL functions. DO NOT USE until you know what you do (MediaInfo DLL do NOT use CoTaskMemAlloc to allocate memory)\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_New();\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern void MediaInfoList_Delete(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string FileName, IntPtr Options);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern void MediaInfoList_Close(IntPtr Handle, IntPtr FilePos);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_Inform(IntPtr Handle, IntPtr FilePos, IntPtr Reserved);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_GetI(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_Get(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber, [MarshalAs(UnmanagedType.LPWStr)] string Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] string Value);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_State_Get(IntPtr Handle);\r
+ [DllImport("MediaInfo.dll")]\r
+ private static extern IntPtr MediaInfoList_Count_Get(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber);\r
+\r
+ //MediaInfo class\r
+ public MediaInfoList() { Handle = MediaInfoList_New(); }\r
+ ~MediaInfoList() { MediaInfoList_Delete(Handle); }\r
+ public int Open(String FileName, InfoFileOptions Options) { return (int)MediaInfoList_Open(Handle, FileName, (IntPtr)Options); }\r
+ public void Close(int FilePos) { MediaInfoList_Close(Handle, (IntPtr)FilePos); }\r
+ public String Inform(int FilePos) { return Marshal.PtrToStringUni(MediaInfoList_Inform(Handle, (IntPtr)FilePos, (IntPtr)0)); }\r
+ public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo, InfoKind KindOfSearch) { return Marshal.PtrToStringUni(MediaInfoList_Get(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch)); }\r
+ public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter, InfoKind KindOfInfo) { return Marshal.PtrToStringUni(MediaInfoList_GetI(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo)); }\r
+ public String Option(String Option, String Value) { return Marshal.PtrToStringUni(MediaInfoList_Option(Handle, Option, Value)); }\r
+ public int State_Get() { return (int)MediaInfoList_State_Get(Handle); }\r
+ public int Count_Get(int FilePos, StreamKind StreamKind, int StreamNumber) { return (int)MediaInfoList_Count_Get(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber); }\r
+ private IntPtr Handle;\r
+\r
+ //Default values, if you know how to set default values in C#, say me\r
+ public void Open(String FileName) { Open(FileName, 0); }\r
+ public void Close() { Close(-1); }\r
+ public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo) { return Get(FilePos, StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); }\r
+ public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter) { return Get(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); }\r
+ public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter) { return Get(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text); }\r
+ public String Option(String Option_) { return Option(Option_, ""); }\r
+ public int Count_Get(int FilePos, StreamKind StreamKind) { return Count_Get(FilePos, StreamKind, -1); }\r
+ }\r
+\r
+} //NameSpace\r
--- /dev/null
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Windows.Forms;\r
+\r
+namespace DxPlay {\r
+ public class MenuButton : Button {\r
+ [DefaultValue(null)]\r
+ public ContextMenuStrip Menu { get; set; }\r
+\r
+ [DefaultValue(false)]\r
+ public bool ShowMenuUnderCursor { get; set; }\r
+\r
+ protected override void OnMouseDown(MouseEventArgs mevent) {\r
+ base.OnMouseDown(mevent);\r
+\r
+ if (Menu != null && mevent.Button == MouseButtons.Left) {\r
+ Point menuLocation;\r
+\r
+ if (ShowMenuUnderCursor) {\r
+ menuLocation = mevent.Location;\r
+ } else {\r
+ menuLocation = new Point(0, Height);\r
+ }\r
+\r
+ Menu.Show(this, menuLocation);\r
+ }\r
+ }\r
+\r
+ protected override void OnPaint(PaintEventArgs pevent) {\r
+ base.OnPaint(pevent);\r
+\r
+ if (Menu != null) {\r
+ int arrowX = ClientRectangle.Width - 14;\r
+ int arrowY = ClientRectangle.Height / 2 - 1;\r
+\r
+ Brush brush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ButtonShadow;\r
+ Point[] arrows = new Point[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) };\r
+ pevent.Graphics.FillPolygon(brush, arrows);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace DxPlay\r
+{\r
+ public enum WM\r
+ {\r
+ /// <summary>\r
+ /// The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore.\r
+ /// </summary>\r
+ NULL = 0x0000,\r
+ /// <summary>\r
+ /// The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible.\r
+ /// </summary>\r
+ CREATE = 0x0001,\r
+ /// <summary>\r
+ /// The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen.\r
+ /// This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist.\r
+ /// /// </summary>\r
+ DESTROY = 0x0002,\r
+ /// <summary>\r
+ /// The WM_MOVE message is sent after a window has been moved.\r
+ /// </summary>\r
+ MOVE = 0x0003,\r
+ /// <summary>\r
+ /// The WM_SIZE message is sent to a window after its size has changed.\r
+ /// </summary>\r
+ SIZE = 0x0005,\r
+ /// <summary>\r
+ /// The WM_ACTIVATE message is sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated. If the windows use different input queues, the message is sent asynchronously, so the window is activated immediately.\r
+ /// </summary>\r
+ ACTIVATE = 0x0006,\r
+ /// <summary>\r
+ /// The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus.\r
+ /// </summary>\r
+ SETFOCUS = 0x0007,\r
+ /// <summary>\r
+ /// The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus.\r
+ /// </summary>\r
+ KILLFOCUS = 0x0008,\r
+ /// <summary>\r
+ /// The WM_ENABLE message is sent when an application changes the enabled state of a window. It is sent to the window whose enabled state is changing. This message is sent before the EnableWindow function returns, but after the enabled state (WS_DISABLED style bit) of the window has changed.\r
+ /// </summary>\r
+ ENABLE = 0x000A,\r
+ /// <summary>\r
+ /// An application sends the WM_SETREDRAW message to a window to allow changes in that window to be redrawn or to prevent changes in that window from being redrawn.\r
+ /// </summary>\r
+ SETREDRAW = 0x000B,\r
+ /// <summary>\r
+ /// An application sends a WM_SETTEXT message to set the text of a window.\r
+ /// </summary>\r
+ SETTEXT = 0x000C,\r
+ /// <summary>\r
+ /// An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.\r
+ /// </summary>\r
+ GETTEXT = 0x000D,\r
+ /// <summary>\r
+ /// An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window.\r
+ /// </summary>\r
+ GETTEXTLENGTH = 0x000E,\r
+ /// <summary>\r
+ /// The WM_PAINT message is sent when the system or another application makes a request to paint a portion of an application's window. The message is sent when the UpdateWindow or RedrawWindow function is called, or by the DispatchMessage function when the application obtains a WM_PAINT message by using the GetMessage or PeekMessage function.\r
+ /// </summary>\r
+ PAINT = 0x000F,\r
+ /// <summary>\r
+ /// The WM_CLOSE message is sent as a signal that a window or an application should terminate.\r
+ /// </summary>\r
+ CLOSE = 0x0010,\r
+ /// <summary>\r
+ /// The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls one of the system shutdown functions. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.\r
+ /// After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.\r
+ /// </summary>\r
+ QUERYENDSESSION = 0x0011,\r
+ /// <summary>\r
+ /// The WM_QUERYOPEN message is sent to an icon when the user requests that the window be restored to its previous size and position.\r
+ /// </summary>\r
+ QUERYOPEN = 0x0013,\r
+ /// <summary>\r
+ /// The WM_ENDSESSION message is sent to an application after the system processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the session is ending.\r
+ /// </summary>\r
+ ENDSESSION = 0x0016,\r
+ /// <summary>\r
+ /// The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero.\r
+ /// </summary>\r
+ QUIT = 0x0012,\r
+ /// <summary>\r
+ /// The WM_ERASEBKGND message is sent when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting.\r
+ /// </summary>\r
+ ERASEBKGND = 0x0014,\r
+ /// <summary>\r
+ /// This message is sent to all top-level windows when a change is made to a system color setting.\r
+ /// </summary>\r
+ SYSCOLORCHANGE = 0x0015,\r
+ /// <summary>\r
+ /// The WM_SHOWWINDOW message is sent to a window when the window is about to be hidden or shown.\r
+ /// </summary>\r
+ SHOWWINDOW = 0x0018,\r
+ /// <summary>\r
+ /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.\r
+ /// Note The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.\r
+ /// </summary>\r
+ WININICHANGE = 0x001A,\r
+ /// <summary>\r
+ /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.\r
+ /// Note The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.\r
+ /// </summary>\r
+ SETTINGCHANGE = WM.WININICHANGE,\r
+ /// <summary>\r
+ /// The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings.\r
+ /// </summary>\r
+ DEVMODECHANGE = 0x001B,\r
+ /// <summary>\r
+ /// The WM_ACTIVATEAPP message is sent when a window belonging to a different application than the active window is about to be activated. The message is sent to the application whose window is being activated and to the application whose window is being deactivated.\r
+ /// </summary>\r
+ ACTIVATEAPP = 0x001C,\r
+ /// <summary>\r
+ /// An application sends the WM_FONTCHANGE message to all top-level windows in the system after changing the pool of font resources.\r
+ /// </summary>\r
+ FONTCHANGE = 0x001D,\r
+ /// <summary>\r
+ /// A message that is sent whenever there is a change in the system time.\r
+ /// </summary>\r
+ TIMECHANGE = 0x001E,\r
+ /// <summary>\r
+ /// The WM_CANCELMODE message is sent to cancel certain modes, such as mouse capture. For example, the system sends this message to the active window when a dialog box or message box is displayed. Certain functions also send this message explicitly to the specified window regardless of whether it is the active window. For example, the EnableWindow function sends this message when disabling the specified window.\r
+ /// </summary>\r
+ CANCELMODE = 0x001F,\r
+ /// <summary>\r
+ /// The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.\r
+ /// </summary>\r
+ SETCURSOR = 0x0020,\r
+ /// <summary>\r
+ /// The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function.\r
+ /// </summary>\r
+ MOUSEACTIVATE = 0x0021,\r
+ /// <summary>\r
+ /// The WM_CHILDACTIVATE message is sent to a child window when the user clicks the window's title bar or when the window is activated, moved, or sized.\r
+ /// </summary>\r
+ CHILDACTIVATE = 0x0022,\r
+ /// <summary>\r
+ /// The WM_QUEUESYNC message is sent by a computer-based training (CBT) application to separate user-input messages from other messages sent through the WH_JOURNALPLAYBACK Hook procedure.\r
+ /// </summary>\r
+ QUEUESYNC = 0x0023,\r
+ /// <summary>\r
+ /// The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size.\r
+ /// </summary>\r
+ GETMINMAXINFO = 0x0024,\r
+ /// <summary>\r
+ /// Windows NT 3.51 and earlier: The WM_PAINTICON message is sent to a minimized window when the icon is to be painted. This message is not sent by newer versions of Microsoft Windows, except in unusual circumstances explained in the Remarks.\r
+ /// </summary>\r
+ PAINTICON = 0x0026,\r
+ /// <summary>\r
+ /// Windows NT 3.51 and earlier: The WM_ICONERASEBKGND message is sent to a minimized window when the background of the icon must be filled before painting the icon. A window receives this message only if a class icon is defined for the window; otherwise, WM_ERASEBKGND is sent. This message is not sent by newer versions of Windows.\r
+ /// </summary>\r
+ ICONERASEBKGND = 0x0027,\r
+ /// <summary>\r
+ /// The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box.\r
+ /// </summary>\r
+ NEXTDLGCTL = 0x0028,\r
+ /// <summary>\r
+ /// The WM_SPOOLERSTATUS message is sent from Print Manager whenever a job is added to or removed from the Print Manager queue.\r
+ /// </summary>\r
+ SPOOLERSTATUS = 0x002A,\r
+ /// <summary>\r
+ /// The WM_DRAWITEM message is sent to the parent window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed.\r
+ /// </summary>\r
+ DRAWITEM = 0x002B,\r
+ /// <summary>\r
+ /// The WM_MEASUREITEM message is sent to the owner window of a combo box, list box, list view control, or menu item when the control or menu is created.\r
+ /// </summary>\r
+ MEASUREITEM = 0x002C,\r
+ /// <summary>\r
+ /// Sent to the owner of a list box or combo box when the list box or combo box is destroyed or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT message. The system sends a WM_DELETEITEM message for each deleted item. The system sends the WM_DELETEITEM message for any deleted list box or combo box item with nonzero item data.\r
+ /// </summary>\r
+ DELETEITEM = 0x002D,\r
+ /// <summary>\r
+ /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_KEYDOWN message.\r
+ /// </summary>\r
+ VKEYTOITEM = 0x002E,\r
+ /// <summary>\r
+ /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message.\r
+ /// </summary>\r
+ CHARTOITEM = 0x002F,\r
+ /// <summary>\r
+ /// An application sends a WM_SETFONT message to specify the font that a control is to use when drawing text.\r
+ /// </summary>\r
+ SETFONT = 0x0030,\r
+ /// <summary>\r
+ /// An application sends a WM_GETFONT message to a control to retrieve the font with which the control is currently drawing its text.\r
+ /// </summary>\r
+ GETFONT = 0x0031,\r
+ /// <summary>\r
+ /// An application sends a WM_SETHOTKEY message to a window to associate a hot key with the window. When the user presses the hot key, the system activates the window.\r
+ /// </summary>\r
+ SETHOTKEY = 0x0032,\r
+ /// <summary>\r
+ /// An application sends a WM_GETHOTKEY message to determine the hot key associated with a window.\r
+ /// </summary>\r
+ GETHOTKEY = 0x0033,\r
+ /// <summary>\r
+ /// The WM_QUERYDRAGICON message is sent to a minimized (iconic) window. The window is about to be dragged by the user but does not have an icon defined for its class. An application can return a handle to an icon or cursor. The system displays this cursor or icon while the user drags the icon.\r
+ /// </summary>\r
+ QUERYDRAGICON = 0x0037,\r
+ /// <summary>\r
+ /// The system sends the WM_COMPAREITEM message to determine the relative position of a new item in the sorted list of an owner-drawn combo box or list box. Whenever the application adds a new item, the system sends this message to the owner of a combo box or list box created with the CBS_SORT or LBS_SORT style.\r
+ /// </summary>\r
+ COMPAREITEM = 0x0039,\r
+ /// <summary>\r
+ /// Active Accessibility sends the WM_GETOBJECT message to obtain information about an accessible object contained in a server application.\r
+ /// Applications never send this message directly. It is sent only by Active Accessibility in response to calls to AccessibleObjectFromPoint, AccessibleObjectFromEvent, or AccessibleObjectFromWindow. However, server applications handle this message.\r
+ /// </summary>\r
+ GETOBJECT = 0x003D,\r
+ /// <summary>\r
+ /// The WM_COMPACTING message is sent to all top-level windows when the system detects more than 12.5 percent of system time over a 30- to 60-second interval is being spent compacting memory. This indicates that system memory is low.\r
+ /// </summary>\r
+ COMPACTING = 0x0041,\r
+ /// <summary>\r
+ /// WM_COMMNOTIFY is Obsolete for Win32-Based Applications\r
+ /// </summary>\r
+ [Obsolete]\r
+ COMMNOTIFY = 0x0044,\r
+ /// <summary>\r
+ /// The WM_WINDOWPOSCHANGING message is sent to a window whose size, position, or place in the Z order is about to change as a result of a call to the SetWindowPos function or another window-management function.\r
+ /// </summary>\r
+ WINDOWPOSCHANGING = 0x0046,\r
+ /// <summary>\r
+ /// The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to the SetWindowPos function or another window-management function.\r
+ /// </summary>\r
+ WINDOWPOSCHANGED = 0x0047,\r
+ /// <summary>\r
+ /// Notifies applications that the system, typically a battery-powered personal computer, is about to enter a suspended mode.\r
+ /// Use: POWERBROADCAST\r
+ /// </summary>\r
+ [Obsolete]\r
+ POWER = 0x0048,\r
+ /// <summary>\r
+ /// An application sends the WM_COPYDATA message to pass data to another application.\r
+ /// </summary>\r
+ COPYDATA = 0x004A,\r
+ /// <summary>\r
+ /// The WM_CANCELJOURNAL message is posted to an application when a user cancels the application's journaling activities. The message is posted with a NULL window handle.\r
+ /// </summary>\r
+ CANCELJOURNAL = 0x004B,\r
+ /// <summary>\r
+ /// Sent by a common control to its parent window when an event has occurred or the control requires some information.\r
+ /// </summary>\r
+ NOTIFY = 0x004E,\r
+ /// <summary>\r
+ /// The WM_INPUTLANGCHANGEREQUEST message is posted to the window with the focus when the user chooses a new input language, either with the hotkey (specified in the Keyboard control panel application) or from the indicator on the system taskbar. An application can accept the change by passing the message to the DefWindowProc function or reject the change (and prevent it from taking place) by returning immediately.\r
+ /// </summary>\r
+ INPUTLANGCHANGEREQUEST = 0x0050,\r
+ /// <summary>\r
+ /// The WM_INPUTLANGCHANGE message is sent to the topmost affected window after an application's input language has been changed. You should make any application-specific settings and pass the message to the DefWindowProc function, which passes the message to all first-level child windows. These child windows can pass the message to DefWindowProc to have it pass the message to their child windows, and so on.\r
+ /// </summary>\r
+ INPUTLANGCHANGE = 0x0051,\r
+ /// <summary>\r
+ /// Sent to an application that has initiated a training card with Microsoft Windows Help. The message informs the application when the user clicks an authorable button. An application initiates a training card by specifying the HELP_TCARD command in a call to the WinHelp function.\r
+ /// </summary>\r
+ TCARD = 0x0052,\r
+ /// <summary>\r
+ /// Indicates that the user pressed the F1 key. If a menu is active when F1 is pressed, WM_HELP is sent to the window associated with the menu; otherwise, WM_HELP is sent to the window that has the keyboard focus. If no window has the keyboard focus, WM_HELP is sent to the currently active window.\r
+ /// </summary>\r
+ HELP = 0x0053,\r
+ /// <summary>\r
+ /// The WM_USERCHANGED message is sent to all windows after the user has logged on or off. When the user logs on or off, the system updates the user-specific settings. The system sends this message immediately after updating the settings.\r
+ /// </summary>\r
+ USERCHANGED = 0x0054,\r
+ /// <summary>\r
+ /// Determines if a window accepts ANSI or Unicode structures in the WM_NOTIFY notification message. WM_NOTIFYFORMAT messages are sent from a common control to its parent window and from the parent window to the common control.\r
+ /// </summary>\r
+ NOTIFYFORMAT = 0x0055,\r
+ /// <summary>\r
+ /// The WM_CONTEXTMENU message notifies a window that the user clicked the right mouse button (right-clicked) in the window.\r
+ /// </summary>\r
+ CONTEXTMENU = 0x007B,\r
+ /// <summary>\r
+ /// The WM_STYLECHANGING message is sent to a window when the SetWindowLong function is about to change one or more of the window's styles.\r
+ /// </summary>\r
+ STYLECHANGING = 0x007C,\r
+ /// <summary>\r
+ /// The WM_STYLECHANGED message is sent to a window after the SetWindowLong function has changed one or more of the window's styles\r
+ /// </summary>\r
+ STYLECHANGED = 0x007D,\r
+ /// <summary>\r
+ /// The WM_DISPLAYCHANGE message is sent to all windows when the display resolution has changed.\r
+ /// </summary>\r
+ DISPLAYCHANGE = 0x007E,\r
+ /// <summary>\r
+ /// The WM_GETICON message is sent to a window to retrieve a handle to the large or small icon associated with a window. The system displays the large icon in the ALT+TAB dialog, and the small icon in the window caption.\r
+ /// </summary>\r
+ GETICON = 0x007F,\r
+ /// <summary>\r
+ /// An application sends the WM_SETICON message to associate a new large or small icon with a window. The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption.\r
+ /// </summary>\r
+ SETICON = 0x0080,\r
+ /// <summary>\r
+ /// The WM_NCCREATE message is sent prior to the WM_CREATE message when a window is first created.\r
+ /// </summary>\r
+ NCCREATE = 0x0081,\r
+ /// <summary>\r
+ /// The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window.\r
+ /// The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed.\r
+ /// </summary>\r
+ NCDESTROY = 0x0082,\r
+ /// <summary>\r
+ /// The WM_NCCALCSIZE message is sent when the size and position of a window's client area must be calculated. By processing this message, an application can control the content of the window's client area when the size or position of the window changes.\r
+ /// </summary>\r
+ NCCALCSIZE = 0x0083,\r
+ /// <summary>\r
+ /// The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse.\r
+ /// </summary>\r
+ NCHITTEST = 0x0084,\r
+ /// <summary>\r
+ /// The WM_NCPAINT message is sent to a window when its frame must be painted.\r
+ /// </summary>\r
+ NCPAINT = 0x0085,\r
+ /// <summary>\r
+ /// The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state.\r
+ /// </summary>\r
+ NCACTIVATE = 0x0086,\r
+ /// <summary>\r
+ /// The WM_GETDLGCODE message is sent to the window procedure associated with a control. By default, the system handles all keyboard input to the control; the system interprets certain types of keyboard input as dialog box navigation keys. To override this default behavior, the control can respond to the WM_GETDLGCODE message to indicate the types of input it wants to process itself.\r
+ /// </summary>\r
+ GETDLGCODE = 0x0087,\r
+ /// <summary>\r
+ /// The WM_SYNCPAINT message is used to synchronize painting while avoiding linking independent GUI threads.\r
+ /// </summary>\r
+ SYNCPAINT = 0x0088,\r
+ /// <summary>\r
+ /// The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved within the nonclient area of the window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCMOUSEMOVE = 0x00A0,\r
+ /// <summary>\r
+ /// The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCLBUTTONDOWN = 0x00A1,\r
+ /// <summary>\r
+ /// The WM_NCLBUTTONUP message is posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCLBUTTONUP = 0x00A2,\r
+ /// <summary>\r
+ /// The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCLBUTTONDBLCLK = 0x00A3,\r
+ /// <summary>\r
+ /// The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCRBUTTONDOWN = 0x00A4,\r
+ /// <summary>\r
+ /// The WM_NCRBUTTONUP message is posted when the user releases the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCRBUTTONUP = 0x00A5,\r
+ /// <summary>\r
+ /// The WM_NCRBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCRBUTTONDBLCLK = 0x00A6,\r
+ /// <summary>\r
+ /// The WM_NCMBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCMBUTTONDOWN = 0x00A7,\r
+ /// <summary>\r
+ /// The WM_NCMBUTTONUP message is posted when the user releases the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCMBUTTONUP = 0x00A8,\r
+ /// <summary>\r
+ /// The WM_NCMBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCMBUTTONDBLCLK = 0x00A9,\r
+ /// <summary>\r
+ /// The WM_NCXBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCXBUTTONDOWN = 0x00AB,\r
+ /// <summary>\r
+ /// The WM_NCXBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCXBUTTONUP = 0x00AC,\r
+ /// <summary>\r
+ /// The WM_NCXBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.\r
+ /// </summary>\r
+ NCXBUTTONDBLCLK = 0x00AD,\r
+ /// <summary>\r
+ /// The WM_INPUT_DEVICE_CHANGE message is sent to the window that registered to receive raw input. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ INPUT_DEVICE_CHANGE = 0x00FE,\r
+ /// <summary>\r
+ /// The WM_INPUT message is sent to the window that is getting raw input.\r
+ /// </summary>\r
+ INPUT = 0x00FF,\r
+ /// <summary>\r
+ /// This message filters for keyboard messages.\r
+ /// </summary>\r
+ KEYFIRST = 0x0100,\r
+ /// <summary>\r
+ /// The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.\r
+ /// </summary>\r
+ KEYDOWN = 0x0100,\r
+ /// <summary>\r
+ /// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed, or a keyboard key that is pressed when a window has the keyboard focus.\r
+ /// </summary>\r
+ KEYUP = 0x0101,\r
+ /// <summary>\r
+ /// The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.\r
+ /// </summary>\r
+ CHAR = 0x0102,\r
+ /// <summary>\r
+ /// The WM_DEADCHAR message is posted to the window with the keyboard focus when a WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR specifies a character code generated by a dead key. A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key.\r
+ /// </summary>\r
+ DEADCHAR = 0x0103,\r
+ /// <summary>\r
+ /// The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user presses the F10 key (which activates the menu bar) or holds down the ALT key and then presses another key. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYDOWN message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter.\r
+ /// </summary>\r
+ SYSKEYDOWN = 0x0104,\r
+ /// <summary>\r
+ /// The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter.\r
+ /// </summary>\r
+ SYSKEYUP = 0x0105,\r
+ /// <summary>\r
+ /// The WM_SYSCHAR message is posted to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. It specifies the character code of a system character key \97 that is, a character key that is pressed while the ALT key is down.\r
+ /// </summary>\r
+ SYSCHAR = 0x0106,\r
+ /// <summary>\r
+ /// The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. WM_SYSDEADCHAR specifies the character code of a system dead key \97 that is, a dead key that is pressed while holding down the ALT key.\r
+ /// </summary>\r
+ SYSDEADCHAR = 0x0107,\r
+ /// <summary>\r
+ /// The WM_UNICHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_UNICHAR message contains the character code of the key that was pressed.\r
+ /// The WM_UNICHAR message is equivalent to WM_CHAR, but it uses Unicode Transformation Format (UTF)-32, whereas WM_CHAR uses UTF-16. It is designed to send or post Unicode characters to ANSI windows and it can can handle Unicode Supplementary Plane characters.\r
+ /// </summary>\r
+ UNICHAR = 0x0109,\r
+ /// <summary>\r
+ /// This message filters for keyboard messages.\r
+ /// </summary>\r
+ KEYLAST = 0x0109,\r
+ /// <summary>\r
+ /// Sent immediately before the IME generates the composition string as a result of a keystroke. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_STARTCOMPOSITION = 0x010D,\r
+ /// <summary>\r
+ /// Sent to an application when the IME ends composition. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_ENDCOMPOSITION = 0x010E,\r
+ /// <summary>\r
+ /// Sent to an application when the IME changes composition status as a result of a keystroke. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_COMPOSITION = 0x010F,\r
+ IME_KEYLAST = 0x010F,\r
+ /// <summary>\r
+ /// The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box.\r
+ /// </summary>\r
+ INITDIALOG = 0x0110,\r
+ /// <summary>\r
+ /// The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.\r
+ /// </summary>\r
+ COMMAND = 0x0111,\r
+ /// <summary>\r
+ /// A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button.\r
+ /// </summary>\r
+ SYSCOMMAND = 0x0112,\r
+ /// <summary>\r
+ /// The WM_TIMER message is posted to the installing thread's message queue when a timer expires. The message is posted by the GetMessage or PeekMessage function.\r
+ /// </summary>\r
+ TIMER = 0x0113,\r
+ /// <summary>\r
+ /// The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control.\r
+ /// </summary>\r
+ HSCROLL = 0x0114,\r
+ /// <summary>\r
+ /// The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control.\r
+ /// </summary>\r
+ VSCROLL = 0x0115,\r
+ /// <summary>\r
+ /// The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed.\r
+ /// </summary>\r
+ INITMENU = 0x0116,\r
+ /// <summary>\r
+ /// The WM_INITMENUPOPUP message is sent when a drop-down menu or submenu is about to become active. This allows an application to modify the menu before it is displayed, without changing the entire menu.\r
+ /// </summary>\r
+ INITMENUPOPUP = 0x0117,\r
+ /// <summary>\r
+ /// The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item.\r
+ /// </summary>\r
+ MENUSELECT = 0x011F,\r
+ /// <summary>\r
+ /// The WM_MENUCHAR message is sent when a menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key. This message is sent to the window that owns the menu.\r
+ /// </summary>\r
+ MENUCHAR = 0x0120,\r
+ /// <summary>\r
+ /// The WM_ENTERIDLE message is sent to the owner window of a modal dialog box or menu that is entering an idle state. A modal dialog box or menu enters an idle state when no messages are waiting in its queue after it has processed one or more previous messages.\r
+ /// </summary>\r
+ ENTERIDLE = 0x0121,\r
+ /// <summary>\r
+ /// The WM_MENURBUTTONUP message is sent when the user releases the right mouse button while the cursor is on a menu item.\r
+ /// </summary>\r
+ MENURBUTTONUP = 0x0122,\r
+ /// <summary>\r
+ /// The WM_MENUDRAG message is sent to the owner of a drag-and-drop menu when the user drags a menu item.\r
+ /// </summary>\r
+ MENUDRAG = 0x0123,\r
+ /// <summary>\r
+ /// The WM_MENUGETOBJECT message is sent to the owner of a drag-and-drop menu when the mouse cursor enters a menu item or moves from the center of the item to the top or bottom of the item.\r
+ /// </summary>\r
+ MENUGETOBJECT = 0x0124,\r
+ /// <summary>\r
+ /// The WM_UNINITMENUPOPUP message is sent when a drop-down menu or submenu has been destroyed.\r
+ /// </summary>\r
+ UNINITMENUPOPUP = 0x0125,\r
+ /// <summary>\r
+ /// The WM_MENUCOMMAND message is sent when the user makes a selection from a menu.\r
+ /// </summary>\r
+ MENUCOMMAND = 0x0126,\r
+ /// <summary>\r
+ /// An application sends the WM_CHANGEUISTATE message to indicate that the user interface (UI) state should be changed.\r
+ /// </summary>\r
+ CHANGEUISTATE = 0x0127,\r
+ /// <summary>\r
+ /// An application sends the WM_UPDATEUISTATE message to change the user interface (UI) state for the specified window and all its child windows.\r
+ /// </summary>\r
+ UPDATEUISTATE = 0x0128,\r
+ /// <summary>\r
+ /// An application sends the WM_QUERYUISTATE message to retrieve the user interface (UI) state for a window.\r
+ /// </summary>\r
+ QUERYUISTATE = 0x0129,\r
+ /// <summary>\r
+ /// The WM_CTLCOLORMSGBOX message is sent to the owner window of a message box before Windows draws the message box. By responding to this message, the owner window can set the text and background colors of the message box by using the given display device context handle.\r
+ /// </summary>\r
+ CTLCOLORMSGBOX = 0x0132,\r
+ /// <summary>\r
+ /// An edit control that is not read-only or disabled sends the WM_CTLCOLOREDIT message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the edit control.\r
+ /// </summary>\r
+ CTLCOLOREDIT = 0x0133,\r
+ /// <summary>\r
+ /// Sent to the parent window of a list box before the system draws the list box. By responding to this message, the parent window can set the text and background colors of the list box by using the specified display device context handle.\r
+ /// </summary>\r
+ CTLCOLORLISTBOX = 0x0134,\r
+ /// <summary>\r
+ /// The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button. The parent window can change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing this message.\r
+ /// </summary>\r
+ CTLCOLORBTN = 0x0135,\r
+ /// <summary>\r
+ /// The WM_CTLCOLORDLG message is sent to a dialog box before the system draws the dialog box. By responding to this message, the dialog box can set its text and background colors using the specified display device context handle.\r
+ /// </summary>\r
+ CTLCOLORDLG = 0x0136,\r
+ /// <summary>\r
+ /// The WM_CTLCOLORSCROLLBAR message is sent to the parent window of a scroll bar control when the control is about to be drawn. By responding to this message, the parent window can use the display context handle to set the background color of the scroll bar control.\r
+ /// </summary>\r
+ CTLCOLORSCROLLBAR = 0x0137,\r
+ /// <summary>\r
+ /// A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the static control.\r
+ /// </summary>\r
+ CTLCOLORSTATIC = 0x0138,\r
+ /// <summary>\r
+ /// Use WM_MOUSEFIRST to specify the first mouse message. Use the PeekMessage() Function.\r
+ /// </summary>\r
+ MOUSEFIRST = 0x0200,\r
+ /// <summary>\r
+ /// The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ MOUSEMOVE = 0x0200,\r
+ /// <summary>\r
+ /// The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ LBUTTONDOWN = 0x0201,\r
+ /// <summary>\r
+ /// The WM_LBUTTONUP message is posted when the user releases the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ LBUTTONUP = 0x0202,\r
+ /// <summary>\r
+ /// The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ LBUTTONDBLCLK = 0x0203,\r
+ /// <summary>\r
+ /// The WM_RBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ RBUTTONDOWN = 0x0204,\r
+ /// <summary>\r
+ /// The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ RBUTTONUP = 0x0205,\r
+ /// <summary>\r
+ /// The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ RBUTTONDBLCLK = 0x0206,\r
+ /// <summary>\r
+ /// The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ MBUTTONDOWN = 0x0207,\r
+ /// <summary>\r
+ /// The WM_MBUTTONUP message is posted when the user releases the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ MBUTTONUP = 0x0208,\r
+ /// <summary>\r
+ /// The WM_MBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ MBUTTONDBLCLK = 0x0209,\r
+ /// <summary>\r
+ /// The WM_MOUSEWHEEL message is sent to the focus window when the mouse wheel is rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it.\r
+ /// </summary>\r
+ MOUSEWHEEL = 0x020A,\r
+ /// <summary>\r
+ /// The WM_XBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ XBUTTONDOWN = 0x020B,\r
+ /// <summary>\r
+ /// The WM_XBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ XBUTTONUP = 0x020C,\r
+ /// <summary>\r
+ /// The WM_XBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.\r
+ /// </summary>\r
+ XBUTTONDBLCLK = 0x020D,\r
+ /// <summary>\r
+ /// The WM_MOUSEHWHEEL message is sent to the focus window when the mouse's horizontal scroll wheel is tilted or rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it.\r
+ /// </summary>\r
+ MOUSEHWHEEL = 0x020E,\r
+ /// <summary>\r
+ /// Use WM_MOUSELAST to specify the last mouse message. Used with PeekMessage() Function.\r
+ /// </summary>\r
+ MOUSELAST = 0x020E,\r
+ /// <summary>\r
+ /// The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, the system sends the message before any processing to destroy the window takes place.\r
+ /// </summary>\r
+ PARENTNOTIFY = 0x0210,\r
+ /// <summary>\r
+ /// The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been entered.\r
+ /// </summary>\r
+ ENTERMENULOOP = 0x0211,\r
+ /// <summary>\r
+ /// The WM_EXITMENULOOP message informs an application's main window procedure that a menu modal loop has been exited.\r
+ /// </summary>\r
+ EXITMENULOOP = 0x0212,\r
+ /// <summary>\r
+ /// The WM_NEXTMENU message is sent to an application when the right or left arrow key is used to switch between the menu bar and the system menu.\r
+ /// </summary>\r
+ NEXTMENU = 0x0213,\r
+ /// <summary>\r
+ /// The WM_SIZING message is sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position.\r
+ /// </summary>\r
+ SIZING = 0x0214,\r
+ /// <summary>\r
+ /// The WM_CAPTURECHANGED message is sent to the window that is losing the mouse capture.\r
+ /// </summary>\r
+ CAPTURECHANGED = 0x0215,\r
+ /// <summary>\r
+ /// The WM_MOVING message is sent to a window that the user is moving. By processing this message, an application can monitor the position of the drag rectangle and, if needed, change its position.\r
+ /// </summary>\r
+ MOVING = 0x0216,\r
+ /// <summary>\r
+ /// Notifies applications that a power-management event has occurred.\r
+ /// </summary>\r
+ POWERBROADCAST = 0x0218,\r
+ /// <summary>\r
+ /// Notifies an application of a change to the hardware configuration of a device or the computer.\r
+ /// </summary>\r
+ DEVICECHANGE = 0x0219,\r
+ /// <summary>\r
+ /// An application sends the WM_MDICREATE message to a multiple-document interface (MDI) client window to create an MDI child window.\r
+ /// </summary>\r
+ MDICREATE = 0x0220,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIDESTROY message to a multiple-document interface (MDI) client window to close an MDI child window.\r
+ /// </summary>\r
+ MDIDESTROY = 0x0221,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIACTIVATE message to a multiple-document interface (MDI) client window to instruct the client window to activate a different MDI child window.\r
+ /// </summary>\r
+ MDIACTIVATE = 0x0222,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIRESTORE message to a multiple-document interface (MDI) client window to restore an MDI child window from maximized or minimized size.\r
+ /// </summary>\r
+ MDIRESTORE = 0x0223,\r
+ /// <summary>\r
+ /// An application sends the WM_MDINEXT message to a multiple-document interface (MDI) client window to activate the next or previous child window.\r
+ /// </summary>\r
+ MDINEXT = 0x0224,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIMAXIMIZE message to a multiple-document interface (MDI) client window to maximize an MDI child window. The system resizes the child window to make its client area fill the client window. The system places the child window's window menu icon in the rightmost position of the frame window's menu bar, and places the child window's restore icon in the leftmost position. The system also appends the title bar text of the child window to that of the frame window.\r
+ /// </summary>\r
+ MDIMAXIMIZE = 0x0225,\r
+ /// <summary>\r
+ /// An application sends the WM_MDITILE message to a multiple-document interface (MDI) client window to arrange all of its MDI child windows in a tile format.\r
+ /// </summary>\r
+ MDITILE = 0x0226,\r
+ /// <summary>\r
+ /// An application sends the WM_MDICASCADE message to a multiple-document interface (MDI) client window to arrange all its child windows in a cascade format.\r
+ /// </summary>\r
+ MDICASCADE = 0x0227,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIICONARRANGE message to a multiple-document interface (MDI) client window to arrange all minimized MDI child windows. It does not affect child windows that are not minimized.\r
+ /// </summary>\r
+ MDIICONARRANGE = 0x0228,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIGETACTIVE message to a multiple-document interface (MDI) client window to retrieve the handle to the active MDI child window.\r
+ /// </summary>\r
+ MDIGETACTIVE = 0x0229,\r
+ /// <summary>\r
+ /// An application sends the WM_MDISETMENU message to a multiple-document interface (MDI) client window to replace the entire menu of an MDI frame window, to replace the window menu of the frame window, or both.\r
+ /// </summary>\r
+ MDISETMENU = 0x0230,\r
+ /// <summary>\r
+ /// The WM_ENTERSIZEMOVE message is sent one time to a window after it enters the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns.\r
+ /// The system sends the WM_ENTERSIZEMOVE message regardless of whether the dragging of full windows is enabled.\r
+ /// </summary>\r
+ ENTERSIZEMOVE = 0x0231,\r
+ /// <summary>\r
+ /// The WM_EXITSIZEMOVE message is sent one time to a window, after it has exited the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns.\r
+ /// </summary>\r
+ EXITSIZEMOVE = 0x0232,\r
+ /// <summary>\r
+ /// Sent when the user drops a file on the window of an application that has registered itself as a recipient of dropped files.\r
+ /// </summary>\r
+ DROPFILES = 0x0233,\r
+ /// <summary>\r
+ /// An application sends the WM_MDIREFRESHMENU message to a multiple-document interface (MDI) client window to refresh the window menu of the MDI frame window.\r
+ /// </summary>\r
+ MDIREFRESHMENU = 0x0234,\r
+ /// <summary>\r
+ /// Sent to an application when a window is activated. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_SETCONTEXT = 0x0281,\r
+ /// <summary>\r
+ /// Sent to an application to notify it of changes to the IME window. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_NOTIFY = 0x0282,\r
+ /// <summary>\r
+ /// Sent by an application to direct the IME window to carry out the requested command. The application uses this message to control the IME window that it has created. To send this message, the application calls the SendMessage function with the following parameters.\r
+ /// </summary>\r
+ IME_CONTROL = 0x0283,\r
+ /// <summary>\r
+ /// Sent to an application when the IME window finds no space to extend the area for the composition window. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_COMPOSITIONFULL = 0x0284,\r
+ /// <summary>\r
+ /// Sent to an application when the operating system is about to change the current IME. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_SELECT = 0x0285,\r
+ /// <summary>\r
+ /// Sent to an application when the IME gets a character of the conversion result. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_CHAR = 0x0286,\r
+ /// <summary>\r
+ /// Sent to an application to provide commands and request information. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_REQUEST = 0x0288,\r
+ /// <summary>\r
+ /// Sent to an application by the IME to notify the application of a key press and to keep message order. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_KEYDOWN = 0x0290,\r
+ /// <summary>\r
+ /// Sent to an application by the IME to notify the application of a key release and to keep message order. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ IME_KEYUP = 0x0291,\r
+ /// <summary>\r
+ /// The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent.\r
+ /// </summary>\r
+ MOUSEHOVER = 0x02A1,\r
+ /// <summary>\r
+ /// The WM_MOUSELEAVE message is posted to a window when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent.\r
+ /// </summary>\r
+ MOUSELEAVE = 0x02A3,\r
+ /// <summary>\r
+ /// The WM_NCMOUSEHOVER message is posted to a window when the cursor hovers over the nonclient area of the window for the period of time specified in a prior call to TrackMouseEvent.\r
+ /// </summary>\r
+ NCMOUSEHOVER = 0x02A0,\r
+ /// <summary>\r
+ /// The WM_NCMOUSELEAVE message is posted to a window when the cursor leaves the nonclient area of the window specified in a prior call to TrackMouseEvent.\r
+ /// </summary>\r
+ NCMOUSELEAVE = 0x02A2,\r
+ /// <summary>\r
+ /// The WM_WTSSESSION_CHANGE message notifies applications of changes in session state.\r
+ /// </summary>\r
+ WTSSESSION_CHANGE = 0x02B1,\r
+ TABLET_FIRST = 0x02c0,\r
+ TABLET_LAST = 0x02df,\r
+ /// <summary>\r
+ /// An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the clipboard in CF_TEXT format.\r
+ /// </summary>\r
+ CUT = 0x0300,\r
+ /// <summary>\r
+ /// An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format.\r
+ /// </summary>\r
+ COPY = 0x0301,\r
+ /// <summary>\r
+ /// An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.\r
+ /// </summary>\r
+ PASTE = 0x0302,\r
+ /// <summary>\r
+ /// An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control.\r
+ /// </summary>\r
+ CLEAR = 0x0303,\r
+ /// <summary>\r
+ /// An application sends a WM_UNDO message to an edit control to undo the last operation. When this message is sent to an edit control, the previously deleted text is restored or the previously added text is deleted.\r
+ /// </summary>\r
+ UNDO = 0x0304,\r
+ /// <summary>\r
+ /// The WM_RENDERFORMAT message is sent to the clipboard owner if it has delayed rendering a specific clipboard format and if an application has requested data in that format. The clipboard owner must render data in the specified format and place it on the clipboard by calling the SetClipboardData function.\r
+ /// </summary>\r
+ RENDERFORMAT = 0x0305,\r
+ /// <summary>\r
+ /// The WM_RENDERALLFORMATS message is sent to the clipboard owner before it is destroyed, if the clipboard owner has delayed rendering one or more clipboard formats. For the content of the clipboard to remain available to other applications, the clipboard owner must render data in all the formats it is capable of generating, and place the data on the clipboard by calling the SetClipboardData function.\r
+ /// </summary>\r
+ RENDERALLFORMATS = 0x0306,\r
+ /// <summary>\r
+ /// The WM_DESTROYCLIPBOARD message is sent to the clipboard owner when a call to the EmptyClipboard function empties the clipboard.\r
+ /// </summary>\r
+ DESTROYCLIPBOARD = 0x0307,\r
+ /// <summary>\r
+ /// The WM_DRAWCLIPBOARD message is sent to the first window in the clipboard viewer chain when the content of the clipboard changes. This enables a clipboard viewer window to display the new content of the clipboard.\r
+ /// </summary>\r
+ DRAWCLIPBOARD = 0x0308,\r
+ /// <summary>\r
+ /// The WM_PAINTCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area needs repainting.\r
+ /// </summary>\r
+ PAINTCLIPBOARD = 0x0309,\r
+ /// <summary>\r
+ /// The WM_VSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's vertical scroll bar. The owner should scroll the clipboard image and update the scroll bar values.\r
+ /// </summary>\r
+ VSCROLLCLIPBOARD = 0x030A,\r
+ /// <summary>\r
+ /// The WM_SIZECLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area has changed size.\r
+ /// </summary>\r
+ SIZECLIPBOARD = 0x030B,\r
+ /// <summary>\r
+ /// The WM_ASKCBFORMATNAME message is sent to the clipboard owner by a clipboard viewer window to request the name of a CF_OWNERDISPLAY clipboard format.\r
+ /// </summary>\r
+ ASKCBFORMATNAME = 0x030C,\r
+ /// <summary>\r
+ /// The WM_CHANGECBCHAIN message is sent to the first window in the clipboard viewer chain when a window is being removed from the chain.\r
+ /// </summary>\r
+ CHANGECBCHAIN = 0x030D,\r
+ /// <summary>\r
+ /// The WM_HSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window. This occurs when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's horizontal scroll bar. The owner should scroll the clipboard image and update the scroll bar values.\r
+ /// </summary>\r
+ HSCROLLCLIPBOARD = 0x030E,\r
+ /// <summary>\r
+ /// This message informs a window that it is about to receive the keyboard focus, giving the window the opportunity to realize its logical palette when it receives the focus.\r
+ /// </summary>\r
+ QUERYNEWPALETTE = 0x030F,\r
+ /// <summary>\r
+ /// The WM_PALETTEISCHANGING message informs applications that an application is going to realize its logical palette.\r
+ /// </summary>\r
+ PALETTEISCHANGING = 0x0310,\r
+ /// <summary>\r
+ /// This message is sent by the OS to all top-level and overlapped windows after the window with the keyboard focus realizes its logical palette.\r
+ /// This message enables windows that do not have the keyboard focus to realize their logical palettes and update their client areas.\r
+ /// </summary>\r
+ PALETTECHANGED = 0x0311,\r
+ /// <summary>\r
+ /// The WM_HOTKEY message is posted when the user presses a hot key registered by the RegisterHotKey function. The message is placed at the top of the message queue associated with the thread that registered the hot key.\r
+ /// </summary>\r
+ HOTKEY = 0x0312,\r
+ /// <summary>\r
+ /// The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.\r
+ /// </summary>\r
+ PRINT = 0x0317,\r
+ /// <summary>\r
+ /// The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context.\r
+ /// </summary>\r
+ PRINTCLIENT = 0x0318,\r
+ /// <summary>\r
+ /// The WM_APPCOMMAND message notifies a window that the user generated an application command event, for example, by clicking an application command button using the mouse or typing an application command key on the keyboard.\r
+ /// </summary>\r
+ APPCOMMAND = 0x0319,\r
+ /// <summary>\r
+ /// The WM_THEMECHANGED message is broadcast to every window following a theme change event. Examples of theme change events are the activation of a theme, the deactivation of a theme, or a transition from one theme to another.\r
+ /// </summary>\r
+ THEMECHANGED = 0x031A,\r
+ /// <summary>\r
+ /// Sent when the contents of the clipboard have changed.\r
+ /// </summary>\r
+ CLIPBOARDUPDATE = 0x031D,\r
+ /// <summary>\r
+ /// The system will send a window the WM_DWMCOMPOSITIONCHANGED message to indicate that the availability of desktop composition has changed.\r
+ /// </summary>\r
+ DWMCOMPOSITIONCHANGED = 0x031E,\r
+ /// <summary>\r
+ /// WM_DWMNCRENDERINGCHANGED is called when the non-client area rendering status of a window has changed. Only windows that have set the flag DWM_BLURBEHIND.fTransitionOnMaximized to true will get this message.\r
+ /// </summary>\r
+ DWMNCRENDERINGCHANGED = 0x031F,\r
+ /// <summary>\r
+ /// Sent to all top-level windows when the colorization color has changed.\r
+ /// </summary>\r
+ DWMCOLORIZATIONCOLORCHANGED = 0x0320,\r
+ /// <summary>\r
+ /// WM_DWMWINDOWMAXIMIZEDCHANGE will let you know when a DWM composed window is maximized. You also have to register for this message as well. You'd have other windowd go opaque when this message is sent.\r
+ /// </summary>\r
+ DWMWINDOWMAXIMIZEDCHANGE = 0x0321,\r
+ /// <summary>\r
+ /// Sent to request extended title bar information. A window receives this message through its WindowProc function.\r
+ /// </summary>\r
+ GETTITLEBARINFOEX = 0x033F,\r
+ HANDHELDFIRST = 0x0358,\r
+ HANDHELDLAST = 0x035F,\r
+ AFXFIRST = 0x0360,\r
+ AFXLAST = 0x037F,\r
+ PENWINFIRST = 0x0380,\r
+ PENWINLAST = 0x038F,\r
+ /// <summary>\r
+ /// The WM_APP constant is used by applications to help define private messages, usually of the form WM_APP+X, where X is an integer value.\r
+ /// </summary>\r
+ APP = 0x8000,\r
+ /// <summary>\r
+ /// The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.\r
+ /// </summary>\r
+ USER = 0x0400,\r
+\r
+ /// <summary>\r
+ /// An application sends the WM_CPL_LAUNCH message to Windows Control Panel to request that a Control Panel application be started.\r
+ /// </summary>\r
+ CPL_LAUNCH = USER + 0x1000,\r
+ /// <summary>\r
+ /// The WM_CPL_LAUNCHED message is sent when a Control Panel application, started by the WM_CPL_LAUNCH message, has closed. The WM_CPL_LAUNCHED message is sent to the window identified by the wParam parameter of the WM_CPL_LAUNCH message that started the application.\r
+ /// </summary>\r
+ CPL_LAUNCHED = USER + 0x1001,\r
+ /// <summary>\r
+ /// WM_SYSTIMER is a well-known yet still undocumented message. Windows uses WM_SYSTIMER for internal actions like scrolling.\r
+ /// </summary>\r
+ SYSTIMER = 0x118,\r
+ // message from dvd graph\r
+ DVD_EVENT = 0x00008002,\r
+ //DirectShow Graph Events\r
+ GRAPH_NOTIFY = 0x0400 + 13,\r
+ SAGE = USER + 234,\r
+ BM_GETCHECK = 0x00F0,\r
+ BM_SETCHECK = 0x00F1,\r
+ BM_GETSTATE = 0x00F2,\r
+ BM_SETSTATE = 0x00F3,\r
+ BM_SETSTYLE = 0x00F4,\r
+ BM_CLICK = 0x00F5,\r
+ BM_GETIMAGE = 0x00F6,\r
+ BM_SETIMAGE = 0x00F7,\r
+ BM_SETDONTCLICK = 0x00F8\r
+ }\r
+\r
+ public enum SystemMenuCommands\r
+ {\r
+ SC_SIZE = 0xF000,\r
+ SC_MOVE = 0xF010,\r
+ SC_MINIMIZE = 0xF020,\r
+ SC_MAXIMIZE = 0xF030,\r
+ SC_NEXTWINDOW = 0xF040,\r
+ SC_PREVWINDOW = 0xF050,\r
+ SC_CLOSE = 0xF060,\r
+ SC_VSCROLL = 0xF070,\r
+ SC_HSCROLL = 0xF080,\r
+ SC_MOUSEMENU = 0xF090,\r
+ SC_KEYMENU = 0xF100,\r
+ SC_ARRANGE = 0xF110,\r
+ SC_RESTORE = 0xF120,\r
+ SC_TASKLIST = 0xF130,\r
+ SC_SCREENSAVE = 0xF140,\r
+ SC_HOTKEY = 0xF150,\r
+ SC_DEFAULT = 0xF160,\r
+ SC_MONITORPOWER = 0xF170,\r
+ SC_CONTEXTHELP = 0xF180,\r
+ SC_SEPARATOR = 0xF00F,\r
+ SCF_ISSECURE = 0x00000001\r
+ }\r
+\r
+}\r
--- /dev/null
+namespace DxPlay {\r
+ public class MovieSegment {\r
+ public Timecode TCIn { get; set; }\r
+ public Timecode TCOut { get; set; }\r
+ public bool Optional { get; set; }\r
+ public string Comment { get; set; }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Runtime.InteropServices;\r
+using System.Text;\r
+using System.Runtime.ConstrainedExecution;\r
+\r
+namespace DxPlay {\r
+ #region Enum\r
+\r
+ public enum ButtonNotification : int\r
+ {\r
+ CLICKED = 0,\r
+ PAINT = 1,\r
+ HILITE = 2,\r
+ UNHILITE = 3,\r
+ DISABLE = 4,\r
+ DOUBLECLICKED = 5,\r
+ SETFOCUS = 6,\r
+ KILLFOCUS = 7\r
+ }\r
+\r
+ public enum ButtonState\r
+ {\r
+ UNCHECKED = 0x0000,\r
+ CHECKED = 0x0001,\r
+ INDETERMINATE = 0x0002,\r
+ PUSHED = 0x0004,\r
+ FOCUS = 0x0008\r
+ }\r
+\r
+ public enum NT_STATUS\r
+ {\r
+ STATUS_SUCCESS = 0x00000000,\r
+ STATUS_BUFFER_OVERFLOW = unchecked((int)0x80000005L),\r
+ STATUS_INFO_LENGTH_MISMATCH = unchecked((int)0xC0000004L)\r
+ }\r
+\r
+ public enum SYSTEM_INFORMATION_CLASS\r
+ {\r
+ SystemBasicInformation = 0,\r
+ SystemPerformanceInformation = 2,\r
+ SystemTimeOfDayInformation = 3,\r
+ SystemProcessInformation = 5,\r
+ SystemProcessorPerformanceInformation = 8,\r
+ SystemHandleInformation = 16,\r
+ SystemInterruptInformation = 23,\r
+ SystemExceptionInformation = 33,\r
+ SystemRegistryQuotaInformation = 37,\r
+ SystemLookasideInformation = 45\r
+ }\r
+\r
+ public enum OBJECT_INFORMATION_CLASS\r
+ {\r
+ ObjectBasicInformation = 0,\r
+ ObjectNameInformation = 1,\r
+ ObjectTypeInformation = 2,\r
+ ObjectAllTypesInformation = 3,\r
+ ObjectHandleInformation = 4\r
+ }\r
+\r
+ [Flags]\r
+ public enum ProcessAccessRights\r
+ {\r
+ All = 0x001F0FFF,\r
+ Terminate = 0x00000001,\r
+ CreateThread = 0x00000002,\r
+ VMOperation = 0x00000008,\r
+ VMRead = 0x00000010,\r
+ VMWrite = 0x00000020,\r
+ DupHandle = 0x00000040,\r
+ SetInformation = 0x00000200,\r
+ QueryInformation = 0x00000400,\r
+ Synchronize = 0x00100000\r
+ }\r
+\r
+ [Flags]\r
+ public enum DuplicateHandleOptions\r
+ {\r
+ DUPLICATE_CLOSE_SOURCE = 0x1,\r
+ DUPLICATE_SAME_ACCESS = 0x2\r
+ }\r
+\r
+ public enum EXECUTION_STATE : uint\r
+ {\r
+ ES_NONE = 0,\r
+ ES_SYSTEM_REQUIRED = 0x00000001,\r
+ ES_DISPLAY_REQUIRED = 0x00000002,\r
+ ES_USER_PRESENT = 0x00000004,\r
+ ES_AWAYMODE_REQUIRED = 0x00000040,\r
+ ES_CONTINUOUS = 0x80000000\r
+ }\r
+\r
+ public enum SE_OBJECT_TYPE\r
+ {\r
+ SE_UNKNOWN_OBJECT_TYPE,\r
+ SE_FILE_OBJECT,\r
+ SE_SERVICE,\r
+ SE_PRINTER,\r
+ SE_REGISTRY_KEY,\r
+ SE_LMSHARE,\r
+ SE_KERNEL_OBJECT,\r
+ SE_WINDOW_OBJECT,\r
+ SE_DS_OBJECT,\r
+ SE_DS_OBJECT_ALL,\r
+ SE_PROVIDER_DEFINED_OBJECT,\r
+ SE_WMIGUID_OBJECT,\r
+ SE_REGISTRY_WOW64_32KEY\r
+ }\r
+\r
+ public enum SECURITY_INFORMATION\r
+ {\r
+ OWNER_SECURITY_INFORMATION = 1,\r
+ GROUP_SECURITY_INFORMATION = 2,\r
+ DACL_SECURITY_INFORMATION = 4,\r
+ SACL_SECURITY_INFORMATION = 8, \r
+ }\r
+\r
+ public enum KeyAccess\r
+ {\r
+ QUERY_VALUE = 0x0001,\r
+ SET_VALUE = 0x0002,\r
+ CREATE_SUB_KEY = 0x0004,\r
+ ENUMERATE_SUB_KEYS = 0x0008,\r
+ NOTIFY = 0x0010,\r
+ CREATE_LINK = 0x0020,\r
+ WOW64_32KEY = 0x0200,\r
+ WOW64_64KEY = 0x0100\r
+ }\r
+\r
+ public enum RegValueTypes\r
+ {\r
+ REG_NONE = 0,\r
+ REG_SZ = 1,\r
+ REG_EXPAND_SZ = 2,\r
+ REG_BINARY = 3,\r
+ REG_DWORD = 4,\r
+ REG_DWORD_LITTLE_ENDIAN = 4,\r
+ REG_DWORD_BIG_ENDIAN = 5,\r
+ REG_LINK = 6,\r
+ REG_MULTI_SZ = 7\r
+ }\r
+\r
+ [Flags()]\r
+ public enum DM : int\r
+ {\r
+ Orientation = 0x1,\r
+ PaperSize = 0x2,\r
+ PaperLength = 0x4,\r
+ PaperWidth = 0x8,\r
+ Scale = 0x10,\r
+ Position = 0x20,\r
+ NUP = 0x40,\r
+ DisplayOrientation = 0x80,\r
+ Copies = 0x100,\r
+ DefaultSource = 0x200,\r
+ PrintQuality = 0x400,\r
+ Color = 0x800,\r
+ Duplex = 0x1000,\r
+ YResolution = 0x2000,\r
+ TTOption = 0x4000,\r
+ Collate = 0x8000,\r
+ FormName = 0x10000,\r
+ LogPixels = 0x20000,\r
+ BitsPerPixel = 0x40000,\r
+ PelsWidth = 0x80000,\r
+ PelsHeight = 0x100000,\r
+ DisplayFlags = 0x200000,\r
+ DisplayFrequency = 0x400000,\r
+ ICMMethod = 0x800000,\r
+ ICMIntent = 0x1000000,\r
+ MediaType = 0x2000000,\r
+ DitherType = 0x4000000,\r
+ PanningWidth = 0x8000000,\r
+ PanningHeight = 0x10000000,\r
+ DisplayFixedOutput = 0x20000000\r
+ }\r
+\r
+ public enum CDS\r
+ {\r
+ Dynamic = 0,\r
+ UpdateRegistry = 1,\r
+ Test = 2,\r
+ FullScreen = 4,\r
+ Global = 8,\r
+ SetPrimary = 10,\r
+ VideoParameters = 20\r
+ }\r
+\r
+ public enum DisplayFixedOutput\r
+ {\r
+ Default = 0,\r
+ Stretch,\r
+ Center\r
+ }\r
+\r
+ #endregion\r
+\r
+ public struct POINTL\r
+ {\r
+ public int x;\r
+ public int y;\r
+ }\r
+\r
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]\r
+ public struct DEVMODE\r
+ {\r
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]\r
+ public string dmDeviceName;\r
+ public short dmSpecVersion;\r
+ public short dmDriverVersion;\r
+ public short dmSize;\r
+ public short dmDriverExtra;\r
+ public DM dmFields;\r
+ //short dmOrientation;\r
+ //short dmPaperSize;\r
+ //short dmPaperLength;\r
+ //short dmPaperWidth;\r
+ //short dmScale;\r
+ //short dmCopies;\r
+ //short dmDefaultSource;\r
+ //short dmPrintQuality;\r
+ public POINTL dmPosition;\r
+ public int dmDisplayOrientation;\r
+ public int dmDisplayFixedOutput;\r
+ short dmColor;\r
+ short dmDuplex;\r
+ short dmYResolution;\r
+ short dmTTOption;\r
+ short dmCollate;\r
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]\r
+ public string dmFormName;\r
+ public short dmLogPixels;\r
+ public int dmBitsPerPel;\r
+ public int dmPelsWidth;\r
+ public int dmPelsHeight;\r
+ public int dmDisplayFlags;\r
+ public int dmDisplayFrequency;\r
+ public int dmICMMethod;\r
+ public int dmICMIntent;\r
+ public int dmMediaType;\r
+ public int dmDitherType;\r
+ public int dmReserved1;\r
+ public int dmReserved2;\r
+ public int dmPanningWidth;\r
+ public int dmPanningHeight;\r
+ }\r
+\r
+ [StructLayout(LayoutKind.Sequential)]\r
+ public struct RECT\r
+ {\r
+ public int Left;\r
+ public int Top;\r
+ public int Right;\r
+ public int Bottom;\r
+ }\r
+\r
+ public static class NativeMethods\r
+ {\r
+ #region Methods\r
+\r
+ [DllImport("ntdll.dll")]\r
+ public static extern NT_STATUS NtQuerySystemInformation(\r
+ [In] SYSTEM_INFORMATION_CLASS SystemInformationClass,\r
+ [In] IntPtr SystemInformation,\r
+ [In] int SystemInformationLength,\r
+ [Out] out int ReturnLength);\r
+\r
+ [DllImport("ntdll.dll")]\r
+ public static extern NT_STATUS NtQueryObject(\r
+ [In] IntPtr Handle,\r
+ [In] OBJECT_INFORMATION_CLASS ObjectInformationClass,\r
+ [In] IntPtr ObjectInformation,\r
+ [In] int ObjectInformationLength,\r
+ [Out] out int ReturnLength);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern SafeProcessHandle OpenProcess(\r
+ [In] ProcessAccessRights dwDesiredAccess,\r
+ [In, MarshalAs(UnmanagedType.Bool)] bool bInheritHandle,\r
+ [In] int dwProcessId);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool DuplicateHandle(\r
+ [In] IntPtr hSourceProcessHandle,\r
+ [In] IntPtr hSourceHandle,\r
+ [In] IntPtr hTargetProcessHandle,\r
+ [Out] out SafeObjectHandle lpTargetHandle,\r
+ [In] int dwDesiredAccess,\r
+ [In, MarshalAs(UnmanagedType.Bool)] bool bInheritHandle,\r
+ [In] DuplicateHandleOptions dwOptions);\r
+\r
+ [DllImport("kernel32.dll")]\r
+ public static extern IntPtr GetCurrentProcess();\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int GetProcessId(\r
+ [In] IntPtr Process);\r
+\r
+ [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]\r
+ public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);\r
+\r
+ [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool CloseHandle(\r
+ [In] IntPtr hObject);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int QueryDosDevice(\r
+ [In] string lpDeviceName,\r
+ [Out] StringBuilder lpTargetPath,\r
+ [In] int ucchMax);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern IntPtr FindFirstVolume(\r
+ [Out] StringBuilder lpszVolumeName,\r
+ [In] int cchBufferLength);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int FindNextVolume(\r
+ [In]IntPtr hFindVolume,\r
+ [Out] StringBuilder lpszVolumeName,\r
+ [In] int cchBufferLength);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int FindVolumeClose(\r
+ [In]IntPtr hFindVolume);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern IntPtr FindFirstVolumeMountPoint(\r
+ [In] string lpszRootPathName,\r
+ [Out] StringBuilder lpszVolumeMountPoint,\r
+ [In] int cchBufferLength);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int FindVolumeMountPointClose(\r
+ [In] IntPtr hFindVolumeMountPoint);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int GetVolumePathName(\r
+ [In] string lpszFileName,\r
+ [Out] StringBuilder lpszVolumePathName,\r
+ [In] int cchBufferLength);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern int GetVolumePathNamesForVolumeName(\r
+ [In] string lpszVolumeName,\r
+ [Out] StringBuilder lpszVolumePathNames,\r
+ [In] int cchBufferLength,\r
+ [Out] out int lpcchReturnLength);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]\r
+ public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);\r
+\r
+ [DllImport("kernel32.dll")]\r
+ public static extern bool SetPriorityClass(IntPtr hProcess, uint dwPriorityClass);\r
+\r
+ //SafeProcessHandle\r
+ [DllImport("kernel32.dll")]\r
+ public static extern bool SetPriorityClass(SafeProcessHandle hProcess, uint dwPriorityClass);\r
+\r
+ [DllImport("advapi32.dll", SetLastError = true)]\r
+ public static extern int RegOpenKeyEx(IntPtr hKey, string subKey, uint options, int samDesired, out IntPtr phkResult);\r
+\r
+ [DllImport("advapi32.dll", SetLastError = true)]\r
+ public static extern int RegOpenKeyEx(IntPtr hKey, string subKey, uint options, KeyAccess samDesired, out IntPtr phkResult);\r
+\r
+ [DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint = "RegQueryValueExW", SetLastError = true)]\r
+ public static extern int RegQueryValueEx(\r
+ IntPtr hKey,\r
+ string lpValueName,\r
+ IntPtr lpReserved,\r
+ out RegValueTypes lpType,\r
+ byte[] lpData,\r
+ ref uint lpcbData);\r
+\r
+ [DllImport("advapi32.dll", SetLastError = true)]\r
+ public static extern int RegCloseKey(IntPtr hKey);\r
+\r
+ [DllImport("kernel32.dll")]\r
+ public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName);\r
+\r
+ [DllImport("kernel32.dll")]\r
+ public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume);\r
+\r
+ [DllImport("kernel32", SetLastError = true, ExactSpelling = true)]\r
+ public static extern int WaitForSingleObject(IntPtr handle, uint milliseconds);\r
+\r
+ [DllImport("wer.dll", CharSet = CharSet.Auto)]\r
+ public static extern void WerAddExcludedApplication(string AppName, bool AllUsers);\r
+\r
+ [DllImport("wer.dll", CharSet = CharSet.Auto)]\r
+ public static extern void WerRemoveExcludedApplication(string AppName, bool AllUsers);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto)]\r
+ public static extern int WerRegisterFile(string pwzFile, int regFileType, int dwFlags);\r
+\r
+ [DllImport("advapi32.dll", SetLastError = true)]\r
+ public static extern int GetSecurityInfo(\r
+ IntPtr handle,\r
+ SE_OBJECT_TYPE ObjectType,\r
+ SECURITY_INFORMATION SecurityInfo,\r
+ out IntPtr pSidOwner,\r
+ out IntPtr pSidGroup,\r
+ out IntPtr pDacl,\r
+ out IntPtr pSacl,\r
+ out IntPtr pSecurityDescriptor);\r
+\r
+ [DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)]\r
+ public static extern bool ConvertSidToStringSid(\r
+ IntPtr sid,\r
+ out IntPtr sidString);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern IntPtr LocalFree(\r
+ IntPtr handle\r
+ );\r
+\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]\r
+ public static extern IntPtr SendMessage(IntPtr hWnd, WM Msg, IntPtr wParam, IntPtr lParam);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool SetDllDirectory(string lpPathName);\r
+\r
+ [DllImport("user32.dll", SetLastError = true)]\r
+ public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);\r
+\r
+ [DllImport("user32.dll", SetLastError = true)]\r
+ public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, IntPtr windowTitle);\r
+\r
+ [DllImport("user32.dll")]\r
+ public static extern int GetDlgCtrlID(IntPtr hwndCtl);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError=true)]\r
+ public static extern IntPtr LoadLibrary(string lpFileName);\r
+\r
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto)]\r
+ public static extern bool FreeLibrary(IntPtr hModule);\r
+\r
+ [DllImport("kernel32.dll", SetLastError = true)]\r
+ public static extern bool GetProcessAffinityMask(IntPtr hProcess, out UIntPtr lpProcessAffinityMask, out UIntPtr lpSystemAffinityMask);\r
+\r
+ [DllImport("kernel32.dll")]\r
+ public static extern bool SetProcessAffinityMask(IntPtr hProcess, UIntPtr dwProcessAffinityMask);\r
+\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]\r
+ public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]\r
+ public static extern int ChangeDisplaySettings(ref DEVMODE devMode, CDS flags);\r
+ [DllImport("user32.dll", CharSet = CharSet.Auto)]\r
+ public static extern int ChangeDisplaySettings(IntPtr devMode, CDS flags);\r
+\r
+ public static IntPtr MakeParam(int loWord, int hiWord)\r
+ {\r
+ return new IntPtr((loWord & 0xFFFF) + ((hiWord & 0xFFFF)<< 16));\r
+ }\r
+\r
+ [DllImport("user32.dll")]\r
+ public static extern bool SetProcessDPIAware();\r
+\r
+ [DllImport("user32.dll")]\r
+ [return: MarshalAs(UnmanagedType.Bool)]\r
+ public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);\r
+\r
+ #endregion\r
+\r
+ #region Constants\r
+\r
+ public const int WerRegFileTypeOther = 2;\r
+ public const int WER_FILE_ANONYMOUS_DATA = 2;\r
+\r
+ public const uint INFINITE = 0xFFFFFFFF;\r
+\r
+ //public const int KEY_QUERY_VALUE = 0x0001;\r
+ //public const int KEY_NOTIFY = 0x0010;\r
+ public const int STANDARD_RIGHTS_READ = 0x00020000;\r
+ public const int STANDARD_RIGHTS_WRITE = 0x00020000;\r
+\r
+ public static readonly IntPtr HKEY_CLASSES_ROOT = new IntPtr(unchecked((int)0x80000000));\r
+ public static readonly IntPtr HKEY_CURRENT_USER = new IntPtr(unchecked((int)0x80000001));\r
+ public static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(unchecked((int)0x80000002));\r
+ public static readonly IntPtr HKEY_USERS = new IntPtr(unchecked((int)0x80000003));\r
+ public static readonly IntPtr HKEY_PERFORMANCE_DATA = new IntPtr(unchecked((int)0x80000004));\r
+ public static readonly IntPtr HKEY_CURRENT_CONFIG = new IntPtr(unchecked((int)0x80000005));\r
+ public static readonly IntPtr HKEY_DYN_DATA = new IntPtr(unchecked((int)0x80000006));\r
+\r
+ public const uint IDLE_PRIORITY_CLASS = 0x00000040;\r
+ public const uint PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000;\r
+ public const uint PROCESS_MODE_BACKGROUND_END = 0x00200000;\r
+\r
+ public const int ENUM_CURRENT_SETTINGS = -1;\r
+ public const int ENUM_REGISTRY_SETTINGS = -2;\r
+\r
+ public const int CDS_UPDATEREGISTRY = 0x01;\r
+ public const int CDS_TEST = 0x02;\r
+ public const int DISP_CHANGE_SUCCESSFUL = 0;\r
+ public const int DISP_CHANGE_RESTART = 1;\r
+ public const int DISP_CHANGE_FAILED = -1;\r
+ public const int DM_INTERLACED = 0x00000002; \r
+\r
+ #endregion\r
+\r
+ \r
+ }\r
+}\r
--- /dev/null
+\r
+using System.Windows.Forms;\r
+\r
+namespace DxPlay {\r
+ partial class PlayerForm : Form {\r
+ private Panel panelVideo;\r
+ private Button btnPlay;\r
+ private Button btnPause;\r
+ private Panel panel2;\r
+ private TextBox textCurrentTC;\r
+ private Button btnStop;\r
+ private TextBox txtStartTC;\r
+ private TextBox txtEndTC;\r
+ private Panel panel3;\r
+ private Label label2;\r
+ private Label label1;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ protected override void Dispose(bool disposing) {\r
+ // Make sure to release the DxPlay object to avoid hanging\r
+ if (m_play != null) {\r
+ m_play.Dispose();\r
+ }\r
+ if (disposing) {\r
+ if (components != null) {\r
+ components.Dispose();\r
+ }\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ this.panelVideo = new System.Windows.Forms.Panel();\r
+ this.panel2 = new System.Windows.Forms.Panel();\r
+ this.btnStop = new System.Windows.Forms.Button();\r
+ this.btnPlay = new System.Windows.Forms.Button();\r
+ this.btnPause = new System.Windows.Forms.Button();\r
+ this.textCurrentTC = new System.Windows.Forms.TextBox();\r
+ this.txtStartTC = new System.Windows.Forms.TextBox();\r
+ this.txtEndTC = new System.Windows.Forms.TextBox();\r
+ this.panel3 = new System.Windows.Forms.Panel();\r
+ this.labelStatus = new System.Windows.Forms.Label();\r
+ this.label2 = new System.Windows.Forms.Label();\r
+ this.label1 = new System.Windows.Forms.Label();\r
+ this.trackBar1 = new DxPlay.ColorSlider();\r
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();\r
+ this.panelPlayer = new System.Windows.Forms.Panel();\r
+ this.dgSegments = new System.Windows.Forms.DataGridView();\r
+ this.bsSegments = new System.Windows.Forms.BindingSource(this.components);\r
+ this.menuButtonSegmentActions = new DxPlay.MenuButton();\r
+ this.ctxmSegmentActions = new System.Windows.Forms.ContextMenuStrip(this.components);\r
+ this.defineOneSegmentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+ this.splitSegmentAtCurrentPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
+ this.panel2.SuspendLayout();\r
+ this.panel3.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\r
+ this.splitContainer1.Panel1.SuspendLayout();\r
+ this.splitContainer1.Panel2.SuspendLayout();\r
+ this.splitContainer1.SuspendLayout();\r
+ this.panelPlayer.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).BeginInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).BeginInit();\r
+ this.ctxmSegmentActions.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // panelVideo\r
+ // \r
+ this.panelVideo.BackColor = System.Drawing.Color.Black;\r
+ this.panelVideo.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.panelVideo.Location = new System.Drawing.Point(0, 0);\r
+ this.panelVideo.Name = "panelVideo";\r
+ this.panelVideo.Size = new System.Drawing.Size(675, 447);\r
+ this.panelVideo.TabIndex = 10;\r
+ this.panelVideo.TabStop = true;\r
+ this.panelVideo.SizeChanged += new System.EventHandler(this.panel1_SizeChanged);\r
+ this.panelVideo.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);\r
+ // \r
+ // panel2\r
+ // \r
+ this.panel2.BackColor = System.Drawing.SystemColors.Control;\r
+ this.panel2.Controls.Add(this.btnStop);\r
+ this.panel2.Controls.Add(this.btnPlay);\r
+ this.panel2.Controls.Add(this.btnPause);\r
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.panel2.Location = new System.Drawing.Point(0, 510);\r
+ this.panel2.Name = "panel2";\r
+ this.panel2.Size = new System.Drawing.Size(675, 34);\r
+ this.panel2.TabIndex = 14;\r
+ // \r
+ // btnStop\r
+ // \r
+ this.btnStop.Image = global::DxPlay.Properties.Resources.Stop;\r
+ this.btnStop.Location = new System.Drawing.Point(66, 4);\r
+ this.btnStop.Name = "btnStop";\r
+ this.btnStop.Size = new System.Drawing.Size(61, 25);\r
+ this.btnStop.TabIndex = 16;\r
+ this.btnStop.Text = "Stop";\r
+ this.btnStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.btnStop.Click += new System.EventHandler(this.btnStop_Click);\r
+ // \r
+ // btnPlay\r
+ // \r
+ this.btnPlay.Image = global::DxPlay.Properties.Resources.Play;\r
+ this.btnPlay.Location = new System.Drawing.Point(3, 4);\r
+ this.btnPlay.Name = "btnPlay";\r
+ this.btnPlay.Size = new System.Drawing.Size(61, 25);\r
+ this.btnPlay.TabIndex = 1;\r
+ this.btnPlay.Text = "Play";\r
+ this.btnPlay.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click);\r
+ // \r
+ // btnPause\r
+ // \r
+ this.btnPause.Image = global::DxPlay.Properties.Resources.Pause;\r
+ this.btnPause.Location = new System.Drawing.Point(129, 4);\r
+ this.btnPause.Name = "btnPause";\r
+ this.btnPause.Size = new System.Drawing.Size(61, 25);\r
+ this.btnPause.TabIndex = 11;\r
+ this.btnPause.Text = "Pause";\r
+ this.btnPause.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r
+ this.btnPause.Click += new System.EventHandler(this.btnPause_Click);\r
+ // \r
+ // textCurrentTC\r
+ // \r
+ this.textCurrentTC.Anchor = System.Windows.Forms.AnchorStyles.Top;\r
+ this.textCurrentTC.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.textCurrentTC.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.textCurrentTC.Location = new System.Drawing.Point(284, 13);\r
+ this.textCurrentTC.Name = "textCurrentTC";\r
+ this.textCurrentTC.ReadOnly = true;\r
+ this.textCurrentTC.Size = new System.Drawing.Size(108, 27);\r
+ this.textCurrentTC.TabIndex = 15;\r
+ this.textCurrentTC.Text = "00:00:00.00";\r
+ // \r
+ // txtStartTC\r
+ // \r
+ this.txtStartTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r
+ this.txtStartTC.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.txtStartTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.txtStartTC.ForeColor = System.Drawing.SystemColors.WindowText;\r
+ this.txtStartTC.Location = new System.Drawing.Point(6, 21);\r
+ this.txtStartTC.Name = "txtStartTC";\r
+ this.txtStartTC.ReadOnly = true;\r
+ this.txtStartTC.Size = new System.Drawing.Size(66, 17);\r
+ this.txtStartTC.TabIndex = 16;\r
+ this.txtStartTC.Text = "00:00:00.00";\r
+ // \r
+ // txtEndTC\r
+ // \r
+ this.txtEndTC.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.txtEndTC.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.txtEndTC.Font = new System.Drawing.Font("Calibri", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.txtEndTC.ForeColor = System.Drawing.SystemColors.WindowText;\r
+ this.txtEndTC.Location = new System.Drawing.Point(603, 21);\r
+ this.txtEndTC.Name = "txtEndTC";\r
+ this.txtEndTC.ReadOnly = true;\r
+ this.txtEndTC.Size = new System.Drawing.Size(65, 17);\r
+ this.txtEndTC.TabIndex = 17;\r
+ this.txtEndTC.Text = "00:00:00.00";\r
+ // \r
+ // panel3\r
+ // \r
+ this.panel3.Controls.Add(this.labelStatus);\r
+ this.panel3.Controls.Add(this.label2);\r
+ this.panel3.Controls.Add(this.label1);\r
+ this.panel3.Controls.Add(this.txtStartTC);\r
+ this.panel3.Controls.Add(this.txtEndTC);\r
+ this.panel3.Controls.Add(this.textCurrentTC);\r
+ this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.panel3.Location = new System.Drawing.Point(0, 447);\r
+ this.panel3.Name = "panel3";\r
+ this.panel3.Size = new System.Drawing.Size(675, 41);\r
+ this.panel3.TabIndex = 19;\r
+ // \r
+ // labelStatus\r
+ // \r
+ this.labelStatus.Anchor = System.Windows.Forms.AnchorStyles.Top;\r
+ this.labelStatus.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.labelStatus.Location = new System.Drawing.Point(281, 5);\r
+ this.labelStatus.Name = "labelStatus";\r
+ this.labelStatus.Size = new System.Drawing.Size(111, 13);\r
+ this.labelStatus.TabIndex = 20;\r
+ this.labelStatus.Text = "NO INPUT";\r
+ this.labelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\r
+ // \r
+ // label2\r
+ // \r
+ this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.label2.AutoSize = true;\r
+ this.label2.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.label2.Location = new System.Drawing.Point(618, 5);\r
+ this.label2.Name = "label2";\r
+ this.label2.Size = new System.Drawing.Size(54, 13);\r
+ this.label2.TabIndex = 19;\r
+ this.label2.Text = "DURATION";\r
+ // \r
+ // label1\r
+ // \r
+ this.label1.AutoSize = true;\r
+ this.label1.Font = new System.Drawing.Font("Calibri", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.label1.Location = new System.Drawing.Point(4, 6);\r
+ this.label1.Name = "label1";\r
+ this.label1.Size = new System.Drawing.Size(33, 13);\r
+ this.label1.TabIndex = 18;\r
+ this.label1.Text = "START";\r
+ // \r
+ // trackBar1\r
+ // \r
+ this.trackBar1.BackColor = System.Drawing.Color.Transparent;\r
+ this.trackBar1.BarInnerColor = System.Drawing.Color.Transparent;\r
+ this.trackBar1.BarOuterColor = System.Drawing.Color.Black;\r
+ this.trackBar1.BarPenColor = System.Drawing.Color.Black;\r
+ this.trackBar1.BorderRoundRectSize = new System.Drawing.Size(8, 8);\r
+ this.trackBar1.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.trackBar1.ElapsedInnerColor = System.Drawing.Color.Black;\r
+ this.trackBar1.ElapsedOuterColor = System.Drawing.Color.DarkGray;\r
+ this.trackBar1.LargeChange = ((uint)(0u));\r
+ this.trackBar1.Location = new System.Drawing.Point(0, 488);\r
+ this.trackBar1.Maximum = 1;\r
+ this.trackBar1.Name = "trackBar1";\r
+ this.trackBar1.Size = new System.Drawing.Size(675, 22);\r
+ this.trackBar1.SmallChange = ((uint)(1u));\r
+ this.trackBar1.TabIndex = 18;\r
+ this.trackBar1.Text = "colorSlider1";\r
+ this.trackBar1.ThumbInnerColor = System.Drawing.Color.Black;\r
+ this.trackBar1.ThumbOuterColor = System.Drawing.Color.Silver;\r
+ this.trackBar1.ThumbPenColor = System.Drawing.Color.Black;\r
+ this.trackBar1.ThumbRoundRectSize = new System.Drawing.Size(8, 8);\r
+ this.trackBar1.ThumbSize = 10;\r
+ this.trackBar1.Value = 0;\r
+ this.trackBar1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.trackBar1_MouseDown);\r
+ this.trackBar1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBar1_MouseUp);\r
+ // \r
+ // splitContainer1\r
+ // \r
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.splitContainer1.Location = new System.Drawing.Point(0, 0);\r
+ this.splitContainer1.Name = "splitContainer1";\r
+ // \r
+ // splitContainer1.Panel1\r
+ // \r
+ this.splitContainer1.Panel1.Controls.Add(this.panelPlayer);\r
+ // \r
+ // splitContainer1.Panel2\r
+ // \r
+ this.splitContainer1.Panel2.Controls.Add(this.dgSegments);\r
+ this.splitContainer1.Panel2.Controls.Add(this.menuButtonSegmentActions);\r
+ this.splitContainer1.Size = new System.Drawing.Size(936, 544);\r
+ this.splitContainer1.SplitterDistance = 675;\r
+ this.splitContainer1.TabIndex = 20;\r
+ // \r
+ // panelPlayer\r
+ // \r
+ this.panelPlayer.Controls.Add(this.panelVideo);\r
+ this.panelPlayer.Controls.Add(this.panel3);\r
+ this.panelPlayer.Controls.Add(this.trackBar1);\r
+ this.panelPlayer.Controls.Add(this.panel2);\r
+ this.panelPlayer.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.panelPlayer.Location = new System.Drawing.Point(0, 0);\r
+ this.panelPlayer.Name = "panelPlayer";\r
+ this.panelPlayer.Size = new System.Drawing.Size(675, 544);\r
+ this.panelPlayer.TabIndex = 0;\r
+ // \r
+ // dgSegments\r
+ // \r
+ this.dgSegments.AllowUserToAddRows = false;\r
+ this.dgSegments.AllowUserToOrderColumns = true;\r
+ this.dgSegments.AllowUserToResizeRows = false;\r
+ this.dgSegments.AutoGenerateColumns = false;\r
+ this.dgSegments.BackgroundColor = System.Drawing.Color.White;\r
+ this.dgSegments.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.dgSegments.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
+ this.dgSegments.DataSource = this.bsSegments;\r
+ dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;\r
+ dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+ dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dgSegments.DefaultCellStyle = dataGridViewCellStyle2;\r
+ this.dgSegments.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.dgSegments.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnF2;\r
+ this.dgSegments.Location = new System.Drawing.Point(0, 23);\r
+ this.dgSegments.MultiSelect = false;\r
+ this.dgSegments.Name = "dgSegments";\r
+ this.dgSegments.RowHeadersVisible = false;\r
+ this.dgSegments.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+ this.dgSegments.Size = new System.Drawing.Size(257, 521);\r
+ this.dgSegments.TabIndex = 1;\r
+ // \r
+ // menuButtonSegmentActions\r
+ // \r
+ this.menuButtonSegmentActions.BackColor = System.Drawing.Color.White;\r
+ this.menuButtonSegmentActions.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.menuButtonSegmentActions.Location = new System.Drawing.Point(0, 0);\r
+ this.menuButtonSegmentActions.Menu = this.ctxmSegmentActions;\r
+ this.menuButtonSegmentActions.Name = "menuButtonSegmentActions";\r
+ this.menuButtonSegmentActions.Size = new System.Drawing.Size(257, 23);\r
+ this.menuButtonSegmentActions.TabIndex = 0;\r
+ this.menuButtonSegmentActions.Text = "Segment actions";\r
+ this.menuButtonSegmentActions.UseVisualStyleBackColor = false;\r
+ // \r
+ // ctxmSegmentActions\r
+ // \r
+ this.ctxmSegmentActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+ this.defineOneSegmentToolStripMenuItem,\r
+ this.splitSegmentAtCurrentPositionToolStripMenuItem});\r
+ this.ctxmSegmentActions.Name = "ctxmSegmentActions";\r
+ this.ctxmSegmentActions.Size = new System.Drawing.Size(247, 48);\r
+ // \r
+ // defineOneSegmentToolStripMenuItem\r
+ // \r
+ this.defineOneSegmentToolStripMenuItem.Name = "defineOneSegmentToolStripMenuItem";\r
+ this.defineOneSegmentToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
+ this.defineOneSegmentToolStripMenuItem.Text = "Define one segment for movie";\r
+ this.defineOneSegmentToolStripMenuItem.Click += new System.EventHandler(this.OnDefineOneSegmentClick);\r
+ // \r
+ // splitSegmentAtCurrentPositionToolStripMenuItem\r
+ // \r
+ this.splitSegmentAtCurrentPositionToolStripMenuItem.Name = "splitSegmentAtCurrentPositionToolStripMenuItem";\r
+ this.splitSegmentAtCurrentPositionToolStripMenuItem.Size = new System.Drawing.Size(246, 22);\r
+ this.splitSegmentAtCurrentPositionToolStripMenuItem.Text = "Split segment at current position";\r
+ this.splitSegmentAtCurrentPositionToolStripMenuItem.Click += new System.EventHandler(this.OnSplitSegmentAtCurrentPositionClick);\r
+ // \r
+ // PlayerForm\r
+ // \r
+ this.AllowDrop = true;\r
+ this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);\r
+ this.ClientSize = new System.Drawing.Size(936, 544);\r
+ this.Controls.Add(this.splitContainer1);\r
+ this.KeyPreview = true;\r
+ this.MinimumSize = new System.Drawing.Size(640, 480);\r
+ this.Name = "PlayerForm";\r
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\r
+ this.Text = "MediaCUBE Video Player";\r
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PlayerForm_FormClosing);\r
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.PlayerForm_FormClosed);\r
+ this.Load += new System.EventHandler(this.PlayerForm_Load);\r
+ this.Shown += new System.EventHandler(this.PlayerForm_Shown);\r
+ this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);\r
+ this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);\r
+ this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PlayerForm_KeyDown);\r
+ this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.PlayerForm_PreviewKeyDown);\r
+ this.panel2.ResumeLayout(false);\r
+ this.panel3.ResumeLayout(false);\r
+ this.panel3.PerformLayout();\r
+ this.splitContainer1.Panel1.ResumeLayout(false);\r
+ this.splitContainer1.Panel2.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\r
+ this.splitContainer1.ResumeLayout(false);\r
+ this.panelPlayer.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.dgSegments)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bsSegments)).EndInit();\r
+ this.ctxmSegmentActions.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+ #endregion\r
+\r
+ private ColorSlider trackBar1;\r
+ private Label labelStatus;\r
+ private SplitContainer splitContainer1;\r
+ private Panel panelPlayer;\r
+ private MenuButton menuButtonSegmentActions;\r
+ private ContextMenuStrip ctxmSegmentActions;\r
+ private System.ComponentModel.IContainer components;\r
+ private ToolStripMenuItem defineOneSegmentToolStripMenuItem;\r
+ private ToolStripMenuItem splitSegmentAtCurrentPositionToolStripMenuItem;\r
+ private DataGridView dgSegments;\r
+ private BindingSource bsSegments;\r
+ }\r
+}\r
+\r
--- /dev/null
+/****************************************************************************\r
+While the underlying libraries are covered by LGPL, this sample is released \r
+as public domain. It is distributed in the hope that it will be useful, but \r
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY \r
+or FITNESS FOR A PARTICULAR PURPOSE. \r
+*****************************************************************************/\r
+\r
+using System;\r
+using System.Windows.Forms;\r
+using System.Runtime.InteropServices;\r
+using System.Diagnostics;\r
+using static DxPlay.DxPlayer;\r
+using JR.Utils.GUI.Forms;\r
+using System.IO;\r
+using System.Linq;\r
+using System.ComponentModel;\r
+using System.Collections.Generic;\r
+\r
+namespace DxPlay {\r
+\r
+ public partial class PlayerForm : Form {\r
+\r
+ private BindingList<MovieSegment> segments = new BindingList<MovieSegment>();\r
+ private DateTime lastClick = DateTime.Now;\r
+ private string selectedFile;\r
+ private volatile bool trackBarAtUser;\r
+ private DxPlayer m_play = null;\r
+ private MediaDescription m_mediaDescription = null;\r
+ public bool AutoStart;\r
+\r
+ public bool SegmentEditor { get; set; }\r
+\r
+ public PlayerForm() {\r
+ InitializeComponent();\r
+ }\r
+\r
+ public PlayerForm(ref BindingList<MovieSegment> segments) {\r
+ this.segments = segments;\r
+ InitializeComponent();\r
+ }\r
+\r
+ private void cueue() {\r
+ m_play = null;\r
+ try {\r
+ m_mediaDescription = MediaDetector.GetDescription(selectedFile);\r
+\r
+ trackBar1.Value = 0;\r
+ trackBar1.Minimum = 0;\r
+ trackBar1.Maximum = m_mediaDescription.Duration.Frames + 1;\r
+ m_play = new DxPlayer(panelVideo, m_mediaDescription);\r
+ txtStartTC.Text = m_mediaDescription.FirstFrame.ToString();\r
+ txtEndTC.Text = m_mediaDescription.Duration.ToString();\r
+ }\r
+ catch (COMException ce) {\r
+ MessageBox.Show("Failed to open file: " + ce.Message, "Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+ }\r
+\r
+ private void playEvent() {\r
+ if (this.Disposing || this.IsDisposed || m_play == null)\r
+ return;\r
+ //Debug.WriteLine("Event " + m_play.State);\r
+ //switch (m_play.State) {\r
+ // case GraphState.Paused: {\r
+ // break;\r
+ // }\r
+ // case GraphState.Stopped: {\r
+ // break;\r
+ // }\r
+ // case GraphState.Playing: {\r
+ // break;\r
+ // }\r
+ //}\r
+ BeginInvoke((Action)(() => {\r
+ if (Disposing || IsDisposed || m_play == null)\r
+ return;\r
+ if (!trackBarAtUser)\r
+ trackBar1.Value = m_play.CurrentTC.ZeroBasedFrames;\r
+ textCurrentTC.Text = m_play.CurrentTC.ToString();\r
+ labelStatus.Text = m_play.State.ToString().ToUpper();\r
+ }));\r
+ }\r
+\r
+\r
+ private void Form1_DragEnter(object sender, DragEventArgs e) {\r
+ if (e.Data.GetDataPresent(DataFormats.FileDrop)) {\r
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);\r
+ if (files.Length == 1)\r
+ e.Effect = DragDropEffects.Copy;\r
+ }\r
+ }\r
+\r
+ public void Open(FileInfo fileInfo) {\r
+ this.Text = fileInfo.Name;\r
+ selectedFile = fileInfo.FullName;\r
+ if (m_play != null && selectedFile != m_mediaDescription.FileName) {\r
+ m_play.Stop();\r
+ m_play.Dispose();\r
+ m_play = null;\r
+ }\r
+ cueue();\r
+ BringToFront();\r
+ Activate();\r
+ }\r
+\r
+ private void Form1_DragDrop(object sender, DragEventArgs e) {\r
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);\r
+ FileInfo fileInfo = new FileInfo(files[0]);\r
+ Open(fileInfo);\r
+ ShowFirstFrame();\r
+ }\r
+\r
+ private void panel1_MouseDown(object sender, MouseEventArgs e) {\r
+ if (e.Button == MouseButtons.Left) {\r
+ DateTime currentClick = DateTime.Now;\r
+ if ((currentClick - lastClick).TotalMilliseconds < 300) {\r
+ m_play.ToggleFullscreen();\r
+ Debug.WriteLine("Fullscreen");\r
+ } else\r
+ lastClick = currentClick;\r
+ }\r
+\r
+ if (e.Button == MouseButtons.Right) {\r
+ FlexibleMessageBox.Show(m_play.MediaDescription.Description);\r
+ }\r
+ }\r
+\r
+ private void panel1_SizeChanged(object sender, EventArgs e) {\r
+ if (m_play != null)\r
+ m_play.UpdateVideoWindow(panelVideo);\r
+ }\r
+\r
+ private void trackBar1_MouseDown(object sender, MouseEventArgs e) {\r
+ trackBarAtUser = true;\r
+ lastClick = DateTime.Now;\r
+ }\r
+\r
+ private void trackBar1_MouseUp(object sender, MouseEventArgs e) {\r
+ if (trackBarAtUser) {\r
+ trackBarAtUser = false;\r
+ /*\r
+ DateTime currentClick = DateTime.Now;\r
+ if ((currentClick - lastClick).TotalMilliseconds < 300) {\r
+ double absoluteMouse = (double)e.X / trackBar1.Width;\r
+ int seek = (int)Math.Round(trackBar1.Maximum * absoluteMouse);\r
+ m_play.Seek(seek);\r
+ } else {\r
+ if (m_play != null)\r
+ m_play.Seek(trackBar1.Value);\r
+ else\r
+ trackBar1.Value = 0;\r
+ }\r
+ */\r
+ if (m_play != null)\r
+ m_play.Seek(trackBar1.Value);\r
+ else\r
+ trackBar1.Value = 0;\r
+ }\r
+ }\r
+\r
+ private void btnPlay_Click(object sender, EventArgs e) {\r
+ if (m_play != null && m_play.State != GraphState.Playing)\r
+ m_play.Play();\r
+ }\r
+\r
+ private void btnStop_Click(object sender, EventArgs e) {\r
+ if (m_play != null && m_play.State != GraphState.Stopped) {\r
+ m_play.Stop();\r
+ }\r
+ }\r
+\r
+ private void btnPause_Click(object sender, EventArgs e) {\r
+ if (m_play != null && m_play.State != GraphState.Paused)\r
+ m_play.Pause();\r
+ }\r
+\r
+\r
+ private void PlayerForm_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {\r
+ if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Space || e.KeyCode == Keys.Escape) {\r
+ e.IsInputKey = true;\r
+ }\r
+ }\r
+\r
+ private void DisableHotKeysDefaults(Control.ControlCollection controls) {\r
+ foreach (Control control in controls) {\r
+ control.PreviewKeyDown += new PreviewKeyDownEventHandler(PlayerForm_PreviewKeyDown);\r
+ if (control.HasChildren)\r
+ DisableHotKeysDefaults(control.Controls);\r
+ }\r
+ }\r
+\r
+ private void PlayerForm_Load(object sender, EventArgs e) {\r
+ DisableHotKeysDefaults(this.Controls);\r
+ InterceptKeys.Start();\r
+ InterceptKeys.GlobalKeyEvent += HandleFullscreenHotKey;\r
+\r
+ bsSegments.DataSource = segments;\r
+ dgSegments.AutoGenerateColumns = true;\r
+\r
+ if (SegmentEditor) {\r
+ splitContainer1.Panel2Collapsed = false;\r
+ splitContainer1.Panel2.Show();\r
+ } else {\r
+ splitContainer1.Panel2Collapsed = true;\r
+ splitContainer1.Panel2.Hide();\r
+ }\r
+ }\r
+\r
+ private void PlayerForm_KeyDown(object sender, KeyEventArgs e) {\r
+ if (HandleHotKey(e.KeyCode)) {\r
+ e.Handled = true;\r
+ e.SuppressKeyPress = true;\r
+ }\r
+ }\r
+\r
+ private bool HandleFullscreenHotKey(Keys keyCode) {\r
+ if (m_play == null || !m_play.IsFullscreen())\r
+ return false;\r
+ bool result = false;\r
+ switch (keyCode) {\r
+ case Keys.Left:\r
+ case Keys.Right:\r
+ result = HandleHotKey(keyCode);\r
+ break;\r
+ case Keys.Escape:\r
+ if (m_play.IsFullscreen())\r
+ m_play.ToggleFullscreen();\r
+ result = true;\r
+ break;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private bool HandleHotKey(Keys keyCode) {\r
+ if (m_play == null)\r
+ return false;\r
+ bool result = false;\r
+ switch (keyCode) {\r
+ case Keys.Left:\r
+ if (ModifierKeys.HasFlag(Keys.Control)) {\r
+ if (m_play.CurrentTC.ZeroBasedFrames > 4) {\r
+ m_play.Pause();\r
+ m_play.Seek(m_play.CurrentTC.ZeroBasedFrames - 5);\r
+ }\r
+ } else {\r
+ if (m_play.CurrentTC.ZeroBasedFrames > 0) {\r
+ m_play.Pause();\r
+ m_play.Seek(m_play.CurrentTC.ZeroBasedFrames - 1);\r
+ }\r
+ }\r
+ result = true;\r
+ break;\r
+ case Keys.Right:\r
+ if (ModifierKeys.HasFlag(Keys.Control)) {\r
+ if (m_play.CurrentTC.ZeroBasedFrames + 5 <= m_mediaDescription.Duration.Frames) {\r
+ m_play.Pause();\r
+ m_play.Seek(m_play.CurrentTC.ZeroBasedFrames + 5);\r
+ }\r
+ } else {\r
+ if (m_play.CurrentTC.ZeroBasedFrames + 1 <= m_mediaDescription.Duration.Frames) {\r
+ m_play.Pause();\r
+ m_play.Seek(m_play.CurrentTC.ZeroBasedFrames + 1);\r
+ }\r
+ }\r
+ result = true;\r
+ break;\r
+ case Keys.Space:\r
+ if (m_play.State == GraphState.Playing)\r
+ m_play.Pause();\r
+ else\r
+ m_play.Play();\r
+ result = true;\r
+ break;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private void PlayerForm_FormClosing(object sender, FormClosingEventArgs e) {\r
+ if (m_play != null) {\r
+ m_play.Stop();\r
+ m_play.Dispose();\r
+ m_play = null;\r
+ }\r
+ }\r
+\r
+ private void PlayerForm_Shown(object sender, EventArgs e) {\r
+ if (m_play != null) {\r
+ m_play.PlayEvent += new DxPlayEvent(playEvent);\r
+ if (AutoStart)\r
+ m_play.Play();\r
+ else {\r
+ ShowFirstFrame();\r
+ }\r
+ }\r
+ }\r
+\r
+ private void ShowFirstFrame() {\r
+ m_play.Play();\r
+ m_play.Pause();\r
+ m_play.Seek(0);\r
+ }\r
+\r
+ private void PlayerForm_FormClosed(object sender, FormClosedEventArgs e) {\r
+ InterceptKeys.Stop();\r
+ }\r
+\r
+ private void OnDefineOneSegmentClick(object sender, EventArgs e) {\r
+ MovieSegment segment = new MovieSegment() {\r
+ TCIn = new Timecode(m_mediaDescription.FirstFrame),\r
+ TCOut = new Timecode(m_mediaDescription.FirstFrame, m_mediaDescription.Duration)\r
+ };\r
+ segments.Add(segment);\r
+ }\r
+\r
+ private void OnSplitSegmentAtCurrentPositionClick(object sender, EventArgs e) {\r
+\r
+ MovieSegment segment = segments.Where(s => m_play.CurrentTC.Frames > s.TCIn.Frames && m_play.CurrentTC.Frames < s.TCOut.Frames).FirstOrDefault();\r
+ if (segment == null)\r
+ return;\r
+ segments.Remove(segment);\r
+ MovieSegment lSegment = new MovieSegment() {\r
+ TCIn = segment.TCIn,\r
+ TCOut = new Timecode(m_play.CurrentTC)\r
+ };\r
+ lSegment.TCOut.Set(m_play.CurrentTC.ZeroBasedFrames);\r
+ segments.Add(lSegment);\r
+\r
+ MovieSegment hSegment = new MovieSegment() {\r
+ TCIn = new Timecode(m_play.CurrentTC),\r
+ TCOut = segment.TCOut\r
+ };\r
+ hSegment.TCIn.Set(m_play.CurrentTC.ZeroBasedFrames + 1);\r
+ segments.Add(hSegment);\r
+\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="bsSegments.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>184, 17</value>\r
+ </metadata>\r
+ <metadata name="ctxmSegmentActions.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+using DxPlay;\r
+using System;\r
+using System.Diagnostics;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+ static class Program {\r
+ /// <summary>\r
+ /// The main entry point for the application.\r
+ /// </summary>\r
+ [STAThread]\r
+ static void Main() {\r
+ AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);\r
+ Application.EnableVisualStyles();\r
+ Application.SetCompatibleTextRenderingDefault(false);\r
+ Application.Run(new PlayerForm());\r
+ }\r
+\r
+ private static void MyHandler(object sender, UnhandledExceptionEventArgs e) {\r
+ Debug.WriteLine("Unhandled exception: " + e.ExceptionObject);\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+\r
+//\r
+// General Information about an assembly is controlled through the following \r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+//\r
+[assembly: AssemblyTitle("")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("")]\r
+[assembly: AssemblyCopyright("")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")] \r
+\r
+//\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version \r
+// Build Number\r
+// Revision\r
+//\r
+// You can specify all the values or you can default the Revision and Build Numbers \r
+// by using the '*' as shown below:\r
+\r
+[assembly: AssemblyVersion("1.0.*")]\r
+\r
+//\r
+// In order to sign your assembly you must specify a key to use. Refer to the \r
+// Microsoft .NET Framework documentation for more information on assembly signing.\r
+//\r
+// Use the attributes below to control which key is used for signing. \r
+//\r
+// Notes: \r
+// (*) If no key is specified, the assembly is not signed.\r
+// (*) KeyName refers to a key that has been installed in the Crypto Service\r
+// Provider (CSP) on your machine. KeyFile refers to a file which contains\r
+// a key.\r
+// (*) If the KeyFile and the KeyName values are both specified, the \r
+// following processing occurs:\r
+// (1) If the KeyName can be found in the CSP, that key is used.\r
+// (2) If the KeyName does not exist and the KeyFile does exist, the key \r
+// in the KeyFile is installed into the CSP and used.\r
+// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.\r
+// When specifying the KeyFile, the location of the KeyFile should be\r
+// relative to the project output directory which is\r
+// %Project Directory%\obj\<configuration>. For example, if your KeyFile is\r
+// located in the project directory, you would specify the AssemblyKeyFile \r
+// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]\r
+// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework\r
+// documentation for more information on this.\r
+//\r
+[assembly: AssemblyDelaySign(false)]\r
+[assembly: AssemblyKeyFile("")]\r
+[assembly: AssemblyKeyName("")]\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace DxPlay.Properties {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ public class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ public static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DxPlay.Properties.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ public static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap lgs {\r
+ get {\r
+ object obj = ResourceManager.GetObject("lgs", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap Pause {\r
+ get {\r
+ object obj = ResourceManager.GetObject("Pause", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap Play {\r
+ get {\r
+ object obj = ResourceManager.GetObject("Play", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ public static System.Drawing.Bitmap Stop {\r
+ get {\r
+ object obj = ResourceManager.GetObject("Stop", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
+ <data name="lgs" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\lgs.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="Pause" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\Pause.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="Play" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\Play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="Stop" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+using System;
+// ReSharper disable InconsistentNaming
+
+namespace DxPlay.SMTPETimeCode {
+ public enum FrameRate
+ {
+ /// <summary>
+ /// SMPTE 23.98frames/sec.
+ /// </summary>
+ fps23_98,
+ /// <summary>
+ /// SMPTE 24frames/sec.
+ /// </summary>
+ fps24,
+ /// <summary>
+ /// SMPTE 25frames/sec.
+ /// </summary>
+ fps25,
+ /// <summary>
+ /// SMPTE 29.97frames/sec.
+ /// </summary>
+ fps29_97,
+ /// <summary>
+ /// SMPTE 30frames/sec.
+ /// </summary>
+ fps30,
+ /// <summary>
+ /// SMPTE 50frames/sec.
+ /// </summary>
+ fps50,
+ /// <summary>
+ /// SMPTE 59.94frames/sec.
+ /// </summary>
+ fps59_94,
+ /// <summary>
+ /// SMPTE 60frames/sec.
+ /// </summary>
+ fps60,
+ /// <summary>
+ /// milliseconds
+ /// </summary>
+ msec
+ }
+}
--- /dev/null
+using System;
+
+namespace DxPlay.SMTPETimeCode {
+ internal static class Extensions
+ {
+ public static int ToInt(this FrameRate frameRate)
+ {
+ switch (frameRate)
+ {
+ case FrameRate.fps23_98:
+ case FrameRate.fps24:
+ return 24;
+ case FrameRate.fps25:
+ return 25;
+ case FrameRate.fps29_97:
+ case FrameRate.fps30:
+ return 30;
+ case FrameRate.fps50:
+ return 50;
+ case FrameRate.fps59_94:
+ case FrameRate.fps60:
+ return 60;
+ case FrameRate.msec:
+ return 1000;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(frameRate), frameRate, null);
+ }
+ }
+ }
+}
--- /dev/null
+using System;
+using System.Text.RegularExpressions;
+
+namespace DxPlay.SMTPETimeCode {
+ public class Timecode
+ {
+ public static Timecode FromFrames(int totalFrames, FrameRate frameRate, bool isDropFrame)
+ {
+ FrameRateSanityCheck(frameRate, isDropFrame);
+
+ var tc = new Timecode(frameRate, isDropFrame) {TotalFrames = totalFrames};
+ tc.UpdateByTotalFrames();
+ return tc;
+ }
+
+ private const string TimeCodePattern = @"^(?<hours>[0-2][0-9]):(?<minutes>[0-5][0-9]):(?<seconds>[0-5][0-9])[:|;|\.](?<frames>[0-9]{2,3})$";
+
+ public static Timecode FromString(string input, FrameRate frameRate, bool isDropFrame)
+ {
+ if (string.IsNullOrEmpty(input))
+ {
+ throw new ArgumentNullException(nameof(input));
+ }
+ FrameRateSanityCheck(frameRate, isDropFrame);
+
+ var tcRegex = new Regex(TimeCodePattern);
+ var match = tcRegex.Match(input);
+ if (!match.Success)
+ {
+ throw new ArgumentException("Input text was not in valid timecode format.", nameof(input));
+ }
+
+ var tc = new Timecode(frameRate, isDropFrame)
+ {
+ Hours = int.Parse(match.Groups["hours"].Value),
+ Minutes = int.Parse(match.Groups["minutes"].Value),
+ Seconds = int.Parse(match.Groups["seconds"].Value),
+ Frames = int.Parse(match.Groups["frames"].Value)
+ };
+ tc.UpdateTotalFrames();
+
+ return tc;
+ }
+
+ private static void FrameRateSanityCheck(FrameRate frameRate, bool isDropFrame)
+ {
+ if (isDropFrame && frameRate != FrameRate.fps29_97 && frameRate != FrameRate.fps59_94)
+ {
+ throw new ArgumentException("Dropframe is supported with 29.97 or 59.94 fps.", nameof(isDropFrame));
+ }
+ if (!Enum.IsDefined(typeof(FrameRate), frameRate))
+ throw new ArgumentOutOfRangeException(nameof(frameRate),
+ "Value should be defined in the FrameRate enum.");
+ }
+
+ private Timecode(FrameRate frameRate, bool isDropFrame)
+ {
+ this._isDropFrame = isDropFrame;
+ this._rawFrameRate = frameRate;
+ this._frameRate = frameRate.ToInt();
+ }
+
+ private readonly bool _isDropFrame;
+
+ private readonly FrameRate _rawFrameRate;
+
+ private readonly int _frameRate;
+
+ public int TotalFrames { get; private set; }
+
+ public int Hours { get; private set; }
+
+ public int Minutes { get; private set; }
+
+ public int Seconds { get; private set; }
+
+ public int Frames { get; private set; }
+
+ public Timecode AddHours(double hours)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Timecode AddMinutes(double minutes)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Timecode AddSeconds(double seconds)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Timecode AddFrames(uint frames)
+ {
+ throw new NotImplementedException();
+ }
+
+ public TimeSpan ToTimeSpan()
+ {
+ var tc = new Timecode(FrameRate.msec, false) {TotalFrames = this.TotalFrames};
+ return new TimeSpan(0, tc.Hours, tc.Minutes, tc.Seconds, tc.Frames);
+ }
+
+ public override string ToString()
+ {
+ var frameSeparator = this._isDropFrame ? ";" : ":";
+ return $"{this.Hours:D2}:{this.Minutes:D2}:{this.Seconds:D2}{frameSeparator}{this.Frames:D2}";
+ }
+
+ private void UpdateTotalFrames()
+ {
+ var frames = this.Hours * 3600;
+ frames += this.Minutes * 60;
+ frames += this.Seconds;
+ frames *= this._frameRate;
+ frames += this.Frames;
+ if (this._isDropFrame)
+ {
+ var totalMinutes = this.Hours * 60 + this.Minutes;
+ var dropFrames = this._rawFrameRate == FrameRate.fps29_97 ? 2 : 4;
+ frames -= dropFrames * (totalMinutes - totalMinutes / 10);
+ }
+ this.TotalFrames = frames;
+ }
+
+ private void UpdateByTotalFrames()
+ {
+ var frameCount = this.TotalFrames;
+ if (this._isDropFrame)
+ {
+ // 29.97 - 2, 59.94 - 4
+ var dropFrames = this._rawFrameRate == FrameRate.fps29_97 ? 2 : 4;
+ var dropInHours = 17982 * dropFrames / 2d;
+ var dropInMinutes = 1798 * dropFrames / 2d;
+ var h = (int)Math.Floor(this.TotalFrames / dropInHours);
+ var m = this.TotalFrames % dropInHours;
+ frameCount += 9 * dropFrames * h + dropFrames * (int)Math.Floor((m - dropFrames) / dropInMinutes);
+ }
+ this.Frames = frameCount % this._frameRate;
+ this.Seconds = (int) Math.Floor(frameCount / (double) this._frameRate) % 60;
+ this.Minutes = (int) Math.Floor(frameCount / (this._frameRate * 60d)) % 60;
+ this.Hours = (int)Math.Floor(frameCount / (this._frameRate * 60 * 60d)) % 24;
+ }
+ }
+}
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Security.Permissions;\r
+using System.Text;\r
+\r
+using Microsoft.Win32.SafeHandles;\r
+\r
+namespace DxPlay {\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public sealed class SafeObjectHandle : SafeHandleZeroOrMinusOneIsInvalid\r
+ {\r
+ private SafeObjectHandle()\r
+ : base(true)\r
+ { }\r
+\r
+ internal SafeObjectHandle(IntPtr preexistingHandle, bool ownsHandle)\r
+ : base(ownsHandle)\r
+ {\r
+ base.SetHandle(preexistingHandle);\r
+ }\r
+\r
+ protected override bool ReleaseHandle()\r
+ {\r
+ return NativeMethods.CloseHandle(base.handle);\r
+ }\r
+ }\r
+\r
+ [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]\r
+ public sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid\r
+ {\r
+ private SafeProcessHandle()\r
+ : base(true)\r
+ { }\r
+\r
+ internal SafeProcessHandle(IntPtr preexistingHandle, bool ownsHandle)\r
+ : base(ownsHandle)\r
+ {\r
+ base.SetHandle(preexistingHandle);\r
+ }\r
+\r
+ protected override bool ReleaseHandle()\r
+ {\r
+ return NativeMethods.CloseHandle(base.handle);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Diagnostics;\r
+\r
+namespace DxPlay {\r
+ public class Timecode {\r
+ private const int MEDIATIME_REFERENCE = 10000000;\r
+ internal float frameRate = 0;\r
+ internal int startFrame;\r
+ private int currentFrame;\r
+\r
+ public Timecode() : this("00:00:00:00", 25) {\r
+ \r
+ }\r
+\r
+ public Timecode(Timecode tc) {\r
+ startFrame = tc.startFrame;\r
+ frameRate = tc.frameRate;\r
+ }\r
+\r
+ public Timecode(Timecode startTC, Timecode durationTC) {\r
+ startFrame = startTC.startFrame;\r
+ frameRate = startTC.frameRate;\r
+ Set(durationTC.Frames);\r
+ }\r
+\r
+ public Timecode(String tc, float frameRate) {\r
+ this.frameRate = frameRate;\r
+ if (String.IsNullOrEmpty(tc) || tc.Length != 11)\r
+ return;\r
+ int hour = int.Parse(tc.Substring(0, 2));\r
+ int minute = int.Parse(tc.Substring(3, 2));\r
+ int sec = int.Parse(tc.Substring(6, 2));\r
+ int frame = int.Parse(tc.Substring(9, 2));\r
+ startFrame = currentFrame = (int)Math.Ceiling(hour * 60 * 60 * frameRate + minute * 60 * frameRate + sec * frameRate + frame);\r
+ //Debug.WriteLine(tc + " ?? " + ToString());\r
+ }\r
+\r
+ public override string ToString() {\r
+ lock (this) {\r
+ float reminder = currentFrame;\r
+ int hour = (int)(reminder / (60 * 60 * frameRate));\r
+ reminder = reminder % (60 * 60 * frameRate);\r
+ int minute = (int)(reminder / (60 * frameRate));\r
+ reminder = reminder % (60 * frameRate);\r
+ int sec = (int)(reminder / frameRate);\r
+ reminder = reminder % frameRate;\r
+ int frame = (int)reminder;\r
+ return String.Format("{0}:{1}:{2}:{3}", hour.ToString("D2"), minute.ToString("D2"), sec.ToString("D2"), frame.ToString("D2"));\r
+ //return frame.ToString("D2"));\r
+ }\r
+ }\r
+\r
+ public int Frames {\r
+ get {\r
+ lock (this) {\r
+ return currentFrame;\r
+ }\r
+ }\r
+ }\r
+\r
+ public int ZeroBasedFrames {\r
+ get {\r
+ lock (this) {\r
+ return currentFrame - startFrame;\r
+ }\r
+ }\r
+ }\r
+\r
+ public bool Set(int frames) {\r
+ bool changed = false;\r
+ lock (this) {\r
+ if (currentFrame != startFrame + frames)\r
+ currentFrame = startFrame + frames;\r
+ }\r
+ return changed;\r
+ }\r
+\r
+ public bool Set(long mediaTime) {\r
+ int frames = (int)Math.Ceiling(mediaTime * frameRate / MEDIATIME_REFERENCE);\r
+ return Set(frames);\r
+ }\r
+\r
+ public bool StartsAtZeroFrame() {\r
+ return startFrame == 0;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.ComponentModel;\r
+using System.IO;\r
+using DirectShowLib;\r
+using System.Text.RegularExpressions;\r
+using DirectShowLib.Utils;\r
+\r
+namespace DxPlay\r
+{\r
+ [ComVisible(true), ComImport(),\r
+ Guid("00000001-0000-0000-C000-000000000046"),\r
+ InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]\r
+ public interface IClassFactory\r
+ {\r
+ [return: MarshalAs(UnmanagedType.I4)]\r
+ [PreserveSig]\r
+ int CreateInstance(\r
+ [In, MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter,\r
+ [MarshalAs(UnmanagedType.LPStruct)] Guid riid,\r
+ [Out, MarshalAs(UnmanagedType.Interface)] out object obj);\r
+\r
+ [return: MarshalAs(UnmanagedType.I4)]\r
+ [PreserveSig]\r
+ int LockServer(\r
+ [MarshalAs(UnmanagedType.Bool), In] bool fLock);\r
+ }\r
+\r
+ public class URCOMLoader : IDisposable\r
+ {\r
+ delegate int DllGETCLASSOBJECTInvoker([MarshalAs(UnmanagedType.LPStruct)]Guid clsid, [MarshalAs(UnmanagedType.LPStruct)]Guid iid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);\r
+ static Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046");\r
+\r
+ bool _disposed = false;\r
+ Dictionary<string, IntPtr> _libsLoaded = new Dictionary<string, IntPtr>();\r
+\r
+ public object CreateObjectFromPath(string dllPath, Guid clsid)\r
+ {\r
+ return CreateObjectFromPath(dllPath, clsid, false);\r
+ }\r
+\r
+ //http://www.gdcl.co.uk/2011/June/UnregisteredFilters.htm\r
+ public object CreateObjectFromPath(string dllPath, Guid clsid, bool setSearchPath)\r
+ {\r
+ object createdObject = null;\r
+ IntPtr lib = IntPtr.Zero;\r
+\r
+ if (_libsLoaded.ContainsKey(dllPath))\r
+ lib = _libsLoaded[dllPath];\r
+ else\r
+ {\r
+ //some dlls have external dependancies, setting the search path to its location should assist with this\r
+ if (setSearchPath)\r
+ {\r
+ NativeMethods.SetDllDirectory(Path.GetDirectoryName(dllPath));\r
+ }\r
+\r
+ lib = NativeMethods.LoadLibrary(dllPath);\r
+\r
+ if (setSearchPath)\r
+ {\r
+ NativeMethods.SetDllDirectory(null);\r
+ }\r
+ }\r
+\r
+ if (lib != IntPtr.Zero)\r
+ {\r
+ //we need to cache the handle so the COM object will work and we can clean up later\r
+ _libsLoaded[dllPath] = lib;\r
+ IntPtr fnP = NativeMethods.GetProcAddress(lib, "DllGetClassObject");\r
+ if (fnP != IntPtr.Zero)\r
+ {\r
+ DllGETCLASSOBJECTInvoker fn = Marshal.GetDelegateForFunctionPointer(fnP, typeof(DllGETCLASSOBJECTInvoker)) as DllGETCLASSOBJECTInvoker;\r
+\r
+ object pUnk = null;\r
+ int hr = fn(clsid, IID_IUnknown, out pUnk);\r
+ if (hr >= 0)\r
+ {\r
+ IClassFactory pCF = pUnk as IClassFactory;\r
+ if (pCF != null)\r
+ {\r
+ hr = pCF.CreateInstance(null, IID_IUnknown, out createdObject);\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ throw new Win32Exception();\r
+ }\r
+ }\r
+ else\r
+ {\r
+ throw new Win32Exception();\r
+ }\r
+\r
+ return createdObject;\r
+ }\r
+\r
+ #region IDisposable Members\r
+\r
+ protected void Dispose(bool disposing)\r
+ {\r
+ if (!_disposed)\r
+ {\r
+ if (disposing)\r
+ {\r
+\r
+ }\r
+\r
+ foreach (string key in _libsLoaded.Keys)\r
+ {\r
+ IntPtr lib = _libsLoaded[key];\r
+ NativeMethods.FreeLibrary(lib);\r
+ }\r
+\r
+ _libsLoaded = new Dictionary<string, IntPtr>();\r
+\r
+ _disposed = true;\r
+ }\r
+ }\r
+\r
+ public void Dispose()\r
+ {\r
+ Dispose(true);\r
+ GC.SuppressFinalize(this);\r
+ }\r
+\r
+ #endregion\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace DxPlay {\r
+ class VideoTrackBar : TrackBar {\r
+\r
+ protected override void OnPaint(PaintEventArgs e) {\r
+ base.OnPaint(e);\r
+ }\r
+\r
+ protected override void OnPaintBackground(PaintEventArgs e) {\r
+ base.OnPaintBackground(e);\r
+ }\r
+\r
+ protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {\r
+ return false; \r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<configuration>\r
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>\r
--- /dev/null
+---------------------------------------------------------------------\r
+DxPlay\r
+\r
+While the underlying libraries are covered by LGPL, this sample is released \r
+as public domain. It is distributed in the hope that it will be useful, but \r
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY \r
+or FITNESS FOR A PARTICULAR PURPOSE. \r
+\r
+---------------------------------------------------------------------\r
+\r
+A sample application showing how to play media files (AVI, WMV, etc) and \r
+capture snapshots.\r
+\r
+Note, this sample is primarily meant to show building the graph and capturing\r
+frames. It does NOT connect the audio pin.
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>\r
+<configuration>\r
+ <configSections>\r
+ <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />\r
+ </configSections>\r
+\r
+ <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+ <targets>\r
+ <target name="console" xsi:type="Console" layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level} ${message}"/>\r
+ </targets>\r
+ <rules>\r
+ <logger name="*" minlevel="Trace" writeTo="console"/>\r
+ </rules>\r
+ </nlog>\r
+</configuration>\r
--- /dev/null
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using MongoDB.Bson;\r
+using MongoDB.Driver;\r
+using System;\r
+using System.Diagnostics;\r
+using System.Security.Cryptography;\r
+using System.Threading.Tasks;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class Db2JsonTests {\r
+ protected static IMongoClient client;\r
+ protected static IMongoDatabase database;\r
+\r
+ [TestMethod]\r
+ public void TestConnect() {\r
+ client = new MongoClient("mongodb://db2admin:password@10.228.198.1:27017");\r
+ database = client.GetDatabase("mccache");\r
+ Assert.IsNotNull(database);\r
+ }\r
+\r
+ // private void createCounter(IMongoDatabase database, string collectionName, long value) {\r
+ // MongoCollectionSettings settings = new MongoCollectionSettings() {\r
+ // AssignIdOnInsert = true\r
+ // };\r
+\r
+ // var collection = database.GetCollection("COUNTERS", settings);\r
+ // DBCursor cursor = collection.find(new BasicDBObject(_ID, String.format(SEQ, collectionName)));\r
+ // if (cursor.count() == 0) {\r
+ // BasicDBObject counter = new BasicDBObject();\r
+ // counter.append(_ID, String.format(FORMAT_SEQ, collectionName));\r
+ // counter.append(SEQ, value);\r
+ // collection.insert(counter);\r
+ // }\r
+ // }\r
+\r
+ // public long getNextSequence(string collectionName) {\r
+ // createCounter(collectionName, 0L);\r
+ // DBCollection counters = db.getCollection(COUNTERS);\r
+ // BasicDBObject searchQuery = new BasicDBObject(_ID, String.format(FORMAT_SEQ, collectionName));\r
+ // BasicDBObject increase = new BasicDBObject(SEQ, 1L);\r
+ // BasicDBObject updateQuery = new BasicDBObject(INoSQLMongoBase.INC, increase);\r
+ // DBObject result = counters.findAndModify(searchQuery, null, null, false, updateQuery, true, false);\r
+ // if (result instanceof BasicDBObject)\r
+ //return ((BasicDBObject)result).getLong(SEQ);\r
+ // return Long.valueOf(result.get(SEQ).toString());\r
+ // }\r
+\r
+ public class Post {\r
+ public Oid Id { get; private set; }\r
+ public string Title { get; set; }\r
+ public string Body { get; set; }\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestInsert() {\r
+ client = new MongoClient("mongodb://db2admin:password@10.228.198.1:27017");\r
+ database = client.GetDatabase("mccache");\r
+ var collection = database.GetCollection<BsonDocument>("test").AsQueryable();\r
+ foreach (var i in collection) {\r
+ Debug.WriteLine(i);\r
+ }\r
+\r
+ var document = new BsonDocument\r
+ {\r
+ { "name", "Manhattan" },\r
+ { "title", "Italian" }\r
+ };\r
+\r
+ //try {\r
+ // await collection.InsertOneAsync(document);\r
+ //}\r
+ //catch (Exception ex) {\r
+ // Debug.WriteLine(ex.Message);\r
+ //}\r
+ //var filter = new BsonDocument();\r
+ //var count = 0;\r
+ //using (var cursor = await collection.FindAsync(filter)) {\r
+ // while (await cursor.MoveNextAsync()) {\r
+ // var batch = cursor.Current;\r
+ // foreach (var doc in batch) {\r
+ // // process document\r
+ // count++;\r
+ // }\r
+ // }\r
+ //}\r
+\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <Import Project="..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props')" />\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProjectGuid>{4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}</ProjectGuid>\r
+ <OutputType>Library</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>IntegrationTests</RootNamespace>\r
+ <AssemblyName>IntegrationTests</AssemblyName>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r
+ <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>\r
+ <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>\r
+ <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>\r
+ <IsCodedUITest>False</IsCodedUITest>\r
+ <TestProjectType>UnitTest</TestProjectType>\r
+ <NuGetPackageImportStamp>\r
+ </NuGetPackageImportStamp>\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <DebugType>full</DebugType>\r
+ <Optimize>false</Optimize>\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <DebugType>pdbonly</DebugType>\r
+ <Optimize>true</Optimize>\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="MongoDB.Bson, Version=2.4.4.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\MongoDB.Bson.2.4.4\lib\net45\MongoDB.Bson.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="MongoDB.Driver, Version=2.4.4.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\MongoDB.Driver.2.4.4\lib\net45\MongoDB.Driver.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="MongoDB.Driver.Core, Version=2.4.4.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\MongoDB.Driver.Core.2.4.4\lib\net45\MongoDB.Driver.Core.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="RestSharp, Version=105.2.3.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.Core" />\r
+ <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.0.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="websocket-sharp, Version=1.0.2.42480, Culture=neutral, PublicKeyToken=5660b08a1845a91e" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="JobEngineIT.cs" />\r
+ <Compile Include="OctopusIT.cs" />\r
+ <Compile Include="MaestroIT.cs" />\r
+ <Compile Include="PlanAIRTests.cs" />\r
+ <Compile Include="TimecodeTests.cs" />\r
+ <Compile Include="Db2JsonIT.cs" />\r
+ <Compile Include="MediaCubeClientIT.cs" />\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="App.config" />\r
+ <None Include="nlog.config">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ <None Include="packages.config" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <ProjectReference Include="..\DxPlay\DxPlay.csproj">\r
+ <Project>{0b44b3d7-52d7-4c0e-9b1c-f48ceeda36fe}</Project>\r
+ <Name>DxPlay</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\Maestro\Maestro.csproj">\r
+ <Project>{baf3e174-5d82-40fa-9e62-8c76adbea1e4}</Project>\r
+ <Name>Maestro</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\MediaCubeClient\MediaCubeClient.csproj">\r
+ <Project>{cefd0348-ded4-453e-bf3a-0b52f8890ab3}</Project>\r
+ <Name>MediaCubeClient</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\OctopusClient\OctopusClient.csproj">\r
+ <Project>{8cc7c930-9dbf-487b-aed5-776937a649d5}</Project>\r
+ <Name>OctopusClient</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\PlanAIRClient\TrafficClient.csproj">\r
+ <Project>{a7a21311-cb0e-465f-8ad6-829faf093f00}</Project>\r
+ <Name>TrafficClient</Name>\r
+ </ProjectReference>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <WCFMetadata Include="Connected Services\" />\r
+ </ItemGroup>\r
+ <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">\r
+ <PropertyGroup>\r
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\r
+ </PropertyGroup>\r
+ <Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props'))" />\r
+ <Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets'))" />\r
+ </Target>\r
+ <Import Project="..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets')" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using JobEngineClient;\r
+using System.Net;\r
+using Model;\r
+using System;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class JobEngineTests {\r
+\r
+ [TestInitialize]\r
+ public void initialize() {\r
+ ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;\r
+ }\r
+\r
+\r
+ [TestMethod]\r
+ public void TestCreate() {\r
+ JobEngineAPI client = new JobEngineAPI("http://localhost:8080/services/rest/jobengine/", null, null, 100);\r
+\r
+ WorkflowAction item = new WorkflowAction();\r
+ item.description = "description";\r
+ item.source = "source";\r
+ item.destination = "destination";\r
+ item.houseId = "houseId";\r
+ item.tag = "tag";\r
+ item.touched = DateTime.Now;\r
+ item.started = DateTime.Now;\r
+ item.finished = DateTime.Now;\r
+ var actual = client.Create(item);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestCreateMany() {\r
+ JobEngineAPI client = new JobEngineAPI("http://localhost:8080/services/rest/jobengine/", null, null, 100);\r
+\r
+ for (int i = 0; i < 10; i++) {\r
+ WorkflowAction item = new WorkflowAction();\r
+ item.description = "description";\r
+ item.source = "source";\r
+ item.destination = "destination";\r
+ item.houseId = "BBBBB";\r
+ item.tag = "INGEST";\r
+ item.touched = DateTime.Now;\r
+ item.started = DateTime.Now;\r
+ item.finished = DateTime.Now.AddMinutes(5 * i);\r
+ var actual = client.Create(item);\r
+ }\r
+\r
+ for (int i = 0; i < 10; i++) {\r
+ WorkflowAction item = new WorkflowAction();\r
+ item.description = "description";\r
+ item.source = "source";\r
+ item.destination = "destination";\r
+ item.houseId = "AAAAA";\r
+ item.tag = "ARCHIVE";\r
+ item.touched = DateTime.Now;\r
+ item.started = DateTime.Now;\r
+ item.finished = DateTime.Now.AddHours(-5).AddMinutes(i);\r
+ var actual = client.Create(item);\r
+ }\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestItem() {\r
+ JobEngineAPI client = new JobEngineAPI("http://localhost:8080/services/rest/jobengine/", null, null, 100);\r
+ client.Item();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using Maestro.Configuration;\r
+using Maestro.Targets;\r
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using System;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class MaestroTests {\r
+\r
+ [TestMethod]\r
+ public void TestFTPTarget() {\r
+ Target configuration = new Target() {\r
+ Remote = new Connection() {\r
+ Address = new Uri("ftp://localhost:21/watch"),\r
+ UserName = "dani",\r
+ Password = "dani",\r
+ },\r
+ OutputFormat = "{0}_{1}_{2}"\r
+ };\r
+ //todo utolsó paraméterként szegmens lista átadása\r
+ FTPTargetProcessor sut = new FTPTargetProcessor(null, null, configuration, @"c:\tmp\watch\tcdrone.MXF", "000000", null);\r
+ sut.Execute();\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using IO.Swagger.Api;\r
+using IO.Swagger.Model;\r
+using System.Diagnostics;\r
+using System.Net;\r
+using NexioClient;\r
+using System.Threading;\r
+using Newtonsoft.Json.Linq;\r
+using System.Linq;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class MediaCubeAPITests {\r
+\r
+ [ClassInitialize]\r
+ static public void ClassInitialize(TestContext context) {\r
+ ServicePointManager.ServerCertificateValidationCallback += (s, c, ch, e) => true;\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestLoginLogout() {\r
+ DefaultApi sut = new DefaultApi("https://localhost:8443/rest/service");\r
+ UserInfo result = sut.LoginPost(new LoginParameters() { Username = "admin", Password = "admin" });\r
+ Assert.IsNotNull(result);\r
+ Debug.WriteLine("Logged in");\r
+ sut.MasLogoutGet();\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestWebSocket() {\r
+ CountdownEvent cde = new CountdownEvent(1);\r
+ NexioAPI ws = new NexioAPI("ws://localhost:8080/services/nexio");\r
+ ws.Open((sender, e) => {\r
+ JObject resultObject = JObject.Parse(e.Data);\r
+ JToken resultList = JToken.Parse(resultObject.GetValue("data").ToString());\r
+ resultList.Children().First().ToList().ForEach(d => {\r
+ Debug.WriteLine(d["longnameid"]);\r
+ });\r
+ cde.Signal();\r
+ });\r
+ ws.GetListAsync();\r
+ cde.Wait();\r
+ ws.Close();\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using MongoDB.Bson;\r
+using MongoDB.Bson.Serialization;\r
+using OctopusClient;\r
+using RestSharp;\r
+using System;\r
+using System.Diagnostics;\r
+using System.Linq;\r
+using System.Net;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class OctopusTests {\r
+\r
+ [TestInitialize]\r
+ public void initialize() {\r
+ ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;\r
+ }\r
+\r
+\r
+ [TestMethod]\r
+ public void TestGetRundowns() {\r
+ OctopusAPI client = new OctopusAPI("http://localhost:8080/rest/services/octopus/", null, null, 100);\r
+ var actual = client.GetRundowns(DateTime.Now);\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using TrafficClient;\r
+using System.Collections.Generic;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class PlanAIRTests {\r
+\r
+ private const string CONNECTION_STRING = "Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;";\r
+ private const string USER_NAME = "MAM";\r
+ private const string PASSWORD = "Echotv.hu";\r
+ private const int TIMEOUT = 5;\r
+ private const int ITEM_ID = 33686;\r
+\r
+ private TrafficAPI sut;\r
+\r
+ [TestInitialize]\r
+ public void initialize() {\r
+ sut = new TrafficAPI(CONNECTION_STRING, USER_NAME, PASSWORD, TIMEOUT);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void GetSegmentReadyTest() {\r
+ //Exercise\r
+ List<Segment> actual = sut.GetSegmentReady(ITEM_ID);\r
+\r
+ //Verify\r
+ Assert.IsTrue(actual.Count > 0);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void AddSegmentToKopiaTest() {\r
+ //Fixture\r
+ Segment segment = new Segment() { Comment = "Test", Optional = true, TCIn = 1000, TCOut = 2000};\r
+\r
+ //Fixture\r
+ sut.AddSegmentToCopia(ITEM_ID, segment.Comment, segment.TCIn, segment.TCOut, segment.Optional);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void DeletesegmentsTest() {\r
+\r
+ //Exercise\r
+ sut.DeleteSegments(ITEM_ID);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void DeleteSegmentTest() {\r
+ const int segmentID = 82454;\r
+\r
+ //Exercise\r
+ sut.DeleteSegment(ITEM_ID, segmentID);\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestGetList() {\r
+ //TrafficAPI sut = new TrafficAPI();\r
+ //var result = sut.GetList();\r
+ //Assert.IsNotNull(result);\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+[assembly: AssemblyTitle("IntegrationTests")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("IntegrationTests")]\r
+[assembly: AssemblyCopyright("Copyright © 2017")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+[assembly: ComVisible(false)]\r
+\r
+[assembly: Guid("4a61e975-f8db-4bbf-beff-72fe67b2c08b")]\r
+\r
+// [assembly: AssemblyVersion("1.0.*")]\r
+[assembly: AssemblyVersion("1.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
--- /dev/null
+using DxPlay;\r
+using Microsoft.VisualStudio.TestTools.UnitTesting;\r
+using MongoDB.Bson;\r
+using MongoDB.Driver;\r
+using System;\r
+using System.Diagnostics;\r
+using System.Security.Cryptography;\r
+using System.Threading.Tasks;\r
+\r
+namespace IntegrationTests {\r
+ [TestClass]\r
+ public class TimecodeTests {\r
+\r
+ [TestMethod]\r
+ public void TestEmpty() {\r
+ Timecode sut = new Timecode();\r
+ Assert.AreEqual(0, sut.Frames);\r
+ Assert.AreEqual(0, sut.ZeroBasedFrames);\r
+ Assert.AreEqual("00:00:00:00", sut.ToString());\r
+ }\r
+\r
+ [TestMethod]\r
+ public void TestSetBoundchange() {\r
+ Timecode sut = new Timecode();\r
+\r
+ for (int i = 1; i < 24; i++) {\r
+ sut.Set(i);\r
+ Assert.AreEqual(i, sut.Frames);\r
+ Assert.AreEqual(i, sut.ZeroBasedFrames);\r
+ Assert.AreEqual(String.Format("00:00:00:{0}", i.ToString("D2")), sut.ToString());\r
+ }\r
+\r
+ sut.Set(25);\r
+ Assert.AreEqual(25, sut.Frames);\r
+ Assert.AreEqual(25, sut.ZeroBasedFrames);\r
+ Assert.AreEqual("00:00:01:00", sut.ToString());\r
+\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+<?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="console" xsi:type="Console" layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level} ${message}"/>\r
+ <target name="debug" xsi:type="OutputDebugString" layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level} ${message} ${newline}" />\r
+ <target name="file" xsi:type="File" layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level} ${message}" fileName="${basedir}/logs/thumbnailserver.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="console" />\r
+ <logger name="*" minlevel="Trace" writeTo="debug" />\r
+ <logger name="*" minlevel="Trace" writeTo="file" />\r
+ </rules>\r
+</nlog>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<packages>\r
+ <package id="MongoDB.Bson" version="2.4.4" targetFramework="net461" />\r
+ <package id="MongoDB.Driver" version="2.4.4" targetFramework="net461" />\r
+ <package id="MongoDB.Driver.Core" version="2.4.4" targetFramework="net461" />\r
+ <package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net461" />\r
+ <package id="MSTest.TestFramework" version="1.1.11" targetFramework="net461" />\r
+ <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net461" />\r
+ <package id="RestSharp" version="105.2.3" targetFramework="net461" />\r
+ <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.0.0" targetFramework="net461" />\r
+</packages>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Windows.Forms;\r
+using System.Drawing;\r
+using System.ComponentModel;\r
+\r
+namespace Maestro.Commons {\r
+\r
+ public class DataGridViewProgressColumn : DataGridViewImageColumn {\r
+ public DataGridViewProgressColumn() {\r
+ CellTemplate = new DataGridViewProgressCell();\r
+ }\r
+ }\r
+\r
+ class DataGridViewProgressCell : DataGridViewImageCell {\r
+ // Used to make custom cell consistent with a DataGridViewImageCell\r
+ static Image emptyImage;\r
+\r
+ static DataGridViewProgressCell() {\r
+ emptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb);\r
+ }\r
+\r
+ public DataGridViewProgressCell() {\r
+ this.ValueType = typeof(int);\r
+ }\r
+\r
+ protected override object GetFormattedValue(object value,\r
+ int rowIndex, ref DataGridViewCellStyle cellStyle,\r
+ TypeConverter valueTypeConverter,\r
+ TypeConverter formattedValueTypeConverter,\r
+ DataGridViewDataErrorContexts context) {\r
+ return emptyImage;\r
+ }\r
+\r
+ protected override void Paint(Graphics g, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) {\r
+ int progressVal = (int)value;\r
+ float percentage = ((float)progressVal / 100.0f); // Need to convert to float before division; otherwise C# returns int which is 0 for anything but 100%.\r
+ Brush backColorBrush = new SolidBrush(cellStyle.BackColor);\r
+ Brush foreColorBrush = new SolidBrush(cellStyle.ForeColor);\r
+ // Draws the cell grid\r
+ base.Paint(g, clipBounds, cellBounds,\r
+ rowIndex, cellState, value, formattedValue, errorText,\r
+ cellStyle, advancedBorderStyle, (paintParts & ~DataGridViewPaintParts.ContentForeground));\r
+\r
+ Brush foreBrush = foreColorBrush;\r
+ if (percentage > 0.0) {\r
+ // Draw the progress bar and the text\r
+ g.FillRectangle(new SolidBrush(Color.FromArgb(163, 189, 242)), cellBounds.X + 2, cellBounds.Y + 2, Convert.ToInt32((percentage * cellBounds.Width - 4)), cellBounds.Height - 4);\r
+ } else {\r
+ // draw the text\r
+ if (this.DataGridView.CurrentRow.Index == rowIndex)\r
+ foreBrush = new SolidBrush(cellStyle.SelectionForeColor);\r
+ }\r
+ String text = String.Format("{0} %", progressVal);\r
+ SizeF textSize = g.MeasureString(text, cellStyle.Font);\r
+ if (cellStyle.Alignment == DataGridViewContentAlignment.MiddleCenter) {\r
+ g.DrawString(text, cellStyle.Font, foreBrush, cellBounds.X + (cellBounds.Width / 2 - textSize.Width / 2), cellBounds.Y + 2);\r
+ }\r
+ else\r
+ g.DrawString(text, cellStyle.Font, foreBrush, cellBounds.X + 6, cellBounds.Y + 2);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro.Commons {\r
+ public static class ObjectExtensions {\r
+\r
+ public static void SafeCall(this Control ctrl, Action x) {\r
+ if (x != null) {\r
+ if (ctrl.InvokeRequired) {\r
+ ctrl.BeginInvoke(x);\r
+ } else {\r
+ x();\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using Newtonsoft.Json;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.IO;\r
+\r
+namespace Maestro.Configuration {\r
+\r
+ public class Loader {\r
+ public static ConfigurationInfo Get(string fileName) {\r
+ string configuration = File.ReadAllText(fileName);\r
+ KnownTypesBinder knownTypesBinder = new KnownTypesBinder {\r
+ KnownTypes = new List<Type> { typeof(UNCSource), typeof(NEXIOSource), typeof(OctopusMetadata), typeof(TrafficMetadata), typeof(MediaCubeMetadata), }\r
+ };\r
+ JsonSerializerSettings settings = new JsonSerializerSettings {\r
+ TypeNameHandling = TypeNameHandling.Objects,\r
+ SerializationBinder = knownTypesBinder,\r
+ //Converters = { new KeysJsonConverter() }\r
+ };\r
+\r
+ return JsonConvert.DeserializeObject<ConfigurationInfo>(configuration, settings);\r
+ }\r
+ }\r
+\r
+ public class ConfigurationInfo {\r
+ public bool StartInTray { get; set; }\r
+ public bool Active { get; set; }\r
+ public string Title { get; set; }\r
+ public bool IsAdmin { get; set; }\r
+ public Player Player { get; set; }\r
+ public Source Source { get; set; }\r
+ public MetadataProvider[] Metadatas { get; set; }\r
+ public Target[] Targets { get; set; }\r
+ }\r
+\r
+ public class Player {\r
+ public bool Enabled { get; set; }\r
+ public bool AutoStart { get; set; }\r
+ public bool SegmentEditor { get; set; }\r
+ }\r
+\r
+ public class Target {\r
+ public string Label { get; set; }\r
+ public string Processor { get; set; }\r
+ public string OutputFormat { get; set; }\r
+ public bool FileNameOverride { get; set; }\r
+ public int KillDateDays { get; set; }\r
+ public Connection Remote { get; set; }\r
+ public bool SaveSegments { get; set; }\r
+ public bool CreateSubFolder { get; set; }\r
+ public string Tag { get; set; }\r
+ }\r
+\r
+ public class Connection {\r
+ //[JsonConverter(typeof(KeysJsonConverter))]\r
+ public Uri Address { get; set; }\r
+ public string UserName { get; set; }\r
+ public string Password { get; set; }\r
+ public int Timeout { get; set; }\r
+ }\r
+\r
+ public class Source {\r
+ public Connection Local { get; set; }\r
+ public Connection Remote { get; set; }\r
+ }\r
+\r
+ public class UNCSource : Source {\r
+ }\r
+\r
+ public class NEXIOSource : Source {\r
+ }\r
+\r
+ public class MetadataProvider {\r
+ public Connection Server { get; set; }\r
+ }\r
+\r
+ public class OctopusMetadata : MetadataProvider {\r
+ }\r
+\r
+ public class TrafficMetadata : MetadataProvider {\r
+ }\r
+\r
+ public class MediaCubeMetadata : MetadataProvider {\r
+ }\r
+}\r
--- /dev/null
+using Newtonsoft.Json;\r
+using System;\r
+\r
+namespace Maestro.Configuration {\r
+ public class KeysJsonConverter : JsonConverter {\r
+ public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {\r
+ }\r
+\r
+ public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {\r
+ return new Uri(serializer.Deserialize(reader, objectType)?.ToString());\r
+ }\r
+\r
+ public override bool CanConvert(Type objectType) {\r
+ return true;\r
+ }\r
+\r
+ public override bool CanRead {\r
+ get {\r
+ return true;\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using Newtonsoft.Json.Serialization;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+\r
+namespace Maestro.Configuration {\r
+ public class KnownTypesBinder : ISerializationBinder {\r
+ public IList<Type> KnownTypes { get; set; }\r
+\r
+ public Type BindToType(string assemblyName, string typeName) {\r
+ return KnownTypes.SingleOrDefault(t => t.Name == typeName);\r
+ }\r
+\r
+ public void BindToName(Type serializedType, out string assemblyName, out string typeName) {\r
+ assemblyName = null;\r
+ typeName = serializedType.Name;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProjectGuid>{BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}</ProjectGuid>\r
+ <OutputType>WinExe</OutputType>\r
+ <RootNamespace>Maestro</RootNamespace>\r
+ <AssemblyName>Maestro</AssemblyName>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ <TargetFrameworkProfile />\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <PlatformTarget>AnyCPU</PlatformTarget>\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <DebugType>full</DebugType>\r
+ <Optimize>false</Optimize>\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ <CodeAnalysisIgnoreGeneratedCode>true</CodeAnalysisIgnoreGeneratedCode>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <PlatformTarget>AnyCPU</PlatformTarget>\r
+ <DebugType>pdbonly</DebugType>\r
+ <Optimize>true</Optimize>\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="FluentFTP, Version=17.5.8.0, Culture=neutral, PublicKeyToken=f4af092b1d8df44f, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\FluentFTP.17.5.8\lib\net45\FluentFTP.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="LinkDotNet.MessageHandling, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\LinkDotNet.MessageBus.0.1.1\lib\LinkDotNet.MessageHandling.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="LinkDotNet.MessageHandling.Contracts, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\LinkDotNet.MessageBus.Contracts.0.1.1\lib\LinkDotNet.MessageHandling.Contracts.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.OLE.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <HintPath>..\packages\Microsoft.VisualStudio.OLE.Interop.7.10.6070\lib\Microsoft.VisualStudio.OLE.Interop.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <HintPath>..\packages\Microsoft.VisualStudio.Shell.Interop.7.10.6071\lib\Microsoft.VisualStudio.Shell.Interop.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">\r
+ <EmbedInteropTypes>True</EmbedInteropTypes>\r
+ <HintPath>..\packages\Microsoft.VisualStudio.Shell.Interop.10.0.10.0.30319\lib\Microsoft.VisualStudio.Shell.Interop.10.0.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop.11.0, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">\r
+ <EmbedInteropTypes>True</EmbedInteropTypes>\r
+ <HintPath>..\packages\Microsoft.VisualStudio.Shell.Interop.11.0.11.0.61030\lib\Microsoft.VisualStudio.Shell.Interop.11.0.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.Shell.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <HintPath>..\packages\Microsoft.VisualStudio.Shell.Interop.8.0.8.0.50727\lib\Microsoft.VisualStudio.Shell.Interop.8.0.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.TextManager.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <HintPath>..\packages\Microsoft.VisualStudio.TextManager.Interop.7.10.6070\lib\Microsoft.VisualStudio.TextManager.Interop.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Microsoft.VisualStudio.TextManager.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <HintPath>..\packages\Microsoft.VisualStudio.TextManager.Interop.8.0.8.0.50727\lib\Microsoft.VisualStudio.TextManager.Interop.8.0.dll</HintPath>\r
+ <Private>True</Private>\r
+ </Reference>\r
+ <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net20\Newtonsoft.Json.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\NLog.4.4.11\lib\net45\NLog.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="NLog.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\NLog.Windows.Forms.4.2.3\lib\net35\NLog.Windows.Forms.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="RestSharp">\r
+ <HintPath>..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Deployment" />\r
+ <Reference Include="System.Drawing" />\r
+ <Reference Include="System.Web" />\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="System.Xml" />\r
+ <Reference Include="websocket-sharp, Version=1.0.2.42480, Culture=neutral, PublicKeyToken=5660b08a1845a91e" />\r
+ <Reference Include="WindowsBase" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="Commons\DataGridViewProgressColumn.cs" />\r
+ <Compile Include="Commons\ObjectExtensions.cs" />\r
+ <Compile Include="Configuration\ConfigurationInfo.cs" />\r
+ <Compile Include="Configuration\KeysJsonConverter.cs" />\r
+ <Compile Include="Configuration\KnownTypesBinder.cs" />\r
+ <Compile Include="MaestroForm.Metadata.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="MaestroForm.Target.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="Metadata\MenuButton.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
+ <Compile Include="Metadata\MetaDataInfo.cs" />\r
+ <Compile Include="Metadata\MetadataType.cs" />\r
+ <Compile Include="Splash.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="Splash.Designer.cs">\r
+ <DependentUpon>Splash.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="StringResources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTime>True</DesignTime>\r
+ <DependentUpon>StringResources.resx</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="Sources\CreatedFileMonitor.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
+ <Compile Include="Sources\FileSourceItem.cs" />\r
+ <Compile Include="Sources\NexioRESTSource.cs" />\r
+ <Compile Include="Sources\NexioSourceItem.cs" />\r
+ <Compile Include="Sources\SourceInfo.cs" />\r
+ <Compile Include="Sources\SourceType.cs" />\r
+ <Compile Include="Sources\FileSystemSource.cs" />\r
+ <Compile Include="Sources\ISourceItem.cs" />\r
+ <Compile Include="Sources\ISource.cs" />\r
+ <Compile Include="MaestroForm.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="MaestroForm.Designer.cs">\r
+ <DependentUpon>MaestroForm.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="MeastroFormNotifyIcon.cs" />\r
+ <Compile Include="Program.cs" />\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ <Compile Include="Sources\Messages\FileActionMsg.cs" />\r
+ <Compile Include="Targets\FXPTargetProcessor.cs" />\r
+ <Compile Include="Targets\FTPTargetProcessor.cs" />\r
+ <Compile Include="Targets\SegmentConverter.cs" />\r
+ <Compile Include="Targets\TargetProcessor.cs" />\r
+ <Compile Include="Targets\ITargetProcessor.cs" />\r
+ <Compile Include="Targets\ProcessStatus.cs" />\r
+ <EmbeddedResource Include="MaestroForm.resx">\r
+ <DependentUpon>MaestroForm.cs</DependentUpon>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="Properties\Resources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
+ <Compile Include="Properties\Resources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ <DesignTime>True</DesignTime>\r
+ </Compile>\r
+ <EmbeddedResource Include="Splash.resx">\r
+ <DependentUpon>Splash.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="StringResources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>StringResources.Designer.cs</LastGenOutput>\r
+ <SubType>Designer</SubType>\r
+ </EmbeddedResource>\r
+ <None Include="app.config" />\r
+ <Compile Include="MaestroForm.Source.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <None Include="nlog.config">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ <None Include="packages.config" />\r
+ <None Include="Properties\DataSources\Maestro.Metadata.MetadataInfo.datasource" />\r
+ <None Include="Properties\Settings.settings">\r
+ <Generator>SettingsSingleFileGenerator</Generator>\r
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>\r
+ </None>\r
+ <Compile Include="Properties\Settings.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DependentUpon>Settings.settings</DependentUpon>\r
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>\r
+ </Compile>\r
+ <None Include="Resources\configuration-unc.json">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ <None Include="Resources\configuration-nexio.json">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="Resources\AppIcon.ico" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <WCFMetadata Include="Connected Services\" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <ProjectReference Include="..\DxPlay\DxPlay.csproj">\r
+ <Project>{0b44b3d7-52d7-4c0e-9b1c-f48ceeda36fe}</Project>\r
+ <Name>DxPlay</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\MediaCubeClient\MediaCubeClient.csproj">\r
+ <Project>{cefd0348-ded4-453e-bf3a-0b52f8890ab3}</Project>\r
+ <Name>MediaCubeClient</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\OctopusClient\OctopusClient.csproj">\r
+ <Project>{8CC7C930-9DBF-487B-AED5-776937A649D5}</Project>\r
+ <Name>OctopusClient</Name>\r
+ </ProjectReference>\r
+ <ProjectReference Include="..\PlanAIRClient\TrafficClient.csproj">\r
+ <Project>{a7a21311-cb0e-465f-8ad6-829faf093f00}</Project>\r
+ <Name>TrafficClient</Name>\r
+ </ProjectReference>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="Resources\Pause.ico" />\r
+ <None Include="Resources\Play.ico" />\r
+ <None Include="Resources\Stop.ico" />\r
+ <None Include="Resources\mc_logo.ico" />\r
+ <None Include="Resources\mediacube_logo_small.ico" />\r
+ <Content Include="TODO.txt" />\r
+ </ItemGroup>\r
+ <ItemGroup />\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+using Maestro.Properties;\r
+\r
+namespace Maestro {\r
+ partial class MaestroForm {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ this.groupSource = new System.Windows.Forms.GroupBox();\r
+ this.dataGridSource = new System.Windows.Forms.DataGridView();\r
+ this.bindingSource = new System.Windows.Forms.BindingSource(this.components);\r
+ this.txtSorceFilter = new System.Windows.Forms.TextBox();\r
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();\r
+ this.textSelectedSource = new System.Windows.Forms.TextBox();\r
+ this.label1 = new System.Windows.Forms.Label();\r
+ this.buttonMetadata = new System.Windows.Forms.Button();\r
+ this.ctxmActions = new System.Windows.Forms.ContextMenuStrip(this.components);\r
+ this.ctxiDefineSegments = new System.Windows.Forms.ToolStripMenuItem();\r
+ this.ctxiModifyArchiveMetadata = new System.Windows.Forms.ToolStripMenuItem();\r
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();\r
+ this.splitContainer3 = new System.Windows.Forms.SplitContainer();\r
+ this.groupMetadata = new System.Windows.Forms.GroupBox();\r
+ this.tabControl1 = new System.Windows.Forms.TabControl();\r
+ this.tpOctopus = new System.Windows.Forms.TabPage();\r
+ this.octopusIDSelector = new OctopusClient.OctopusIDSelector();\r
+ this.tpTraffic = new System.Windows.Forms.TabPage();\r
+ this.trafficIDSelector = new TrafficClient.TrafficIDSelector();\r
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\r
+ this.labelSelectedMetadata = new System.Windows.Forms.Label();\r
+ this.textSelectedMetadata = new System.Windows.Forms.TextBox();\r
+ this.menuButtonActions = new Maestro.MenuButton();\r
+ this.groupTarget = new System.Windows.Forms.GroupBox();\r
+ this.panelActions = new System.Windows.Forms.TableLayoutPanel();\r
+ this.panel1 = new System.Windows.Forms.Panel();\r
+ this.btnExecute = new System.Windows.Forms.Button();\r
+ this.splitContainer2 = new System.Windows.Forms.SplitContainer();\r
+ this.groupActions = new System.Windows.Forms.GroupBox();\r
+ this.dataGridJobs = new System.Windows.Forms.DataGridView();\r
+ this.columnID = new System.Windows.Forms.DataGridViewTextBoxColumn();\r
+ this.columnStarted = new System.Windows.Forms.DataGridViewTextBoxColumn();\r
+ this.columnFinished = new System.Windows.Forms.DataGridViewTextBoxColumn();\r
+ this.columnInput = new System.Windows.Forms.DataGridViewTextBoxColumn();\r
+ this.columnOutput = new System.Windows.Forms.DataGridViewTextBoxColumn();\r
+ this.columnProgress = new Maestro.Commons.DataGridViewProgressColumn();\r
+ this.columnStatus = new System.Windows.Forms.DataGridViewTextBoxColumn();\r
+ this.bindingSourceJobs = new System.Windows.Forms.BindingSource(this.components);\r
+ this.metadataInfoBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
+ this.groupSource.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridSource)).BeginInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingSource)).BeginInit();\r
+ this.tableLayoutPanel2.SuspendLayout();\r
+ this.ctxmActions.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\r
+ this.splitContainer1.Panel1.SuspendLayout();\r
+ this.splitContainer1.Panel2.SuspendLayout();\r
+ this.splitContainer1.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();\r
+ this.splitContainer3.Panel1.SuspendLayout();\r
+ this.splitContainer3.Panel2.SuspendLayout();\r
+ this.splitContainer3.SuspendLayout();\r
+ this.groupMetadata.SuspendLayout();\r
+ this.tabControl1.SuspendLayout();\r
+ this.tpOctopus.SuspendLayout();\r
+ this.tpTraffic.SuspendLayout();\r
+ this.tableLayoutPanel1.SuspendLayout();\r
+ this.groupTarget.SuspendLayout();\r
+ this.panel1.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();\r
+ this.splitContainer2.Panel1.SuspendLayout();\r
+ this.splitContainer2.Panel2.SuspendLayout();\r
+ this.splitContainer2.SuspendLayout();\r
+ this.groupActions.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridJobs)).BeginInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingSourceJobs)).BeginInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.metadataInfoBindingSource)).BeginInit();\r
+ this.SuspendLayout();\r
+ // \r
+ // groupSource\r
+ // \r
+ this.groupSource.BackColor = System.Drawing.Color.Transparent;\r
+ this.groupSource.Controls.Add(this.dataGridSource);\r
+ this.groupSource.Controls.Add(this.txtSorceFilter);\r
+ this.groupSource.Controls.Add(this.tableLayoutPanel2);\r
+ this.groupSource.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.groupSource.Location = new System.Drawing.Point(0, 0);\r
+ this.groupSource.Name = "groupSource";\r
+ this.groupSource.Padding = new System.Windows.Forms.Padding(10);\r
+ this.groupSource.Size = new System.Drawing.Size(414, 419);\r
+ this.groupSource.TabIndex = 0;\r
+ this.groupSource.TabStop = false;\r
+ this.groupSource.Text = "Source file";\r
+ this.groupSource.Enter += new System.EventHandler(this.groupBox_Enter);\r
+ this.groupSource.Leave += new System.EventHandler(this.groupBox_Leave);\r
+ // \r
+ // dataGridSource\r
+ // \r
+ this.dataGridSource.AllowUserToAddRows = false;\r
+ this.dataGridSource.AllowUserToDeleteRows = false;\r
+ this.dataGridSource.AllowUserToResizeRows = false;\r
+ this.dataGridSource.AutoGenerateColumns = false;\r
+ this.dataGridSource.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
+ this.dataGridSource.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
+ this.dataGridSource.BackgroundColor = System.Drawing.Color.White;\r
+ this.dataGridSource.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.dataGridSource.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
+ dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;\r
+ dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;\r
+ dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+ dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+ dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+ this.dataGridSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;\r
+ this.dataGridSource.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
+ this.dataGridSource.DataSource = this.bindingSource;\r
+ dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;\r
+ dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black;\r
+ dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dataGridSource.DefaultCellStyle = dataGridViewCellStyle2;\r
+ this.dataGridSource.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.dataGridSource.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
+ this.dataGridSource.Location = new System.Drawing.Point(10, 43);\r
+ this.dataGridSource.Name = "dataGridSource";\r
+ this.dataGridSource.RowHeadersVisible = false;\r
+ dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dataGridSource.RowsDefaultCellStyle = dataGridViewCellStyle3;\r
+ this.dataGridSource.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dataGridSource.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+ this.dataGridSource.Size = new System.Drawing.Size(394, 304);\r
+ this.dataGridSource.TabIndex = 0;\r
+ this.dataGridSource.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.sourceGridView_CellContentClick);\r
+ this.dataGridSource.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellEnter);\r
+ this.dataGridSource.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridSource_CellMouseDoubleClick);\r
+ this.dataGridSource.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellMouseEnter);\r
+ this.dataGridSource.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellMouseLeave);\r
+ this.dataGridSource.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.dataGridSource_CellPainting);\r
+ this.dataGridSource.SelectionChanged += new System.EventHandler(this.sourceGridView_SelectionChanged);\r
+ // \r
+ // txtSorceFilter\r
+ // \r
+ this.txtSorceFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.txtSorceFilter.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.txtSorceFilter.Location = new System.Drawing.Point(10, 23);\r
+ this.txtSorceFilter.Name = "txtSorceFilter";\r
+ this.txtSorceFilter.Size = new System.Drawing.Size(394, 20);\r
+ this.txtSorceFilter.TabIndex = 13;\r
+ this.txtSorceFilter.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyUp);\r
+ // \r
+ // tableLayoutPanel2\r
+ // \r
+ this.tableLayoutPanel2.ColumnCount = 2;\r
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
+ this.tableLayoutPanel2.Controls.Add(this.textSelectedSource, 0, 1);\r
+ this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0);\r
+ this.tableLayoutPanel2.Controls.Add(this.buttonMetadata, 1, 1);\r
+ this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(10, 347);\r
+ this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);\r
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";\r
+ this.tableLayoutPanel2.RowCount = 2;\r
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(394, 62);\r
+ this.tableLayoutPanel2.TabIndex = 12;\r
+ // \r
+ // textSelectedSource\r
+ // \r
+ this.textSelectedSource.BackColor = System.Drawing.SystemColors.ActiveCaption;\r
+ this.textSelectedSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.textSelectedSource.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.textSelectedSource.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.textSelectedSource.Location = new System.Drawing.Point(3, 28);\r
+ this.textSelectedSource.Name = "textSelectedSource";\r
+ this.textSelectedSource.Size = new System.Drawing.Size(292, 26);\r
+ this.textSelectedSource.TabIndex = 10;\r
+ this.textSelectedSource.TextChanged += new System.EventHandler(this.OnInfoTextChanged);\r
+ // \r
+ // label1\r
+ // \r
+ this.label1.AutoSize = true;\r
+ this.tableLayoutPanel2.SetColumnSpan(this.label1, 2);\r
+ this.label1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.label1.Location = new System.Drawing.Point(3, 0);\r
+ this.label1.Name = "label1";\r
+ this.label1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\r
+ this.label1.Size = new System.Drawing.Size(388, 25);\r
+ this.label1.TabIndex = 13;\r
+ this.label1.Text = "Selected source";\r
+ // \r
+ // buttonMetadata\r
+ // \r
+ this.buttonMetadata.BackColor = System.Drawing.SystemColors.ButtonFace;\r
+ this.buttonMetadata.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.buttonMetadata.Enabled = false;\r
+ this.buttonMetadata.FlatStyle = System.Windows.Forms.FlatStyle.Popup;\r
+ this.buttonMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);\r
+ this.buttonMetadata.Location = new System.Drawing.Point(301, 28);\r
+ this.buttonMetadata.Name = "buttonMetadata";\r
+ this.buttonMetadata.Size = new System.Drawing.Size(90, 26);\r
+ this.buttonMetadata.TabIndex = 14;\r
+ this.buttonMetadata.Text = "Metadata";\r
+ this.buttonMetadata.UseVisualStyleBackColor = false;\r
+ this.buttonMetadata.Click += new System.EventHandler(this.buttonMetadata_Click);\r
+ // \r
+ // ctxmActions\r
+ // \r
+ this.ctxmActions.ImageScalingSize = new System.Drawing.Size(19, 19);\r
+ this.ctxmActions.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
+ this.ctxiDefineSegments,\r
+ this.ctxiModifyArchiveMetadata});\r
+ this.ctxmActions.Name = "contextMenuMetadataActions";\r
+ this.ctxmActions.Size = new System.Drawing.Size(207, 48);\r
+ // \r
+ // ctxiDefineSegments\r
+ // \r
+ this.ctxiDefineSegments.Name = "ctxiDefineSegments";\r
+ this.ctxiDefineSegments.Size = new System.Drawing.Size(206, 22);\r
+ this.ctxiDefineSegments.Text = "Define segments";\r
+ this.ctxiDefineSegments.Click += new System.EventHandler(this.OnDefineSegmentsClick);\r
+ // \r
+ // ctxiModifyArchiveMetadata\r
+ // \r
+ this.ctxiModifyArchiveMetadata.Name = "ctxiModifyArchiveMetadata";\r
+ this.ctxiModifyArchiveMetadata.Size = new System.Drawing.Size(206, 22);\r
+ this.ctxiModifyArchiveMetadata.Text = "Modify archive metadata";\r
+ // \r
+ // splitContainer1\r
+ // \r
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.splitContainer1.Location = new System.Drawing.Point(0, 0);\r
+ this.splitContainer1.Name = "splitContainer1";\r
+ // \r
+ // splitContainer1.Panel1\r
+ // \r
+ this.splitContainer1.Panel1.Controls.Add(this.groupSource);\r
+ // \r
+ // splitContainer1.Panel2\r
+ // \r
+ this.splitContainer1.Panel2.Controls.Add(this.splitContainer3);\r
+ this.splitContainer1.Size = new System.Drawing.Size(1022, 419);\r
+ this.splitContainer1.SplitterDistance = 414;\r
+ this.splitContainer1.TabIndex = 1;\r
+ // \r
+ // splitContainer3\r
+ // \r
+ this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.splitContainer3.Location = new System.Drawing.Point(0, 0);\r
+ this.splitContainer3.Name = "splitContainer3";\r
+ // \r
+ // splitContainer3.Panel1\r
+ // \r
+ this.splitContainer3.Panel1.Controls.Add(this.groupMetadata);\r
+ // \r
+ // splitContainer3.Panel2\r
+ // \r
+ this.splitContainer3.Panel2.Controls.Add(this.groupTarget);\r
+ this.splitContainer3.Size = new System.Drawing.Size(604, 419);\r
+ this.splitContainer3.SplitterDistance = 284;\r
+ this.splitContainer3.TabIndex = 2;\r
+ // \r
+ // groupMetadata\r
+ // \r
+ this.groupMetadata.BackColor = System.Drawing.Color.Transparent;\r
+ this.groupMetadata.Controls.Add(this.tabControl1);\r
+ this.groupMetadata.Controls.Add(this.tableLayoutPanel1);\r
+ this.groupMetadata.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.groupMetadata.Location = new System.Drawing.Point(0, 0);\r
+ this.groupMetadata.Name = "groupMetadata";\r
+ this.groupMetadata.Padding = new System.Windows.Forms.Padding(10);\r
+ this.groupMetadata.Size = new System.Drawing.Size(284, 419);\r
+ this.groupMetadata.TabIndex = 1;\r
+ this.groupMetadata.TabStop = false;\r
+ this.groupMetadata.Text = "Metadata";\r
+ this.groupMetadata.Enter += new System.EventHandler(this.groupBox_Enter);\r
+ this.groupMetadata.Leave += new System.EventHandler(this.groupBox_Leave);\r
+ // \r
+ // tabControl1\r
+ // \r
+ this.tabControl1.Controls.Add(this.tpOctopus);\r
+ this.tabControl1.Controls.Add(this.tpTraffic);\r
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.tabControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.tabControl1.Location = new System.Drawing.Point(10, 23);\r
+ this.tabControl1.Name = "tabControl1";\r
+ this.tabControl1.SelectedIndex = 0;\r
+ this.tabControl1.Size = new System.Drawing.Size(264, 324);\r
+ this.tabControl1.TabIndex = 1;\r
+ this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);\r
+ // \r
+ // tpOctopus\r
+ // \r
+ this.tpOctopus.Controls.Add(this.octopusIDSelector);\r
+ this.tpOctopus.Location = new System.Drawing.Point(4, 24);\r
+ this.tpOctopus.Name = "tpOctopus";\r
+ this.tpOctopus.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tpOctopus.Size = new System.Drawing.Size(256, 296);\r
+ this.tpOctopus.TabIndex = 0;\r
+ this.tpOctopus.Text = "Octopus";\r
+ this.tpOctopus.UseVisualStyleBackColor = true;\r
+ // \r
+ // octopusIDSelector\r
+ // \r
+ this.octopusIDSelector.BackColor = System.Drawing.Color.White;\r
+ this.octopusIDSelector.clearCheckBox = null;\r
+ this.octopusIDSelector.Disposeabel = false;\r
+ this.octopusIDSelector.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.octopusIDSelector.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.octopusIDSelector.IDChangedEvent = null;\r
+ this.octopusIDSelector.Location = new System.Drawing.Point(3, 3);\r
+ this.octopusIDSelector.Margin = new System.Windows.Forms.Padding(12, 12, 12, 12);\r
+ this.octopusIDSelector.MinimumSize = new System.Drawing.Size(200, 300);\r
+ this.octopusIDSelector.Name = "octopusIDSelector";\r
+ this.octopusIDSelector.Padding = new System.Windows.Forms.Padding(6);\r
+ this.octopusIDSelector.Size = new System.Drawing.Size(250, 300);\r
+ this.octopusIDSelector.TabIndex = 1;\r
+ // \r
+ // tpTraffic\r
+ // \r
+ this.tpTraffic.Controls.Add(this.trafficIDSelector);\r
+ this.tpTraffic.Location = new System.Drawing.Point(4, 24);\r
+ this.tpTraffic.Name = "tpTraffic";\r
+ this.tpTraffic.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tpTraffic.Size = new System.Drawing.Size(256, 296);\r
+ this.tpTraffic.TabIndex = 1;\r
+ this.tpTraffic.Text = "Traffic";\r
+ this.tpTraffic.UseVisualStyleBackColor = true;\r
+ // \r
+ // trafficIDSelector\r
+ // \r
+ this.trafficIDSelector.AutoSize = true;\r
+ this.trafficIDSelector.BackColor = System.Drawing.Color.White;\r
+ this.trafficIDSelector.clearCheckBox = null;\r
+ this.trafficIDSelector.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.trafficIDSelector.IDChangedEvent = null;\r
+ this.trafficIDSelector.Location = new System.Drawing.Point(3, 3);\r
+ this.trafficIDSelector.Margin = new System.Windows.Forms.Padding(4);\r
+ this.trafficIDSelector.Name = "trafficIDSelector";\r
+ this.trafficIDSelector.Padding = new System.Windows.Forms.Padding(6);\r
+ this.trafficIDSelector.Size = new System.Drawing.Size(250, 290);\r
+ this.trafficIDSelector.TabIndex = 0;\r
+ // \r
+ // tableLayoutPanel1\r
+ // \r
+ this.tableLayoutPanel1.ColumnCount = 2;\r
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
+ this.tableLayoutPanel1.Controls.Add(this.labelSelectedMetadata, 0, 0);\r
+ this.tableLayoutPanel1.Controls.Add(this.textSelectedMetadata, 0, 1);\r
+ this.tableLayoutPanel1.Controls.Add(this.menuButtonActions, 1, 1);\r
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 347);\r
+ this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);\r
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";\r
+ this.tableLayoutPanel1.RowCount = 2;\r
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(264, 62);\r
+ this.tableLayoutPanel1.TabIndex = 4;\r
+ // \r
+ // labelSelectedMetadata\r
+ // \r
+ this.labelSelectedMetadata.AutoSize = true;\r
+ this.tableLayoutPanel1.SetColumnSpan(this.labelSelectedMetadata, 2);\r
+ this.labelSelectedMetadata.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.labelSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.labelSelectedMetadata.Location = new System.Drawing.Point(3, 0);\r
+ this.labelSelectedMetadata.Name = "labelSelectedMetadata";\r
+ this.labelSelectedMetadata.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\r
+ this.labelSelectedMetadata.Size = new System.Drawing.Size(258, 25);\r
+ this.labelSelectedMetadata.TabIndex = 13;\r
+ this.labelSelectedMetadata.Text = "Selected metadata";\r
+ // \r
+ // textSelectedMetadata\r
+ // \r
+ this.textSelectedMetadata.BackColor = System.Drawing.SystemColors.ActiveCaption;\r
+ this.textSelectedMetadata.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.textSelectedMetadata.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.textSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.textSelectedMetadata.Location = new System.Drawing.Point(3, 28);\r
+ this.textSelectedMetadata.Name = "textSelectedMetadata";\r
+ this.textSelectedMetadata.Size = new System.Drawing.Size(162, 26);\r
+ this.textSelectedMetadata.TabIndex = 12;\r
+ this.textSelectedMetadata.TextChanged += new System.EventHandler(this.OnInfoTextChanged);\r
+ // \r
+ // menuButtonActions\r
+ // \r
+ this.menuButtonActions.BackColor = System.Drawing.SystemColors.ButtonFace;\r
+ this.menuButtonActions.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.menuButtonActions.FlatStyle = System.Windows.Forms.FlatStyle.Popup;\r
+ this.menuButtonActions.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.menuButtonActions.Location = new System.Drawing.Point(171, 28);\r
+ this.menuButtonActions.Menu = this.ctxmActions;\r
+ this.menuButtonActions.Name = "menuButtonActions";\r
+ this.menuButtonActions.Size = new System.Drawing.Size(90, 27);\r
+ this.menuButtonActions.TabIndex = 14;\r
+ this.menuButtonActions.Text = "Actions";\r
+ this.menuButtonActions.UseVisualStyleBackColor = false;\r
+ // \r
+ // groupTarget\r
+ // \r
+ this.groupTarget.BackColor = System.Drawing.Color.Transparent;\r
+ this.groupTarget.Controls.Add(this.panelActions);\r
+ this.groupTarget.Controls.Add(this.panel1);\r
+ this.groupTarget.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.groupTarget.Location = new System.Drawing.Point(0, 0);\r
+ this.groupTarget.Name = "groupTarget";\r
+ this.groupTarget.Padding = new System.Windows.Forms.Padding(10);\r
+ this.groupTarget.Size = new System.Drawing.Size(316, 419);\r
+ this.groupTarget.TabIndex = 0;\r
+ this.groupTarget.TabStop = false;\r
+ this.groupTarget.Text = "Target action";\r
+ this.groupTarget.Enter += new System.EventHandler(this.groupBox_Enter);\r
+ this.groupTarget.Leave += new System.EventHandler(this.groupBox_Leave);\r
+ // \r
+ // panelActions\r
+ // \r
+ this.panelActions.AutoScroll = true;\r
+ this.panelActions.BackColor = System.Drawing.Color.White;\r
+ this.panelActions.ColumnCount = 1;\r
+ this.panelActions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+ this.panelActions.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.panelActions.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.panelActions.Location = new System.Drawing.Point(10, 23);\r
+ this.panelActions.Name = "panelActions";\r
+ this.panelActions.Padding = new System.Windows.Forms.Padding(0, 0, 5, 0);\r
+ this.panelActions.RowCount = 1;\r
+ this.panelActions.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+ this.panelActions.Size = new System.Drawing.Size(296, 324);\r
+ this.panelActions.TabIndex = 4;\r
+ this.panelActions.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick);\r
+ // \r
+ // panel1\r
+ // \r
+ this.panel1.BackColor = System.Drawing.Color.Transparent;\r
+ this.panel1.Controls.Add(this.btnExecute);\r
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.panel1.Location = new System.Drawing.Point(10, 347);\r
+ this.panel1.Name = "panel1";\r
+ this.panel1.Size = new System.Drawing.Size(296, 62);\r
+ this.panel1.TabIndex = 5;\r
+ this.panel1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick);\r
+ // \r
+ // btnExecute\r
+ // \r
+ this.btnExecute.BackColor = System.Drawing.SystemColors.ActiveCaption;\r
+ this.btnExecute.Dock = System.Windows.Forms.DockStyle.Right;\r
+ this.btnExecute.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.btnExecute.Location = new System.Drawing.Point(164, 0);\r
+ this.btnExecute.Margin = new System.Windows.Forms.Padding(3, 20, 3, 3);\r
+ this.btnExecute.Name = "btnExecute";\r
+ this.btnExecute.Size = new System.Drawing.Size(132, 62);\r
+ this.btnExecute.TabIndex = 0;\r
+ this.btnExecute.Text = "Execute";\r
+ this.btnExecute.UseVisualStyleBackColor = false;\r
+ this.btnExecute.Click += new System.EventHandler(this.OnExecuteClick);\r
+ // \r
+ // splitContainer2\r
+ // \r
+ this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.splitContainer2.Location = new System.Drawing.Point(0, 0);\r
+ this.splitContainer2.Name = "splitContainer2";\r
+ this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;\r
+ // \r
+ // splitContainer2.Panel1\r
+ // \r
+ this.splitContainer2.Panel1.Controls.Add(this.splitContainer1);\r
+ // \r
+ // splitContainer2.Panel2\r
+ // \r
+ this.splitContainer2.Panel2.Controls.Add(this.groupActions);\r
+ this.splitContainer2.Size = new System.Drawing.Size(1022, 561);\r
+ this.splitContainer2.SplitterDistance = 419;\r
+ this.splitContainer2.TabIndex = 2;\r
+ // \r
+ // groupActions\r
+ // \r
+ this.groupActions.BackColor = System.Drawing.Color.Transparent;\r
+ this.groupActions.Controls.Add(this.dataGridJobs);\r
+ this.groupActions.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.groupActions.Location = new System.Drawing.Point(0, 0);\r
+ this.groupActions.Name = "groupActions";\r
+ this.groupActions.Padding = new System.Windows.Forms.Padding(10);\r
+ this.groupActions.Size = new System.Drawing.Size(1022, 138);\r
+ this.groupActions.TabIndex = 1;\r
+ this.groupActions.TabStop = false;\r
+ this.groupActions.Text = "Actions";\r
+ this.groupActions.Enter += new System.EventHandler(this.groupBox_Enter);\r
+ this.groupActions.Leave += new System.EventHandler(this.groupBox_Leave);\r
+ // \r
+ // dataGridJobs\r
+ // \r
+ this.dataGridJobs.AllowUserToAddRows = false;\r
+ this.dataGridJobs.AllowUserToOrderColumns = true;\r
+ this.dataGridJobs.AllowUserToResizeRows = false;\r
+ this.dataGridJobs.AutoGenerateColumns = false;\r
+ this.dataGridJobs.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
+ this.dataGridJobs.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
+ this.dataGridJobs.BackgroundColor = System.Drawing.Color.White;\r
+ this.dataGridJobs.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control;\r
+ dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText;\r
+ dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+ dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+ dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+ this.dataGridJobs.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4;\r
+ this.dataGridJobs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
+ this.dataGridJobs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r
+ this.columnID,\r
+ this.columnStarted,\r
+ this.columnFinished,\r
+ this.columnInput,\r
+ this.columnOutput,\r
+ this.columnProgress,\r
+ this.columnStatus});\r
+ this.dataGridJobs.DataSource = this.bindingSourceJobs;\r
+ dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText;\r
+ dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle8.SelectionForeColor = System.Drawing.Color.Black;\r
+ dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dataGridJobs.DefaultCellStyle = dataGridViewCellStyle8;\r
+ this.dataGridJobs.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.dataGridJobs.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
+ this.dataGridJobs.Location = new System.Drawing.Point(10, 23);\r
+ this.dataGridJobs.Name = "dataGridJobs";\r
+ dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control;\r
+ dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText;\r
+ dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+ dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+ dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+ this.dataGridJobs.RowHeadersDefaultCellStyle = dataGridViewCellStyle9;\r
+ this.dataGridJobs.RowHeadersVisible = false;\r
+ dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dataGridJobs.RowsDefaultCellStyle = dataGridViewCellStyle10;\r
+ this.dataGridJobs.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dataGridJobs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+ this.dataGridJobs.Size = new System.Drawing.Size(1002, 105);\r
+ this.dataGridJobs.TabIndex = 0;\r
+ this.dataGridJobs.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridJobs_CellEnter);\r
+ // \r
+ // columnID\r
+ // \r
+ this.columnID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
+ this.columnID.DataPropertyName = "ID";\r
+ dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.columnID.DefaultCellStyle = dataGridViewCellStyle5;\r
+ this.columnID.Frozen = true;\r
+ this.columnID.HeaderText = "ID";\r
+ this.columnID.Name = "columnID";\r
+ this.columnID.Width = 44;\r
+ // \r
+ // columnStarted\r
+ // \r
+ this.columnStarted.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
+ this.columnStarted.DataPropertyName = "Started";\r
+ this.columnStarted.HeaderText = "Started";\r
+ this.columnStarted.Name = "columnStarted";\r
+ this.columnStarted.Width = 71;\r
+ // \r
+ // columnFinished\r
+ // \r
+ this.columnFinished.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
+ this.columnFinished.DataPropertyName = "Finished";\r
+ this.columnFinished.HeaderText = "Finished";\r
+ this.columnFinished.Name = "columnFinished";\r
+ this.columnFinished.Width = 79;\r
+ // \r
+ // columnInput\r
+ // \r
+ this.columnInput.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
+ this.columnInput.DataPropertyName = "Input";\r
+ this.columnInput.HeaderText = "Input";\r
+ this.columnInput.Name = "columnInput";\r
+ this.columnInput.Width = 59;\r
+ // \r
+ // columnOutput\r
+ // \r
+ this.columnOutput.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
+ this.columnOutput.DataPropertyName = "Output";\r
+ this.columnOutput.HeaderText = "Output";\r
+ this.columnOutput.Name = "columnOutput";\r
+ this.columnOutput.Width = 68;\r
+ // \r
+ // columnProgress\r
+ // \r
+ this.columnProgress.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None;\r
+ this.columnProgress.DataPropertyName = "Progress";\r
+ dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;\r
+ dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle6.NullValue = null;\r
+ this.columnProgress.DefaultCellStyle = dataGridViewCellStyle6;\r
+ this.columnProgress.HeaderText = "Progress";\r
+ this.columnProgress.Name = "columnProgress";\r
+ this.columnProgress.Resizable = System.Windows.Forms.DataGridViewTriState.True;\r
+ this.columnProgress.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;\r
+ this.columnProgress.Width = 200;\r
+ // \r
+ // columnStatus\r
+ // \r
+ this.columnStatus.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
+ this.columnStatus.DataPropertyName = "Status";\r
+ dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.columnStatus.DefaultCellStyle = dataGridViewCellStyle7;\r
+ this.columnStatus.HeaderText = "Status";\r
+ this.columnStatus.Name = "columnStatus";\r
+ this.columnStatus.Width = 66;\r
+ // \r
+ // metadataInfoBindingSource\r
+ // \r
+ this.metadataInfoBindingSource.DataSource = typeof(Maestro.Metadata.MetadataInfo);\r
+ // \r
+ // MaestroForm\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.BackColor = System.Drawing.SystemColors.Control;\r
+ this.ClientSize = new System.Drawing.Size(1022, 561);\r
+ this.Controls.Add(this.splitContainer2);\r
+ this.Icon = global::Maestro.Properties.Resources.AppIcon;\r
+ this.Name = "MaestroForm";\r
+ this.ShowInTaskbar = false;\r
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MaestroForm_FormClosing);\r
+ this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MaestroForm_FormClosed);\r
+ this.Shown += new System.EventHandler(this.MaestroForm_Shown);\r
+ this.Resize += new System.EventHandler(this.MaestroForm_Resize);\r
+ this.groupSource.ResumeLayout(false);\r
+ this.groupSource.PerformLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridSource)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingSource)).EndInit();\r
+ this.tableLayoutPanel2.ResumeLayout(false);\r
+ this.tableLayoutPanel2.PerformLayout();\r
+ this.ctxmActions.ResumeLayout(false);\r
+ this.splitContainer1.Panel1.ResumeLayout(false);\r
+ this.splitContainer1.Panel2.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\r
+ this.splitContainer1.ResumeLayout(false);\r
+ this.splitContainer3.Panel1.ResumeLayout(false);\r
+ this.splitContainer3.Panel2.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();\r
+ this.splitContainer3.ResumeLayout(false);\r
+ this.groupMetadata.ResumeLayout(false);\r
+ this.tabControl1.ResumeLayout(false);\r
+ this.tpOctopus.ResumeLayout(false);\r
+ this.tpTraffic.ResumeLayout(false);\r
+ this.tpTraffic.PerformLayout();\r
+ this.tableLayoutPanel1.ResumeLayout(false);\r
+ this.tableLayoutPanel1.PerformLayout();\r
+ this.groupTarget.ResumeLayout(false);\r
+ this.panel1.ResumeLayout(false);\r
+ this.splitContainer2.Panel1.ResumeLayout(false);\r
+ this.splitContainer2.Panel2.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();\r
+ this.splitContainer2.ResumeLayout(false);\r
+ this.groupActions.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridJobs)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingSourceJobs)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.metadataInfoBindingSource)).EndInit();\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.GroupBox groupSource;\r
+ private System.Windows.Forms.DataGridView dataGridSource;\r
+ private System.Windows.Forms.BindingSource bindingSource;\r
+ private System.Windows.Forms.SplitContainer splitContainer1;\r
+ private System.Windows.Forms.SplitContainer splitContainer2;\r
+ private System.Windows.Forms.SplitContainer splitContainer3;\r
+ private System.Windows.Forms.GroupBox groupMetadata;\r
+ private System.Windows.Forms.GroupBox groupTarget;\r
+ private System.Windows.Forms.Button btnExecute;\r
+ private System.Windows.Forms.TextBox textSelectedSource;\r
+ private System.Windows.Forms.Label labelSelectedMetadata;\r
+ private System.Windows.Forms.TextBox textSelectedMetadata;\r
+ private System.Windows.Forms.TableLayoutPanel panelActions;\r
+ private System.Windows.Forms.GroupBox groupActions;\r
+ private System.Windows.Forms.DataGridView dataGridJobs;\r
+ private System.Windows.Forms.BindingSource bindingSourceJobs;\r
+ private System.Windows.Forms.TabControl tabControl1;\r
+ private System.Windows.Forms.TabPage tpOctopus;\r
+ private OctopusClient.OctopusIDSelector octopusIDSelector;\r
+ private System.Windows.Forms.TabPage tpTraffic;\r
+ private System.Windows.Forms.BindingSource metadataInfoBindingSource;\r
+ private System.Windows.Forms.Panel panel1;\r
+ private MenuButton menuButtonActions;\r
+ private System.Windows.Forms.ContextMenuStrip ctxmActions;\r
+ private System.Windows.Forms.ToolStripMenuItem ctxiDefineSegments;\r
+ private System.Windows.Forms.ToolStripMenuItem ctxiModifyArchiveMetadata;\r
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;\r
+ private System.Windows.Forms.Label label1;\r
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;\r
+ private TrafficClient.TrafficIDSelector trafficIDSelector;\r
+ private System.Windows.Forms.DataGridViewTextBoxColumn columnID;\r
+ private System.Windows.Forms.DataGridViewTextBoxColumn columnStarted;\r
+ private System.Windows.Forms.DataGridViewTextBoxColumn columnFinished;\r
+ private System.Windows.Forms.DataGridViewTextBoxColumn columnInput;\r
+ private System.Windows.Forms.DataGridViewTextBoxColumn columnOutput;\r
+ private Commons.DataGridViewProgressColumn columnProgress;\r
+ private System.Windows.Forms.DataGridViewTextBoxColumn columnStatus;\r
+ private System.Windows.Forms.Button buttonMetadata;\r
+ private System.Windows.Forms.TextBox txtSorceFilter;\r
+ }\r
+}\r
+\r
--- /dev/null
+using Maestro.Configuration;\r
+using Maestro.Metadata;\r
+using OctopusClient;\r
+using System.Linq;\r
+using System;\r
+using DxPlay;\r
+using System.Windows.Forms;\r
+using TrafficClient;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+\r
+namespace Maestro {\r
+ public partial class MaestroForm {\r
+ private MetadataInfo selectedMetadata;\r
+ private List<Segment> segments = new List<Segment>();\r
+\r
+ public MetadataInfo SelectedMetadata {\r
+ get {\r
+ return selectedMetadata;\r
+ }\r
+ set {\r
+ selectedMetadata = value;\r
+ textSelectedMetadata.Text = selectedMetadata.ID;\r
+ }\r
+ }\r
+\r
+ private void InitializeMetadata() {\r
+ InitializeOctopusSelector();\r
+ InitializeTrafficSelector();\r
+ }\r
+\r
+ private void InitializeTrafficSelector() {\r
+ TrafficMetadata metadata = Configuration.Metadatas.Where(m => { return m is TrafficMetadata; }).FirstOrDefault() as TrafficMetadata;\r
+ if (metadata == null)\r
+ return;\r
+ trafficIDSelector.Configuration = new TrafficConfiguration() {\r
+ Address = metadata.Server.Address,\r
+ UserName = metadata.Server.UserName,\r
+ Password = metadata.Server.Password,\r
+ Timeout = metadata.Server.Timeout\r
+ };\r
+ trafficIDSelector.IDChangedEvent += TrafficIDSelected;\r
+ }\r
+\r
+ private void InitializeOctopusSelector() {\r
+ OctopusMetadata metadata = Configuration.Metadatas.Where(m => { return m is OctopusMetadata; }).FirstOrDefault() as OctopusMetadata;\r
+ if (metadata == null)\r
+ return;\r
+ octopusIDSelector.Configuration = new OctopusConfiguration() {\r
+ Address = metadata.Server.Address,\r
+ UserName = metadata.Server.UserName,\r
+ Password = metadata.Server.Password,\r
+ Timeout = metadata.Server.Timeout\r
+ };\r
+ octopusIDSelector.IDChangedEvent += OnOctopusIDSelected;\r
+ }\r
+\r
+ private void OnOctopusIDSelected(string selectedID) {\r
+ SelectedMetadata = new MetadataInfo() {\r
+ Kind = MetadataType.OctopusStory,\r
+ Tooltip = "Story ID",\r
+ ID = selectedID\r
+ };\r
+ }\r
+\r
+ private void OnDefineSegmentsClick(object sender, EventArgs e) {\r
+ if (SelectedSource?.FileInfo == null)\r
+ return;\r
+ Cursor = Cursors.WaitCursor;\r
+ BindingList<MovieSegment> movieSegments = GetMovieSegmentsFromSegments();\r
+ PlayerForm player = new PlayerForm(ref movieSegments);\r
+ player.AutoStart = Configuration.Player.AutoStart;\r
+ player.SegmentEditor = Configuration.Player.SegmentEditor;\r
+ player.Open(SelectedSource.FileInfo);\r
+ Cursor = Cursors.Default;\r
+ player.ShowDialog();\r
+ ConvertMovieSegmentsToSegments(movieSegments);\r
+ }\r
+\r
+ private void ConvertMovieSegmentsToSegments(BindingList<MovieSegment> movieSegments) {\r
+ foreach (MovieSegment actual in movieSegments) {\r
+ Segment actualSegment = segmentConverter.ConvertToSegment(actual);\r
+ segments.Add(actualSegment);\r
+ }\r
+ }\r
+\r
+ private BindingList<MovieSegment> GetMovieSegmentsFromSegments() {\r
+ BindingList<MovieSegment> result = new BindingList<MovieSegment>();\r
+ TrafficAPI trafficApi = trafficIDSelector.trafficAPI;\r
+ List<Segment> segments = trafficApi.GetSegmentReady(selectedMetadata.VariantID);\r
+ if (segments != null)\r
+ foreach (Segment segment in segments) {\r
+ MovieSegment movieSegment = segmentConverter.ConvertToMovieSegment(segment);\r
+ result.Add(movieSegment);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private void TrafficIDSelected(string selectedID, int variantID) {\r
+ SelectedMetadata = new MetadataInfo() {\r
+ Kind = MetadataType.Traffic,\r
+ Tooltip = "Epizod ID",\r
+ ID = selectedID,\r
+ VariantID = variantID\r
+ };\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using DxPlay;\r
+using Maestro.Configuration;\r
+using Maestro.Metadata;\r
+using Maestro.Sources;\r
+using Maestro.Sources.Messages;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Collections.ObjectModel;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Windows.Forms;\r
+using System.Text;\r
+\r
+namespace Maestro {\r
+ public partial class MaestroForm {\r
+ private ISource source;\r
+ private SourceInfo selectedSource;\r
+ private string startingName;\r
+ private List<String> selectedSources = new List<string>();\r
+\r
+ //todo rename\r
+ public bool IsTrafficID { get; set; }\r
+\r
+ public SourceInfo SelectedSource {\r
+ get {\r
+ return selectedSource;\r
+ }\r
+ set {\r
+ selectedSource = value;\r
+ textSelectedSource.Text = selectedSource.Name;\r
+ }\r
+ }\r
+\r
+ private void InitializeSource() {\r
+ Uri address = Configuration?.Source?.Local?.Address;\r
+\r
+ if (Configuration?.Source is UNCSource) {\r
+ logger.Debug("UNC source initialization");\r
+ source = new FileSystemSource(this, MessageBus);\r
+ logger.Debug("UNC source created");\r
+ }\r
+ if (Configuration?.Source is NEXIOSource) {\r
+ logger.Debug("NEXIO source initialization");\r
+ source = new NexioRESTSource(this, MessageBus);\r
+ logger.Debug("NEXIO source created");\r
+ }\r
+\r
+ MessageBus.Subscribe<CreateFileActionMsg>(OnFileInvolved);\r
+ MessageBus.Subscribe<ModifyFileActionMsg>(OnFileInvolved);\r
+\r
+ source.Startup(address);\r
+ bindingSource.DataSource = source;\r
+ dataGridSource.Columns.AddRange(new DataGridViewCheckBoxColumn());\r
+ dataGridSource.Columns.AddRange(source.Columns);\r
+ }\r
+\r
+ private void OnFileInvolved(FileActionMsg m) {\r
+ Collection<ISourceItem> source = bindingSource.DataSource as Collection<ISourceItem>;\r
+ if (source == null)\r
+ return;\r
+ ISourceItem item = source.Where(x => x.Name.Equals(m.FileName)).SingleOrDefault();\r
+ if (item == null)\r
+ return;\r
+\r
+ item.IsHighlighted = true;\r
+ }\r
+\r
+ private void dataGridSource_CellMouseEnter(object sender, DataGridViewCellEventArgs e) {\r
+ if (e.RowIndex == -1)\r
+ return;\r
+ DataGridView gridView = sender as DataGridView;\r
+ if (gridView == null)\r
+ return;\r
+ DataGridViewColumn currentColumn = gridView.Columns[e.ColumnIndex];\r
+ if (currentColumn.GetType() == typeof(DataGridViewImageColumn))\r
+ dataGridSource.Cursor = Cursors.Hand;\r
+ }\r
+\r
+ private void dataGridSource_CellMouseLeave(object sender, DataGridViewCellEventArgs e) {\r
+ if (e.ColumnIndex != 2)\r
+ return;\r
+ dataGridSource.Cursor = Cursors.Default;\r
+ }\r
+\r
+ private void dataGridSource_CellEnter(object sender, DataGridViewCellEventArgs e) {\r
+ ISourceItem item = bindingSource.Current as ISourceItem;\r
+ if (item == null || e.RowIndex < 0 || e.ColumnIndex < 0)\r
+ return;\r
+ item.IsHighlighted = false;\r
+ }\r
+\r
+ private void sourceGridView_SelectionChanged(object sender, EventArgs e) {\r
+ }\r
+\r
+ private void sourceGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) {\r
+ var selectedItem = bindingSource.Current;\r
+ if (selectedItem == null) {\r
+ return;\r
+ }\r
+ if (e.ColumnIndex == 0) {\r
+ SetSourceFromCheckBoxAction(sender, selectedItem);\r
+ return;\r
+ }\r
+ if (e.ColumnIndex != 3)\r
+ return;\r
+ FileSourceItem fileSourceItem = selectedItem as FileSourceItem;\r
+ if (fileSourceItem == null)\r
+ return;\r
+ Cursor = Cursors.WaitCursor;\r
+ BeginInvoke(new Action(() => {\r
+ PlayerForm player = new PlayerForm();\r
+ player.AutoStart = Configuration.Player.AutoStart;\r
+ player.Open(fileSourceItem.FileInfo);\r
+ player.ShowDialog();\r
+ Cursor = Cursors.Default;\r
+ }));\r
+ }\r
+\r
+ private void SetSourceFromCheckBoxAction(object sender, object selectedItem) {\r
+ String name;\r
+ NexioSourceItem n = selectedItem as NexioSourceItem;\r
+ if (n == null) {\r
+ FileSourceItem f = selectedItem as FileSourceItem;\r
+ name = f.Name;\r
+ } else name = n.Name;\r
+\r
+ DataGridView gridView = sender as DataGridView;\r
+ var cells = gridView.SelectedCells;\r
+ if (cells.Count <= 0)\r
+ return;\r
+ DataGridViewCheckBoxCell checkBoxCell = cells[0] as DataGridViewCheckBoxCell;\r
+ checkBoxCell.Value = (checkBoxCell.Value == null || checkBoxCell.Value.Equals(false)) ? true : false;\r
+ if (checkBoxCell.Value.Equals(false))\r
+ selectedSources.Remove(name);\r
+ else\r
+ selectedSources.Add(name);\r
+ SetTextSelectedSourceTextFromCheckBoxes();\r
+ SetMetadataButtonEnabled((bool)checkBoxCell.Value);\r
+ }\r
+\r
+ private void SetMetadataButtonEnabled(bool checkBox) {\r
+ SetStartingName(checkBox);\r
+ if (selectedSources == null || selectedSources.Count == 0) {\r
+ buttonMetadata.Enabled = false;\r
+ IsSelectedIDTrafficID();\r
+ return;\r
+ }\r
+ if (selectedSources.Count == 1) {\r
+ buttonMetadata.Enabled = true;\r
+ IsSelectedIDTrafficID();\r
+ return;\r
+ }\r
+\r
+ for (int i = 1; i < selectedSources.Count; i++) {\r
+ string name = selectedSources[i];\r
+ if (!name.StartsWith(String.Format("{0}-", startingName)) &&\r
+ !name.StartsWith(String.Format("{0}_", startingName)) &&\r
+ !name.StartsWith(String.Format("{0}.", startingName))) {\r
+ buttonMetadata.Enabled = false;\r
+ return;\r
+ }\r
+ }\r
+ buttonMetadata.Enabled = true;\r
+ IsSelectedIDTrafficID();\r
+ }\r
+\r
+ private void SetStartingName(bool checkBox) {\r
+ if (!checkBox) {\r
+ startingName = null;\r
+ return;\r
+ }\r
+ if (selectedSources == null || selectedSources.Count == 0)\r
+ return;\r
+ string query = selectedSources[0];\r
+ int separatorPosition = query.IndexOf("-") == -1 ? query.IndexOf("_") : query.IndexOf("-");\r
+ int dotPosition = query.IndexOf(".");\r
+ startingName = separatorPosition == -1 ? query.Substring(0, dotPosition) : query.Substring(0, separatorPosition);\r
+ }\r
+\r
+ private void SetTextSelectedSourceTextFromCheckBoxes() {\r
+ StringBuilder builder = new StringBuilder();\r
+ foreach (String actual in selectedSources)\r
+ builder.Append(String.Format("{0} ", actual));\r
+ SelectedSource = new SourceInfo() {\r
+ Name = builder.ToString()\r
+ };\r
+ SetSelectedSourceFileInfo(SelectedSource);\r
+ ApplyProcessorButtonsLogic();\r
+ }\r
+\r
+ private void SetSelectedSourceFileInfo(SourceInfo selectedSource) {\r
+ if (selectedSources.Count == 1)\r
+ selectedSource.FileInfo = new System.IO.FileInfo(selectedSources[0]);\r
+ }\r
+\r
+ private void dataGridSource_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {\r
+ if (e.RowIndex < 0)\r
+ return;\r
+ ISourceItem item = dataGridSource.Rows[e.RowIndex].DataBoundItem as ISourceItem;\r
+ if (item == null)\r
+ return;\r
+ DataGridViewRow row = dataGridSource.Rows[e.RowIndex];\r
+ if (item.IsHighlighted) {\r
+ row.DefaultCellStyle.BackColor = Color.DarkGreen;\r
+ row.DefaultCellStyle.ForeColor = Color.White;\r
+ } else {\r
+ row.DefaultCellStyle = null;\r
+ }\r
+ }\r
+\r
+ private void dataGridSource_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) {\r
+ if (e.RowIndex < 0)\r
+ return;\r
+ ISourceItem item = dataGridSource.Rows[e.RowIndex].DataBoundItem as ISourceItem;\r
+ SelectedSource = new SourceInfo() {\r
+ FileInfo = (item as FileSourceItem)?.FileInfo,\r
+ Name = item.Name\r
+ };\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using Maestro.Configuration;\r
+using Maestro.Sources;\r
+using Maestro.Targets;\r
+using System;\r
+using System.Linq;\r
+using System.Windows.Forms;\r
+using Maestro.Metadata;\r
+using System.Collections.Generic;\r
+using System.Text.RegularExpressions;\r
+using TrafficClient;\r
+\r
+namespace Maestro {\r
+ public partial class MaestroForm {\r
+\r
+ private SegmentConverter segmentConverter;\r
+\r
+ private void InitializeTarget() {\r
+ btnExecute.Enabled = false;\r
+ if (Configuration.Targets == null)\r
+ return;\r
+ foreach (Target target in Configuration.Targets) {\r
+ CreateTarget(target);\r
+ }\r
+\r
+ textSelectedSource.ReadOnly = !Configuration.IsAdmin;\r
+ textSelectedMetadata.ReadOnly = !Configuration.IsAdmin;\r
+ ApplyProcessorButtonsLogic();\r
+ segmentConverter = new SegmentConverter();\r
+ }\r
+\r
+ private void CreateTarget(Target target) {\r
+ logger.Debug("Creating target {0}", target);\r
+ CheckBox checkBox = new CheckBox() {\r
+ Appearance = Appearance.Button,\r
+ Text = target.Label,\r
+ UseVisualStyleBackColor = true,\r
+ Dock = DockStyle.Top\r
+ };\r
+ checkBox.CheckStateChanged += (s, e) => {\r
+ if (checkBox.Checked) {\r
+ List<ITargetProcessor> processors = new List<ITargetProcessor>();\r
+ foreach (String actual in selectedSources) {\r
+ string typeName = string.Format("{0}.{1}", typeof(ITargetProcessor).Namespace, target.Processor);\r
+ Type type = Type.GetType(typeName);\r
+\r
+ //ISourceItem actualFile = new FileSourceItem() { FileInfo = new System.IO.FileInfo(actual), };\r
+ ISourceItem selectedFile = GetSourceItemFromBindingSource(actual);//bindingSource.Current as ISourceItem;\r
+ string id = selectedMetadata.ID;\r
+ object[] parameters = new object[] { this, Configuration.Source, target, selectedFile.Name, id, segments };\r
+ ITargetProcessor processor = (ITargetProcessor)Activator.CreateInstance(type, parameters);\r
+ processors.Add(processor);\r
+ }\r
+ currentProcessors.Add(checkBox, processors);\r
+ } else\r
+ currentProcessors.Remove(checkBox);\r
+\r
+ btnExecute.Enabled = currentProcessors.Count > 0;\r
+ };\r
+ \r
+ panelActions.Controls.Add(checkBox);\r
+ panelActions.RowCount = panelActions.Controls.Count;\r
+ \r
+ }\r
+\r
+ private ISourceItem GetSourceItemFromBindingSource(string actual) {\r
+ ISourceItem result = null;\r
+ foreach (ISourceItem actualSource in bindingSource) {\r
+ if (actualSource.Name.Equals(actual))\r
+ result = actualSource;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private void OnInfoTextChanged(object sender, EventArgs e) {\r
+ ApplyProcessorButtonsLogic();\r
+ ApplyMetaDataButtonLogic();\r
+ }\r
+\r
+ private void ApplyMetaDataButtonLogic() {\r
+ if (selectedSources.Count <= 0) {\r
+ buttonMetadata.Enabled = false;\r
+ return;\r
+ }\r
+ if (selectedSources.Count == 1)\r
+ buttonMetadata.Enabled = true;\r
+ else {\r
+ String calculatedHouseID = selectedSources[0];\r
+ foreach (String actual in selectedSources)\r
+ if (!actual.StartsWith(calculatedHouseID))\r
+ buttonMetadata.Enabled = false;\r
+ }\r
+ }\r
+\r
+ private void ChangeProcessButtonsState(bool enabled) {\r
+ if (panelActions.Controls == null)\r
+ return;\r
+ foreach (Control c in panelActions.Controls)\r
+ c.Enabled = enabled;\r
+ }\r
+\r
+ private void ApplyProcessorButtonsLogic() {\r
+ ClearSelectedProcessors();\r
+ if (!String.IsNullOrEmpty(textSelectedMetadata.Text) && !String.IsNullOrEmpty(textSelectedMetadata.Text)) {\r
+ ChangeProcessButtonsState(true);\r
+ } else {\r
+ ChangeProcessButtonsState(false);\r
+ }\r
+\r
+\r
+ if (Configuration.Player != null)\r
+ ctxiDefineSegments.Enabled = SelectedSource?.FileInfo != null && Configuration.Player.SegmentEditor && MetadataType.Traffic.Equals(SelectedMetadata?.Kind);\r
+ IsSelectedIDTrafficID();\r
+ }\r
+\r
+ private void IsSelectedIDTrafficID() {\r
+ if (String.IsNullOrEmpty(startingName))\r
+ return;\r
+ \r
+ //kisbetük kellenek?\r
+ string pattern = "[A-Z]{1}[0-9]{6}[A-Z]{1}";\r
+ Match match = Regex.Match(startingName, pattern);\r
+ IsTrafficID = match.Success;\r
+ }\r
+\r
+ public void OnTargetPanelsMouseClick(object sender, MouseEventArgs e) {\r
+ (sender as Control).Select();\r
+ }\r
+\r
+ private void ClearSelectedProcessors() {\r
+ currentProcessors.Keys.ToList().ForEach(c => c.Checked = false);\r
+ }\r
+\r
+ private void OnExecuteClick(object sender, EventArgs e) {\r
+ foreach (var element in currentProcessors) \r
+ foreach (ITargetProcessor value in element.Value) {\r
+ jobs.Add(value);\r
+ jobsQueue.Add(value);\r
+ }\r
+ \r
+ ClearSelectedProcessors();\r
+ if (processorWorker == null)\r
+ CreateJobsQueueWorker();\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using LinkDotNet.MessageHandling.Contracts;\r
+using Maestro.Commons;\r
+using Maestro.Configuration;\r
+using Maestro.Targets;\r
+using NLog;\r
+using System;\r
+using System.Collections.Concurrent;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Windows.Forms;\r
+using System.Threading;\r
+using TrafficClient;\r
+using OctopusClient;\r
+using System.Linq;\r
+\r
+namespace Maestro {\r
+\r
+ public delegate void Clear();\r
+\r
+ public partial class MaestroForm : Form {\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
+ private GroupBox[] groups;\r
+ private Dictionary<CheckBox, List<ITargetProcessor>> currentProcessors = new Dictionary<CheckBox, List<ITargetProcessor>>();\r
+ private BindingList<ITargetProcessor> jobs = new BindingList<ITargetProcessor>();\r
+ private BlockingCollection<ITargetProcessor> jobsQueue = new BlockingCollection<ITargetProcessor>();\r
+ private BackgroundWorker processorWorker;\r
+ public IMessageBus MessageBus { get; set; }\r
+ public ConfigurationInfo Configuration;\r
+ private TraficMetadataSelected trafficMetadataSelected;\r
+ private OctopusMetadataSelected octopusMetadataSelected;\r
+\r
+ public Clear clear;\r
+\r
+ public bool CanExecute {\r
+ get {\r
+ return currentProcessors.Count > 0;\r
+ }\r
+ }\r
+\r
+ public MaestroForm() {\r
+ InitializeComponent();\r
+ trafficIDSelector.clearCheckBox = octopusIDSelector.ClearEveryCheckBox;\r
+ octopusIDSelector.clearCheckBox = trafficIDSelector.ClearSelectionSource;\r
+ groups = new GroupBox[] { groupSource, groupMetadata, groupTarget, groupActions };\r
+ trafficMetadataSelected = TrafficIDSelected;\r
+ octopusMetadataSelected = OnOctopusIDSelected;\r
+ }\r
+\r
+ private void InitializeControlTexts() {\r
+ groupSource.Text = StringResources.FORRAS_FAJL;\r
+ groupMetadata.Text = StringResources.METAADAT;\r
+ groupTarget.Text = StringResources.CEL_AKCIO;\r
+ label1.Text = StringResources.KIVALASZTOTT_FORRAS;\r
+ labelSelectedMetadata.Text = StringResources.KIVALASZTOTT_METAADAT;\r
+ btnExecute.Text = StringResources.VEGREHAJT;\r
+ menuButtonActions.Text = StringResources.AKCIOK;\r
+ groupActions.Text = StringResources.AKCIOK;\r
+ columnStarted.HeaderText = StringResources.KEZDES;\r
+ columnFinished.HeaderText = StringResources.BEFEJEZES;\r
+ columnInput.HeaderText = StringResources.BEMENET;\r
+ columnOutput.HeaderText = StringResources.KIMENET;\r
+ columnProgress.HeaderText = StringResources.ALLAPOT;\r
+ columnStatus.HeaderText = StringResources.STATUSZ;\r
+ ctxiDefineSegments.Text = StringResources.SZEGMENS_LETREHOZASA;\r
+ ctxiModifyArchiveMetadata.Text = StringResources.ARCHÍV_METAADATOK_MODOSITASA;\r
+ buttonMetadata.Text = StringResources.METAADAT;\r
+ }\r
+\r
+ private void InitializeComponents() {\r
+ InitializeSource();\r
+ InitializeMetadata();\r
+ InitializeTarget();\r
+ InitializeJobs();\r
+ InitializeControlTexts();\r
+ }\r
+\r
+ private void InitializeJobs() {\r
+ bindingSourceJobs.DataSource = jobs;\r
+ foreach (DataGridViewColumn column in dataGridJobs.Columns) {\r
+ column.HeaderCell.Style.Font = new Font(dataGridJobs.Font, FontStyle.Regular);\r
+ }\r
+ }\r
+\r
+ private void MaestroForm_Resize(object sender, EventArgs e) {\r
+ if (WindowState == FormWindowState.Minimized) {\r
+ Visible = false;\r
+ }\r
+ }\r
+\r
+ private void MaestroForm_FormClosing(object sender, FormClosingEventArgs e) {\r
+ Visible = false;\r
+ e.Cancel = true;\r
+ }\r
+\r
+ private void CreateJobsQueueWorker() {\r
+ processorWorker = new BackgroundWorker() {\r
+ WorkerSupportsCancellation = true\r
+ };\r
+ processorWorker.DoWork += (s, e) => {\r
+ while (!e.Cancel) {\r
+ ITargetProcessor job;\r
+ if (jobsQueue.TryTake(out job)) {\r
+ (this).SafeCall(() => {\r
+ int position = jobs.IndexOf(job);\r
+ bindingSourceJobs.Position = position;\r
+ dataGridJobs.FirstDisplayedScrollingRowIndex = position;\r
+ });\r
+ job.Execute();\r
+ } else {\r
+ Thread.Sleep(100);\r
+ }\r
+ }\r
+ };\r
+ processorWorker.RunWorkerAsync();\r
+ }\r
+\r
+ private void groupBox_Enter(object sender, EventArgs e) {\r
+ Control control = sender as Control;\r
+ control.Font = new Font(control.Font, FontStyle.Bold);\r
+ control.BackColor = Color.White;\r
+ }\r
+\r
+ private void groupBox_Leave(object sender, EventArgs e) {\r
+ Control control;\r
+ if (sender is TabControl)\r
+ control = (sender as Control).Parent;\r
+ else\r
+ control = sender as Control;\r
+ control.Font = new Font(control.Font, FontStyle.Regular);\r
+ control.BackColor = Color.Transparent;\r
+ }\r
+\r
+ private void MaestroForm_FormClosed(object sender, FormClosedEventArgs e) {\r
+ if (processorWorker != null) {\r
+ processorWorker.CancelAsync();\r
+ }\r
+ }\r
+\r
+ private void dataGridJobs_CellEnter(object sender, DataGridViewCellEventArgs e) {\r
+ ITargetProcessor item = bindingSourceJobs.Current as ITargetProcessor;\r
+ if (item == null || e.RowIndex < 0 || e.ColumnIndex < 0)\r
+ return;\r
+ DataGridViewCell cell = dataGridJobs.Rows[e.RowIndex].Cells[e.ColumnIndex];\r
+ cell.ToolTipText = item.Message;\r
+ }\r
+\r
+ private void MaestroForm_Shown(object sender, EventArgs e) {\r
+ Text = Configuration.Title;\r
+ InitializeComponents();\r
+ }\r
+\r
+ private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) {\r
+ //TabControl actual = sender as TabControl;\r
+ //if (actual.SelectedIndex == 1) \r
+ // if (!traffiTabcInitialized) {\r
+ // trafficIDSelector.RefreshDataGridSource();\r
+ // traffiTabcInitialized = true;\r
+ // }\r
+ }\r
+\r
+\r
+ private void textBox1_KeyUp(object sender, KeyEventArgs e) {\r
+ if (e.KeyCode != Keys.Return)\r
+ return;\r
+ if (String.IsNullOrEmpty(txtSorceFilter.Text))\r
+ bindingSource.RemoveFilter();\r
+ else\r
+ bindingSource.Filter = txtSorceFilter.Text;\r
+ }\r
+\r
+ private void buttonMetadata_Click(object sender, EventArgs e) {\r
+ IsSelectedIDTrafficID();\r
+ if (IsTrafficID)\r
+ SetTrafficIDToMetadataText();\r
+ else\r
+ SetOctopusIDToMetadataText();\r
+ }\r
+\r
+ private void SetOctopusIDToMetadataText() {\r
+ OctopusAPI api = octopusIDSelector.GetClient();\r
+ IEnumerable<Story> stories = api.GetStoriesById(startingName);\r
+ Cursor.Current = Cursors.WaitCursor;\r
+ ProcessOctopusResult(stories, api);\r
+ }\r
+\r
+ private void ProcessOctopusResult(IEnumerable<Story> stories, OctopusAPI api) {\r
+ if (stories == null) {\r
+ SearchMosIDs(api);\r
+ return;\r
+ }\r
+ List<Story> list = stories.ToList();\r
+ if (list.Count == 1) {\r
+ //textSelectedMetadata.Text = list[0].ID;\r
+ //return;\r
+ SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected);\r
+ box.ShowDialog();\r
+ }\r
+ //SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected);\r
+ //box.ShowDialog();\r
+\r
+ }\r
+\r
+ private void SearchMosIDs(OctopusAPI api) {\r
+ IEnumerable<MosObject> mosIDs = api.GetMosObjectsByID(startingName);\r
+ List<MosObject> list = mosIDs.ToList();\r
+ if (list == null || list.Count == 0) {\r
+ MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
+ return;\r
+ } if (list.Count == 1) {\r
+ SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected);\r
+ box.ShowDialog();\r
+ //textSelectedMetadata.Text = list[0].ID;\r
+ //return;\r
+ }\r
+ //SearchMessageBox box = new SearchMessageBox(list, octopusMetadataSelected);\r
+ //box.ShowDialog();\r
+\r
+ }\r
+\r
+ private void SetTrafficIDToMetadataText() {\r
+ TrafficAPI api = trafficIDSelector.trafficAPI;\r
+ Cursor.Current = Cursors.WaitCursor;\r
+ List<MamResultWrapper> result = api.Search(startingName, null, null, true);\r
+ ProcessMamResults(result);\r
+ }\r
+\r
+ private void ProcessMamResults(List<MamResultWrapper> result) {\r
+ if (result == null || result.Count == 0) {\r
+ MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
+ return;\r
+ }\r
+ if (result.Count == 1) {\r
+ textSelectedMetadata.Text = result[0].MediaID;\r
+ return;\r
+ }\r
+ SearchResult searchResult = new SearchResult(result, trafficMetadataSelected);\r
+ searchResult.ShowDialog();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="bindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="ctxmActions.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>512, 17</value>\r
+ </metadata>\r
+ <metadata name="columnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="columnStarted.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="columnFinished.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="columnInput.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="columnOutput.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="columnProgress.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="columnStatus.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>True</value>\r
+ </metadata>\r
+ <metadata name="bindingSourceJobs.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>154, 17</value>\r
+ </metadata>\r
+ <metadata name="metadataInfoBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>309, 17</value>\r
+ </metadata>\r
+ <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>59</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+using LinkDotNet.MessageHandling.Contracts;\r
+using Maestro.Configuration;\r
+using Maestro.Sources.Messages;\r
+using System;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+ public class MeastroFormNotifyIcon {\r
+ private NotifyIcon notification = new NotifyIcon();\r
+ private MaestroForm form = new MaestroForm();\r
+\r
+ public ConfigurationInfo Config { get; private set; }\r
+\r
+ public MeastroFormNotifyIcon(ConfigurationInfo config, IMessageBus messageBus) {\r
+ Config = config;\r
+ form.Configuration = config;\r
+ form.MessageBus = messageBus;\r
+\r
+ messageBus.Subscribe<CreateFileActionMsg>(OnFileCreated);\r
+ messageBus.Subscribe<RemoveFileActionMsg>(OnFileRemoved);\r
+ messageBus.Subscribe<ModifyFileActionMsg>(OnFileModified);\r
+\r
+ notification.Icon = System.Drawing.SystemIcons.Information;\r
+ notification.Click += Notification_Click;\r
+ notification.BalloonTipClicked += Notification_BalloonTipClicked;\r
+ }\r
+\r
+ private void OnFileCreated(FileActionMsg m) {\r
+ if (!form.Equals(m.Source))\r
+ return;\r
+ Show(String.Format("File {0} created in source {1}", m.FileName, m.Source.Text));\r
+ }\r
+\r
+ private void OnFileModified(FileActionMsg m) {\r
+ if (!form.Equals(m.Source))\r
+ return;\r
+ Show(String.Format("File {0} modified in source {1}", m.FileName, m.Source.Text));\r
+ }\r
+\r
+ private void OnFileRemoved(FileActionMsg m) {\r
+ if (!form.Equals(m.Source))\r
+ return;\r
+ Show(String.Format("File {0} removed in source {1}", m.FileName, m.Source.Text));\r
+ }\r
+\r
+ public void Show(string tooltipText) {\r
+ if (tooltipText == null)\r
+ return;\r
+ notification.BalloonTipText = tooltipText;\r
+ notification.Visible = true;\r
+ notification.ShowBalloonTip(3);\r
+ }\r
+\r
+ public void ShowForm() {\r
+ notification.Visible = false;\r
+ if (!form.Visible)\r
+ form.Show();\r
+ if (form.WindowState == FormWindowState.Minimized)\r
+ form.WindowState = FormWindowState.Normal;\r
+ form.BringToFront();\r
+ form.Activate();\r
+ }\r
+\r
+ public void BeginShowForm() {\r
+ Task.Run(() => {\r
+ ShowForm(); \r
+ });\r
+ }\r
+\r
+ public void HideForm() {\r
+ notification.Visible = false;\r
+ if (form.Visible)\r
+ form.Hide();\r
+ }\r
+\r
+ private void Notification_BalloonTipClicked(object sender, EventArgs e) {\r
+ ShowForm();\r
+ }\r
+\r
+ private void Notification_Click(object sender, EventArgs e) {\r
+ ShowForm();\r
+ }\r
+\r
+ internal void CloseForm() {\r
+ notification.Dispose();\r
+ form.Close();\r
+ form.Dispose();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+ public class MenuButton : Button {\r
+ [DefaultValue(null)]\r
+ public ContextMenuStrip Menu { get; set; }\r
+\r
+ [DefaultValue(false)]\r
+ public bool ShowMenuUnderCursor { get; set; }\r
+\r
+ protected override void OnMouseDown(MouseEventArgs mevent) {\r
+ base.OnMouseDown(mevent);\r
+\r
+ if (Menu != null && mevent.Button == MouseButtons.Left) {\r
+ Point menuLocation;\r
+\r
+ if (ShowMenuUnderCursor) {\r
+ menuLocation = mevent.Location;\r
+ } else {\r
+ menuLocation = new Point(0, Height);\r
+ }\r
+\r
+ Menu.Show(this, menuLocation);\r
+ }\r
+ }\r
+\r
+ protected override void OnPaint(PaintEventArgs pevent) {\r
+ base.OnPaint(pevent);\r
+\r
+ if (Menu != null) {\r
+ int arrowX = ClientRectangle.Width - 14;\r
+ int arrowY = ClientRectangle.Height / 2 - 1;\r
+\r
+ Brush brush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ButtonShadow;\r
+ Point[] arrows = new Point[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) };\r
+ pevent.Graphics.FillPolygon(brush, arrows);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+namespace Maestro.Metadata {\r
+ public class MetadataInfo {\r
+ public string ID { get; set; }\r
+ public string Tooltip { get; set; }\r
+ public MetadataType Kind { get; set; }\r
+ public int VariantID { get; set; }\r
+ }\r
+}\r
--- /dev/null
+namespace Maestro.Metadata {\r
+ public enum MetadataType {\r
+ OctopusStory, OctopusPlaceHolder, Traffic, Archive\r
+ }\r
+}\r
--- /dev/null
+using LinkDotNet.MessageHandling;\r
+using LinkDotNet.MessageHandling.Contracts;\r
+using Maestro.Configuration;\r
+using Maestro.Properties;\r
+using NLog;\r
+using System;\r
+using System.Collections.Concurrent;\r
+using System.Collections.Generic;\r
+using System.Drawing;\r
+using System.IO;\r
+using System.Reflection;\r
+using System.Threading;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+\r
+ static class Program {\r
+\r
+ /// <summary>\r
+ /// The main entry point for the application.\r
+ /// </summary>\r
+ [STAThread]\r
+ static void Main() {\r
+ Application.EnableVisualStyles();\r
+ Application.SetCompatibleTextRenderingDefault(false);\r
+ Application.Run(new TrayApplicationContext());\r
+ }\r
+ }\r
+\r
+ public class TrayApplicationContext : ApplicationContext {\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
+ private NotifyIcon trayIcon;\r
+ private ConcurrentBag<MeastroFormNotifyIcon> forms = new ConcurrentBag<MeastroFormNotifyIcon>();\r
+ private IMessageBus messageBus = new MessageBus();\r
+\r
+ public TrayApplicationContext() {\r
+ Splash splash = new Splash();\r
+ Task.Run(() => {\r
+ Application.Run(splash);\r
+ });\r
+\r
+ CreateForms();\r
+ CreateTrayIcon();\r
+ }\r
+\r
+ private void CreateForms() {\r
+ string[] files = Directory.GetFiles("./Resources", "*.json");\r
+ if (files.Length == 0) {\r
+ MessageBox.Show("Hiányos konfiguráció!");\r
+ Application.Exit();\r
+ }\r
+ foreach (String file in files) {\r
+ CreateForm(file);\r
+ }\r
+ if (forms.Count == 0) {\r
+ MessageBox.Show("Hiányos konfiguráció!");\r
+ TerminateApplication();\r
+ }\r
+ }\r
+\r
+ private void CreateForm(string file) {\r
+ try {\r
+ ConfigurationInfo config = Loader.Get(file);\r
+ if (!config.Active)\r
+ return;\r
+ MeastroFormNotifyIcon form = new MeastroFormNotifyIcon(config, messageBus);\r
+ forms.Add(form);\r
+ if (!config.StartInTray)\r
+ form.ShowForm();\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e);\r
+ MessageBox.Show(e.Message);\r
+ }\r
+ }\r
+\r
+ private List<MenuItem> CreateMenuItems() {\r
+ List<MenuItem> menuItems = new List<MenuItem>();\r
+ menuItems.Add(new MenuItem("Mindet megjeleníti", ShowAll));\r
+ menuItems.Add(new MenuItem("Mindet elrejti", HideAll));\r
+ menuItems.Add(new MenuItem("-"));\r
+ foreach (MeastroFormNotifyIcon form in forms) {\r
+ menuItems.Add(new MenuItem(form.Config.Title, (s, e) => {\r
+ form.ShowForm();\r
+ }));\r
+ }\r
+ if (forms.Count > 0)\r
+ menuItems.Add(new MenuItem("-"));\r
+ menuItems.Add(new MenuItem("Kilépés", Exit));\r
+ return menuItems;\r
+ }\r
+\r
+ private void CreateTrayIcon() {\r
+\r
+ List<MenuItem> menuItems = CreateMenuItems();\r
+ trayIcon = new NotifyIcon() {\r
+ Icon = Resources.AppIcon,\r
+ ContextMenu = new ContextMenu(menuItems.ToArray()),\r
+ Visible = true\r
+ };\r
+ trayIcon.Click += TrayIcon_Click;\r
+ }\r
+\r
+ private void TrayIcon_Click(object sender, EventArgs e) {\r
+ MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);\r
+ mi.Invoke(sender as NotifyIcon, null);\r
+ }\r
+\r
+ private void ShowAllForms() {\r
+ foreach (MeastroFormNotifyIcon form in forms) {\r
+ form.ShowForm();\r
+ }\r
+ }\r
+\r
+ private void ShowAll(object sender, EventArgs e) {\r
+ ShowAllForms();\r
+ }\r
+\r
+ private void HideAll(object sender, EventArgs e) {\r
+ foreach (MeastroFormNotifyIcon form in forms) {\r
+ form.HideForm();\r
+ }\r
+ }\r
+\r
+ void Exit(object sender, EventArgs e) {\r
+ TerminateApplication();\r
+ }\r
+\r
+ private void TerminateApplication() {\r
+ foreach (MeastroFormNotifyIcon form in forms) {\r
+ form.CloseForm();\r
+ }\r
+ trayIcon.Visible = false;\r
+ trayIcon.Dispose();\r
+ Application.Exit();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+// General Information about an assembly is controlled through the following\r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+[assembly: AssemblyTitle("Maestro")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("Maestro")]\r
+[assembly: AssemblyCopyright("Copyright © 2017")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// Setting ComVisible to false makes the types in this assembly not visible\r
+// to COM components. If you need to access a type in this assembly from\r
+// COM, set the ComVisible attribute to true on that type.\r
+[assembly: ComVisible(false)]\r
+\r
+// The following GUID is for the ID of the typelib if this project is exposed to COM\r
+[assembly: Guid("baf3e174-5d82-40fa-9e62-8c76adbea1e4")]\r
+\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version\r
+// Build Number\r
+// Revision\r
+//\r
+// 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.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<!--\r
+ This file is automatically generated by Visual Studio .Net. It is \r
+ used to store generic object data source configuration information. \r
+ Renaming the file extension or editing the content of this file may \r
+ cause the file to be unrecognizable by the program.\r
+-->\r
+<GenericObjectDataSource DisplayName="MetadataInfo" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">\r
+ <TypeInfo>Maestro.Metadata.MetadataInfo, Maestro, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>\r
+</GenericObjectDataSource>
\ No newline at end of file
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace Maestro.Properties {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Maestro.Properties.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\r
+ /// </summary>\r
+ internal static System.Drawing.Icon AppIcon {\r
+ get {\r
+ object obj = ResourceManager.GetObject("AppIcon", resourceCulture);\r
+ return ((System.Drawing.Icon)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\r
+ /// </summary>\r
+ internal static System.Drawing.Icon Pause {\r
+ get {\r
+ object obj = ResourceManager.GetObject("Pause", resourceCulture);\r
+ return ((System.Drawing.Icon)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\r
+ /// </summary>\r
+ internal static System.Drawing.Icon Play {\r
+ get {\r
+ object obj = ResourceManager.GetObject("Play", resourceCulture);\r
+ return ((System.Drawing.Icon)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\r
+ /// </summary>\r
+ internal static System.Drawing.Icon Stop {\r
+ get {\r
+ object obj = ResourceManager.GetObject("Stop", resourceCulture);\r
+ return ((System.Drawing.Icon)(obj));\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
+ <data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\mediacube_logo_small.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="Pause" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\Pause.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="Play" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\Play.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="Stop" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\Stop.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace Maestro.Properties {\r
+ \r
+ \r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")]\r
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r
+ \r
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r
+ \r
+ public static Settings Default {\r
+ get {\r
+ return defaultInstance;\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version='1.0' encoding='utf-8'?>\r
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">\r
+ <Profiles>\r
+ <Profile Name="(Default)" />\r
+ </Profiles>\r
+ <Settings />\r
+</SettingsFile>\r
--- /dev/null
+{\r
+ "title": "PLAYOUT",\r
+ "active": true,\r
+ "startInTray": false,\r
+ "enableNameOverride": false,\r
+ "player": {\r
+ "enabled": true,\r
+ "autoStart": false,\r
+ "segmentEditor": true\r
+ },\r
+ "source": {\r
+ "$type": "NEXIOSource",\r
+ "local": {\r
+ "address": "ws://localhost:8080/services/nexio"\r
+ },\r
+ "remote": {\r
+ "address": "ftp://localhost:21/watch",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ },\r
+ "metadatas": [\r
+ {\r
+ "$type": "OctopusMetadata",\r
+ "server": {\r
+ "address": "http://localhost:8080/services/rest/octopus/",\r
+ "userName": "dani",\r
+ "password": "dani",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "$type": "TrafficMetadata",\r
+ "server": {\r
+ "address": "Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;",\r
+ "userName": "MAM",\r
+ "password": "Echotv.hu",\r
+ "timeout": 5\r
+ }\r
+ },\r
+ {\r
+ "$type": "MediaCubeMetadata",\r
+ "server": {\r
+ "address": "ftp://localhost:21/out",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ }\r
+ ],\r
+ "targets": [\r
+ {\r
+ "label": "Archive",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "{0}-{1}-{2}",\r
+ "killDateDays": 1,\r
+ "remote": {\r
+ "address": "ftp://localhost:21/out",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ },\r
+ {\r
+ "label": "Ready",\r
+ "processor": "FXPTargetProcessor",\r
+ "outputFormat": "{0}-{1}-{2}",\r
+ "remote": {\r
+ "address": "ftp://localhost:22/out",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ }\r
+ ]\r
+}\r
--- /dev/null
+{\r
+ "title": "INGEST",\r
+ "active": true,\r
+ "startInTray": false,\r
+ "enableNameOverride": false,\r
+ "player": {\r
+ "enabled": true,\r
+ "autoStart": false,\r
+ "segmentEditor": true\r
+ },\r
+ "source": {\r
+ "$type": "UNCSource",\r
+ "local": {\r
+ "address": "file://localhost/watch"\r
+ },\r
+ "remote": {\r
+ "address": "ftp://localhost:21/watch",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ },\r
+ "metadatas": [\r
+ {\r
+ "$type": "OctopusMetadata",\r
+ "server": {\r
+ "address": "http://localhost:8080/services/rest/octopus/",\r
+ "userName": "dani",\r
+ "password": "dani",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "$type": "TrafficMetadata",\r
+ "server": {\r
+ "address": "Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;",\r
+ "userName": "MAM",\r
+ "password": "Echotv.hu",\r
+ "timeout": 60\r
+ }\r
+ },\r
+ {\r
+ "$type": "MediaCubeMetadata",\r
+ "server": {\r
+ "address": "ftp://localhost:21/out",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ }\r
+ ],\r
+ "targets": [\r
+ {\r
+ "label": "Archive",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "{0}-{1}",\r
+ "killDateDays": 1,\r
+ "remote": {\r
+ "address": "ftp://localhost:21/out",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ },\r
+ {\r
+ "label": "Ready",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "{0}-{1}",\r
+ "saveSegments": true,\r
+ "killDateDays": 1,\r
+ "tag": "tag",\r
+ "createSubFolder": true,\r
+ "remote": {\r
+ "address": "ftp://localhost:21/out",\r
+ "userName": "dani",\r
+ "password": "dani"\r
+ }\r
+ }\r
+ ]\r
+}\r
--- /dev/null
+using System.ComponentModel;\r
+using System.IO;\r
+using System.Threading;\r
+\r
+namespace Maestro.Sources {\r
+ internal class CreatedFileMonitor : BackgroundWorker {\r
+ private long lastSize;\r
+\r
+ internal CreatedFileMonitor(string path) {\r
+ DoWork += CreatedFileMonitor_DoWork;\r
+ WorkerSupportsCancellation = true;\r
+ RunWorkerAsync(path);\r
+ }\r
+\r
+ private void CreatedFileMonitor_DoWork(object sender, DoWorkEventArgs e) {\r
+ string path = e.Argument as string;\r
+ while (!e.Cancel) {\r
+ Thread.Sleep(3000);\r
+ FileInfo fi = new FileInfo(path);\r
+ if (lastSize == fi.Length) {\r
+ e.Result = fi;\r
+ break;\r
+ }\r
+ else\r
+ lastSize = fi.Length;\r
+ }\r
+ \r
+ }\r
+\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+using System.Drawing;\r
+using System.IO;\r
+using System.Runtime.CompilerServices;\r
+\r
+namespace Maestro.Sources {\r
+ public class FileSourceItem : ISourceItem {\r
+ private FileInfo fileInfo;\r
+ private Icon icon;\r
+ private bool isHighlighted;\r
+\r
+ public event PropertyChangedEventHandler PropertyChanged;\r
+\r
+ protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "") {\r
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
+ }\r
+\r
+ public FileInfo FileInfo {\r
+ get {\r
+ return fileInfo;\r
+ }\r
+ set {\r
+ fileInfo = value;\r
+ NotifyPropertyChanged("Name");\r
+ NotifyPropertyChanged("Created");\r
+ }\r
+ }\r
+\r
+ public bool IsHighlighted {\r
+ get {\r
+ return isHighlighted;\r
+ }\r
+ set {\r
+ if (isHighlighted != value) {\r
+ isHighlighted = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public string Name {\r
+ get {\r
+ return FileInfo?.Name;\r
+ }\r
+ }\r
+ public DateTime Created {\r
+ get {\r
+ return (FileInfo == null) ? DateTime.MinValue : FileInfo.CreationTime;\r
+ }\r
+ }\r
+\r
+ public Icon Icon {\r
+ get {\r
+ return icon;\r
+ }\r
+ set {\r
+ icon = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Linq;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using System.Windows.Forms;\r
+using LinkDotNet.MessageHandling.Contracts;\r
+using Maestro.Sources.Messages;\r
+using Maestro.Commons;\r
+using System.Threading.Tasks;\r
+using System.Drawing;\r
+using NLog;\r
+\r
+namespace Maestro.Sources {\r
+ class FileSystemSource : BindingList<FileSourceItem>, ISource {\r
+ private readonly Logger logger = LogManager.GetCurrentClassLogger();\r
+ private IMessageBus messageBus;\r
+ private List<CreatedFileMonitor> createdFileMonitors = new List<CreatedFileMonitor>();\r
+ private Control parent;\r
+ private string filter;\r
+ private List<FileSourceItem> cache = new List<FileSourceItem>();\r
+\r
+ public DataGridViewColumn[] Columns {\r
+ get {\r
+ DataGridViewColumn[] result = new DataGridViewColumn[] {\r
+ new DataGridViewTextBoxColumn(){\r
+ DataPropertyName = "Name",\r
+ HeaderText = StringResources.NEV,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ DataPropertyName = "Created",\r
+ HeaderText = StringResources.LETREHOZVA,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells\r
+ },\r
+ new DataGridViewImageColumn(){\r
+ DataPropertyName = "Icon",\r
+ HeaderText = StringResources.LEJATSZAS,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,\r
+ }\r
+ };\r
+ foreach (DataGridViewColumn column in result) {\r
+ column.HeaderCell.Style.Font = new Font(parent.Font, FontStyle.Regular);\r
+ }\r
+ return result;\r
+ }\r
+ }\r
+\r
+ public string Filter {\r
+ get => filter; set {\r
+ filter = value;\r
+ Clear();\r
+ cache.Where(i => i.Name.StartsWith(filter)).ToList().ForEach(i => Add(i));\r
+ }\r
+ }\r
+\r
+ public ListSortDescriptionCollection SortDescriptions => throw new NotImplementedException();\r
+\r
+ public bool SupportsAdvancedSorting => throw new NotImplementedException();\r
+\r
+ public bool SupportsFiltering => true;\r
+\r
+ public FileSystemSource(Control parent, IMessageBus messageBus) {\r
+ this.parent = parent;\r
+ this.messageBus = messageBus;\r
+ }\r
+\r
+ public void Startup(Uri address) {\r
+ string path = address.LocalPath;\r
+ createWatch(path);\r
+ Task.Run(() => initializeList(path));\r
+ }\r
+\r
+ //private void AddItem(FileInfo fi, bool highlight) {\r
+ // FileSourceItem item = CreateItem(fi, highlight);\r
+ // Add(item);\r
+ //}\r
+\r
+ private FileSourceItem CreateItem(FileInfo fi, bool highlight) {\r
+ return new FileSourceItem() {\r
+ FileInfo = fi,\r
+ IsHighlighted = highlight,\r
+ Icon = Properties.Resources.Play\r
+ };\r
+ }\r
+\r
+ private void initializeList(string path) {\r
+ string[] files = Directory.GetFiles(path);\r
+ files.Select(f => CreateItem(new FileInfo(f), false)).OrderByDescending(i => i.Created).ToList().ForEach(i => parent.SafeCall(() => Add(i)));\r
+ cache.AddRange(this);\r
+ }\r
+\r
+ private void createWatch(string path) {\r
+ FileSystemWatcher watcher = new FileSystemWatcher();\r
+ watcher.Path = path;\r
+ //watcher.NotifyFilter = NotifyFilters.LastWrite;\r
+ watcher.Filter = "*.*";\r
+ watcher.Changed += new FileSystemEventHandler(OnChanged);\r
+ watcher.Created += new FileSystemEventHandler(OnCreated);\r
+ watcher.Deleted += new FileSystemEventHandler(OnDeleted);\r
+ watcher.Renamed += new RenamedEventHandler(OnRenamed);\r
+ watcher.EnableRaisingEvents = true;\r
+ }\r
+\r
+ public void OnRenamed(object sender, RenamedEventArgs e) {\r
+ logger.Debug("{0} {1} {2}", e.ChangeType, e.OldName, e.Name);\r
+ var item = this.Where(x => x.Name == e.OldName).SingleOrDefault();\r
+ if (item == null)\r
+ return;\r
+ item.FileInfo = new FileInfo(e.FullPath);\r
+ parent.SafeCall(() => {\r
+ messageBus.Send(new ModifyFileActionMsg() {\r
+ FileName = e.Name,\r
+ Source = parent\r
+ });\r
+ });\r
+ }\r
+\r
+ private void OnChanged(object sender, FileSystemEventArgs e) {\r
+ logger.Debug("{0} {1}", e.ChangeType, e.Name);\r
+ var item = this.Where(x => x.Name == e.Name).SingleOrDefault();\r
+ if (item == null)\r
+ return;\r
+ item.FileInfo = new FileInfo(e.FullPath);\r
+ parent.SafeCall(() => {\r
+ messageBus.Send(new ModifyFileActionMsg() {\r
+ FileName = e.Name,\r
+ Source = parent\r
+ });\r
+ });\r
+ }\r
+\r
+ private void OnCreated(object sender, FileSystemEventArgs e) {\r
+ //TODO enable cancel\r
+ CreatedFileMonitor createdFileMonitor = new CreatedFileMonitor(e.FullPath);\r
+ createdFileMonitor.RunWorkerCompleted += (s1, e1) => {\r
+ FileInfo fileInfo = e1.Result as FileInfo;\r
+ parent.SafeCall(() => {\r
+ Insert(0, CreateItem(fileInfo, true));\r
+ messageBus.Send(new CreateFileActionMsg() {\r
+ FileName = fileInfo.Name,\r
+ Source = parent\r
+ });\r
+ });\r
+ };\r
+ logger.Debug("{0} {1}", e.ChangeType, e.Name);\r
+ }\r
+\r
+ private void OnDeleted(object sender, FileSystemEventArgs e) {\r
+ logger.Debug("{0} {1}", e.ChangeType, e.Name);\r
+ FileSourceItem fileSourceItem = this.Where(item => item.Name.Equals(e.Name)).First();\r
+ parent.SafeCall(() => {\r
+ Remove(fileSourceItem);\r
+ messageBus.Send(new RemoveFileActionMsg() {\r
+ FileName = e.Name,\r
+ Source = parent\r
+ });\r
+ });\r
+ }\r
+\r
+ public void ApplySort(ListSortDescriptionCollection sorts) {\r
+ throw new NotImplementedException();\r
+ }\r
+\r
+ public void RemoveFilter() {\r
+ Clear();\r
+ cache.ForEach(i => Add(i));\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro.Sources {\r
+ public interface ISource : IBindingListView {\r
+ DataGridViewColumn[] Columns { get; }\r
+ void Startup(Uri address);\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+\r
+namespace Maestro.Sources {\r
+ public interface ISourceItem : INotifyPropertyChanged {\r
+ string Name { get; }\r
+ DateTime Created { get; }\r
+ bool IsHighlighted { get; set; }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using LinkDotNet.MessageHandling.Contracts;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro.Sources.Messages {\r
+ public class FileActionMsg : IMessage {\r
+ public Control Source { get; set; }\r
+ public string FileName { get; set; }\r
+ }\r
+\r
+ public class CreateFileActionMsg : FileActionMsg { }\r
+ public class ModifyFileActionMsg : FileActionMsg { }\r
+ public class RemoveFileActionMsg : FileActionMsg { }\r
+}\r
--- /dev/null
+using System.Linq;\r
+using System.ComponentModel;\r
+using System.Diagnostics;\r
+using System.Windows.Forms;\r
+using LinkDotNet.MessageHandling.Contracts;\r
+using Maestro.Sources.Messages;\r
+using Maestro.Commons;\r
+using NexioClient;\r
+using Newtonsoft.Json.Linq;\r
+using WebSocketSharp;\r
+using System;\r
+using System.Drawing;\r
+using NLog;\r
+\r
+namespace Maestro.Sources {\r
+ class NexioRESTSource : BindingList<NexioSourceItem>, ISource {\r
+ private readonly NLog.Logger logger = LogManager.GetCurrentClassLogger();\r
+ private const string LONGNAMEID = "longnameid";\r
+ private const string RECORDDATE = "recorddate";\r
+ private const string EXTAGENCY = "extagency";\r
+ private const string DURATION = "duration";\r
+ private const string MODIFIED = "modifiedtimestamp";\r
+\r
+ private IMessageBus messageBus;\r
+ private Control parent;\r
+ private NexioAPI dataClient;\r
+\r
+ public DataGridViewColumn[] Columns {\r
+ get {\r
+ DataGridViewColumn[] result = new DataGridViewColumn[] {\r
+ //todo DataPropertyName-et is át kell írni?\r
+ new DataGridViewTextBoxColumn(){\r
+ DataPropertyName = "Name",\r
+ HeaderText = StringResources.NEV,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,\r
+ },\r
+ new DataGridViewTextBoxColumn(){\r
+ DataPropertyName = "Agency",\r
+ HeaderText = StringResources.UGYNOKSEG,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ DataPropertyName = "Created",\r
+ HeaderText = StringResources.FELVETEL_DATUMA,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.None\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ DataPropertyName = "Modified",\r
+ HeaderText = StringResources.MODOSITVA,\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.None\r
+ }\r
+ };\r
+ foreach (DataGridViewColumn column in result) {\r
+ column.HeaderCell.Style.Font = new Font(parent.Font, FontStyle.Regular);\r
+ }\r
+ return result;\r
+ }\r
+ }\r
+\r
+ public string Filter { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\r
+\r
+ public ListSortDescriptionCollection SortDescriptions => throw new NotImplementedException();\r
+\r
+ public bool SupportsAdvancedSorting => throw new NotImplementedException();\r
+\r
+ public bool SupportsFiltering => throw new NotImplementedException();\r
+\r
+ public NexioRESTSource(Control parent, IMessageBus messageBus) {\r
+ this.parent = parent;\r
+ this.messageBus = messageBus;\r
+ }\r
+\r
+ public void Startup(Uri address) {\r
+ string path = address.OriginalString;\r
+ CreateWatch(path);\r
+ initializeList(path);\r
+ }\r
+\r
+ private void CreateWatch(string path) {\r
+ logger.Info("info");\r
+ logger.Error("error");\r
+ dataClient = new NexioAPI(path);\r
+ dataClient.Open(OnResponse);\r
+ }\r
+\r
+ private void initializeList(string path) {\r
+ dataClient.GetListAsync();\r
+ }\r
+\r
+ private void OnResponse(object sender, MessageEventArgs e) {\r
+ JObject resultObject = JObject.Parse(e.Data);\r
+ JToken jToken = resultObject.GetValue(NexioAPI.DATA);\r
+\r
+ if (!jToken.HasValues)\r
+ return;\r
+ JToken d = JToken.Parse(jToken.ToString());\r
+ string action = resultObject.GetValue(NexioAPI.ACTION).ToString();\r
+ switch (action) {\r
+ case NexioAPI.LIST:\r
+ OnList(d);\r
+ break;\r
+ case NexioAPI.CREATE:\r
+ OnCreated(d);\r
+ break;\r
+ case NexioAPI.DELETE:\r
+ OnDeleted(d);\r
+ break;\r
+ case NexioAPI.UPDATE:\r
+ OnChanged(d);\r
+ break;\r
+ }\r
+ }\r
+\r
+ //private void AddItem(JToken token, Boolean highlight) {\r
+ // //Add(item);\r
+ //}\r
+\r
+ private NexioSourceItem CreateItem(JToken token, bool highlight) {\r
+ NexioSourceItem item = new NexioSourceItem() {\r
+ IsHighlighted = highlight\r
+ };\r
+ SetItem(ref item, token);\r
+ return item;\r
+ }\r
+\r
+ private void SetItem(ref NexioSourceItem item, JToken token) {\r
+ item.Name = token[LONGNAMEID].ToString();\r
+ item.Created = DateTime.Parse(token[RECORDDATE].ToString());\r
+ item.Agency = token[EXTAGENCY].ToString();\r
+ item.Modified = DateTime.Parse(token[RECORDDATE].ToString());\r
+ if (DateTime.MinValue.Equals(item.Modified))\r
+ item.Modified = item.Created;\r
+ }\r
+\r
+\r
+ private void OnList(JToken l) {\r
+ if (l == null)\r
+ return;\r
+ l.Children().ToList().Select(t => CreateItem(t, false)).OrderByDescending(i => i.Created).ToList().ForEach(i => parent.SafeCall(() => Add(i)));\r
+ }\r
+\r
+ private void OnChanged(JToken token) {\r
+ string name = token[LONGNAMEID].ToString();\r
+ var item = Items.Where(x => x.Name == name).SingleOrDefault();\r
+ if (item != null) {\r
+ parent.SafeCall(() => {\r
+ SetItem(ref item, token);\r
+ messageBus.Send(new ModifyFileActionMsg() {\r
+ FileName = name,\r
+ Source = parent\r
+ });\r
+ });\r
+ }\r
+ Debug.WriteLine(string.Format("Changed {0}", name));\r
+ }\r
+\r
+ private void OnCreated(JToken token) {\r
+ string name = token[LONGNAMEID].ToString();\r
+ parent.SafeCall(() => {\r
+ Insert(0, CreateItem(token, true));\r
+ messageBus.Send(new CreateFileActionMsg() {\r
+ FileName = name,\r
+ Source = parent\r
+ });\r
+ });\r
+ Debug.WriteLine(string.Format("Created {0}", name));\r
+ }\r
+\r
+ private void OnDeleted(JToken d) {\r
+ string name = d[LONGNAMEID].ToString();\r
+ NexioSourceItem fileSourceItem = this.Where(item => item.Name.Equals(name)).First();\r
+ parent.SafeCall(() => {\r
+ Remove(fileSourceItem);\r
+ messageBus.Send(new RemoveFileActionMsg() {\r
+ FileName = name,\r
+ Source = parent\r
+ });\r
+ });\r
+ }\r
+\r
+ public void ApplySort(ListSortDescriptionCollection sorts) {\r
+ throw new NotImplementedException();\r
+ }\r
+\r
+ public void RemoveFilter() {\r
+ throw new NotImplementedException();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+using System.IO;\r
+using System.Runtime.CompilerServices;\r
+\r
+namespace Maestro.Sources {\r
+ public class NexioSourceItem : ISourceItem {\r
+ private bool isHighlighted;\r
+ private string name;\r
+ private DateTime created;\r
+ private DateTime modified;\r
+ private string agency;\r
+\r
+ public event PropertyChangedEventHandler PropertyChanged;\r
+\r
+ protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "") {\r
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
+ }\r
+\r
+ public bool IsHighlighted {\r
+ get {\r
+ return isHighlighted;\r
+ }\r
+ set {\r
+ isHighlighted = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
+\r
+ public DateTime Created {\r
+ get {\r
+ return created;\r
+ }\r
+ set {\r
+ created = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
+ public DateTime Modified {\r
+ get {\r
+ return modified;\r
+ }\r
+ set {\r
+ modified = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
+ public string Name {\r
+ get { return name; }\r
+ set {\r
+ name = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
+ public string Agency {\r
+ get { return agency; }\r
+ set {\r
+ agency = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System.IO;\r
+\r
+namespace Maestro.Metadata {\r
+ public class SourceInfo {\r
+ public FileInfo FileInfo { get; set; }\r
+ public string Tooltip { get; set; }\r
+ public string Name { get; set; }\r
+ }\r
+}\r
--- /dev/null
+namespace Maestro.Metadata {\r
+ public enum SourceType {\r
+ UNC, NEXIO\r
+ }\r
+}\r
--- /dev/null
+namespace Maestro {\r
+ partial class Splash {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Splash));\r
+ this.splashTimer = new System.Windows.Forms.Timer(this.components);\r
+ this.imageList1 = new System.Windows.Forms.ImageList(this.components);\r
+ this.pictureBox1 = new System.Windows.Forms.PictureBox();\r
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\r
+ this.SuspendLayout();\r
+ // \r
+ // splashTimer\r
+ // \r
+ this.splashTimer.Enabled = true;\r
+ this.splashTimer.Interval = 2000;\r
+ this.splashTimer.Tick += new System.EventHandler(this.splashTimer_Tick);\r
+ // \r
+ // imageList1\r
+ // \r
+ this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;\r
+ this.imageList1.ImageSize = new System.Drawing.Size(16, 16);\r
+ this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\r
+ // \r
+ // pictureBox1\r
+ // \r
+ this.pictureBox1.BackColor = System.Drawing.Color.Transparent;\r
+ this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));\r
+ this.pictureBox1.Location = new System.Drawing.Point(0, 0);\r
+ this.pictureBox1.Name = "pictureBox1";\r
+ this.pictureBox1.Size = new System.Drawing.Size(320, 349);\r
+ this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\r
+ this.pictureBox1.TabIndex = 0;\r
+ this.pictureBox1.TabStop = false;\r
+ // \r
+ // Splash\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));\r
+ this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;\r
+ this.ClientSize = new System.Drawing.Size(320, 349);\r
+ this.Controls.Add(this.pictureBox1);\r
+ this.DoubleBuffered = true;\r
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;\r
+ this.Name = "Splash";\r
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\r
+ this.Text = "Splash";\r
+ this.TopMost = true;\r
+ this.TransparencyKey = System.Drawing.SystemColors.Control;\r
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.Timer splashTimer;\r
+ private System.Windows.Forms.ImageList imageList1;\r
+ private System.Windows.Forms.PictureBox pictureBox1;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Data;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+ public partial class Splash : Form {\r
+ public Splash() {\r
+ InitializeComponent();\r
+ }\r
+\r
+ private void splashTimer_Tick(object sender, EventArgs e) {\r
+ BeginInvoke(new Action(() => Close()));\r
+ //Close(); \r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="splashTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>133, 17</value>\r
+ </metadata>\r
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />\r
+ <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>\r
+ 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\r
+ 2XCMuXC39JYfBznM03opOZfhWJdH2XH4VmMg1pm9VJapqZoV+WiBuY2ceZqjp4+h+Zdzl5cbBkO5uY22\r
+ 2U52eZi+SZy6CZt86Za8OXHGNnf6I0UaoxYMyZDA6WLQ6ViuMZ0KU51mN4WZyXu9cIo5yIDXAR8rsiDq\r
+ qW3t6Z7+7wmf8Smf88kgZRCf1Uaf7bl+DOKCLkSXs/mcULIQ4Mh6FjZjlRSWhFmSASp4A0qBShaJWqec\r
+ ZumcH3ci2hhX6nOe6oR7TImTu2mc7PaMGxGMZqOhoigpAyVuy3GdEllxW7EPBFqg1JRNKip8C9mbmdcL\r
+ X/Wg55lNByqEXAYdLaqTq+kEPHqis0VF0LeXglmVFYqZOGieVSR0QTOWt1mYUKqlZyidY7QsLGOdx0mb\r
+ SqSWcjks2OeHIFp9LQmFMtqJg/mDTbqU+UCkermlVoihIGmamERjQtqXd7qms5ecoymcVZqmLMc14smm\r
+ 8MadlESGI5mGC4qW2tOojlpCiRj+i5vxmDnqn1xojlsZm1kaolEKPpoaXHNIh5sqphtZqZspqgA6qeTU\r
+ pa75WZhKO3Waj1A4q656UbYaOriqOIDXo7QqmxQ5pqe6q7xaNW56qJIKmQiVpIc2fxOZeMeKrFNqphQa\r
+ qM96dsmqrE8Kq5yqq9iarcVarYsqq94qrUqnqLEqpa16kFhabM1qrD4JrfBKrDMJqPVqqeQ6UoSqr6Mq\r
+ sD3or4h5jam6r+dajwWLkn+6reIKRcxajuvIrqQ6sNnnqRmrpgrrrgD2Zaa6sejYsd5Tmp/ppJ7Isdy6\r
+ sN8ar1pJp6oKs8KaryxLrSK7quU5s+uqrc4aszJLsy34oa/+mq5Diq6cqLMfW7EWy7PbWa6FIoI1G3AQ\r
+ G50/a5GaF6kp266cd7RIm7RLNagI2rNkyncMm6CgSUlfy0sqy7R6yrUhG7U3W5uJaSqhiLae+a5uG65e\r
+ JLc5u5IJO4IP2bQ425/SEko7q7QiF7hTC6kk+1KdKrSH67NsO0KV57BL67fdKrkuRLlRaaefirBSS5oN\r
+ GwuTZrhGC65h67gUG7rvAo/AqqB5G7eZW2I05bmZAblv25piKbZlGqo8Naywe7Gma7uRqYKz6B8TirW3\r
+ u7LDq7ce2pUiwZqXi2RVq4mhO5TPW7p/C7rMoLuRS6+nm7zSW7tr6bh4h7K4q7zLS77+RusSg/uy4otU\r
+ +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\r
+</value>\r
+ </data>\r
+ <data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>\r
+ 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\r
+ /z/E2Hjz0uVBPwAAAABJRU5ErkJggg==\r
+</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace Maestro {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class StringResources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal StringResources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Maestro.StringResources", typeof(StringResources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Akciók.\r
+ /// </summary>\r
+ internal static string AKCIOK {\r
+ get {\r
+ return ResourceManager.GetString("AKCIOK", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Állapot.\r
+ /// </summary>\r
+ internal static string ALLAPOT {\r
+ get {\r
+ return ResourceManager.GetString("ALLAPOT", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Archív metaadatok módosítása.\r
+ /// </summary>\r
+ internal static string ARCHÍV_METAADATOK_MODOSITASA {\r
+ get {\r
+ return ResourceManager.GetString("ARCHÍV_METAADATOK_MODOSITASA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Befejezés.\r
+ /// </summary>\r
+ internal static string BEFEJEZES {\r
+ get {\r
+ return ResourceManager.GetString("BEFEJEZES", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Bemenet.\r
+ /// </summary>\r
+ internal static string BEMENET {\r
+ get {\r
+ return ResourceManager.GetString("BEMENET", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Cél akció.\r
+ /// </summary>\r
+ internal static string CEL_AKCIO {\r
+ get {\r
+ return ResourceManager.GetString("CEL_AKCIO", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Felvétel dátuma.\r
+ /// </summary>\r
+ internal static string FELVETEL_DATUMA {\r
+ get {\r
+ return ResourceManager.GetString("FELVETEL_DATUMA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Forrás fájl.\r
+ /// </summary>\r
+ internal static string FORRAS_FAJL {\r
+ get {\r
+ return ResourceManager.GetString("FORRAS_FAJL", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Kezdés.\r
+ /// </summary>\r
+ internal static string KEZDES {\r
+ get {\r
+ return ResourceManager.GetString("KEZDES", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Kimenet.\r
+ /// </summary>\r
+ internal static string KIMENET {\r
+ get {\r
+ return ResourceManager.GetString("KIMENET", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Kiválasztott forrás.\r
+ /// </summary>\r
+ internal static string KIVALASZTOTT_FORRAS {\r
+ get {\r
+ return ResourceManager.GetString("KIVALASZTOTT_FORRAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Kiválasztott metaadat.\r
+ /// </summary>\r
+ internal static string KIVALASZTOTT_METAADAT {\r
+ get {\r
+ return ResourceManager.GetString("KIVALASZTOTT_METAADAT", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Lejátszás.\r
+ /// </summary>\r
+ internal static string LEJATSZAS {\r
+ get {\r
+ return ResourceManager.GetString("LEJATSZAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Létrehozva.\r
+ /// </summary>\r
+ internal static string LETREHOZVA {\r
+ get {\r
+ return ResourceManager.GetString("LETREHOZVA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Metaadat.\r
+ /// </summary>\r
+ internal static string METAADAT {\r
+ get {\r
+ return ResourceManager.GetString("METAADAT", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Módosítva.\r
+ /// </summary>\r
+ internal static string MODOSITVA {\r
+ get {\r
+ return ResourceManager.GetString("MODOSITVA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Név.\r
+ /// </summary>\r
+ internal static string NEV {\r
+ get {\r
+ return ResourceManager.GetString("NEV", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Nincs találat.\r
+ /// </summary>\r
+ internal static string NINCS_TALALAT {\r
+ get {\r
+ return ResourceManager.GetString("NINCS_TALALAT", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Státusz.\r
+ /// </summary>\r
+ internal static string STATUSZ {\r
+ get {\r
+ return ResourceManager.GetString("STATUSZ", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Szegmens létrehozása.\r
+ /// </summary>\r
+ internal static string SZEGMENS_LETREHOZASA {\r
+ get {\r
+ return ResourceManager.GetString("SZEGMENS_LETREHOZASA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Ügynökség.\r
+ /// </summary>\r
+ internal static string UGYNOKSEG {\r
+ get {\r
+ return ResourceManager.GetString("UGYNOKSEG", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Vége.\r
+ /// </summary>\r
+ internal static string VEGE {\r
+ get {\r
+ return ResourceManager.GetString("VEGE", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Végrehajt.\r
+ /// </summary>\r
+ internal static string VEGREHAJT {\r
+ get {\r
+ return ResourceManager.GetString("VEGREHAJT", resourceCulture);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <data name="AKCIOK" xml:space="preserve">\r
+ <value>Akciók</value>\r
+ </data>\r
+ <data name="ALLAPOT" xml:space="preserve">\r
+ <value>Állapot</value>\r
+ </data>\r
+ <data name="ARCHÍV_METAADATOK_MODOSITASA" xml:space="preserve">\r
+ <value>Archív metaadatok módosítása</value>\r
+ </data>\r
+ <data name="BEFEJEZES" xml:space="preserve">\r
+ <value>Befejezés</value>\r
+ </data>\r
+ <data name="BEMENET" xml:space="preserve">\r
+ <value>Bemenet</value>\r
+ </data>\r
+ <data name="CEL_AKCIO" xml:space="preserve">\r
+ <value>Cél akció</value>\r
+ </data>\r
+ <data name="FELVETEL_DATUMA" xml:space="preserve">\r
+ <value>Felvétel dátuma</value>\r
+ </data>\r
+ <data name="FORRAS_FAJL" xml:space="preserve">\r
+ <value>Forrás fájl</value>\r
+ </data>\r
+ <data name="KEZDES" xml:space="preserve">\r
+ <value>Kezdés</value>\r
+ </data>\r
+ <data name="KIMENET" xml:space="preserve">\r
+ <value>Kimenet</value>\r
+ </data>\r
+ <data name="KIVALASZTOTT_FORRAS" xml:space="preserve">\r
+ <value>Kiválasztott forrás</value>\r
+ </data>\r
+ <data name="KIVALASZTOTT_METAADAT" xml:space="preserve">\r
+ <value>Kiválasztott metaadat</value>\r
+ </data>\r
+ <data name="LEJATSZAS" xml:space="preserve">\r
+ <value>Lejátszás</value>\r
+ </data>\r
+ <data name="LETREHOZVA" xml:space="preserve">\r
+ <value>Létrehozva</value>\r
+ </data>\r
+ <data name="METAADAT" xml:space="preserve">\r
+ <value>Metaadat</value>\r
+ </data>\r
+ <data name="MODOSITVA" xml:space="preserve">\r
+ <value>Módosítva</value>\r
+ </data>\r
+ <data name="NEV" xml:space="preserve">\r
+ <value>Név</value>\r
+ </data>\r
+ <data name="NINCS_TALALAT" xml:space="preserve">\r
+ <value>Nincs találat</value>\r
+ </data>\r
+ <data name="STATUSZ" xml:space="preserve">\r
+ <value>Státusz</value>\r
+ </data>\r
+ <data name="SZEGMENS_LETREHOZASA" xml:space="preserve">\r
+ <value>Szegmens létrehozása</value>\r
+ </data>\r
+ <data name="UGYNOKSEG" xml:space="preserve">\r
+ <value>Ügynökség</value>\r
+ </data>\r
+ <data name="VEGE" xml:space="preserve">\r
+ <value>Vége</value>\r
+ </data>\r
+ <data name="VEGREHAJT" xml:space="preserve">\r
+ <value>Végrehajt</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+-a file create azonnal jelenítsen meg állományt a listában, inaktívan\r
+-Nexio filenevet lehessen beírni kézzel is\r
+-Minden hiba azonnali log/email (munkaéllomás neve / user neve is kell)
\ No newline at end of file
--- /dev/null
+using FluentFTP;\r
+using Maestro.Configuration;\r
+using NLog;\r
+using System;\r
+using System.IO;\r
+using System.Net;\r
+using System.Windows.Forms;\r
+using System.Collections.Generic;\r
+using TrafficClient;\r
+using Model;\r
+\r
+namespace Maestro.Targets {\r
+\r
+ public class FTPTargetProcessor : TargetProcessor {\r
+ private readonly Logger logger = LogManager.GetCurrentClassLogger();\r
+ private const string SUCCESS = "Successfully completed.";\r
+ private const string PROCESSING = "Processing {0}";\r
+ private const string PROCESSING_COMPLETED = "Finished processing {0}";\r
+ private const string FILENAME = "{0}{1}";\r
+ private const string VERSIONED_FILENAME = "{0}-{1}{2}";\r
+ private const string ALREADY_EXISTS = "File {0} already exists, trying {1}";\r
+ private const string STATUS_FOLDER = ".STATUS";\r
+ private const string KILLDATE_FILE = "{0}.{1}.KILLDATE";\r
+ protected FtpClient targetFTP;\r
+ protected FileInfo inputFile;\r
+ private string workingDir;\r
+ public WorkflowAction workFlowAction { get; set; }\r
+\r
+ public FTPTargetProcessor(Control parent, Source sourceConfig, Target targetConfig, string inputFileName, string id, List<Segment> segments) : base(parent, targetConfig, segments) {\r
+ FtpTrace.LogFunctions = false;\r
+ this.targetConfig = targetConfig;\r
+ Uri inputUri = new Uri(String.Format("{0}/{1}", sourceConfig.Local.Address.LocalPath, inputFileName));\r
+ inputFile = new FileInfo(inputUri.LocalPath); \r
+ Input = inputFile.FullName;\r
+ ID = id;\r
+ workFlowAction = new WorkflowAction() { houseId = ID, tag = targetConfig.Tag, touched = DateTime.Now };\r
+ }\r
+\r
+ public override bool Execute() {\r
+ logger.Info(PROCESSING, inputFile.Name);\r
+ Started = DateTime.Now;\r
+ workFlowAction.started = Started;\r
+ bool result = false;\r
+ try {\r
+ SetSubFolder(targetConfig.Remote);\r
+ targetFTP = CreateClient(targetConfig.Remote);\r
+ EnsureDirectoryExistence(targetFTP);\r
+ Status = ProcessStatus.Progress;\r
+ Output = CreateOutputFileName();\r
+ workFlowAction.destination = Path.Combine(workingDir, Output).Replace("\\", "/");\r
+ workFlowAction.source = Input;\r
+ UploadFile(Output);\r
+ if (targetConfig.KillDateDays > 0)\r
+ UploadKillDateFile(targetConfig.Remote, Output);\r
+ ExecuteCompleted();\r
+ Status = ProcessStatus.Completed;\r
+ Message = SUCCESS;\r
+ workFlowAction.successful = true;\r
+ }\r
+ catch (Exception e) {\r
+ Status = ProcessStatus.Error;\r
+ Message = e.Message;\r
+ workFlowAction.description = Message;\r
+ logger.Error(e);\r
+ }\r
+ finally {\r
+ TerminateClient(targetFTP);\r
+ Finished = DateTime.Now;\r
+ workFlowAction.finished = Finished;\r
+ }\r
+ logger.Info(PROCESSING_COMPLETED, inputFile.Name);\r
+ return result;\r
+ }\r
+\r
+ private void SetSubFolder(Connection connection) {\r
+ Uri address = connection.Address;\r
+ if (targetConfig.CreateSubFolder)\r
+ workingDir = Path.Combine(address.PathAndQuery, ID).Replace("\\", "/");\r
+ else\r
+ workingDir = address.PathAndQuery;\r
+ }\r
+\r
+ private void UploadKillDateFile(Connection connection, string output) {\r
+ Uri address = connection.Address;\r
+ string statusWorkDir = Path.Combine(address.PathAndQuery, STATUS_FOLDER).Replace("\\", "/");\r
+ EnsureDirectoryExistence(targetFTP);\r
+ DateTime date = DateTime.Now;\r
+ date = date.AddDays(targetConfig.KillDateDays);\r
+ string fileName = String.Format(KILLDATE_FILE, output, date.ToString("yyyyMMdd"));\r
+ logger.Debug("Creating KILLDATE status file {0}", fileName);\r
+ //fileName = Path.Combine(statusWorkDir, fileName).Replace("\\", "/");\r
+ byte[] bytes = new byte[1];\r
+ bytes[0] = 0;\r
+ using (Stream ostream = targetFTP.OpenWrite(fileName)) {\r
+ ostream.Write(bytes, 0, 0);\r
+ }\r
+ }\r
+\r
+ private void CopyStream(Stream istream, long ilength, Stream ostream) {\r
+ byte[] buffer = new byte[32768];\r
+ int read, overall = 0;\r
+ while ((read = istream.Read(buffer, 0, buffer.Length)) > 0) {\r
+ ostream.Write(buffer, 0, read);\r
+ overall += read;\r
+ Progress = (int)((double)overall / ilength * 100);\r
+ }\r
+ }\r
+\r
+ protected virtual void UploadFile(string outputFileName) {\r
+ using (FileStream istream = File.OpenRead(inputFile.FullName)) {\r
+ using (Stream ostream = targetFTP.OpenWrite(outputFileName)) {\r
+ CopyStream(istream, inputFile.Length, ostream);\r
+ }\r
+ }\r
+ }\r
+\r
+ protected virtual string CreateOutputFileName() {\r
+ string nameWithoutExtension = String.Format(targetConfig.OutputFormat, ID, Path.GetFileNameWithoutExtension(inputFile.Name));\r
+ string result = String.Format(FILENAME, nameWithoutExtension, inputFile.Extension);\r
+ int version = 1;\r
+ if (targetFTP != null)\r
+ while (targetFTP.FileExists(result)) {\r
+ string versioned = String.Format(VERSIONED_FILENAME, nameWithoutExtension, version, inputFile.Extension);\r
+ logger.Debug(ALREADY_EXISTS, result, versioned);\r
+ result = versioned;\r
+ version++;\r
+ }\r
+ return result;\r
+ }\r
+\r
+\r
+ private void EnsureDirectoryExistence(FtpClient client) {\r
+ if (!client.DirectoryExists(workingDir))\r
+ client.CreateDirectory(workingDir, true);\r
+ client.SetWorkingDirectory(workingDir);\r
+ }\r
+\r
+ protected FtpClient CreateClient(Connection connection) {\r
+ Uri address = connection.Address;\r
+ FtpClient result = new FtpClient() {\r
+ Host = address.Host,\r
+ Port = address.Port,\r
+ InternetProtocolVersions = FtpIpVersion.IPv4,\r
+ UploadDataType = FtpDataType.Binary,\r
+ DownloadDataType = FtpDataType.Binary,\r
+ Credentials = new NetworkCredential(connection.UserName, connection.Password)\r
+ };\r
+ result.Connect();\r
+ return result;\r
+ }\r
+\r
+ protected void TerminateClient(FtpClient ftpClient) {\r
+ if (ftpClient != null) {\r
+ ftpClient.Disconnect();\r
+ ftpClient.Dispose();\r
+ }\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using FluentFTP;\r
+using Maestro.Commons;\r
+using Maestro.Configuration;\r
+using NLog;\r
+using System;\r
+using System.Text.RegularExpressions;\r
+using System.Threading;\r
+using System.Windows.Forms;\r
+using System.Collections.Generic;\r
+using TrafficClient;\r
+\r
+namespace Maestro.Targets {\r
+\r
+ public class FXPTargetProcessor : FTPTargetProcessor {\r
+ private Logger logger = LogManager.GetCurrentClassLogger();\r
+ private Source sourceConfig;\r
+\r
+ public FXPTargetProcessor(Control parent, Source sourceConfig, Target targetConfig, string inputFileName, string id, List<Segment> segments) :\r
+ base(parent, sourceConfig, targetConfig, inputFileName, id, segments) {\r
+ this.sourceConfig = sourceConfig;\r
+ }\r
+\r
+ protected override void UploadFile(string outputFileName) {\r
+ FtpClient sourceFTP = null;\r
+ FtpClient monitorFTP = null;\r
+\r
+ try {\r
+ sourceFTP = CreateClient(sourceConfig.Remote);\r
+ long ilength = sourceFTP.GetFileSize(inputFile.Name);\r
+\r
+ FtpReply replyPASV = targetFTP.Execute("PASV");\r
+ if (!replyPASV.Success)\r
+ throw new Exception(replyPASV.ErrorMessage);\r
+\r
+ Regex regex = new Regex(Regex.Escape("(") + "(.*)" + Regex.Escape(")"));\r
+ var v = regex.Match(replyPASV.Message);\r
+ string port = v.Groups[1].ToString();\r
+\r
+ FtpReply replyPORT = sourceFTP.Execute("PORT " + port);\r
+ if (!replyPORT.Success)\r
+ throw new Exception(replyPORT.ErrorMessage);\r
+\r
+ FtpReply replyTYPE = targetFTP.Execute("TYPE I");\r
+ if (!replyTYPE.Success)\r
+ throw new Exception(replyTYPE.ErrorMessage);\r
+\r
+ FtpReply replySTOR = targetFTP.Execute("STOR " + outputFileName);\r
+ if (!replySTOR.Success)\r
+ throw new Exception(replySTOR.ErrorMessage);\r
+\r
+ replyTYPE = sourceFTP.Execute("TYPE I");\r
+ if (!replyTYPE.Success)\r
+ throw new Exception(replyTYPE.ErrorMessage);\r
+\r
+ FtpReply replyRETR = sourceFTP.Execute("RETR " + inputFile.Name);\r
+ if (!replyRETR.Success)\r
+ throw new Exception(replyRETR.ErrorMessage);\r
+\r
+ monitorFTP = CreateClient(targetConfig.Remote);\r
+\r
+ long overall = 0;\r
+ while (overall != ilength) {\r
+ overall = monitorFTP.GetFileSize(outputFileName);\r
+ Progress = (int)((double)overall / ilength * 100);\r
+ Thread.Sleep(100);\r
+ }\r
+\r
+ }\r
+ catch (Exception e) {\r
+ throw e;\r
+ }\r
+ finally {\r
+ TerminateClient(monitorFTP);\r
+ TerminateClient(sourceFTP);\r
+ }\r
+\r
+ logger.Debug("Done");\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.ComponentModel;\r
+\r
+namespace Maestro.Targets {\r
+ internal interface ITargetProcessor : INotifyPropertyChanged {\r
+\r
+ DateTime Started { get; set; }\r
+\r
+ DateTime Finished { get; set; }\r
+\r
+ string Input { get; set; }\r
+\r
+ string Output { get; set; }\r
+\r
+ ProcessStatus Status { get; set; }\r
+\r
+ string Message { get; set; }\r
+\r
+ string ID { get; set; }\r
+\r
+ int Progress { get; set; }\r
+\r
+ bool Execute();\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+namespace Maestro.Targets {\r
+ public enum ProcessStatus {\r
+ Idle, Progress, Completed, Error\r
+ }\r
+}\r
--- /dev/null
+using DxPlay;\r
+using TrafficClient;\r
+\r
+namespace Maestro.Targets {\r
+ class SegmentConverter {\r
+\r
+ public MovieSegment ConvertToMovieSegment(Segment source) {\r
+ Timecode tcIn = new Timecode();\r
+ Timecode tcOut = new Timecode();\r
+ tcIn.Set((int)source.TCIn);\r
+ tcOut.Set((int)source.TCOut);\r
+ MovieSegment result = new MovieSegment() {\r
+ Comment = source.Comment,\r
+ Optional = source.Optional,\r
+ TCIn = tcIn,\r
+ TCOut = tcOut\r
+ };\r
+ return result;\r
+ }\r
+\r
+ public Segment ConvertToSegment(MovieSegment source) {\r
+ Segment result = new Segment() {\r
+ Comment = source.Comment,\r
+ Optional = source.Optional,\r
+ TCIn = source.TCIn.Frames,\r
+ TCOut = source.TCOut.Frames\r
+ };\r
+ return result;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using Maestro.Commons;\r
+using System;\r
+using System.Linq;\r
+using System.ComponentModel;\r
+using System.Runtime.CompilerServices;\r
+using System.Windows.Forms;\r
+using System.Collections.Generic;\r
+using Maestro.Configuration;\r
+using TrafficClient;\r
+using DxPlay;\r
+\r
+namespace Maestro.Targets {\r
+ public abstract class TargetProcessor : ITargetProcessor {\r
+ private ProcessStatus status;\r
+ private string message;\r
+ private string id;\r
+ private DateTime started;\r
+ private DateTime finished;\r
+ private string input;\r
+ private string output;\r
+ private Control parent;\r
+ private int progress;\r
+ protected Target targetConfig;\r
+ protected TrafficAPI client;\r
+ protected List<Segment> segments;\r
+ public TargetProcessor(Control parent, Target targetConfig, List<Segment> segments) {\r
+ this.parent = parent;\r
+ MaestroForm maestroForm = parent as MaestroForm;\r
+ TrafficMetadata metadata = maestroForm.Configuration.Metadatas.Where(m => { return m is TrafficMetadata; }).FirstOrDefault() as TrafficMetadata;\r
+ client = new TrafficAPI(metadata.Server.Address.OriginalString, metadata.Server.UserName, metadata.Server.Password, metadata.Server.Timeout);\r
+ this.segments = segments;\r
+ }\r
+\r
+ public event PropertyChangedEventHandler PropertyChanged;\r
+\r
+ protected void NotifyPropertyChanged([CallerMemberName] String propertyName = "") {\r
+ parent?.SafeCall(() => {\r
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\r
+ });\r
+ }\r
+\r
+ public abstract bool Execute();\r
+\r
+ protected void ExecuteCompleted() {\r
+ if (targetConfig.SaveSegments)\r
+ SaveSegments();\r
+ }\r
+\r
+ private void SaveSegments() {\r
+ MaestroForm maestroForm = parent as MaestroForm;\r
+ client.DeleteSegments(maestroForm.SelectedMetadata.VariantID);\r
+ if (segments != null)\r
+ foreach (Segment actual in segments) {\r
+ Segment segment = client.AddSegmentToCopia(maestroForm.SelectedMetadata.VariantID, actual.Comment, actual.TCIn, actual.TCOut, actual.Optional);\r
+ }\r
+ }\r
+\r
+ public ProcessStatus Status {\r
+ get {\r
+ return status;\r
+ }\r
+ set {\r
+ if (status != value) {\r
+ status = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public DateTime Started {\r
+ get {\r
+ return started;\r
+ }\r
+ set {\r
+ if (started != value) {\r
+ started = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public DateTime Finished {\r
+ get {\r
+ return finished;\r
+ }\r
+ set {\r
+ if (finished != value) {\r
+ finished = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public string Input {\r
+ get {\r
+ return input;\r
+ }\r
+ set {\r
+ if (input != value) {\r
+ input = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public string Output {\r
+ get {\r
+ return output;\r
+ }\r
+ set {\r
+ if (output != value) {\r
+ output = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public string Message {\r
+ get {\r
+ return message;\r
+ }\r
+ set {\r
+ if (message != value) {\r
+ message = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public string ID {\r
+ get {\r
+ return id;\r
+ }\r
+ set {\r
+ if (id != value) {\r
+ id = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ public int Progress {\r
+ get {\r
+ return progress;\r
+ }\r
+ set {\r
+ if (progress != value) {\r
+ progress = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<configuration>\r
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>\r
--- /dev/null
+<?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} ${logger:shortName=true} | ${message}" />\r
+ <target name="t2" xsi:type="Debugger" layout="ERROR stack: ${stacktrace:format=Raw}" />\r
+ <!--<target name="debug" xsi:type="Debugger" layout="${date:format=yyyy.MM.dd HH\:mm\:ss} ${level} ${message}" />-->\r
+ </targets>\r
+ <!--Naplózási szint-->\r
+ <rules>\r
+ <logger name="*" minlevel="Trace" writeTo="t1" />\r
+ <logger name="*" minlevel="Error" writeTo="t2" />\r
+ </rules>\r
+</nlog>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<packages>\r
+ <package id="FluentFTP" version="17.5.8" targetFramework="net461" />\r
+ <package id="LinkDotNet.MessageBus" version="0.1.1" targetFramework="net461" />\r
+ <package id="LinkDotNet.MessageBus.Contracts" version="0.1.1" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.OLE.Interop" version="7.10.6070" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.Shell.Interop" version="7.10.6071" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.Shell.Interop.10.0" version="10.0.30319" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.Shell.Interop.11.0" version="11.0.61030" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.Shell.Interop.8.0" version="8.0.50727" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.TextManager.Interop" version="7.10.6070" targetFramework="net461" />\r
+ <package id="Microsoft.VisualStudio.TextManager.Interop.8.0" version="8.0.50727" targetFramework="net461" />\r
+ <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net20" requireReinstallation="true" />\r
+ <package id="NLog" version="4.4.11" targetFramework="net461" />\r
+ <package id="NLog.Windows.Forms" version="4.2.3" targetFramework="net461" />\r
+</packages>
\ No newline at end of file
--- /dev/null
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio 15\r
+VisualStudioVersion = 15.0.26430.14\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DxPlay", "DxPlay\DxPlay.csproj", "{0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro", "Maestro\Maestro.csproj", "{BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaCubeClient", "MediaCubeClient\MediaCubeClient.csproj", "{CEFD0348-DED4-453E-BF3A-0B52F8890AB3}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OctopusClient", "OctopusClient\OctopusClient.csproj", "{8CC7C930-9DBF-487B-AED5-776937A649D5}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationTests", "IntegrationTests\IntegrationTests.csproj", "{4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AudioRecorder", "AudioRecorder\AudioRecorder.csproj", "{616D8912-16A4-493B-BC45-53BF2A5D9B92}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrafficClient", "PlanAIRClient\TrafficClient.csproj", "{A7A21311-CB0E-465F-8AD6-829FAF093F00}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|Any CPU = Debug|Any CPU\r
+ Debug|x64 = Debug|x64\r
+ Debug|x86 = Debug|x86\r
+ Release|Any CPU = Release|Any CPU\r
+ Release|x64 = Release|x64\r
+ Release|x86 = Release|x86\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x64.ActiveCfg = Debug|x64\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x64.Build.0 = Debug|x64\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x64.ActiveCfg = Release|x64\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x64.Build.0 = Release|x64\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {0B44B3D7-52D7-4C0E-9B1C-F48CEEDA36FE}.Release|x86.Build.0 = Release|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x64.Build.0 = Debug|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x64.ActiveCfg = Release|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x64.Build.0 = Release|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {BAF3E174-5D82-40FA-9E62-8C76ADBEA1E4}.Release|x86.Build.0 = Release|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x64.Build.0 = Debug|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x64.ActiveCfg = Release|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x64.Build.0 = Release|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {CEFD0348-DED4-453E-BF3A-0B52F8890AB3}.Release|x86.Build.0 = Release|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x64.Build.0 = Debug|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x64.ActiveCfg = Release|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x64.Build.0 = Release|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {8CC7C930-9DBF-487B-AED5-776937A649D5}.Release|x86.Build.0 = Release|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x64.Build.0 = Debug|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x64.ActiveCfg = Release|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x64.Build.0 = Release|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {4A61E975-F8DB-4BBF-BEFF-72FE67B2C08B}.Release|x86.Build.0 = Release|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x86.ActiveCfg = Debug|x86\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Debug|x86.Build.0 = Debug|x86\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x64.ActiveCfg = Release|Any CPU\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x86.ActiveCfg = Release|x86\r
+ {616D8912-16A4-493B-BC45-53BF2A5D9B92}.Release|x86.Build.0 = Release|x86\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x64.Build.0 = Debug|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x64.ActiveCfg = Release|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x64.Build.0 = Release|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {A7A21311-CB0E-465F-8AD6-829FAF093F00}.Release|x86.Build.0 = Release|Any CPU\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+ GlobalSection(TeamFoundationVersionControl) = preSolution\r
+ SccNumberOfProjects = 8\r
+ SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}\r
+ SccTeamFoundationServer = https://elgekko.visualstudio.com/\r
+ SccProjectUniqueName0 = MediaCubeClient\\MediaCubeClient.csproj\r
+ SccProjectName0 = MediaCubeClient\r
+ SccLocalPath0 = MediaCubeClient\r
+ SccProjectUniqueName1 = OctopusClient\\OctopusClient.csproj\r
+ SccProjectName1 = OctopusClient\r
+ SccLocalPath1 = OctopusClient\r
+ SccProjectUniqueName2 = PlanAIRClient\\TrafficClient.csproj\r
+ SccProjectName2 = PlanAIRClient\r
+ SccLocalPath2 = PlanAIRClient\r
+ SccLocalPath3 = .\r
+ SccProjectUniqueName4 = AudioRecorder\\AudioRecorder.csproj\r
+ SccProjectName4 = AudioRecorder\r
+ SccLocalPath4 = AudioRecorder\r
+ SccProjectUniqueName5 = DxPlay\\DxPlay.csproj\r
+ SccProjectName5 = DxPlay\r
+ SccLocalPath5 = DxPlay\r
+ SccProjectUniqueName6 = IntegrationTests\\IntegrationTests.csproj\r
+ SccProjectName6 = IntegrationTests\r
+ SccLocalPath6 = IntegrationTests\r
+ SccProjectUniqueName7 = Maestro\\Maestro.csproj\r
+ SccProjectName7 = Maestro\r
+ SccLocalPath7 = Maestro\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+using System;
+using System.Collections.Generic;
+using RestSharp;
+using IO.Swagger.Client;
+using IO.Swagger.Model;
+
+namespace IO.Swagger.Api
+{
+ /// <summary>
+ /// Represents a collection of functions to interact with the API endpoints
+ /// </summary>
+ public interface IDefaultApi
+ {
+ /// <summary>
+ /// sessionId alapján elkér a managertõl egy UserInfo-t.
+ /// </summary>
+ /// <param name="username"></param>
+ /// <returns>UserInfo</returns>
+ UserInfo LoginPost (LoginParameters username);
+ /// <summary>
+ /// A futó munkafolyamat leállításra kerül és kikerül a runQueue-ból.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ void MasCancelJobPost (long? jobId);
+ /// <summary>
+ /// A kliens felõl érkezõ új munkafolyamat indítása, amely a JobEngine submit metódusát hívja és jobStart paraméter alapján eldönti, hogy a munkafolyamat milyen módon kerüljön be a folyamatütemezõbe.
+ /// </summary>
+ /// <param name="createJobParameters"></param>
+ /// <returns>Job</returns>
+ Job MasCreateJobPost (CreateJobParameters createJobParameters);
+ /// <summary>
+ /// Név alapján kitörli a Sablont.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns>bool?</returns>
+ bool? MasDeleteTemplatePost (string name);
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes DomainCategory típusú entitást.
+ /// </summary>
+ /// <returns>List<DomainCategory></returns>
+ List<DomainCategory> MasGetAllDomainCategoryGet ();
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataElement típusú entitást.
+ /// </summary>
+ /// <returns>List<MetadataElement></returns>
+ List<MetadataElement> MasGetAllMetadataElementGet ();
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataType típusú entitást.
+ /// </summary>
+ /// <returns>List<MetadataType></returns>
+ List<MetadataType> MasGetAllMetadataTypeGet ();
+ /// <summary>
+ /// Fake hívás, így a webservice-en keresztül elérhetõ a Signal objektum.
+ /// </summary>
+ /// <returns>List<Signal></returns>
+ List<Signal> MasGetAllSignalGet ();
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes Store típusú entitást.
+ /// </summary>
+ /// <returns>List<Store></returns>
+ List<Store> MasGetAllStoreGet ();
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes UserInfo típusú entitást.
+ /// </summary>
+ /// <returns>List<UserInfo></returns>
+ List<UserInfo> MasGetAllUserInfoGet ();
+ /// <summary>
+ /// Fake hívás.
+ /// </summary>
+ /// <returns>Domains</returns>
+ Domains MasGetDomainsGet ();
+ /// <summary>
+ /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je és filtere egyenlõ filterId-val, illetve filter-el.
+ /// </summary>
+ /// <param name="getFilteredDomainByDisplayParameters"></param>
+ /// <returns>List<Domain></returns>
+ List<Domain> MasGetFilteredDomainByDisplayPost (GetFilteredDomainByDisplayParameters getFilteredDomainByDisplayParameters);
+ /// <summary>
+ /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je egyenlõ filterId.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Domain></returns>
+ List<Domain> MasGetFilteredDomainPost (long? filterId);
+ /// <summary>
+ /// filterId alapján elkéri a Foldereket az ItemManager-tõl.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Folder></returns>
+ List<Folder> MasGetFilteredFolderPost (long? filterId);
+ /// <summary>
+ /// Elkéri az ItemManager-tõl az összes olyan Médiát, amelynek itemId-ja megegyezik a bemeneti paraméterként kapott filterId-val.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Media></returns>
+ List<Media> MasGetFilteredMediaPost (long? filterId);
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan mentett vágólistát, amely name-el kezdõdik.
+ /// </summary>
+ /// <param name="getFilteredParameters"></param>
+ /// <returns>List<Scene></returns>
+ List<Scene> MasGetFilteredScenePost (GetFilteredParameters getFilteredParameters);
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan mentett keresést, amely filter-rel kezdõdik.
+ /// </summary>
+ /// <param name="getFilteredParameters"></param>
+ /// <returns>List<SearchDefinition></returns>
+ List<SearchDefinition> MasGetFilteredSearchDefinitionPost (GetFilteredParameters getFilteredParameters);
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan mappát, amely childId-ja filterId-vel egyenlõ.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Item></returns>
+ List<Item> MasGetFoldersPost (long? filterId);
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Item-et.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>Item</returns>
+ Item MasGetItemPost (long? id);
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ ItemType-ot.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>ItemType</returns>
+ ItemType MasGetItemTypePost (long? id);
+ /// <summary>
+ /// Típusleírók lekérdezése. Az adatmodell dinamikus, az anyag és verzió objektumok bõvítését szolgáló metaadatokat tartalmazza, kiegészítve az adatbázisban elõre definiált mezõk metaadat leíróival.
+ /// </summary>
+ /// <returns>List<ItemType></returns>
+ List<ItemType> MasGetItemTypesGet ();
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott jobId-vel rendelkezõ Job-ot.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns>Job</returns>
+ Job MasGetJobPost (long? jobId);
+ /// <summary>
+ /// Visszaadja a rendszerben tárolt összes sablon-t és végrehajtó osztályok listáját egy JobTemplatesInfo osztályba csomagolva.
+ /// </summary>
+ /// <returns>JobTemplatesInfo</returns>
+ JobTemplatesInfo MasGetJobTemplatesInfoGet ();
+ /// <summary>
+ /// Naplózási szint alapján visszaad egy napló listát.
+ /// </summary>
+ /// <param name="logLevel"></param>
+ /// <returns>List<LogEvent></returns>
+ List<LogEvent> MasGetLogEventsPost (LogLevel logLevel);
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Media-t.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>Media</returns>
+ Media MasGetMediaPost (long? id);
+ /// <summary>
+ /// Visszaadja a JobEngine getUserMessageQueues() lista méretét.
+ /// </summary>
+ /// <returns>int?</returns>
+ int? MasGetMessageCountGet ();
+ /// <summary>
+ /// Visszadja messageId alapján az a UserMessage-et, amely a JobEngine getUserMessageQueues() listájában van.
+ /// </summary>
+ /// <param name="messageId"></param>
+ /// <returns>UserMessage</returns>
+ UserMessage MasGetMessagePost (long? messageId);
+ /// <summary>
+ /// Visszaadja a JobEngine getUserMessageQueues()-ban lévõ UserMessage-ek listáját.
+ /// </summary>
+ /// <returns>List<UserMessage></returns>
+ List<UserMessage> MasGetMessagesGet ();
+ /// <summary>
+ /// fake hívás.
+ /// </summary>
+ /// <returns>MdType</returns>
+ MdType MasGetMetadataTypeGet ();
+ /// <summary>
+ /// A bemeneti paraméterként kapott storeUri-tól elkéri a hozzá tartozó remote file-okat.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>RemoteFileResponse</returns>
+ RemoteFileResponse MasGetRemoteFilesPost (StoreUri id);
+ /// <summary>
+ /// Az id azonosítóval rendelkezõ Scene objektumot kéri el az ItemManager-tõl.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>Scene</returns>
+ Scene MasGetScenePost (long? id);
+ /// <summary>
+ /// Az ItemManager-tõl elkéri a bemeneti paraméterben kapott azonosítóval rendelkezõ Mentett keresési feltételt.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>SearchDefinition</returns>
+ SearchDefinition MasGetSearchDefinitionsPost (long? id);
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan Szkript-et, amely mediaId-je megyezik a bemeneti paraméterként kapott mediaId-vel.
+ /// </summary>
+ /// <param name="mediaId"></param>
+ /// <returns>List<Shot></returns>
+ List<Shot> MasGetShotsPost (long? mediaId);
+ /// <summary>
+ /// Visszatér az illesztett transzkóder profil információkkal.
+ /// </summary>
+ /// <returns>List<TranscoderProfile></returns>
+ List<TranscoderProfile> MasGetTranscodeProfilesGet ();
+ /// <summary>
+ /// fake hívás
+ /// </summary>
+ /// <returns>List<UserRight></returns>
+ List<UserRight> MasGetUserRightGet ();
+ /// <summary>
+ /// nincs implementálva
+ /// </summary>
+ /// <returns></returns>
+ void MasLogoutGet ();
+ /// <summary>
+ /// Szerializáláshoz beregisztrált objektum típusok, melyek object-ként mennének át a proxy-n.
+ /// </summary>
+ /// <returns>List<Object></returns>
+ List<Object> MasRegisterGet ();
+ /// <summary>
+ /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból.
+ /// </summary>
+ /// <param name="removeParameters"></param>
+ /// <returns>SystemResponse</returns>
+ SystemResponse MasRemoveAllPost (RemoveParameters removeParameters);
+ /// <summary>
+ /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból.
+ /// </summary>
+ /// <param name="removeParameters"></param>
+ /// <returns>SystemResponse</returns>
+ SystemResponse MasRemovePost (RemoveParameters removeParameters);
+ /// <summary>
+ /// Elhelyez egy UserReplyMessage típusú üzenetet a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="replyMessageParameters"></param>
+ /// <returns></returns>
+ void MasReplyMessagePost (ReplyMessageParameters replyMessageParameters);
+ /// <summary>
+ /// Munkafolyamat azonosító alapján egy új újraindítási kérelmet helyez el a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ void MasRestartJobPost (long? jobId);
+ /// <summary>
+ /// Munkafolyamat azonosító alapján egy új folytatási kérelmet helyez el a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ void MasResumeJobPost (long? jobId);
+ /// <summary>
+ /// Egy új/létezõ lista kategóriát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="domainCategory"></param>
+ /// <returns>DomainCategoryResponse</returns>
+ DomainCategoryResponse MasSaveDomainCategoryPost (DomainCategory domainCategory);
+ /// <summary>
+ /// Egy új/létezõ listát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="domain"></param>
+ /// <returns>DomainResponse</returns>
+ DomainResponse MasSaveDomainPost (Domain domain);
+ /// <summary>
+ /// Egy új/létezõ mappát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="folder"></param>
+ /// <returns>FolderResponse</returns>
+ FolderResponse MasSaveFolderPost (Folder folder);
+ /// <summary>
+ /// Egy új/létezõ Anyagot ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="item"></param>
+ /// <returns>ItemResponse</returns>
+ ItemResponse MasSaveItemPost (Item item);
+ /// <summary>
+ /// Egy új/létezõ Anyag típust ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="itemType"></param>
+ /// <returns>ItemTypeResponse</returns>
+ ItemTypeResponse MasSaveItemTypePost (ItemType itemType);
+ /// <summary>
+ /// Egy új/létezõ Kópiát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="mediaFile"></param>
+ /// <returns>MediaFileResponse</returns>
+ MediaFileResponse MasSaveMediaFilePost (MediaFile mediaFile);
+ /// <summary>
+ /// Egy új/létezõ Verziót ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="media"></param>
+ /// <returns>MediaResponse</returns>
+ MediaResponse MasSaveMediaPost (Media media);
+ /// <summary>
+ /// Egy új/létezõ Meta adat elemet ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="metadataElement"></param>
+ /// <returns>MetadataElementResponse</returns>
+ MetadataElementResponse MasSaveMetadataElementPost (MetadataElement metadataElement);
+ /// <summary>
+ /// Egy új/létezõ Meta adatot ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="metadata"></param>
+ /// <returns>MetadataResponse</returns>
+ MetadataResponse MasSaveMetadataPost (Metadata metadata);
+ /// <summary>
+ /// Egy új/létezõ Meta adat típust ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="metadataType"></param>
+ /// <returns>MetadataTypeResponse</returns>
+ MetadataTypeResponse MasSaveMetadataTypePost (MetadataType metadataType);
+ /// <summary>
+ /// Egy új/létezõ Vágólista elemet ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="sceneContent"></param>
+ /// <returns>SceneContentResponse</returns>
+ SceneContentResponse MasSaveSceneContentPost (SceneContent sceneContent);
+ /// <summary>
+ /// Egy új/létezõ Vágólistát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="scene"></param>
+ /// <returns>SceneResponse</returns>
+ SceneResponse MasSaveScenePost (Scene scene);
+ /// <summary>
+ /// Egy új/létezõ Keresést ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="searchDefinition"></param>
+ /// <returns>SearchDefinitionResponse</returns>
+ SearchDefinitionResponse MasSaveSearchDefinitionPost (SearchDefinition searchDefinition);
+ /// <summary>
+ /// Egy új/létezõ Szkriptet ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="shot"></param>
+ /// <returns>ShotResponse</returns>
+ ShotResponse MasSaveShotPost (Shot shot);
+ /// <summary>
+ /// Egy új/létezõ Tárolót ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="store"></param>
+ /// <returns>StoreResponse</returns>
+ StoreResponse MasSaveStorePost (Store store);
+ /// <summary>
+ /// Egy új/létezõ Tároló uri-t ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="storeUri"></param>
+ /// <returns>StoreUriResponse</returns>
+ StoreUriResponse MasSaveStoreUriPost (StoreUri storeUri);
+ /// <summary>
+ /// Egy új Sablont tölt be a folyamatkezelõ motor program betöltõjébe.
+ /// </summary>
+ /// <param name="template"></param>
+ /// <returns>TemplateResponse</returns>
+ TemplateResponse MasSaveTemplatePost (Template template);
+ /// <summary>
+ /// Egy új/létezõ Felhasználót ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="userInfo"></param>
+ /// <returns>UserInfoResponse</returns>
+ UserInfoResponse MasSaveUserInfoPost (UserInfo userInfo);
+ /// <summary>
+ /// Anyagok keresése. A keresés elsõ futtatásakor csak az elsõ SearchResult tartalmaz anyagokat, a találati lista elsõ oldalát, cím szerint rendezetten. Újbóli futtatás esetén a paraméter megjelenítési információinak módosításával változtatható az anyagok listája.
+ /// </summary>
+ /// <param name="queryObject"></param>
+ /// <returns>List<SearchResult></returns>
+ List<SearchResult> MasSearchItemPost (QueryObject queryObject);
+ /// <summary>
+ /// Egy QueryObject paraméter alapján elkéri az ItemManager-tõl a paraméterben tárolt szûrési feltételeknek megfelelõ Job-ok listáját.
+ /// </summary>
+ /// <param name="parameter"></param>
+ /// <returns>List<Job></returns>
+ List<Job> MasSearchJobsPost (QueryObject parameter);
+ /// <summary>
+ /// Munkafolyamat motor leállítása.
+ /// </summary>
+ /// <returns></returns>
+ void MasShutdownGet ();
+ /// <summary>
+ /// Munkafolyamat motor elindítása.
+ /// </summary>
+ /// <returns></returns>
+ void MasStartupGet ();
+ /// <summary>
+ /// Munkafolyamat azonosító alapján egy új felfüggesztési kérelmet helyez el a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ void MasSuspendJobPost (long? jobId);
+ }
+
+ /// <summary>
+ /// Represents a collection of functions to interact with the API endpoints
+ /// </summary>
+ public class DefaultApi : IDefaultApi
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DefaultApi"/> class.
+ /// </summary>
+ /// <param name="apiClient"> an instance of ApiClient (optional)</param>
+ /// <returns></returns>
+ public DefaultApi(ApiClient apiClient = null)
+ {
+ if (apiClient == null) // use the default one in Configuration
+ this.ApiClient = Configuration.DefaultApiClient;
+ else
+ this.ApiClient = apiClient;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DefaultApi"/> class.
+ /// </summary>
+ /// <returns></returns>
+ public DefaultApi(String basePath)
+ {
+ this.ApiClient = new ApiClient(basePath);
+ }
+
+ /// <summary>
+ /// Sets the base path of the API client.
+ /// </summary>
+ /// <param name="basePath">The base path</param>
+ /// <value>The base path</value>
+ public void SetBasePath(String basePath)
+ {
+ this.ApiClient.BasePath = basePath;
+ }
+
+ /// <summary>
+ /// Gets the base path of the API client.
+ /// </summary>
+ /// <param name="basePath">The base path</param>
+ /// <value>The base path</value>
+ public String GetBasePath(String basePath)
+ {
+ return this.ApiClient.BasePath;
+ }
+
+ /// <summary>
+ /// Gets or sets the API client.
+ /// </summary>
+ /// <value>An instance of the ApiClient</value>
+ public ApiClient ApiClient {get; set;}
+
+ /// <summary>
+ /// sessionId alapján elkér a managertõl egy UserInfo-t.
+ /// </summary>
+ /// <param name="username"></param>
+ /// <returns>UserInfo</returns>
+ public UserInfo LoginPost (LoginParameters username)
+ {
+
+ // verify the required parameter 'username' is set
+ if (username == null) throw new ApiException(400, "Missing required parameter 'username' when calling LoginPost");
+
+
+ var path = "/login";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(username); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling LoginPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling LoginPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (UserInfo) ApiClient.Deserialize(response.Content, typeof(UserInfo), response.Headers);
+ }
+
+ /// <summary>
+ /// A futó munkafolyamat leállításra kerül és kikerül a runQueue-ból.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ public void MasCancelJobPost (long? jobId)
+ {
+
+ // verify the required parameter 'jobId' is set
+ if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasCancelJobPost");
+
+
+ var path = "/mas/cancelJob";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(jobId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasCancelJobPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasCancelJobPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// A kliens felõl érkezõ új munkafolyamat indítása, amely a JobEngine submit metódusát hívja és jobStart paraméter alapján eldönti, hogy a munkafolyamat milyen módon kerüljön be a folyamatütemezõbe.
+ /// </summary>
+ /// <param name="createJobParameters"></param>
+ /// <returns>Job</returns>
+ public Job MasCreateJobPost (CreateJobParameters createJobParameters)
+ {
+
+ // verify the required parameter 'createJobParameters' is set
+ if (createJobParameters == null) throw new ApiException(400, "Missing required parameter 'createJobParameters' when calling MasCreateJobPost");
+
+
+ var path = "/mas/createJob";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(createJobParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasCreateJobPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasCreateJobPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (Job) ApiClient.Deserialize(response.Content, typeof(Job), response.Headers);
+ }
+
+ /// <summary>
+ /// Név alapján kitörli a Sablont.
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns>bool?</returns>
+ public bool? MasDeleteTemplatePost (string name)
+ {
+
+ // verify the required parameter 'name' is set
+ if (name == null) throw new ApiException(400, "Missing required parameter 'name' when calling MasDeleteTemplatePost");
+
+
+ var path = "/mas/deleteTemplate";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(name); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasDeleteTemplatePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasDeleteTemplatePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (bool?) ApiClient.Deserialize(response.Content, typeof(bool?), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes DomainCategory típusú entitást.
+ /// </summary>
+ /// <returns>List<DomainCategory></returns>
+ public List<DomainCategory> MasGetAllDomainCategoryGet ()
+ {
+
+
+ var path = "/mas/getAllDomainCategory";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllDomainCategoryGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllDomainCategoryGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<DomainCategory>) ApiClient.Deserialize(response.Content, typeof(List<DomainCategory>), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataElement típusú entitást.
+ /// </summary>
+ /// <returns>List<MetadataElement></returns>
+ public List<MetadataElement> MasGetAllMetadataElementGet ()
+ {
+
+
+ var path = "/mas/getAllMetadataElement";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataElementGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataElementGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<MetadataElement>) ApiClient.Deserialize(response.Content, typeof(List<MetadataElement>), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes MetadataType típusú entitást.
+ /// </summary>
+ /// <returns>List<MetadataType></returns>
+ public List<MetadataType> MasGetAllMetadataTypeGet ()
+ {
+
+
+ var path = "/mas/getAllMetadataType";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataTypeGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllMetadataTypeGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<MetadataType>) ApiClient.Deserialize(response.Content, typeof(List<MetadataType>), response.Headers);
+ }
+
+ /// <summary>
+ /// Fake hívás, így a webservice-en keresztül elérhetõ a Signal objektum.
+ /// </summary>
+ /// <returns>List<Signal></returns>
+ public List<Signal> MasGetAllSignalGet ()
+ {
+
+
+ var path = "/mas/getAllSignal";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllSignalGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllSignalGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Signal>) ApiClient.Deserialize(response.Content, typeof(List<Signal>), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes Store típusú entitást.
+ /// </summary>
+ /// <returns>List<Store></returns>
+ public List<Store> MasGetAllStoreGet ()
+ {
+
+
+ var path = "/mas/getAllStore";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllStoreGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllStoreGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Store>) ApiClient.Deserialize(response.Content, typeof(List<Store>), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager-tõl elkéri az adatbázisban eltárolt összes UserInfo típusú entitást.
+ /// </summary>
+ /// <returns>List<UserInfo></returns>
+ public List<UserInfo> MasGetAllUserInfoGet ()
+ {
+
+
+ var path = "/mas/getAllUserInfo";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllUserInfoGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetAllUserInfoGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<UserInfo>) ApiClient.Deserialize(response.Content, typeof(List<UserInfo>), response.Headers);
+ }
+
+ /// <summary>
+ /// Fake hívás.
+ /// </summary>
+ /// <returns>Domains</returns>
+ public Domains MasGetDomainsGet ()
+ {
+
+
+ var path = "/mas/getDomains";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetDomainsGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetDomainsGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (Domains) ApiClient.Deserialize(response.Content, typeof(Domains), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je és filtere egyenlõ filterId-val, illetve filter-el.
+ /// </summary>
+ /// <param name="getFilteredDomainByDisplayParameters"></param>
+ /// <returns>List<Domain></returns>
+ public List<Domain> MasGetFilteredDomainByDisplayPost (GetFilteredDomainByDisplayParameters getFilteredDomainByDisplayParameters)
+ {
+
+ // verify the required parameter 'getFilteredDomainByDisplayParameters' is set
+ if (getFilteredDomainByDisplayParameters == null) throw new ApiException(400, "Missing required parameter 'getFilteredDomainByDisplayParameters' when calling MasGetFilteredDomainByDisplayPost");
+
+
+ var path = "/mas/getFilteredDomainByDisplay";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(getFilteredDomainByDisplayParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainByDisplayPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainByDisplayPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Domain>) ApiClient.Deserialize(response.Content, typeof(List<Domain>), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager elkéri azokat a Domain-eket, melyek domainCategoryId-je egyenlõ filterId.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Domain></returns>
+ public List<Domain> MasGetFilteredDomainPost (long? filterId)
+ {
+
+ // verify the required parameter 'filterId' is set
+ if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFilteredDomainPost");
+
+
+ var path = "/mas/getFilteredDomain";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(filterId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredDomainPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Domain>) ApiClient.Deserialize(response.Content, typeof(List<Domain>), response.Headers);
+ }
+
+ /// <summary>
+ /// filterId alapján elkéri a Foldereket az ItemManager-tõl.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Folder></returns>
+ public List<Folder> MasGetFilteredFolderPost (long? filterId)
+ {
+
+ // verify the required parameter 'filterId' is set
+ if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFilteredFolderPost");
+
+
+ var path = "/mas/getFilteredFolder";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(filterId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredFolderPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredFolderPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Folder>) ApiClient.Deserialize(response.Content, typeof(List<Folder>), response.Headers);
+ }
+
+ /// <summary>
+ /// Elkéri az ItemManager-tõl az összes olyan Médiát, amelynek itemId-ja megegyezik a bemeneti paraméterként kapott filterId-val.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Media></returns>
+ public List<Media> MasGetFilteredMediaPost (long? filterId)
+ {
+
+ // verify the required parameter 'filterId' is set
+ if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFilteredMediaPost");
+
+
+ var path = "/mas/getFilteredMedia";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(filterId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredMediaPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredMediaPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Media>) ApiClient.Deserialize(response.Content, typeof(List<Media>), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan mentett vágólistát, amely name-el kezdõdik.
+ /// </summary>
+ /// <param name="getFilteredParameters"></param>
+ /// <returns>List<Scene></returns>
+ public List<Scene> MasGetFilteredScenePost (GetFilteredParameters getFilteredParameters)
+ {
+
+ // verify the required parameter 'getFilteredParameters' is set
+ if (getFilteredParameters == null) throw new ApiException(400, "Missing required parameter 'getFilteredParameters' when calling MasGetFilteredScenePost");
+
+
+ var path = "/mas/getFilteredScene";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(getFilteredParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredScenePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredScenePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Scene>) ApiClient.Deserialize(response.Content, typeof(List<Scene>), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan mentett keresést, amely filter-rel kezdõdik.
+ /// </summary>
+ /// <param name="getFilteredParameters"></param>
+ /// <returns>List<SearchDefinition></returns>
+ public List<SearchDefinition> MasGetFilteredSearchDefinitionPost (GetFilteredParameters getFilteredParameters)
+ {
+
+ // verify the required parameter 'getFilteredParameters' is set
+ if (getFilteredParameters == null) throw new ApiException(400, "Missing required parameter 'getFilteredParameters' when calling MasGetFilteredSearchDefinitionPost");
+
+
+ var path = "/mas/getFilteredSearchDefinition";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(getFilteredParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredSearchDefinitionPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFilteredSearchDefinitionPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<SearchDefinition>) ApiClient.Deserialize(response.Content, typeof(List<SearchDefinition>), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan mappát, amely childId-ja filterId-vel egyenlõ.
+ /// </summary>
+ /// <param name="filterId"></param>
+ /// <returns>List<Item></returns>
+ public List<Item> MasGetFoldersPost (long? filterId)
+ {
+
+ // verify the required parameter 'filterId' is set
+ if (filterId == null) throw new ApiException(400, "Missing required parameter 'filterId' when calling MasGetFoldersPost");
+
+
+ var path = "/mas/getFolders";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(filterId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFoldersPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetFoldersPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Item>) ApiClient.Deserialize(response.Content, typeof(List<Item>), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Item-et.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>Item</returns>
+ public Item MasGetItemPost (long? id)
+ {
+
+ // verify the required parameter 'id' is set
+ if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetItemPost");
+
+
+ var path = "/mas/getItem";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(id); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (Item) ApiClient.Deserialize(response.Content, typeof(Item), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ ItemType-ot.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>ItemType</returns>
+ public ItemType MasGetItemTypePost (long? id)
+ {
+
+ // verify the required parameter 'id' is set
+ if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetItemTypePost");
+
+
+ var path = "/mas/getItemType";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(id); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (ItemType) ApiClient.Deserialize(response.Content, typeof(ItemType), response.Headers);
+ }
+
+ /// <summary>
+ /// Típusleírók lekérdezése. Az adatmodell dinamikus, az anyag és verzió objektumok bõvítését szolgáló metaadatokat tartalmazza, kiegészítve az adatbázisban elõre definiált mezõk metaadat leíróival.
+ /// </summary>
+ /// <returns>List<ItemType></returns>
+ public List<ItemType> MasGetItemTypesGet ()
+ {
+
+
+ var path = "/mas/getItemTypes";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypesGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetItemTypesGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<ItemType>) ApiClient.Deserialize(response.Content, typeof(List<ItemType>), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott jobId-vel rendelkezõ Job-ot.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns>Job</returns>
+ public Job MasGetJobPost (long? jobId)
+ {
+
+ // verify the required parameter 'jobId' is set
+ if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasGetJobPost");
+
+
+ var path = "/mas/getJob";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(jobId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (Job) ApiClient.Deserialize(response.Content, typeof(Job), response.Headers);
+ }
+
+ /// <summary>
+ /// Visszaadja a rendszerben tárolt összes sablon-t és végrehajtó osztályok listáját egy JobTemplatesInfo osztályba csomagolva.
+ /// </summary>
+ /// <returns>JobTemplatesInfo</returns>
+ public JobTemplatesInfo MasGetJobTemplatesInfoGet ()
+ {
+
+
+ var path = "/mas/getJobTemplatesInfo";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobTemplatesInfoGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetJobTemplatesInfoGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (JobTemplatesInfo) ApiClient.Deserialize(response.Content, typeof(JobTemplatesInfo), response.Headers);
+ }
+
+ /// <summary>
+ /// Naplózási szint alapján visszaad egy napló listát.
+ /// </summary>
+ /// <param name="logLevel"></param>
+ /// <returns>List<LogEvent></returns>
+ public List<LogEvent> MasGetLogEventsPost (LogLevel logLevel)
+ {
+
+ // verify the required parameter 'logLevel' is set
+ if (logLevel == null) throw new ApiException(400, "Missing required parameter 'logLevel' when calling MasGetLogEventsPost");
+
+
+ var path = "/mas/getLogEvents";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(logLevel); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetLogEventsPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetLogEventsPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<LogEvent>) ApiClient.Deserialize(response.Content, typeof(List<LogEvent>), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri a bemeneti paraméterként kapott id-vel rendelkezõ Media-t.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>Media</returns>
+ public Media MasGetMediaPost (long? id)
+ {
+
+ // verify the required parameter 'id' is set
+ if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetMediaPost");
+
+
+ var path = "/mas/getMedia";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(id); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMediaPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMediaPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (Media) ApiClient.Deserialize(response.Content, typeof(Media), response.Headers);
+ }
+
+ /// <summary>
+ /// Visszaadja a JobEngine getUserMessageQueues() lista méretét.
+ /// </summary>
+ /// <returns>int?</returns>
+ public int? MasGetMessageCountGet ()
+ {
+
+
+ var path = "/mas/getMessageCount";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessageCountGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessageCountGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (int?) ApiClient.Deserialize(response.Content, typeof(int?), response.Headers);
+ }
+
+ /// <summary>
+ /// Visszadja messageId alapján az a UserMessage-et, amely a JobEngine getUserMessageQueues() listájában van.
+ /// </summary>
+ /// <param name="messageId"></param>
+ /// <returns>UserMessage</returns>
+ public UserMessage MasGetMessagePost (long? messageId)
+ {
+
+ // verify the required parameter 'messageId' is set
+ if (messageId == null) throw new ApiException(400, "Missing required parameter 'messageId' when calling MasGetMessagePost");
+
+
+ var path = "/mas/getMessage";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(messageId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (UserMessage) ApiClient.Deserialize(response.Content, typeof(UserMessage), response.Headers);
+ }
+
+ /// <summary>
+ /// Visszaadja a JobEngine getUserMessageQueues()-ban lévõ UserMessage-ek listáját.
+ /// </summary>
+ /// <returns>List<UserMessage></returns>
+ public List<UserMessage> MasGetMessagesGet ()
+ {
+
+
+ var path = "/mas/getMessages";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagesGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMessagesGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<UserMessage>) ApiClient.Deserialize(response.Content, typeof(List<UserMessage>), response.Headers);
+ }
+
+ /// <summary>
+ /// fake hívás.
+ /// </summary>
+ /// <returns>MdType</returns>
+ public MdType MasGetMetadataTypeGet ()
+ {
+
+
+ var path = "/mas/getMetadataType";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMetadataTypeGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetMetadataTypeGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (MdType) ApiClient.Deserialize(response.Content, typeof(MdType), response.Headers);
+ }
+
+ /// <summary>
+ /// A bemeneti paraméterként kapott storeUri-tól elkéri a hozzá tartozó remote file-okat.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>RemoteFileResponse</returns>
+ public RemoteFileResponse MasGetRemoteFilesPost (StoreUri id)
+ {
+
+ // verify the required parameter 'id' is set
+ if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetRemoteFilesPost");
+
+
+ var path = "/mas/getRemoteFiles";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(id); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetRemoteFilesPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetRemoteFilesPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (RemoteFileResponse) ApiClient.Deserialize(response.Content, typeof(RemoteFileResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Az id azonosítóval rendelkezõ Scene objektumot kéri el az ItemManager-tõl.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>Scene</returns>
+ public Scene MasGetScenePost (long? id)
+ {
+
+ // verify the required parameter 'id' is set
+ if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetScenePost");
+
+
+ var path = "/mas/getScene";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(id); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetScenePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetScenePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (Scene) ApiClient.Deserialize(response.Content, typeof(Scene), response.Headers);
+ }
+
+ /// <summary>
+ /// Az ItemManager-tõl elkéri a bemeneti paraméterben kapott azonosítóval rendelkezõ Mentett keresési feltételt.
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns>SearchDefinition</returns>
+ public SearchDefinition MasGetSearchDefinitionsPost (long? id)
+ {
+
+ // verify the required parameter 'id' is set
+ if (id == null) throw new ApiException(400, "Missing required parameter 'id' when calling MasGetSearchDefinitionsPost");
+
+
+ var path = "/mas/getSearchDefinitions";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(id); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetSearchDefinitionsPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetSearchDefinitionsPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (SearchDefinition) ApiClient.Deserialize(response.Content, typeof(SearchDefinition), response.Headers);
+ }
+
+ /// <summary>
+ /// ItemManager-tõl elkéri az összes olyan Szkript-et, amely mediaId-je megyezik a bemeneti paraméterként kapott mediaId-vel.
+ /// </summary>
+ /// <param name="mediaId"></param>
+ /// <returns>List<Shot></returns>
+ public List<Shot> MasGetShotsPost (long? mediaId)
+ {
+
+ // verify the required parameter 'mediaId' is set
+ if (mediaId == null) throw new ApiException(400, "Missing required parameter 'mediaId' when calling MasGetShotsPost");
+
+
+ var path = "/mas/getShots";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(mediaId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetShotsPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetShotsPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Shot>) ApiClient.Deserialize(response.Content, typeof(List<Shot>), response.Headers);
+ }
+
+ /// <summary>
+ /// Visszatér az illesztett transzkóder profil információkkal.
+ /// </summary>
+ /// <returns>List<TranscoderProfile></returns>
+ public List<TranscoderProfile> MasGetTranscodeProfilesGet ()
+ {
+
+
+ var path = "/mas/getTranscodeProfiles";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetTranscodeProfilesGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetTranscodeProfilesGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<TranscoderProfile>) ApiClient.Deserialize(response.Content, typeof(List<TranscoderProfile>), response.Headers);
+ }
+
+ /// <summary>
+ /// fake hívás
+ /// </summary>
+ /// <returns>List<UserRight></returns>
+ public List<UserRight> MasGetUserRightGet ()
+ {
+
+
+ var path = "/mas/getUserRight";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetUserRightGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasGetUserRightGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<UserRight>) ApiClient.Deserialize(response.Content, typeof(List<UserRight>), response.Headers);
+ }
+
+ /// <summary>
+ /// nincs implementálva
+ /// </summary>
+ /// <returns></returns>
+ public void MasLogoutGet ()
+ {
+
+
+ var path = "/mas/logout";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasLogoutGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasLogoutGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// Szerializáláshoz beregisztrált objektum típusok, melyek object-ként mennének át a proxy-n.
+ /// </summary>
+ /// <returns>List<Object></returns>
+ public List<Object> MasRegisterGet ()
+ {
+
+
+ var path = "/mas/register";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRegisterGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRegisterGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Object>) ApiClient.Deserialize(response.Content, typeof(List<Object>), response.Headers);
+ }
+
+ /// <summary>
+ /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból.
+ /// </summary>
+ /// <param name="removeParameters"></param>
+ /// <returns>SystemResponse</returns>
+ public SystemResponse MasRemoveAllPost (RemoveParameters removeParameters)
+ {
+
+ // verify the required parameter 'removeParameters' is set
+ if (removeParameters == null) throw new ApiException(400, "Missing required parameter 'removeParameters' when calling MasRemoveAllPost");
+
+
+ var path = "/mas/removeAll";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(removeParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRemoveAllPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRemoveAllPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (SystemResponse) ApiClient.Deserialize(response.Content, typeof(SystemResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Az osztály név és azonosító lista alapján az ItemManager-el eltávolítja az entitásokat az adatbázisból.
+ /// </summary>
+ /// <param name="removeParameters"></param>
+ /// <returns>SystemResponse</returns>
+ public SystemResponse MasRemovePost (RemoveParameters removeParameters)
+ {
+
+ // verify the required parameter 'removeParameters' is set
+ if (removeParameters == null) throw new ApiException(400, "Missing required parameter 'removeParameters' when calling MasRemovePost");
+
+
+ var path = "/mas/remove";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(removeParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRemovePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRemovePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (SystemResponse) ApiClient.Deserialize(response.Content, typeof(SystemResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Elhelyez egy UserReplyMessage típusú üzenetet a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="replyMessageParameters"></param>
+ /// <returns></returns>
+ public void MasReplyMessagePost (ReplyMessageParameters replyMessageParameters)
+ {
+
+ // verify the required parameter 'replyMessageParameters' is set
+ if (replyMessageParameters == null) throw new ApiException(400, "Missing required parameter 'replyMessageParameters' when calling MasReplyMessagePost");
+
+
+ var path = "/mas/replyMessage";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(replyMessageParameters); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasReplyMessagePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasReplyMessagePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// Munkafolyamat azonosító alapján egy új újraindítási kérelmet helyez el a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ public void MasRestartJobPost (long? jobId)
+ {
+
+ // verify the required parameter 'jobId' is set
+ if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasRestartJobPost");
+
+
+ var path = "/mas/restartJob";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(jobId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRestartJobPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasRestartJobPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// Munkafolyamat azonosító alapján egy új folytatási kérelmet helyez el a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ public void MasResumeJobPost (long? jobId)
+ {
+
+ // verify the required parameter 'jobId' is set
+ if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasResumeJobPost");
+
+
+ var path = "/mas/resumeJob";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(jobId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasResumeJobPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasResumeJobPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// Egy új/létezõ lista kategóriát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="domainCategory"></param>
+ /// <returns>DomainCategoryResponse</returns>
+ public DomainCategoryResponse MasSaveDomainCategoryPost (DomainCategory domainCategory)
+ {
+
+ // verify the required parameter 'domainCategory' is set
+ if (domainCategory == null) throw new ApiException(400, "Missing required parameter 'domainCategory' when calling MasSaveDomainCategoryPost");
+
+
+ var path = "/mas/saveDomainCategory";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(domainCategory); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainCategoryPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainCategoryPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (DomainCategoryResponse) ApiClient.Deserialize(response.Content, typeof(DomainCategoryResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ listát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="domain"></param>
+ /// <returns>DomainResponse</returns>
+ public DomainResponse MasSaveDomainPost (Domain domain)
+ {
+
+ // verify the required parameter 'domain' is set
+ if (domain == null) throw new ApiException(400, "Missing required parameter 'domain' when calling MasSaveDomainPost");
+
+
+ var path = "/mas/saveDomain";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(domain); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveDomainPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (DomainResponse) ApiClient.Deserialize(response.Content, typeof(DomainResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ mappát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="folder"></param>
+ /// <returns>FolderResponse</returns>
+ public FolderResponse MasSaveFolderPost (Folder folder)
+ {
+
+ // verify the required parameter 'folder' is set
+ if (folder == null) throw new ApiException(400, "Missing required parameter 'folder' when calling MasSaveFolderPost");
+
+
+ var path = "/mas/saveFolder";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(folder); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveFolderPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveFolderPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (FolderResponse) ApiClient.Deserialize(response.Content, typeof(FolderResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Anyagot ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="item"></param>
+ /// <returns>ItemResponse</returns>
+ public ItemResponse MasSaveItemPost (Item item)
+ {
+
+ // verify the required parameter 'item' is set
+ if (item == null) throw new ApiException(400, "Missing required parameter 'item' when calling MasSaveItemPost");
+
+
+ var path = "/mas/saveItem";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(item); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (ItemResponse) ApiClient.Deserialize(response.Content, typeof(ItemResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Anyag típust ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="itemType"></param>
+ /// <returns>ItemTypeResponse</returns>
+ public ItemTypeResponse MasSaveItemTypePost (ItemType itemType)
+ {
+
+ // verify the required parameter 'itemType' is set
+ if (itemType == null) throw new ApiException(400, "Missing required parameter 'itemType' when calling MasSaveItemTypePost");
+
+
+ var path = "/mas/saveItemType";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(itemType); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemTypePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveItemTypePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (ItemTypeResponse) ApiClient.Deserialize(response.Content, typeof(ItemTypeResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Kópiát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="mediaFile"></param>
+ /// <returns>MediaFileResponse</returns>
+ public MediaFileResponse MasSaveMediaFilePost (MediaFile mediaFile)
+ {
+
+ // verify the required parameter 'mediaFile' is set
+ if (mediaFile == null) throw new ApiException(400, "Missing required parameter 'mediaFile' when calling MasSaveMediaFilePost");
+
+
+ var path = "/mas/saveMediaFile";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(mediaFile); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaFilePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaFilePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (MediaFileResponse) ApiClient.Deserialize(response.Content, typeof(MediaFileResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Verziót ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="media"></param>
+ /// <returns>MediaResponse</returns>
+ public MediaResponse MasSaveMediaPost (Media media)
+ {
+
+ // verify the required parameter 'media' is set
+ if (media == null) throw new ApiException(400, "Missing required parameter 'media' when calling MasSaveMediaPost");
+
+
+ var path = "/mas/saveMedia";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(media); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMediaPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (MediaResponse) ApiClient.Deserialize(response.Content, typeof(MediaResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Meta adat elemet ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="metadataElement"></param>
+ /// <returns>MetadataElementResponse</returns>
+ public MetadataElementResponse MasSaveMetadataElementPost (MetadataElement metadataElement)
+ {
+
+ // verify the required parameter 'metadataElement' is set
+ if (metadataElement == null) throw new ApiException(400, "Missing required parameter 'metadataElement' when calling MasSaveMetadataElementPost");
+
+
+ var path = "/mas/saveMetadataElement";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(metadataElement); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataElementPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataElementPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (MetadataElementResponse) ApiClient.Deserialize(response.Content, typeof(MetadataElementResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Meta adatot ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="metadata"></param>
+ /// <returns>MetadataResponse</returns>
+ public MetadataResponse MasSaveMetadataPost (Metadata metadata)
+ {
+
+ // verify the required parameter 'metadata' is set
+ if (metadata == null) throw new ApiException(400, "Missing required parameter 'metadata' when calling MasSaveMetadataPost");
+
+
+ var path = "/mas/saveMetadata";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(metadata); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (MetadataResponse) ApiClient.Deserialize(response.Content, typeof(MetadataResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Meta adat típust ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="metadataType"></param>
+ /// <returns>MetadataTypeResponse</returns>
+ public MetadataTypeResponse MasSaveMetadataTypePost (MetadataType metadataType)
+ {
+
+ // verify the required parameter 'metadataType' is set
+ if (metadataType == null) throw new ApiException(400, "Missing required parameter 'metadataType' when calling MasSaveMetadataTypePost");
+
+
+ var path = "/mas/saveMetadataType";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(metadataType); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataTypePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveMetadataTypePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (MetadataTypeResponse) ApiClient.Deserialize(response.Content, typeof(MetadataTypeResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Vágólista elemet ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="sceneContent"></param>
+ /// <returns>SceneContentResponse</returns>
+ public SceneContentResponse MasSaveSceneContentPost (SceneContent sceneContent)
+ {
+
+ // verify the required parameter 'sceneContent' is set
+ if (sceneContent == null) throw new ApiException(400, "Missing required parameter 'sceneContent' when calling MasSaveSceneContentPost");
+
+
+ var path = "/mas/saveSceneContent";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(sceneContent); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSceneContentPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSceneContentPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (SceneContentResponse) ApiClient.Deserialize(response.Content, typeof(SceneContentResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Vágólistát ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="scene"></param>
+ /// <returns>SceneResponse</returns>
+ public SceneResponse MasSaveScenePost (Scene scene)
+ {
+
+ // verify the required parameter 'scene' is set
+ if (scene == null) throw new ApiException(400, "Missing required parameter 'scene' when calling MasSaveScenePost");
+
+
+ var path = "/mas/saveScene";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(scene); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveScenePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveScenePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (SceneResponse) ApiClient.Deserialize(response.Content, typeof(SceneResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Keresést ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="searchDefinition"></param>
+ /// <returns>SearchDefinitionResponse</returns>
+ public SearchDefinitionResponse MasSaveSearchDefinitionPost (SearchDefinition searchDefinition)
+ {
+
+ // verify the required parameter 'searchDefinition' is set
+ if (searchDefinition == null) throw new ApiException(400, "Missing required parameter 'searchDefinition' when calling MasSaveSearchDefinitionPost");
+
+
+ var path = "/mas/saveSearchDefinition";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(searchDefinition); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSearchDefinitionPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveSearchDefinitionPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (SearchDefinitionResponse) ApiClient.Deserialize(response.Content, typeof(SearchDefinitionResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Szkriptet ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="shot"></param>
+ /// <returns>ShotResponse</returns>
+ public ShotResponse MasSaveShotPost (Shot shot)
+ {
+
+ // verify the required parameter 'shot' is set
+ if (shot == null) throw new ApiException(400, "Missing required parameter 'shot' when calling MasSaveShotPost");
+
+
+ var path = "/mas/saveShot";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(shot); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveShotPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveShotPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (ShotResponse) ApiClient.Deserialize(response.Content, typeof(ShotResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Tárolót ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="store"></param>
+ /// <returns>StoreResponse</returns>
+ public StoreResponse MasSaveStorePost (Store store)
+ {
+
+ // verify the required parameter 'store' is set
+ if (store == null) throw new ApiException(400, "Missing required parameter 'store' when calling MasSaveStorePost");
+
+
+ var path = "/mas/saveStore";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(store); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStorePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStorePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (StoreResponse) ApiClient.Deserialize(response.Content, typeof(StoreResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Tároló uri-t ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="storeUri"></param>
+ /// <returns>StoreUriResponse</returns>
+ public StoreUriResponse MasSaveStoreUriPost (StoreUri storeUri)
+ {
+
+ // verify the required parameter 'storeUri' is set
+ if (storeUri == null) throw new ApiException(400, "Missing required parameter 'storeUri' when calling MasSaveStoreUriPost");
+
+
+ var path = "/mas/saveStoreUri";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(storeUri); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStoreUriPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveStoreUriPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (StoreUriResponse) ApiClient.Deserialize(response.Content, typeof(StoreUriResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új Sablont tölt be a folyamatkezelõ motor program betöltõjébe.
+ /// </summary>
+ /// <param name="template"></param>
+ /// <returns>TemplateResponse</returns>
+ public TemplateResponse MasSaveTemplatePost (Template template)
+ {
+
+ // verify the required parameter 'template' is set
+ if (template == null) throw new ApiException(400, "Missing required parameter 'template' when calling MasSaveTemplatePost");
+
+
+ var path = "/mas/saveTemplate";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(template); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveTemplatePost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveTemplatePost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (TemplateResponse) ApiClient.Deserialize(response.Content, typeof(TemplateResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy új/létezõ Felhasználót ment el/módosít az adatbázisba.
+ /// </summary>
+ /// <param name="userInfo"></param>
+ /// <returns>UserInfoResponse</returns>
+ public UserInfoResponse MasSaveUserInfoPost (UserInfo userInfo)
+ {
+
+ // verify the required parameter 'userInfo' is set
+ if (userInfo == null) throw new ApiException(400, "Missing required parameter 'userInfo' when calling MasSaveUserInfoPost");
+
+
+ var path = "/mas/saveUserInfo";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(userInfo); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveUserInfoPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSaveUserInfoPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (UserInfoResponse) ApiClient.Deserialize(response.Content, typeof(UserInfoResponse), response.Headers);
+ }
+
+ /// <summary>
+ /// Anyagok keresése. A keresés elsõ futtatásakor csak az elsõ SearchResult tartalmaz anyagokat, a találati lista elsõ oldalát, cím szerint rendezetten. Újbóli futtatás esetén a paraméter megjelenítési információinak módosításával változtatható az anyagok listája.
+ /// </summary>
+ /// <param name="queryObject"></param>
+ /// <returns>List<SearchResult></returns>
+ public List<SearchResult> MasSearchItemPost (QueryObject queryObject)
+ {
+
+ // verify the required parameter 'queryObject' is set
+ if (queryObject == null) throw new ApiException(400, "Missing required parameter 'queryObject' when calling MasSearchItemPost");
+
+
+ var path = "/mas/searchItem";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(queryObject); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSearchItemPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSearchItemPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<SearchResult>) ApiClient.Deserialize(response.Content, typeof(List<SearchResult>), response.Headers);
+ }
+
+ /// <summary>
+ /// Egy QueryObject paraméter alapján elkéri az ItemManager-tõl a paraméterben tárolt szûrési feltételeknek megfelelõ Job-ok listáját.
+ /// </summary>
+ /// <param name="parameter"></param>
+ /// <returns>List<Job></returns>
+ public List<Job> MasSearchJobsPost (QueryObject parameter)
+ {
+
+ // verify the required parameter 'parameter' is set
+ if (parameter == null) throw new ApiException(400, "Missing required parameter 'parameter' when calling MasSearchJobsPost");
+
+
+ var path = "/mas/searchJobs";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(parameter); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSearchJobsPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSearchJobsPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return (List<Job>) ApiClient.Deserialize(response.Content, typeof(List<Job>), response.Headers);
+ }
+
+ /// <summary>
+ /// Munkafolyamat motor leállítása.
+ /// </summary>
+ /// <returns></returns>
+ public void MasShutdownGet ()
+ {
+
+
+ var path = "/mas/shutdown";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasShutdownGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasShutdownGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// Munkafolyamat motor elindítása.
+ /// </summary>
+ /// <returns></returns>
+ public void MasStartupGet ()
+ {
+
+
+ var path = "/mas/startup";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasStartupGet: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasStartupGet: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ /// <summary>
+ /// Munkafolyamat azonosító alapján egy új felfüggesztési kérelmet helyez el a motor rendszerüzenet várakozási sorába.
+ /// </summary>
+ /// <param name="jobId"></param>
+ /// <returns></returns>
+ public void MasSuspendJobPost (long? jobId)
+ {
+
+ // verify the required parameter 'jobId' is set
+ if (jobId == null) throw new ApiException(400, "Missing required parameter 'jobId' when calling MasSuspendJobPost");
+
+
+ var path = "/mas/suspendJob";
+ path = path.Replace("{format}", "json");
+
+ var queryParams = new Dictionary<String, String>();
+ var headerParams = new Dictionary<String, String>();
+ var formParams = new Dictionary<String, String>();
+ var fileParams = new Dictionary<String, FileParameter>();
+ String postBody = null;
+
+ postBody = ApiClient.Serialize(jobId); // http body (model) parameter
+
+ // authentication setting, if any
+ String[] authSettings = new String[] { "api_key" };
+
+ // make the HTTP request
+ IRestResponse response = (IRestResponse) ApiClient.CallApi(path, Method.POST, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
+
+ if (((int)response.StatusCode) >= 400)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSuspendJobPost: " + response.Content, response.Content);
+ else if (((int)response.StatusCode) == 0)
+ throw new ApiException ((int)response.StatusCode, "Error calling MasSuspendJobPost: " + response.ErrorMessage, response.ErrorMessage);
+
+ return;
+ }
+
+ }
+}
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Globalization;\r
+using System.Text.RegularExpressions;\r
+using System.IO;\r
+using System.Web;\r
+using System.Linq;\r
+using System.Net;\r
+using System.Text;\r
+using Newtonsoft.Json;\r
+using RestSharp;\r
+using RestSharp.Extensions;\r
+using RestSharp.Extensions.MonoHttp;\r
+\r
+namespace IO.Swagger.Client {\r
+ /// <summary>\r
+ /// API client is mainly responible for making the HTTP call to the API backend.\r
+ /// </summary>\r
+ public class ApiClient {\r
+ private readonly Dictionary<String, String> _defaultHeaderMap = new Dictionary<String, String>();\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="ApiClient" /> class.\r
+ /// </summary>\r
+ /// <param name="basePath">The base path.</param>\r
+ public ApiClient(String basePath = "https://virtserver.swaggerhub.com/laszlo.eros/petstoremas/1.0.0") {\r
+ BasePath = basePath;\r
+ RestClient = new RestClient(BasePath);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the base path.\r
+ /// </summary>\r
+ /// <value>The base path</value>\r
+ public string BasePath { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the RestClient.\r
+ /// </summary>\r
+ /// <value>An instance of the RestClient</value>\r
+ public RestClient RestClient { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets the default header.\r
+ /// </summary>\r
+ public Dictionary<String, String> DefaultHeader {\r
+ get { return _defaultHeaderMap; }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Makes the HTTP request (Sync).\r
+ /// </summary>\r
+ /// <param name="path">URL path.</param>\r
+ /// <param name="method">HTTP method.</param>\r
+ /// <param name="queryParams">Query parameters.</param>\r
+ /// <param name="postBody">HTTP body (POST request).</param>\r
+ /// <param name="headerParams">Header parameters.</param>\r
+ /// <param name="formParams">Form parameters.</param>\r
+ /// <param name="fileParams">File parameters.</param>\r
+ /// <param name="authSettings">Authentication settings.</param>\r
+ /// <returns>Object</returns>\r
+ public Object CallApi(String path, RestSharp.Method method, Dictionary<String, String> queryParams, String postBody,\r
+ Dictionary<String, String> headerParams, Dictionary<String, String> formParams,\r
+ Dictionary<String, FileParameter> fileParams, String[] authSettings) {\r
+\r
+ var request = new RestRequest(path, method);\r
+\r
+ UpdateParamsForAuth(queryParams, headerParams, authSettings);\r
+\r
+ // add default header, if any\r
+ foreach (var defaultHeader in _defaultHeaderMap)\r
+ request.AddHeader(defaultHeader.Key, defaultHeader.Value);\r
+\r
+ // add header parameter, if any\r
+ foreach (var param in headerParams)\r
+ request.AddHeader(param.Key, param.Value);\r
+\r
+ // add query parameter, if any\r
+ foreach (var param in queryParams)\r
+ request.AddParameter(param.Key, param.Value, ParameterType.GetOrPost);\r
+\r
+ // add form parameter, if any\r
+ foreach (var param in formParams)\r
+ request.AddParameter(param.Key, param.Value, ParameterType.GetOrPost);\r
+\r
+ // add file parameter, if any\r
+ foreach (var param in fileParams)\r
+ request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType);\r
+\r
+ if (postBody != null) // http body (model) parameter\r
+ request.AddParameter("application/json", postBody, ParameterType.RequestBody);\r
+\r
+ return (Object)RestClient.Execute(request);\r
+\r
+ }\r
+\r
+ /// <summary>\r
+ /// Add default header.\r
+ /// </summary>\r
+ /// <param name="key">Header field name.</param>\r
+ /// <param name="value">Header field value.</param>\r
+ /// <returns></returns>\r
+ public void AddDefaultHeader(string key, string value) {\r
+ _defaultHeaderMap.Add(key, value);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Escape string (url-encoded).\r
+ /// </summary>\r
+ /// <param name="str">String to be escaped.</param>\r
+ /// <returns>Escaped string.</returns>\r
+ public string EscapeString(string str) {\r
+ return HttpUtility.UrlEncode(str);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Create FileParameter based on Stream.\r
+ /// </summary>\r
+ /// <param name="name">Parameter name.</param>\r
+ /// <param name="stream">Input stream.</param>\r
+ /// <returns>FileParameter.</returns>\r
+ public FileParameter ParameterToFile(string name, Stream stream) {\r
+ if (stream is FileStream)\r
+ return FileParameter.Create(name, stream.ReadAsBytes(), Path.GetFileName(((FileStream)stream).Name));\r
+ else\r
+ return FileParameter.Create(name, stream.ReadAsBytes(), "no_file_name_provided");\r
+ }\r
+\r
+ /// <summary>\r
+ /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime.\r
+ /// If parameter is a list of string, join the list with ",".\r
+ /// Otherwise just return the string.\r
+ /// </summary>\r
+ /// <param name="obj">The parameter (header, path, query, form).</param>\r
+ /// <returns>Formatted string.</returns>\r
+ public string ParameterToString(object obj) {\r
+ if (obj is DateTime)\r
+ // Return a formatted date string - Can be customized with Configuration.DateTimeFormat\r
+ // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")\r
+ // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8\r
+ // For example: 2009-06-15T13:45:30.0000000\r
+ return ((DateTime)obj).ToString(Configuration.DateTimeFormat);\r
+ else if (obj is List<string>)\r
+ return String.Join(",", (obj as List<string>).ToArray());\r
+ else\r
+ return Convert.ToString(obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Deserialize the JSON string into a proper object.\r
+ /// </summary>\r
+ /// <param name="content">HTTP body (e.g. string, JSON).</param>\r
+ /// <param name="type">Object type.</param>\r
+ /// <param name="headers">HTTP headers.</param>\r
+ /// <returns>Object representation of the JSON string.</returns>\r
+ public object Deserialize(string content, Type type, IList<Parameter> headers = null) {\r
+ if (type == typeof(Object)) // return an object\r
+ {\r
+ return content;\r
+ }\r
+\r
+ if (type == typeof(Stream)) {\r
+ var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath)\r
+ ? Path.GetTempPath()\r
+ : Configuration.TempFolderPath;\r
+\r
+ var fileName = filePath + Guid.NewGuid();\r
+ if (headers != null) {\r
+ var regex = new Regex(@"Content-Disposition:.*filename=['""]?([^'""\s]+)['""]?$");\r
+ var match = regex.Match(headers.ToString());\r
+ if (match.Success)\r
+ fileName = filePath + match.Value.Replace("\"", "").Replace("'", "");\r
+ }\r
+ File.WriteAllText(fileName, content);\r
+ return new FileStream(fileName, FileMode.Open);\r
+\r
+ }\r
+\r
+ if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object\r
+ {\r
+ return DateTime.Parse(content, null, System.Globalization.DateTimeStyles.RoundtripKind);\r
+ }\r
+\r
+ if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type\r
+ {\r
+ return ConvertType(content, type);\r
+ }\r
+\r
+ // at this point, it must be a model (json)\r
+ try {\r
+ return JsonConvert.DeserializeObject(content, type);\r
+ }\r
+ catch (IOException e) {\r
+ throw new ApiException(500, e.Message);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Serialize an object into JSON string.\r
+ /// </summary>\r
+ /// <param name="obj">Object.</param>\r
+ /// <returns>JSON string.</returns>\r
+ public string Serialize(object obj) {\r
+ try {\r
+ return obj != null ? JsonConvert.SerializeObject(obj) : null;\r
+ }\r
+ catch (Exception e) {\r
+ throw new ApiException(500, e.Message);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Get the API key with prefix.\r
+ /// </summary>\r
+ /// <param name="apiKeyIdentifier">API key identifier (authentication scheme).</param>\r
+ /// <returns>API key with prefix.</returns>\r
+ public string GetApiKeyWithPrefix(string apiKeyIdentifier) {\r
+ var apiKeyValue = "";\r
+ Configuration.ApiKey.TryGetValue(apiKeyIdentifier, out apiKeyValue);\r
+ var apiKeyPrefix = "";\r
+ if (Configuration.ApiKeyPrefix.TryGetValue(apiKeyIdentifier, out apiKeyPrefix))\r
+ return apiKeyPrefix + " " + apiKeyValue;\r
+ else\r
+ return apiKeyValue;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Update parameters based on authentication.\r
+ /// </summary>\r
+ /// <param name="queryParams">Query parameters.</param>\r
+ /// <param name="headerParams">Header parameters.</param>\r
+ /// <param name="authSettings">Authentication settings.</param>\r
+ public void UpdateParamsForAuth(Dictionary<String, String> queryParams, Dictionary<String, String> headerParams, string[] authSettings) {\r
+ if (authSettings == null || authSettings.Length == 0)\r
+ return;\r
+\r
+ foreach (string auth in authSettings) {\r
+ // determine which one to use\r
+ switch (auth) {\r
+ case "api_key":\r
+ headerParams["api_key"] = GetApiKeyWithPrefix("api_key");\r
+\r
+ break;\r
+ default:\r
+ //TODO show warning about security definition not found\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Encode string in base64 format.\r
+ /// </summary>\r
+ /// <param name="text">String to be encoded.</param>\r
+ /// <returns>Encoded string.</returns>\r
+ public static string Base64Encode(string text) {\r
+ var textByte = System.Text.Encoding.UTF8.GetBytes(text);\r
+ return System.Convert.ToBase64String(textByte);\r
+ }\r
+\r
+ /// <summary>\r
+ /// Dynamically cast the object into target type.\r
+ /// Ref: http://stackoverflow.com/questions/4925718/c-dynamic-runtime-cast\r
+ /// </summary>\r
+ /// <param name="source">Object to be casted</param>\r
+ /// <param name="dest">Target type</param>\r
+ /// <returns>Casted object</returns>\r
+ public static Object ConvertType(Object source, Type dest) {\r
+ return Convert.ChangeType(source, dest);\r
+ }\r
+\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+namespace IO.Swagger.Client {
+ /// <summary>
+ /// API Exception
+ /// </summary>
+ public class ApiException : Exception {
+ /// <summary>
+ /// Gets or sets the error code (HTTP status code)
+ /// </summary>
+ /// <value>The error code (HTTP status code).</value>
+ public int ErrorCode { get; set; }
+
+ /// <summary>
+ /// Gets or sets the error content (body json object)
+ /// </summary>
+ /// <value>The error content (Http response body).</value>
+ public Object ErrorContent { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ApiException"/> class.
+ /// </summary>
+ public ApiException() {}
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ApiException"/> class.
+ /// </summary>
+ /// <param name="errorCode">HTTP status code.</param>
+ /// <param name="message">Error message.</param>
+ public ApiException(int errorCode, string message) : base(message) {
+ this.ErrorCode = errorCode;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ApiException"/> class.
+ /// </summary>
+ /// <param name="errorCode">HTTP status code.</param>
+ /// <param name="message">Error message.</param>
+ /// <param name="errorContent">Error content.</param>
+ public ApiException(int errorCode, string message, Object errorContent = null) : base(message) {
+ this.ErrorCode = errorCode;
+ this.ErrorContent = errorContent;
+ }
+
+ }
+
+}
--- /dev/null
+using System;\r
+using System.Reflection;\r
+using System.Collections.Generic;\r
+using System.IO;\r
+using System.Linq;\r
+using System.Text;\r
+\r
+namespace IO.Swagger.Client\r
+{\r
+ /// <summary>\r
+ /// Represents a set of configuration settings\r
+ /// </summary>\r
+ public class Configuration\r
+ {\r
+ \r
+ /// <summary>\r
+ /// Version of the package.\r
+ /// </summary>\r
+ /// <value>Version of the package.</value>\r
+ public const string Version = "1.0.0";\r
+ \r
+ /// <summary>\r
+ /// Gets or sets the default API client for making HTTP calls.\r
+ /// </summary>\r
+ /// <value>The API client.</value>\r
+ public static ApiClient DefaultApiClient = new ApiClient();\r
+ \r
+ /// <summary>\r
+ /// Gets or sets the username (HTTP basic authentication).\r
+ /// </summary>\r
+ /// <value>The username.</value>\r
+ public static String Username { get; set; }\r
+\r
+ public static string BasePath { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the password (HTTP basic authentication).\r
+ /// </summary>\r
+ /// <value>The password.</value>\r
+ public static String Password { get; set; }\r
+ \r
+ /// <summary>\r
+ /// Gets or sets the API key based on the authentication name.\r
+ /// </summary>\r
+ /// <value>The API key.</value>\r
+ public static Dictionary<String, String> ApiKey = new Dictionary<String, String>();\r
+ \r
+ /// <summary>\r
+ /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name.\r
+ /// </summary>\r
+ /// <value>The prefix of the API key.</value>\r
+ public static Dictionary<String, String> ApiKeyPrefix = new Dictionary<String, String>();\r
+ \r
+ private static string _tempFolderPath = Path.GetTempPath();\r
+ \r
+ /// <summary>\r
+ /// Gets or sets the temporary folder path to store the files downloaded from the server.\r
+ /// </summary>\r
+ /// <value>Folder path.</value>\r
+ public static String TempFolderPath\r
+ {\r
+ get { return _tempFolderPath; }\r
+ \r
+ set \r
+ {\r
+ if (String.IsNullOrEmpty(value))\r
+ {\r
+ _tempFolderPath = value;\r
+ return;\r
+ }\r
+ \r
+ // create the directory if it does not exist\r
+ if (!Directory.Exists(value)) \r
+ Directory.CreateDirectory(value);\r
+ \r
+ // check if the path contains directory separator at the end\r
+ if (value[value.Length - 1] == Path.DirectorySeparatorChar)\r
+ _tempFolderPath = value;\r
+ else\r
+ _tempFolderPath = value + Path.DirectorySeparatorChar;\r
+ }\r
+ }\r
+\r
+ private const string ISO8601_DATETIME_FORMAT = "o";\r
+ private static string _dateTimeFormat = ISO8601_DATETIME_FORMAT;\r
+\r
+ /// <summary>\r
+ /// Gets or sets the the date time format used when serializing in the ApiClient\r
+ /// By default, it's set to ISO 8601 - "o", for others see:\r
+ /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx\r
+ /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx\r
+ /// No validation is done to ensure that the string you're providing is valid\r
+ /// </summary>\r
+ /// <value>The DateTimeFormat string</value>\r
+ public static String DateTimeFormat\r
+ {\r
+ get\r
+ {\r
+ return _dateTimeFormat;\r
+ }\r
+ set\r
+ {\r
+ if (string.IsNullOrEmpty(value))\r
+ {\r
+ // Never allow a blank or null string, go back to the default\r
+ _dateTimeFormat = ISO8601_DATETIME_FORMAT;\r
+ return;\r
+ }\r
+\r
+ // Caution, no validation when you choose date time format other than ISO 8601\r
+ // Take a look at the above links\r
+ _dateTimeFormat = value;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Returns a string with essential information for debugging.\r
+ /// </summary>\r
+ public static String ToDebugReport()\r
+ {\r
+ String report = "C# SDK (IO.Swagger) Debug Report:\n";\r
+ report += " OS: " + Environment.OSVersion + "\n";\r
+ report += " .NET Framework Version: " + Assembly\r
+ .GetExecutingAssembly()\r
+ .GetReferencedAssemblies()\r
+ .Where(x => x.Name == "System.Core").First().Version.ToString() + "\n";\r
+ report += " Version of the API: 1.0.0\n";\r
+ report += " SDK Package Version: 1.0.0\n";\r
+ \r
+ return report;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class AtomicLong {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class AtomicLong {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class BaseType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class BaseType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class BreakType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class BreakType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class CreateJobParameters {
+ /// <summary>
+ /// Gets or Sets JobTemplate
+ /// </summary>
+ [DataMember(Name="jobTemplate", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobTemplate")]
+ public string JobTemplate { get; set; }
+
+ /// <summary>
+ /// Gets or Sets JobName
+ /// </summary>
+ [DataMember(Name="jobName", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobName")]
+ public string JobName { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Parameters
+ /// </summary>
+ [DataMember(Name="parameters", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "parameters")]
+ public List<MapStringObjectElement> Parameters { get; set; }
+
+ /// <summary>
+ /// Gets or Sets JobStart
+ /// </summary>
+ [DataMember(Name="jobStart", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobStart")]
+ public JobStart JobStart { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class CreateJobParameters {\n");
+ sb.Append(" JobTemplate: ").Append(JobTemplate).Append("\n");
+ sb.Append(" JobName: ").Append(JobName).Append("\n");
+ sb.Append(" Parameters: ").Append(Parameters).Append("\n");
+ sb.Append(" JobStart: ").Append(JobStart).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class DeclarationType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class DeclarationType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class DeliveryMethod {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class DeliveryMethod {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Domain {
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets DomainCategoryId
+ /// </summary>
+ [DataMember(Name="domainCategoryId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "domainCategoryId")]
+ public long? DomainCategoryId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Value
+ /// </summary>
+ [DataMember(Name="value", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "value")]
+ public long? Value { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Domain {\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" DomainCategoryId: ").Append(DomainCategoryId).Append("\n");
+ sb.Append(" Value: ").Append(Value).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class DomainCategory : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Domains
+ /// </summary>
+ [DataMember(Name="domains", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "domains")]
+ public List<Domain> Domains { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class DomainCategory {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Domains: ").Append(Domains).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class DomainCategoryResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class DomainCategoryResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class DomainResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class DomainResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Domains {
+ /// <summary>
+ /// Gets or Sets Values
+ /// </summary>
+ [DataMember(Name="values", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "values")]
+ public List<Domain> Values { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Domains {\n");
+ sb.Append(" Values: ").Append(Values).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class DynamicAttributes : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemType
+ /// </summary>
+ [DataMember(Name="itemType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemType")]
+ public ItemType ItemType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemTypeId
+ /// </summary>
+ [DataMember(Name="itemTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemTypeId")]
+ public long? ItemTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Loaded
+ /// </summary>
+ [DataMember(Name="loaded", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "loaded")]
+ public bool? Loaded { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Attributes
+ /// </summary>
+ [DataMember(Name="attributes", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "attributes")]
+ public List<MapStringObjectElement> Attributes { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class DynamicAttributes {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" ItemType: ").Append(ItemType).Append("\n");
+ sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n");
+ sb.Append(" Loaded: ").Append(Loaded).Append("\n");
+ sb.Append(" Attributes: ").Append(Attributes).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class EntityBase {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class FileType : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets AudioCodec
+ /// </summary>
+ [DataMember(Name="audioCodec", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "audioCodec")]
+ public string AudioCodec { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Description
+ /// </summary>
+ [DataMember(Name="description", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "description")]
+ public string Description { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Framerate
+ /// </summary>
+ [DataMember(Name="framerate", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "framerate")]
+ public float? Framerate { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets VideoCodec
+ /// </summary>
+ [DataMember(Name="videoCodec", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "videoCodec")]
+ public string VideoCodec { get; set; }
+
+ /// <summary>
+ /// Gets or Sets VideoTrack
+ /// </summary>
+ [DataMember(Name="videoTrack", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "videoTrack")]
+ public int? VideoTrack { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class FileType {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" AudioCodec: ").Append(AudioCodec).Append("\n");
+ sb.Append(" Description: ").Append(Description).Append("\n");
+ sb.Append(" Framerate: ").Append(Framerate).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" VideoCodec: ").Append(VideoCodec).Append("\n");
+ sb.Append(" VideoTrack: ").Append(VideoTrack).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class FilterLogic {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class FilterLogic {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class FilterValueLogic {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class FilterValueLogic {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Folder : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ParentId
+ /// </summary>
+ [DataMember(Name="parentId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "parentId")]
+ public long? ParentId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ChildId
+ /// </summary>
+ [DataMember(Name="childId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "childId")]
+ public long? ChildId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Parent
+ /// </summary>
+ [DataMember(Name="parent", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "parent")]
+ public Item Parent { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Child
+ /// </summary>
+ [DataMember(Name="child", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "child")]
+ public Item Child { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Folder {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" ParentId: ").Append(ParentId).Append("\n");
+ sb.Append(" ChildId: ").Append(ChildId).Append("\n");
+ sb.Append(" Parent: ").Append(Parent).Append("\n");
+ sb.Append(" Child: ").Append(Child).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class FolderResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class FolderResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class GetFilteredDomainByDisplayParameters {
+ /// <summary>
+ /// Gets or Sets FilterId
+ /// </summary>
+ [DataMember(Name="filterId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "filterId")]
+ public long? FilterId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Filter
+ /// </summary>
+ [DataMember(Name="filter", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "filter")]
+ public string Filter { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class GetFilteredDomainByDisplayParameters {\n");
+ sb.Append(" FilterId: ").Append(FilterId).Append("\n");
+ sb.Append(" Filter: ").Append(Filter).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class GetFilteredParameters {
+ /// <summary>
+ /// Gets or Sets Filter
+ /// </summary>
+ [DataMember(Name="filter", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "filter")]
+ public string Filter { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsChunked
+ /// </summary>
+ [DataMember(Name="isChunked", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isChunked")]
+ public bool? IsChunked { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class GetFilteredParameters {\n");
+ sb.Append(" Filter: ").Append(Filter).Append("\n");
+ sb.Append(" IsChunked: ").Append(IsChunked).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class GuiType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class GuiType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;\r
+using System.Text;\r
+using System.Collections;\r
+using System.Collections.Generic;\r
+using System.Runtime.Serialization;\r
+using Newtonsoft.Json;\r
+\r
+namespace IO.Swagger.Model {\r
+\r
+ /// <summary>\r
+ /// \r
+ /// </summary>\r
+ [DataContract]\r
+ public class Item : DynamicAttributes {\r
+ /// <summary>\r
+ /// Gets or Sets Id\r
+ /// </summary>\r
+ [DataMember(Name = "id", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "id")]\r
+ public long? Id { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets ItemType\r
+ /// </summary>\r
+ [DataMember(Name = "itemType", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "itemType")]\r
+ public ItemType ItemType { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets ItemTypeId\r
+ /// </summary>\r
+ [DataMember(Name = "itemTypeId", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "itemTypeId")]\r
+ public long? ItemTypeId { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Loaded\r
+ /// </summary>\r
+ [DataMember(Name = "loaded", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "loaded")]\r
+ public bool? Loaded { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Attributes\r
+ /// </summary>\r
+ [DataMember(Name = "attributes", EmitDefaultValue = false)]\r
+ [JsonIgnore]\r
+ public List<MapStringObjectElement> Attributes { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Created\r
+ /// </summary>\r
+ [DataMember(Name = "created", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "created")]\r
+ public DateTime? Created { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Modified\r
+ /// </summary>\r
+ [DataMember(Name = "modified", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "modified")]\r
+ public DateTime? Modified { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Description\r
+ /// </summary>\r
+ [DataMember(Name = "description", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "description")]\r
+ public string Description { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets HouseId\r
+ /// </summary>\r
+ [DataMember(Name = "houseId", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "houseId")]\r
+ public string HouseId { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Title\r
+ /// </summary>\r
+ [DataMember(Name = "title", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "title")]\r
+ public string Title { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets IsFolder\r
+ /// </summary>\r
+ [DataMember(Name = "isFolder", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "isFolder")]\r
+ public string IsFolder { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets FolderId\r
+ /// </summary>\r
+ [DataMember(Name = "folderId", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "folderId")]\r
+ public long? FolderId { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Medias\r
+ /// </summary>\r
+ [DataMember(Name = "medias", EmitDefaultValue = false)]\r
+ [JsonProperty(PropertyName = "medias")]\r
+ public List<Media> Medias { get; set; }\r
+\r
+\r
+ /// <summary>\r
+ /// Get the string presentation of the object\r
+ /// </summary>\r
+ /// <returns>String presentation of the object</returns>\r
+ public override string ToString() {\r
+ var sb = new StringBuilder();\r
+ sb.Append("class Item {\n");\r
+ sb.Append(" Id: ").Append(Id).Append("\n");\r
+ sb.Append(" ItemType: ").Append(ItemType).Append("\n");\r
+ sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n");\r
+ sb.Append(" Loaded: ").Append(Loaded).Append("\n");\r
+ sb.Append(" Attributes: ").Append(Attributes).Append("\n");\r
+ sb.Append(" Created: ").Append(Created).Append("\n");\r
+ sb.Append(" Modified: ").Append(Modified).Append("\n");\r
+ sb.Append(" Description: ").Append(Description).Append("\n");\r
+ sb.Append(" HouseId: ").Append(HouseId).Append("\n");\r
+ sb.Append(" Title: ").Append(Title).Append("\n");\r
+ sb.Append(" IsFolder: ").Append(IsFolder).Append("\n");\r
+ sb.Append(" FolderId: ").Append(FolderId).Append("\n");\r
+ sb.Append(" Medias: ").Append(Medias).Append("\n");\r
+ sb.Append("}\n");\r
+ return sb.ToString();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Get the JSON string presentation of the object\r
+ /// </summary>\r
+ /// <returns>JSON string presentation of the object</returns>\r
+ public new string ToJson() {\r
+ return JsonConvert.SerializeObject(this, Formatting.Indented);\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ItemResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ItemResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ItemType : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Description
+ /// </summary>
+ [DataMember(Name="description", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "description")]
+ public string Description { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Metadatas
+ /// </summary>
+ [DataMember(Name="metadatas", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "metadatas")]
+ public List<Metadata> Metadatas { get; set; }
+
+ /// <summary>
+ /// Gets or Sets TablePrefix
+ /// </summary>
+ [DataMember(Name="tablePrefix", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "tablePrefix")]
+ public string TablePrefix { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsStatic
+ /// </summary>
+ [DataMember(Name="isStatic", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isStatic")]
+ public bool? IsStatic { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ItemType {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Description: ").Append(Description).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Metadatas: ").Append(Metadatas).Append("\n");
+ sb.Append(" TablePrefix: ").Append(TablePrefix).Append("\n");
+ sb.Append(" IsStatic: ").Append(IsStatic).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ItemTypeResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ItemTypeResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Job : Syncable {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Counter1
+ /// </summary>
+ [DataMember(Name="counter1", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "counter1")]
+ public AtomicLong Counter1 { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Priority
+ /// </summary>
+ [DataMember(Name="priority", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "priority")]
+ public long? Priority { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Owner
+ /// </summary>
+ [DataMember(Name="owner", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "owner")]
+ public string Owner { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Status
+ /// </summary>
+ [DataMember(Name="status", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "status")]
+ public JobStatus Status { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Description
+ /// </summary>
+ [DataMember(Name="description", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "description")]
+ public string Description { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Template
+ /// </summary>
+ [DataMember(Name="template", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "template")]
+ public string Template { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Submitted
+ /// </summary>
+ [DataMember(Name="submitted", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "submitted")]
+ public DateTime Submitted { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Finished
+ /// </summary>
+ [DataMember(Name="finished", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "finished")]
+ public DateTime Finished { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Progress
+ /// </summary>
+ [DataMember(Name="progress", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "progress")]
+ public int? Progress { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ScheduledTime
+ /// </summary>
+ [DataMember(Name="scheduledTime", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "scheduledTime")]
+ public DateTime ScheduledTime { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Job {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Counter1: ").Append(Counter1).Append("\n");
+ sb.Append(" Priority: ").Append(Priority).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Owner: ").Append(Owner).Append("\n");
+ sb.Append(" Status: ").Append(Status).Append("\n");
+ sb.Append(" Description: ").Append(Description).Append("\n");
+ sb.Append(" Template: ").Append(Template).Append("\n");
+ sb.Append(" Submitted: ").Append(Submitted).Append("\n");
+ sb.Append(" Finished: ").Append(Finished).Append("\n");
+ sb.Append(" Progress: ").Append(Progress).Append("\n");
+ sb.Append(" ScheduledTime: ").Append(ScheduledTime).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class JobMessage {
+ /// <summary>
+ /// Gets or Sets JobId
+ /// </summary>
+ [DataMember(Name="jobId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobId")]
+ public long? JobId { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class JobMessage {\n");
+ sb.Append(" JobId: ").Append(JobId).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class JobStart {
+ /// <summary>
+ /// Gets or Sets Time
+ /// </summary>
+ [DataMember(Name="time", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "time")]
+ public DateTime Time { get; set; }
+
+ /// <summary>
+ /// Gets or Sets JobStartType
+ /// </summary>
+ [DataMember(Name="jobStartType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobStartType")]
+ public JobStartType JobStartType { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class JobStart {\n");
+ sb.Append(" Time: ").Append(Time).Append("\n");
+ sb.Append(" JobStartType: ").Append(JobStartType).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class JobStartType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class JobStartType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class JobStatus {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class JobStatus {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class JobTemplatesInfo {
+ /// <summary>
+ /// Gets or Sets Templates
+ /// </summary>
+ [DataMember(Name="templates", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "templates")]
+ public List<Template> Templates { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Executors
+ /// </summary>
+ [DataMember(Name="executors", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "executors")]
+ public List<TemplateStep> Executors { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class JobTemplatesInfo {\n");
+ sb.Append(" Templates: ").Append(Templates).Append("\n");
+ sb.Append(" Executors: ").Append(Executors).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ListType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ListType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class LogEvent {
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Source
+ /// </summary>
+ [DataMember(Name="source", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "source")]
+ public string Source { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Level
+ /// </summary>
+ [DataMember(Name="level", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "level")]
+ public LogLevel Level { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class LogEvent {\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Source: ").Append(Source).Append("\n");
+ sb.Append(" Level: ").Append(Level).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class LogLevel {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class LogLevel {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class LoginParameters {
+ /// <summary>
+ /// Gets or Sets Username
+ /// </summary>
+ [DataMember(Name="username", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "username")]
+ public string Username { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Password
+ /// </summary>
+ [DataMember(Name="password", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "password")]
+ public string Password { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class LoginParameters {\n");
+ sb.Append(" Username: ").Append(Username).Append("\n");
+ sb.Append(" Password: ").Append(Password).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MapObjectObjectElement {
+ /// <summary>
+ /// Gets or Sets Key
+ /// </summary>
+ [DataMember(Name="key", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "key")]
+ public Object Key { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Value
+ /// </summary>
+ [DataMember(Name="value", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "value")]
+ public Object Value { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MapObjectObjectElement {\n");
+ sb.Append(" Key: ").Append(Key).Append("\n");
+ sb.Append(" Value: ").Append(Value).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MapStringObjectElement {
+ /// <summary>
+ /// Gets or Sets Key
+ /// </summary>
+ [DataMember(Name="key", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "key")]
+ public string Key { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Value
+ /// </summary>
+ [DataMember(Name="value", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "value")]
+ public Object Value { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MapStringObjectElement {\n");
+ sb.Append(" Key: ").Append(Key).Append("\n");
+ sb.Append(" Value: ").Append(Value).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MdType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MdType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Media : DynamicAttributes {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemType
+ /// </summary>
+ [DataMember(Name="itemType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemType")]
+ public ItemType ItemType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemTypeId
+ /// </summary>
+ [DataMember(Name="itemTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemTypeId")]
+ public long? ItemTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Loaded
+ /// </summary>
+ [DataMember(Name="loaded", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "loaded")]
+ public bool? Loaded { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Attributes
+ /// </summary>
+ [DataMember(Name="attributes", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "attributes")]
+ public List<MapStringObjectElement> Attributes { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Archived
+ /// </summary>
+ [DataMember(Name="archived", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "archived")]
+ public DateTime Archived { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Description
+ /// </summary>
+ [DataMember(Name="description", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "description")]
+ public string Description { get; set; }
+
+ /// <summary>
+ /// Gets or Sets HouseId
+ /// </summary>
+ [DataMember(Name="houseId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "houseId")]
+ public string HouseId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemId
+ /// </summary>
+ [DataMember(Name="itemId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemId")]
+ public long? ItemId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Length
+ /// </summary>
+ [DataMember(Name="length", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "length")]
+ public long? Length { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MediaFiles
+ /// </summary>
+ [DataMember(Name="mediaFiles", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "mediaFiles")]
+ public List<MediaFile> MediaFiles { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Title
+ /// </summary>
+ [DataMember(Name="title", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "title")]
+ public string Title { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsPartialEnabled
+ /// </summary>
+ [DataMember(Name="isPartialEnabled", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isPartialEnabled")]
+ public bool? IsPartialEnabled { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Poster
+ /// </summary>
+ [DataMember(Name="poster", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "poster")]
+ public byte[] Poster { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Media {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" ItemType: ").Append(ItemType).Append("\n");
+ sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n");
+ sb.Append(" Loaded: ").Append(Loaded).Append("\n");
+ sb.Append(" Attributes: ").Append(Attributes).Append("\n");
+ sb.Append(" Archived: ").Append(Archived).Append("\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" Description: ").Append(Description).Append("\n");
+ sb.Append(" HouseId: ").Append(HouseId).Append("\n");
+ sb.Append(" ItemId: ").Append(ItemId).Append("\n");
+ sb.Append(" Length: ").Append(Length).Append("\n");
+ sb.Append(" MediaFiles: ").Append(MediaFiles).Append("\n");
+ sb.Append(" Title: ").Append(Title).Append("\n");
+ sb.Append(" IsPartialEnabled: ").Append(IsPartialEnabled).Append("\n");
+ sb.Append(" Poster: ").Append(Poster).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MediaFile : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets FileStructInfo
+ /// </summary>
+ [DataMember(Name="fileStructInfo", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "fileStructInfo")]
+ public string FileStructInfo { get; set; }
+
+ /// <summary>
+ /// Gets or Sets FileType
+ /// </summary>
+ [DataMember(Name="fileType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "fileType")]
+ public FileType FileType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets FileTypeId
+ /// </summary>
+ [DataMember(Name="fileTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "fileTypeId")]
+ public long? FileTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Media
+ /// </summary>
+ [DataMember(Name="media", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "media")]
+ public Media Media { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MediaId
+ /// </summary>
+ [DataMember(Name="mediaId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "mediaId")]
+ public long? MediaId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets RelativePath
+ /// </summary>
+ [DataMember(Name="relativePath", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "relativePath")]
+ public string RelativePath { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Store
+ /// </summary>
+ [DataMember(Name="store", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "store")]
+ public Store Store { get; set; }
+
+ /// <summary>
+ /// Gets or Sets StoreId
+ /// </summary>
+ [DataMember(Name="storeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "storeId")]
+ public long? StoreId { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MediaFile {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" FileStructInfo: ").Append(FileStructInfo).Append("\n");
+ sb.Append(" FileType: ").Append(FileType).Append("\n");
+ sb.Append(" FileTypeId: ").Append(FileTypeId).Append("\n");
+ sb.Append(" Media: ").Append(Media).Append("\n");
+ sb.Append(" MediaId: ").Append(MediaId).Append("\n");
+ sb.Append(" RelativePath: ").Append(RelativePath).Append("\n");
+ sb.Append(" Store: ").Append(Store).Append("\n");
+ sb.Append(" StoreId: ").Append(StoreId).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MediaFileResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MediaFileResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MediaResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MediaResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Metadata : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemTypeId
+ /// </summary>
+ [DataMember(Name="itemTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemTypeId")]
+ public long? ItemTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IdDbIndex
+ /// </summary>
+ [DataMember(Name="idDbIndex", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "idDbIndex")]
+ public bool? IdDbIndex { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsDbNullable
+ /// </summary>
+ [DataMember(Name="isDbNullable", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isDbNullable")]
+ public bool? IsDbNullable { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsDbUnique
+ /// </summary>
+ [DataMember(Name="isDbUnique", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isDbUnique")]
+ public bool? IsDbUnique { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsEditable
+ /// </summary>
+ [DataMember(Name="isEditable", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isEditable")]
+ public bool? IsEditable { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsListable
+ /// </summary>
+ [DataMember(Name="isListable", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isListable")]
+ public bool? IsListable { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsGenerated
+ /// </summary>
+ [DataMember(Name="isGenerated", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isGenerated")]
+ public bool? IsGenerated { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsSearchable
+ /// </summary>
+ [DataMember(Name="isSearchable", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isSearchable")]
+ public bool? IsSearchable { get; set; }
+
+ /// <summary>
+ /// Gets or Sets GuiType
+ /// </summary>
+ [DataMember(Name="guiType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "guiType")]
+ public GuiType GuiType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ListType
+ /// </summary>
+ [DataMember(Name="listType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "listType")]
+ public ListType ListType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MetadataElement
+ /// </summary>
+ [DataMember(Name="metadataElement", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "metadataElement")]
+ public MetadataElement MetadataElement { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MetadataElementId
+ /// </summary>
+ [DataMember(Name="metadataElementId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "metadataElementId")]
+ public long? MetadataElementId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets StaticTable
+ /// </summary>
+ [DataMember(Name="staticTable", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "staticTable")]
+ public StaticTables StaticTable { get; set; }
+
+ /// <summary>
+ /// Gets or Sets PojoField
+ /// </summary>
+ [DataMember(Name="pojoField", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "pojoField")]
+ public string PojoField { get; set; }
+
+ /// <summary>
+ /// Gets or Sets SqlField
+ /// </summary>
+ [DataMember(Name="sqlField", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "sqlField")]
+ public string SqlField { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Parameter
+ /// </summary>
+ [DataMember(Name="parameter", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "parameter")]
+ public string Parameter { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Metadata {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n");
+ sb.Append(" IdDbIndex: ").Append(IdDbIndex).Append("\n");
+ sb.Append(" IsDbNullable: ").Append(IsDbNullable).Append("\n");
+ sb.Append(" IsDbUnique: ").Append(IsDbUnique).Append("\n");
+ sb.Append(" IsEditable: ").Append(IsEditable).Append("\n");
+ sb.Append(" IsListable: ").Append(IsListable).Append("\n");
+ sb.Append(" IsGenerated: ").Append(IsGenerated).Append("\n");
+ sb.Append(" IsSearchable: ").Append(IsSearchable).Append("\n");
+ sb.Append(" GuiType: ").Append(GuiType).Append("\n");
+ sb.Append(" ListType: ").Append(ListType).Append("\n");
+ sb.Append(" MetadataElement: ").Append(MetadataElement).Append("\n");
+ sb.Append(" MetadataElementId: ").Append(MetadataElementId).Append("\n");
+ sb.Append(" StaticTable: ").Append(StaticTable).Append("\n");
+ sb.Append(" PojoField: ").Append(PojoField).Append("\n");
+ sb.Append(" SqlField: ").Append(SqlField).Append("\n");
+ sb.Append(" Parameter: ").Append(Parameter).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MetadataElement : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Description
+ /// </summary>
+ [DataMember(Name="description", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "description")]
+ public string Description { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MetadataType
+ /// </summary>
+ [DataMember(Name="metadataType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "metadataType")]
+ public MetadataType MetadataType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MetadataTypeId
+ /// </summary>
+ [DataMember(Name="metadataTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "metadataTypeId")]
+ public long? MetadataTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets DomainCategoryId
+ /// </summary>
+ [DataMember(Name="domainCategoryId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "domainCategoryId")]
+ public long? DomainCategoryId { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MetadataElement {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Description: ").Append(Description).Append("\n");
+ sb.Append(" MetadataType: ").Append(MetadataType).Append("\n");
+ sb.Append(" MetadataTypeId: ").Append(MetadataTypeId).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" DomainCategoryId: ").Append(DomainCategoryId).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MetadataElementResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MetadataElementResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MetadataResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MetadataResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MetadataType : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets DataType
+ /// </summary>
+ [DataMember(Name="dataType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "dataType")]
+ public string DataType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets BaseType
+ /// </summary>
+ [DataMember(Name="baseType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "baseType")]
+ public BaseType BaseType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets JavaType
+ /// </summary>
+ [DataMember(Name="javaType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "javaType")]
+ public string JavaType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Length
+ /// </summary>
+ [DataMember(Name="length", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "length")]
+ public int? Length { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MetadataType {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" DataType: ").Append(DataType).Append("\n");
+ sb.Append(" BaseType: ").Append(BaseType).Append("\n");
+ sb.Append(" JavaType: ").Append(JavaType).Append("\n");
+ sb.Append(" Length: ").Append(Length).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class MetadataTypeResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class MetadataTypeResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class OrderDirection {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class OrderDirection {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class QueryObject {
+ /// <summary>
+ /// Gets or Sets ActiveItemTypeId
+ /// </summary>
+ [DataMember(Name="activeItemTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "activeItemTypeId")]
+ public long? ActiveItemTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Parameters
+ /// </summary>
+ [DataMember(Name="parameters", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "parameters")]
+ public RenderParameter Parameters { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Filters
+ /// </summary>
+ [DataMember(Name="filters", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "filters")]
+ public List<SearchFilter> Filters { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class QueryObject {\n");
+ sb.Append(" ActiveItemTypeId: ").Append(ActiveItemTypeId).Append("\n");
+ sb.Append(" Parameters: ").Append(Parameters).Append("\n");
+ sb.Append(" Filters: ").Append(Filters).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class RemoteFile : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Modify
+ /// </summary>
+ [DataMember(Name="modify", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "modify")]
+ public DateTime Modify { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Size
+ /// </summary>
+ [DataMember(Name="size", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "size")]
+ public long? Size { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsFolder
+ /// </summary>
+ [DataMember(Name="isFolder", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isFolder")]
+ public bool? IsFolder { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class RemoteFile {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" Modify: ").Append(Modify).Append("\n");
+ sb.Append(" Size: ").Append(Size).Append("\n");
+ sb.Append(" IsFolder: ").Append(IsFolder).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class RemoteFileResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Files
+ /// </summary>
+ [DataMember(Name="files", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "files")]
+ public List<RemoteFile> Files { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class RemoteFileResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append(" Files: ").Append(Files).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class RemoteStoreProtocol {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class RemoteStoreProtocol {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class RemoveParameters {
+ /// <summary>
+ /// Gets or Sets ClassName
+ /// </summary>
+ [DataMember(Name="className", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "className")]
+ public string ClassName { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Ids
+ /// </summary>
+ [DataMember(Name="ids", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "ids")]
+ public List<long?> Ids { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class RemoveParameters {\n");
+ sb.Append(" ClassName: ").Append(ClassName).Append("\n");
+ sb.Append(" Ids: ").Append(Ids).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class RenderParameter {
+ /// <summary>
+ /// Gets or Sets Page
+ /// </summary>
+ [DataMember(Name="page", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "page")]
+ public long? Page { get; set; }
+
+ /// <summary>
+ /// Gets or Sets RowPerPage
+ /// </summary>
+ [DataMember(Name="rowPerPage", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "rowPerPage")]
+ public long? RowPerPage { get; set; }
+
+ /// <summary>
+ /// Gets or Sets OrderBy
+ /// </summary>
+ [DataMember(Name="orderBy", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "orderBy")]
+ public Metadata OrderBy { get; set; }
+
+ /// <summary>
+ /// Gets or Sets OrderDirection
+ /// </summary>
+ [DataMember(Name="orderDirection", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "orderDirection")]
+ public OrderDirection OrderDirection { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class RenderParameter {\n");
+ sb.Append(" Page: ").Append(Page).Append("\n");
+ sb.Append(" RowPerPage: ").Append(RowPerPage).Append("\n");
+ sb.Append(" OrderBy: ").Append(OrderBy).Append("\n");
+ sb.Append(" OrderDirection: ").Append(OrderDirection).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ReplyMessageParameters {
+ /// <summary>
+ /// Gets or Sets MessageId
+ /// </summary>
+ [DataMember(Name="messageId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "messageId")]
+ public long? MessageId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets JobId
+ /// </summary>
+ [DataMember(Name="jobId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobId")]
+ public long? JobId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Reply
+ /// </summary>
+ [DataMember(Name="reply", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "reply")]
+ public int? Reply { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ReplyMessageParameters {\n");
+ sb.Append(" MessageId: ").Append(MessageId).Append("\n");
+ sb.Append(" JobId: ").Append(JobId).Append("\n");
+ sb.Append(" Reply: ").Append(Reply).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class RestartRequest : JobMessage {
+ /// <summary>
+ /// Gets or Sets JobId
+ /// </summary>
+ [DataMember(Name="jobId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobId")]
+ public long? JobId { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class RestartRequest {\n");
+ sb.Append(" JobId: ").Append(JobId).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ResumeRequest : JobMessage {
+ /// <summary>
+ /// Gets or Sets JobId
+ /// </summary>
+ [DataMember(Name="jobId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobId")]
+ public long? JobId { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ResumeRequest {\n");
+ sb.Append(" JobId: ").Append(JobId).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Scene : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Modified
+ /// </summary>
+ [DataMember(Name="modified", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "modified")]
+ public DateTime Modified { get; set; }
+
+ /// <summary>
+ /// Gets or Sets SceneContents
+ /// </summary>
+ [DataMember(Name="sceneContents", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "sceneContents")]
+ public List<SceneContent> SceneContents { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsChunked
+ /// </summary>
+ [DataMember(Name="isChunked", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isChunked")]
+ public bool? IsChunked { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Scene {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" Modified: ").Append(Modified).Append("\n");
+ sb.Append(" SceneContents: ").Append(SceneContents).Append("\n");
+ sb.Append(" IsChunked: ").Append(IsChunked).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SceneContent : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Scene
+ /// </summary>
+ [DataMember(Name="scene", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "scene")]
+ public Scene Scene { get; set; }
+
+ /// <summary>
+ /// Gets or Sets SceneId
+ /// </summary>
+ [DataMember(Name="sceneId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "sceneId")]
+ public long? SceneId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Shot
+ /// </summary>
+ [DataMember(Name="shot", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "shot")]
+ public Shot Shot { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ShotId
+ /// </summary>
+ [DataMember(Name="shotId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "shotId")]
+ public long? ShotId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Position
+ /// </summary>
+ [DataMember(Name="position", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "position")]
+ public long? Position { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SceneContent {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Scene: ").Append(Scene).Append("\n");
+ sb.Append(" SceneId: ").Append(SceneId).Append("\n");
+ sb.Append(" Shot: ").Append(Shot).Append("\n");
+ sb.Append(" ShotId: ").Append(ShotId).Append("\n");
+ sb.Append(" Position: ").Append(Position).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SceneContentResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SceneContentResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SceneResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SceneResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SearchDefinition : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Modified
+ /// </summary>
+ [DataMember(Name="modified", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "modified")]
+ public DateTime Modified { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public byte[] Data { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SearchDefinition {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" Modified: ").Append(Modified).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SearchDefinitionResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SearchDefinitionResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SearchFilter {
+ /// <summary>
+ /// Gets or Sets Logic
+ /// </summary>
+ [DataMember(Name="logic", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "logic")]
+ public FilterLogic Logic { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemTypeId
+ /// </summary>
+ [DataMember(Name="itemTypeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemTypeId")]
+ public long? ItemTypeId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Metadata
+ /// </summary>
+ [DataMember(Name="metadata", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "metadata")]
+ public Metadata Metadata { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ValueLogic
+ /// </summary>
+ [DataMember(Name="valueLogic", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "valueLogic")]
+ public FilterValueLogic ValueLogic { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Values
+ /// </summary>
+ [DataMember(Name="values", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "values")]
+ public List<Object> Values { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Filters
+ /// </summary>
+ [DataMember(Name="filters", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "filters")]
+ public List<SearchFilter> Filters { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SearchFilter {\n");
+ sb.Append(" Logic: ").Append(Logic).Append("\n");
+ sb.Append(" ItemTypeId: ").Append(ItemTypeId).Append("\n");
+ sb.Append(" Metadata: ").Append(Metadata).Append("\n");
+ sb.Append(" ValueLogic: ").Append(ValueLogic).Append("\n");
+ sb.Append(" Values: ").Append(Values).Append("\n");
+ sb.Append(" Filters: ").Append(Filters).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SearchResult {
+ /// <summary>
+ /// Gets or Sets ItemCount
+ /// </summary>
+ [DataMember(Name="itemCount", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemCount")]
+ public long? ItemCount { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ItemType
+ /// </summary>
+ [DataMember(Name="itemType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "itemType")]
+ public ItemType ItemType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Items
+ /// </summary>
+ [DataMember(Name="items", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "items")]
+ public List<Item> Items { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Folders
+ /// </summary>
+ [DataMember(Name="folders", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "folders")]
+ public List<Item> Folders { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Parameters
+ /// </summary>
+ [DataMember(Name="parameters", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "parameters")]
+ public RenderParameter Parameters { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SearchResult {\n");
+ sb.Append(" ItemCount: ").Append(ItemCount).Append("\n");
+ sb.Append(" ItemType: ").Append(ItemType).Append("\n");
+ sb.Append(" Items: ").Append(Items).Append("\n");
+ sb.Append(" Folders: ").Append(Folders).Append("\n");
+ sb.Append(" Parameters: ").Append(Parameters).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;\r
+using System.Text;\r
+using System.Collections;\r
+using System.Collections.Generic;\r
+using System.Runtime.Serialization;\r
+using Newtonsoft.Json;\r
+\r
+namespace IO.Swagger.Model {\r
+\r
+ /// <summary>\r
+ /// \r
+ /// </summary>\r
+ [DataContract]\r
+ public class Shot : EntityBase {\r
+ /// <summary>\r
+ /// Gets or Sets Id\r
+ /// </summary>\r
+ [DataMember(Name="id", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "id")]\r
+ public long? Id { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Created\r
+ /// </summary>\r
+ [DataMember(Name="created", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "created")]\r
+ public DateTime Created { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Description\r
+ /// </summary>\r
+ [DataMember(Name="description", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "description")]\r
+ public string Description { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets InPoint\r
+ /// </summary>\r
+ [DataMember(Name="inPoint", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "inPoint")]\r
+ public long? InPoint { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Media\r
+ /// </summary>\r
+ [DataMember(Name="media", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "media")]\r
+ public Media Media { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets MediaId\r
+ /// </summary>\r
+ [DataMember(Name="mediaId", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "mediaId")]\r
+ public long? MediaId { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets OutPoint\r
+ /// </summary>\r
+ [DataMember(Name="outPoint", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "outPoint")]\r
+ public long? OutPoint { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or Sets Thumbnail\r
+ /// </summary>\r
+ [DataMember(Name="thumbnail", EmitDefaultValue=false)]\r
+ [JsonProperty(PropertyName = "thumbnail")]\r
+ public byte[] Thumbnail { get; set; }\r
+\r
+\r
+ /// <summary>\r
+ /// Get the string presentation of the object\r
+ /// </summary>\r
+ /// <returns>String presentation of the object</returns>\r
+ public override string ToString() {\r
+ var sb = new StringBuilder();\r
+ sb.Append("class Shot {\n");\r
+ sb.Append(" Id: ").Append(Id).Append("\n");\r
+ sb.Append(" Created: ").Append(Created).Append("\n");\r
+ sb.Append(" Description: ").Append(Description).Append("\n");\r
+ sb.Append(" InPoint: ").Append(InPoint).Append("\n");\r
+ sb.Append(" Media: ").Append(Media).Append("\n");\r
+ sb.Append(" MediaId: ").Append(MediaId).Append("\n");\r
+ sb.Append(" OutPoint: ").Append(OutPoint).Append("\n");\r
+ sb.Append(" Thumbnail: ").Append(Thumbnail).Append("\n");\r
+ sb.Append("}\n");\r
+ return sb.ToString();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Get the JSON string presentation of the object\r
+ /// </summary>\r
+ /// <returns>JSON string presentation of the object</returns>\r
+ public new string ToJson() {\r
+ return JsonConvert.SerializeObject(this, Formatting.Indented);\r
+ }\r
+\r
+}\r
+}\r
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ShotResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ShotResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Signal : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets SignalType
+ /// </summary>
+ [DataMember(Name="signalType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "signalType")]
+ public SignalType SignalType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets StaticTable
+ /// </summary>
+ [DataMember(Name="staticTable", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "staticTable")]
+ public StaticTables StaticTable { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Signal {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" SignalType: ").Append(SignalType).Append("\n");
+ sb.Append(" StaticTable: ").Append(StaticTable).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SignalType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SignalType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SqlIndexType {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SqlIndexType {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class StaticTables {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class StaticTables {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Store : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets StoreUris
+ /// </summary>
+ [DataMember(Name="storeUris", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "storeUris")]
+ public List<StoreUri> StoreUris { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsSystem
+ /// </summary>
+ [DataMember(Name="isSystem", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isSystem")]
+ public bool? IsSystem { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsLowres
+ /// </summary>
+ [DataMember(Name="isLowres", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isLowres")]
+ public bool? IsLowres { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Store {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" StoreUris: ").Append(StoreUris).Append("\n");
+ sb.Append(" IsSystem: ").Append(IsSystem).Append("\n");
+ sb.Append(" IsLowres: ").Append(IsLowres).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class StoreResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class StoreResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class StoreUri : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets BUFFER_SIZE
+ /// </summary>
+ [DataMember(Name="BUFFER_SIZE", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "BUFFER_SIZE")]
+ public int? BUFFER_SIZE { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Uri
+ /// </summary>
+ [DataMember(Name="uri", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "uri")]
+ public string Uri { get; set; }
+
+ /// <summary>
+ /// Gets or Sets StoreId
+ /// </summary>
+ [DataMember(Name="storeId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "storeId")]
+ public long? StoreId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsStream
+ /// </summary>
+ [DataMember(Name="isStream", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isStream")]
+ public bool? IsStream { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsSource
+ /// </summary>
+ [DataMember(Name="isSource", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isSource")]
+ public bool? IsSource { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsTarget
+ /// </summary>
+ [DataMember(Name="isTarget", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isTarget")]
+ public bool? IsTarget { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Filter
+ /// </summary>
+ [DataMember(Name="filter", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "filter")]
+ public string Filter { get; set; }
+
+ /// <summary>
+ /// Gets or Sets UserName
+ /// </summary>
+ [DataMember(Name="userName", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "userName")]
+ public string UserName { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Password
+ /// </summary>
+ [DataMember(Name="password", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "password")]
+ public string Password { get; set; }
+
+ /// <summary>
+ /// Gets or Sets RootPath
+ /// </summary>
+ [DataMember(Name="rootPath", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "rootPath")]
+ public string RootPath { get; set; }
+
+ /// <summary>
+ /// Gets or Sets CurrentPath
+ /// </summary>
+ [DataMember(Name="currentPath", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "currentPath")]
+ public string CurrentPath { get; set; }
+
+ /// <summary>
+ /// Gets or Sets PortNumber
+ /// </summary>
+ [DataMember(Name="portNumber", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "portNumber")]
+ public int? PortNumber { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Protocol
+ /// </summary>
+ [DataMember(Name="protocol", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "protocol")]
+ public RemoteStoreProtocol Protocol { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Delivery
+ /// </summary>
+ [DataMember(Name="delivery", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "delivery")]
+ public DeliveryMethod Delivery { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Percent
+ /// </summary>
+ [DataMember(Name="percent", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "percent")]
+ public int? Percent { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class StoreUri {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" BUFFER_SIZE: ").Append(BUFFER_SIZE).Append("\n");
+ sb.Append(" Uri: ").Append(Uri).Append("\n");
+ sb.Append(" StoreId: ").Append(StoreId).Append("\n");
+ sb.Append(" IsStream: ").Append(IsStream).Append("\n");
+ sb.Append(" IsSource: ").Append(IsSource).Append("\n");
+ sb.Append(" IsTarget: ").Append(IsTarget).Append("\n");
+ sb.Append(" Filter: ").Append(Filter).Append("\n");
+ sb.Append(" UserName: ").Append(UserName).Append("\n");
+ sb.Append(" Password: ").Append(Password).Append("\n");
+ sb.Append(" RootPath: ").Append(RootPath).Append("\n");
+ sb.Append(" CurrentPath: ").Append(CurrentPath).Append("\n");
+ sb.Append(" PortNumber: ").Append(PortNumber).Append("\n");
+ sb.Append(" Protocol: ").Append(Protocol).Append("\n");
+ sb.Append(" Delivery: ").Append(Delivery).Append("\n");
+ sb.Append(" Percent: ").Append(Percent).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class StoreUriResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class StoreUriResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Syncable : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Syncable {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class SystemResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class Template : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets TemplateSteps
+ /// </summary>
+ [DataMember(Name="templateSteps", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "templateSteps")]
+ public List<TemplateStep> TemplateSteps { get; set; }
+
+ /// <summary>
+ /// Gets or Sets TemplateDeclarations
+ /// </summary>
+ [DataMember(Name="templateDeclarations", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "templateDeclarations")]
+ public List<TemplateDeclaration> TemplateDeclarations { get; set; }
+
+ /// <summary>
+ /// Gets or Sets FileName
+ /// </summary>
+ [DataMember(Name="fileName", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "fileName")]
+ public string FileName { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Description
+ /// </summary>
+ [DataMember(Name="description", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "description")]
+ public string Description { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class Template {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" TemplateSteps: ").Append(TemplateSteps).Append("\n");
+ sb.Append(" TemplateDeclarations: ").Append(TemplateDeclarations).Append("\n");
+ sb.Append(" FileName: ").Append(FileName).Append("\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Description: ").Append(Description).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class TemplateDeclaration {
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Type
+ /// </summary>
+ [DataMember(Name="type", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "type")]
+ public string Type { get; set; }
+
+ /// <summary>
+ /// Gets or Sets DeclarationType
+ /// </summary>
+ [DataMember(Name="declarationType", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "declarationType")]
+ public DeclarationType DeclarationType { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class TemplateDeclaration {\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Type: ").Append(Type).Append("\n");
+ sb.Append(" DeclarationType: ").Append(DeclarationType).Append("\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class TemplateResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class TemplateResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class TemplateStep {
+ /// <summary>
+ /// Gets or Sets Weight
+ /// </summary>
+ [DataMember(Name="weight", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "weight")]
+ public int? Weight { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MaxConcurrent
+ /// </summary>
+ [DataMember(Name="maxConcurrent", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "maxConcurrent")]
+ public int? MaxConcurrent { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Inputs
+ /// </summary>
+ [DataMember(Name="inputs", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "inputs")]
+ public List<TemplateDeclaration> Inputs { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Outputs
+ /// </summary>
+ [DataMember(Name="outputs", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "outputs")]
+ public List<TemplateDeclaration> Outputs { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class TemplateStep {\n");
+ sb.Append(" Weight: ").Append(Weight).Append("\n");
+ sb.Append(" MaxConcurrent: ").Append(MaxConcurrent).Append("\n");
+ sb.Append(" Inputs: ").Append(Inputs).Append("\n");
+ sb.Append(" Outputs: ").Append(Outputs).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class TranscoderProfile {
+ /// <summary>
+ /// Gets or Sets Name
+ /// </summary>
+ [DataMember(Name="name", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "name")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Guid
+ /// </summary>
+ [DataMember(Name="guid", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "guid")]
+ public string Guid { get; set; }
+
+ /// <summary>
+ /// Gets or Sets IsDefault
+ /// </summary>
+ [DataMember(Name="isDefault", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "isDefault")]
+ public bool? IsDefault { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class TranscoderProfile {\n");
+ sb.Append(" Name: ").Append(Name).Append("\n");
+ sb.Append(" Guid: ").Append(Guid).Append("\n");
+ sb.Append(" IsDefault: ").Append(IsDefault).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class UserInfo : EntityBase {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets FullName
+ /// </summary>
+ [DataMember(Name="fullName", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "fullName")]
+ public string FullName { get; set; }
+
+ /// <summary>
+ /// Gets or Sets UserName
+ /// </summary>
+ [DataMember(Name="userName", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "userName")]
+ public string UserName { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Password
+ /// </summary>
+ [DataMember(Name="password", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "password")]
+ public string Password { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets LastLogin
+ /// </summary>
+ [DataMember(Name="lastLogin", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "lastLogin")]
+ public DateTime? LastLogin { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Rights
+ /// </summary>
+ [DataMember(Name="rights", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "rights")]
+ public int? Rights { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Token
+ /// </summary>
+ [DataMember(Name="token", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "token")]
+ public string Token { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class UserInfo {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" FullName: ").Append(FullName).Append("\n");
+ sb.Append(" UserName: ").Append(UserName).Append("\n");
+ sb.Append(" Password: ").Append(Password).Append("\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" LastLogin: ").Append(LastLogin).Append("\n");
+ sb.Append(" Rights: ").Append(Rights).Append("\n");
+ sb.Append(" Token: ").Append(Token).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class UserInfoResponse : SystemResponse {
+ /// <summary>
+ /// Gets or Sets Id
+ /// </summary>
+ [DataMember(Name="id", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "id")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Data
+ /// </summary>
+ [DataMember(Name="data", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "data")]
+ public Object Data { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Message
+ /// </summary>
+ [DataMember(Name="message", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "message")]
+ public string Message { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Success
+ /// </summary>
+ [DataMember(Name="success", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "success")]
+ public bool? Success { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class UserInfoResponse {\n");
+ sb.Append(" Id: ").Append(Id).Append("\n");
+ sb.Append(" Data: ").Append(Data).Append("\n");
+ sb.Append(" Message: ").Append(Message).Append("\n");
+ sb.Append(" Success: ").Append(Success).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class UserMessage {
+ /// <summary>
+ /// Gets or Sets Created
+ /// </summary>
+ [DataMember(Name="created", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "created")]
+ public DateTime? Created { get; set; }
+
+ /// <summary>
+ /// Gets or Sets ValidReplies
+ /// </summary>
+ [DataMember(Name="validReplies", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "validReplies")]
+ public ValidReplies ValidReplies { get; set; }
+
+ /// <summary>
+ /// Gets or Sets JobId
+ /// </summary>
+ [DataMember(Name="jobId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobId")]
+ public long? JobId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MessageId
+ /// </summary>
+ [DataMember(Name="messageId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "messageId")]
+ public long? MessageId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MessageNumber
+ /// </summary>
+ [DataMember(Name="messageNumber", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "messageNumber")]
+ public long? MessageNumber { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MustReply
+ /// </summary>
+ [DataMember(Name="mustReply", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "mustReply")]
+ public bool? MustReply { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Owner
+ /// </summary>
+ [DataMember(Name="owner", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "owner")]
+ public string Owner { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Text
+ /// </summary>
+ [DataMember(Name="text", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "text")]
+ public string Text { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Reply
+ /// </summary>
+ [DataMember(Name="reply", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "reply")]
+ public int? Reply { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class UserMessage {\n");
+ sb.Append(" Created: ").Append(Created).Append("\n");
+ sb.Append(" ValidReplies: ").Append(ValidReplies).Append("\n");
+ sb.Append(" JobId: ").Append(JobId).Append("\n");
+ sb.Append(" MessageId: ").Append(MessageId).Append("\n");
+ sb.Append(" MessageNumber: ").Append(MessageNumber).Append("\n");
+ sb.Append(" MustReply: ").Append(MustReply).Append("\n");
+ sb.Append(" Owner: ").Append(Owner).Append("\n");
+ sb.Append(" Text: ").Append(Text).Append("\n");
+ sb.Append(" Reply: ").Append(Reply).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class UserReplyMessage : JobMessage {
+ /// <summary>
+ /// Gets or Sets JobId
+ /// </summary>
+ [DataMember(Name="jobId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "jobId")]
+ public long? JobId { get; set; }
+
+ /// <summary>
+ /// Gets or Sets Reply
+ /// </summary>
+ [DataMember(Name="reply", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "reply")]
+ public Object Reply { get; set; }
+
+ /// <summary>
+ /// Gets or Sets MessageId
+ /// </summary>
+ [DataMember(Name="messageId", EmitDefaultValue=false)]
+ [JsonProperty(PropertyName = "messageId")]
+ public long? MessageId { get; set; }
+
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class UserReplyMessage {\n");
+ sb.Append(" JobId: ").Append(JobId).Append("\n");
+ sb.Append(" Reply: ").Append(Reply).Append("\n");
+ sb.Append(" MessageId: ").Append(MessageId).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public new string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class UserRight {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class UserRight {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using Newtonsoft.Json;
+
+namespace IO.Swagger.Model {
+
+ /// <summary>
+ ///
+ /// </summary>
+ [DataContract]
+ public class ValidReplies {
+
+ /// <summary>
+ /// Get the string presentation of the object
+ /// </summary>
+ /// <returns>String presentation of the object</returns>
+ public override string ToString() {
+ var sb = new StringBuilder();
+ sb.Append("class ValidReplies {\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Get the JSON string presentation of the object
+ /// </summary>
+ /// <returns>JSON string presentation of the object</returns>
+ public string ToJson() {
+ return JsonConvert.SerializeObject(this, Formatting.Indented);
+ }
+
+}
+}
--- /dev/null
+using Model;\r
+using Newtonsoft.Json;\r
+using Newtonsoft.Json.Serialization;\r
+using NLog;\r
+using RestSharp;\r
+using RestSharp.Authenticators;\r
+using System;\r
+using System.Diagnostics;\r
+using System.Net;\r
+using System.Runtime.Serialization;\r
+\r
+namespace JobEngineClient {\r
+ public class JobEngineAPI {\r
+ private const string DATEFORMAT = "yyyy'-'MM'-'dd'T'HH':'mm':'ssK";\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
+ private RestClient client;\r
+ private JsonSerializerSettings serializerSettings;\r
+ private string user;\r
+ private string pwd;\r
+\r
+ public JobEngineAPI(string address, string user, string pwd, int timeout) {\r
+ this.user = user;\r
+ this.pwd = pwd;\r
+ client = new RestClient(address) {\r
+ Authenticator = new HttpBasicAuthenticator(user, pwd),\r
+ Timeout = timeout\r
+ };\r
+ serializerSettings = new JsonSerializerSettings {\r
+ TypeNameHandling = TypeNameHandling.Objects,\r
+ SerializationBinder = new TypeNameSerializationBinder(),\r
+ DateFormatString = DATEFORMAT\r
+ };\r
+ }\r
+\r
+\r
+ public Object Create(object data) {\r
+ var request = new RestRequest("create", Method.POST);\r
+ String body = JsonConvert.SerializeObject(data, serializerSettings);\r
+ //Debug.WriteLine(body);\r
+ request.AddParameter("application/json", body, ParameterType.RequestBody);\r
+ var response = client.Execute(request);\r
+ if (response.StatusCode != HttpStatusCode.OK || response.ContentLength < 1)\r
+ return null;\r
+ //Debug.WriteLine(response.Content);\r
+ var result = JsonConvert.DeserializeObject<WorkflowAction>(response.Content);\r
+ return result;\r
+ }\r
+\r
+ public void Item() {\r
+ var request = new RestRequest("item", Method.GET);\r
+ var response = client.Execute(request);\r
+ Debug.WriteLine(response.Content);\r
+ }\r
+ }\r
+\r
+}\r
+\r
+public class TypeNameSerializationBinder : SerializationBinder, ISerializationBinder {\r
+\r
+ public override void BindToName(Type serializedType, out string assemblyName, out string typeName) {\r
+ assemblyName = null;\r
+ typeName = serializedType.Name;\r
+ }\r
+\r
+ public override Type BindToType(string assemblyName, string typeName) {\r
+ string resolvedTypeName = typeName;\r
+ return Type.GetType(resolvedTypeName, true);\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProjectGuid>{CEFD0348-DED4-453E-BF3A-0B52F8890AB3}</ProjectGuid>\r
+ <OutputType>Library</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>MediaCubeClient</RootNamespace>\r
+ <AssemblyName>MediaCubeClient</AssemblyName>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ <TargetFrameworkProfile />\r
+ <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <DebugType>full</DebugType>\r
+ <Optimize>false</Optimize>\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\r
+ <CodeAnalysisIgnoreGeneratedCode>true</CodeAnalysisIgnoreGeneratedCode>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <DebugType>pdbonly</DebugType>\r
+ <Optimize>true</Optimize>\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ <Prefer32Bit>false</Prefer32Bit>\r
+ <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="Microsoft.CSharp" />\r
+ <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="RestSharp, Version=105.2.3.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.ComponentModel.DataAnnotations" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Runtime.Serialization" />\r
+ <Reference Include="System.Xml" />\r
+ <Reference Include="websocket-sharp, Version=1.0.2.42480, Culture=neutral, PublicKeyToken=5660b08a1845a91e, processorArchitecture=MSIL">\r
+ <SpecificVersion>False</SpecificVersion>\r
+ <HintPath>lib\websocket-sharp.dll</HintPath>\r
+ </Reference>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="IO\Swagger\Api\DefaultApi.cs" />\r
+ <Compile Include="IO\Swagger\Client\ApiClient.cs" />\r
+ <Compile Include="IO\Swagger\Client\ApiException.cs" />\r
+ <Compile Include="IO\Swagger\Client\Configuration.cs" />\r
+ <Compile Include="IO\Swagger\Model\AtomicLong.cs" />\r
+ <Compile Include="IO\Swagger\Model\BaseType.cs" />\r
+ <Compile Include="IO\Swagger\Model\BreakType.cs" />\r
+ <Compile Include="IO\Swagger\Model\CreateJobParameters.cs" />\r
+ <Compile Include="IO\Swagger\Model\DeclarationType.cs" />\r
+ <Compile Include="IO\Swagger\Model\DeliveryMethod.cs" />\r
+ <Compile Include="IO\Swagger\Model\Domain.cs" />\r
+ <Compile Include="IO\Swagger\Model\DomainCategory.cs" />\r
+ <Compile Include="IO\Swagger\Model\DomainCategoryResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\DomainResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\Domains.cs" />\r
+ <Compile Include="IO\Swagger\Model\DynamicAttributes.cs" />\r
+ <Compile Include="IO\Swagger\Model\EntityBase.cs" />\r
+ <Compile Include="IO\Swagger\Model\FileType.cs" />\r
+ <Compile Include="IO\Swagger\Model\FilterLogic.cs" />\r
+ <Compile Include="IO\Swagger\Model\FilterValueLogic.cs" />\r
+ <Compile Include="IO\Swagger\Model\Folder.cs" />\r
+ <Compile Include="IO\Swagger\Model\FolderResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\GetFilteredDomainByDisplayParameters.cs" />\r
+ <Compile Include="IO\Swagger\Model\GetFilteredParameters.cs" />\r
+ <Compile Include="IO\Swagger\Model\GuiType.cs" />\r
+ <Compile Include="IO\Swagger\Model\Item.cs" />\r
+ <Compile Include="IO\Swagger\Model\ItemResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\ItemType.cs" />\r
+ <Compile Include="IO\Swagger\Model\ItemTypeResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\Job.cs" />\r
+ <Compile Include="IO\Swagger\Model\JobMessage.cs" />\r
+ <Compile Include="IO\Swagger\Model\JobStart.cs" />\r
+ <Compile Include="IO\Swagger\Model\JobStartType.cs" />\r
+ <Compile Include="IO\Swagger\Model\JobStatus.cs" />\r
+ <Compile Include="IO\Swagger\Model\JobTemplatesInfo.cs" />\r
+ <Compile Include="IO\Swagger\Model\ListType.cs" />\r
+ <Compile Include="IO\Swagger\Model\LogEvent.cs" />\r
+ <Compile Include="IO\Swagger\Model\LoginParameters.cs" />\r
+ <Compile Include="IO\Swagger\Model\LogLevel.cs" />\r
+ <Compile Include="IO\Swagger\Model\MapObjectObjectElement.cs" />\r
+ <Compile Include="IO\Swagger\Model\MapStringObjectElement.cs" />\r
+ <Compile Include="IO\Swagger\Model\MdType.cs" />\r
+ <Compile Include="IO\Swagger\Model\Media.cs" />\r
+ <Compile Include="IO\Swagger\Model\MediaFile.cs" />\r
+ <Compile Include="IO\Swagger\Model\MediaFileResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\MediaResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\Metadata.cs" />\r
+ <Compile Include="IO\Swagger\Model\MetadataElement.cs" />\r
+ <Compile Include="IO\Swagger\Model\MetadataElementResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\MetadataResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\MetadataType.cs" />\r
+ <Compile Include="IO\Swagger\Model\MetadataTypeResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\OrderDirection.cs" />\r
+ <Compile Include="IO\Swagger\Model\QueryObject.cs" />\r
+ <Compile Include="IO\Swagger\Model\RemoteFile.cs" />\r
+ <Compile Include="IO\Swagger\Model\RemoteFileResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\RemoteStoreProtocol.cs" />\r
+ <Compile Include="IO\Swagger\Model\RemoveParameters.cs" />\r
+ <Compile Include="IO\Swagger\Model\RenderParameter.cs" />\r
+ <Compile Include="IO\Swagger\Model\ReplyMessageParameters.cs" />\r
+ <Compile Include="IO\Swagger\Model\RestartRequest.cs" />\r
+ <Compile Include="IO\Swagger\Model\ResumeRequest.cs" />\r
+ <Compile Include="IO\Swagger\Model\Scene.cs" />\r
+ <Compile Include="IO\Swagger\Model\SceneContent.cs" />\r
+ <Compile Include="IO\Swagger\Model\SceneContentResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\SceneResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\SearchDefinition.cs" />\r
+ <Compile Include="IO\Swagger\Model\SearchDefinitionResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\SearchFilter.cs" />\r
+ <Compile Include="IO\Swagger\Model\SearchResult.cs" />\r
+ <Compile Include="IO\Swagger\Model\Shot.cs" />\r
+ <Compile Include="IO\Swagger\Model\ShotResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\Signal.cs" />\r
+ <Compile Include="IO\Swagger\Model\SignalType.cs" />\r
+ <Compile Include="IO\Swagger\Model\SqlIndexType.cs" />\r
+ <Compile Include="IO\Swagger\Model\StaticTables.cs" />\r
+ <Compile Include="IO\Swagger\Model\Store.cs" />\r
+ <Compile Include="IO\Swagger\Model\StoreResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\StoreUri.cs" />\r
+ <Compile Include="IO\Swagger\Model\StoreUriResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\Syncable.cs" />\r
+ <Compile Include="IO\Swagger\Model\SystemResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\Template.cs" />\r
+ <Compile Include="IO\Swagger\Model\TemplateDeclaration.cs" />\r
+ <Compile Include="IO\Swagger\Model\TemplateResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\TemplateStep.cs" />\r
+ <Compile Include="IO\Swagger\Model\TranscoderProfile.cs" />\r
+ <Compile Include="IO\Swagger\Model\UserInfo.cs" />\r
+ <Compile Include="IO\Swagger\Model\UserInfoResponse.cs" />\r
+ <Compile Include="IO\Swagger\Model\UserMessage.cs" />\r
+ <Compile Include="IO\Swagger\Model\UserReplyMessage.cs" />\r
+ <Compile Include="IO\Swagger\Model\UserRight.cs" />\r
+ <Compile Include="IO\Swagger\Model\ValidReplies.cs" />\r
+ <Compile Include="JobEngineAPI.cs" />\r
+ <Compile Include="NexioAPI.cs" />\r
+ <Compile Include="NotificationMessage.cs" />\r
+ <Compile Include="Notifier.cs" />\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="packages.config" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="websocket-sharp.dll">\r
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
+ </None>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="Model\Model.cs" />\r
+ </ItemGroup>\r
+ <ItemGroup />\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+using System;\r
+\r
+namespace Model {\r
+ public class WorkflowAction {\r
+ public long id;\r
+ public DateTime touched;\r
+ public DateTime started;\r
+ public DateTime finished;\r
+ public bool successful;\r
+ public String houseId;\r
+ public String description;\r
+ public String source;\r
+ public String destination;\r
+ public String tag;\r
+ public long size;\r
+ }\r
+}\r
--- /dev/null
+using Newtonsoft.Json.Linq;\r
+using System;\r
+using System.Diagnostics;\r
+using WebSocketSharp;\r
+\r
+\r
+namespace NexioClient {\r
+ public class NexioAPI {\r
+ public const string ACTION = "action";\r
+ public const string LIST = "list";\r
+ public const string DATA = "data";\r
+ public const string CREATE = "create";\r
+ public const string DELETE = "delete";\r
+ public const string UPDATE = "update";\r
+ private WebSocket ws = null;\r
+ private string path;\r
+\r
+ public NexioAPI(String path) {\r
+ this.path = path;\r
+ }\r
+\r
+ public void Close() {\r
+ if (ws != null) {\r
+ ws.Close();\r
+ }\r
+ }\r
+\r
+ public void Open(EventHandler<MessageEventArgs> p) {\r
+ try\r
+ {\r
+ ws = new WebSocket(path);\r
+\r
+ ws.SslConfiguration.ServerCertificateValidationCallback = (s, c, ch, e) =>\r
+ {\r
+ return true;\r
+ };\r
+\r
+ ws.OnOpen += (sender, e) =>\r
+ {\r
+ Debug.WriteLine("OnOpen");\r
+ };\r
+\r
+ ws.OnMessage += (sender, e) =>\r
+ {\r
+ Debug.WriteLine("OnMessage: " + e.Data);\r
+ };\r
+ ws.OnMessage += p;\r
+\r
+ ws.OnError += (sender, e) =>\r
+ Debug.WriteLine("OnError: " + e.Message);\r
+\r
+ ws.OnClose += (sender, e) =>\r
+ Debug.WriteLine("OnClose: " + e.Reason);\r
+\r
+ ws.Connect();\r
+ }\r
+ catch (Exception e) {\r
+ } \r
+ }\r
+\r
+ public void GetListAsync() {\r
+ JObject data = new JObject();\r
+ data.Add(ACTION, JToken.FromObject(LIST));\r
+ try {\r
+ ws.Send(data.ToString());\r
+ }\r
+ catch (Exception e) {\r
+ }\r
+ }\r
+\r
+\r
+ void configure() {\r
+#if DEBUG\r
+ // using (var nf = new Notifier())\r
+ // using (var ws = new WebSocket("ws://localhost:8080/rest/nexio")) {\r
+\r
+ // JObject data = new JObject();\r
+ // data.Add("action", JToken.FromObject("list"));\r
+ // string content = data.ToString();\r
+ // Debug.WriteLine("Sending: " + content);\r
+ // ws.OnOpen += (sender, e) => ws.Send(content);\r
+\r
+ // ws.OnMessage += (sender, e) => {\r
+ // Debug.WriteLine("Receiving: " + e.Data);\r
+ // cde.Signal();\r
+ // };\r
+\r
+ // ws.OnError += (sender, e) =>\r
+ // Debug.WriteLine("Error: " + e.Message);\r
+\r
+ // ws.OnClose += (sender, e) =>\r
+ // Debug.WriteLine("Close: " + e.Reason);\r
+\r
+ // // Connect to the server.\r
+ // ws.Connect();\r
+ // cde.Wait();\r
+ // Debug.WriteLine("Closing");\r
+ // ws.Close();\r
+ // }\r
+ //}\r
+ // To change the logging level.\r
+ //ws.Log.Level = LogLevel.Trace;\r
+\r
+ // To change the wait time for the response to the Ping or Close.\r
+ //ws.WaitTime = TimeSpan.FromSeconds (10);\r
+\r
+ // To emit a WebSocket.OnMessage event when receives a ping.\r
+ //ws.EmitOnPing = true;\r
+#endif\r
+ // To enable the Per-message Compression extension.\r
+ //ws.Compression = CompressionMethod.Deflate;\r
+\r
+ // To validate the server certificate.\r
+ /*\r
+ ws.SslConfiguration.ServerCertificateValidationCallback =\r
+ (sender, certificate, chain, sslPolicyErrors) => {\r
+ ws.Log.Debug (\r
+ String.Format (\r
+ "Certificate:\n- Issuer: {0}\n- Subject: {1}",\r
+ certificate.Issuer,\r
+ certificate.Subject\r
+ )\r
+ );\r
+\r
+ return true; // If the server certificate is valid.\r
+ };\r
+ */\r
+\r
+ // To send the credentials for the HTTP Authentication (Basic/Digest).\r
+ //ws.SetCredentials ("nobita", "password", false);\r
+\r
+ // To send the Origin header.\r
+ //ws.Origin = "http://localhost:4649";\r
+\r
+ // To send the cookies.\r
+ //ws.SetCookie (new Cookie ("name", "nobita"));\r
+ //ws.SetCookie (new Cookie ("roles", "\"idiot, gunfighter\""));\r
+\r
+ // To connect through the HTTP Proxy server.\r
+ //ws.SetProxy ("http://localhost:3128", "nobita", "password");\r
+\r
+ // To enable the redirection.\r
+ //ws.EnableRedirection = true;\r
+#if DEBUG\r
+ // To change the logging level.\r
+ //ws.Log.Level = LogLevel.Trace;\r
+\r
+ // To change the wait time for the response to the Ping or Close.\r
+ //ws.WaitTime = TimeSpan.FromSeconds (10);\r
+\r
+ // To emit a WebSocket.OnMessage event when receives a ping.\r
+ //ws.EmitOnPing = true;\r
+#endif\r
+ // To enable the Per-message Compression extension.\r
+ //ws.Compression = CompressionMethod.Deflate;\r
+\r
+ // To validate the server certificate.\r
+ /*\r
+ ws.SslConfiguration.ServerCertificateValidationCallback =\r
+ (sender, certificate, chain, sslPolicyErrors) => {\r
+ ws.Log.Debug (\r
+ String.Format (\r
+ "Certificate:\n- Issuer: {0}\n- Subject: {1}",\r
+ certificate.Issuer,\r
+ certificate.Subject\r
+ )\r
+ );\r
+\r
+ return true; // If the server certificate is valid.\r
+ };\r
+ */\r
+\r
+ // To send the credentials for the HTTP Authentication (Basic/Digest).\r
+ //ws.SetCredentials ("nobita", "password", false);\r
+\r
+ // To send the Origin header.\r
+ //ws.Origin = "http://localhost:4649";\r
+\r
+ // To send the cookies.\r
+ //ws.SetCookie (new Cookie ("name", "nobita"));\r
+ //ws.SetCookie (new Cookie ("roles", "\"idiot, gunfighter\""));\r
+\r
+ // To connect through the HTTP Proxy server.\r
+ //ws.SetProxy ("http://localhost:3128", "nobita", "password");\r
+\r
+ // To enable the redirection.\r
+ //ws.EnableRedirection = true;\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+using System;
+
+namespace NexioClient {
+ internal class NotificationMessage
+ {
+ public string Body {
+ get; set;
+ }
+
+ public string Icon {
+ get; set;
+ }
+
+ public string Summary {
+ get; set;
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("{0}: {1}", Summary, Body);
+ }
+ }
+}
--- /dev/null
+#if UBUNTU
+using Notifications;
+#endif
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;\r
+using System.Threading;
+
+namespace NexioClient {
+ internal class Notifier : IDisposable
+ {
+ private volatile bool _enabled;
+ private ManualResetEvent _exited;
+ private Queue<NotificationMessage> _queue;
+ private object _sync;
+
+ public Notifier ()
+ {
+ _enabled = true;
+ _exited = new ManualResetEvent (false);
+ _queue = new Queue<NotificationMessage> ();
+ _sync = ((ICollection) _queue).SyncRoot;
+
+ ThreadPool.QueueUserWorkItem (
+ state => {
+ while (_enabled || Count > 0) {
+ var msg = dequeue ();
+ if (msg != null) {
+#if UBUNTU
+ var nf = new Notification (msg.Summary, msg.Body, msg.Icon);
+ nf.AddHint ("append", "allowed");
+ nf.Show ();
+#else
+ Debug.WriteLine (msg);
+
+#endif
+ }
+ else {
+ Thread.Sleep (500);
+ }
+ }
+
+ _exited.Set ();
+ }
+ );
+ }
+
+ public int Count {
+ get {
+ lock (_sync)
+ return _queue.Count;
+ }
+ }
+
+ private NotificationMessage dequeue ()
+ {
+ lock (_sync)
+ return _queue.Count > 0 ? _queue.Dequeue () : null;
+ }
+
+ public void Close ()
+ {
+ _enabled = false;
+ _exited.WaitOne ();
+ _exited.Close ();
+ }
+
+ public void Notify (NotificationMessage message)
+ {
+ lock (_sync) {
+ if (_enabled)
+ _queue.Enqueue (message);
+ }
+ }
+
+ void IDisposable.Dispose ()
+ {
+ Close ();
+ }
+ }
+}
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+// General Information about an assembly is controlled through the following \r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+[assembly: AssemblyTitle("MediaCubeClient")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("MediaCubeClient.Properties")]\r
+[assembly: AssemblyCopyright("Copyright © 2017")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// Setting ComVisible to false makes the types in this assembly not visible \r
+// to COM components. If you need to access a type in this assembly from \r
+// COM, set the ComVisible attribute to true on that type.\r
+[assembly: ComVisible(false)]\r
+\r
+// The following GUID is for the ID of the typelib if this project is exposed to COM\r
+[assembly: Guid("0fd33cac-0529-4896-8482-836b2cc93b17")]\r
+\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version \r
+// Build Number\r
+// Revision\r
+//\r
+[assembly: AssemblyVersion("1.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<packages>\r
+ <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net461" />\r
+ <package id="NLog" version="4.4.12" targetFramework="net461" />\r
+ <package id="RestSharp" version="105.2.3" targetFramework="net461" />\r
+</packages>
\ No newline at end of file
--- /dev/null
+using Newtonsoft.Json.Linq;\r
+using NLog;\r
+using RestSharp;\r
+using RestSharp.Authenticators;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Globalization;\r
+using System.Linq;\r
+\r
+namespace OctopusClient\r
+{\r
+\r
+ public class Rundown\r
+ {\r
+ public string ID { get; set; }\r
+ public string Name { get; set; }\r
+ public string Start { get; set; }\r
+ public override String ToString()\r
+ {\r
+ string displayName = string.IsNullOrEmpty(Name) ? OctopusAPI.UNNAMED : Name;\r
+ string result = ID.Equals("0") ? displayName : String.Format($"{Start} | {displayName} ");\r
+ return result;\r
+ }\r
+ }\r
+\r
+ public class Story\r
+ {\r
+ public string ID { get; set; }\r
+ public string Name { get; set; }\r
+ public MosObject[] MosObjects{ get; set; }\r
+ public override String ToString()\r
+ {\r
+ string displayName = string.IsNullOrEmpty(Name) ? OctopusAPI.UNNAMED : Name;\r
+ string result = ID.Equals("0") ? displayName : String.Format($"{ID} | {displayName} ");\r
+ return result;\r
+ }\r
+ }\r
+\r
+ public class MosObject\r
+ {\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 Modified { get; set; }\r
+ public string GlobalID { get; set; }\r
+ }\r
+\r
+ public class StoryFolder\r
+ {\r
+\r
+ public string ID { get; set; }\r
+\r
+ public string Name { get; set; }\r
+\r
+ public override String ToString()\r
+ {\r
+ string displayName = string.IsNullOrEmpty(Name) ? OctopusAPI.UNNAMED : Name;\r
+ string result = ID.Equals("0") ? displayName : String.Format($"{ID} | {displayName} ");\r
+ return result;\r
+ }\r
+ }\r
+\r
+ public class OctopusAPI\r
+ {\r
+ public const string UNNAMED = "<Unnamed>";\r
+\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
+ private RestClient client;\r
+ private string user;\r
+ private string pwd;\r
+\r
+ public OctopusAPI(string address, string user, string pwd, int timeout)\r
+ {\r
+ this.user = user;\r
+ this.pwd = pwd;\r
+ client = new RestClient(address)\r
+ {\r
+ Authenticator = new HttpBasicAuthenticator(user, pwd),\r
+ Timeout = timeout\r
+ };\r
+ }\r
+\r
+ public IEnumerable<Rundown> GetRundowns(DateTime scheduledDate)\r
+ {\r
+ IEnumerable<Rundown> result = null;\r
+ try\r
+ {\r
+ var request = new RestRequest("rundowns/{scheduledDate}", Method.GET);\r
+ var dt = scheduledDate.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture);\r
+ request.AddParameter("scheduledDate", dt, ParameterType.UrlSegment);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d =>\r
+ {\r
+ Rundown r = new Rundown\r
+ {\r
+ ID = d["id"].ToString(),\r
+ Name = d["name"].ToString(),\r
+ Start = d["scheduledStart"].ToString()\r
+ };\r
+ logger.Debug($"{r}");\r
+ return r;\r
+ });\r
+ }\r
+ catch (Exception e)\r
+ {\r
+ //log e.Message ??\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public IEnumerable<Story> GetStories(string rundownID)\r
+ {\r
+ IEnumerable<Story> result = null;\r
+ try\r
+ {\r
+ var request = new RestRequest("stories/{rundownID}", Method.GET);\r
+ request.AddParameter("rundownID", rundownID, ParameterType.UrlSegment);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d =>\r
+ {\r
+ List<MosObject> objs = GetMosObjectsFromStory(d);\r
+ Story r = new Story\r
+ {\r
+ ID = d["id"].ToString(),\r
+ Name = d["name"].ToString(),\r
+ MosObjects = objs.ToArray()\r
+ };\r
+ logger.Debug($"{r}");\r
+ return r;\r
+ }).OrderBy(r =>\r
+ {\r
+ return r.ID;\r
+ });\r
+ }\r
+ catch (Exception e) { }\r
+ return result;\r
+ }\r
+\r
+ public IEnumerable<Story> GetStoriesByStoryFolderID(string storyFolderID)\r
+ {\r
+ IEnumerable<Story> result = null;\r
+ try\r
+ {\r
+ var request = new RestRequest("storiesByStoryFolderID/{storyFolderID}", Method.GET);\r
+ request.AddParameter("storyFolderID", storyFolderID, ParameterType.UrlSegment);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d =>\r
+ {\r
+ List<MosObject> objs = GetMosObjectsFromStory(d);\r
+ Story r = new Story\r
+ {\r
+ ID = d["id"].ToString(),\r
+ Name = d["name"].ToString(),\r
+ MosObjects = objs.ToArray()\r
+ };\r
+ \r
+ logger.Debug($"{r}");\r
+ return r;\r
+ }).OrderBy(r =>\r
+ {\r
+ return r.ID;\r
+ });\r
+ }\r
+ catch (Exception e) { }\r
+ return result;\r
+ }\r
+\r
+ private List<MosObject> GetMosObjectsFromStory(JToken d)\r
+ {\r
+ JToken[] array = d["mosObjects"].ToArray();\r
+ List<MosObject> objs = new List<MosObject>();\r
+ foreach (JToken token in array)\r
+ {\r
+ Console.WriteLine(token["id"]);\r
+ MosObject mosObject = new MosObject()\r
+ {\r
+ GlobalID = token["globalId"].ToString(),\r
+ ID = token["id"].ToString(),\r
+ Modified = token["modified"].ToString(),\r
+ MosID = token["mosId"].ToString(),\r
+ ObjectType = token["objectType"].ToString(),\r
+ ObjID = token["objId"].ToString()\r
+ };\r
+ objs.Add(mosObject);\r
+ }\r
+ return objs;\r
+ }\r
+\r
+ public IEnumerable<StoryFolder> getStoryFolders()\r
+ {\r
+ IEnumerable<StoryFolder> result = null;\r
+ try\r
+ {\r
+ var request = new RestRequest("storyfolders", Method.GET);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d =>\r
+ {\r
+ StoryFolder r = new StoryFolder\r
+ {\r
+ ID = d["id"].ToString(),\r
+ Name = d["name"].ToString()\r
+ };\r
+ logger.Debug($"{r}");\r
+ return r;\r
+ });\r
+ }\r
+ catch (Exception e) { }\r
+ return result;\r
+ }\r
+\r
+ public IEnumerable<Story> GetStories()\r
+ {\r
+ IEnumerable<Story> result = null;\r
+ try\r
+ {\r
+ var request = new RestRequest("stories", Method.GET);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d =>\r
+ {\r
+ Story r = new Story\r
+ {\r
+ ID = d["id"].ToString(),\r
+ Name = d["name"].ToString()\r
+ };\r
+ logger.Debug($"{r}");\r
+ return r;\r
+ });\r
+ }\r
+ catch (Exception e) { }\r
+ return result;\r
+ }\r
+\r
+ public IEnumerable<Story> GetStoriesById(String id)\r
+ {\r
+ IEnumerable<Story> result = null;\r
+ try\r
+ {\r
+ var request = new RestRequest("getStoriesByIDRegex/{id}", Method.GET);\r
+ request.AddParameter("id", id, ParameterType.UrlSegment);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d =>\r
+ {\r
+ Story r = new Story\r
+ {\r
+ ID = d["id"].ToString(),\r
+ Name = String.IsNullOrEmpty(d["name"].ToString()) ? OctopusAPI.UNNAMED : d["name"].ToString()\r
+ };\r
+ logger.Debug($"{r}");\r
+ return r;\r
+ });\r
+ }\r
+ catch (Exception e) { }\r
+ return result;\r
+ }\r
+\r
+ public IEnumerable<MosObject> GetMosObjectsByID(String id) {\r
+ IEnumerable<MosObject> result = null;\r
+ try {\r
+ var request = new RestRequest("getMosObjectsByID/{id}", Method.GET);\r
+ request.AddParameter("id", id, ParameterType.UrlSegment);\r
+ var response = client.Execute<JsonArray>(request);\r
+ if (response.ContentLength == 0)\r
+ return null;\r
+ JArray resultObject = JArray.Parse(response.Content);\r
+\r
+ result = resultObject.Children().Select(d => {\r
+ MosObject r = new MosObject {\r
+ ID = d["id"].ToString(),\r
+ GlobalID = d["globalId"].ToString(),\r
+ Modified = d["modified"].ToString(),\r
+ MosID = d["mosId"].ToString(),\r
+ ObjectType = d["objectType"].ToString(),\r
+ ObjID = d["objId"].ToString()\r
+ };\r
+ logger.Debug($"{r}");\r
+ return r;\r
+ });\r
+ }\r
+ catch (Exception e) { }\r
+ return result;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProjectGuid>{8CC7C930-9DBF-487B-AED5-776937A649D5}</ProjectGuid>\r
+ <OutputType>Library</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>OctopusClient</RootNamespace>\r
+ <AssemblyName>OctopusClient</AssemblyName>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <DebugType>full</DebugType>\r
+ <Optimize>false</Optimize>\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <DebugType>pdbonly</DebugType>\r
+ <Optimize>true</Optimize>\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ </PropertyGroup>\r
+ <PropertyGroup>\r
+ <StartupObject />\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="RestSharp, Version=105.2.3.0, Culture=neutral, processorArchitecture=MSIL">\r
+ <HintPath>..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.Core" />\r
+ <Reference Include="System.Drawing" />\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="System.Xml.Linq" />\r
+ <Reference Include="System.Data.DataSetExtensions" />\r
+ <Reference Include="Microsoft.CSharp" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Net.Http" />\r
+ <Reference Include="System.Xml" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="OctopusAPI.cs" />\r
+ <Compile Include="OctopusConfiguration.cs" />\r
+ <Compile Include="OctopusIDSelector.cs">\r
+ <SubType>UserControl</SubType>\r
+ </Compile>\r
+ <Compile Include="OctopusIDSelector.Designer.cs">\r
+ <DependentUpon>OctopusIDSelector.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ <Compile Include="Resources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTime>True</DesignTime>\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="SearchMessageBox.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="packages.config" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <EmbeddedResource Include="OctopusIDSelector.resx">\r
+ <DependentUpon>OctopusIDSelector.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="Resources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="SearchMessageBox.resx">\r
+ <DependentUpon>SearchMessageBox.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ </ItemGroup>\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+using System;\r
+\r
+namespace OctopusClient {\r
+ public class OctopusConfiguration {\r
+ public Uri Address { get; set; }\r
+ public string UserName { get; set; }\r
+ public string Password { get; set; }\r
+ public int Timeout;\r
+ }\r
+}\r
--- /dev/null
+namespace OctopusClient {\r
+ partial class OctopusIDSelector {\r
+ /// <summary> \r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary> \r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Component Designer generated code\r
+\r
+ /// <summary> \r
+ /// Required method for Designer support - do not modify \r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ this.dateScheduled = new System.Windows.Forms.DateTimePicker();\r
+ this.comboRudowns = new System.Windows.Forms.ComboBox();\r
+ this.bindingRundown = new System.Windows.Forms.BindingSource(this.components);\r
+ this.treeContent = new System.Windows.Forms.TreeView();\r
+ this.tabControl1 = new System.Windows.Forms.TabControl();\r
+ this.tabPage1 = new System.Windows.Forms.TabPage();\r
+ this.tabPage2 = new System.Windows.Forms.TabPage();\r
+ this.comboStoryFolder = new System.Windows.Forms.ComboBox();\r
+ this.bindingStoryFolder = new System.Windows.Forms.BindingSource(this.components);\r
+ this.linkID = new System.Windows.Forms.LinkLabel();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingRundown)).BeginInit();\r
+ this.tabControl1.SuspendLayout();\r
+ this.tabPage1.SuspendLayout();\r
+ this.tabPage2.SuspendLayout();\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingStoryFolder)).BeginInit();\r
+ this.SuspendLayout();\r
+ // \r
+ // dateScheduled\r
+ // \r
+ this.dateScheduled.Format = System.Windows.Forms.DateTimePickerFormat.Short;\r
+ this.dateScheduled.Location = new System.Drawing.Point(6, 6);\r
+ this.dateScheduled.Name = "dateScheduled";\r
+ this.dateScheduled.ShowUpDown = true;\r
+ this.dateScheduled.Size = new System.Drawing.Size(82, 20);\r
+ this.dateScheduled.TabIndex = 0;\r
+ this.dateScheduled.ValueChanged += new System.EventHandler(this.dateScheduled_ValueChanged);\r
+ // \r
+ // comboRudowns\r
+ // \r
+ this.comboRudowns.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.comboRudowns.DataSource = this.bindingRundown;\r
+ this.comboRudowns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
+ this.comboRudowns.FormattingEnabled = true;\r
+ this.comboRudowns.Location = new System.Drawing.Point(94, 6);\r
+ this.comboRudowns.Name = "comboRudowns";\r
+ this.comboRudowns.Size = new System.Drawing.Size(143, 21);\r
+ this.comboRudowns.TabIndex = 3;\r
+ this.comboRudowns.SelectedValueChanged += new System.EventHandler(this.comboRudowns_SelectedValueChanged);\r
+ // \r
+ // treeContent\r
+ // \r
+ this.treeContent.BackColor = System.Drawing.Color.White;\r
+ this.treeContent.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.treeContent.CheckBoxes = true;\r
+ this.treeContent.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.treeContent.Location = new System.Drawing.Point(10, 70);\r
+ this.treeContent.Name = "treeContent";\r
+ this.treeContent.Size = new System.Drawing.Size(251, 273);\r
+ this.treeContent.TabIndex = 5;\r
+ this.treeContent.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeContent_AfterCheck);\r
+ this.treeContent.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeContent_AfterSelect);\r
+ this.treeContent.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeContent_NodeMouseDoubleClick);\r
+ this.treeContent.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeContent_KeyDown);\r
+ // \r
+ // tabControl1\r
+ // \r
+ this.tabControl1.Controls.Add(this.tabPage1);\r
+ this.tabControl1.Controls.Add(this.tabPage2);\r
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.tabControl1.Location = new System.Drawing.Point(10, 10);\r
+ this.tabControl1.Name = "tabControl1";\r
+ this.tabControl1.SelectedIndex = 0;\r
+ this.tabControl1.Size = new System.Drawing.Size(251, 60);\r
+ this.tabControl1.TabIndex = 10;\r
+ this.tabControl1.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabControl1_Selected);\r
+ this.tabControl1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tabControl1_KeyDown);\r
+ // \r
+ // tabPage1\r
+ // \r
+ this.tabPage1.Controls.Add(this.dateScheduled);\r
+ this.tabPage1.Controls.Add(this.comboRudowns);\r
+ this.tabPage1.Location = new System.Drawing.Point(4, 22);\r
+ this.tabPage1.Name = "tabPage1";\r
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tabPage1.Size = new System.Drawing.Size(243, 34);\r
+ this.tabPage1.TabIndex = 0;\r
+ this.tabPage1.Text = "Rundown";\r
+ this.tabPage1.UseVisualStyleBackColor = true;\r
+ // \r
+ // tabPage2\r
+ // \r
+ this.tabPage2.Controls.Add(this.comboStoryFolder);\r
+ this.tabPage2.Location = new System.Drawing.Point(4, 22);\r
+ this.tabPage2.Name = "tabPage2";\r
+ this.tabPage2.Padding = new System.Windows.Forms.Padding(3);\r
+ this.tabPage2.Size = new System.Drawing.Size(243, 34);\r
+ this.tabPage2.TabIndex = 1;\r
+ this.tabPage2.Text = "Story Folder";\r
+ this.tabPage2.UseVisualStyleBackColor = true;\r
+ // \r
+ // comboStoryFolder\r
+ // \r
+ this.comboStoryFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
+ | System.Windows.Forms.AnchorStyles.Right)));\r
+ this.comboStoryFolder.DataSource = this.bindingStoryFolder;\r
+ this.comboStoryFolder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
+ this.comboStoryFolder.FormattingEnabled = true;\r
+ this.comboStoryFolder.Location = new System.Drawing.Point(6, 7);\r
+ this.comboStoryFolder.Margin = new System.Windows.Forms.Padding(3, 3, 3, 6);\r
+ this.comboStoryFolder.Name = "comboStoryFolder";\r
+ this.comboStoryFolder.Size = new System.Drawing.Size(231, 21);\r
+ this.comboStoryFolder.TabIndex = 1;\r
+ this.comboStoryFolder.SelectedValueChanged += new System.EventHandler(this.comboStoryFolder_SelectedValueChanged);\r
+ // \r
+ // linkID\r
+ // \r
+ this.linkID.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+ this.linkID.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.linkID.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;\r
+ this.linkID.Location = new System.Drawing.Point(10, 343);\r
+ this.linkID.Name = "linkID";\r
+ this.linkID.Size = new System.Drawing.Size(251, 23);\r
+ this.linkID.TabIndex = 12;\r
+ this.linkID.TabStop = true;\r
+ this.linkID.Text = "Search";\r
+ this.linkID.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
+ this.linkID.Visible = false;\r
+ this.linkID.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkID_LinkClicked);\r
+ // \r
+ // OctopusIDSelector\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.BackColor = System.Drawing.Color.White;\r
+ this.Controls.Add(this.treeContent);\r
+ this.Controls.Add(this.tabControl1);\r
+ this.Controls.Add(this.linkID);\r
+ this.Margin = new System.Windows.Forms.Padding(10);\r
+ this.Name = "OctopusIDSelector";\r
+ this.Padding = new System.Windows.Forms.Padding(10);\r
+ this.Size = new System.Drawing.Size(271, 376);\r
+ this.Load += new System.EventHandler(this.OctopusIDSelector_Load);\r
+ this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OctopusIDSelector_KeyDown);\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingRundown)).EndInit();\r
+ this.tabControl1.ResumeLayout(false);\r
+ this.tabPage1.ResumeLayout(false);\r
+ this.tabPage2.ResumeLayout(false);\r
+ ((System.ComponentModel.ISupportInitialize)(this.bindingStoryFolder)).EndInit();\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.DateTimePicker dateScheduled;\r
+ private System.Windows.Forms.ComboBox comboRudowns;\r
+ private System.Windows.Forms.TreeView treeContent;\r
+ private System.Windows.Forms.BindingSource bindingRundown;\r
+ private System.Windows.Forms.TabControl tabControl1;\r
+ private System.Windows.Forms.TabPage tabPage1;\r
+ private System.Windows.Forms.TabPage tabPage2;\r
+ private System.Windows.Forms.LinkLabel linkID;\r
+ private System.Windows.Forms.ComboBox comboStoryFolder;\r
+ private System.Windows.Forms.BindingSource bindingStoryFolder;\r
+ }\r
+}\r
--- /dev/null
+using NLog;\r
+using System;\r
+using System.Linq;\r
+using System.Windows.Forms;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+\r
+namespace OctopusClient {\r
+ public delegate void OnSelectedIDChanged(string ID);\r
+ public delegate void ClearCheckBox();\r
+\r
+ public partial class OctopusIDSelector : UserControl {\r
+\r
+ public ClearCheckBox clearCheckBox { get; set; }\r
+\r
+ public bool Disposeabel { get; set; }\r
+\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
+ private OctopusAPI client;\r
+ private int selectedRundownIndex = -1;\r
+ private int selectedStoryFolderIndex = -1;\r
+ public TreeNode previousSelectedNode = null;\r
+ private bool checkFromCode;\r
+\r
+ public OnSelectedIDChanged IDChangedEvent { get; set; }\r
+\r
+ public OctopusConfiguration Configuration {\r
+ set {\r
+ client = new OctopusAPI(value.Address.OriginalString, value.UserName, value.Password, value.Timeout);\r
+ refreshStoryFolders();\r
+ refreshRundowns();\r
+ }\r
+ }\r
+\r
+ public OctopusIDSelector() {\r
+ InitializeComponent();\r
+ InitializeControlTexts();\r
+ }\r
+\r
+ private void InitializeControlTexts() {\r
+ tabPage1.Text = Resources.ADASTUKOR;\r
+ tabPage2.Text = Resources.MAPPA;\r
+ linkID.Text = Resources.KERESES;\r
+ bindingRundown.Add(Resources.VALASSZON_ELEMET);\r
+ bindingStoryFolder.Add(Resources.VALASSZON_ELEMET);\r
+ }\r
+\r
+ private void OctopusIDSelector_Load(object sender, EventArgs e) {\r
+ }\r
+\r
+ private void dateScheduled_ValueChanged(object sender, EventArgs e) {\r
+ refreshRundowns();\r
+ }\r
+\r
+ private void comboRudowns_SelectedValueChanged(object sender, EventArgs e) {\r
+ Rundown rundown = comboRudowns.SelectedValue as Rundown;\r
+ treeContent.Nodes.Clear();\r
+ if (rundown == null)\r
+ return;\r
+ logger.Info("Selected rundown {0}", rundown.ID);\r
+ IEnumerable<Story> stories = client.GetStories(rundown.ID);\r
+ if (stories != null)\r
+ foreach (var story in stories) {\r
+ string name = story.Name == null ? "<UnNamed>" : story.Name;\r
+ TreeNode actualNode = treeContent.Nodes.Add(story.ID, String.Format($"{story.ID} {story.Name}"));\r
+ MosObject[] mosObjects = story.MosObjects;\r
+ foreach (MosObject mosObject in mosObjects)\r
+ actualNode.Nodes.Add(mosObject.ID, mosObject.ID);\r
+ }\r
+ selectedRundownIndex = comboRudowns.SelectedIndex;\r
+ }\r
+\r
+ private void comboStoryFolder_SelectedValueChanged(object sender, EventArgs e) {\r
+ StoryFolder storyFolder = comboStoryFolder.SelectedValue as StoryFolder;\r
+ if (storyFolder == null)\r
+ return;\r
+ treeContent.Nodes.Clear();\r
+ logger.Info("Selected storyFolder {0} {1}", storyFolder.Name, storyFolder.ID);\r
+ if (storyFolder.ID.Equals("0"))\r
+ return;\r
+ var stories = client.GetStoriesByStoryFolderID(storyFolder.ID);\r
+ if (stories == null)\r
+ return;\r
+ foreach (var story in stories) {\r
+ TreeNode actualNode = treeContent.Nodes.Add(story.ID, String.Format($"{story.ID} {story.Name}"));\r
+ MosObject[] mosObjects = story.MosObjects;\r
+ foreach (MosObject mosObject in mosObjects)\r
+ actualNode.Nodes.Add(mosObject.ID, mosObject.ID);\r
+ }\r
+ selectedStoryFolderIndex = comboStoryFolder.SelectedIndex;\r
+ }\r
+\r
+ private void refreshRundowns() {\r
+ Cursor.Current = Cursors.WaitCursor;\r
+ IEnumerable<Rundown> rundowns = client.GetRundowns(dateScheduled.Value)?.ToArray();\r
+ if (rundowns == null) {\r
+ bindingRundown.Remove(Resources.VALASSZON_ELEMET);\r
+ return;\r
+ }\r
+ BindingList<Rundown> bindingRundowns = new BindingList<Rundown>();\r
+ bindingRundowns.Add(new Rundown() { ID = 0.ToString(), Name = Resources.VALASSZON_ELEMET });\r
+ if (rundowns == null)\r
+ return;\r
+ foreach (Rundown actualRundown in rundowns)\r
+ bindingRundowns.Add(actualRundown);\r
+ bindingRundown.DataSource = bindingRundowns;\r
+ comboRudowns.SelectedIndex = selectedRundownIndex == -1 ? 0 : selectedRundownIndex;\r
+ }\r
+\r
+ private void refreshStoryFolders() {\r
+ Cursor.Current = Cursors.WaitCursor;\r
+ IEnumerable<StoryFolder> storyFolders = client.getStoryFolders()?.ToArray();\r
+ if (storyFolders == null) {\r
+ bindingStoryFolder.Remove(Resources.VALASSZON_ELEMET);\r
+ return;\r
+ }\r
+ BindingList<StoryFolder> bindingStoryFolders = new BindingList<StoryFolder>();\r
+ bindingStoryFolders.Add(new StoryFolder() { ID = 0.ToString(), Name = Resources.VALASSZON_ELEMET });\r
+ foreach (StoryFolder actualStoryFolder in storyFolders)\r
+ bindingStoryFolders.Add(actualStoryFolder);\r
+ bindingStoryFolder.DataSource = bindingStoryFolders;\r
+ comboStoryFolder.SelectedIndex = selectedStoryFolderIndex == -1 ? 0 : selectedStoryFolderIndex;\r
+ }\r
+\r
+ private void treeContent_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) {\r
+ if (String.IsNullOrEmpty(e.Node.Name))\r
+ return;\r
+ IDChangedEvent?.Invoke(e.Node.Name);\r
+ }\r
+\r
+ public void IDChangeEventCalledFromOutside(string id) {\r
+ IDChangedEvent?.Invoke(id);\r
+ }\r
+\r
+ private void tabControl1_Selected(object sender, TabControlEventArgs e) {\r
+ treeContent.Nodes.Clear();\r
+ if (e.TabPageIndex == 0)\r
+ refreshRundowns();\r
+ else\r
+ refreshStoryFolders();\r
+ }\r
+\r
+ private void linkID_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {\r
+ SearchMessageBox searchMessageBox = new SearchMessageBox();\r
+ searchMessageBox.ShowDialog();\r
+ }\r
+\r
+ public void setLinkIDText(string value) {\r
+ linkID.Text = value;\r
+ }\r
+\r
+ private void treeContent_AfterSelect(object sender, TreeViewEventArgs e) {\r
+ TreeView treeView = sender as TreeView;\r
+ if (sender == null)\r
+ return;\r
+ string id = treeView.SelectedNode.Name;\r
+ if (previousSelectedNode != null) {\r
+ previousSelectedNode.BackColor = treeView.BackColor;\r
+ previousSelectedNode.ForeColor = treeView.ForeColor;\r
+ }\r
+ treeView.SelectedNode.BackColor = System.Drawing.Color.Gainsboro;\r
+ treeView.SelectedNode.ForeColor = System.Drawing.Color.Black;\r
+ previousSelectedNode = treeView.SelectedNode;\r
+ //RefreshPlaceHolderIDS(id);\r
+ }\r
+\r
+ private void RefreshPlaceHolderIDS(String ID) {\r
+ treeContent.Nodes.Clear();\r
+\r
+ var stories = client.GetStoriesByStoryFolderID(ID);\r
+ if (stories == null)\r
+ return;\r
+ foreach (var story in stories)\r
+ treeContent.Nodes.Add(story.ID, String.Format($"{story.ID} {story.Name}"));\r
+ }\r
+\r
+ private void OctopusIDSelector_KeyDown(object sender, KeyEventArgs e) {\r
+ if (e.KeyCode == Keys.Escape && Disposeabel)\r
+ Dispose();\r
+ }\r
+\r
+ private void tabControl1_KeyDown(object sender, KeyEventArgs e) {\r
+ this.OnKeyDown(e);\r
+ }\r
+\r
+ private void treeContent_KeyDown(object sender, KeyEventArgs e) {\r
+ this.OnKeyDown(e);\r
+ }\r
+\r
+ private void treeContent_AfterCheck(object sender, TreeViewEventArgs e) {\r
+ if (checkFromCode)\r
+ return;\r
+ TreeNode node = e.Node;\r
+ string text = node.Name;\r
+ checkFromCode = false;\r
+ clearCheckBox?.Invoke();\r
+ ClearSelectionSource(node, treeContent.Nodes);\r
+ if (node.Checked) \r
+ IDChangedEvent?.Invoke(text);\r
+ else\r
+ IDChangedEvent?.Invoke(string.Empty);\r
+ checkFromCode = false;\r
+ }\r
+\r
+ private void ClearSelectionSource(TreeNode actualNode, TreeNodeCollection nodes) {\r
+ foreach (TreeNode actual in nodes) {\r
+ if (!actual.Equals(actualNode)) {\r
+ checkFromCode = true;\r
+ actual.Checked = false;\r
+ ClearSelectionSource(actualNode, actual.Nodes);\r
+ }\r
+ }\r
+ checkFromCode = false;\r
+ }\r
+\r
+ public void ClearEveryCheckBox() {\r
+ ClearSelectionSource(null, treeContent.Nodes);\r
+ }\r
+\r
+ public OctopusAPI GetClient() {\r
+ return client;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="bindingRundown.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="bindingStoryFolder.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>155, 17</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+// General Information about an assembly is controlled through the following\r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+[assembly: AssemblyTitle("OctopusClient")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("OctopusClient")]\r
+[assembly: AssemblyCopyright("Copyright © 2017")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// Setting ComVisible to false makes the types in this assembly not visible\r
+// to COM components. If you need to access a type in this assembly from\r
+// COM, set the ComVisible attribute to true on that type.\r
+[assembly: ComVisible(false)]\r
+\r
+// The following GUID is for the ID of the typelib if this project is exposed to COM\r
+[assembly: Guid("8cc7c930-9dbf-487b-aed5-776937a649d5")]\r
+\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version\r
+// Build Number\r
+// Revision\r
+//\r
+// 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.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace OctopusClient {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OctopusClient.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Adástükör.\r
+ /// </summary>\r
+ internal static string ADASTUKOR {\r
+ get {\r
+ return ResourceManager.GetString("ADASTUKOR", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to ID.\r
+ /// </summary>\r
+ internal static string ID {\r
+ get {\r
+ return ResourceManager.GetString("ID", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Keresés.\r
+ /// </summary>\r
+ internal static string KERESES {\r
+ get {\r
+ return ResourceManager.GetString("KERESES", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Keresés eredménye.\r
+ /// </summary>\r
+ internal static string KERESES_EREDMENYE {\r
+ get {\r
+ return ResourceManager.GetString("KERESES_EREDMENYE", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Mappa.\r
+ /// </summary>\r
+ internal static string MAPPA {\r
+ get {\r
+ return ResourceManager.GetString("MAPPA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Mégse.\r
+ /// </summary>\r
+ internal static string MEGSE {\r
+ get {\r
+ return ResourceManager.GetString("MEGSE", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to MosID.\r
+ /// </summary>\r
+ internal static string MOS_ID {\r
+ get {\r
+ return ResourceManager.GetString("MOS_ID", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Név.\r
+ /// </summary>\r
+ internal static string NEV {\r
+ get {\r
+ return ResourceManager.GetString("NEV", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Válasszon elemet.\r
+ /// </summary>\r
+ internal static string VALASSZON_ELEMET {\r
+ get {\r
+ return ResourceManager.GetString("VALASSZON_ELEMET", resourceCulture);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <data name="ADASTUKOR" xml:space="preserve">\r
+ <value>Adástükör</value>\r
+ </data>\r
+ <data name="ID" xml:space="preserve">\r
+ <value>ID</value>\r
+ </data>\r
+ <data name="KERESES" xml:space="preserve">\r
+ <value>Keresés</value>\r
+ </data>\r
+ <data name="KERESES_EREDMENYE" xml:space="preserve">\r
+ <value>Keresés eredménye</value>\r
+ </data>\r
+ <data name="MAPPA" xml:space="preserve">\r
+ <value>Mappa</value>\r
+ </data>\r
+ <data name="MEGSE" xml:space="preserve">\r
+ <value>Mégse</value>\r
+ </data>\r
+ <data name="MOS_ID" xml:space="preserve">\r
+ <value>MosID</value>\r
+ </data>\r
+ <data name="NEV" xml:space="preserve">\r
+ <value>Név</value>\r
+ </data>\r
+ <data name="VALASSZON_ELEMET" xml:space="preserve">\r
+ <value>Válasszon elemet</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+using System.Windows.Forms;\r
+using OctopusClient;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Linq;\r
+using System;\r
+\r
+namespace OctopusClient {\r
+ public delegate void OctopusMetadataSelected(string ID);\r
+ public class SearchMessageBox : Form {\r
+ private System.ComponentModel.BackgroundWorker backgroundWorker1;\r
+ private System.ComponentModel.BackgroundWorker backgroundWorker2;\r
+ private DataGridView dataGridView1;\r
+ private ContextMenuStrip contextMenuStrip1;\r
+ private System.ComponentModel.IContainer components;\r
+\r
+ private Button buttonOk;\r
+ private Button buttonCancel;\r
+ private GroupBox groupBox1;\r
+ private GroupBox groupBox2;\r
+ private List<Story> stories;\r
+ private List<MosObject> mosObjects;\r
+ public OctopusMetadataSelected metadataSelected;\r
+\r
+ public SearchMessageBox(List<MosObject> mosObjects, OctopusMetadataSelected metadataSelected) : this() {\r
+ this.mosObjects = mosObjects;\r
+ this.metadataSelected = metadataSelected;\r
+ SetColumnsForMosObjects();\r
+ dataGridView1.DataSource = mosObjects;\r
+ }\r
+\r
+ public SearchMessageBox(List<Story> stories, OctopusMetadataSelected metadataSelected) : this() {\r
+ this.stories = stories;\r
+ this.metadataSelected = metadataSelected;\r
+ SetColumnsForStories();\r
+ dataGridView1.DataSource = stories;\r
+ }\r
+\r
+ public SearchMessageBox() {\r
+ InitializeComponent();\r
+ InitializeControlTexts();\r
+ }\r
+\r
+ private void SetColumnsForStories() {\r
+ dataGridView1.Columns.AddRange(\r
+ new DataGridViewColumn[] {\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader,\r
+ DataPropertyName = "ID",\r
+ HeaderText = Resources.ID\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "Name",\r
+ HeaderText = Resources.NEV\r
+ }\r
+ }\r
+ );\r
+ }\r
+\r
+ private void SetColumnsForMosObjects() {\r
+ dataGridView1.Columns.AddRange(\r
+ new DataGridViewColumn[] {\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader,\r
+ DataPropertyName = "ID",\r
+ HeaderText = Resources.ID\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "MosID",\r
+ HeaderText = Resources.MOS_ID\r
+ }\r
+ }\r
+ );\r
+ }\r
+\r
+\r
+ private void InitializeControlTexts() {\r
+ buttonCancel.Text = Resources.MEGSE;\r
+ this.Text = Resources.KERESES_EREDMENYE;\r
+ }\r
+\r
+ private void InitializeComponent() {\r
+ this.components = new System.ComponentModel.Container();\r
+ this.dataGridView1 = new System.Windows.Forms.DataGridView();\r
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();\r
+ this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker();\r
+ this.buttonOk = new System.Windows.Forms.Button();\r
+ this.buttonCancel = new System.Windows.Forms.Button();\r
+ this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);\r
+ this.groupBox1 = new System.Windows.Forms.GroupBox();\r
+ this.groupBox2 = new System.Windows.Forms.GroupBox();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();\r
+ this.groupBox1.SuspendLayout();\r
+ this.groupBox2.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // dataGridView1\r
+ // \r
+ this.dataGridView1.AllowUserToAddRows = false;\r
+ this.dataGridView1.AllowUserToDeleteRows = false;\r
+ this.dataGridView1.AllowUserToResizeRows = false;\r
+ this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
+ this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
+ this.dataGridView1.BackgroundColor = System.Drawing.Color.White;\r
+ this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
+ this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
+ this.dataGridView1.Location = new System.Drawing.Point(3, 16);\r
+ this.dataGridView1.MultiSelect = false;\r
+ this.dataGridView1.Name = "dataGridView1";\r
+ this.dataGridView1.RowHeadersVisible = false;\r
+ this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+ this.dataGridView1.Size = new System.Drawing.Size(362, 159);\r
+ this.dataGridView1.TabIndex = 0;\r
+ this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);\r
+ // \r
+ // buttonOk\r
+ // \r
+ this.buttonOk.Dock = System.Windows.Forms.DockStyle.Right;\r
+ this.buttonOk.Location = new System.Drawing.Point(284, 16);\r
+ this.buttonOk.Name = "buttonOk";\r
+ this.buttonOk.Size = new System.Drawing.Size(75, 32);\r
+ this.buttonOk.TabIndex = 2;\r
+ this.buttonOk.Text = "Ok";\r
+ this.buttonOk.UseVisualStyleBackColor = true;\r
+ this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click);\r
+ // \r
+ // buttonCancel\r
+ // \r
+ this.buttonCancel.Dock = System.Windows.Forms.DockStyle.Right;\r
+ this.buttonCancel.Location = new System.Drawing.Point(209, 16);\r
+ this.buttonCancel.Name = "buttonCancel";\r
+ this.buttonCancel.Size = new System.Drawing.Size(75, 32);\r
+ this.buttonCancel.TabIndex = 0;\r
+ this.buttonCancel.Text = "Cancel";\r
+ this.buttonCancel.UseVisualStyleBackColor = true;\r
+ this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);\r
+ // \r
+ // contextMenuStrip1\r
+ // \r
+ this.contextMenuStrip1.Name = "contextMenuStrip1";\r
+ this.contextMenuStrip1.Size = new System.Drawing.Size(61, 4);\r
+ // \r
+ // groupBox1\r
+ // \r
+ this.groupBox1.Controls.Add(this.groupBox2);\r
+ this.groupBox1.Controls.Add(this.dataGridView1);\r
+ this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.groupBox1.Location = new System.Drawing.Point(0, 0);\r
+ this.groupBox1.Name = "groupBox1";\r
+ this.groupBox1.Size = new System.Drawing.Size(368, 245);\r
+ this.groupBox1.TabIndex = 3;\r
+ this.groupBox1.TabStop = false;\r
+ // \r
+ // groupBox2\r
+ // \r
+ this.groupBox2.Controls.Add(this.buttonCancel);\r
+ this.groupBox2.Controls.Add(this.buttonOk);\r
+ this.groupBox2.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.groupBox2.Location = new System.Drawing.Point(3, 175);\r
+ this.groupBox2.Name = "groupBox2";\r
+ this.groupBox2.Size = new System.Drawing.Size(362, 51);\r
+ this.groupBox2.TabIndex = 4;\r
+ this.groupBox2.TabStop = false;\r
+ // \r
+ // SearchMessageBox\r
+ // \r
+ this.ClientSize = new System.Drawing.Size(368, 250);\r
+ this.Controls.Add(this.groupBox1);\r
+ this.Name = "SearchMessageBox";\r
+ this.Text = "SearchResult";\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();\r
+ this.groupBox1.ResumeLayout(false);\r
+ this.groupBox2.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ private void buttonCancel_Click(object sender, System.EventArgs e) {\r
+ Dispose();\r
+ }\r
+\r
+ private void buttonOk_Click(object sender, System.EventArgs e) {\r
+ try {\r
+ Story story = dataGridView1.SelectedRows[0].DataBoundItem as Story;\r
+ MosObject mosObject = dataGridView1.SelectedRows[0].DataBoundItem as MosObject;\r
+ if (story != null)\r
+ metadataSelected?.Invoke(story.ID);\r
+ else if (mosObject != null)\r
+ metadataSelected?.Invoke(mosObject.ID);\r
+ Dispose();\r
+ //string result = dataGridView1.SelectedCells[row].Value.ToString();\r
+ //if (string.IsNullOrEmpty(result))\r
+ // return;\r
+ ////octopusIdSelector.IDChangeEventCalledFromOutside(result);\r
+ //metadataSelected?.Invoke(result);\r
+ }\r
+ catch (System.Exception ex) {\r
+ //log ex.message ?\r
+ }\r
+ finally {\r
+ Dispose();\r
+ }\r
+ }\r
+\r
+ private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {\r
+ Story story = dataGridView1.Rows[e.RowIndex].DataBoundItem as Story;\r
+ MosObject mosObject = dataGridView1.Rows[e.RowIndex].DataBoundItem as MosObject;\r
+ if (story != null)\r
+ metadataSelected?.Invoke(story.ID);\r
+ else if (mosObject != null)\r
+ metadataSelected?.Invoke(mosObject.ID);\r
+ Dispose();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="backgroundWorker2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>181, 17</value>\r
+ </metadata>\r
+ <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>345, 17</value>\r
+ </metadata>\r
+ <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
+ <value>25</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<packages>\r
+ <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net461" />\r
+ <package id="NLog" version="4.4.12" targetFramework="net461" />\r
+ <package id="RestSharp" version="105.2.3" targetFramework="net461" />\r
+</packages>
\ No newline at end of file
--- /dev/null
+using System.Reflection;\r
+using System.Runtime.CompilerServices;\r
+using System.Runtime.InteropServices;\r
+\r
+// General Information about an assembly is controlled through the following\r
+// set of attributes. Change these attribute values to modify the information\r
+// associated with an assembly.\r
+[assembly: AssemblyTitle("PlanAIRClient")]\r
+[assembly: AssemblyDescription("")]\r
+[assembly: AssemblyConfiguration("")]\r
+[assembly: AssemblyCompany("")]\r
+[assembly: AssemblyProduct("PlanAIRClient")]\r
+[assembly: AssemblyCopyright("Copyright © 2017")]\r
+[assembly: AssemblyTrademark("")]\r
+[assembly: AssemblyCulture("")]\r
+\r
+// Setting ComVisible to false makes the types in this assembly not visible\r
+// to COM components. If you need to access a type in this assembly from\r
+// COM, set the ComVisible attribute to true on that type.\r
+[assembly: ComVisible(false)]\r
+\r
+// The following GUID is for the ID of the typelib if this project is exposed to COM\r
+[assembly: Guid("a7a21311-cb0e-465f-8ad6-829faf093f00")]\r
+\r
+// Version information for an assembly consists of the following four values:\r
+//\r
+// Major Version\r
+// Minor Version\r
+// Build Number\r
+// Revision\r
+//\r
+// 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.0.0.0")]\r
+[assembly: AssemblyFileVersion("1.0.0.0")]\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<!--\r
+ This file is automatically generated by Visual Studio .Net. It is \r
+ used to store generic object data source configuration information. \r
+ Renaming the file extension or editing the content of this file may \r
+ cause the file to be unrecognizable by the program.\r
+-->\r
+<GenericObjectDataSource DisplayName="TrafficAPI" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">\r
+ <TypeInfo>TrafficClient.TrafficAPI, TrafficClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>\r
+</GenericObjectDataSource>
\ No newline at end of file
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace TrafficClient.Properties {\r
+ \r
+ \r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")]\r
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r
+ \r
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r
+ \r
+ public static Settings Default {\r
+ get {\r
+ return defaultInstance;\r
+ }\r
+ }\r
+ \r
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]\r
+ [global::System.Configuration.DefaultSettingValueAttribute("Data Source=folkloredb.hu\\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Secur" +\r
+ "ity Info=True;User ID=MAM;Password=Echotv.hu")]\r
+ public string CLArchiveTF_0ConnectionString {\r
+ get {\r
+ return ((string)(this["CLArchiveTF_0ConnectionString"]));\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version='1.0' encoding='utf-8'?>\r
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="PlanAIRClient.Properties" GeneratedClassName="Settings">\r
+ <Profiles />\r
+ <Settings>\r
+ <Setting Name="CLArchiveTF_0ConnectionString" Type="(Connection string)" Scope="Application">\r
+ <DesignTimeValue Profile="(Default)"><?xml version="1.0" encoding="utf-16"?>\r
+<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r
+ <ConnectionString>Data Source=folkloredb.hu\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;User ID=MAM;Password=Echotv.hu</ConnectionString>\r
+ <ProviderName>System.Data.SqlClient</ProviderName>\r
+</SerializableConnectionString></DesignTimeValue>\r
+ <Value Profile="(Default)">Data Source=folkloredb.hu\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;User ID=MAM;Password=Echotv.hu</Value>\r
+ </Setting>\r
+ </Settings>\r
+</SettingsFile>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Data.SqlClient;\r
+\r
+namespace TrafficClient {\r
+ class CliFSPReader {\r
+\r
+ private string ReadString(SqlDataReader reader, ref int f) {\r
+ string result = null;\r
+ if (!reader.IsDBNull(f++))\r
+ result = reader.GetString(f - 1);\r
+ return result;\r
+ }\r
+\r
+ private bool? ReadBool(SqlDataReader reader, ref int f) {\r
+ bool? result = null;\r
+ if (!reader.IsDBNull(f++))\r
+ result = reader.GetBoolean(f - 1);\r
+ return result;\r
+ }\r
+\r
+ private short? ReadShort(SqlDataReader reader, ref int f) {\r
+ short? result = null;\r
+ if (!reader.IsDBNull(f++))\r
+ result = reader.GetInt16(f - 1);\r
+ return result;\r
+ }\r
+\r
+ private int? ReadInt(SqlDataReader reader, ref int f) {\r
+ int? result = null;\r
+ if (!reader.IsDBNull(f++))\r
+ result = reader.GetInt32(f - 1);\r
+ return result;\r
+ }\r
+\r
+ private DateTime? ReadDateTime(SqlDataReader reader, ref int f) {\r
+ DateTime? result = null;\r
+ if (!reader.IsDBNull(f++))\r
+ result = reader.GetDateTime(f - 1);\r
+ return result;\r
+ }\r
+\r
+ public clIFsp_EC_MAMResult ToclIFsp_MAMResult(SqlDataReader reader) {\r
+ clIFsp_EC_MAMResult item = new clIFsp_EC_MAMResult();\r
+ int f = 0;\r
+ //TODO check\r
+ item.v_ProgrammeID = (int)ReadInt(reader, ref f);\r
+ item.v_Live = (bool)ReadBool(reader, ref f);\r
+ item.v_EpisodeID = ReadString(reader, ref f);\r
+ //ő az ItemID\r
+ item.v_VariantID = ReadInt(reader, ref f);\r
+ item.v_MediaID = ReadString(reader, ref f);\r
+ item.v_VariantTypeID = ReadInt(reader, ref f);\r
+ item.v_ProgTitle = ReadString(reader, ref f);\r
+ item.v_EpTitle = ReadString(reader, ref f);\r
+ item.v_Episode = ReadShort(reader, ref f);\r
+ item.v_VariantType = ReadString(reader, ref f);\r
+ item.v_VariantKeywords = ReadString(reader, ref f);\r
+ item.v_VariantLengthTC = ReadString(reader, ref f);\r
+ item.v_VariantLengthFrame = ReadInt(reader, ref f);\r
+ item.v_VariantNrSegments = ReadInt(reader, ref f);\r
+ item.v_FirstBroadcastDate = ReadDateTime(reader, ref f);\r
+ item.v_NextBroadcastDate = ReadDateTime(reader, ref f);\r
+ item.v_OkForAir = ReadBool(reader, ref f);\r
+ item.v_ForTransm = ReadBool(reader, ref f);\r
+ return item;\r
+ }\r
+\r
+ public clIFsp_EC_SegmentResult ToclIFsp_SegmentResult(SqlDataReader reader) {\r
+ clIFsp_EC_SegmentResult item = new clIFsp_EC_SegmentResult();\r
+ int f = 0;\r
+ item.v_SegID = (int)ReadInt(reader, ref f);\r
+ item.v_VariantID = ReadInt(reader, ref f);\r
+ item.v_SegTitle = ReadString(reader, ref f);\r
+ item.v_SegKeyWords = ReadString(reader, ref f);\r
+ item.v_SegNumber = ReadInt(reader, ref f);\r
+ item.v_TcIn = ReadInt(reader, ref f);\r
+ item.v_TcOut = ReadInt(reader, ref f);\r
+ item.v_Duration = ReadInt(reader, ref f);\r
+ item.v_TcInTC = ReadString(reader, ref f);\r
+ item.v_TcOutTC = ReadString(reader, ref f);\r
+ item.v_DurationTC = ReadString(reader, ref f);\r
+ item.v_Dropable = ReadBool(reader, ref f);\r
+ return item;\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace TrafficClient {\r
+ using System;\r
+ \r
+ \r
+ /// <summary>\r
+ /// A strongly-typed resource class, for looking up localized strings, etc.\r
+ /// </summary>\r
+ // This class was auto-generated by the StronglyTypedResourceBuilder\r
+ // class via a tool like ResGen or Visual Studio.\r
+ // To add or remove a member, edit your .ResX file then rerun ResGen\r
+ // with the /str option, or rebuild your VS project.\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]\r
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
+ internal class Resources {\r
+ \r
+ private static global::System.Resources.ResourceManager resourceMan;\r
+ \r
+ private static global::System.Globalization.CultureInfo resourceCulture;\r
+ \r
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]\r
+ internal Resources() {\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Returns the cached ResourceManager instance used by this class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Resources.ResourceManager ResourceManager {\r
+ get {\r
+ if (object.ReferenceEquals(resourceMan, null)) {\r
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TrafficClient.Resources", typeof(Resources).Assembly);\r
+ resourceMan = temp;\r
+ }\r
+ return resourceMan;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Overrides the current thread's CurrentUICulture property for all\r
+ /// resource lookups using this strongly typed resource class.\r
+ /// </summary>\r
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r
+ internal static global::System.Globalization.CultureInfo Culture {\r
+ get {\r
+ return resourceCulture;\r
+ }\r
+ set {\r
+ resourceCulture = value;\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Adás.\r
+ /// </summary>\r
+ internal static string ADAS {\r
+ get {\r
+ return ResourceManager.GetString("ADAS", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Cím.\r
+ /// </summary>\r
+ internal static string CIM {\r
+ get {\r
+ return ResourceManager.GetString("CIM", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Epizód.\r
+ /// </summary>\r
+ internal static string EPIZOD {\r
+ get {\r
+ return ResourceManager.GetString("EPIZOD", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Epizod cím.\r
+ /// </summary>\r
+ internal static string EPIZOD_CIM {\r
+ get {\r
+ return ResourceManager.GetString("EPIZOD_CIM", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Hiányzó kópia.\r
+ /// </summary>\r
+ internal static string HIANYZO_KOPIA {\r
+ get {\r
+ return ResourceManager.GetString("HIANYZO_KOPIA", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Keresés.\r
+ /// </summary>\r
+ internal static string KERESES {\r
+ get {\r
+ return ResourceManager.GetString("KERESES", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Keresés eredménye.\r
+ /// </summary>\r
+ internal static string KERESES_EREDMENYE {\r
+ get {\r
+ return ResourceManager.GetString("KERESES_EREDMENYE", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Mégse.\r
+ /// </summary>\r
+ internal static string MEGSE {\r
+ get {\r
+ return ResourceManager.GetString("MEGSE", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Promó.\r
+ /// </summary>\r
+ internal static string PROMO {\r
+ get {\r
+ return ResourceManager.GetString("PROMO", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Reklám.\r
+ /// </summary>\r
+ internal static string REKLAM {\r
+ get {\r
+ return ResourceManager.GetString("REKLAM", resourceCulture);\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized string similar to Traffic ID.\r
+ /// </summary>\r
+ internal static string TRAFFIC_ID {\r
+ get {\r
+ return ResourceManager.GetString("TRAFFIC_ID", resourceCulture);\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <data name="ADAS" xml:space="preserve">\r
+ <value>Adás</value>\r
+ </data>\r
+ <data name="CIM" xml:space="preserve">\r
+ <value>Cím</value>\r
+ </data>\r
+ <data name="EPIZOD" xml:space="preserve">\r
+ <value>Epizód</value>\r
+ </data>\r
+ <data name="EPIZOD_CIM" xml:space="preserve">\r
+ <value>Epizod cím</value>\r
+ </data>\r
+ <data name="HIANYZO_KOPIA" xml:space="preserve">\r
+ <value>Hiányzó kópia</value>\r
+ </data>\r
+ <data name="KERESES" xml:space="preserve">\r
+ <value>Keresés</value>\r
+ </data>\r
+ <data name="KERESES_EREDMENYE" xml:space="preserve">\r
+ <value>Keresés eredménye</value>\r
+ </data>\r
+ <data name="MEGSE" xml:space="preserve">\r
+ <value>Mégse</value>\r
+ </data>\r
+ <data name="PROMO" xml:space="preserve">\r
+ <value>Promó</value>\r
+ </data>\r
+ <data name="REKLAM" xml:space="preserve">\r
+ <value>Reklám</value>\r
+ </data>\r
+ <data name="TRAFFIC_ID" xml:space="preserve">\r
+ <value>Traffic ID</value>\r
+ </data>\r
+</root>
\ No newline at end of file
--- /dev/null
+namespace TrafficClient {\r
+ partial class SearchResult {\r
+ /// <summary>\r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary>\r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing) {\r
+ if (disposing && (components != null)) {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Windows Form Designer generated code\r
+\r
+ /// <summary>\r
+ /// Required method for Designer support - do not modify\r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent() {\r
+ this.buttonOk = new System.Windows.Forms.Button();\r
+ this.dataGridView1 = new System.Windows.Forms.DataGridView();\r
+ this.buttonCancel = new System.Windows.Forms.Button();\r
+ this.groupBox1 = new System.Windows.Forms.GroupBox();\r
+ this.groupBox2 = new System.Windows.Forms.GroupBox();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();\r
+ this.groupBox1.SuspendLayout();\r
+ this.groupBox2.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // buttonOk\r
+ // \r
+ this.buttonOk.Dock = System.Windows.Forms.DockStyle.Right;\r
+ this.buttonOk.Location = new System.Drawing.Point(265, 16);\r
+ this.buttonOk.Name = "buttonOk";\r
+ this.buttonOk.Size = new System.Drawing.Size(75, 30);\r
+ this.buttonOk.TabIndex = 7;\r
+ this.buttonOk.Text = "Ok";\r
+ this.buttonOk.UseVisualStyleBackColor = true;\r
+ this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click);\r
+ // \r
+ // dataGridView1\r
+ // \r
+ this.dataGridView1.AllowUserToAddRows = false;\r
+ this.dataGridView1.AllowUserToDeleteRows = false;\r
+ this.dataGridView1.AllowUserToResizeRows = false;\r
+ this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
+ this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
+ this.dataGridView1.BackgroundColor = System.Drawing.Color.White;\r
+ this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
+ this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
+ this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
+ this.dataGridView1.Location = new System.Drawing.Point(3, 16);\r
+ this.dataGridView1.Margin = new System.Windows.Forms.Padding(6);\r
+ this.dataGridView1.MultiSelect = false;\r
+ this.dataGridView1.Name = "dataGridView1";\r
+ this.dataGridView1.RowHeadersVisible = false;\r
+ this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+ this.dataGridView1.Size = new System.Drawing.Size(343, 159);\r
+ this.dataGridView1.TabIndex = 5;\r
+ this.dataGridView1.CellContentDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentDoubleClick);\r
+ // \r
+ // buttonCancel\r
+ // \r
+ this.buttonCancel.Dock = System.Windows.Forms.DockStyle.Right;\r
+ this.buttonCancel.Location = new System.Drawing.Point(190, 16);\r
+ this.buttonCancel.Name = "buttonCancel";\r
+ this.buttonCancel.Size = new System.Drawing.Size(75, 30);\r
+ this.buttonCancel.TabIndex = 6;\r
+ this.buttonCancel.Text = "Cancel";\r
+ this.buttonCancel.UseVisualStyleBackColor = true;\r
+ this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);\r
+ // \r
+ // groupBox1\r
+ // \r
+ this.groupBox1.Controls.Add(this.groupBox2);\r
+ this.groupBox1.Controls.Add(this.dataGridView1);\r
+ this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.groupBox1.Location = new System.Drawing.Point(0, 0);\r
+ this.groupBox1.Name = "groupBox1";\r
+ this.groupBox1.Size = new System.Drawing.Size(349, 224);\r
+ this.groupBox1.TabIndex = 8;\r
+ this.groupBox1.TabStop = false;\r
+ // \r
+ // groupBox2\r
+ // \r
+ this.groupBox2.Controls.Add(this.buttonCancel);\r
+ this.groupBox2.Controls.Add(this.buttonOk);\r
+ this.groupBox2.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.groupBox2.Location = new System.Drawing.Point(3, 175);\r
+ this.groupBox2.Name = "groupBox2";\r
+ this.groupBox2.Size = new System.Drawing.Size(343, 49);\r
+ this.groupBox2.TabIndex = 8;\r
+ this.groupBox2.TabStop = false;\r
+ // \r
+ // SearchResult\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.ClientSize = new System.Drawing.Size(349, 224);\r
+ this.Controls.Add(this.groupBox1);\r
+ this.Name = "SearchResult";\r
+ this.Text = "SearchResult";\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();\r
+ this.groupBox1.ResumeLayout(false);\r
+ this.groupBox2.ResumeLayout(false);\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+\r
+ private System.Windows.Forms.Button buttonOk;\r
+ private System.Windows.Forms.DataGridView dataGridView1;\r
+ private System.Windows.Forms.Button buttonCancel;\r
+ private System.Windows.Forms.GroupBox groupBox1;\r
+ private System.Windows.Forms.GroupBox groupBox2;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.ComponentModel;\r
+using System.Data;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using System.Windows.Forms;\r
+\r
+namespace TrafficClient {\r
+\r
+ public delegate void TraficMetadataSelected(string ID, int variantID);\r
+\r
+ public partial class SearchResult : Form {\r
+\r
+ private List<MamResultWrapper> elements = new List<MamResultWrapper>();\r
+ public TraficMetadataSelected metadataSelected { get; set; }\r
+\r
+ public SearchResult(List<MamResultWrapper> elements, TraficMetadataSelected metadataSelected) : this() {\r
+ this.elements = elements;\r
+ this.metadataSelected = metadataSelected;\r
+ this.Text = Resources.KERESES_EREDMENYE;\r
+ buttonCancel.Text = Resources.MEGSE;\r
+ FillDataGridView();\r
+ }\r
+\r
+ public SearchResult() {\r
+ InitializeComponent();\r
+ this.Text = Resources.KERESES_EREDMENYE;\r
+ SetColumns();\r
+ }\r
+\r
+ private void SetColumns() {\r
+ dataGridView1.Columns.AddRange(\r
+ new DataGridViewColumn[] {\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader,\r
+ DataPropertyName = "MediaID",\r
+ HeaderText = Resources.TRAFFIC_ID\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "Title",\r
+ HeaderText = Resources.CIM\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader,\r
+ DataPropertyName = "EpisodeTitle",\r
+ HeaderText = Resources.EPIZOD_CIM\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "EpisodeNumber",\r
+ HeaderText = Resources.EPIZOD\r
+ }\r
+ }\r
+ );\r
+ }\r
+\r
+ private void FillDataGridView() {\r
+ List<MamDisplay> displayedElements = new List<MamDisplay>();\r
+ foreach (MamResultWrapper actual in elements) {\r
+ MamDisplay displayed = new MamDisplay() {\r
+ EpisodeNumber = actual.EpisodeNumber,\r
+ EpisodeTitle = actual.EpisodeTitle,\r
+ MediaID = actual.MediaID,\r
+ Title = actual.Title,\r
+ VariantID = actual.VariantID\r
+ };\r
+ displayedElements.Add(displayed);\r
+ }\r
+ dataGridView1.DataSource = displayedElements;\r
+ }\r
+\r
+ private void buttonCancel_Click(object sender, EventArgs e) {\r
+ Dispose();\r
+ }\r
+\r
+ private void buttonOk_Click(object sender, EventArgs e) {\r
+ MetadataSelectedByUser();\r
+ }\r
+\r
+ private void MetadataSelectedByUser() {\r
+ string mediaID = dataGridView1.SelectedCells[0].Value.ToString();\r
+ int variantID = Int32.Parse(dataGridView1.SelectedCells[4].Value.ToString());\r
+ metadataSelected?.Invoke(mediaID, variantID);\r
+ Dispose();\r
+ }\r
+\r
+ private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) {\r
+ MetadataSelectedByUser();\r
+ }\r
+ }\r
+\r
+ class MamDisplay {\r
+ public string MediaID { get; set; }\r
+ public string Title { get; set; }\r
+ public string EpisodeTitle { get; set; }\r
+ public string EpisodeNumber { get; set; }\r
+ public int VariantID { get; set; }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+</root>
\ No newline at end of file
--- /dev/null
+namespace TrafficClient {\r
+ public class Segment {\r
+ public long TCIn { get; set; }\r
+ public long TCOut { get; set; }\r
+ public bool Optional { get; set; }\r
+ public string Comment { get; set; }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Data;\r
+using System.Data.SqlClient;\r
+using System.Diagnostics;\r
+using NLog;\r
+namespace TrafficClient {\r
+ public class TrafficAPI {\r
+ private TrafficContext context = new TrafficContext();\r
+ private string connectionString;\r
+ private CliFSPReader cliFSPReader;\r
+ private SqlConnection connection;\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
+\r
+ public TrafficAPI(string connString, string user, string password, int timeout) {\r
+ connectionString = String.Format("{0};User ID={1};Password={2};Connection Timeout={3}", connString, user, password, timeout);\r
+ connection = new SqlConnection(connectionString);\r
+ cliFSPReader = new CliFSPReader();\r
+ }\r
+\r
+ //public List<MamResultWrapper> DateSearch(DateTime from, DateTime to)\r
+ //{\r
+ // List<clIFsp_EC_MAMResult> sqlResult = null;\r
+ // List<MamResultWrapper> result = null;\r
+ // SqlConnection connection = new SqlConnection(connectionString);\r
+\r
+ // try\r
+ // {\r
+ // //ez kell?\r
+ // if (connection.State != ConnectionState.Open)\r
+ // {\r
+ // connection.Close();\r
+ // connection.Open();\r
+ // }\r
+\r
+ // using (SqlCommand cmd = new SqlCommand("dbo.clIFsp_EC_MAM", connection))\r
+ // {\r
+ // cmd.CommandType = CommandType.StoredProcedure;\r
+ // cmd.Parameters.AddWithValue("@Operation", 1001);\r
+ // cmd.Parameters.AddWithValue("@@@Options", 0);\r
+ // cmd.Parameters.AddWithValue("@@ItemID", DBNull.Value);\r
+ // cmd.Parameters.AddWithValue("@@DateParam1", from.Date);\r
+ // cmd.Parameters.AddWithValue("@@DateParam2", to.Date);\r
+ // using (SqlDataReader reader = cmd.ExecuteReader())\r
+ // {\r
+ // while (reader.Read())\r
+ // {\r
+ // if (sqlResult == null)\r
+ // sqlResult = new List<clIFsp_EC_MAMResult>();\r
+ // clIFsp_EC_MAMResult item = ToclIFsp_MAMResult(reader);\r
+ // sqlResult.Add(item);\r
+ // }\r
+ // }\r
+ // }\r
+ // result = resultProcess(sqlResult);\r
+ // }\r
+ // catch (Exception e)\r
+ // {\r
+ // Debug.WriteLine(e.Message);\r
+ // }\r
+ // finally\r
+ // {\r
+ // connection.Close();\r
+ // }\r
+ // return result;\r
+ //}\r
+\r
+ public List<MamResultWrapper> Search(string strParam, DateTime? from, DateTime? to, bool missingCopia) {\r
+ List<clIFsp_EC_MAMResult> sqlResult = null;\r
+ List<MamResultWrapper> result = null;\r
+ try {\r
+ TryConnect();\r
+ using (SqlCommand cmd = new SqlCommand("dbo.clIFsp_EC_MAM", connection)) {\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ cmd.Parameters.AddWithValue("@Operation", 1001);\r
+ cmd.Parameters.AddWithValue("@@@Options", 40);\r
+ cmd.Parameters.AddWithValue("@@ItemID", DBNull.Value);\r
+ if (!missingCopia) {\r
+ cmd.Parameters.AddWithValue("@@StrParam1", strParam);\r
+ cmd.Parameters.AddWithValue("@@DateParam1", from.Value.Date);\r
+ cmd.Parameters.AddWithValue("@@DateParam2", to.Value.Date);\r
+ } else {\r
+ if (!String.IsNullOrEmpty(strParam))\r
+ cmd.Parameters.AddWithValue("@@StrParam1", strParam);\r
+ if (from.HasValue) {\r
+ cmd.Parameters.AddWithValue("@@DateParam1", from.Value.Date);\r
+ cmd.Parameters.AddWithValue("@@DateParam2", to.Value.Date);\r
+ }\r
+ }\r
+ sqlResult = ExecuteAndRead(cmd);\r
+ result = ProcessMamResult(sqlResult);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e.Message);\r
+ throw e;\r
+ }\r
+ finally {\r
+ connection.Close();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private void TryConnect() {\r
+ if (connection.State != ConnectionState.Open) {\r
+ connection.Close();\r
+ connection.Open();\r
+ }\r
+ }\r
+\r
+ private List<MamResultWrapper> ProcessMamResult(List<clIFsp_EC_MAMResult> sqlResult) {\r
+ if (sqlResult == null)\r
+ return null;\r
+ List<MamResultWrapper> result = new List<MamResultWrapper>();\r
+ foreach (clIFsp_EC_MAMResult actual in sqlResult) {\r
+ MamResultWrapper actualObject = new MamResultWrapper() {\r
+ MediaID = actual.v_MediaID,\r
+ EpisodeTitle = actual.v_EpTitle,\r
+ Title = actual.v_ProgTitle,\r
+ EpisodeNumber = actual.v_EpisodeID,\r
+ VariantID = actual.v_VariantID.HasValue ? actual.v_VariantID.Value : -1\r
+ };\r
+ result.Add(actualObject);\r
+ }\r
+ return result;\r
+ }\r
+\r
+\r
+ public List<Segment> GetSegmentReady(int itemID) {\r
+ List<Segment> result = null;\r
+ try {\r
+ TryConnect();\r
+ using (SqlCommand cmd = new SqlCommand("dbo.clIFsp_EC_MAM", connection)) {\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ cmd.Parameters.AddWithValue("@Operation", 1010);\r
+ cmd.Parameters.AddWithValue("@@@Options", DBNull.Value);\r
+ cmd.Parameters.AddWithValue("@@ItemID", itemID);\r
+ using (SqlDataReader reader = cmd.ExecuteReader()) {\r
+ List<clIFsp_EC_SegmentResult> list = new List<clIFsp_EC_SegmentResult>();\r
+ while (reader.Read()) {\r
+ clIFsp_EC_SegmentResult item = cliFSPReader.ToclIFsp_SegmentResult(reader);\r
+ list.Add(item);\r
+ }\r
+ result = ProcessSegmentResult(list);\r
+ }\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e.Message);\r
+ throw e;\r
+ }\r
+ finally {\r
+ connection.Close();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private List<Segment> ProcessSegmentResult(List<clIFsp_EC_SegmentResult> sqlResult) {\r
+ if (sqlResult == null)\r
+ return null;\r
+ List<Segment> result = new List<Segment>();\r
+ foreach (clIFsp_EC_SegmentResult actual in sqlResult) {\r
+ Segment actualObject = new Segment() {\r
+ TCIn = actual.v_TcIn.HasValue ? actual.v_TcIn.Value : -1,\r
+ TCOut = actual.v_TcOut.HasValue ? actual.v_TcOut.Value : -1,\r
+ Comment = actual.v_SegTitle,\r
+ Optional = actual.v_Dropable.HasValue ? actual.v_Dropable.Value : false\r
+ };\r
+ result.Add(actualObject);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public void DeleteSegments(int itemID) {\r
+ try {\r
+ TryConnect();\r
+ using (SqlCommand cmd = new SqlCommand("dbo.clIFsp_EC_MAM", connection)) {\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ cmd.Parameters.AddWithValue("@Operation", 1110);\r
+ cmd.Parameters.AddWithValue("@@ItemID", itemID);\r
+ cmd.Parameters.AddWithValue("@@@Options", DBNull.Value);\r
+ cmd.ExecuteNonQuery();\r
+ logger.Info(String.Format("Segments deleted from itemID {0}", itemID));\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e.Message);\r
+ throw e;\r
+ }\r
+ finally {\r
+ connection.Close();\r
+ }\r
+ }\r
+\r
+ //todo visszatérés, hogy sikeres volt-e a törlés?\r
+ public void DeleteSegment(int itemID, int segmentID) {\r
+ try {\r
+ TryConnect();\r
+ using (SqlCommand cmd = new SqlCommand("dbo.clIFsp_EC_MAM", connection)) {\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ cmd.Parameters.AddWithValue("@Operation", 1111);\r
+ cmd.Parameters.AddWithValue("@@ItemID", itemID);\r
+ cmd.Parameters.AddWithValue("@@IntParam1", segmentID);\r
+ cmd.Parameters.AddWithValue("@@@Options", DBNull.Value);\r
+ cmd.ExecuteNonQuery();\r
+ logger.Info(String.Format("{0} segment deleted from itemID: {1}", segmentID, itemID));\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e.Message);\r
+ throw e;\r
+ }\r
+ finally {\r
+ connection.Close();\r
+ }\r
+ }\r
+\r
+ public Segment AddSegmentToCopia(int itemID, string strParam, long tcIn, long tcOut, bool options) {\r
+ Segment result = null;\r
+ //string strparam = String.IsNullOrEmpty(strParam) ? string.Empty : strParam;\r
+ object strparam = strParam;\r
+ if (String.IsNullOrEmpty(strParam))\r
+ strparam = DBNull.Value;\r
+ try {\r
+ TryConnect();\r
+ using (SqlCommand cmd = new SqlCommand("dbo.clIFsp_EC_MAM", connection)) {\r
+ int optionsParam = options ? 1 : 0;\r
+ cmd.CommandType = CommandType.StoredProcedure;\r
+ cmd.Parameters.AddWithValue("@Operation", 1115);\r
+ cmd.Parameters.AddWithValue("@@ItemID", itemID);\r
+ cmd.Parameters.AddWithValue("@@IntParam1", tcIn);\r
+ cmd.Parameters.AddWithValue("@@IntParam2", tcOut);\r
+ cmd.Parameters.AddWithValue("@@StrParam1", strparam);\r
+ cmd.Parameters.AddWithValue("@@StrParam2", DBNull.Value);\r
+ cmd.Parameters.AddWithValue("@@@Options", optionsParam);\r
+ using (SqlDataReader reader = cmd.ExecuteReader()) {\r
+ if (reader.Read()) {\r
+ clIFsp_EC_SegmentResult actual = cliFSPReader.ToclIFsp_SegmentResult(reader);\r
+ result = new Segment() {\r
+ TCIn = actual.v_TcIn.HasValue ? actual.v_TcIn.Value : -1,\r
+ TCOut = actual.v_TcOut.HasValue ? actual.v_TcOut.Value : -1,\r
+ Comment = actual.v_SegTitle,\r
+ Optional = actual.v_Dropable.HasValue ? actual.v_Dropable.Value : false\r
+ };\r
+ }\r
+ }\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e.Message);\r
+ throw e;\r
+ }\r
+ finally {\r
+ connection.Close();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private List<clIFsp_EC_MAMResult> ExecuteAndRead(SqlCommand cmd) {\r
+ List<clIFsp_EC_MAMResult> result = null;\r
+ using (SqlDataReader reader = cmd.ExecuteReader()) {\r
+ while (reader.Read()) {\r
+ if (result == null)\r
+ result = new List<clIFsp_EC_MAMResult>();\r
+ clIFsp_EC_MAMResult item = cliFSPReader.ToclIFsp_MAMResult(reader);\r
+ result.Add(item);\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+namespace TrafficClient {\r
+ partial class TrafficContext {\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?><Database Name="CLArchiveTF_0" Class="TrafficContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">\r
+ <Connection Mode="AppSettings" ConnectionString="Data Source=folkloredb.hu\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;User ID=MAM" SettingsObjectName="TrafficClient.Properties.Settings" SettingsPropertyName="CLArchiveTF_0ConnectionString" Provider="System.Data.SqlClient" />\r
+ <Function Name="dbo.clIFsp_EC_MAM" Method="clIFsp_EC_MAM">\r
+ <Parameter Name="Operation" Parameter="operation" Type="System.Int32" DbType="Int" />\r
+ <Parameter Name="@@Options" Parameter="__Options" Type="System.Int32" DbType="Int" />\r
+ <Parameter Name="@ItemID" Parameter="_ItemID" Type="System.Int32" DbType="Int" />\r
+ <Parameter Name="@IntParam1" Parameter="_IntParam1" Type="System.Int32" DbType="Int" />\r
+ <Parameter Name="@IntParam2" Parameter="_IntParam2" Type="System.Int32" DbType="Int" />\r
+ <Parameter Name="@IntParam3" Parameter="_IntParam3" Type="System.Int32" DbType="Int" />\r
+ <Parameter Name="@StrParam1" Parameter="_StrParam1" Type="System.String" DbType="VarChar(200)" />\r
+ <Parameter Name="@StrParam2" Parameter="_StrParam2" Type="System.String" DbType="VarChar(MAX)" />\r
+ <Parameter Name="@DateParam1" Parameter="_DateParam1" Type="System.DateTime" DbType="DateTime" />\r
+ <Parameter Name="@DateParam2" Parameter="_DateParam2" Type="System.DateTime" DbType="DateTime" />\r
+ <ElementType Name="clIFsp_EC_MAMResult">\r
+ <Column Name="v_ProgrammeID" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />\r
+ <Column Name="v_Live" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />\r
+ <Column Name="v_EpisodeID" Type="System.String" DbType="VarChar(6) NOT NULL" CanBeNull="false" />\r
+ <Column Name="v_VariantID" Type="System.Int32" DbType="Int" CanBeNull="true" />\r
+ <Column Name="v_VariantTypeID" Type="System.Int32" DbType="Int" CanBeNull="true" />\r
+ <Column Name="v_ProgTitle" Type="System.String" DbType="NVarChar(60)" CanBeNull="true" />\r
+ <Column Name="v_EpTitle" Type="System.String" DbType="NVarChar(60)" CanBeNull="true" />\r
+ <Column Name="v_Episode" Type="System.Int16" DbType="SmallInt" CanBeNull="true" />\r
+ <Column Name="v_VariantType" Type="System.String" DbType="VarChar(40)" CanBeNull="true" />\r
+ <Column Name="v_VariantKeywords" Type="System.String" DbType="VarChar(25)" CanBeNull="true" />\r
+ <Column Name="v_VariantLengthTC" Type="System.String" DbType="VarChar(150)" CanBeNull="true" />\r
+ <Column Name="v_VariantLengthFrame" Type="System.Int32" DbType="Int" CanBeNull="true" />\r
+ <Column Name="v_VariantNrSegments" Type="System.Int32" DbType="Int" CanBeNull="true" />\r
+ <Column Name="v_FirstBroadcastDate" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />\r
+ <Column Name="v_NextBroadcastDate" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />\r
+ <Column Name="v_OkForAir" Type="System.Boolean" DbType="Bit" CanBeNull="true" />\r
+ <Column Name="v_ForTransm" Type="System.Boolean" DbType="Bit" CanBeNull="true" />\r
+ </ElementType>\r
+ </Function>\r
+</Database>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 11, 8.5" name="DataClasses1">\r
+ <DataContextMoniker Name="/TrafficContext" />\r
+</ordesignerObjectsDiagram>
\ No newline at end of file
--- /dev/null
+#pragma warning disable 1591\r
+//------------------------------------------------------------------------------\r
+// <auto-generated>\r
+// This code was generated by a tool.\r
+// Runtime Version:4.0.30319.42000\r
+//\r
+// Changes to this file may cause incorrect behavior and will be lost if\r
+// the code is regenerated.\r
+// </auto-generated>\r
+//------------------------------------------------------------------------------\r
+\r
+namespace TrafficClient\r
+{\r
+ using System.Data.Linq;\r
+ using System.Data.Linq.Mapping;\r
+ using System.Data;\r
+ using System.Collections.Generic;\r
+ using System.Reflection;\r
+ using System.Linq;\r
+ using System.Linq.Expressions;\r
+ using System.ComponentModel;\r
+ using System;\r
+ \r
+ \r
+ [global::System.Data.Linq.Mapping.DatabaseAttribute(Name="CLArchiveTF_0")]\r
+ public partial class TrafficContext : System.Data.Linq.DataContext\r
+ {\r
+ \r
+ private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();\r
+ \r
+ #region Extensibility Method Definitions\r
+ partial void OnCreated();\r
+ #endregion\r
+ \r
+ public TrafficContext() : \r
+ base(global::TrafficClient.Properties.Settings.Default.CLArchiveTF_0ConnectionString, mappingSource)\r
+ {\r
+ OnCreated();\r
+ }\r
+ \r
+ public TrafficContext(string connection) : \r
+ base(connection, mappingSource)\r
+ {\r
+ OnCreated();\r
+ }\r
+ \r
+ public TrafficContext(System.Data.IDbConnection connection) : \r
+ base(connection, mappingSource)\r
+ {\r
+ OnCreated();\r
+ }\r
+ \r
+ public TrafficContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : \r
+ base(connection, mappingSource)\r
+ {\r
+ OnCreated();\r
+ }\r
+ \r
+ public TrafficContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : \r
+ base(connection, mappingSource)\r
+ {\r
+ OnCreated();\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.clIFsp_EC_MAM")]\r
+ public ISingleResult<clIFsp_EC_MAMResult> clIFsp_EC_MAM([global::System.Data.Linq.Mapping.ParameterAttribute(Name="Operation", DbType="Int")] System.Nullable<int> operation, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@@Options", DbType="Int")] System.Nullable<int> @__Options, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@ItemID", DbType="Int")] System.Nullable<int> _ItemID, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@IntParam1", DbType="Int")] System.Nullable<int> _IntParam1, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@IntParam2", DbType="Int")] System.Nullable<int> _IntParam2, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@IntParam3", DbType="Int")] System.Nullable<int> _IntParam3, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@StrParam1", DbType="VarChar(200)")] string _StrParam1, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@StrParam2", DbType="VarChar(MAX)")] string _StrParam2, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@DateParam1", DbType="DateTime")] System.Nullable<System.DateTime> _DateParam1, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="@DateParam2", DbType="DateTime")] System.Nullable<System.DateTime> _DateParam2)\r
+ {\r
+ IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), operation, @__Options, _ItemID, _IntParam1, _IntParam2, _IntParam3, _StrParam1, _StrParam2, _DateParam1, _DateParam2);\r
+ return ((ISingleResult<clIFsp_EC_MAMResult>)(result.ReturnValue));\r
+ }\r
+ }\r
+ \r
+ public partial class clIFsp_EC_MAMResult\r
+ {\r
+ \r
+ private int _v_ProgrammeID;\r
+ \r
+ private bool _v_Live;\r
+ \r
+ private string _v_EpisodeID;\r
+ \r
+ private System.Nullable<int> _v_VariantID;\r
+ \r
+ private System.Nullable<int> _v_VariantTypeID;\r
+ \r
+ private string _v_ProgTitle;\r
+ \r
+ private string _v_EpTitle;\r
+ \r
+ private System.Nullable<short> _v_Episode;\r
+ \r
+ private string _v_VariantType;\r
+ \r
+ private string _v_VariantKeywords;\r
+ \r
+ private string _v_VariantLengthTC;\r
+ \r
+ private System.Nullable<int> _v_VariantLengthFrame;\r
+ \r
+ private System.Nullable<int> _v_VariantNrSegments;\r
+ \r
+ private System.Nullable<System.DateTime> _v_FirstBroadcastDate;\r
+ \r
+ private System.Nullable<System.DateTime> _v_NextBroadcastDate;\r
+ \r
+ private System.Nullable<bool> _v_OkForAir;\r
+ \r
+ private System.Nullable<bool> _v_ForTransm;\r
+\r
+ private string _v_MediaID;\r
+ \r
+ public clIFsp_EC_MAMResult()\r
+ {\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_ProgrammeID", DbType="Int NOT NULL")]\r
+ public int v_ProgrammeID\r
+ {\r
+ get\r
+ {\r
+ return this._v_ProgrammeID;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_ProgrammeID != value))\r
+ {\r
+ this._v_ProgrammeID = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_Live", DbType="Bit NOT NULL")]\r
+ public bool v_Live\r
+ {\r
+ get\r
+ {\r
+ return this._v_Live;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_Live != value))\r
+ {\r
+ this._v_Live = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_EpisodeID", DbType="VarChar(6) NOT NULL", CanBeNull=false)]\r
+ public string v_EpisodeID\r
+ {\r
+ get\r
+ {\r
+ return this._v_EpisodeID;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_EpisodeID != value))\r
+ {\r
+ this._v_EpisodeID = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantID", DbType="Int")]\r
+ public System.Nullable<int> v_VariantID\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantID;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantID != value))\r
+ {\r
+ this._v_VariantID = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantTypeID", DbType="Int")]\r
+ public System.Nullable<int> v_VariantTypeID\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantTypeID;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantTypeID != value))\r
+ {\r
+ this._v_VariantTypeID = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_ProgTitle", DbType="NVarChar(60)")]\r
+ public string v_ProgTitle\r
+ {\r
+ get\r
+ {\r
+ return this._v_ProgTitle;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_ProgTitle != value))\r
+ {\r
+ this._v_ProgTitle = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_EpTitle", DbType="NVarChar(60)")]\r
+ public string v_EpTitle\r
+ {\r
+ get\r
+ {\r
+ return this._v_EpTitle;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_EpTitle != value))\r
+ {\r
+ this._v_EpTitle = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_Episode", DbType="SmallInt")]\r
+ public System.Nullable<short> v_Episode\r
+ {\r
+ get\r
+ {\r
+ return this._v_Episode;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_Episode != value))\r
+ {\r
+ this._v_Episode = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantType", DbType="VarChar(40)")]\r
+ public string v_VariantType\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantType;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantType != value))\r
+ {\r
+ this._v_VariantType = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantKeywords", DbType="VarChar(25)")]\r
+ public string v_VariantKeywords\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantKeywords;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantKeywords != value))\r
+ {\r
+ this._v_VariantKeywords = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantLengthTC", DbType="VarChar(150)")]\r
+ public string v_VariantLengthTC\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantLengthTC;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantLengthTC != value))\r
+ {\r
+ this._v_VariantLengthTC = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantLengthFrame", DbType="Int")]\r
+ public System.Nullable<int> v_VariantLengthFrame\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantLengthFrame;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantLengthFrame != value))\r
+ {\r
+ this._v_VariantLengthFrame = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_VariantNrSegments", DbType="Int")]\r
+ public System.Nullable<int> v_VariantNrSegments\r
+ {\r
+ get\r
+ {\r
+ return this._v_VariantNrSegments;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_VariantNrSegments != value))\r
+ {\r
+ this._v_VariantNrSegments = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_FirstBroadcastDate", DbType="DateTime")]\r
+ public System.Nullable<System.DateTime> v_FirstBroadcastDate\r
+ {\r
+ get\r
+ {\r
+ return this._v_FirstBroadcastDate;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_FirstBroadcastDate != value))\r
+ {\r
+ this._v_FirstBroadcastDate = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_NextBroadcastDate", DbType="DateTime")]\r
+ public System.Nullable<System.DateTime> v_NextBroadcastDate\r
+ {\r
+ get\r
+ {\r
+ return this._v_NextBroadcastDate;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_NextBroadcastDate != value))\r
+ {\r
+ this._v_NextBroadcastDate = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_OkForAir", DbType="Bit")]\r
+ public System.Nullable<bool> v_OkForAir\r
+ {\r
+ get\r
+ {\r
+ return this._v_OkForAir;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_OkForAir != value))\r
+ {\r
+ this._v_OkForAir = value;\r
+ }\r
+ }\r
+ }\r
+ \r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_v_ForTransm", DbType="Bit")]\r
+ public System.Nullable<bool> v_ForTransm\r
+ {\r
+ get\r
+ {\r
+ return this._v_ForTransm;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_ForTransm != value))\r
+ {\r
+ this._v_ForTransm = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_v_MediaID", DbType = "VarChar(6) NOT NULL", CanBeNull = false)]\r
+ public string v_MediaID\r
+ {\r
+ get\r
+ {\r
+ return this._v_MediaID;\r
+ }\r
+ set\r
+ {\r
+ if ((this._v_MediaID != value))\r
+ {\r
+ this._v_MediaID = value;\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+#pragma warning restore 1591\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />\r
+ <PropertyGroup>\r
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+ <ProjectGuid>{A7A21311-CB0E-465F-8AD6-829FAF093F00}</ProjectGuid>\r
+ <OutputType>Library</OutputType>\r
+ <AppDesignerFolder>Properties</AppDesignerFolder>\r
+ <RootNamespace>TrafficClient</RootNamespace>\r
+ <AssemblyName>TrafficClient</AssemblyName>\r
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>\r
+ <FileAlignment>512</FileAlignment>\r
+ <SccProjectName>SAK</SccProjectName>\r
+ <SccLocalPath>SAK</SccLocalPath>\r
+ <SccAuxPath>SAK</SccAuxPath>\r
+ <SccProvider>SAK</SccProvider>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+ <DebugSymbols>true</DebugSymbols>\r
+ <DebugType>full</DebugType>\r
+ <Optimize>false</Optimize>\r
+ <OutputPath>bin\Debug\</OutputPath>\r
+ <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ </PropertyGroup>\r
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+ <DebugType>pdbonly</DebugType>\r
+ <Optimize>true</Optimize>\r
+ <OutputPath>bin\Release\</OutputPath>\r
+ <DefineConstants>TRACE</DefineConstants>\r
+ <ErrorReport>prompt</ErrorReport>\r
+ <WarningLevel>4</WarningLevel>\r
+ </PropertyGroup>\r
+ <ItemGroup>\r
+ <Reference Include="NLog">\r
+ <HintPath>..\packages\NLog.4.4.11\lib\net45\NLog.dll</HintPath>\r
+ </Reference>\r
+ <Reference Include="System" />\r
+ <Reference Include="System.Core" />\r
+ <Reference Include="System.Data.Linq" />\r
+ <Reference Include="System.Drawing" />\r
+ <Reference Include="System.Windows.Forms" />\r
+ <Reference Include="System.Xml.Linq" />\r
+ <Reference Include="System.Data.DataSetExtensions" />\r
+ <Reference Include="Microsoft.CSharp" />\r
+ <Reference Include="System.Data" />\r
+ <Reference Include="System.Net.Http" />\r
+ <Reference Include="System.Xml" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Compile Include="clIFsp_EC_SegmentResult.cs" />\r
+ <Compile Include="Reader.cs" />\r
+ <Compile Include="Resources.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTime>True</DesignTime>\r
+ <DependentUpon>Resources.resx</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="SearchResult.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
+ <Compile Include="SearchResult.Designer.cs">\r
+ <DependentUpon>SearchResult.cs</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="Segment.cs" />\r
+ <Compile Include="TrafficClasses.cs">\r
+ <DependentUpon>TrafficClasses.dbml</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="TrafficClasses.designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTime>True</DesignTime>\r
+ <DependentUpon>TrafficClasses.dbml</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="TrafficAPI.cs" />\r
+ <Compile Include="Properties\AssemblyInfo.cs" />\r
+ <Compile Include="Properties\Settings.Designer.cs">\r
+ <AutoGen>True</AutoGen>\r
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>\r
+ <DependentUpon>Settings.settings</DependentUpon>\r
+ </Compile>\r
+ <Compile Include="TrafficConfiguration.cs" />\r
+ <Compile Include="TrafficIDSelector.cs">\r
+ <SubType>UserControl</SubType>\r
+ </Compile>\r
+ <Compile Include="TrafficIDSelector.Designer.cs">\r
+ <DependentUpon>TrafficIDSelector.cs</DependentUpon>\r
+ </Compile>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <None Include="app.config" />\r
+ <None Include="Properties\DataSources\TrafficAPI.datasource">\r
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
+ </None>\r
+ <None Include="TrafficClasses.dbml">\r
+ <Generator>MSLinqToSQLGenerator</Generator>\r
+ <LastGenOutput>TrafficClasses.designer.cs</LastGenOutput>\r
+ <SubType>Designer</SubType>\r
+ </None>\r
+ <None Include="TrafficClasses.dbml.layout">\r
+ <DependentUpon>TrafficClasses.dbml</DependentUpon>\r
+ </None>\r
+ <None Include="Properties\Settings.settings">\r
+ <Generator>SettingsSingleFileGenerator</Generator>\r
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>\r
+ </None>\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <Service Include="{3259AA49-8AA1-44D3-9025-A0B520596A8C}" />\r
+ </ItemGroup>\r
+ <ItemGroup>\r
+ <EmbeddedResource Include="Resources.resx">\r
+ <Generator>ResXFileCodeGenerator</Generator>\r
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="SearchResult.resx">\r
+ <DependentUpon>SearchResult.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ <EmbeddedResource Include="TrafficIDSelector.resx">\r
+ <DependentUpon>TrafficIDSelector.cs</DependentUpon>\r
+ </EmbeddedResource>\r
+ </ItemGroup>\r
+ <ItemGroup />\r
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+</Project>
\ No newline at end of file
--- /dev/null
+""\r
+{\r
+"FILE_VERSION" = "9237"\r
+"ENLISTMENT_CHOICE" = "NEVER"\r
+"PROJECT_FILE_RELATIVE_PATH" = ""\r
+"NUMBER_OF_EXCLUDED_FILES" = "0"\r
+"ORIGINAL_PROJECT_FILE_PATH" = ""\r
+"NUMBER_OF_NESTED_PROJECTS" = "0"\r
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+\r
+namespace TrafficClient\r
+{\r
+ public class TrafficConfiguration\r
+ {\r
+ public Uri Address { get; set; }\r
+ public string UserName { get; set; }\r
+ public string Password { get; set; }\r
+ public int Timeout;\r
+ }\r
+}\r
--- /dev/null
+namespace TrafficClient\r
+{\r
+ partial class TrafficIDSelector\r
+ {\r
+ /// <summary> \r
+ /// Required designer variable.\r
+ /// </summary>\r
+ private System.ComponentModel.IContainer components = null;\r
+\r
+ /// <summary> \r
+ /// Clean up any resources being used.\r
+ /// </summary>\r
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>\r
+ protected override void Dispose(bool disposing)\r
+ {\r
+ if (disposing && (components != null))\r
+ {\r
+ components.Dispose();\r
+ }\r
+ base.Dispose(disposing);\r
+ }\r
+\r
+ #region Component Designer generated code\r
+\r
+ /// <summary> \r
+ /// Required method for Designer support - do not modify \r
+ /// the contents of this method with the code editor.\r
+ /// </summary>\r
+ private void InitializeComponent()\r
+ {\r
+ this.components = new System.ComponentModel.Container();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ this.trafficAPIBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();\r
+ this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker();\r
+ this.backgroundWorker3 = new System.ComponentModel.BackgroundWorker();\r
+ this.backgroundWorker4 = new System.ComponentModel.BackgroundWorker();\r
+ this.dataGridView1 = new System.Windows.Forms.DataGridView();\r
+ this.panel1 = new System.Windows.Forms.Panel();\r
+ this.scheduledDate = new System.Windows.Forms.DateTimePicker();\r
+ this.textBox1 = new System.Windows.Forms.TextBox();\r
+ this.searchButton = new System.Windows.Forms.Button();\r
+ this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();\r
+ this.copiaCheckBox = new System.Windows.Forms.CheckBox();\r
+ this.radioButtonBroadCast = new System.Windows.Forms.RadioButton();\r
+ this.radioButtonPromo = new System.Windows.Forms.RadioButton();\r
+ this.radioButtonAD = new System.Windows.Forms.RadioButton();\r
+ this.tableLayoutPanelSearch = new System.Windows.Forms.TableLayoutPanel();\r
+ this.panel2 = new System.Windows.Forms.Panel();\r
+ ((System.ComponentModel.ISupportInitialize)(this.trafficAPIBindingSource)).BeginInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();\r
+ this.panel1.SuspendLayout();\r
+ this.flowLayoutPanel1.SuspendLayout();\r
+ this.tableLayoutPanelSearch.SuspendLayout();\r
+ this.panel2.SuspendLayout();\r
+ this.SuspendLayout();\r
+ // \r
+ // dataGridView1\r
+ // \r
+ this.dataGridView1.AllowUserToAddRows = false;\r
+ this.dataGridView1.AllowUserToDeleteRows = false;\r
+ this.dataGridView1.AllowUserToResizeRows = false;\r
+ this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
+ this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
+ this.dataGridView1.BackgroundColor = System.Drawing.Color.White;\r
+ this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+ this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
+ this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
+ dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;\r
+ dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.Black;\r
+ dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle1;\r
+ this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
+ this.dataGridView1.Location = new System.Drawing.Point(0, 0);\r
+ this.dataGridView1.Margin = new System.Windows.Forms.Padding(6);\r
+ this.dataGridView1.MultiSelect = false;\r
+ this.dataGridView1.Name = "dataGridView1";\r
+ this.dataGridView1.RowHeadersVisible = false;\r
+ this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+ this.dataGridView1.Size = new System.Drawing.Size(263, 217);\r
+ this.dataGridView1.TabIndex = 1;\r
+ this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);\r
+ this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);\r
+ // \r
+ // panel1\r
+ // \r
+ this.panel1.Controls.Add(this.dataGridView1);\r
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.panel1.Location = new System.Drawing.Point(0, 62);\r
+ this.panel1.Name = "panel1";\r
+ this.panel1.Size = new System.Drawing.Size(263, 217);\r
+ this.panel1.TabIndex = 11;\r
+ // \r
+ // scheduledDate\r
+ // \r
+ this.scheduledDate.CustomFormat = " ";\r
+ this.scheduledDate.Format = System.Windows.Forms.DateTimePickerFormat.Short;\r
+ this.scheduledDate.Location = new System.Drawing.Point(3, 38);\r
+ this.scheduledDate.Name = "scheduledDate";\r
+ this.scheduledDate.ShowCheckBox = true;\r
+ this.scheduledDate.ShowUpDown = true;\r
+ this.scheduledDate.Size = new System.Drawing.Size(101, 20);\r
+ this.scheduledDate.TabIndex = 3;\r
+ // \r
+ // textBox1\r
+ // \r
+ this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.textBox1.Location = new System.Drawing.Point(112, 38);\r
+ this.textBox1.Name = "textBox1";\r
+ this.textBox1.Size = new System.Drawing.Size(78, 20);\r
+ this.textBox1.TabIndex = 0;\r
+ this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);\r
+ // \r
+ // searchButton\r
+ // \r
+ this.searchButton.BackColor = System.Drawing.Color.Transparent;\r
+ this.searchButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F);\r
+ this.searchButton.Location = new System.Drawing.Point(196, 38);\r
+ this.searchButton.Name = "searchButton";\r
+ this.searchButton.Size = new System.Drawing.Size(64, 20);\r
+ this.searchButton.TabIndex = 4;\r
+ this.searchButton.Text = "Search";\r
+ this.searchButton.UseVisualStyleBackColor = false;\r
+ this.searchButton.Click += new System.EventHandler(this.searchButton_Click);\r
+ // \r
+ // flowLayoutPanel1\r
+ // \r
+ this.tableLayoutPanelSearch.SetColumnSpan(this.flowLayoutPanel1, 3);\r
+ this.flowLayoutPanel1.Controls.Add(this.copiaCheckBox);\r
+ this.flowLayoutPanel1.Controls.Add(this.radioButtonBroadCast);\r
+ this.flowLayoutPanel1.Controls.Add(this.radioButtonPromo);\r
+ this.flowLayoutPanel1.Controls.Add(this.radioButtonAD);\r
+ this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 3);\r
+ this.flowLayoutPanel1.Name = "flowLayoutPanel1";\r
+ this.flowLayoutPanel1.Size = new System.Drawing.Size(257, 27);\r
+ this.flowLayoutPanel1.TabIndex = 2;\r
+ // \r
+ // copiaCheckBox\r
+ // \r
+ this.copiaCheckBox.Appearance = System.Windows.Forms.Appearance.Button;\r
+ this.copiaCheckBox.AutoSize = true;\r
+ this.copiaCheckBox.Checked = true;\r
+ this.copiaCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;\r
+ this.copiaCheckBox.Dock = System.Windows.Forms.DockStyle.Left;\r
+ this.copiaCheckBox.Location = new System.Drawing.Point(3, 3);\r
+ this.copiaCheckBox.Name = "copiaCheckBox";\r
+ this.copiaCheckBox.Size = new System.Drawing.Size(81, 23);\r
+ this.copiaCheckBox.TabIndex = 6;\r
+ this.copiaCheckBox.Text = "Missing copia";\r
+ this.copiaCheckBox.UseVisualStyleBackColor = true;\r
+ // \r
+ // radioButtonBroadCast\r
+ // \r
+ this.radioButtonBroadCast.Appearance = System.Windows.Forms.Appearance.Button;\r
+ this.radioButtonBroadCast.AutoSize = true;\r
+ this.radioButtonBroadCast.Checked = true;\r
+ this.radioButtonBroadCast.Dock = System.Windows.Forms.DockStyle.Left;\r
+ this.radioButtonBroadCast.Location = new System.Drawing.Point(90, 3);\r
+ this.radioButtonBroadCast.Name = "radioButtonBroadCast";\r
+ this.radioButtonBroadCast.Size = new System.Drawing.Size(66, 23);\r
+ this.radioButtonBroadCast.TabIndex = 7;\r
+ this.radioButtonBroadCast.TabStop = true;\r
+ this.radioButtonBroadCast.Text = "BroadCast";\r
+ this.radioButtonBroadCast.UseVisualStyleBackColor = true;\r
+ // \r
+ // radioButtonPromo\r
+ // \r
+ this.radioButtonPromo.Appearance = System.Windows.Forms.Appearance.Button;\r
+ this.radioButtonPromo.AutoSize = true;\r
+ this.radioButtonPromo.Dock = System.Windows.Forms.DockStyle.Left;\r
+ this.radioButtonPromo.Location = new System.Drawing.Point(162, 3);\r
+ this.radioButtonPromo.Name = "radioButtonPromo";\r
+ this.radioButtonPromo.Size = new System.Drawing.Size(47, 23);\r
+ this.radioButtonPromo.TabIndex = 8;\r
+ this.radioButtonPromo.Text = "Promo";\r
+ this.radioButtonPromo.UseVisualStyleBackColor = true;\r
+ // \r
+ // radioButtonAD\r
+ // \r
+ this.radioButtonAD.Appearance = System.Windows.Forms.Appearance.Button;\r
+ this.radioButtonAD.AutoSize = true;\r
+ this.radioButtonAD.Dock = System.Windows.Forms.DockStyle.Left;\r
+ this.radioButtonAD.Location = new System.Drawing.Point(3, 32);\r
+ this.radioButtonAD.Name = "radioButtonAD";\r
+ this.radioButtonAD.Size = new System.Drawing.Size(84, 23);\r
+ this.radioButtonAD.TabIndex = 9;\r
+ this.radioButtonAD.Text = "Advertisement";\r
+ this.radioButtonAD.UseVisualStyleBackColor = true;\r
+ // \r
+ // tableLayoutPanelSearch\r
+ // \r
+ this.tableLayoutPanelSearch.AutoSize = true;\r
+ this.tableLayoutPanelSearch.ColumnCount = 3;\r
+ this.tableLayoutPanelSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 109F));\r
+ this.tableLayoutPanelSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+ this.tableLayoutPanelSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70F));\r
+ this.tableLayoutPanelSearch.Controls.Add(this.flowLayoutPanel1, 0, 0);\r
+ this.tableLayoutPanelSearch.Controls.Add(this.textBox1, 1, 1);\r
+ this.tableLayoutPanelSearch.Controls.Add(this.scheduledDate, 0, 1);\r
+ this.tableLayoutPanelSearch.Controls.Add(this.searchButton, 2, 1);\r
+ this.tableLayoutPanelSearch.Dock = System.Windows.Forms.DockStyle.Top;\r
+ this.tableLayoutPanelSearch.Location = new System.Drawing.Point(0, 0);\r
+ this.tableLayoutPanelSearch.Name = "tableLayoutPanelSearch";\r
+ this.tableLayoutPanelSearch.RowCount = 2;\r
+ this.tableLayoutPanelSearch.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 57.8125F));\r
+ this.tableLayoutPanelSearch.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 42.1875F));\r
+ this.tableLayoutPanelSearch.Size = new System.Drawing.Size(263, 62);\r
+ this.tableLayoutPanelSearch.TabIndex = 10;\r
+ this.tableLayoutPanelSearch.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanelSearch_Paint);\r
+ // \r
+ // panel2\r
+ // \r
+ this.panel2.Controls.Add(this.panel1);\r
+ this.panel2.Controls.Add(this.tableLayoutPanelSearch);\r
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;\r
+ this.panel2.Location = new System.Drawing.Point(0, 0);\r
+ this.panel2.Name = "panel2";\r
+ this.panel2.Size = new System.Drawing.Size(263, 279);\r
+ this.panel2.TabIndex = 12;\r
+ // \r
+ // TrafficIDSelector\r
+ // \r
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
+ this.AutoSize = true;\r
+ this.BackColor = System.Drawing.Color.White;\r
+ this.Controls.Add(this.panel2);\r
+ this.Name = "TrafficIDSelector";\r
+ this.Size = new System.Drawing.Size(263, 279);\r
+ ((System.ComponentModel.ISupportInitialize)(this.trafficAPIBindingSource)).EndInit();\r
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();\r
+ this.panel1.ResumeLayout(false);\r
+ this.flowLayoutPanel1.ResumeLayout(false);\r
+ this.flowLayoutPanel1.PerformLayout();\r
+ this.tableLayoutPanelSearch.ResumeLayout(false);\r
+ this.tableLayoutPanelSearch.PerformLayout();\r
+ this.panel2.ResumeLayout(false);\r
+ this.panel2.PerformLayout();\r
+ this.ResumeLayout(false);\r
+\r
+ }\r
+\r
+ #endregion\r
+ private System.ComponentModel.BackgroundWorker backgroundWorker1;\r
+ private System.Windows.Forms.BindingSource trafficAPIBindingSource;\r
+ private System.ComponentModel.BackgroundWorker backgroundWorker2;\r
+ private System.ComponentModel.BackgroundWorker backgroundWorker3;\r
+ private System.ComponentModel.BackgroundWorker backgroundWorker4;\r
+ private System.Windows.Forms.Panel panel1;\r
+ private System.Windows.Forms.DataGridView dataGridView1;\r
+ private System.Windows.Forms.DateTimePicker scheduledDate;\r
+ private System.Windows.Forms.TextBox textBox1;\r
+ private System.Windows.Forms.Button searchButton;\r
+ private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;\r
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSearch;\r
+ private System.Windows.Forms.CheckBox copiaCheckBox;\r
+ private System.Windows.Forms.RadioButton radioButtonBroadCast;\r
+ private System.Windows.Forms.RadioButton radioButtonPromo;\r
+ private System.Windows.Forms.RadioButton radioButtonAD;\r
+ private System.Windows.Forms.Panel panel2;\r
+ }\r
+}\r
--- /dev/null
+using System.Windows.Forms;\r
+using System;\r
+using System.Drawing;\r
+\r
+namespace TrafficClient {\r
+ public delegate void OnSelectedIDChanged(string ID, int variantID);\r
+ public delegate void ClearCheckBox();\r
+\r
+ public partial class TrafficIDSelector : UserControl {\r
+ public TrafficAPI trafficAPI { get; private set; }\r
+ public OnSelectedIDChanged IDChangedEvent { get; set; }\r
+ public ClearCheckBox clearCheckBox { get; set; }\r
+ public TrafficIDSelector() {\r
+ InitializeComponent();\r
+ InitializeTexts();\r
+ test();\r
+ panel1.Dock = DockStyle.Fill;\r
+ }\r
+\r
+ private void test() {\r
+ TableLayoutRowStyleCollection coll = tableLayoutPanelSearch.RowStyles;\r
+ coll[1].SizeType = SizeType.Percent;\r
+ }\r
+\r
+ private void InitializeTexts() {\r
+ searchButton.Text = Resources.KERESES;\r
+ copiaCheckBox.Text = Resources.HIANYZO_KOPIA;\r
+\r
+ dataGridView1.AutoGenerateColumns = false;\r
+ // dataGridView1.Columns.AddRange(new DataGridViewCheckBoxColumn());\r
+ dataGridView1.Columns.AddRange(\r
+ new DataGridViewColumn[] {\r
+ new DataGridViewCheckBoxColumn(){\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "Selected"\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader,\r
+ DataPropertyName = "MediaID",\r
+ HeaderText = Resources.TRAFFIC_ID\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "Title",\r
+ HeaderText = Resources.CIM\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader,\r
+ DataPropertyName = "EpisodeTitle",\r
+ HeaderText = Resources.EPIZOD_CIM\r
+ },\r
+ new DataGridViewTextBoxColumn() {\r
+ AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,\r
+ DataPropertyName = "EpisodeNumber",\r
+ HeaderText = Resources.EPIZOD\r
+ }\r
+ }\r
+ );\r
+ radioButtonPromo.Text = Resources.PROMO;\r
+ radioButtonAD.Text = Resources.REKLAM;\r
+ radioButtonBroadCast.Text = Resources.ADAS;\r
+ }\r
+\r
+ public TrafficConfiguration Configuration {\r
+ set {\r
+ trafficAPI = new TrafficAPI(value.Address.OriginalString, value.UserName, value.Password, value.Timeout);\r
+ }\r
+ }\r
+\r
+ public void RefreshDataGridSource() {\r
+ Cursor.Current = Cursors.WaitCursor;\r
+ string searchText = textBox1.Text;\r
+ DateTime? from = null;\r
+ DateTime? to = null;\r
+ if (scheduledDate.Checked) {\r
+ from = scheduledDate.Value;\r
+ to = scheduledDate.Value.AddDays(1);\r
+ }\r
+ var result = trafficAPI.Search(searchText, from, to, copiaCheckBox.Checked)?.ToArray();\r
+\r
+ if (result == null) {\r
+ dataGridView1.DataSource = null;\r
+ return;\r
+ }\r
+ dataGridView1.DataSource = result;\r
+ }\r
+\r
+ private void textBox1_KeyDown(object sender, KeyEventArgs e) {\r
+ if (e.KeyCode == Keys.Enter) {\r
+ RefreshDataGridSource();\r
+ }\r
+ }\r
+\r
+ private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {\r
+ if (e.RowIndex < 0)\r
+ return;\r
+\r
+ MamResultWrapper res = dataGridView1.Rows[e.RowIndex].DataBoundItem as MamResultWrapper;\r
+ if (res == null)\r
+ return;\r
+ IDChangedEvent?.Invoke(res.MediaID, res.VariantID);\r
+ }\r
+\r
+ private void searchButton_Click(object sender, EventArgs e) {\r
+ RefreshDataGridSource();\r
+ }\r
+\r
+ private void tableLayoutPanelSearch_Paint(object sender, PaintEventArgs e) {\r
+ var rectangle = e.ClipRectangle;\r
+ //ControlPaint.DrawBorder3D(e.Graphics, rectangle, Border3DStyle.Raised, Border3DSide.All);\r
+ ControlPaint.DrawBorder(e.Graphics, rectangle, Color.LightGray, ButtonBorderStyle.Dotted); // dotted border\r
+ }\r
+\r
+ private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) {\r
+ if (e.RowIndex == -1)\r
+ return;\r
+ DataGridView gridView = sender as DataGridView;\r
+ if (gridView == null)\r
+ return;\r
+ //nincs multiselect\r
+ DataGridViewCell checkBoxCell = gridView.SelectedCells[0];\r
+ clearCheckBox?.Invoke();\r
+ ClearSelectionSource();\r
+ //checkBoxCell.Value = checkBoxCell.Value.Equals(true) ? true : false;\r
+ MamResultWrapper res = dataGridView1.Rows[e.RowIndex].DataBoundItem as MamResultWrapper;\r
+ if (checkBoxCell.Value.Equals(false))\r
+ res.Selected = true;\r
+ else\r
+ res.Selected = false;\r
+ if (checkBoxCell.Value.Equals(true)) {\r
+ \r
+ IDChangedEvent?.Invoke(res.MediaID, res.VariantID);\r
+ } else\r
+ IDChangedEvent?.Invoke(string.Empty, 0);\r
+ }\r
+\r
+ public void ClearSelectionSource() {\r
+ foreach (DataGridViewRow row in dataGridView1.Rows) {\r
+ DataGridViewCheckBoxCell actual = row.Cells[0] as DataGridViewCheckBoxCell;\r
+ actual.Value = false;\r
+ }\r
+ }\r
+ }\r
+\r
+ public class MamResultWrapper {\r
+ public bool Selected { get; set; }\r
+ public string MediaID { get; set; }\r
+ public string Title { get; set; }\r
+ public string EpisodeTitle { get; set; }\r
+ public string EpisodeNumber { get; set; }\r
+\r
+ public int VariantID { get; set; }\r
+ }\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<root>\r
+ <!-- \r
+ Microsoft ResX Schema \r
+ \r
+ Version 2.0\r
+ \r
+ The primary goals of this format is to allow a simple XML format \r
+ that is mostly human readable. The generation and parsing of the \r
+ various data types are done through the TypeConverter classes \r
+ associated with the data types.\r
+ \r
+ Example:\r
+ \r
+ ... ado.net/XML headers & schema ...\r
+ <resheader name="resmimetype">text/microsoft-resx</resheader>\r
+ <resheader name="version">2.0</resheader>\r
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>\r
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>\r
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">\r
+ <value>[base64 mime encoded serialized .NET Framework object]</value>\r
+ </data>\r
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">\r
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r
+ <comment>This is a comment</comment>\r
+ </data>\r
+ \r
+ There are any number of "resheader" rows that contain simple \r
+ name/value pairs.\r
+ \r
+ Each data row contains a name, and value. The row also contains a \r
+ type or mimetype. Type corresponds to a .NET class that support \r
+ text/value conversion through the TypeConverter architecture. \r
+ Classes that don't support this are serialized and stored with the \r
+ mimetype set.\r
+ \r
+ The mimetype is used for serialized objects, and tells the \r
+ ResXResourceReader how to depersist the object. This is currently not \r
+ extensible. For a given mimetype the value must be set accordingly:\r
+ \r
+ Note - application/x-microsoft.net.object.binary.base64 is the format \r
+ that the ResXResourceWriter will generate, however the reader can \r
+ read any of the formats listed below.\r
+ \r
+ mimetype: application/x-microsoft.net.object.binary.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r
+ : and then encoded with base64 encoding.\r
+ \r
+ mimetype: application/x-microsoft.net.object.soap.base64\r
+ value : The object must be serialized with \r
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r
+ : and then encoded with base64 encoding.\r
+\r
+ mimetype: application/x-microsoft.net.object.bytearray.base64\r
+ value : The object must be serialized into a byte array \r
+ : using a System.ComponentModel.TypeConverter\r
+ : and then encoded with base64 encoding.\r
+ -->\r
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">\r
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />\r
+ <xsd:element name="root" msdata:IsDataSet="true">\r
+ <xsd:complexType>\r
+ <xsd:choice maxOccurs="unbounded">\r
+ <xsd:element name="metadata">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" use="required" type="xsd:string" />\r
+ <xsd:attribute name="type" type="xsd:string" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="assembly">\r
+ <xsd:complexType>\r
+ <xsd:attribute name="alias" type="xsd:string" />\r
+ <xsd:attribute name="name" type="xsd:string" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="data">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />\r
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />\r
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />\r
+ <xsd:attribute ref="xml:space" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ <xsd:element name="resheader">\r
+ <xsd:complexType>\r
+ <xsd:sequence>\r
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />\r
+ </xsd:sequence>\r
+ <xsd:attribute name="name" type="xsd:string" use="required" />\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:choice>\r
+ </xsd:complexType>\r
+ </xsd:element>\r
+ </xsd:schema>\r
+ <resheader name="resmimetype">\r
+ <value>text/microsoft-resx</value>\r
+ </resheader>\r
+ <resheader name="version">\r
+ <value>2.0</value>\r
+ </resheader>\r
+ <resheader name="reader">\r
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <resheader name="writer">\r
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
+ </resheader>\r
+ <metadata name="trafficAPIBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>181, 17</value>\r
+ </metadata>\r
+ <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>17, 17</value>\r
+ </metadata>\r
+ <metadata name="backgroundWorker2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>361, 17</value>\r
+ </metadata>\r
+ <metadata name="backgroundWorker3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>525, 17</value>\r
+ </metadata>\r
+ <metadata name="backgroundWorker4.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>689, 17</value>\r
+ </metadata>\r
+</root>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>\r
+<configuration>\r
+ <configSections>\r
+ </configSections>\r
+ <connectionStrings>\r
+ <add name="PlanAIRClient.Properties.Settings.CLArchiveTF_0ConnectionString"\r
+ connectionString="Data Source=folkloredb.hu\sql08,33860;Initial Catalog=CLArchiveTF_0;Persist Security Info=True;User ID=MAM;Password=Echotv.hu"\r
+ providerName="System.Data.SqlClient" />\r
+ </connectionStrings>\r
+</configuration>
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+\r
+namespace TrafficClient {\r
+ public partial class clIFsp_EC_SegmentResult {\r
+\r
+ private int _v_SegID;\r
+\r
+ private System.Nullable<int> _v_VariantID;\r
+\r
+ private string _v_SegTitle;\r
+\r
+ private string _v_SegKeyWords;\r
+\r
+ private System.Nullable<int> _v_SegNumber;\r
+\r
+ private System.Nullable<int> _v_TcIn;\r
+\r
+ private System.Nullable<int> _v_TcOut;\r
+\r
+ private System.Nullable<int> _v_Duration;\r
+\r
+ private string _v_TcInTC;\r
+\r
+ private string _v_TcOutTC;\r
+\r
+ private string _v_DurationTC;\r
+\r
+ private bool? _v_Dropable;\r
+\r
+ public clIFsp_EC_SegmentResult() {\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_SegID", DbType = "Int NOT NULL")]\r
+ public int v_SegID {\r
+ get {\r
+ return this._v_SegID;\r
+ }\r
+ set {\r
+ if ((this._v_SegID != value)) {\r
+ this._v_SegID = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_VariantID", DbType = "Int")]\r
+ public System.Nullable<int> v_VariantID {\r
+ get {\r
+ return this._v_VariantID;\r
+ }\r
+ set {\r
+ if ((this._v_VariantID != value)) {\r
+ this._v_VariantID = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_SegTitle", DbType = "VarChar", CanBeNull = false)]\r
+ public string v_SegTitle {\r
+ get {\r
+ return this._v_SegTitle;\r
+ }\r
+ set {\r
+ if ((this._v_SegTitle != value)) {\r
+ this._v_SegTitle = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_SegKeyWords", DbType = "Int")]\r
+ public string v_SegKeyWords {\r
+ get {\r
+ return this.v_SegKeyWords;\r
+ }\r
+ set {\r
+ if ((this._v_SegKeyWords != value)) {\r
+ this._v_SegKeyWords = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_SegNumber", DbType = "Int")]\r
+ public System.Nullable<int> v_SegNumber {\r
+ get {\r
+ return this._v_SegNumber;\r
+ }\r
+ set {\r
+ if ((this._v_SegNumber != value)) {\r
+ this._v_SegNumber = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_TcIn", DbType = "int")]\r
+ public System.Nullable<int> v_TcIn {\r
+ get {\r
+ return this._v_TcIn;\r
+ }\r
+ set {\r
+ if ((this._v_TcIn != value)) {\r
+ this._v_TcIn = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_TcOut", DbType = "Int")]\r
+ public System.Nullable<int> v_TcOut {\r
+ get {\r
+ return this._v_TcOut;\r
+ }\r
+ set {\r
+ if ((this._v_TcOut != value)) {\r
+ this._v_TcOut = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_Duration", DbType = "Int")]\r
+ public System.Nullable<int> v_Duration {\r
+ get {\r
+ return this._v_Duration;\r
+ }\r
+ set {\r
+ if ((this._v_Duration != value)) {\r
+ this._v_Duration = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_TcInTC", DbType = "VarChar(40)")]\r
+ public string v_TcInTC {\r
+ get {\r
+ return this._v_TcInTC;\r
+ }\r
+ set {\r
+ if ((this._v_TcInTC != value)) {\r
+ this._v_TcInTC = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_TcOutTC", DbType = "VarChar(25)")]\r
+ public string v_TcOutTC {\r
+ get {\r
+ return this._v_TcOutTC;\r
+ }\r
+ set {\r
+ if ((this._v_TcOutTC != value)) {\r
+ this._v_TcOutTC = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_DurationTC", DbType = "Varchar")]\r
+ public string v_DurationTC {\r
+ get {\r
+ return this._v_DurationTC;\r
+ }\r
+ set {\r
+ if ((this._v_DurationTC != value)) {\r
+ this._v_DurationTC = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ [global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "v_Dropable", DbType = "bit")]\r
+ public bool? v_Dropable {\r
+ get {\r
+ return this._v_Dropable;\r
+ }\r
+ set {\r
+ if ((this._v_Dropable != value)) {\r
+ this._v_Dropable = value;\r
+ }\r
+ }\r
+ }\r
+\r
+ \r
+ }\r
+}\r