From a68f527dcde5386514b79229ed9fe982a56cc8a5 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Thu, 25 Aug 2016 20:15:57 +0200 Subject: [PATCH 01/76] Version changed to beta 1 (1.5.1010.0) --- 1.5 'Kruger 60'/AssemblySolutionInfo.cs | 38 +- .../ChannelList/ChannelListForm.resx | 4 +- .../Properties/InvariantTexts.Designer.cs | 2 +- .../Properties/InvariantTexts.resx | 2 +- .../ChannelList/Properties/Texts.Designer.cs | 888 ++-- .../ChannelList/Properties/Texts.es.resx | 488 +- .../ChannelList/Properties/Texts.resx | 498 +- 1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs | 1102 ++--- .../FirstTimeConfig/ConfigForm.resx | 4112 ++++++++--------- .../Properties/Texts.Designer.cs | 2 +- .../FirstTimeConfig/Properties/Texts.es.resx | 2 +- .../FirstTimeConfig/Properties/Texts.resx | 2 +- 1.5 'Kruger 60'/Setup/MainSetup/strings.wxi | 30 +- .../Setup/MainSetup/texts_en-US.wxl | 6 +- .../Setup/MainSetup/texts_es-ES.wxl | 6 +- .../UiServices.Common/Forms/AboutBox.cs | 312 +- .../UiServices.Common/Forms/AboutBox.resx | 988 ++-- .../Properties/InvariantTexts.Designer.cs | 432 +- .../Properties/InvariantTexts.resx | 340 +- 1.5 'Kruger 60'/solution-license.rtf | 2 +- 1.5 'Kruger 60'/solution-license.txt | 2 +- 1.5 'Kruger 60'/solution-license_es.rtf | 2 +- 1.5 'Kruger 60'/solution-license_es.txt | 2 +- 23 files changed, 4631 insertions(+), 4631 deletions(-) diff --git a/1.5 'Kruger 60'/AssemblySolutionInfo.cs b/1.5 'Kruger 60'/AssemblySolutionInfo.cs index fd6bd634..c38297d5 100644 --- a/1.5 'Kruger 60'/AssemblySolutionInfo.cs +++ b/1.5 'Kruger 60'/AssemblySolutionInfo.cs @@ -1,20 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; - -[assembly: AssemblyFileVersion(SolutionVersion.AssemblyFileVersion)] -[assembly: AssemblyInformationalVersion(SolutionVersion.AssemblyInformationalVersion)] -[assembly: AssemblyProduct(SolutionVersion.AssemblyProduct)] -[assembly: AssemblyCompany("movistartv.codeplex.com")] - -internal static class SolutionVersion -{ - public const string DefaultAssemblyVersion = "1.5.40.0"; - public const string AssemblyFileVersion = "1.5.40.0"; - public const string AssemblyInformationalVersion = "1.5.40.0"; - public const string AssemblyProduct = "IPTViewr: virtual decoder for movistar+" + " (v" + ProductVersion + ")"; - public const string ProductVersion = "1.5 \"Kruger 60\" Alpha 4"; - public const string DefaultCopyright = "Copyright (C) 2014-2016, AlphaCentaury and contributors"; +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyFileVersion(SolutionVersion.AssemblyFileVersion)] +[assembly: AssemblyInformationalVersion(SolutionVersion.AssemblyInformationalVersion)] +[assembly: AssemblyProduct(SolutionVersion.AssemblyProduct)] +[assembly: AssemblyCompany("movistartv.codeplex.com")] + +internal static class SolutionVersion +{ + public const string DefaultAssemblyVersion = "1.5.1010.0"; + public const string AssemblyFileVersion = "1.5.1010.0"; + public const string AssemblyInformationalVersion = "1.5.1010.0"; + public const string AssemblyProduct = "IPTViewr: virtual decoder for movistar+" + " (v" + ProductVersion + ")"; + public const string ProductVersion = "1.5 \"Kruger 60\" Beta 1"; + public const string DefaultCopyright = "Copyright (C) 2014-2016, AlphaCentaury and contributors"; } // class SolutionVersion \ No newline at end of file diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx index b7d17a64..e7c9eea6 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx @@ -1595,7 +1595,7 @@ listViewChannelList - Project.IpTv.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.40.0, Culture=neutral, PublicKeyToken=null + Project.IpTv.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -2276,6 +2276,6 @@ ChannelListForm - Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.40.0, Culture=neutral, PublicKeyToken=null + Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs index d43ffe2b..fff07d8e 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs @@ -121,7 +121,7 @@ internal static string SplashScreenDefaultStatus { } /// - /// Looks up a localized string similar to http://movistartv.codeplex.com/wikipage?title=Update-v1.5.40.0. + /// Looks up a localized string similar to http://movistartv.codeplex.com/wikipage?title=Update-v1.5.1010.0. /// internal static string UrlCheckForUpdatesManual { get { diff --git a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx index fe3ca7b3..23386041 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx +++ b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx @@ -143,7 +143,7 @@ Verifique el valor de la propiedad 'ForceUICulture' del archivo '.config'http://movistartv.codeplex.com - http://movistartv.codeplex.com/wikipage?title=Update-v1.5.40.0 + http://movistartv.codeplex.com/wikipage?title=Update-v1.5.1010.0 http://movistartv.codeplex.com/documentation diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs index 61f705aa..34558f92 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs @@ -1,444 +1,444 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.ChannelList.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.ChannelList.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to movistar+ channels - IPTViewr (1.5“Kruger 60” Alpha 4). - /// - internal static string AppCaption { - get { - return ResourceManager.GetString("AppCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IPTViewr: virtual decoder for movistar+. - /// - internal static string AppName { - get { - return ResourceManager.GetString("AppName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Alpha (experimental). - /// - internal static string AppStatus { - get { - return ResourceManager.GetString("AppStatus", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to 1.5 “Kruger 60” Alpha 4. - /// - internal static string AppVersion { - get { - return ResourceManager.GetString("AppVersion", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to obtain the list of TV channels/services. - /// - internal static string BroadcastListUnableRefresh { - get { - return ResourceManager.GetString("BroadcastListUnableRefresh", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Obtaining list of TV channels/services.... - /// - internal static string BroadcastObtainingList { - get { - return ResourceManager.GetString("BroadcastObtainingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parsing and extracting the list of TV channels/services.... - /// - internal static string BroadcastParsingList { - get { - return ResourceManager.GetString("BroadcastParsingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Properties of the TV channel/service. - /// - internal static string BroadcastServiceProperties { - get { - return ResourceManager.GetString("BroadcastServiceProperties", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The verification of available TV channels and services is in progress. - ///The verification has to be canceled before you can perform the requested action.. - /// - internal static string ChannelFormActiveScan { - get { - return ResourceManager.GetString("ChannelFormActiveScan", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Services verification is in progress. - /// - internal static string ChannelFormActiveScanCaption { - get { - return ResourceManager.GetString("ChannelFormActiveScanCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The channel list can be outdated. It is over {0} days old.. - /// - internal static string ChannelListAgeObsolete { - get { - return ResourceManager.GetString("ChannelListAgeObsolete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The channel list is {0} days old.. - /// - internal static string ChannelListAgeOld { - get { - return ResourceManager.GetString("ChannelListAgeOld", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The channel list has been obtained from the cache, but it is empty.. - /// - internal static string ChannelListCacheEmpty { - get { - return ResourceManager.GetString("ChannelListCacheEmpty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No cached version of the channel list exists. You have to refresh the list.. - /// - internal static string ChannelListNoCache { - get { - return ResourceManager.GetString("ChannelListNoCache", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The program is about to proceed to download the electronic program guide (EPG) information for the first time. The download of the EPG is a very slow process (between 10 and 15 minutes). - /// - ///During the download process, the EPG information will either be unavailable or incomplete. - ///In subsequent executions of the program, the EPG information will be updated in the background automatically (if more than {0} hours have ellapsed since the last update).. - /// - internal static string EpgDownloadFirstTime { - get { - return ResourceManager.GetString("EpgDownloadFirstTime", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to At least one inactive service is now active. The list will be refreshed to show these new active services.. - /// - internal static string MulticastScannerScanCompleteRefresh { - get { - return ResourceManager.GetString("MulticastScannerScanCompleteRefresh", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to start the application. - /// - internal static string MyAppCtxExceptionCaption { - get { - return ResourceManager.GetString("MyAppCtxExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An unexpected error has occurred while initializating the application.. - /// - internal static string MyAppCtxExceptionMsg { - get { - return ResourceManager.GetString("MyAppCtxExceptionMsg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Application configuration error. - /// - internal static string MyAppCtxInitializationErrorCaption { - get { - return ResourceManager.GetString("MyAppCtxInitializationErrorCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting application.... - /// - internal static string MyAppCtxStarting { - get { - return ResourceManager.GetString("MyAppCtxStarting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error has occurred while processing your request. - /// - internal static string MyAppHandleExceptionDefaultCaption { - get { - return ResourceManager.GetString("MyAppHandleExceptionDefaultCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No information has been supplied as to where or why the error occurred. Find error details below:. - /// - internal static string MyAppHandleExceptionDefaultMessage { - get { - return ResourceManager.GetString("MyAppHandleExceptionDefaultMessage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An unexpected error has occured while loading the application configuration. - ///The application will now end.. - /// - internal static string MyAppLoadConfigException { - get { - return ResourceManager.GetString("MyAppLoadConfigException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Application configuration error. - /// - internal static string MyAppLoadConfigExceptionCaption { - get { - return ResourceManager.GetString("MyAppLoadConfigExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to find the 'Recorder Launcher' program at '{0}'.. - /// - internal static string MyAppRecorderLauncherNotFound { - get { - return ResourceManager.GetString("MyAppRecorderLauncherNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <Description has not been provided>. - /// - internal static string NotProvidedDescription { - get { - return ResourceManager.GetString("NotProvidedDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <Not provided>. - /// - internal static string NotProvidedValue { - get { - return ResourceManager.GetString("NotProvidedValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No service provider has been selected. - /// - internal static string NotSelectedServiceProvider { - get { - return ResourceManager.GetString("NotSelectedServiceProvider", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to open browser for URL '{0}'. - /// - ///{1}. - /// - internal static string OpenUrlError { - get { - return ResourceManager.GetString("OpenUrlError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Channel description and data. - /// - internal static string Payload02DisplayName { - get { - return ResourceManager.GetString("Payload02DisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Packages and channel numbers. - /// - internal static string Payload05DisplayName { - get { - return ResourceManager.GetString("Payload05DisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. - /// - ///Do you still want to schedule a recording of {0}?. - /// - internal static string RecordDeadTvChannel { - get { - return ResourceManager.GetString("RecordDeadTvChannel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording task has been sucessfully created.. - /// - internal static string SchedulerCreateTaskOk { - get { - return ResourceManager.GetString("SchedulerCreateTaskOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ***************************************************************************** - ///IPTViewr: IPTV Decoder for movistar+ version 1.5 “Kruger 60” Alpha 4 - ///***************************************************************************** - /// - ///Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors - ///========================================================================= - /// - ///THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, express or implied, including but not limited to the warranties o [rest of string was truncated]";. - /// - internal static string SolutionLicense { - get { - return ResourceManager.GetString("SolutionLicense", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset2 Symbol;}} - ///{\colortbl ;\red0\green0\blue255;} - ///{\*\generator Riched20 10.0.10586}\viewkind4\uc1 - ///\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: IPTV Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Alpha 4\ul\fs18\par - ///\fs20 Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors.\ulnone\i\fs18\par - ///THIS SOFTWARE IS \ul PROVIDED \ldblquote AS [rest of string was truncated]";. - /// - internal static string SolutionLicenseRtf { - get { - return ResourceManager.GetString("SolutionLicenseRtf", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to obtain the list of service providers. - /// - internal static string SPListUnableRefresh { - get { - return ResourceManager.GetString("SPListUnableRefresh", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Obtaining the list of service providers.... - /// - internal static string SPObtainingList { - get { - return ResourceManager.GetString("SPObtainingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parsing and extracting the list of providers.... - /// - internal static string SPParsingList { - get { - return ResourceManager.GetString("SPParsingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Properties of the service provider. - /// - internal static string SPProperties { - get { - return ResourceManager.GetString("SPProperties", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The refreshing of the list has been cancelled by the user.. - /// - internal static string UserCancelListRefresh { - get { - return ResourceManager.GetString("UserCancelListRefresh", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Project.IpTv.ChannelList.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.ChannelList.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to movistar+ channels - IPTViewr (1.5“Kruger 60” Beta 1). + /// + internal static string AppCaption { + get { + return ResourceManager.GetString("AppCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IPTViewr: virtual decoder for movistar+. + /// + internal static string AppName { + get { + return ResourceManager.GetString("AppName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Alpha (experimental). + /// + internal static string AppStatus { + get { + return ResourceManager.GetString("AppStatus", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 1.5 “Kruger 60” Beta 1. + /// + internal static string AppVersion { + get { + return ResourceManager.GetString("AppVersion", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to obtain the list of TV channels/services. + /// + internal static string BroadcastListUnableRefresh { + get { + return ResourceManager.GetString("BroadcastListUnableRefresh", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Obtaining list of TV channels/services.... + /// + internal static string BroadcastObtainingList { + get { + return ResourceManager.GetString("BroadcastObtainingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parsing and extracting the list of TV channels/services.... + /// + internal static string BroadcastParsingList { + get { + return ResourceManager.GetString("BroadcastParsingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Properties of the TV channel/service. + /// + internal static string BroadcastServiceProperties { + get { + return ResourceManager.GetString("BroadcastServiceProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The verification of available TV channels and services is in progress. + ///The verification has to be canceled before you can perform the requested action.. + /// + internal static string ChannelFormActiveScan { + get { + return ResourceManager.GetString("ChannelFormActiveScan", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Services verification is in progress. + /// + internal static string ChannelFormActiveScanCaption { + get { + return ResourceManager.GetString("ChannelFormActiveScanCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The channel list can be outdated. It is over {0} days old.. + /// + internal static string ChannelListAgeObsolete { + get { + return ResourceManager.GetString("ChannelListAgeObsolete", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The channel list is {0} days old.. + /// + internal static string ChannelListAgeOld { + get { + return ResourceManager.GetString("ChannelListAgeOld", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The channel list has been obtained from the cache, but it is empty.. + /// + internal static string ChannelListCacheEmpty { + get { + return ResourceManager.GetString("ChannelListCacheEmpty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No cached version of the channel list exists. You have to refresh the list.. + /// + internal static string ChannelListNoCache { + get { + return ResourceManager.GetString("ChannelListNoCache", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The program is about to proceed to download the electronic program guide (EPG) information for the first time. The download of the EPG is a very slow process (between 10 and 15 minutes). + /// + ///During the download process, the EPG information will either be unavailable or incomplete. + ///In subsequent executions of the program, the EPG information will be updated in the background automatically (if more than {0} hours have ellapsed since the last update).. + /// + internal static string EpgDownloadFirstTime { + get { + return ResourceManager.GetString("EpgDownloadFirstTime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to At least one inactive service is now active. The list will be refreshed to show these new active services.. + /// + internal static string MulticastScannerScanCompleteRefresh { + get { + return ResourceManager.GetString("MulticastScannerScanCompleteRefresh", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to start the application. + /// + internal static string MyAppCtxExceptionCaption { + get { + return ResourceManager.GetString("MyAppCtxExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An unexpected error has occurred while initializating the application.. + /// + internal static string MyAppCtxExceptionMsg { + get { + return ResourceManager.GetString("MyAppCtxExceptionMsg", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application configuration error. + /// + internal static string MyAppCtxInitializationErrorCaption { + get { + return ResourceManager.GetString("MyAppCtxInitializationErrorCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting application.... + /// + internal static string MyAppCtxStarting { + get { + return ResourceManager.GetString("MyAppCtxStarting", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error has occurred while processing your request. + /// + internal static string MyAppHandleExceptionDefaultCaption { + get { + return ResourceManager.GetString("MyAppHandleExceptionDefaultCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No information has been supplied as to where or why the error occurred. Find error details below:. + /// + internal static string MyAppHandleExceptionDefaultMessage { + get { + return ResourceManager.GetString("MyAppHandleExceptionDefaultMessage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An unexpected error has occured while loading the application configuration. + ///The application will now end.. + /// + internal static string MyAppLoadConfigException { + get { + return ResourceManager.GetString("MyAppLoadConfigException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application configuration error. + /// + internal static string MyAppLoadConfigExceptionCaption { + get { + return ResourceManager.GetString("MyAppLoadConfigExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to find the 'Recorder Launcher' program at '{0}'.. + /// + internal static string MyAppRecorderLauncherNotFound { + get { + return ResourceManager.GetString("MyAppRecorderLauncherNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <Description has not been provided>. + /// + internal static string NotProvidedDescription { + get { + return ResourceManager.GetString("NotProvidedDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <Not provided>. + /// + internal static string NotProvidedValue { + get { + return ResourceManager.GetString("NotProvidedValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No service provider has been selected. + /// + internal static string NotSelectedServiceProvider { + get { + return ResourceManager.GetString("NotSelectedServiceProvider", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to open browser for URL '{0}'. + /// + ///{1}. + /// + internal static string OpenUrlError { + get { + return ResourceManager.GetString("OpenUrlError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Channel description and data. + /// + internal static string Payload02DisplayName { + get { + return ResourceManager.GetString("Payload02DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Packages and channel numbers. + /// + internal static string Payload05DisplayName { + get { + return ResourceManager.GetString("Payload05DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. + /// + ///Do you still want to schedule a recording of {0}?. + /// + internal static string RecordDeadTvChannel { + get { + return ResourceManager.GetString("RecordDeadTvChannel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording task has been sucessfully created.. + /// + internal static string SchedulerCreateTaskOk { + get { + return ResourceManager.GetString("SchedulerCreateTaskOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ***************************************************************************** + ///IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + ///***************************************************************************** + /// + ///Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors + ///========================================================================= + /// + ///THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, express or implied, including but not limited to the warranties [rest of string was truncated]";. + /// + internal static string SolutionLicense { + get { + return ResourceManager.GetString("SolutionLicense", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset2 Symbol;}} + ///{\colortbl ;\red0\green0\blue255;} + ///{\*\generator Riched20 10.0.10586}\viewkind4\uc1 + ///\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\ul\fs18\par + ///\fs20 Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors.\ulnone\i\fs18\par + ///THIS SOFTWARE IS \ul PROVIDED \ldblquote [rest of string was truncated]";. + /// + internal static string SolutionLicenseRtf { + get { + return ResourceManager.GetString("SolutionLicenseRtf", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to obtain the list of service providers. + /// + internal static string SPListUnableRefresh { + get { + return ResourceManager.GetString("SPListUnableRefresh", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Obtaining the list of service providers.... + /// + internal static string SPObtainingList { + get { + return ResourceManager.GetString("SPObtainingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parsing and extracting the list of providers.... + /// + internal static string SPParsingList { + get { + return ResourceManager.GetString("SPParsingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Properties of the service provider. + /// + internal static string SPProperties { + get { + return ResourceManager.GetString("SPProperties", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The refreshing of the list has been cancelled by the user.. + /// + internal static string UserCancelListRefresh { + get { + return ResourceManager.GetString("UserCancelListRefresh", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Texts.es.resx b/1.5 'Kruger 60'/ChannelList/Properties/Texts.es.resx index c73204f1..a7da8338 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Texts.es.resx +++ b/1.5 'Kruger 60'/ChannelList/Properties/Texts.es.resx @@ -1,245 +1,245 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Canales movistar+ - IPTViewr (1.5 “Kruger 60” alpha 4) - - - IPTViewr: decodificador virtual para movistar+ - - - Alpha (experimental) - - - 1.5 “Kruger 60” alpha 4 - - - No ha sido posible obtener la lista de canales de TV o servicios - - - Obteniendo la lista de canales de TV o servicios... - - - Analizando y extrayendo la lista de servicios... - - - Propiedades del canal de TV o servicio - - - Se está ejecutando la verificación de disponibilidad de canales de TV y de servicios. -Debe cancelarse la verificación antes de poder realizar la acción solicitada. - - - Verificación de servicios en curso - - - La lista de canales puede estar obsoleta. Tiene más de {0} días de antigüedad. - - - La lista de canales tiene {0} días de antigüedad. - - - Se ha obtenido de lista de canales de la caché, pero no contiene canales o servicios. - - - No existe una versión en caché de la lista de canales. Debe actualizar la lista. - - - Error en la configuración de la aplicación - - - Se ha producido un error inesperado durante la inicialización de la aplicación. - - - Error en la configuración de la aplicación - - - Iniciando la aplicación... - - - Se ha producido un error al procesar su solicitud - - - Se ha producido un error inesperado durante la carga de la configuración de la aplicación. -La aplicación no puede continuar y se terminará. - - - Error de inicio de la aplicación - - - No se ha podido localizar el programa 'Ejecución de grabaciones' en '{0}'. - - - <No se ha suministrado una descripción> - - - <No suministrado> - - - No se ha seleccionado un proveedor de servicios - - - - ..\..\solution-license_es.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - No ha sido posible obtener la lista de proveedores de servicios - - - Obteniendo la lista de proveedores de servicios... - - - Analizando y extrayendo la lista de proveedores... - - - Propiedades del proveedor de servicios - - - La actualización de la lista ha sido cancelada por el usuario. - - - Se ha creado correctamente la tarea de grabación. - - - ..\..\solution-license_es.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - El canal de TV seleccionado ha sido marcado como inactivo y puede no estar disponible. - -¿Todavía desea programar una grabación para {0}? - - - Descripción y datos de los canales - - - Paquetes y números de canal - - - Ninguna información ha sido proporcionada en cuanto a dónde ni por qué ocurrio el error. Los detalles del error se muestran a continuación: - - - Al menos un servicio inactivo ha pasado a estar activo. La lista se refrescará para mostrar los nuevos servicios activos. - - - Se va a proceder a descargar la información de la guía electrónica de programación (EPG) por primera vez. La descarga de la EPG es un proceso muy lento (entre 10 y 15 minutos). - -Durante el proceso de descarga la información de EPG o bien no estará disponible o será incompleta. -En las siguientes ejecuciones del programa, la información EPG se actualizará en segundo plano de manera automática (si han transcurrido más de {0} horas desde la última actualización). - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Canales movistar+ - IPTViewr (1.5 “Kruger 60” beta 1) + + + IPTViewr: decodificador virtual para movistar+ + + + Alpha (experimental) + + + 1.5 “Kruger 60” beta 1 + + + No ha sido posible obtener la lista de canales de TV o servicios + + + Obteniendo la lista de canales de TV o servicios... + + + Analizando y extrayendo la lista de servicios... + + + Propiedades del canal de TV o servicio + + + Se está ejecutando la verificación de disponibilidad de canales de TV y de servicios. +Debe cancelarse la verificación antes de poder realizar la acción solicitada. + + + Verificación de servicios en curso + + + La lista de canales puede estar obsoleta. Tiene más de {0} días de antigüedad. + + + La lista de canales tiene {0} días de antigüedad. + + + Se ha obtenido de lista de canales de la caché, pero no contiene canales o servicios. + + + No existe una versión en caché de la lista de canales. Debe actualizar la lista. + + + Error en la configuración de la aplicación + + + Se ha producido un error inesperado durante la inicialización de la aplicación. + + + Error en la configuración de la aplicación + + + Iniciando la aplicación... + + + Se ha producido un error al procesar su solicitud + + + Se ha producido un error inesperado durante la carga de la configuración de la aplicación. +La aplicación no puede continuar y se terminará. + + + Error de inicio de la aplicación + + + No se ha podido localizar el programa 'Ejecución de grabaciones' en '{0}'. + + + <No se ha suministrado una descripción> + + + <No suministrado> + + + No se ha seleccionado un proveedor de servicios + + + + ..\..\solution-license_es.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + No ha sido posible obtener la lista de proveedores de servicios + + + Obteniendo la lista de proveedores de servicios... + + + Analizando y extrayendo la lista de proveedores... + + + Propiedades del proveedor de servicios + + + La actualización de la lista ha sido cancelada por el usuario. + + + Se ha creado correctamente la tarea de grabación. + + + ..\..\solution-license_es.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + El canal de TV seleccionado ha sido marcado como inactivo y puede no estar disponible. + +¿Todavía desea programar una grabación para {0}? + + + Descripción y datos de los canales + + + Paquetes y números de canal + + + Ninguna información ha sido proporcionada en cuanto a dónde ni por qué ocurrio el error. Los detalles del error se muestran a continuación: + + + Al menos un servicio inactivo ha pasado a estar activo. La lista se refrescará para mostrar los nuevos servicios activos. + + + Se va a proceder a descargar la información de la guía electrónica de programación (EPG) por primera vez. La descarga de la EPG es un proceso muy lento (entre 10 y 15 minutos). + +Durante el proceso de descarga la información de EPG o bien no estará disponible o será incompleta. +En las siguientes ejecuciones del programa, la información EPG se actualizará en segundo plano de manera automática (si han transcurrido más de {0} horas desde la última actualización). + \ No newline at end of file diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Texts.resx b/1.5 'Kruger 60'/ChannelList/Properties/Texts.resx index ba72c52e..3b019947 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Texts.resx +++ b/1.5 'Kruger 60'/ChannelList/Properties/Texts.resx @@ -1,250 +1,250 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - movistar+ channels - IPTViewr (1.5“Kruger 60” Alpha 4) - - - IPTViewr: virtual decoder for movistar+ - - - Alpha (experimental) - - - 1.5 “Kruger 60” Alpha 4 - - - Unable to obtain the list of TV channels/services - - - Obtaining list of TV channels/services... - - - Parsing and extracting the list of TV channels/services... - - - Properties of the TV channel/service - - - The verification of available TV channels and services is in progress. -The verification has to be canceled before you can perform the requested action. - - - Services verification is in progress - - - The channel list can be outdated. It is over {0} days old. - - - The channel list is {0} days old. - - - The channel list has been obtained from the cache, but it is empty. - - - No cached version of the channel list exists. You have to refresh the list. - - - Unable to start the application - - - An unexpected error has occurred while initializating the application. - - - Application configuration error - - - Starting application... - - - An error has occurred while processing your request - - - An unexpected error has occured while loading the application configuration. -The application will now end. - - - Application configuration error - - - Unable to find the 'Recorder Launcher' program at '{0}'. - - - <Description has not been provided> - - - <Not provided> - - - No service provider has been selected - - - Unable to open browser for URL '{0}'. - -{1} - - - - ..\..\solution-license.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - Unable to obtain the list of service providers - - - Obtaining the list of service providers... - - - Parsing and extracting the list of providers... - - - Properties of the service provider - - - The refreshing of the list has been cancelled by the user. - - - The recording task has been sucessfully created. - - - ..\..\solution-license.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - The selected TV channel has been marked as inactive and might not be available. - -Do you still want to schedule a recording of {0}? - - - Channel description and data - - - Packages and channel numbers - - - No information has been supplied as to where or why the error occurred. Find error details below: - - - At least one inactive service is now active. The list will be refreshed to show these new active services. - - - The program is about to proceed to download the electronic program guide (EPG) information for the first time. The download of the EPG is a very slow process (between 10 and 15 minutes). - -During the download process, the EPG information will either be unavailable or incomplete. -In subsequent executions of the program, the EPG information will be updated in the background automatically (if more than {0} hours have ellapsed since the last update). - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + movistar+ channels - IPTViewr (1.5“Kruger 60” Beta 1) + + + IPTViewr: virtual decoder for movistar+ + + + Alpha (experimental) + + + 1.5 “Kruger 60” Beta 1 + + + Unable to obtain the list of TV channels/services + + + Obtaining list of TV channels/services... + + + Parsing and extracting the list of TV channels/services... + + + Properties of the TV channel/service + + + The verification of available TV channels and services is in progress. +The verification has to be canceled before you can perform the requested action. + + + Services verification is in progress + + + The channel list can be outdated. It is over {0} days old. + + + The channel list is {0} days old. + + + The channel list has been obtained from the cache, but it is empty. + + + No cached version of the channel list exists. You have to refresh the list. + + + Unable to start the application + + + An unexpected error has occurred while initializating the application. + + + Application configuration error + + + Starting application... + + + An error has occurred while processing your request + + + An unexpected error has occured while loading the application configuration. +The application will now end. + + + Application configuration error + + + Unable to find the 'Recorder Launcher' program at '{0}'. + + + <Description has not been provided> + + + <Not provided> + + + No service provider has been selected + + + Unable to open browser for URL '{0}'. + +{1} + + + + ..\..\solution-license.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Unable to obtain the list of service providers + + + Obtaining the list of service providers... + + + Parsing and extracting the list of providers... + + + Properties of the service provider + + + The refreshing of the list has been cancelled by the user. + + + The recording task has been sucessfully created. + + + ..\..\solution-license.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + The selected TV channel has been marked as inactive and might not be available. + +Do you still want to schedule a recording of {0}? + + + Channel description and data + + + Packages and channel numbers + + + No information has been supplied as to where or why the error occurred. Find error details below: + + + At least one inactive service is now active. The list will be refreshed to show these new active services. + + + The program is about to proceed to download the electronic program guide (EPG) information for the first time. The download of the EPG is a very slow process (between 10 and 15 minutes). + +During the download process, the EPG information will either be unavailable or incomplete. +In subsequent executions of the program, the EPG information will be updated in the background automatically (if more than {0} hours have ellapsed since the last update). + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs index 21df5c27..c59eca05 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs @@ -1,551 +1,551 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Tools.FirstTimeConfig.Properties; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - public partial class ConfigForm : Form - { - private string DefaultRecordingsSavePath; - private bool IsFormAllowedToClose; - - public ConfigForm() - { - InitializeComponent(); - this.Icon = Properties.Resources.FirstTimeConfigIcon; - wizardControl.LabelTitle = labelStepTitle; - wizardControl.PreviousButton = buttonPreviousPage; - wizardControl.NextButton = buttonNextPage; - wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = true; - } // constructor - - private void ConfigForm_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - selectFolder.Description = Properties.Texts.SelectFolderSaveDescription; - openFile.Title = Properties.Texts.OpenFileVlcTitle; - openFile.Filter = Properties.Texts.OpenFileVlcFilter; - - try - { - DefaultRecordingsSavePath = Installation.GetCurrentUserVideosFolder(); - } - catch - { - DefaultRecordingsSavePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); - } // try-catch - - wizardControl.Initialization[wizardPageReadme.Name] = PageReadme_Setup; - wizardControl.Initialization[wizardPagePrerequisites.Name] = PagePrerequisites_Setup; - wizardControl.Initialization[wizardPageFirewall.Name] = PageFirewall_Setup; - wizardControl.Initialization[wizardPageBasic.Name] = PageBasic_Setup; - wizardControl.Initialization[wizardPageRecordings.Name] = PageRecordings_Setup; - - wizardControl.SelectedTab = null; - wizardControl.Visible = false; - } // ConfigForm_Load - - private void ConfigForm_Shown(object sender, EventArgs e) - { - wizardControl.Visible = true; - wizardControl.IsPageAllowed[wizardPageReadme.Name] = true; - wizardControl.SelectedIndex = 0; - } // ConfigForm_Shown - - private void ConfigForm_FormClosing(object sender, FormClosingEventArgs e) - { - e.Cancel = false; - if (IsFormAllowedToClose) return; - - e.Cancel = true; - DialogResult = DialogResult.None; - - if (ConfirmUserCancel()) - { - e.Cancel = false; - DialogResult = DialogResult.Cancel; - } // if - } // ConfigForm_FormClosing - - private void buttonCancel_Click(object sender, EventArgs e) - { - buttonCancel.DialogResult = DialogResult.None; - DialogResult = DialogResult.None; - ConfirmUserCancel(); - } // buttonCancel_Click - - private bool ConfirmUserCancel() - { - if (MessageBox.Show(this, Texts.ConfirmUserCancel, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return false; - EndWizard(DialogResult.Cancel, null, null); - - return true; - } // ConfirmUserCancel - - #region Readme page - - private void PageReadme_Setup() - { - richTextReadme.Rtf = Texts.Readme; - checkReadmeAck.Enabled = false; -#if DEBUG - wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = true; -#else - wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = false; -#endif - } // PageReadme_Setup - - private void richTextReadme_VScroll(object sender, EventArgs e) - { - var pt = richTextReadme.GetPositionFromCharIndex(richTextReadme.TextLength); - pt.Offset(0, -richTextReadme.Height); - - if (pt.Y < (richTextReadme.Height / 2)) - { - checkReadmeAck.Enabled = true; - } // if - } // richTextReadme_VScroll - - private void checkReadmeAck_CheckedChanged(object sender, EventArgs e) - { - wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = checkReadmeAck.Checked; - wizardControl.UpdateWizardButtons(); - } // checkReadmeAck_CheckedChanged - -#endregion - -#region Prerequisites Page - - private void PagePrerequisites_Setup() - { - wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = false; - - buttonVerifyEmb.Visible = true; - linkLabelSetupEmb.Enabled = Installation.CheckRedistFile(Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit); - linkLabelPrerequisiteEmb.Enabled = true; - - buttonVerifySqlCe.Visible = false; - linkLabelSetupSqlCe.Enabled = false; - linkLabelPrerequisiteSqlCe.Enabled = false; - - buttonVerifyVlc.Visible = false; - linkLabelPrerequisiteVlc.Enabled = false; - labelVlcPath.Enabled = false; - textBoxVlc.Enabled = false; - buttonFindVlc.Enabled = false; - buttonTestVlc.Enabled = false; - - PagePrerequisites_Step1(false); - } // PagePrerequisites_Setup - - private void PagePrerequisites_Step1(bool withUi) - { - // Here lies .Net verification. This is no longer needed, as the MSI checks if installed or not - - linkLabelSetupEmb.Focus(); - PagePrerequisites_Step2(false); - } // PagePrerequisites_Step1 - - private void PagePrerequisites_Step2(bool withUi) - { - string message; - - var installed = Installation.IsEmbInstalled(out message); - if (withUi) - { - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, - installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); - } // if - if (!installed) return; - - pictureBoxEmbOk.Image = Resources.Sucess_16x16; - buttonVerifyEmb.Visible = false; - linkLabelSetupEmb.Enabled = false; - linkLabelPrerequisiteEmb.Enabled = false; - - buttonVerifySqlCe.Visible = true; - linkLabelSetupSqlCe.Enabled = Installation.CheckRedistFile(Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit); - linkLabelPrerequisiteSqlCe.Enabled = true; - linkLabelSetupSqlCe.Focus(); - - PagePrerequisites_Step3(false); - } // PagePrerequisites_Step2 - - private void PagePrerequisites_Step3(bool withUi) - { - string message; - - var installed = Installation.IsSqlCeInstalled(out message); - if (withUi) - { - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, - installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); - } // if - if (!installed) return; - - pictureBoxSqlCeOk.Image = Resources.Sucess_16x16; - buttonVerifySqlCe.Visible = false; - linkLabelSetupSqlCe.Enabled = false; - linkLabelPrerequisiteSqlCe.Enabled = false; - - buttonVerifyVlc.Visible = true; - linkLabelPrerequisiteVlc.Enabled = true; - linkLabelPrerequisiteVlc.Focus(); - labelVlcPath.Enabled = true; - textBoxVlc.Enabled = true; - buttonFindVlc.Enabled = true; - buttonTestVlc.Enabled = false; - - PagePrerequisites_Step4(false); - } // PagePrerequisites_Step3 - - private void PagePrerequisites_Step4(bool withUi) - { - string message; - string path; - - path = textBoxVlc.Text; - var installed = Installation.IsVlcInstalled(out message, ref path); - textBoxVlc.Text = path; - if (withUi) - { - labelVlcInstallCheckResult.Text = null; - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, - installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); - } - else - { - if (!string.IsNullOrEmpty(path)) - { - labelVlcInstallCheckResult.Text = message; - } // if - } // if-else - if (!installed) return; - - pictureBoxVlcOk.Image = Resources.Sucess_16x16; - linkLabelPrerequisiteVlc.Visible = false; - buttonVerifyVlc.Visible = false; - //buttonFindVlc.Enabled = false; - buttonTestVlc.Enabled = true; - buttonTestVlc.Focus(); - - PagePrerequisites_Step5(false); - } // PagePrerequisites_Step4 - - private void PagePrerequisites_Step5(bool withUi) - { - wizardControl.IsPageAllowed[wizardPageFirewall.Name] = true; - wizardControl.UpdateWizardButtons(); - } // PagePrerequisites_Step5 - - private void linkLabelPrerequisiteNet_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Installation.OpenUrl(this, Properties.Texts.DownloadUrlNet); - } // linkLabelPrerequisiteNet_LinkClicked - - private void linkLabelSetupEmb_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - var launched = Installation.RedistSetup(this, Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit, - labelEmb.Text, labelEmb, SetupEmb_Completed); - if (!launched) return; - - pictureBoxEmbOk.Image = Resources.Status_Wait_16x16; - linkLabelSetupEmb.Enabled = false; - linkLabelPrerequisiteEmb.Enabled = false; - buttonVerifyEmb.Enabled = false; - wizardControl.ShowWizardButtons(false); - } // linkLabelSetupEmb_LinkClicked - - private void SetupEmb_Completed(bool success) - { - pictureBoxEmbOk.Image = success ? Resources.Status_Pending_16x16 : Resources.Error_16x16; - linkLabelSetupEmb.Enabled = true; - linkLabelPrerequisiteEmb.Enabled = true; - buttonVerifyEmb.Enabled = true; - wizardControl.ShowWizardButtons(true); - } // SetupEmb_Completed - - private void linkLabelPrerequisiteEmb_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Installation.PromptDownloadFromVendor(this, "Microsoft", Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit); - Installation.OpenUrl(this, Properties.Texts.DownloadUrlEmb); - } // linkLabelPrerequisiteEmb_LinkClicked - - private void linkLabelSetupSqlCe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - var launched = Installation.RedistSetup(this, Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit, - labelSqlCe.Text, labelSqlCe, SetupSqlCe_Completed); - if (!launched) return; - - pictureBoxSqlCeOk.Image = Resources.Status_Wait_16x16; - linkLabelSetupSqlCe.Enabled = false; - linkLabelPrerequisiteSqlCe.Enabled = false; - buttonVerifySqlCe.Enabled = false; - wizardControl.ShowWizardButtons(false); - } // linkLabelSetupSqlCe_LinkClicked - - private void SetupSqlCe_Completed(bool success) - { - pictureBoxSqlCeOk.Image = success ? Resources.Status_Pending_16x16 : Resources.Error_16x16; - linkLabelSetupSqlCe.Enabled = true; - linkLabelPrerequisiteSqlCe.Enabled = true; - buttonVerifySqlCe.Enabled = true; - wizardControl.ShowWizardButtons(true); - } // SetupSqlCe_Completed - - private void linkLabelPrerequisiteSqlCe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Installation.PromptDownloadFromVendor(this, "Microsoft", Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit); - Installation.OpenUrl(this, Properties.Texts.DownloadUrlSqlCe); - } // linkLabelPrerequisiteSqlCe_LinkClicked - - private void linkLabelPrerequisiteVlc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Installation.OpenUrl(this, Properties.Texts.DownloadUrlVlc); - } // linkLabelPrerequisiteVlc_LinkClicked - - private void buttonVerifyNet_Click(object sender, EventArgs e) - { - PagePrerequisites_Step1(true); - } // buttonVerifyNet_Click - - private void buttonVerifyEmb_Click(object sender, EventArgs e) - { - PagePrerequisites_Step2(true); - } // buttonVerifyEmb_Click - - private void buttonVerifySqlCe_Click(object sender, EventArgs e) - { - PagePrerequisites_Step3(true); - } // buttonVerifySqlCe_Click - - private void buttonVerifyVlc_Click(object sender, EventArgs e) - { - PagePrerequisites_Step4(true); - } // buttonVerifyVlc_Click - - private void buttonFindVlc_Click(object sender, EventArgs e) - { - var oldValue = textBoxVlc.Text; - - if (!string.IsNullOrEmpty(textBoxVlc.Text)) - { - openFile.InitialDirectory = Path.GetDirectoryName(textBoxVlc.Text); - openFile.FileName = Path.GetFileName(textBoxVlc.Text); ; - } // if - - if (openFile.ShowDialog(this) != DialogResult.OK) return; - - textBoxVlc.Text = openFile.FileName; - buttonVerifyVlc.Visible = (oldValue != textBoxVlc.Text); - buttonVerifyVlc.Focus(); - } // buttonFindVlc_Click - - private void buttonTestVlc_Click(object sender, EventArgs e) - { - string message; - - var testMedia = Installation.GetTestMedia(); - var installed = Installation.TestVlcInstallation(out message, textBoxVlc.Text, testMedia); - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, - installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); - - if (!installed) return; - } // buttonTestVlc_Click - -#endregion - -#region Firewall page - - private void PageFirewall_Setup() - { - checkBoxFirewallDecoder.Checked = true; - checkBoxFirewallVlc.Checked = true; -#if DEBUG - checkEnableAnalytics.Checked = false; -#endif - } // PageFirewall_Setup - - private void checkBoxFirewall_CheckedChanged(object sender, EventArgs e) - { - var enabled = (checkBoxFirewallDecoder.Checked) || (checkBoxFirewallVlc.Checked); - buttonFirewall.Enabled = enabled; - labelFirewallWarning.Enabled = enabled; - } // checkBoxFirewall_CheckedChanged - - private void buttonFirewall_Click(object sender, EventArgs e) - { - var result = Installation.RunSelfForFirewall( - checkBoxFirewallDecoder.Checked ? Program.AppUiConfig.Folders.Install : null, - checkBoxFirewallVlc.Checked ? textBoxVlc.Text : null); - - if (result.Message == null) return; - if (result.InnerException != null) - { - MessageBox.Show(this, Texts.FirewallException + "\r\n" + result.InnerException.ToString(), this.Text, - MessageBoxButtons.OK, MessageBoxIcon.Error); - } - else if (result.IsOk) - { - checkBoxFirewallDecoder.Enabled = false; - checkBoxFirewallVlc.Enabled = false; - buttonFirewall.Enabled = false; - labelFirewallWarning.Enabled = false; - checkFirewallManual.Enabled = false; - - wizardControl.IsPageAllowed[wizardPageBasic.Name] = true; - wizardControl.UpdateWizardButtons(); - } - else - { - MessageBox.Show(this, result.Message, this.Text, MessageBoxButtons.OK, result.IsOk ? MessageBoxIcon.Information : MessageBoxIcon.Warning); - } // if-else - } // buttonFirewall_Click - - private void checkFirewallManual_CheckedChanged(object sender, EventArgs e) - { - var enabled = !checkFirewallManual.Checked; - - checkBoxFirewallDecoder.Enabled = enabled; - checkBoxFirewallVlc.Enabled = enabled; - buttonFirewall.Enabled = enabled; - labelFirewallWarning.Enabled = enabled; - - wizardControl.IsPageAllowed[wizardPageBasic.Name] = !enabled; - wizardControl.UpdateWizardButtons(); - } // checkFirewallManual_CheckedChanged - - private void checkEnableAnalytics_CheckedChanged(object sender, EventArgs e) - { - var enabled = checkEnableAnalytics.Checked; - -#if (DEBUG == false) - if (!enabled) - { - MessageBox.Show(this, Properties.Texts.AnalyticsKeepChecked, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); - } // if -#endif - - checkAnalyticsUsage.Checked = enabled; - checkAnalyticsUsage.Enabled = enabled; - - checkAnalyticsExceptions.Checked = enabled; - checkAnalyticsExceptions.Enabled = enabled; - } // checkEnableAnalytics_CheckedChanged - - private void linkAnalyticsHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - HelpDialog.ShowRtfHelp(this, Properties.Texts.GoogleTelemetry, Properties.Texts.TelemetryHelpCaption); - } // linkAnalyticsHelp_LinkClicked - -#endregion - -#region Basic page - - private void PageBasic_Setup() - { - wizardControl.IsPageAllowed[wizardPageRecordings.Name] = true; - } // PageBasic_Setup - -#endregion - -#region Recording page - - private void PageRecordings_Setup() - { - textBoxSave.Text = DefaultRecordingsSavePath; - labelCreatingConfig.Visible = false; - } // PageRecordings_Setup - - private void buttonBrowseSave_Click(object sender, EventArgs e) - { - selectFolder.NewStyle = true; - selectFolder.SelectedPath = string.IsNullOrEmpty(textBoxSave.Text) ? DefaultRecordingsSavePath : textBoxSave.Text; - selectFolder.RootFolder = Environment.SpecialFolder.Desktop; - if (selectFolder.ShowDialog(this) != DialogResult.OK) return; - - textBoxSave.Text = selectFolder.SelectedPath; - - labelSaveSubFolder.Enabled = true; - textSaveSubFolder.Enabled = true; - buttonConfig.Enabled = true; - buttonConfig.Focus(); - } // buttonBrowseSave_Click - - private void checkSaveSubfolder_CheckedChanged(object sender, EventArgs e) - { - labelSaveSubFolder.Enabled = checkSaveSubfolder.Checked; - textBoxSave.Enabled = checkSaveSubfolder.Checked; - } // checkSaveSubfolder_CheckedChanged - - private void buttonConfig_Click(object sender, EventArgs e) - { - string message; - string xmlConfigPath; - - var rootFolder = textBoxSave.Text; - var subFolder = textSaveSubFolder.Text.Trim(); - if (subFolder != string.Empty) - { - rootFolder = Path.Combine(rootFolder, subFolder); - } // if - - xmlConfigPath = Path.Combine(Program.AppUiConfig.Folders.Base, "user-config.xml"); - - if (File.Exists(xmlConfigPath)) - { - if (MessageBox.Show(this, Properties.Texts.OverwriteXmlConfigFile, this.Text, - MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes) - { - return; - } // if - } // if - - labelCreatingConfig.Visible = true; - labelCreatingConfig.Refresh(); - var success = Configuration.Create(textBoxVlc.Text, - rootFolder, - new TelemetryConfiguration(checkEnableAnalytics.Checked, checkAnalyticsUsage.Checked, checkAnalyticsExceptions.Checked), - //new EpgConfig(checkEpg.Checked, checkEpgAutoUpdate.Checked ? 24 : -1, 7), - radioChannelSDPriority.Checked, - xmlConfigPath, out message); - if (success) - { - EndWizard(DialogResult.OK, null, null); - } - else - { - EndWizard(DialogResult.Abort, message, null); - } // if-else - } // buttonConfig_Click - -#endregion - -#region End wizard - - private void EndWizard(DialogResult result, string message, Exception ex) - { - IsFormAllowedToClose = true; - Program.SetWizardResult(result, message, ex); - Close(); - } // EndWizard - -#endregion - } // class ConfigForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Project.IpTv.Common.Telemetry; +using Project.IpTv.Tools.FirstTimeConfig.Properties; +using Project.IpTv.UiServices.Common.Forms; +using Project.IpTv.UiServices.Configuration; +using Project.IpTv.UiServices.Configuration.Schema2014.Config; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Project.IpTv.Tools.FirstTimeConfig +{ + public partial class ConfigForm : Form + { + private string DefaultRecordingsSavePath; + private bool IsFormAllowedToClose; + + public ConfigForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.FirstTimeConfigIcon; + wizardControl.LabelTitle = labelStepTitle; + wizardControl.PreviousButton = buttonPreviousPage; + wizardControl.NextButton = buttonNextPage; + wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = true; + } // constructor + + private void ConfigForm_Load(object sender, EventArgs e) + { + BasicGoogleTelemetry.SendScreenHit(this); + + selectFolder.Description = Properties.Texts.SelectFolderSaveDescription; + openFile.Title = Properties.Texts.OpenFileVlcTitle; + openFile.Filter = Properties.Texts.OpenFileVlcFilter; + + try + { + DefaultRecordingsSavePath = Installation.GetCurrentUserVideosFolder(); + } + catch + { + DefaultRecordingsSavePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); + } // try-catch + + wizardControl.Initialization[wizardPageReadme.Name] = PageReadme_Setup; + wizardControl.Initialization[wizardPagePrerequisites.Name] = PagePrerequisites_Setup; + wizardControl.Initialization[wizardPageFirewall.Name] = PageFirewall_Setup; + wizardControl.Initialization[wizardPageBasic.Name] = PageBasic_Setup; + wizardControl.Initialization[wizardPageRecordings.Name] = PageRecordings_Setup; + + wizardControl.SelectedTab = null; + wizardControl.Visible = false; + } // ConfigForm_Load + + private void ConfigForm_Shown(object sender, EventArgs e) + { + wizardControl.Visible = true; + wizardControl.IsPageAllowed[wizardPageReadme.Name] = true; + wizardControl.SelectedIndex = 0; + } // ConfigForm_Shown + + private void ConfigForm_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = false; + if (IsFormAllowedToClose) return; + + e.Cancel = true; + DialogResult = DialogResult.None; + + if (ConfirmUserCancel()) + { + e.Cancel = false; + DialogResult = DialogResult.Cancel; + } // if + } // ConfigForm_FormClosing + + private void buttonCancel_Click(object sender, EventArgs e) + { + buttonCancel.DialogResult = DialogResult.None; + DialogResult = DialogResult.None; + ConfirmUserCancel(); + } // buttonCancel_Click + + private bool ConfirmUserCancel() + { + if (MessageBox.Show(this, Texts.ConfirmUserCancel, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return false; + EndWizard(DialogResult.Cancel, null, null); + + return true; + } // ConfirmUserCancel + + #region Readme page + + private void PageReadme_Setup() + { + richTextReadme.Rtf = Texts.Readme; + checkReadmeAck.Enabled = false; +#if DEBUG + wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = true; +#else + wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = false; +#endif + } // PageReadme_Setup + + private void richTextReadme_VScroll(object sender, EventArgs e) + { + var pt = richTextReadme.GetPositionFromCharIndex(richTextReadme.TextLength); + pt.Offset(0, -richTextReadme.Height); + + if (pt.Y < (richTextReadme.Height / 2)) + { + checkReadmeAck.Enabled = true; + } // if + } // richTextReadme_VScroll + + private void checkReadmeAck_CheckedChanged(object sender, EventArgs e) + { + wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = checkReadmeAck.Checked; + wizardControl.UpdateWizardButtons(); + } // checkReadmeAck_CheckedChanged + +#endregion + +#region Prerequisites Page + + private void PagePrerequisites_Setup() + { + wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = false; + + buttonVerifyEmb.Visible = true; + linkLabelSetupEmb.Enabled = Installation.CheckRedistFile(Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit); + linkLabelPrerequisiteEmb.Enabled = true; + + buttonVerifySqlCe.Visible = false; + linkLabelSetupSqlCe.Enabled = false; + linkLabelPrerequisiteSqlCe.Enabled = false; + + buttonVerifyVlc.Visible = false; + linkLabelPrerequisiteVlc.Enabled = false; + labelVlcPath.Enabled = false; + textBoxVlc.Enabled = false; + buttonFindVlc.Enabled = false; + buttonTestVlc.Enabled = false; + + PagePrerequisites_Step1(false); + } // PagePrerequisites_Setup + + private void PagePrerequisites_Step1(bool withUi) + { + // Here lies .Net verification. This is no longer needed, as the MSI checks if installed or not + + linkLabelSetupEmb.Focus(); + PagePrerequisites_Step2(false); + } // PagePrerequisites_Step1 + + private void PagePrerequisites_Step2(bool withUi) + { + string message; + + var installed = Installation.IsEmbInstalled(out message); + if (withUi) + { + MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + } // if + if (!installed) return; + + pictureBoxEmbOk.Image = Resources.Sucess_16x16; + buttonVerifyEmb.Visible = false; + linkLabelSetupEmb.Enabled = false; + linkLabelPrerequisiteEmb.Enabled = false; + + buttonVerifySqlCe.Visible = true; + linkLabelSetupSqlCe.Enabled = Installation.CheckRedistFile(Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit); + linkLabelPrerequisiteSqlCe.Enabled = true; + linkLabelSetupSqlCe.Focus(); + + PagePrerequisites_Step3(false); + } // PagePrerequisites_Step2 + + private void PagePrerequisites_Step3(bool withUi) + { + string message; + + var installed = Installation.IsSqlCeInstalled(out message); + if (withUi) + { + MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + } // if + if (!installed) return; + + pictureBoxSqlCeOk.Image = Resources.Sucess_16x16; + buttonVerifySqlCe.Visible = false; + linkLabelSetupSqlCe.Enabled = false; + linkLabelPrerequisiteSqlCe.Enabled = false; + + buttonVerifyVlc.Visible = true; + linkLabelPrerequisiteVlc.Enabled = true; + linkLabelPrerequisiteVlc.Focus(); + labelVlcPath.Enabled = true; + textBoxVlc.Enabled = true; + buttonFindVlc.Enabled = true; + buttonTestVlc.Enabled = false; + + PagePrerequisites_Step4(false); + } // PagePrerequisites_Step3 + + private void PagePrerequisites_Step4(bool withUi) + { + string message; + string path; + + path = textBoxVlc.Text; + var installed = Installation.IsVlcInstalled(out message, ref path); + textBoxVlc.Text = path; + if (withUi) + { + labelVlcInstallCheckResult.Text = null; + MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + } + else + { + if (!string.IsNullOrEmpty(path)) + { + labelVlcInstallCheckResult.Text = message; + } // if + } // if-else + if (!installed) return; + + pictureBoxVlcOk.Image = Resources.Sucess_16x16; + linkLabelPrerequisiteVlc.Visible = false; + buttonVerifyVlc.Visible = false; + //buttonFindVlc.Enabled = false; + buttonTestVlc.Enabled = true; + buttonTestVlc.Focus(); + + PagePrerequisites_Step5(false); + } // PagePrerequisites_Step4 + + private void PagePrerequisites_Step5(bool withUi) + { + wizardControl.IsPageAllowed[wizardPageFirewall.Name] = true; + wizardControl.UpdateWizardButtons(); + } // PagePrerequisites_Step5 + + private void linkLabelPrerequisiteNet_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Installation.OpenUrl(this, Properties.Texts.DownloadUrlNet); + } // linkLabelPrerequisiteNet_LinkClicked + + private void linkLabelSetupEmb_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + var launched = Installation.RedistSetup(this, Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit, + labelEmb.Text, labelEmb, SetupEmb_Completed); + if (!launched) return; + + pictureBoxEmbOk.Image = Resources.Status_Wait_16x16; + linkLabelSetupEmb.Enabled = false; + linkLabelPrerequisiteEmb.Enabled = false; + buttonVerifyEmb.Enabled = false; + wizardControl.ShowWizardButtons(false); + } // linkLabelSetupEmb_LinkClicked + + private void SetupEmb_Completed(bool success) + { + pictureBoxEmbOk.Image = success ? Resources.Status_Pending_16x16 : Resources.Error_16x16; + linkLabelSetupEmb.Enabled = true; + linkLabelPrerequisiteEmb.Enabled = true; + buttonVerifyEmb.Enabled = true; + wizardControl.ShowWizardButtons(true); + } // SetupEmb_Completed + + private void linkLabelPrerequisiteEmb_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Installation.PromptDownloadFromVendor(this, "Microsoft", Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit); + Installation.OpenUrl(this, Properties.Texts.DownloadUrlEmb); + } // linkLabelPrerequisiteEmb_LinkClicked + + private void linkLabelSetupSqlCe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + var launched = Installation.RedistSetup(this, Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit, + labelSqlCe.Text, labelSqlCe, SetupSqlCe_Completed); + if (!launched) return; + + pictureBoxSqlCeOk.Image = Resources.Status_Wait_16x16; + linkLabelSetupSqlCe.Enabled = false; + linkLabelPrerequisiteSqlCe.Enabled = false; + buttonVerifySqlCe.Enabled = false; + wizardControl.ShowWizardButtons(false); + } // linkLabelSetupSqlCe_LinkClicked + + private void SetupSqlCe_Completed(bool success) + { + pictureBoxSqlCeOk.Image = success ? Resources.Status_Pending_16x16 : Resources.Error_16x16; + linkLabelSetupSqlCe.Enabled = true; + linkLabelPrerequisiteSqlCe.Enabled = true; + buttonVerifySqlCe.Enabled = true; + wizardControl.ShowWizardButtons(true); + } // SetupSqlCe_Completed + + private void linkLabelPrerequisiteSqlCe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Installation.PromptDownloadFromVendor(this, "Microsoft", Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit); + Installation.OpenUrl(this, Properties.Texts.DownloadUrlSqlCe); + } // linkLabelPrerequisiteSqlCe_LinkClicked + + private void linkLabelPrerequisiteVlc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Installation.OpenUrl(this, Properties.Texts.DownloadUrlVlc); + } // linkLabelPrerequisiteVlc_LinkClicked + + private void buttonVerifyNet_Click(object sender, EventArgs e) + { + PagePrerequisites_Step1(true); + } // buttonVerifyNet_Click + + private void buttonVerifyEmb_Click(object sender, EventArgs e) + { + PagePrerequisites_Step2(true); + } // buttonVerifyEmb_Click + + private void buttonVerifySqlCe_Click(object sender, EventArgs e) + { + PagePrerequisites_Step3(true); + } // buttonVerifySqlCe_Click + + private void buttonVerifyVlc_Click(object sender, EventArgs e) + { + PagePrerequisites_Step4(true); + } // buttonVerifyVlc_Click + + private void buttonFindVlc_Click(object sender, EventArgs e) + { + var oldValue = textBoxVlc.Text; + + if (!string.IsNullOrEmpty(textBoxVlc.Text)) + { + openFile.InitialDirectory = Path.GetDirectoryName(textBoxVlc.Text); + openFile.FileName = Path.GetFileName(textBoxVlc.Text); ; + } // if + + if (openFile.ShowDialog(this) != DialogResult.OK) return; + + textBoxVlc.Text = openFile.FileName; + buttonVerifyVlc.Visible = (oldValue != textBoxVlc.Text); + buttonVerifyVlc.Focus(); + } // buttonFindVlc_Click + + private void buttonTestVlc_Click(object sender, EventArgs e) + { + string message; + + var testMedia = Installation.GetTestMedia(); + var installed = Installation.TestVlcInstallation(out message, textBoxVlc.Text, testMedia); + MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + + if (!installed) return; + } // buttonTestVlc_Click + +#endregion + +#region Firewall page + + private void PageFirewall_Setup() + { + checkBoxFirewallDecoder.Checked = true; + checkBoxFirewallVlc.Checked = true; +#if DEBUG + checkEnableAnalytics.Checked = false; +#endif + } // PageFirewall_Setup + + private void checkBoxFirewall_CheckedChanged(object sender, EventArgs e) + { + var enabled = (checkBoxFirewallDecoder.Checked) || (checkBoxFirewallVlc.Checked); + buttonFirewall.Enabled = enabled; + labelFirewallWarning.Enabled = enabled; + } // checkBoxFirewall_CheckedChanged + + private void buttonFirewall_Click(object sender, EventArgs e) + { + var result = Installation.RunSelfForFirewall( + checkBoxFirewallDecoder.Checked ? Program.AppUiConfig.Folders.Install : null, + checkBoxFirewallVlc.Checked ? textBoxVlc.Text : null); + + if (result.Message == null) return; + if (result.InnerException != null) + { + MessageBox.Show(this, Texts.FirewallException + "\r\n" + result.InnerException.ToString(), this.Text, + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else if (result.IsOk) + { + checkBoxFirewallDecoder.Enabled = false; + checkBoxFirewallVlc.Enabled = false; + buttonFirewall.Enabled = false; + labelFirewallWarning.Enabled = false; + checkFirewallManual.Enabled = false; + + wizardControl.IsPageAllowed[wizardPageBasic.Name] = true; + wizardControl.UpdateWizardButtons(); + } + else + { + MessageBox.Show(this, result.Message, this.Text, MessageBoxButtons.OK, result.IsOk ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + } // if-else + } // buttonFirewall_Click + + private void checkFirewallManual_CheckedChanged(object sender, EventArgs e) + { + var enabled = !checkFirewallManual.Checked; + + checkBoxFirewallDecoder.Enabled = enabled; + checkBoxFirewallVlc.Enabled = enabled; + buttonFirewall.Enabled = enabled; + labelFirewallWarning.Enabled = enabled; + + wizardControl.IsPageAllowed[wizardPageBasic.Name] = !enabled; + wizardControl.UpdateWizardButtons(); + } // checkFirewallManual_CheckedChanged + + private void checkEnableAnalytics_CheckedChanged(object sender, EventArgs e) + { + var enabled = checkEnableAnalytics.Checked; + +#if (DEBUG == false) + if (!enabled) + { + MessageBox.Show(this, Properties.Texts.AnalyticsKeepChecked, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } // if +#endif + + checkAnalyticsUsage.Checked = enabled; + checkAnalyticsUsage.Enabled = enabled; + + checkAnalyticsExceptions.Checked = enabled; + checkAnalyticsExceptions.Enabled = enabled; + } // checkEnableAnalytics_CheckedChanged + + private void linkAnalyticsHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + HelpDialog.ShowRtfHelp(this, Properties.Texts.GoogleTelemetry, Properties.Texts.TelemetryHelpCaption); + } // linkAnalyticsHelp_LinkClicked + +#endregion + +#region Basic page + + private void PageBasic_Setup() + { + wizardControl.IsPageAllowed[wizardPageRecordings.Name] = true; + } // PageBasic_Setup + +#endregion + +#region Recording page + + private void PageRecordings_Setup() + { + textBoxSave.Text = DefaultRecordingsSavePath; + labelCreatingConfig.Visible = false; + } // PageRecordings_Setup + + private void buttonBrowseSave_Click(object sender, EventArgs e) + { + selectFolder.NewStyle = true; + selectFolder.SelectedPath = string.IsNullOrEmpty(textBoxSave.Text) ? DefaultRecordingsSavePath : textBoxSave.Text; + selectFolder.RootFolder = Environment.SpecialFolder.Desktop; + if (selectFolder.ShowDialog(this) != DialogResult.OK) return; + + textBoxSave.Text = selectFolder.SelectedPath; + + labelSaveSubFolder.Enabled = true; + textSaveSubFolder.Enabled = true; + buttonConfig.Enabled = true; + buttonConfig.Focus(); + } // buttonBrowseSave_Click + + private void checkSaveSubfolder_CheckedChanged(object sender, EventArgs e) + { + labelSaveSubFolder.Enabled = checkSaveSubfolder.Checked; + textBoxSave.Enabled = checkSaveSubfolder.Checked; + } // checkSaveSubfolder_CheckedChanged + + private void buttonConfig_Click(object sender, EventArgs e) + { + string message; + string xmlConfigPath; + + var rootFolder = textBoxSave.Text; + var subFolder = textSaveSubFolder.Text.Trim(); + if (subFolder != string.Empty) + { + rootFolder = Path.Combine(rootFolder, subFolder); + } // if + + xmlConfigPath = Path.Combine(Program.AppUiConfig.Folders.Base, "user-config.xml"); + + if (File.Exists(xmlConfigPath)) + { + if (MessageBox.Show(this, Properties.Texts.OverwriteXmlConfigFile, this.Text, + MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes) + { + return; + } // if + } // if + + labelCreatingConfig.Visible = true; + labelCreatingConfig.Refresh(); + var success = Configuration.Create(textBoxVlc.Text, + rootFolder, + new TelemetryConfiguration(checkEnableAnalytics.Checked, checkAnalyticsUsage.Checked, checkAnalyticsExceptions.Checked), + //new EpgConfig(checkEpg.Checked, checkEpgAutoUpdate.Checked ? 24 : -1, 7), + radioChannelSDPriority.Checked, + xmlConfigPath, out message); + if (success) + { + EndWizard(DialogResult.OK, null, null); + } + else + { + EndWizard(DialogResult.Abort, message, null); + } // if-else + } // buttonConfig_Click + +#endregion + +#region End wizard + + private void EndWizard(DialogResult result, string message, Exception ex) + { + IsFormAllowedToClose = true; + Program.SetWizardResult(result, message, ex); + Close(); + } // EndWizard + +#endregion + } // class ConfigForm +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx index fe4b2256..f4881029 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx @@ -1,2057 +1,2057 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 134, 17 - - - - Segoe UI Semibold, 10pt, style=Bold - - - TopLeft - - - - NoControl - - - 0, 0 - - - 0, 0, 70, 0 - - - 493, 60 - - - - 5 - - - (Step title) - - - MiddleLeft - - - labelStepTitle - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - NoControl - - - 129, 11 - - - 100, 23 - - - 0 - - - &Back - - - MiddleRight - - - ImageBeforeText - - - buttonPreviousPage - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panelButtons - - - 0 - - - NoControl - - - 235, 10 - - - 125, 25 - - - 1 - - - &Next - - - MiddleRight - - - ImageBeforeText - - - buttonNextPage - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panelButtons - - - 1 - - - NoControl - - - 377, 10 - - - 100, 25 - - - 2 - - - &Cancel - - - MiddleRight - - - ImageBeforeText - - - buttonCancel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panelButtons - - - 2 - - - -3, 313 - - - 496, 55 - - - 6 - - - panelButtons - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - Top, Bottom, Left, Right - - - Buttons - - - True - - - NoControl - - - 8, 225 - - - 361, 17 - - - 2 - - - I have read and understood the information above and wish to proceed - - - checkReadmeAck - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageReadme - - - 0 - - - 8, 57 - - - ForcedVertical - - - 474, 161 - - - 1 - - - - - - 0.75 - - - richTextReadme - - - System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageReadme - - - 1 - - - NoControl - - - 8, 6 - - - 48, 48 - - - CenterImage - - - 0 - - - pictureIconReadme - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageReadme - - - 2 - - - Segoe UI Semibold, 12pt, style=Bold - - - NoControl - - - 62, 6 - - - 420, 48 - - - 0 - - - Please read the following information to the end before using this program. - - - MiddleLeft - - - labelReadmeWarning - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageReadme - - - 3 - - - 4, 25 - - - 3, 3, 3, 3 - - - 485, 230 - - - 3 - - - Readme - - - Important information regarding the use of this program - - - wizardPageReadme - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardControl - - - 0 - - - NoControl - - - 237, 76 - - - 100, 25 - - - 6 - - - &Test... - - - MiddleRight - - - ImageBeforeText - - - buttonTestVlc - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 0 - - - NoControl - - - 9, 114 - - - 460, 42 - - - 7 - - - labelVlcInstallCheckResult - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 1 - - - NoControl - - - 131, 76 - - - 100, 25 - - - 5 - - - Set &location... - - - MiddleRight - - - ImageBeforeText - - - buttonFindVlc - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 2 - - - 131, 50 - - - 338, 20 - - - 4 - - - textBoxVlc - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 3 - - - True - - - NoControl - - - 6, 53 - - - 101, 13 - - - 3 - - - VLC player location: - - - labelVlcPath - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 4 - - - NoControl - - - 6, 24 - - - 16, 16 - - - CenterImage - - - 8 - - - pictureBoxVlcOk - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 5 - - - NoControl - - - 369, 19 - - - 100, 25 - - - 2 - - - &Verify... - - - MiddleRight - - - ImageBeforeText - - - buttonVerifyVlc - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 6 - - - True - - - NoControl - - - 216, 25 - - - 3, 3, 3, 3 - - - 139, 13 - - - 1 - - - Download from videolan.org - - - linkLabelPrerequisiteVlc - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 7 - - - True - - - Tahoma, 8.25pt - - - NoControl - - - 28, 25 - - - 3, 3, 3, 3 - - - 101, 13 - - - 0 - - - Videolan VLC player - - - labelVlc - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupVlc - - - 8 - - - 7, 138 - - - 475, 109 - - - 1 - - - Additional software - - - groupVlc - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPagePrerequisites - - - 0 - - - True - - - NoControl - - - 26, 100 - - - 127, 13 - - - 5 - - - Install from local setup file - - - linkLabelSetupSqlCe - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 0 - - - True - - - NoControl - - - 26, 50 - - - 127, 13 - - - 1 - - - Install from local setup file - - - linkLabelSetupEmb - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 1 - - - NoControl - - - 6, 74 - - - 16, 16 - - - CenterImage - - - 11 - - - pictureBoxSqlCeOk - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 2 - - - NoControl - - - 369, 69 - - - 100, 25 - - - 7 - - - &Verify... - - - MiddleRight - - - ImageBeforeText - - - buttonVerifySqlCe - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 3 - - - True - - - NoControl - - - 217, 100 - - - 3, 3, 3, 3 - - - 146, 13 - - - 6 - - - Download from microsoft.com - - - linkLabelPrerequisiteSqlCe - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 4 - - - True - - - Tahoma, 8.25pt - - - NoControl - - - 26, 75 - - - 3, 3, 3, 3 - - - 184, 13 - - - 4 - - - Microsoft® SQL Server® CE 4.0 SP1 - - - labelSqlCe - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 5 - - - NoControl - - - 6, 24 - - - 16, 16 - - - CenterImage - - - 7 - - - pictureBoxEmbOk - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 6 - - - NoControl - - - 369, 19 - - - 100, 25 - - - 3 - - - &Verify... - - - MiddleRight - - - ImageBeforeText - - - buttonVerifyEmb - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 7 - - - True - - - NoControl - - - 217, 50 - - - 3, 3, 3, 3 - - - 146, 13 - - - 2 - - - Download from microsoft.com - - - linkLabelPrerequisiteEmb - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 8 - - - True - - - Tahoma, 8.25pt - - - NoControl - - - 26, 25 - - - 3, 3, 3, 3 - - - 177, 13 - - - 0 - - - Microsoft® Exception Message Box - - - labelEmb - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 9 - - - 6, 6 - - - 475, 126 - - - 0 - - - Download and install pre-requisites - - - groupPrerequisites - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPagePrerequisites - - - 1 - - - 4, 25 - - - 3, 3, 3, 3 - - - 485, 230 - - - 0 - - - Prerequisites - - - Step 1: Ensuring the required software is installed - - - wizardPagePrerequisites - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardControl - - - 1 - - - True - - - NoControl - - - 25, 55 - - - 253, 17 - - - 2 - - - Report application errors and internal exceptions - - - checkAnalyticsExceptions - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupAnalytics - - - 0 - - - True - - - NoControl - - - 294, 62 - - - 174, 13 - - - 3 - - - What is this? Why is this important? - - - TopRight - - - linkAnalyticsHelp - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupAnalytics - - - 1 - - - True - - - NoControl - - - 25, 37 - - - 239, 17 - - - 1 - - - Collect and send anonymous app usage data - - - checkAnalyticsUsage - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupAnalytics - - - 2 - - - True - - - NoControl - - - 6, 19 - - - 237, 17 - - - 0 - - - Help to improve the software (recommended) - - - checkEnableAnalytics - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupAnalytics - - - 3 - - - 6, 134 - - - 473, 87 - - - 1 - - - Usage Data Collection - - - groupAnalytics - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageFirewall - - - 0 - - - True - - - NoControl - - - 6, 99 - - - 320, 17 - - - 4 - - - I'm a computer expert and I will configure the Firewall by myself - - - checkFirewallManual - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupFirewall - - - 0 - - - NoControl - - - 6, 65 - - - 115, 25 - - - 2 - - - C&onfigure... - - - MiddleRight - - - ImageBeforeText - - - buttonFirewall - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupFirewall - - - 1 - - - NoControl - - - 127, 62 - - - 341, 31 - - - 3 - - - Administrator permissions are required to make changes in the firewall configuration. You will be asked to confirm the action. - - - labelFirewallWarning - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupFirewall - - - 2 - - - True - - - NoControl - - - 6, 42 - - - 201, 17 - - - 1 - - - Allow the &VLC player to communicate - - - checkBoxFirewallVlc - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupFirewall - - - 3 - - - True - - - NoControl - - - 6, 19 - - - 345, 17 - - - 0 - - - Allow &all virtual decoder programs to comunicate through the firewall - - - checkBoxFirewallDecoder - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupFirewall - - - 4 - - - 6, 6 - - - 473, 122 - - - 0 - - - Windows Firewall configuration - - - groupFirewall - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageFirewall - - - 1 - - - 4, 25 - - - 3, 3, 3, 3 - - - 485, 230 - - - 1 - - - Firewall - - - Step 2: Windows Firewall and Software Improvement - - - wizardPageFirewall - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardControl - - - 2 - - - True - - - NoControl - - - 9, 101 - - - 458, 17 - - - 2 - - - Give priority to Standard Definition (SD). Corresponding HD channel number will start with 'H' - - - radioChannelSDPriority - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxChannelNumbers - - - 0 - - - True - - - NoControl - - - 9, 78 - - - 436, 17 - - - 1 - - - Give priority to High Definition (HD). Corresponding SD channel number will start with 'S' - - - radioChannelHDPriority - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxChannelNumbers - - - 1 - - - NoControl - - - 6, 21 - - - 462, 54 - - - 0 - - - The list of channels comprises all channels, regardless of their broadcast definition. Therefore, there will be duplicated channel numbers when the same channel is broadcasted in HD and SD. - -Which channels should appear first? - - - labelChannelAssignmentExplanation - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxChannelNumbers - - - 2 - - - 3, 101 - - - 474, 123 - - - 1 - - - Channels number assignment - - - groupBoxChannelNumbers - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageBasic - - - 0 - - - True - - - NoControl - - - 6, 65 - - - 364, 17 - - - 2 - - - Auto-update EPG data if older than 24 hours (at the next app execution) - - - checkEpgAutoUpdate - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupEPG - - - 0 - - - True - - - NoControl - - - 24, 39 - - - 404, 13 - - - 1 - - - Warning! Ony bare EPG functions are implemented and might crash from time to time - - - labelEpgWarning - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupEPG - - - 1 - - - True - - - NoControl - - - 6, 19 - - - 143, 17 - - - 0 - - - Enable EPG functionality - - - checkEpg - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupEPG - - - 2 - - - False - - - 3, 6 - - - 474, 89 - - - 0 - - - Electronic Program Guide (EPG) - - - groupEPG - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageBasic - - - 1 - - - 4, 25 - - - 3, 3, 3, 3 - - - 485, 230 - - - 2 - - - Basic - - - Step 3: Basic configuration and settings - - - wizardPageBasic - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardControl - - - 3 - - - NoControl - - - 8, 173 - - - 469, 35 - - - 2 - - - Creating application configuration and user preferences files... - - - TopCenter - - - False - - - labelCreatingConfig - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageRecordings - - - 0 - - - NoControl - - - 167, 141 - - - 150, 25 - - - 1 - - - Config&ure application - - - MiddleRight - - - ImageBeforeText - - - buttonConfig - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageRecordings - - - 1 - - - True - - - NoControl - - - 9, 64 - - - 357, 17 - - - 3 - - - Cr&eate a sub-folder. Recorded programs will be saved in this sub-folder - - - checkSaveSubfolder - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupRecordConfig - - - 0 - - - 128, 83 - - - 125, 20 - - - 5 - - - movistar+ - - - textSaveSubFolder - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupRecordConfig - - - 1 - - - True - - - NoControl - - - 25, 86 - - - 97, 13 - - - 4 - - - Name of the folder: - - - labelSaveSubFolder - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupRecordConfig - - - 2 - - - NoControl - - - 368, 35 - - - 100, 25 - - - 2 - - - &Select... - - - ImageBeforeText - - - buttonBrowseSave - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupRecordConfig - - - 3 - - - 9, 38 - - - 353, 20 - - - 1 - - - textBoxSave - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupRecordConfig - - - 4 - - - True - - - NoControl - - - 6, 22 - - - 207, 13 - - - 0 - - - Select the default folder for the recordings: - - - labelSaveFolder - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupRecordConfig - - - 5 - - - 3, 6 - - - 474, 120 - - - 0 - - - Recordings configuration - - - groupRecordConfig - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardPageRecordings - - - 2 - - - 4, 25 - - - 485, 230 - - - 4 - - - Recordings - - - Step 4: Configuring the recording functionality - - - wizardPageRecordings - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - wizardControl - - - 4 - - - 0, 61 - - - 493, 259 - - - 0 - - - wizardControl - - - Project.IpTv.Tools.FirstTimeConfig.WizardTabControl, FirstTimeConfig, Version=1.5.40.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 2 - - - True - - - 6, 13 - - - 493, 359 - - - CenterScreen - - - First-time configuration assistant - - - selectFolder - - - Project.IpTv.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.40.0, Culture=neutral, PublicKeyToken=null - - - openFile - - - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ConfigForm - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 134, 17 + + + + Segoe UI Semibold, 10pt, style=Bold + + + TopLeft + + + + NoControl + + + 0, 0 + + + 0, 0, 70, 0 + + + 493, 60 + + + + 5 + + + (Step title) + + + MiddleLeft + + + labelStepTitle + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 129, 11 + + + 100, 23 + + + 0 + + + &Back + + + MiddleRight + + + ImageBeforeText + + + buttonPreviousPage + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelButtons + + + 0 + + + NoControl + + + 235, 10 + + + 125, 25 + + + 1 + + + &Next + + + MiddleRight + + + ImageBeforeText + + + buttonNextPage + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelButtons + + + 1 + + + NoControl + + + 377, 10 + + + 100, 25 + + + 2 + + + &Cancel + + + MiddleRight + + + ImageBeforeText + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelButtons + + + 2 + + + -3, 313 + + + 496, 55 + + + 6 + + + panelButtons + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Top, Bottom, Left, Right + + + Buttons + + + True + + + NoControl + + + 8, 225 + + + 361, 17 + + + 2 + + + I have read and understood the information above and wish to proceed + + + checkReadmeAck + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageReadme + + + 0 + + + 8, 57 + + + ForcedVertical + + + 474, 161 + + + 1 + + + + + + 0.75 + + + richTextReadme + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageReadme + + + 1 + + + NoControl + + + 8, 6 + + + 48, 48 + + + CenterImage + + + 0 + + + pictureIconReadme + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageReadme + + + 2 + + + Segoe UI Semibold, 12pt, style=Bold + + + NoControl + + + 62, 6 + + + 420, 48 + + + 0 + + + Please read the following information to the end before using this program. + + + MiddleLeft + + + labelReadmeWarning + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageReadme + + + 3 + + + 4, 25 + + + 3, 3, 3, 3 + + + 485, 230 + + + 3 + + + Readme + + + Important information regarding the use of this program + + + wizardPageReadme + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardControl + + + 0 + + + NoControl + + + 237, 76 + + + 100, 25 + + + 6 + + + &Test... + + + MiddleRight + + + ImageBeforeText + + + buttonTestVlc + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 0 + + + NoControl + + + 9, 114 + + + 460, 42 + + + 7 + + + labelVlcInstallCheckResult + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 1 + + + NoControl + + + 131, 76 + + + 100, 25 + + + 5 + + + Set &location... + + + MiddleRight + + + ImageBeforeText + + + buttonFindVlc + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 2 + + + 131, 50 + + + 338, 20 + + + 4 + + + textBoxVlc + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 3 + + + True + + + NoControl + + + 6, 53 + + + 101, 13 + + + 3 + + + VLC player location: + + + labelVlcPath + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 4 + + + NoControl + + + 6, 24 + + + 16, 16 + + + CenterImage + + + 8 + + + pictureBoxVlcOk + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 5 + + + NoControl + + + 369, 19 + + + 100, 25 + + + 2 + + + &Verify... + + + MiddleRight + + + ImageBeforeText + + + buttonVerifyVlc + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 6 + + + True + + + NoControl + + + 216, 25 + + + 3, 3, 3, 3 + + + 139, 13 + + + 1 + + + Download from videolan.org + + + linkLabelPrerequisiteVlc + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 7 + + + True + + + Tahoma, 8.25pt + + + NoControl + + + 28, 25 + + + 3, 3, 3, 3 + + + 101, 13 + + + 0 + + + Videolan VLC player + + + labelVlc + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupVlc + + + 8 + + + 7, 138 + + + 475, 109 + + + 1 + + + Additional software + + + groupVlc + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 0 + + + True + + + NoControl + + + 26, 100 + + + 127, 13 + + + 5 + + + Install from local setup file + + + linkLabelSetupSqlCe + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 0 + + + True + + + NoControl + + + 26, 50 + + + 127, 13 + + + 1 + + + Install from local setup file + + + linkLabelSetupEmb + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 1 + + + NoControl + + + 6, 74 + + + 16, 16 + + + CenterImage + + + 11 + + + pictureBoxSqlCeOk + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 2 + + + NoControl + + + 369, 69 + + + 100, 25 + + + 7 + + + &Verify... + + + MiddleRight + + + ImageBeforeText + + + buttonVerifySqlCe + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 3 + + + True + + + NoControl + + + 217, 100 + + + 3, 3, 3, 3 + + + 146, 13 + + + 6 + + + Download from microsoft.com + + + linkLabelPrerequisiteSqlCe + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 4 + + + True + + + Tahoma, 8.25pt + + + NoControl + + + 26, 75 + + + 3, 3, 3, 3 + + + 184, 13 + + + 4 + + + Microsoft® SQL Server® CE 4.0 SP1 + + + labelSqlCe + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 5 + + + NoControl + + + 6, 24 + + + 16, 16 + + + CenterImage + + + 7 + + + pictureBoxEmbOk + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 6 + + + NoControl + + + 369, 19 + + + 100, 25 + + + 3 + + + &Verify... + + + MiddleRight + + + ImageBeforeText + + + buttonVerifyEmb + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 7 + + + True + + + NoControl + + + 217, 50 + + + 3, 3, 3, 3 + + + 146, 13 + + + 2 + + + Download from microsoft.com + + + linkLabelPrerequisiteEmb + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 8 + + + True + + + Tahoma, 8.25pt + + + NoControl + + + 26, 25 + + + 3, 3, 3, 3 + + + 177, 13 + + + 0 + + + Microsoft® Exception Message Box + + + labelEmb + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPrerequisites + + + 9 + + + 6, 6 + + + 475, 126 + + + 0 + + + Download and install pre-requisites + + + groupPrerequisites + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 1 + + + 4, 25 + + + 3, 3, 3, 3 + + + 485, 230 + + + 0 + + + Prerequisites + + + Step 1: Ensuring the required software is installed + + + wizardPagePrerequisites + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardControl + + + 1 + + + True + + + NoControl + + + 25, 55 + + + 253, 17 + + + 2 + + + Report application errors and internal exceptions + + + checkAnalyticsExceptions + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupAnalytics + + + 0 + + + True + + + NoControl + + + 294, 62 + + + 174, 13 + + + 3 + + + What is this? Why is this important? + + + TopRight + + + linkAnalyticsHelp + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupAnalytics + + + 1 + + + True + + + NoControl + + + 25, 37 + + + 239, 17 + + + 1 + + + Collect and send anonymous app usage data + + + checkAnalyticsUsage + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupAnalytics + + + 2 + + + True + + + NoControl + + + 6, 19 + + + 237, 17 + + + 0 + + + Help to improve the software (recommended) + + + checkEnableAnalytics + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupAnalytics + + + 3 + + + 6, 134 + + + 473, 87 + + + 1 + + + Usage Data Collection + + + groupAnalytics + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageFirewall + + + 0 + + + True + + + NoControl + + + 6, 99 + + + 320, 17 + + + 4 + + + I'm a computer expert and I will configure the Firewall by myself + + + checkFirewallManual + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupFirewall + + + 0 + + + NoControl + + + 6, 65 + + + 115, 25 + + + 2 + + + C&onfigure... + + + MiddleRight + + + ImageBeforeText + + + buttonFirewall + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupFirewall + + + 1 + + + NoControl + + + 127, 62 + + + 341, 31 + + + 3 + + + Administrator permissions are required to make changes in the firewall configuration. You will be asked to confirm the action. + + + labelFirewallWarning + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupFirewall + + + 2 + + + True + + + NoControl + + + 6, 42 + + + 201, 17 + + + 1 + + + Allow the &VLC player to communicate + + + checkBoxFirewallVlc + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupFirewall + + + 3 + + + True + + + NoControl + + + 6, 19 + + + 345, 17 + + + 0 + + + Allow &all virtual decoder programs to comunicate through the firewall + + + checkBoxFirewallDecoder + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupFirewall + + + 4 + + + 6, 6 + + + 473, 122 + + + 0 + + + Windows Firewall configuration + + + groupFirewall + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageFirewall + + + 1 + + + 4, 25 + + + 3, 3, 3, 3 + + + 485, 230 + + + 1 + + + Firewall + + + Step 2: Windows Firewall and Software Improvement + + + wizardPageFirewall + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardControl + + + 2 + + + True + + + NoControl + + + 9, 101 + + + 458, 17 + + + 2 + + + Give priority to Standard Definition (SD). Corresponding HD channel number will start with 'H' + + + radioChannelSDPriority + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxChannelNumbers + + + 0 + + + True + + + NoControl + + + 9, 78 + + + 436, 17 + + + 1 + + + Give priority to High Definition (HD). Corresponding SD channel number will start with 'S' + + + radioChannelHDPriority + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxChannelNumbers + + + 1 + + + NoControl + + + 6, 21 + + + 462, 54 + + + 0 + + + The list of channels comprises all channels, regardless of their broadcast definition. Therefore, there will be duplicated channel numbers when the same channel is broadcasted in HD and SD. + +Which channels should appear first? + + + labelChannelAssignmentExplanation + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxChannelNumbers + + + 2 + + + 3, 101 + + + 474, 123 + + + 1 + + + Channels number assignment + + + groupBoxChannelNumbers + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageBasic + + + 0 + + + True + + + NoControl + + + 6, 65 + + + 364, 17 + + + 2 + + + Auto-update EPG data if older than 24 hours (at the next app execution) + + + checkEpgAutoUpdate + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupEPG + + + 0 + + + True + + + NoControl + + + 24, 39 + + + 404, 13 + + + 1 + + + Warning! Ony bare EPG functions are implemented and might crash from time to time + + + labelEpgWarning + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupEPG + + + 1 + + + True + + + NoControl + + + 6, 19 + + + 143, 17 + + + 0 + + + Enable EPG functionality + + + checkEpg + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupEPG + + + 2 + + + False + + + 3, 6 + + + 474, 89 + + + 0 + + + Electronic Program Guide (EPG) + + + groupEPG + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageBasic + + + 1 + + + 4, 25 + + + 3, 3, 3, 3 + + + 485, 230 + + + 2 + + + Basic + + + Step 3: Basic configuration and settings + + + wizardPageBasic + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardControl + + + 3 + + + NoControl + + + 8, 173 + + + 469, 35 + + + 2 + + + Creating application configuration and user preferences files... + + + TopCenter + + + False + + + labelCreatingConfig + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageRecordings + + + 0 + + + NoControl + + + 167, 141 + + + 150, 25 + + + 1 + + + Config&ure application + + + MiddleRight + + + ImageBeforeText + + + buttonConfig + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageRecordings + + + 1 + + + True + + + NoControl + + + 9, 64 + + + 357, 17 + + + 3 + + + Cr&eate a sub-folder. Recorded programs will be saved in this sub-folder + + + checkSaveSubfolder + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupRecordConfig + + + 0 + + + 128, 83 + + + 125, 20 + + + 5 + + + movistar+ + + + textSaveSubFolder + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupRecordConfig + + + 1 + + + True + + + NoControl + + + 25, 86 + + + 97, 13 + + + 4 + + + Name of the folder: + + + labelSaveSubFolder + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupRecordConfig + + + 2 + + + NoControl + + + 368, 35 + + + 100, 25 + + + 2 + + + &Select... + + + ImageBeforeText + + + buttonBrowseSave + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupRecordConfig + + + 3 + + + 9, 38 + + + 353, 20 + + + 1 + + + textBoxSave + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupRecordConfig + + + 4 + + + True + + + NoControl + + + 6, 22 + + + 207, 13 + + + 0 + + + Select the default folder for the recordings: + + + labelSaveFolder + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupRecordConfig + + + 5 + + + 3, 6 + + + 474, 120 + + + 0 + + + Recordings configuration + + + groupRecordConfig + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPageRecordings + + + 2 + + + 4, 25 + + + 485, 230 + + + 4 + + + Recordings + + + Step 4: Configuring the recording functionality + + + wizardPageRecordings + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardControl + + + 4 + + + 0, 61 + + + 493, 259 + + + 0 + + + wizardControl + + + Project.IpTv.Tools.FirstTimeConfig.WizardTabControl, FirstTimeConfig, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 2 + + + True + + + 6, 13 + + + 493, 359 + + + CenterScreen + + + First-time configuration assistant + + + selectFolder + + + Project.IpTv.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + openFile + + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ConfigForm + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs index bea75e1d..479ee10b 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs @@ -549,7 +549,7 @@ internal static string ProductMainProgramName { } /// - /// Looks up a localized string similar to v1.5 “Kruger 60” Alpha 4. + /// Looks up a localized string similar to v1.5 “Kruger 60” Beta 1. /// internal static string ProductShortName { get { diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx index 870baaf3..87a71ccc 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx @@ -306,7 +306,7 @@ Si sobreescribe el archivo se perderá cualquier configuración personalizada. Canales movistar+ - v1.5 “Kruger 60” alpha 4 + v1.5 “Kruger 60” beta 1 ..\resources\readme_es.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx index ac63909f..105137a8 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx @@ -304,7 +304,7 @@ Do you want to overwrite the existing file? movistar+ channels - v1.5 “Kruger 60” Alpha 4 + v1.5 “Kruger 60” Beta 1 ..\resources\readme_en.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 diff --git a/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi b/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi index 873d0025..b7a6065c 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi +++ b/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi @@ -5,26 +5,26 @@ All rights reserved, except those granted by the governing license of this softw --> - - + + - - - + + + - + - - - + + + - - - + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl b/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl index 7c2dadff..5c56e41a 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl +++ b/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl @@ -8,12 +8,12 @@ All rights reserved, except those granted by the governing license of this softw ENU A new version of [ProductName] is already installed. This application requires .NET Framework 3.5 SP1. Please install the .NET Framework then run this installer again. You can find help at http://movistartv.codeplex.com/documentation - IPTViewr for movistar+ 1.5 “Kruger 60” Alpha 4 - IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Alpha 4 + IPTViewr for movistar+ 1.5 “Kruger 60” Beta 1 + IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Beta 1 Launch “First-time Configuration Wizard” solution-license License agreement - IPTViewr for movistar+ v1.5 “Kruger 60” Alpha 4 + IPTViewr for movistar+ v1.5 “Kruger 60” Beta 1 movistar+ channels First-time Configuration Wizard \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl b/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl index 0ac63982..1fce4b62 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl +++ b/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl @@ -8,12 +8,12 @@ All rights reserved, except those granted by the governing license of this softw ESN Ya está instalada una nueva versión de [ProductName]. Esta aplicación requiere .NET Framework 3.5 SP1. Por favor, instale el .NET Framework y ejecute el instalador de nuevo. Puede encontrar ayuda al respecto en http://movistartv.codeplex.com/documentation. - IPTViewr para movistar+ 1.5 “Kruger 60” alpha 4 - Decodificador virtual IPTV para movistar+ 1.5 “Kruger 60” alpha 4 + IPTViewr para movistar+ 1.5 “Kruger 60” beta 1 + Decodificador virtual IPTV para movistar+ 1.5 “Kruger 60” beta 1 Ejecutar “Asistente de configuración inicial” solution-license_es Acuerdo de licencia - IPTVievr para movistar+ v1.5 “Kruger 60” alpha 4 + IPTVievr para movistar+ v1.5 “Kruger 60” beta 1 Canales movistar+ Asistente de configuración inicial \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs index a2e04df8..c7968388 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs @@ -1,156 +1,156 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.Linq; -using System.Reflection; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public partial class AboutBox : CommonBaseForm - { - public AboutBox() - { - InitializeComponent(); - } // constructor - - public AboutBoxApplicationData ApplicationData - { - get; - set; - } // ApplicationData - - private void AboutBox_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this, Assembly.GetEntryAssembly().GetName().Name); - this.Text = String.Format(this.Text, Assembly.GetEntryAssembly().GetName().Name); - if (ApplicationData != null) - { - if (ApplicationData.LargeIcon != null) - { - if (logoPictureBox.Image != null) logoPictureBox.Image.Dispose(); - logoPictureBox.Image = ApplicationData.LargeIcon; - } // if - labelAppName.Text = string.Format("{0}", ApplicationData.Name); - labelAppVersion.Text = string.Format("{0} - {1}", ApplicationData.Version, ApplicationData.Status); - if (ApplicationData.LicenseTextRtf != null) - { - textBoxDescription.Rtf = ApplicationData.LicenseTextRtf; - } - else - { - textBoxDescription.Text = ApplicationData.LicenseText; - } // if-else - } - else - { - labelAppName.Text = AssemblyTitle; - labelAppVersion.Text = AssemblyVersion; - labelEULA.Visible = false; - textBoxDescription.Visible = false; - } // if-else - - labelProductName.Text = AssemblyProduct; - labelVersion.Text = String.Format(labelVersion.Text, AssemblyVersion); - labelCopyright.Text = AssemblyCopyright; - labelCompanyName.Text = AssemblyCompany; - } // AboutBox_Load - - private void linkLabelCodeplex_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenUrl(this, "http://movistartv.codeplex.com"); - } // linkLabelCodeplex_LinkClicked - - private void OpenUrl(Form parent, string url) - { - Launcher.OpenUrl(parent, url, HandleException, null); - } // OpenUrl - - #region Assembly Attribute Accessors - - public string AssemblyTitle - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); - if (attributes.Length > 0) - { - AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; - if (titleAttribute.Title != "") - { - return titleAttribute.Title; - } - } - return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase); - } - } - - public string AssemblyVersion - { - get - { - return Assembly.GetCallingAssembly().GetName().Version.ToString(); - } - } - - public string AssemblyDescription - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyDescriptionAttribute)attributes[0]).Description; - } - } - - public string AssemblyProduct - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyProductAttribute)attributes[0]).Product; - } - } - - public string AssemblyCopyright - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; - } - } - - public string AssemblyCompany - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCompanyAttribute)attributes[0]).Company; - } - } - #endregion - } // class AboutBox -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Project.IpTv.Common; +using Project.IpTv.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Windows.Forms; + +namespace Project.IpTv.UiServices.Common.Forms +{ + public partial class AboutBox : CommonBaseForm + { + public AboutBox() + { + InitializeComponent(); + } // constructor + + public AboutBoxApplicationData ApplicationData + { + get; + set; + } // ApplicationData + + private void AboutBox_Load(object sender, EventArgs e) + { + BasicGoogleTelemetry.SendScreenHit(this, Assembly.GetEntryAssembly().GetName().Name); + this.Text = String.Format(this.Text, Assembly.GetEntryAssembly().GetName().Name); + if (ApplicationData != null) + { + if (ApplicationData.LargeIcon != null) + { + if (logoPictureBox.Image != null) logoPictureBox.Image.Dispose(); + logoPictureBox.Image = ApplicationData.LargeIcon; + } // if + labelAppName.Text = string.Format("{0}", ApplicationData.Name); + labelAppVersion.Text = string.Format("{0} - {1}", ApplicationData.Version, ApplicationData.Status); + if (ApplicationData.LicenseTextRtf != null) + { + textBoxDescription.Rtf = ApplicationData.LicenseTextRtf; + } + else + { + textBoxDescription.Text = ApplicationData.LicenseText; + } // if-else + } + else + { + labelAppName.Text = AssemblyTitle; + labelAppVersion.Text = AssemblyVersion; + labelEULA.Visible = false; + textBoxDescription.Visible = false; + } // if-else + + labelProductName.Text = AssemblyProduct; + labelVersion.Text = String.Format(labelVersion.Text, AssemblyVersion); + labelCopyright.Text = AssemblyCopyright; + labelCompanyName.Text = AssemblyCompany; + } // AboutBox_Load + + private void linkLabelCodeplex_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenUrl(this, "http://movistartv.codeplex.com"); + } // linkLabelCodeplex_LinkClicked + + private void OpenUrl(Form parent, string url) + { + Launcher.OpenUrl(parent, url, HandleException, null); + } // OpenUrl + + #region Assembly Attribute Accessors + + public string AssemblyTitle + { + get + { + object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + if (attributes.Length > 0) + { + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; + if (titleAttribute.Title != "") + { + return titleAttribute.Title; + } + } + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase); + } + } + + public string AssemblyVersion + { + get + { + return Assembly.GetCallingAssembly().GetName().Version.ToString(); + } + } + + public string AssemblyDescription + { + get + { + object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + } // class AboutBox +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx index 88dbee2e..512d0e5c 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx @@ -1,495 +1,495 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Bottom, Right - - - - 342, 275 - - - 100, 25 - - - - 0 - - - &OK - - - MiddleRight - - - ImageBeforeText - - - okButton - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - 12, 12 - - - 128, 128 - - - CenterImage - - - 14 - - - logoPictureBox - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 10 - - - Top, Left, Right - - - 152, 61 - - - 6, 0, 3, 2 - - - 290, 13 - - - 3 - - - Product Name - - - labelProductName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - Top, Left, Right - - - NoControl - - - 152, 76 - - - 6, 0, 3, 2 - - - 290, 13 - - - 4 - - - Version {0} - - - labelVersion - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - - Top, Left, Right - - - 152, 91 - - - 6, 0, 3, 2 - - - 290, 13 - - - 5 - - - Copyright - - - labelCopyright - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - Top, Left, Right - - - 152, 106 - - - 6, 0, 3, 0 - - - 290, 13 - - - 6 - - - Company Name - - - labelCompanyName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - - - Top, Bottom, Left, Right - - - Segoe UI, 9pt - - - 12, 146 - - - 6, 3, 3, 3 - - - 430, 123 - - - 8 - - - EULA - - - textBoxDescription - - - System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - - - Bottom, Left - - - True - - - Segoe UI, 9pt, style=Bold - - - 12, 280 - - - 185, 15 - - - 9 - - - http://movistartv.codeplex.com - - - linkLabelCodeplex - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - True - - - Microsoft Sans Serif, 8.25pt, style=Underline - - - 149, 127 - - - 185, 13 - - - 7 - - - End User License Agreement (EULA): - - - labelEULA - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Top, Left, Right - - - Segoe UI, 9pt, style=Bold - - - NoControl - - - 149, 9 - - - 6, 0, 3, 0 - - - 293, 30 - - - 1 - - - App Name - - - labelAppName - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top, Left, Right - - - Segoe UI Semibold, 9pt - - - NoControl - - - 149, 39 - - - 6, 0, 3, 0 - - - 293, 15 - - - 2 - - - App Version - - - labelAppVersion - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 454, 312 - - - 9, 9, 9, 9 - - - CenterParent - - - About {0} application - - - AboutBox - - - Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.40.0, Culture=neutral, PublicKeyToken=null - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bottom, Right + + + + 342, 275 + + + 100, 25 + + + + 0 + + + &OK + + + MiddleRight + + + ImageBeforeText + + + okButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + 12, 12 + + + 128, 128 + + + CenterImage + + + 14 + + + logoPictureBox + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + Top, Left, Right + + + 152, 61 + + + 6, 0, 3, 2 + + + 290, 13 + + + 3 + + + Product Name + + + labelProductName + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Top, Left, Right + + + NoControl + + + 152, 76 + + + 6, 0, 3, 2 + + + 290, 13 + + + 4 + + + Version {0} + + + labelVersion + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + Top, Left, Right + + + 152, 91 + + + 6, 0, 3, 2 + + + 290, 13 + + + 5 + + + Copyright + + + labelCopyright + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + Top, Left, Right + + + 152, 106 + + + 6, 0, 3, 0 + + + 290, 13 + + + 6 + + + Company Name + + + labelCompanyName + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + Top, Bottom, Left, Right + + + Segoe UI, 9pt + + + 12, 146 + + + 6, 3, 3, 3 + + + 430, 123 + + + 8 + + + EULA + + + textBoxDescription + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + Bottom, Left + + + True + + + Segoe UI, 9pt, style=Bold + + + 12, 280 + + + 185, 15 + + + 9 + + + http://movistartv.codeplex.com + + + linkLabelCodeplex + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + Microsoft Sans Serif, 8.25pt, style=Underline + + + 149, 127 + + + 185, 13 + + + 7 + + + End User License Agreement (EULA): + + + labelEULA + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Top, Left, Right + + + Segoe UI, 9pt, style=Bold + + + NoControl + + + 149, 9 + + + 6, 0, 3, 0 + + + 293, 30 + + + 1 + + + App Name + + + labelAppName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top, Left, Right + + + Segoe UI Semibold, 9pt + + + NoControl + + + 149, 39 + + + 6, 0, 3, 0 + + + 293, 15 + + + 2 + + + App Version + + + labelAppVersion + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 454, 312 + + + 9, 9, 9, 9 + + + CenterParent + + + About {0} application + + + AboutBox + + + Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs index f375dc28..0c468742 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs @@ -1,216 +1,216 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class InvariantTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal InvariantTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to DBV-IPTV. - /// - internal static string DefaultDomainNameProviderLogo { - get { - return ResourceManager.GetString("DefaultDomainNameProviderLogo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IPTV. - /// - internal static string DefaultDomainNameServiceLogo { - get { - return ResourceManager.GetString("DefaultDomainNameServiceLogo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to domain-mappings.xml. - /// - internal static string FileLogoDomainMappings { - get { - return ResourceManager.GetString("FileLogoDomainMappings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to provider-mappings.xml. - /// - internal static string FileLogoProviderMappings { - get { - return ResourceManager.GetString("FileLogoProviderMappings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to service-mappings.xml. - /// - internal static string FileLogoServiceMappings { - get { - return ResourceManager.GetString("FileLogoServiceMappings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cache. - /// - internal static string FolderCache { - get { - return ResourceManager.GetString("FolderCache", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Providers. - /// - internal static string FolderLogosProviders { - get { - return ResourceManager.GetString("FolderLogosProviders", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Logos. - /// - internal static string FolderLogosRoot { - get { - return ResourceManager.GetString("FolderLogosRoot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Services. - /// - internal static string FolderLogosServices { - get { - return ResourceManager.GetString("FolderLogosServices", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to RecordTasks. - /// - internal static string FolderRecordTasks { - get { - return ResourceManager.GetString("FolderRecordTasks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}::{1}. - /// - internal static string FormatServiceLogoKey { - get { - return ResourceManager.GetString("FormatServiceLogoKey", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.40.0. - /// - internal static string RegistryKey_Root { - get { - return ResourceManager.GetString("RegistryKey_Root", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Analytics.ClientId. - /// - internal static string RegistryValue_Analytics_ClientId { - get { - return ResourceManager.GetString("RegistryValue_Analytics_ClientId", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Folder.Base. - /// - internal static string RegistryValue_Folder_Base { - get { - return ResourceManager.GetString("RegistryValue_Folder_Base", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Folder.Install. - /// - internal static string RegistryValue_Folder_Install { - get { - return ResourceManager.GetString("RegistryValue_Folder_Install", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installed. - /// - internal static string RegistryValue_Installed { - get { - return ResourceManager.GetString("RegistryValue_Installed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <any>. - /// - internal static string ServiceNameAny { - get { - return ResourceManager.GetString("ServiceNameAny", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Project.IpTv.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class InvariantTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal InvariantTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to DBV-IPTV. + /// + internal static string DefaultDomainNameProviderLogo { + get { + return ResourceManager.GetString("DefaultDomainNameProviderLogo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IPTV. + /// + internal static string DefaultDomainNameServiceLogo { + get { + return ResourceManager.GetString("DefaultDomainNameServiceLogo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to domain-mappings.xml. + /// + internal static string FileLogoDomainMappings { + get { + return ResourceManager.GetString("FileLogoDomainMappings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to provider-mappings.xml. + /// + internal static string FileLogoProviderMappings { + get { + return ResourceManager.GetString("FileLogoProviderMappings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to service-mappings.xml. + /// + internal static string FileLogoServiceMappings { + get { + return ResourceManager.GetString("FileLogoServiceMappings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cache. + /// + internal static string FolderCache { + get { + return ResourceManager.GetString("FolderCache", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Providers. + /// + internal static string FolderLogosProviders { + get { + return ResourceManager.GetString("FolderLogosProviders", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Logos. + /// + internal static string FolderLogosRoot { + get { + return ResourceManager.GetString("FolderLogosRoot", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Services. + /// + internal static string FolderLogosServices { + get { + return ResourceManager.GetString("FolderLogosServices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to RecordTasks. + /// + internal static string FolderRecordTasks { + get { + return ResourceManager.GetString("FolderRecordTasks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}::{1}. + /// + internal static string FormatServiceLogoKey { + get { + return ResourceManager.GetString("FormatServiceLogoKey", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.1010.0. + /// + internal static string RegistryKey_Root { + get { + return ResourceManager.GetString("RegistryKey_Root", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Analytics.ClientId. + /// + internal static string RegistryValue_Analytics_ClientId { + get { + return ResourceManager.GetString("RegistryValue_Analytics_ClientId", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder.Base. + /// + internal static string RegistryValue_Folder_Base { + get { + return ResourceManager.GetString("RegistryValue_Folder_Base", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder.Install. + /// + internal static string RegistryValue_Folder_Install { + get { + return ResourceManager.GetString("RegistryValue_Folder_Install", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installed. + /// + internal static string RegistryValue_Installed { + get { + return ResourceManager.GetString("RegistryValue_Installed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <any>. + /// + internal static string ServiceNameAny { + get { + return ResourceManager.GetString("ServiceNameAny", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx index 6cd6464a..2c67f4ff 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx @@ -1,171 +1,171 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - DBV-IPTV - - - IPTV - - - domain-mappings.xml - - - provider-mappings.xml - - - service-mappings.xml - - - Cache - - - Providers - - - Logos - - - Services - - - RecordTasks - - - {0}::{1} - - - Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.40.0 - - - Analytics.ClientId - - - Folder.Base - - - Folder.Install - - - Installed - - - <any> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + DBV-IPTV + + + IPTV + + + domain-mappings.xml + + + provider-mappings.xml + + + service-mappings.xml + + + Cache + + + Providers + + + Logos + + + Services + + + RecordTasks + + + {0}::{1} + + + Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.1010.0 + + + Analytics.ClientId + + + Folder.Base + + + Folder.Install + + + Installed + + + <any> + \ No newline at end of file diff --git a/1.5 'Kruger 60'/solution-license.rtf b/1.5 'Kruger 60'/solution-license.rtf index 3b2b62e3..238cdc46 100644 --- a/1.5 'Kruger 60'/solution-license.rtf +++ b/1.5 'Kruger 60'/solution-license.rtf @@ -1,7 +1,7 @@ {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset2 Symbol;}} {\colortbl ;\red0\green0\blue255;} {\*\generator Riched20 10.0.10586}\viewkind4\uc1 -\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Alpha 4\ul\fs18\par +\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\ul\fs18\par \fs20 Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors.\ulnone\i\fs18\par THIS SOFTWARE IS \ul PROVIDED \ldblquote AS IS\rdblquote\ulnone , WITHOUT WARRANTY OF ANY KIND\b0\i0 , express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement.\line In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.\par The Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in \ldblquote EXCEPTIONS\rdblquote . All other rights are reserved by the author(s) of the software.\par diff --git a/1.5 'Kruger 60'/solution-license.txt b/1.5 'Kruger 60'/solution-license.txt index 03f5e720..c6bc63d8 100644 --- a/1.5 'Kruger 60'/solution-license.txt +++ b/1.5 'Kruger 60'/solution-license.txt @@ -1,5 +1,5 @@ ***************************************************************************** -IPTViewr: Virtual Decoder for movistar+ version 1.5 Kruger 60 Alpha 4 +IPTViewr: Virtual Decoder for movistar+ version 1.5 Kruger 60 Beta 1 ***************************************************************************** Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors diff --git a/1.5 'Kruger 60'/solution-license_es.rtf b/1.5 'Kruger 60'/solution-license_es.rtf index 8a374755..fbb26557 100644 --- a/1.5 'Kruger 60'/solution-license_es.rtf +++ b/1.5 'Kruger 60'/solution-license_es.rtf @@ -1,7 +1,7 @@ {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset2 Symbol;}} {\colortbl ;\red0\green0\blue255;} {\*\generator Riched20 10.0.10586}\viewkind4\uc1 -\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Decodificador virtual para movistar+ versi\'f3n 1.5 \ldblquote Kruger 60\rdblquote alpha 4\par +\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Decodificador virtual para movistar+ versi\'f3n 1.5 \ldblquote Kruger 60\rdblquote beta 1\par \ul\fs20 Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors\par \ulnone\i\fs18 ESTE SOFTWARE \ul SE PROPORCIONA \ldblquote TAL CUAL\rdblquote\ulnone , SIN GARANT\'cdA DE NING\'daN TIPO\b0\i0 , expresa o impl\'edcita, incluyendo (pero no limit\'e1ndose a) las garant\'edas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n.\line En ning\'fan caso, los autores o titulares del Copyright ser\'e1n responsables de ninguna reclamaci\'f3n, da\'f1os o cualquier otra responsabilidad, ya sea en una acci\'f3n de contrato, agravio o cualquier otro motivo, con o sin relaci\'f3n con el software o el uso u otros aspectos del software.\par El software, ya sea en forma de c\'f3digo binario o fuente, est\'e1 sujeto a los t\'e9rminos de la Licencia Rec\'edproca de Microsoft \ldblquote Microsoft Reciprocal License\rdblquote (Ms-RL), excepto cuanto se indica en \ldblquote EXCEPCIONES\rdblquote . Todos los dem\'e1s derechos est\'e1n reservados por el/los autor(es) del software.\par diff --git a/1.5 'Kruger 60'/solution-license_es.txt b/1.5 'Kruger 60'/solution-license_es.txt index f290b7dc..12262b1b 100644 --- a/1.5 'Kruger 60'/solution-license_es.txt +++ b/1.5 'Kruger 60'/solution-license_es.txt @@ -1,5 +1,5 @@ ***************************************************************************** -IPTViewr: Decodificador virtual para movistar+ versin 1.5 Kruger 60 alpha 4 +IPTViewr: Decodificador virtual para movistar+ versin 1.5 Kruger 60 beta 1 ***************************************************************************** Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors From 5475a85120bc2290bc2290421ebd20878912de64 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Fri, 26 Aug 2016 00:58:09 +0200 Subject: [PATCH 02/76] Root namespace change From Project.IpTv to IpTviewr --- .../ChannelList/ChannelList.csproj | 564 +++---- .../ChannelList/ChannelListForm.Designer.cs | 70 +- .../ChannelList/ChannelListForm.cs | 42 +- .../ChannelList/ChannelListForm.resx | 4 +- .../ChannelList/CommonUiResources.Designer.cs | 666 ++++---- 1.5 'Kruger 60'/ChannelList/MyApplication.cs | 8 +- .../ChannelList/MyApplicationContext.cs | 8 +- 1.5 'Kruger 60'/ChannelList/Program.cs | 92 +- .../Properties/InvariantTexts.Designer.cs | 4 +- .../Properties/Resources.Designer.cs | 646 +++---- .../Properties/Settings.Designer.cs | 2 +- .../ChannelList/Properties/Settings.settings | 2 +- .../ChannelList/Properties/Texts.Designer.cs | 4 +- 1.5 'Kruger 60'/ChannelList/app.config | 6 +- .../Core.IpTvProvider.csproj | 210 +-- .../Core.IpTvProvider/ExternalTvPlayer.cs | 312 ++-- .../Core.IpTvProvider/IpTvProvider.cs | 80 +- .../Core.IpTvProvider/IpTvProviderSettings.cs | 120 +- .../IpTvProviderSettingsRegistration.cs | 150 +- .../Properties/AssemblyInfo.cs | 60 +- .../Properties/Texts.Designer.cs | 166 +- .../DvbStpClient/DvbStpBaseClient.cs | 700 ++++---- .../DvbStpClient/DvbStpClient.csproj | 154 +- .../DvbStpClient/DvbStpClientSegmentInfo.cs | 106 +- .../DvbStpEnhancedClient.EventArgs.cs | 564 +++---- .../DvbStpClient/DvbStpEnhancedClient.cs | 488 +++--- .../DvbStpClient/DvbStpExplorer.cs | 330 ++-- .../DvbStpClient/DvbStpExplorerEventArgs.cs | 208 +-- 1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs | 102 +- .../DvbStpClient/DvbStpHeaderMasks.cs | 72 +- .../DvbStpClient/DvbStpSegmentIdentity.cs | 92 +- .../DvbStpClient/DvbStpSimpleClient.cs | 474 +++--- .../DvbStpSimpleClientEventArgs.cs | 82 +- .../DvbStpClient/PayloadStorage.EventArgs.cs | 214 +-- .../DvbStpClient/PayloadStorage.cs | 208 +-- .../DvbStpClient/Properties/AssemblyInfo.cs | 60 +- .../DvbStpClient/SegmentAssembler.cs | 254 +-- .../DvbStpClient/VersionStorage.cs | 250 +-- .../FirstTimeConfig/ConfigForm.Designer.cs | 1482 ++++++++--------- 1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs | 12 +- .../FirstTimeConfig/ConfigForm.resx | 4 +- .../FirstTimeConfig/Configuration.cs | 16 +- .../FirstTimeConfig/FirewallForm.Designer.cs | 300 ++-- .../FirstTimeConfig/FirewallForm.cs | 110 +- .../FirstTimeConfig/FirstTimeConfig.csproj | 470 +++--- .../FirstTimeConfig/Installation.cs | 1230 +++++++------- .../FirstTimeConfig/KnownFolders.cs | 216 +-- 1.5 'Kruger 60'/FirstTimeConfig/Program.cs | 368 ++-- .../Properties/Resources.Designer.cs | 4 +- .../Properties/Settings.Designer.cs | 52 +- .../Properties/Texts.Designer.cs | 4 +- .../FirstTimeConfig/WindowsFirewall.cs | 316 ++-- .../WizardEndDialog.Designer.cs | 322 ++-- .../FirstTimeConfig/WizardEndDialog.cs | 204 +-- .../FirstTimeConfig/WizardTabControl.cs | 334 ++-- .../WizardWelcomeDialog.Designer.cs | 306 ++-- .../FirstTimeConfig/WizardWelcomeDialog.cs | 92 +- .../ChannelLogos/ChannelLogos.csproj | 2 +- .../ChannelLogos/ConsistencyCheck.cs | 214 +-- .../ConsistencyCheckAllServices.cs | 12 +- .../ConsistencyCheckMissingLogoFiles.cs | 6 +- .../ConsistencyCheckMissingServiceLogos.cs | 142 +- .../ConsistencyCheckUnusedLogoFiles.cs | 6 +- ...istencyCheckUnusedServiceMappingEntries.cs | 160 +- .../ChannelLogos/FormConsistency.Designer.cs | 2 +- .../ChannelLogos/FormConsistency.cs | 8 +- .../ChannelLogos/FormLogos.Designer.cs | 568 +++---- .../InternalTools/ChannelLogos/FormLogos.cs | 12 +- .../ChannelLogos/FormStart.Designer.cs | 226 +-- .../InternalTools/ChannelLogos/FormStart.cs | 168 +- .../InternalTools/ChannelLogos/Program.cs | 4 +- .../Properties/Resources.Designer.cs | 146 +- .../Properties/Settings.Designer.cs | 52 +- .../InternalTools/ChannelLogos/WebClientEx.cs | 118 +- .../ConsoleExperiments/Program.cs | 138 +- .../EpgDownloader/EpgDownloadForm.Designer.cs | 84 +- .../EpgDownloader/EpgDownloadForm.cs | 44 +- .../InternalTools/EpgDownloader/Program.cs | 48 +- .../Properties/Resources.Designer.cs | 146 +- .../Properties/Settings.Designer.cs | 52 +- .../GuiTools/LaunchForm.Designer.cs | 242 +-- .../InternalTools/GuiTools/LaunchForm.cs | 74 +- .../MulticastStreamExplorerForm.Designer.cs | 448 ++--- .../GuiTools/MulticastStreamExplorerForm.cs | 346 ++-- .../InternalTools/GuiTools/MyApplication.cs | 264 +-- .../GuiTools/OpchExplorerForm.Designer.cs | 586 +++---- .../GuiTools/OpchExplorerForm.cs | 400 ++--- .../InternalTools/GuiTools/Program.cs | 94 +- .../GuiTools/Properties/AssemblyInfo.cs | 60 +- .../GuiTools/Properties/Resources.Designer.cs | 224 +-- .../GuiTools/Properties/Settings.Designer.cs | 52 +- .../SimpleDvbStpDownloadForm.Designer.cs | 360 ++-- .../GuiTools/SimpleDvbStpDownloadForm.cs | 144 +- .../IpTv.MovistarPlus.csproj | 160 +- .../IpTvProviderMovistarPlus.cs | 36 +- .../IpTv.MovistarPlus/MovistarCrId.cs | 98 +- .../IpTv.MovistarPlus/MovistarJsonResponse.cs | 46 +- .../Properties/AssemblyInfo.cs | 60 +- .../InternalExtensions.cs | 110 +- .../IpTvRecorderLauncher.csproj | 244 +-- .../IpTvRecorderLauncher/Launcher.cs | 794 ++++----- .../IpTvRecorderLauncher/Logger.cs | 380 ++--- .../IpTvRecorderLauncher/Program.cs | 426 ++--- .../Properties/Resources.Designer.cs | 236 +-- .../Properties/SerializationTexts.Designer.cs | 624 +++---- .../Properties/Texts.Designer.cs | 1064 ++++++------ .../UnsafeNativeMethods.cs | 196 +-- .../Project.Common/ArgumentsManager.cs | 272 +-- .../Project.Common/CommandLineArguments.cs | 176 +- .../Project.Common/FormatString.cs | 198 +-- .../HandleExceptionEventArgs.cs | 2 +- 1.5 'Kruger 60'/Project.Common/Launcher.cs | 122 +- .../Project.Common/Project.Common.csproj | 2 +- .../Project.Common/Properties/AssemblyInfo.cs | 62 +- .../Properties/FormatStringTexts.Designer.cs | 324 ++-- .../Properties/Resources.Designer.cs | 126 +- .../Properties/Texts.Designer.cs | 144 +- .../Serialization/XmlSerialization.cs | 350 ++-- .../XmlTextReaderTrimExtraWhitespace.cs | 218 +-- .../Telemetry/BasicGoogleTelemetry.cs | 574 +++---- .../Project.Native/Project.Native.csproj | 120 +- .../Project.Native/Properties/AssemblyInfo.cs | 60 +- 1.5 'Kruger 60'/Project.Native/ShellLink.cs | 488 +++--- .../Properties/AssemblyInfo.cs | 60 +- .../Properties/Texts.Designer.cs | 624 +++---- .../RecordAction.cs | 114 +- .../RecordAdvancedSettings.cs | 320 ++-- .../RecordChannel.cs | 104 +- .../RecordDaily.cs | 108 +- .../RecordDescription.cs | 126 +- .../RecordDuration.cs | 176 +- .../RecordMonthly.cs | 76 +- .../RecordMultipleInstances.cs | 56 +- .../RecordOneTime.cs | 54 +- .../RecordRecorder.cs | 68 +- .../RecordRightNow.cs | 82 +- .../RecordSchedule.cs | 118 +- .../RecordScheduleKind.cs | 40 +- .../RecordScheduleTime.cs | 244 +-- .../RecordTask.cs | 350 ++-- .../RecordTaskSerialization.cs | 316 ++-- .../RecordWeekDays.cs | 50 +- .../RecordWeekly.cs | 258 +-- .../RecordYearMonths.cs | 60 +- .../Services.Record.Serialization.csproj | 208 +-- .../Properties/AssemblyInfo.cs | 60 +- .../Properties/Resources.Designer.cs | 240 +-- .../Properties/Texts.Designer.cs | 182 +- 1.5 'Kruger 60'/Services.Record/Scheduler.cs | 950 +++++------ .../Services.Record/Services.Record.csproj | 200 +-- 1.5 'Kruger 60'/Services.Record/TaskAction.cs | 36 +- 1.5 'Kruger 60'/Services.Record/TaskData.cs | 132 +- 1.5 'Kruger 60'/Services.Record/TaskList.cs | 438 ++--- .../Services.Record/TaskListBuildOptions.cs | 68 +- 1.5 'Kruger 60'/Services.Record/TaskStatus.cs | 40 +- .../Services.SqlServerCE/DbServices.cs | 622 +++---- .../Properties/AssemblyInfo.cs | 60 +- .../Services.SqlServerCE.csproj | 142 +- .../Controls/FilenameTextBox.cs | 332 ++-- .../Controls/ListItemsManager.cs | 390 ++--- .../Controls/ListViewColumnItemComparer.cs | 2 +- .../Controls/ListViewSortable.cs | 580 +++---- .../Controls/PictureBoxEx.cs | 116 +- .../Controls/SelectFolderDialog.cs | 1110 ++++++------ .../Controls/TabControlEx.cs | 94 +- .../Controls/TimeSpanUpDown.Designer.cs | 354 ++-- .../Controls/TimeSpanUpDown.cs | 410 ++--- .../Forms/AboutBox.Designer.cs | 326 ++-- .../UiServices.Common/Forms/AboutBox.cs | 6 +- .../UiServices.Common/Forms/AboutBox.resx | 2 +- .../Forms/AboutBoxApplicationData.cs | 100 +- .../Forms/BackgroundWorkerDialog.Designer.cs | 238 +-- .../Forms/BackgroundWorkerDialog.cs | 600 +++---- .../Forms/BackgroundWorkerDialog.resx | 662 ++++---- .../Forms/BackgroundWorkerOptions.cs | 218 +-- .../UiServices.Common/Forms/CommonBaseForm.cs | 250 +-- .../CommonBaseFormExceptionThrownEventArgs.cs | 68 +- .../Forms/HelpDialog.Designer.cs | 156 +- .../UiServices.Common/Forms/HelpDialog.cs | 102 +- .../Forms/IBackgroundWorkerDialog.cs | 54 +- .../Forms/NotImplementedBox.Designer.cs | 210 +-- .../Forms/NotImplementedBox.cs | 82 +- .../Forms/PropertiesDialog.Designer.cs | 360 ++-- .../Forms/PropertiesDialog.cs | 222 +-- .../Forms/PropertiesDialog.resx | 718 ++++---- .../Properties/AssemblyInfo.cs | 60 +- .../BackgroundWorkerDialog.Designer.cs | 180 +- .../Properties/CommonForm.Designer.cs | 144 +- .../Properties/Filename.Designer.cs | 162 +- .../Properties/PropertiesDialog.Designer.cs | 180 +- .../Properties/Resources.Designer.cs | 286 ++-- .../Properties/TimeSpanUpDown.Designer.cs | 198 +-- .../Start/ISplashScreenAwareForm.cs | 30 +- .../Start/SplashApplicationContext.cs | 622 +++---- .../Start/SplashScreen.Designer.cs | 144 +- .../UiServices.Common/Start/SplashScreen.cs | 46 +- .../UiServices.Common.csproj | 508 +++--- .../UiServices.Config/AppUiConfiguration.cs | 1126 ++++++------- .../AppUiConfigurationFolders.cs | 98 +- .../UiServices.Config/Cache/CacheManager.cs | 276 +-- .../UiServices.Config/Cache/CachedItemBase.cs | 100 +- .../Cache/CachedXmlDocument.cs | 50 +- .../CommonUiResources.Designer.cs | 386 ++--- .../ConfigurationForm.Designer.cs | 246 +-- .../UiServices.Config/ConfigurationForm.cs | 490 +++--- .../Editors/ArgumentEditor.Designer.cs | 246 +-- .../Editors/ArgumentEditor.cs | 228 +-- .../Editors/ArgumentEditorDialog.Designer.cs | 172 +- .../Editors/ArgumentEditorDialog.cs | 132 +- .../Editors/ArgumentEditorDialog.resx | 484 +++--- .../Editors/ArgumentsEditor.Designer.cs | 280 ++-- .../Editors/ArgumentsEditor.cs | 308 ++-- .../UiServices.Config/IConfigurationItem.cs | 34 +- .../IConfigurationItemEditor.cs | 76 +- .../IConfigurationItemRegistration.cs | 112 +- .../UiServices.Config/ILocalizedObject.cs | 36 +- .../UiServices.Config/InitializationResult.cs | 134 +- .../UiServices.Config/LocalizedObject.cs | 94 +- .../UiServices.Config/Logos/BaseLogo.cs | 404 ++--- .../UiServices.Config/Logos/LogoSize.cs | 64 +- .../UiServices.Config/Logos/ProviderLogo.cs | 62 +- .../Logos/ProviderLogoMappings.cs | 168 +- .../UiServices.Config/Logos/ServiceLogo.cs | 62 +- .../ServiceLogoMappings.ReplacementDomain.cs | 56 +- ...erviceLogoMappings.ServiceDomainMapping.cs | 56 +- .../Logos/ServiceLogoMappings.cs | 472 +++--- .../Properties/AssemblyInfo.cs | 60 +- .../Properties/InvariantTexts.Designer.cs | 4 +- .../Properties/Resources.Designer.cs | 326 ++-- .../Properties/SettingsTexts.Designer.cs | 392 ++--- .../Properties/Texts.Designer.cs | 1188 ++++++------- .../Schema2014/Config/AnalyticsConfig.cs | 90 +- .../Schema2014/Config/ConfigCommon.cs | 192 +-- .../Schema2014/Config/RecordConfig.cs | 112 +- .../Schema2014/Config/RecordSaveLocation.cs | 164 +- .../Config/RecordTaskSchedulerFolder.cs | 158 +- .../Schema2014/Config/RecorderConfig.cs | 174 +- .../Schema2014/Config/UserConfig.cs | 180 +- .../ContentProvider/BootstrapData.cs | 166 +- .../ContentProvider/BootstrapMethod.cs | 72 +- .../ContentProvider/FriendlyNames.cs | 44 +- .../ContentProvider/Identification.cs | 72 +- .../ContentProvider/IpTvProviderData.cs | 98 +- .../ContentProvider/ProviderTexts.cs | 36 +- .../ContentProvider/SerializationCommon.cs | 30 +- .../ContentProvider/SpFriendlyName.cs | 60 +- .../ContentProvider/SpFriendlyNames.cs | 60 +- .../Schema2014/Logos/DomainMappings.cs | 170 +- .../Schema2014/Logos/LogosCommon.cs | 86 +- .../Schema2014/Logos/ProviderMappings.cs | 168 +- .../Schema2014/Logos/ServiceMappings.cs | 232 +-- .../Editors/NetworkSettingsEditor.Designer.cs | 210 +-- .../Network/Editors/NetworkSettingsEditor.cs | 226 +-- .../Editors/NetworkSettingsEditor.resx | 538 +++--- .../Settings/Network/MulticastProxy.cs | 134 +- .../Settings/Network/NetworkSettings.cs | 114 +- .../Network/NetworkSettingsRegistration.cs | 158 +- .../Editors/TvPlayerEditorDialog.Designer.cs | 266 +-- .../TvPlayers/Editors/TvPlayerEditorDialog.cs | 316 ++-- .../Editors/TvPlayerEditorDialog.resx | 718 ++++---- .../TvPlayersSettingsEditor.Designer.cs | 382 ++--- .../Editors/TvPlayersSettingsEditor.cs | 470 +++--- .../SelectTvPlayerDialog.Designer.cs | 200 +-- .../TvPlayers/SelectTvPlayerDialog.cs | 108 +- .../Settings/TvPlayers/TvPlayer.cs | 188 +-- .../Settings/TvPlayers/TvPlayersSettings.cs | 252 +-- .../TvPlayersSettingsRegistration.cs | 158 +- .../UiServices.Config/StringPair.cs | 260 +-- .../UiServices.Config/UiContentProvider.cs | 92 +- .../UiContentProviderFriendlyNames.cs | 108 +- .../UiContentProviderIdentification.cs | 124 +- .../UiServices.Config.csproj | 672 ++++---- .../UiServices.Config/WindowsBitness.cs | 202 +-- .../XmlConfigurationItems.cs | 96 +- .../BroadcastList/Editors/ISettingsEditor.cs | 34 +- .../Editors/ISettingsEditorContainer.cs | 24 +- .../Editors/ISettingsEditorModeColumns.cs | 72 +- .../Editors/SettingsEditorBaseUserControl.cs | 82 +- .../Editors/SettingsEditorModeBaseColumn.cs | 86 +- .../SettingsEditorModeMultiColumn.Designer.cs | 276 +-- .../Editors/SettingsEditorModeMultiColumn.cs | 130 +- .../SettingsEditorModeMultiColumn.resx | 682 ++++---- ...SettingsEditorModeSingleColumn.Designer.cs | 150 +- .../Editors/SettingsEditorModeSingleColumn.cs | 100 +- ...SettingsEditorModeTripleColumn.Designer.cs | 206 +-- .../Editors/SettingsEditorModeTripleColumn.cs | 216 +-- .../Editors/SettingsEditorSorting.Designer.cs | 306 ++-- .../Editors/SettingsEditorSorting.cs | 414 ++--- .../Editors/SettingsEditorSorting.resx | 736 ++++---- .../UiBroadcastListSettingsEditor.Designer.cs | 600 +++---- .../Editors/UiBroadcastListSettingsEditor.cs | 772 ++++----- .../ListSelectionChangedEventArgs.cs | 2 +- .../ListStatusChangedEventArgs.cs | 2 +- .../BroadcastList/ServiceSortComparer.cs | 2 +- .../BroadcastList/UiBroadcastListColumn.cs | 2 +- .../BroadcastList/UiBroadcastListManager.cs | 12 +- .../UiBroadcastListModeSettings.cs | 6 +- .../BroadcastList/UiBroadcastListSettings.cs | 8 +- .../UiBroadcastListSettingsRegistration.cs | 4 +- .../UiBroadcastListSortColumn.cs | 2 +- .../Properties/AssemblyInfo.cs | 2 +- .../Properties/InvariantTexts.Designer.cs | 4 +- .../Properties/ListViewManager.Designer.cs | 4 +- .../Properties/Resources.Designer.cs | 4 +- .../Properties/SettingsEditor.Designer.cs | 4 +- .../Properties/Texts.Designer.cs | 4 +- .../SerializationCommon.cs | 2 +- .../UiBroadcastDiscovery.cs | 2 +- .../UiBroadcastDiscoveryDownloader.cs | 10 +- .../UiBroadcastDiscoveryMergeResult.cs | 2 +- ...coveryMergeResultDetailsDialog.Designer.cs | 6 +- ...adcastDiscoveryMergeResultDetailsDialog.cs | 2 +- ...castDiscoveryMergeResultDialog.Designer.cs | 8 +- .../UiBroadcastDiscoveryMergeResultDialog.cs | 2 +- .../UiBroadcastService.cs | 12 +- .../UiProviderDiscovery.cs | 2 +- .../UiServices.Discovery/UiServiceProvider.cs | 8 +- .../UiServices.Discovery.csproj | 2 +- .../UiServicesLogicalNumbers.cs | 2 +- 1.5 'Kruger 60'/UiServices.Discovery/Utils.cs | 2 +- .../DvbStpEnhancedDownloadDialog.Designer.cs | 14 +- .../DvbStpEnhancedDownloadDialog.cs | 6 +- .../DvbStpEnhancedDownloadDialog.resx | 4 +- .../DvbStpSimpleDownloadDialog.Designer.cs | 10 +- .../DvbStpSimpleDownloadDialog.cs | 6 +- .../DvbStpSimpleDownloadDialog.resx | 2 +- .../Properties/AssemblyInfo.cs | 2 +- .../Properties/Resources.Designer.cs | 4 +- .../Properties/Texts.Designer.cs | 4 +- .../UiDvbStpBaseDownloadRequest.cs | 2 +- .../UiDvbStpBaseDownloadResponse.cs | 4 +- .../UiDvbStpBaseDownloader.cs | 6 +- .../UiDvbStpClientSegmentInfo.cs | 4 +- .../UiDvbStpEnhancedDownloadRequest.cs | 2 +- .../UiDvbStpEnhancedDownloadResponse.cs | 2 +- .../UiDvbStpEnhancedDownloader.cs | 4 +- .../UiDvbStpSimpleDownloadRequest.cs | 2 +- .../UiDvbStpSimpleDownloadResponse.cs | 2 +- .../UiDvbStpSimpleDownloader.cs | 4 +- .../UiServices.DvbStpClient.csproj | 2 +- .../MulticastScannerDialog.Designer.cs | 16 +- .../MulticastScannerDialog.cs | 12 +- .../MulticastScannerDialog.resx | 6 +- .../MulticastScannerOptionsDialog.Designer.cs | 12 +- .../MulticastScannerOptionsDialog.cs | 4 +- .../MulticastScannerOptionsDialog.resx | 2 +- .../Properties/AssemblyInfo.cs | 2 +- .../Properties/CommonUiResources.Designer.cs | 4 +- .../Properties/DiscoveryTexts.Designer.cs | 4 +- .../Properties/MulticastScanner.Designer.cs | 4 +- .../Properties/Resources.Designer.cs | 4 +- .../SelectProviderDialog.Designer.cs | 10 +- .../UiServices.Forms/SelectProviderDialog.cs | 16 +- .../SelectProviderDialog.resx | 2 +- .../UiServices.Forms/UiServices.Forms.csproj | 2 +- .../Controls/IRecordingScheduleFragment.cs | 4 +- ...RecordingDailyScheduleFragment.Designer.cs | 2 +- .../RecordingDailyScheduleFragment.cs | 4 +- .../Controls/RecordingDuration.Designer.cs | 6 +- .../Controls/RecordingDuration.cs | 6 +- .../Controls/RecordingDuration.resx | 2 +- ...cordingMonthlyScheduleFragment.Designer.cs | 2 +- .../RecordingMonthlyScheduleFragment.cs | 4 +- ...cordingOneTimeScheduleFragment.Designer.cs | 2 +- .../RecordingOneTimeScheduleFragment.cs | 4 +- ...ordingRightNowScheduleFragment.Designer.cs | 2 +- .../RecordingRightNowScheduleFragment.cs | 4 +- .../Controls/RecordingSchedule.Designer.cs | 12 +- .../Controls/RecordingSchedule.cs | 4 +- .../Controls/RecordingSchedule.resx | 10 +- ...ecordingWeeklyScheduleFragment.Designer.cs | 2 +- .../RecordingWeeklyScheduleFragment.cs | 6 +- .../Properties/AssemblyInfo.cs | 2 +- .../Properties/ControlTexts.Designer.cs | 4 +- .../Properties/RecordChannel.Designer.cs | 4 +- .../Properties/Resources.Designer.cs | 4 +- .../Properties/TasksTexts.Designer.cs | 4 +- .../RecordChannelDialog.Designer.cs | 46 +- .../UiServices.Record/RecordChannelDialog.cs | 16 +- .../RecordChannelDialog.resx | 20 +- .../RecordTasksDialog.Designer.cs | 14 +- .../UiServices.Record/RecordTasksDialog.cs | 18 +- .../UiServices.Record/RecordTasksDialog.resx | 4 +- .../UiServices.Record.csproj | 2 +- 384 files changed, 33036 insertions(+), 33036 deletions(-) diff --git a/1.5 'Kruger 60'/ChannelList/ChannelList.csproj b/1.5 'Kruger 60'/ChannelList/ChannelList.csproj index 28218be8..8be65b5d 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelList.csproj +++ b/1.5 'Kruger 60'/ChannelList/ChannelList.csproj @@ -1,283 +1,283 @@ - - - - - Debug - AnyCPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C} - WinExe - Properties - Project.IpTv.ChannelList - ChannelList - v3.5 - 512 - - - SAK - SAK - SAK - SAK - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - Resources\IPTV.ico - - - - ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - False - ..\Third-party\TaskScheduler\2.2.2\v2.0\Microsoft.Win32.TaskScheduler.dll - - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - Form - - - ChannelListForm.cs - - - True - True - CommonUiResources.resx - - - - True - True - Resources.resx - - - True - True - InvariantTexts.resx - - - - - - True - True - Texts.resx - - - ChannelListForm.cs - Designer - - - ChannelListForm.cs - Designer - - - ResXFileCodeGenerator - InvariantTexts.Designer.cs - Designer - - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - - - Designer - - - ResXFileCodeGenerator - Texts.Designer.cs - Designer - - - ResXFileCodeGenerator - Designer - CommonUiResources.Designer.cs - - - Resources\solution-license.rtf - - - Resources\solution-license_es.rtf - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - - - - Resources\ListView_Tiles_16x16.png - - - Resources\solution-license.txt - - - Resources\solution-license_es.txt - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - - - {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider - - - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} - DvbStpClient - - - {b91c438d-0333-4d06-86cd-74ce82df6f40} - Etsi.Ts102034 - - - {e1748f45-dd50-4479-96f6-f7eba6f3e28b} - IpTv.MovistarPlus - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} - Services.Record.Serialization - - - {a4172cdd-c8fd-4c91-9aaf-54a948f26273} - Services.Record - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - True - - - {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} - UiServices.Common - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} - UiServices.Config - - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery - - - {ba481e42-f570-4d2c-94d4-21c4cce27762} - UiServices.DvbStpClient - - - {90f750b3-64db-493f-96a6-e68de5ea60a1} - UiServices.Forms - - - {971b720e-2ae8-4ea4-b5ce-7a1af11c3743} - UiServices.Record - - - - + + + + + Debug + AnyCPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C} + WinExe + Properties + IpTviewr.ChannelList + ChannelList + v3.5 + 512 + + + SAK + SAK + SAK + SAK + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Resources\IPTV.ico + + + + ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + + False + ..\Third-party\TaskScheduler\2.2.2\v2.0\Microsoft.Win32.TaskScheduler.dll + + + + + False + ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + Form + + + ChannelListForm.cs + + + True + True + CommonUiResources.resx + + + + True + True + Resources.resx + + + True + True + InvariantTexts.resx + + + + + + True + True + Texts.resx + + + ChannelListForm.cs + Designer + + + ChannelListForm.cs + Designer + + + ResXFileCodeGenerator + InvariantTexts.Designer.cs + Designer + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + Designer + + + ResXFileCodeGenerator + Texts.Designer.cs + Designer + + + ResXFileCodeGenerator + Designer + CommonUiResources.Designer.cs + + + Resources\solution-license.rtf + + + Resources\solution-license_es.rtf + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + Resources\ListView_Tiles_16x16.png + + + Resources\solution-license.txt + + + Resources\solution-license_es.txt + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + Core.IpTvProvider + + + {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + DvbStpClient + + + {b91c438d-0333-4d06-86cd-74ce82df6f40} + Etsi.Ts102034 + + + {e1748f45-dd50-4479-96f6-f7eba6f3e28b} + IpTv.MovistarPlus + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} + Services.Record.Serialization + + + {a4172cdd-c8fd-4c91-9aaf-54a948f26273} + Services.Record + + + {3a053f34-4edf-4071-b966-923255a0ae14} + Services.SqlServerCE + True + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + + + {ba481e42-f570-4d2c-94d4-21c4cce27762} + UiServices.DvbStpClient + + + {90f750b3-64db-493f-96a6-e68de5ea60a1} + UiServices.Forms + + + {971b720e-2ae8-4ea4-b5ce-7a1af11c3743} + UiServices.Record + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs b/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs index 0e57d1eb..19eaa344 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.ChannelList +namespace IpTviewr.ChannelList { partial class ChannelListForm { @@ -131,7 +131,7 @@ private void InitializeComponent() this.contextMenuListProperties = new System.Windows.Forms.ToolStripMenuItem(); this.labelNotification = new System.Windows.Forms.Label(); this.timerDismissNotification = new System.Windows.Forms.Timer(this.components); - this.listViewChannelList = new Project.IpTv.UiServices.Common.Controls.ListViewSortable(); + this.listViewChannelList = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.pictureNotificationIcon = new System.Windows.Forms.PictureBox(); this.buttonRecordChannel = new System.Windows.Forms.Button(); this.buttonDisplayChannel = new System.Windows.Forms.Button(); @@ -193,7 +193,7 @@ private void InitializeComponent() this.menuItemDvbRecent7, this.menuItemDvbRecent8, this.menuItemDvbRecent9}); - this.menuItemDvbRecent.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_History_MD_16x16; + this.menuItemDvbRecent.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_History_MD_16x16; this.menuItemDvbRecent.Name = "menuItemDvbRecent"; resources.ApplyResources(this.menuItemDvbRecent, "menuItemDvbRecent"); this.menuItemDvbRecent.DropDownOpening += new System.EventHandler(this.menuItemDvbRecent_DropDownOpening); @@ -283,14 +283,14 @@ private void InitializeComponent() // // menuItemProviderSelect // - this.menuItemProviderSelect.Image = global::Project.IpTv.ChannelList.Properties.Resources.ListBullets_16x16; + this.menuItemProviderSelect.Image = global::IpTviewr.ChannelList.Properties.Resources.ListBullets_16x16; this.menuItemProviderSelect.Name = "menuItemProviderSelect"; resources.ApplyResources(this.menuItemProviderSelect, "menuItemProviderSelect"); this.menuItemProviderSelect.Click += new System.EventHandler(this.menuItemProviderSelect_Click); // // menuItemProviderDetails // - this.menuItemProviderDetails.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Properties_16x16; + this.menuItemProviderDetails.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Properties_16x16; this.menuItemProviderDetails.Name = "menuItemProviderDetails"; resources.ApplyResources(this.menuItemProviderDetails, "menuItemProviderDetails"); this.menuItemProviderDetails.Click += new System.EventHandler(this.menuItemProviderDetails_Click); @@ -306,14 +306,14 @@ private void InitializeComponent() // menuItemPackagesSelect // resources.ApplyResources(this.menuItemPackagesSelect, "menuItemPackagesSelect"); - this.menuItemPackagesSelect.Image = global::Project.IpTv.ChannelList.Properties.Resources.ListBullets_16x16; + this.menuItemPackagesSelect.Image = global::IpTviewr.ChannelList.Properties.Resources.ListBullets_16x16; this.menuItemPackagesSelect.Name = "menuItemPackagesSelect"; this.menuItemPackagesSelect.Click += new System.EventHandler(this.menuItemPackagesSelect_Click); // // menuItemPackagesManage // resources.ApplyResources(this.menuItemPackagesManage, "menuItemPackagesManage"); - this.menuItemPackagesManage.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Edit_16x16; + this.menuItemPackagesManage.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Edit_16x16; this.menuItemPackagesManage.Name = "menuItemPackagesManage"; this.menuItemPackagesManage.Click += new System.EventHandler(this.menuItemPackagesManage_Click); // @@ -324,14 +324,14 @@ private void InitializeComponent() // // menuItemDvbSettings // - this.menuItemDvbSettings.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Settings_16x16; + this.menuItemDvbSettings.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Settings_16x16; this.menuItemDvbSettings.Name = "menuItemDvbSettings"; resources.ApplyResources(this.menuItemDvbSettings, "menuItemDvbSettings"); this.menuItemDvbSettings.Click += new System.EventHandler(this.menuItemDvbSettings_Click); // // menuItemDvbExport // - this.menuItemDvbExport.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Export_Data; + this.menuItemDvbExport.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Export_Data; this.menuItemDvbExport.Name = "menuItemDvbExport"; resources.ApplyResources(this.menuItemDvbExport, "menuItemDvbExport"); this.menuItemDvbExport.Click += new System.EventHandler(this.menuItemDvbExport_Click); @@ -343,7 +343,7 @@ private void InitializeComponent() // // menuItemDvbExit // - this.menuItemDvbExit.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Close_16x16; + this.menuItemDvbExit.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Close_16x16; resources.ApplyResources(this.menuItemDvbExit, "menuItemDvbExit"); this.menuItemDvbExit.Name = "menuItemDvbExit"; this.menuItemDvbExit.Click += new System.EventHandler(this.menuItemDvbExit_Click); @@ -381,7 +381,7 @@ private void InitializeComponent() this.menuItemChannelFavoritesSeparator1, this.menuItemChannelFavoritesAdd, this.menuItemChannelFavoritesEdit}); - this.menuItemChannelFavorites.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Favorites_16x16; + this.menuItemChannelFavorites.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Favorites_16x16; this.menuItemChannelFavorites.Name = "menuItemChannelFavorites"; resources.ApplyResources(this.menuItemChannelFavorites, "menuItemChannelFavorites"); // @@ -462,14 +462,14 @@ private void InitializeComponent() // // menuItemChannelFavoritesAdd // - this.menuItemChannelFavoritesAdd.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Favorites_16x16; + this.menuItemChannelFavoritesAdd.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Favorites_16x16; this.menuItemChannelFavoritesAdd.Name = "menuItemChannelFavoritesAdd"; resources.ApplyResources(this.menuItemChannelFavoritesAdd, "menuItemChannelFavoritesAdd"); // // menuItemChannelFavoritesEdit // resources.ApplyResources(this.menuItemChannelFavoritesEdit, "menuItemChannelFavoritesEdit"); - this.menuItemChannelFavoritesEdit.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Edit_16x16; + this.menuItemChannelFavoritesEdit.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Edit_16x16; this.menuItemChannelFavoritesEdit.Name = "menuItemChannelFavoritesEdit"; this.menuItemChannelFavoritesEdit.Click += new System.EventHandler(this.menuItemChannelFavoritesEdit_Click); // @@ -480,7 +480,7 @@ private void InitializeComponent() // // menuItemChannelShow // - this.menuItemChannelShow.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Play_LG_16x16; + this.menuItemChannelShow.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Play_LG_16x16; this.menuItemChannelShow.Name = "menuItemChannelShow"; resources.ApplyResources(this.menuItemChannelShow, "menuItemChannelShow"); this.menuItemChannelShow.Click += new System.EventHandler(this.menuItemChannelShow_Click); @@ -498,14 +498,14 @@ private void InitializeComponent() // // menuItemChannelListView // - this.menuItemChannelListView.Image = global::Project.IpTv.ChannelList.CommonUiResources.ListView_Tiles_16x16; + this.menuItemChannelListView.Image = global::IpTviewr.ChannelList.CommonUiResources.ListView_Tiles_16x16; this.menuItemChannelListView.Name = "menuItemChannelListView"; resources.ApplyResources(this.menuItemChannelListView, "menuItemChannelListView"); this.menuItemChannelListView.Click += new System.EventHandler(this.menuItemChannelListView_Click); // // menuItemChannelEditList // - this.menuItemChannelEditList.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Edit_16x16; + this.menuItemChannelEditList.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Edit_16x16; this.menuItemChannelEditList.Name = "menuItemChannelEditList"; resources.ApplyResources(this.menuItemChannelEditList, "menuItemChannelEditList"); // @@ -516,21 +516,21 @@ private void InitializeComponent() // // menuItemChannelVerify // - this.menuItemChannelVerify.Image = global::Project.IpTv.ChannelList.Properties.Resources.Settings_16x616; + this.menuItemChannelVerify.Image = global::IpTviewr.ChannelList.Properties.Resources.Settings_16x616; this.menuItemChannelVerify.Name = "menuItemChannelVerify"; resources.ApplyResources(this.menuItemChannelVerify, "menuItemChannelVerify"); this.menuItemChannelVerify.Click += new System.EventHandler(this.menuItemChannelVerify_Click); // // menuItemChannelRefreshList // - this.menuItemChannelRefreshList.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Refresh_Blue_16x16; + this.menuItemChannelRefreshList.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Refresh_Blue_16x16; this.menuItemChannelRefreshList.Name = "menuItemChannelRefreshList"; resources.ApplyResources(this.menuItemChannelRefreshList, "menuItemChannelRefreshList"); this.menuItemChannelRefreshList.Click += new System.EventHandler(this.menuItemChannelRefreshList_Click); // // menuItemChannelDetails // - this.menuItemChannelDetails.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Properties_16x16; + this.menuItemChannelDetails.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Properties_16x16; this.menuItemChannelDetails.Name = "menuItemChannelDetails"; resources.ApplyResources(this.menuItemChannelDetails, "menuItemChannelDetails"); this.menuItemChannelDetails.Click += new System.EventHandler(this.menuItemChannelDetails_Click); @@ -547,7 +547,7 @@ private void InitializeComponent() // // menuItemRecordingsRecord // - this.menuItemRecordingsRecord.Image = global::Project.IpTv.ChannelList.Properties.Resources.Record_16x16; + this.menuItemRecordingsRecord.Image = global::IpTviewr.ChannelList.Properties.Resources.Record_16x16; this.menuItemRecordingsRecord.Name = "menuItemRecordingsRecord"; resources.ApplyResources(this.menuItemRecordingsRecord, "menuItemRecordingsRecord"); this.menuItemRecordingsRecord.Click += new System.EventHandler(this.menuItemRecordingsRecord_Click); @@ -555,7 +555,7 @@ private void InitializeComponent() // menuItemRecordingsManage // resources.ApplyResources(this.menuItemRecordingsManage, "menuItemRecordingsManage"); - this.menuItemRecordingsManage.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Edit_16x16; + this.menuItemRecordingsManage.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Edit_16x16; this.menuItemRecordingsManage.Name = "menuItemRecordingsManage"; this.menuItemRecordingsManage.Click += new System.EventHandler(this.menuItemRecordingsManage_Click); // @@ -567,7 +567,7 @@ private void InitializeComponent() // menuItemRecordingsRepair // resources.ApplyResources(this.menuItemRecordingsRepair, "menuItemRecordingsRepair"); - this.menuItemRecordingsRepair.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Repair_16x16; + this.menuItemRecordingsRepair.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Repair_16x16; this.menuItemRecordingsRepair.Name = "menuItemRecordingsRepair"; this.menuItemRecordingsRepair.Click += new System.EventHandler(this.menuItemRecordingsRepair_Click); // @@ -634,7 +634,7 @@ private void InitializeComponent() // // menuItemEpgRefresh // - this.menuItemEpgRefresh.Image = global::Project.IpTv.ChannelList.Properties.Resources.RefreshBlue_16x16; + this.menuItemEpgRefresh.Image = global::IpTviewr.ChannelList.Properties.Resources.RefreshBlue_16x16; this.menuItemEpgRefresh.Name = "menuItemEpgRefresh"; resources.ApplyResources(this.menuItemEpgRefresh, "menuItemEpgRefresh"); // @@ -653,21 +653,21 @@ private void InitializeComponent() // // menuItemHelpDocumentation // - this.menuItemHelpDocumentation.Image = global::Project.IpTv.ChannelList.Properties.Resources.Help_16x16; + this.menuItemHelpDocumentation.Image = global::IpTviewr.ChannelList.Properties.Resources.Help_16x16; this.menuItemHelpDocumentation.Name = "menuItemHelpDocumentation"; resources.ApplyResources(this.menuItemHelpDocumentation, "menuItemHelpDocumentation"); this.menuItemHelpDocumentation.Click += new System.EventHandler(this.menuItemHelpDocumentation_Click); // // menuItemHelpHomePage // - this.menuItemHelpHomePage.Image = global::Project.IpTv.ChannelList.Properties.Resources.WebBrowser_16x16; + this.menuItemHelpHomePage.Image = global::IpTviewr.ChannelList.Properties.Resources.WebBrowser_16x16; this.menuItemHelpHomePage.Name = "menuItemHelpHomePage"; resources.ApplyResources(this.menuItemHelpHomePage, "menuItemHelpHomePage"); this.menuItemHelpHomePage.Click += new System.EventHandler(this.menuItemHelpHomePage_Click); // // menuItemHelpReportIssue // - this.menuItemHelpReportIssue.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_ReportError_16x16; + this.menuItemHelpReportIssue.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_ReportError_16x16; this.menuItemHelpReportIssue.Name = "menuItemHelpReportIssue"; resources.ApplyResources(this.menuItemHelpReportIssue, "menuItemHelpReportIssue"); this.menuItemHelpReportIssue.Click += new System.EventHandler(this.menuItemHelpReportIssue_Click); @@ -679,14 +679,14 @@ private void InitializeComponent() // // menuItemHelpCheckUpdates // - this.menuItemHelpCheckUpdates.Image = global::Project.IpTv.ChannelList.Properties.Resources.DownloadWebSettings_16x16; + this.menuItemHelpCheckUpdates.Image = global::IpTviewr.ChannelList.Properties.Resources.DownloadWebSettings_16x16; this.menuItemHelpCheckUpdates.Name = "menuItemHelpCheckUpdates"; resources.ApplyResources(this.menuItemHelpCheckUpdates, "menuItemHelpCheckUpdates"); this.menuItemHelpCheckUpdates.Click += new System.EventHandler(this.menuItemHelpCheckUpdates_Click); // // menuItemHelpAbout // - this.menuItemHelpAbout.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Properties_16x16; + this.menuItemHelpAbout.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Properties_16x16; this.menuItemHelpAbout.Name = "menuItemHelpAbout"; resources.ApplyResources(this.menuItemHelpAbout, "menuItemHelpAbout"); this.menuItemHelpAbout.Click += new System.EventHandler(this.menuItemHelpAbout_Click); @@ -720,14 +720,14 @@ private void InitializeComponent() // // contextMenuListShow // - this.contextMenuListShow.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Play_LG_16x16; + this.contextMenuListShow.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Play_LG_16x16; this.contextMenuListShow.Name = "contextMenuListShow"; resources.ApplyResources(this.contextMenuListShow, "contextMenuListShow"); this.contextMenuListShow.Click += new System.EventHandler(this.contextMenuListShow_Click); // // contextMenuListRecord // - this.contextMenuListRecord.Image = global::Project.IpTv.ChannelList.Properties.Resources.Record_16x16; + this.contextMenuListRecord.Image = global::IpTviewr.ChannelList.Properties.Resources.Record_16x16; this.contextMenuListRecord.Name = "contextMenuListRecord"; resources.ApplyResources(this.contextMenuListRecord, "contextMenuListRecord"); this.contextMenuListRecord.Click += new System.EventHandler(this.menuItemRecordingsRecord_Click); @@ -762,14 +762,14 @@ private void InitializeComponent() this.contextMenuListCopyAll, this.separatorContextList3, this.contextMenuListExportM3u}); - this.contextMenuListCopy.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Copy_Clip_16x16; + this.contextMenuListCopy.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Copy_Clip_16x16; this.contextMenuListCopy.Name = "contextMenuListCopy"; resources.ApplyResources(this.contextMenuListCopy, "contextMenuListCopy"); this.contextMenuListCopy.DropDownOpening += new System.EventHandler(this.contextMenuListCopy_DropDownOpening); // // contextMenuListCopyURL // - this.contextMenuListCopyURL.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Hyperlink_16x16; + this.contextMenuListCopyURL.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Hyperlink_16x16; this.contextMenuListCopyURL.Name = "contextMenuListCopyURL"; resources.ApplyResources(this.contextMenuListCopyURL, "contextMenuListCopyURL"); this.contextMenuListCopyURL.Click += new System.EventHandler(this.contextMenuListCopyURL_Click); @@ -782,7 +782,7 @@ private void InitializeComponent() // // contextMenuListCopyAll // - this.contextMenuListCopyAll.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Copy_Table; + this.contextMenuListCopyAll.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Copy_Table; this.contextMenuListCopyAll.Name = "contextMenuListCopyAll"; resources.ApplyResources(this.contextMenuListCopyAll, "contextMenuListCopyAll"); this.contextMenuListCopyAll.Click += new System.EventHandler(this.contextMenuListCopyAll_Click); @@ -834,7 +834,7 @@ private void InitializeComponent() // buttonRecordChannel // resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); - this.buttonRecordChannel.Image = global::Project.IpTv.ChannelList.Properties.Resources.Record_16x16; + this.buttonRecordChannel.Image = global::IpTviewr.ChannelList.Properties.Resources.Record_16x16; this.buttonRecordChannel.Name = "buttonRecordChannel"; this.buttonRecordChannel.UseVisualStyleBackColor = true; this.buttonRecordChannel.Click += new System.EventHandler(this.buttonRecordChannel_Click); @@ -842,7 +842,7 @@ private void InitializeComponent() // buttonDisplayChannel // resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); - this.buttonDisplayChannel.Image = global::Project.IpTv.ChannelList.CommonUiResources.Action_Play_LG_16x16; + this.buttonDisplayChannel.Image = global::IpTviewr.ChannelList.CommonUiResources.Action_Play_LG_16x16; this.buttonDisplayChannel.Name = "buttonDisplayChannel"; this.buttonDisplayChannel.UseVisualStyleBackColor = true; this.buttonDisplayChannel.Click += new System.EventHandler(this.buttonDisplayChannel_Click); diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs b/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs index c000c0f1..35c85e51 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs @@ -5,23 +5,23 @@ using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; using Microsoft.SqlServer.MessageBox; -using Project.IpTv.ChannelList.Properties; -using Project.IpTv.Common; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Services.Record; -using Project.IpTv.Services.Record.Serialization; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Common.Start; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using Project.IpTv.UiServices.Configuration.Settings.TvPlayers; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Discovery.BroadcastList; -using Project.IpTv.UiServices.DvbStpClient; -//using Project.IpTv.UiServices.EPG; -using Project.IpTv.UiServices.Forms; -using Project.IpTv.UiServices.Record; +using IpTviewr.ChannelList.Properties; +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.Record; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Common.Start; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Configuration.Settings.TvPlayers; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Discovery.BroadcastList; +using IpTviewr.UiServices.DvbStpClient; +//using IpTviewr.UiServices.EPG; +using IpTviewr.UiServices.Forms; +using IpTviewr.UiServices.Record; using System; using System.Collections.Generic; using System.ComponentModel; @@ -31,11 +31,11 @@ using System.Net; using System.Text; using System.Windows.Forms; -using Project.IpTv.Core.IpTvProvider; -//using Project.IpTv.Core.IpTvProvider.EPG; +using IpTviewr.Core.IpTvProvider; +//using IpTviewr.Core.IpTvProvider.EPG; using System.Diagnostics; -namespace Project.IpTv.ChannelList +namespace IpTviewr.ChannelList { public sealed partial class ChannelListForm : CommonBaseForm, ISplashScreenAwareForm { @@ -1109,7 +1109,7 @@ private void UpdateEpgData() if (hours < 0) return; var dbFile = Path.Combine(AppUiConfiguration.Current.Folders.Cache, "EPG.sdf"); - var status = Project.IpTv.Services.EPG.Serialization.EpgDbQuery.GetStatus(dbFile); + var status = IpTviewr.Services.EPG.Serialization.EpgDbQuery.GetStatus(dbFile); if (status.IsNew) { diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx index e7c9eea6..2286fe4a 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx @@ -1595,7 +1595,7 @@ listViewChannelList - Project.IpTv.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -2276,6 +2276,6 @@ ChannelListForm - Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/ChannelList/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/ChannelList/CommonUiResources.Designer.cs index 7cde38f0..fbd39ba3 100644 --- a/1.5 'Kruger 60'/ChannelList/CommonUiResources.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/CommonUiResources.Designer.cs @@ -1,333 +1,333 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.ChannelList { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonUiResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonUiResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.ChannelList.CommonUiResources", typeof(CommonUiResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Close_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Close_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Table { - get { - object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Delete_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Edit_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Edit_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_EditTask_16x16 { - get { - object obj = ResourceManager.GetObject("Action_EditTask_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Export_Data { - get { - object obj = ResourceManager.GetObject("Action_Export_Data", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Export_List_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Export_List_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Favorites_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Favorites_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Go_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Go_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_History_MD_16x16 { - get { - object obj = ResourceManager.GetObject("Action_History_MD_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Hyperlink_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Hyperlink_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Import_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Import_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Link_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Link_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_NextRecord_16x16 { - get { - object obj = ResourceManager.GetObject("Action_NextRecord_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Play_LG_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_PreviousRecord_16x16 { - get { - object obj = ResourceManager.GetObject("Action_PreviousRecord_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Properties_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Refresh_Blue_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Refresh_Blue_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Repair_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Repair_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_ReportError_16x16 { - get { - object obj = ResourceManager.GetObject("Action_ReportError_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Run_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Run_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Save_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Save_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Settings_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Settings_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListView_Tiles_16x16 { - get { - object obj = ResourceManager.GetObject("ListView_Tiles_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.ChannelList { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonUiResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonUiResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.ChannelList.CommonUiResources", typeof(CommonUiResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Close_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Close_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Table { + get { + object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_EditTask_16x16 { + get { + object obj = ResourceManager.GetObject("Action_EditTask_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Export_Data { + get { + object obj = ResourceManager.GetObject("Action_Export_Data", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Export_List_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Export_List_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Favorites_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Favorites_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Go_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Go_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_History_MD_16x16 { + get { + object obj = ResourceManager.GetObject("Action_History_MD_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Hyperlink_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Hyperlink_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Import_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Import_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Link_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Link_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_NextRecord_16x16 { + get { + object obj = ResourceManager.GetObject("Action_NextRecord_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Play_LG_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_PreviousRecord_16x16 { + get { + object obj = ResourceManager.GetObject("Action_PreviousRecord_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Refresh_Blue_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Refresh_Blue_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Repair_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Repair_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_ReportError_16x16 { + get { + object obj = ResourceManager.GetObject("Action_ReportError_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Run_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Run_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Save_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Save_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Settings_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Settings_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListView_Tiles_16x16 { + get { + object obj = ResourceManager.GetObject("ListView_Tiles_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/ChannelList/MyApplication.cs b/1.5 'Kruger 60'/ChannelList/MyApplication.cs index b9b760ad..9f4b61a3 100644 --- a/1.5 'Kruger 60'/ChannelList/MyApplication.cs +++ b/1.5 'Kruger 60'/ChannelList/MyApplication.cs @@ -2,8 +2,8 @@ // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using Microsoft.SqlServer.MessageBox; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Configuration; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Configuration; using System; using System.Collections.Generic; using System.IO; @@ -12,9 +12,9 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using Project.IpTv.Common; +using IpTviewr.Common; -namespace Project.IpTv.ChannelList +namespace IpTviewr.ChannelList { public static class MyApplication { diff --git a/1.5 'Kruger 60'/ChannelList/MyApplicationContext.cs b/1.5 'Kruger 60'/ChannelList/MyApplicationContext.cs index b6c0dfad..69ae6ec9 100644 --- a/1.5 'Kruger 60'/ChannelList/MyApplicationContext.cs +++ b/1.5 'Kruger 60'/ChannelList/MyApplicationContext.cs @@ -1,9 +1,9 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Common.Start; -using Project.IpTv.UiServices.Configuration; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Start; +using IpTviewr.UiServices.Configuration; using System; using System.Collections.Generic; using System.IO; @@ -12,7 +12,7 @@ using System.Threading; using System.Windows.Forms; -namespace Project.IpTv.ChannelList +namespace IpTviewr.ChannelList { internal class MyApplicationContext : SplashApplicationContext { diff --git a/1.5 'Kruger 60'/ChannelList/Program.cs b/1.5 'Kruger 60'/ChannelList/Program.cs index bbf8fede..542c8ec9 100644 --- a/1.5 'Kruger 60'/ChannelList/Program.cs +++ b/1.5 'Kruger 60'/ChannelList/Program.cs @@ -1,46 +1,46 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Forms; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Windows.Forms; - -namespace Project.IpTv.ChannelList -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static int Main(string[] arguments) - { - // set thread name for debugging - Thread.CurrentThread.Name = "Program main thread"; - - //Application.ThreadException += Application_ThreadException; - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - var appContext = new MyApplicationContext(); - Application.Run(appContext); - var exitCode = appContext.ExitCode; - appContext.Dispose(); - - BasicGoogleTelemetry.SendScreenHit("ChannelList_Main: End"); - BasicGoogleTelemetry.ManageSession(true); - BasicGoogleTelemetry.EnsureHitsSents(); - - return exitCode; - } // Main - - static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) - { - MyApplication.HandleException(null, e.Exception); - } // Application_ThreadException - } // class Program -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Forms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.ChannelList +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static int Main(string[] arguments) + { + // set thread name for debugging + Thread.CurrentThread.Name = "Program main thread"; + + //Application.ThreadException += Application_ThreadException; + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + var appContext = new MyApplicationContext(); + Application.Run(appContext); + var exitCode = appContext.ExitCode; + appContext.Dispose(); + + BasicGoogleTelemetry.SendScreenHit("ChannelList_Main: End"); + BasicGoogleTelemetry.ManageSession(true); + BasicGoogleTelemetry.EnsureHitsSents(); + + return exitCode; + } // Main + + static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + MyApplication.HandleException(null, e.Exception); + } // Application_ThreadException + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs index fff07d8e..0221734e 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.ChannelList.Properties { +namespace IpTviewr.ChannelList.Properties { using System; @@ -39,7 +39,7 @@ internal InvariantTexts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.ChannelList.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.ChannelList.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/Resources.Designer.cs index 20796887..fb906dcb 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/Resources.Designer.cs @@ -1,323 +1,323 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.ChannelList.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.ChannelList.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap AboutIcon { - get { - object obj = ResourceManager.GetObject("AboutIcon", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DownloadWeb_16x16 { - get { - object obj = ResourceManager.GetObject("DownloadWeb_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DownloadWebSettings_16x16 { - get { - object obj = ResourceManager.GetObject("DownloadWebSettings_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Error_24x24 { - get { - object obj = ResourceManager.GetObject("Error_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Exception_24x24 { - get { - object obj = ResourceManager.GetObject("Exception_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Help_16x16 { - get { - object obj = ResourceManager.GetObject("Help_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap HighPriority_24x24 { - get { - object obj = ResourceManager.GetObject("HighPriority_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Info_24x24 { - get { - object obj = ResourceManager.GetObject("Info_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon IPTV { - get { - object obj = ResourceManager.GetObject("IPTV", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListBullets_16x16 { - get { - object obj = ResourceManager.GetObject("ListBullets_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Properties_16x16 { - get { - object obj = ResourceManager.GetObject("Properties_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Record_16x16 { - get { - object obj = ResourceManager.GetObject("Record_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap RefreshBlue_16x16 { - get { - object obj = ResourceManager.GetObject("RefreshBlue_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap RightArrowShort_Green_16x16 { - get { - object obj = ResourceManager.GetObject("RightArrowShort_Green_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Settings_16x616 { - get { - object obj = ResourceManager.GetObject("Settings_16x616", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SortAscending_16x16 { - get { - object obj = ResourceManager.GetObject("SortAscending_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SortAZ_16x16 { - get { - object obj = ResourceManager.GetObject("SortAZ_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SortDescending_16x16 { - get { - object obj = ResourceManager.GetObject("SortDescending_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SortZA_16x16 { - get { - object obj = ResourceManager.GetObject("SortZA_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SplashScreenBackground { - get { - object obj = ResourceManager.GetObject("SplashScreenBackground", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Success_24x24 { - get { - object obj = ResourceManager.GetObject("Success_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ThumbnailView_16x16 { - get { - object obj = ResourceManager.GetObject("ThumbnailView_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ViewThumbnails_16x16 { - get { - object obj = ResourceManager.GetObject("ViewThumbnails_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Warning_24x24 { - get { - object obj = ResourceManager.GetObject("Warning_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Warning_48x48 { - get { - object obj = ResourceManager.GetObject("Warning_48x48", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WebBrowser_16x16 { - get { - object obj = ResourceManager.GetObject("WebBrowser_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.ChannelList.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.ChannelList.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AboutIcon { + get { + object obj = ResourceManager.GetObject("AboutIcon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DownloadWeb_16x16 { + get { + object obj = ResourceManager.GetObject("DownloadWeb_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DownloadWebSettings_16x16 { + get { + object obj = ResourceManager.GetObject("DownloadWebSettings_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Error_24x24 { + get { + object obj = ResourceManager.GetObject("Error_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Exception_24x24 { + get { + object obj = ResourceManager.GetObject("Exception_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Help_16x16 { + get { + object obj = ResourceManager.GetObject("Help_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap HighPriority_24x24 { + get { + object obj = ResourceManager.GetObject("HighPriority_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Info_24x24 { + get { + object obj = ResourceManager.GetObject("Info_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon IPTV { + get { + object obj = ResourceManager.GetObject("IPTV", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListBullets_16x16 { + get { + object obj = ResourceManager.GetObject("ListBullets_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Record_16x16 { + get { + object obj = ResourceManager.GetObject("Record_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RefreshBlue_16x16 { + get { + object obj = ResourceManager.GetObject("RefreshBlue_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RightArrowShort_Green_16x16 { + get { + object obj = ResourceManager.GetObject("RightArrowShort_Green_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Settings_16x616 { + get { + object obj = ResourceManager.GetObject("Settings_16x616", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SortAscending_16x16 { + get { + object obj = ResourceManager.GetObject("SortAscending_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SortAZ_16x16 { + get { + object obj = ResourceManager.GetObject("SortAZ_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SortDescending_16x16 { + get { + object obj = ResourceManager.GetObject("SortDescending_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SortZA_16x16 { + get { + object obj = ResourceManager.GetObject("SortZA_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SplashScreenBackground { + get { + object obj = ResourceManager.GetObject("SplashScreenBackground", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Success_24x24 { + get { + object obj = ResourceManager.GetObject("Success_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThumbnailView_16x16 { + get { + object obj = ResourceManager.GetObject("ThumbnailView_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ViewThumbnails_16x16 { + get { + object obj = ResourceManager.GetObject("ViewThumbnails_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Warning_24x24 { + get { + object obj = ResourceManager.GetObject("Warning_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Warning_48x48 { + get { + object obj = ResourceManager.GetObject("Warning_48x48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap WebBrowser_16x16 { + get { + object obj = ResourceManager.GetObject("WebBrowser_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/Settings.Designer.cs index 8c52d2b2..4641f04d 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/Settings.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.ChannelList.Properties { +namespace IpTviewr.ChannelList.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Settings.settings b/1.5 'Kruger 60'/ChannelList/Properties/Settings.settings index 8475a33c..369c943c 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Settings.settings +++ b/1.5 'Kruger 60'/ChannelList/Properties/Settings.settings @@ -1,5 +1,5 @@  - + diff --git a/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs index 34558f92..85a191e6 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/Texts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.ChannelList.Properties { +namespace IpTviewr.ChannelList.Properties { using System; @@ -39,7 +39,7 @@ internal Texts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.ChannelList.Properties.Texts", typeof(Texts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.ChannelList.Properties.Texts", typeof(Texts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/ChannelList/app.config b/1.5 'Kruger 60'/ChannelList/app.config index caca495f..a1c395b5 100644 --- a/1.5 'Kruger 60'/ChannelList/app.config +++ b/1.5 'Kruger 60'/ChannelList/app.config @@ -2,11 +2,11 @@ -
+
- + @@ -16,6 +16,6 @@ - + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj index 1bcb9943..5031c2f8 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj @@ -1,106 +1,106 @@ - - - - - Debug - AnyCPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} - Library - Properties - Project.IpTv.Core.IpTvProvider - Core.IpTvProvider - v3.5 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - True - True - Texts.resx - - - - - - - - {b91c438d-0333-4d06-86cd-74ce82df6f40} - Etsi.Ts102034 - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {8986cd52-0c65-42d6-9c47-20ff47cf87bb} - Project.Native - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} - UiServices.Config - - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery - - - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - + + + + + Debug + AnyCPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} + Library + Properties + IpTviewr.Core.IpTvProvider + Core.IpTvProvider + v3.5 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + True + True + Texts.resx + + + + + + + + {b91c438d-0333-4d06-86cd-74ce82df6f40} + Etsi.Ts102034 + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {8986cd52-0c65-42d6-9c47-20ff47cf87bb} + Project.Native + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs b/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs index 58d94a46..282fcc36 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs @@ -1,156 +1,156 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using Project.IpTv.UiServices.Configuration.Settings.TvPlayers; -using Project.IpTv.UiServices.Discovery; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Security.Permissions; -using System.Text; -using System.Windows.Forms; -using Project.IpTv.Native; -using Microsoft.SqlServer.MessageBox; - -namespace Project.IpTv.Core.IpTvProvider -{ - public static class ExternalTvPlayer - { - private static string[] LaunchParamKeys; - - public static void ShowTvChannel(Form owner, UiBroadcastService service, bool defaultPlayer = true) - { - TvPlayer player; - - if (service == null) return; - if (service.IsHidden) return; - - if (service.IsInactive) - { - var box = new ExceptionMessageBox() - { - Caption = owner.Text, - Text = string.Format(Properties.Texts.ShowTvChannelInactiveService, service.DisplayName), - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Question, - Buttons = ExceptionMessageBoxButtons.YesNo, - DefaultButton = ExceptionMessageBoxDefaultButton.Button2, - }; - if (box.Show(owner) != System.Windows.Forms.DialogResult.Yes) return; - } // if - - var tvPlayerSettings = TvPlayersSettingsRegistration.Settings; - if (defaultPlayer) - { - player = tvPlayerSettings.GetDefaultPlayer(); - } - else - { - using (var dialog = new SelectTvPlayerDialog()) - { - if (dialog.ShowDialog(owner) != DialogResult.OK) - { - return; - } // if - - player = dialog.SelectedPlayer; - } // using - } // if-else - - ExternalTvPlayer.Launch(player, service, !tvPlayerSettings.DirectLaunch); - } // ShowTvChannel - - public static void Launch(TvPlayer player, UiBroadcastService service, bool throughShortcut) - { - if (!File.Exists(player.Path)) - { - var ex = new FileNotFoundException(); - throw new FileNotFoundException(ex.Message + "\r\n" + player.Path); - } // if - - if (LaunchParamKeys == null) - { - LaunchParamKeys = new string[] - { - "Channel.Url", - "Channel.Name", - "Channel.Description", - "Channel.Icon.Path", - }; - } // if - - var paramValues = new string[] - { - service.LocationUrl, - service.DisplayName, - service.DisplayDescription, - service.Logo.GetLogoIconPath(), - }; - - var parameters = ArgumentsManager.CreateParameters(LaunchParamKeys, paramValues, false); - var arguments = ArgumentsManager.ExpandArguments(player.Arguments, parameters, TvPlayer.ParameterOpenBrace, TvPlayer.ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); - var launchArguments = ArgumentsManager.JoinArguments(arguments); - - if (throughShortcut) - { - LaunchShortcut(player, service, launchArguments); - } - else - { - LaunchProcess(player, launchArguments); - } // if-else - } // Launch - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - private static void LaunchShortcut(TvPlayer player, UiBroadcastService service, string arguments) - { - var shortcutPath = Path.Combine(AppUiConfiguration.Current.Folders.Cache, service.FullServiceName) + ".lnk"; - - // delete exising shortcut - if (File.Exists(shortcutPath)) - { - File.SetAttributes(shortcutPath, FileAttributes.Normal); - File.Delete(shortcutPath); - } // if - - var shortcut = new ShellLink(); - shortcut.TargetPath = player.Path; - shortcut.Arguments = arguments; - shortcut.Description = string.Format(Properties.Texts.ExternalPlayerShortcutDescription, player.Name, service.DisplayName); - shortcut.IconLocation = service.Logo.GetLogoIconPath(); - shortcutPath = shortcut.CreateShortcut(shortcutPath); - - var start = new ProcessStartInfo() - { - UseShellExecute = true, - FileName = shortcutPath, - ErrorDialog = true, - }; - using (var process = Process.Start(start)) - { - // no op - } // using process - } // LaunchShortcut - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - private static void LaunchProcess(TvPlayer player, string arguments) - { - var start = new ProcessStartInfo() - { - UseShellExecute = false, - ErrorDialog = true, - FileName = player.Path, - Arguments = arguments, - }; - using (var process = Process.Start(start)) - { - // no op - } // using process - } // LaunchProcess - } // ExternalTvPlayer -} // namespace +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Configuration.Settings.TvPlayers; +using IpTviewr.UiServices.Discovery; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Security.Permissions; +using System.Text; +using System.Windows.Forms; +using IpTviewr.Native; +using Microsoft.SqlServer.MessageBox; + +namespace IpTviewr.Core.IpTvProvider +{ + public static class ExternalTvPlayer + { + private static string[] LaunchParamKeys; + + public static void ShowTvChannel(Form owner, UiBroadcastService service, bool defaultPlayer = true) + { + TvPlayer player; + + if (service == null) return; + if (service.IsHidden) return; + + if (service.IsInactive) + { + var box = new ExceptionMessageBox() + { + Caption = owner.Text, + Text = string.Format(Properties.Texts.ShowTvChannelInactiveService, service.DisplayName), + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Question, + Buttons = ExceptionMessageBoxButtons.YesNo, + DefaultButton = ExceptionMessageBoxDefaultButton.Button2, + }; + if (box.Show(owner) != System.Windows.Forms.DialogResult.Yes) return; + } // if + + var tvPlayerSettings = TvPlayersSettingsRegistration.Settings; + if (defaultPlayer) + { + player = tvPlayerSettings.GetDefaultPlayer(); + } + else + { + using (var dialog = new SelectTvPlayerDialog()) + { + if (dialog.ShowDialog(owner) != DialogResult.OK) + { + return; + } // if + + player = dialog.SelectedPlayer; + } // using + } // if-else + + ExternalTvPlayer.Launch(player, service, !tvPlayerSettings.DirectLaunch); + } // ShowTvChannel + + public static void Launch(TvPlayer player, UiBroadcastService service, bool throughShortcut) + { + if (!File.Exists(player.Path)) + { + var ex = new FileNotFoundException(); + throw new FileNotFoundException(ex.Message + "\r\n" + player.Path); + } // if + + if (LaunchParamKeys == null) + { + LaunchParamKeys = new string[] + { + "Channel.Url", + "Channel.Name", + "Channel.Description", + "Channel.Icon.Path", + }; + } // if + + var paramValues = new string[] + { + service.LocationUrl, + service.DisplayName, + service.DisplayDescription, + service.Logo.GetLogoIconPath(), + }; + + var parameters = ArgumentsManager.CreateParameters(LaunchParamKeys, paramValues, false); + var arguments = ArgumentsManager.ExpandArguments(player.Arguments, parameters, TvPlayer.ParameterOpenBrace, TvPlayer.ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); + var launchArguments = ArgumentsManager.JoinArguments(arguments); + + if (throughShortcut) + { + LaunchShortcut(player, service, launchArguments); + } + else + { + LaunchProcess(player, launchArguments); + } // if-else + } // Launch + + [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] + private static void LaunchShortcut(TvPlayer player, UiBroadcastService service, string arguments) + { + var shortcutPath = Path.Combine(AppUiConfiguration.Current.Folders.Cache, service.FullServiceName) + ".lnk"; + + // delete exising shortcut + if (File.Exists(shortcutPath)) + { + File.SetAttributes(shortcutPath, FileAttributes.Normal); + File.Delete(shortcutPath); + } // if + + var shortcut = new ShellLink(); + shortcut.TargetPath = player.Path; + shortcut.Arguments = arguments; + shortcut.Description = string.Format(Properties.Texts.ExternalPlayerShortcutDescription, player.Name, service.DisplayName); + shortcut.IconLocation = service.Logo.GetLogoIconPath(); + shortcutPath = shortcut.CreateShortcut(shortcutPath); + + var start = new ProcessStartInfo() + { + UseShellExecute = true, + FileName = shortcutPath, + ErrorDialog = true, + }; + using (var process = Process.Start(start)) + { + // no op + } // using process + } // LaunchShortcut + + [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] + private static void LaunchProcess(TvPlayer player, string arguments) + { + var start = new ProcessStartInfo() + { + UseShellExecute = false, + ErrorDialog = true, + FileName = player.Path, + Arguments = arguments, + }; + using (var process = Process.Start(start)) + { + // no op + } // using process + } // LaunchProcess + } // ExternalTvPlayer +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs index f2a37e78..3e27f5ac 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs @@ -1,40 +1,40 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.Core.IpTvProvider -{ - public abstract class IpTvProvider - { - #region Static methods - - public static IpTvProvider Current - { - get; - set; - } // Current - - #endregion - - #region IpTvProvider Members - - /* - public EPG.IEpgInfoProvider EpgInfo - { - get; - protected set; - } // EpgInfo - */ - - public abstract InitializationResult Initialize(); - - #endregion - } // class IpTvProvider -} // namespace +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Discovery; + +namespace IpTviewr.Core.IpTvProvider +{ + public abstract class IpTvProvider + { + #region Static methods + + public static IpTvProvider Current + { + get; + set; + } // Current + + #endregion + + #region IpTvProvider Members + + /* + public EPG.IEpgInfoProvider EpgInfo + { + get; + protected set; + } // EpgInfo + */ + + public abstract InitializationResult Initialize(); + + #endregion + } // class IpTvProvider +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs index e45345db..f8b46ff2 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs @@ -1,60 +1,60 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; - -namespace Project.IpTv.Core.IpTvProvider -{ - [Serializable] - [XmlRoot("IpTvProvider", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class IpTvProviderSettings : IConfigurationItem - { - public string ProviderClass - { - get; - set; - } // ProviderClass - - #region IConfigurationItem Members - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return false; } - } // SupportsValidation - - InitializationResult IConfigurationItem.Initializate() - { - try - { - if (IpTvProvider.Current != null) return InitializationResult.Ok; - - var ipTvProviderType = Type.GetType(ProviderClass); - var ipTvProvider = (IpTvProvider)Activator.CreateInstance(ipTvProviderType); - - var result = ipTvProvider.Initialize(); - IpTvProvider.Current = ipTvProvider; - - return result; - } - catch (Exception ex) - { - return new InitializationResult(ex); - } // try-catch - } // Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - throw new NotSupportedException(); - } // Validate - - #endregion - } // class IpTvProviderSettings -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; + +namespace IpTviewr.Core.IpTvProvider +{ + [Serializable] + [XmlRoot("IpTvProvider", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class IpTvProviderSettings : IConfigurationItem + { + public string ProviderClass + { + get; + set; + } // ProviderClass + + #region IConfigurationItem Members + + bool IConfigurationItem.SupportsInitialization + { + get { return false; } + } // SupportsInitialization + + bool IConfigurationItem.SupportsValidation + { + get { return false; } + } // SupportsValidation + + InitializationResult IConfigurationItem.Initializate() + { + try + { + if (IpTvProvider.Current != null) return InitializationResult.Ok; + + var ipTvProviderType = Type.GetType(ProviderClass); + var ipTvProvider = (IpTvProvider)Activator.CreateInstance(ipTvProviderType); + + var result = ipTvProvider.Initialize(); + IpTvProvider.Current = ipTvProvider; + + return result; + } + catch (Exception ex) + { + return new InitializationResult(ex); + } // try-catch + } // Initializate + + string IConfigurationItem.Validate(string ownerTag) + { + throw new NotSupportedException(); + } // Validate + + #endregion + } // class IpTvProviderSettings +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs index 07190f79..3bd94a4d 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs @@ -1,75 +1,75 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using Project.IpTv.UiServices.Configuration; - -namespace Project.IpTv.Core.IpTvProvider -{ - public class IpTvProviderSettingsRegistration : IConfigurationItemRegistration - { - private static int MyDirectIndex; - - public static IpTvProviderSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as IpTvProviderSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - #region IConfigurationItemRegistration Members - - public Guid Id - { - get { return new Guid(AppUiConfiguration.IpTvProviderSettingsRegistrationGuid); } - } // Id - - public bool HasEditor - { - get { return false; } - } // HasEditor - - public IConfigurationItem CreateDefault() - { - throw new NotSupportedException(); - } // CreateDefault - - public Type ItemType - { - get { return typeof(IpTvProviderSettings); } - } // ItemType - - public string EditorDisplayName - { - get { throw new NotSupportedException(); } - } // EditorDisplayName - - public string EditorDescription - { - get { throw new NotSupportedException(); } - } // EditorDescription - - public Image EditorImage - { - get { throw new NotSupportedException(); } - } // EditorImage - - public int EditorPriority - { - get { throw new NotSupportedException(); } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - throw new NotSupportedException(); - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - - #endregion - } // class IpTvProviderSettingsRegistration -} // namespace +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using IpTviewr.UiServices.Configuration; + +namespace IpTviewr.Core.IpTvProvider +{ + public class IpTvProviderSettingsRegistration : IConfigurationItemRegistration + { + private static int MyDirectIndex; + + public static IpTvProviderSettings Settings + { + get { return AppUiConfiguration.Current[MyDirectIndex] as IpTvProviderSettings; } + set { AppUiConfiguration.Current[MyDirectIndex] = value; } + } // Settings + + #region IConfigurationItemRegistration Members + + public Guid Id + { + get { return new Guid(AppUiConfiguration.IpTvProviderSettingsRegistrationGuid); } + } // Id + + public bool HasEditor + { + get { return false; } + } // HasEditor + + public IConfigurationItem CreateDefault() + { + throw new NotSupportedException(); + } // CreateDefault + + public Type ItemType + { + get { return typeof(IpTvProviderSettings); } + } // ItemType + + public string EditorDisplayName + { + get { throw new NotSupportedException(); } + } // EditorDisplayName + + public string EditorDescription + { + get { throw new NotSupportedException(); } + } // EditorDescription + + public Image EditorImage + { + get { throw new NotSupportedException(); } + } // EditorImage + + public int EditorPriority + { + get { throw new NotSupportedException(); } + } // EditorPriority + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + throw new NotSupportedException(); + } // CreateEditor + + public int DirectIndex + { + get { return MyDirectIndex; } + set { MyDirectIndex = value; } + } // DirectIndex + + #endregion + } // class IpTvProviderSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs index addb9f83..d46b8ccb 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Core.IpTvProvider")] -[assembly: AssemblyDescription("Project.IpTv.Core.IpTvProvider")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("64e2117e-9b83-4d77-8cf0-243bc3864598")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Core.IpTvProvider")] +[assembly: AssemblyDescription("IpTviewr.Core.IpTvProvider")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("64e2117e-9b83-4d77-8cf0-243bc3864598")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs index f13493cd..bb4ed19e 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs @@ -1,83 +1,83 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Core.IpTvProvider.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Core.IpTvProvider.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Launches {0} player to view IPTV channel '{1}'. - /// - internal static string ExternalPlayerShortcutDescription { - get { - return ResourceManager.GetString("ExternalPlayerShortcutDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. - /// - ///Do you still want to show {0}?. - /// - internal static string ShowTvChannelInactiveService { - get { - return ResourceManager.GetString("ShowTvChannelInactiveService", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Core.IpTvProvider.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Core.IpTvProvider.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Launches {0} player to view IPTV channel '{1}'. + /// + internal static string ExternalPlayerShortcutDescription { + get { + return ResourceManager.GetString("ExternalPlayerShortcutDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. + /// + ///Do you still want to show {0}?. + /// + internal static string ShowTvChannelInactiveService { + get { + return ResourceManager.GetString("ShowTvChannelInactiveService", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs index ac3a5bab..0e1566e1 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs @@ -1,350 +1,350 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public abstract class DvbStpBaseClient - { - public const int UdpMaxDatagramSize = 65535; - protected const int DefaultHeaderLength = 12; - protected const int MaxHeaderLength = DefaultHeaderLength + 4; - - private byte[] TempBytesBuffer; - - public DvbStpBaseClient(IPAddress ip, int port) - { - MulticastIpAddress = ip; - MulticastPort = port; - ReceiveDatagramTimeout = 7500; // 7.5 seconds (7.5 s * 1,000 ms) - OperationTimeout = 600000; // 10 minutes (10 m * 60 s * 1,000 ms) - } // constructor - - public IPAddress MulticastIpAddress - { - get; - protected set; - } // MulticastIpAddress - - public int MulticastPort - { - get; - protected set; - } // MulticastPort - - public int ReceiveDatagramTimeout // in milliseconds - { - get; - set; - } // ReceiveDatagramTimeout - - public int DatagramCount - { - get; - private set; - } // public - - public bool CancelRequested - { - get; - protected set; - } // CancelRequested - - public DateTime StartTime - { - get; - private set; - } // StartTime - - public DateTime NoDataTimeoutStartTime - { - get; - private set; - } // NoDataTimeoutStartTime - - public int NoDataTimeout // in milliseconds - { - get; - set; - } // NoDataTimeout - - public int OperationTimeout // in milliseconds - { - get; - set; - } // OperationTimeout - - protected Socket Socket - { - get; - private set; - } // Socket - - protected byte[] DatagramData - { - get; - private set; - } // DatagramData - - protected DvbStpHeader Header - { - get; - private set; - } // Header - - protected int ReceivedBytes - { - get; - private set; - } // ReceivedBytes - - public virtual void Close() - { - if (Socket == null) return; - - Socket.Close(); - DatagramData = null; - TempBytesBuffer = null; - Header = null; - } // Close - - public virtual void CancelRequest() - { - CancelRequested = true; - } // CancelRequest - - protected void ReceiveData() - { - CancelRequested = false; - Connect(); - - while (!CancelRequested) - { - CheckTimeouts(); - - Receive(false); - if (Header.Version != 0) continue; - - // filter received section - if (FilterSection()) continue; - - // requested payloadId & segmentId found! - DecodeHeader(true); - - // process data - ProcessReceivedData(); - - // got all expected data? - if (EndReceptionLoop) - { - break; - } // if - } // while - } // ReceiveData - - protected virtual bool FilterSection() - { - return false; - } // FilterSection - - protected abstract void ProcessReceivedData(); - - protected bool EndReceptionLoop - { - get; - set; - } // EndReceptionLoop - - protected virtual void Connect() - { - Socket s; - MulticastOption multicastData; - - if (Socket != null) return; - - DatagramData = new byte[UdpMaxDatagramSize]; - TempBytesBuffer = new byte[4]; - - s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); - s.ReceiveTimeout = ReceiveDatagramTimeout; - s.Bind(new IPEndPoint(IPAddress.Any, MulticastPort)); - multicastData = new MulticastOption(MulticastIpAddress, IPAddress.Any); - s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastData); - - Socket = s; - StartNoDataTimeout(); - } // Connect - - protected void Receive(bool decodeHeader) - { - ReceivedBytes = Socket.Receive(DatagramData); - DatagramCount = DatagramCount + 1; - - if (ReceivedBytes < DefaultHeaderLength) throw new InvalidDataException("ReceivedBytes < DefaultHeaderLength"); - - DecodeBasicHeader(); - - if ((decodeHeader) && (Header.Version == 0)) - { - DecodeHeader(true); - } // if - } // Receive - - protected void DecodeBasicHeader() - { - Header = new DvbStpHeader(); - Header.Version = (byte)(DatagramData[0] & DvbStpHeaderMasks.Version); - - // byte 4 - Header.PayloadId = DatagramData[4]; - - // byte 5-6 - Header.SegmentIdNetworkLo = DatagramData[5]; - Header.SegmentIdNetworkHi = DatagramData[6]; - - // byte 7 - Header.SegmentVersion = DatagramData[7]; - } // DecodeBasicHeader - - protected void DecodeHeader(bool fullDecode) - { - short networkShort; - int networkInt; - byte[] RawHeader; - - RawHeader = DatagramData; - if (fullDecode) - { - PartialDecodeHeader(); - } // if - - // byte 0 - // Header.Version computed at reception time - Header.Reserved = (byte)((RawHeader[0] & DvbStpHeaderMasks.Reserved) >> 3); - Header.Encription = (byte)((RawHeader[0] & DvbStpHeaderMasks.Encription) >> 1); - //Header.HasCRC computed in partial decode - - // byte 1-3 - TempBytesBuffer[0] = 0x00; - TempBytesBuffer[1] = RawHeader[1]; - TempBytesBuffer[2] = RawHeader[2]; - TempBytesBuffer[3] = RawHeader[3]; - networkInt = BitConverter.ToInt32(TempBytesBuffer, 0); - Header.TotalSegmentSize = IPAddress.NetworkToHostOrder(networkInt); - - // byte 4 - // Computed at reception: Header.PayloadId = RawHeader[4]; - - // byte 5-6 - // Computed at reception: Header.SegmentIdNetworkLo = DatagramData[5]; - // Computed at reception: Header.SegmentIdNetworkHi = DatagramData[6]; - networkShort = BitConverter.ToInt16(RawHeader, 5); - Header.SegmentId = IPAddress.NetworkToHostOrder(networkShort); - - // byte 7 - // Computed at reception: Header.SegmentVersion = RawHeader[7]; - - // byte 8-9 - TempBytesBuffer[0] = RawHeader[8]; - TempBytesBuffer[1] = (byte)(RawHeader[9] & DvbStpHeaderMasks.SectionNumberLSB); - networkShort = BitConverter.ToInt16(TempBytesBuffer, 0); - Header.SectionNumber = (short)((IPAddress.NetworkToHostOrder(networkShort) >> 4) & 0x00FFFF); - - // byte 9-10 - TempBytesBuffer[0] = (byte)(RawHeader[9] & DvbStpHeaderMasks.LastSectionNumberMSB); - TempBytesBuffer[1] = RawHeader[10]; - networkShort = BitConverter.ToInt16(TempBytesBuffer, 0); - Header.LastSectionNumber = IPAddress.NetworkToHostOrder(networkShort); - - // byte 11 - Header.Compression = (DvbStpHeader.CompressionMethod)(RawHeader[0] & DvbStpHeaderMasks.Compression); - // Header.HasServiceProviderId computed in PartialDecode - // Header.PrivateHeaderLength computed in PartialDecode - if (Header.PrivateHeaderLength > 0) - { - Header.PrivateHeaderOffset = DefaultHeaderLength + (Header.HasServiceProviderId ? 4 : 0); - } - else - { - Header.PrivateHeaderOffset = -1; - } // if-else - - // byte 12-15 - if (Header.HasServiceProviderId) - { - networkInt = BitConverter.ToInt32(RawHeader, 12); - Header.ServiceProviderId = IPAddress.NetworkToHostOrder(networkInt); - } // if - - // CRC - if (Header.HasCRC) - { - networkInt = BitConverter.ToInt32(RawHeader, Header.PayloadOffset + Header.PayloadSize); - Header.CRC = IPAddress.NetworkToHostOrder(networkInt); - } // if - - // not-implemnted - if ((Header.Encription != 0) || (Header.Compression != 0)) - { - throw new NotImplementedException(); - } // if - } // DecodeHeader - - protected void PartialDecodeHeader() - { - byte[] RawHeader; - - RawHeader = DatagramData; - - // byte[0] - Header.HasCRC = (RawHeader[0] & DvbStpHeaderMasks.HasCRC) == 0 ? false : true; - - // byte[11] - Header.HasServiceProviderId = (RawHeader[11] & DvbStpHeaderMasks.HasServiceProviderId) == 0 ? false : true; - Header.PrivateHeaderLength = (byte)(RawHeader[11] & DvbStpHeaderMasks.PrivateHeaderLength); - - Header.PayloadOffset = DefaultHeaderLength + (Header.HasServiceProviderId ? 4 : 0) + Header.PrivateHeaderLength; - Header.PayloadSize = ReceivedBytes - Header.PayloadOffset - (Header.HasCRC ? 4 : 0); - } // PartialDecodeHeader - - #region Timeout handling - - private void StartNoDataTimeout() - { - StartTime = DateTime.Now; - NoDataTimeoutStartTime = StartTime; - } // StartTimeout - - protected void ResetNoDataTimeout() - { - NoDataTimeoutStartTime = DateTime.Now; - } // ResetNoDataTimeout - - protected void CheckTimeouts() - { - TimeSpan elapsed; - - if (NoDataTimeout > 0) - { - elapsed = DateTime.Now - NoDataTimeoutStartTime; - if (elapsed.TotalMilliseconds > NoDataTimeout) throw new TimeoutException(); - } // if - if (OperationTimeout > 0) - { - elapsed = DateTime.Now - StartTime; - if (elapsed.TotalMilliseconds > OperationTimeout) throw new TimeoutException(); - } // if - } // CheckTimeouts - - #endregion - } // class DvbStpBaseClient -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public abstract class DvbStpBaseClient + { + public const int UdpMaxDatagramSize = 65535; + protected const int DefaultHeaderLength = 12; + protected const int MaxHeaderLength = DefaultHeaderLength + 4; + + private byte[] TempBytesBuffer; + + public DvbStpBaseClient(IPAddress ip, int port) + { + MulticastIpAddress = ip; + MulticastPort = port; + ReceiveDatagramTimeout = 7500; // 7.5 seconds (7.5 s * 1,000 ms) + OperationTimeout = 600000; // 10 minutes (10 m * 60 s * 1,000 ms) + } // constructor + + public IPAddress MulticastIpAddress + { + get; + protected set; + } // MulticastIpAddress + + public int MulticastPort + { + get; + protected set; + } // MulticastPort + + public int ReceiveDatagramTimeout // in milliseconds + { + get; + set; + } // ReceiveDatagramTimeout + + public int DatagramCount + { + get; + private set; + } // public + + public bool CancelRequested + { + get; + protected set; + } // CancelRequested + + public DateTime StartTime + { + get; + private set; + } // StartTime + + public DateTime NoDataTimeoutStartTime + { + get; + private set; + } // NoDataTimeoutStartTime + + public int NoDataTimeout // in milliseconds + { + get; + set; + } // NoDataTimeout + + public int OperationTimeout // in milliseconds + { + get; + set; + } // OperationTimeout + + protected Socket Socket + { + get; + private set; + } // Socket + + protected byte[] DatagramData + { + get; + private set; + } // DatagramData + + protected DvbStpHeader Header + { + get; + private set; + } // Header + + protected int ReceivedBytes + { + get; + private set; + } // ReceivedBytes + + public virtual void Close() + { + if (Socket == null) return; + + Socket.Close(); + DatagramData = null; + TempBytesBuffer = null; + Header = null; + } // Close + + public virtual void CancelRequest() + { + CancelRequested = true; + } // CancelRequest + + protected void ReceiveData() + { + CancelRequested = false; + Connect(); + + while (!CancelRequested) + { + CheckTimeouts(); + + Receive(false); + if (Header.Version != 0) continue; + + // filter received section + if (FilterSection()) continue; + + // requested payloadId & segmentId found! + DecodeHeader(true); + + // process data + ProcessReceivedData(); + + // got all expected data? + if (EndReceptionLoop) + { + break; + } // if + } // while + } // ReceiveData + + protected virtual bool FilterSection() + { + return false; + } // FilterSection + + protected abstract void ProcessReceivedData(); + + protected bool EndReceptionLoop + { + get; + set; + } // EndReceptionLoop + + protected virtual void Connect() + { + Socket s; + MulticastOption multicastData; + + if (Socket != null) return; + + DatagramData = new byte[UdpMaxDatagramSize]; + TempBytesBuffer = new byte[4]; + + s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + s.ReceiveTimeout = ReceiveDatagramTimeout; + s.Bind(new IPEndPoint(IPAddress.Any, MulticastPort)); + multicastData = new MulticastOption(MulticastIpAddress, IPAddress.Any); + s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastData); + + Socket = s; + StartNoDataTimeout(); + } // Connect + + protected void Receive(bool decodeHeader) + { + ReceivedBytes = Socket.Receive(DatagramData); + DatagramCount = DatagramCount + 1; + + if (ReceivedBytes < DefaultHeaderLength) throw new InvalidDataException("ReceivedBytes < DefaultHeaderLength"); + + DecodeBasicHeader(); + + if ((decodeHeader) && (Header.Version == 0)) + { + DecodeHeader(true); + } // if + } // Receive + + protected void DecodeBasicHeader() + { + Header = new DvbStpHeader(); + Header.Version = (byte)(DatagramData[0] & DvbStpHeaderMasks.Version); + + // byte 4 + Header.PayloadId = DatagramData[4]; + + // byte 5-6 + Header.SegmentIdNetworkLo = DatagramData[5]; + Header.SegmentIdNetworkHi = DatagramData[6]; + + // byte 7 + Header.SegmentVersion = DatagramData[7]; + } // DecodeBasicHeader + + protected void DecodeHeader(bool fullDecode) + { + short networkShort; + int networkInt; + byte[] RawHeader; + + RawHeader = DatagramData; + if (fullDecode) + { + PartialDecodeHeader(); + } // if + + // byte 0 + // Header.Version computed at reception time + Header.Reserved = (byte)((RawHeader[0] & DvbStpHeaderMasks.Reserved) >> 3); + Header.Encription = (byte)((RawHeader[0] & DvbStpHeaderMasks.Encription) >> 1); + //Header.HasCRC computed in partial decode + + // byte 1-3 + TempBytesBuffer[0] = 0x00; + TempBytesBuffer[1] = RawHeader[1]; + TempBytesBuffer[2] = RawHeader[2]; + TempBytesBuffer[3] = RawHeader[3]; + networkInt = BitConverter.ToInt32(TempBytesBuffer, 0); + Header.TotalSegmentSize = IPAddress.NetworkToHostOrder(networkInt); + + // byte 4 + // Computed at reception: Header.PayloadId = RawHeader[4]; + + // byte 5-6 + // Computed at reception: Header.SegmentIdNetworkLo = DatagramData[5]; + // Computed at reception: Header.SegmentIdNetworkHi = DatagramData[6]; + networkShort = BitConverter.ToInt16(RawHeader, 5); + Header.SegmentId = IPAddress.NetworkToHostOrder(networkShort); + + // byte 7 + // Computed at reception: Header.SegmentVersion = RawHeader[7]; + + // byte 8-9 + TempBytesBuffer[0] = RawHeader[8]; + TempBytesBuffer[1] = (byte)(RawHeader[9] & DvbStpHeaderMasks.SectionNumberLSB); + networkShort = BitConverter.ToInt16(TempBytesBuffer, 0); + Header.SectionNumber = (short)((IPAddress.NetworkToHostOrder(networkShort) >> 4) & 0x00FFFF); + + // byte 9-10 + TempBytesBuffer[0] = (byte)(RawHeader[9] & DvbStpHeaderMasks.LastSectionNumberMSB); + TempBytesBuffer[1] = RawHeader[10]; + networkShort = BitConverter.ToInt16(TempBytesBuffer, 0); + Header.LastSectionNumber = IPAddress.NetworkToHostOrder(networkShort); + + // byte 11 + Header.Compression = (DvbStpHeader.CompressionMethod)(RawHeader[0] & DvbStpHeaderMasks.Compression); + // Header.HasServiceProviderId computed in PartialDecode + // Header.PrivateHeaderLength computed in PartialDecode + if (Header.PrivateHeaderLength > 0) + { + Header.PrivateHeaderOffset = DefaultHeaderLength + (Header.HasServiceProviderId ? 4 : 0); + } + else + { + Header.PrivateHeaderOffset = -1; + } // if-else + + // byte 12-15 + if (Header.HasServiceProviderId) + { + networkInt = BitConverter.ToInt32(RawHeader, 12); + Header.ServiceProviderId = IPAddress.NetworkToHostOrder(networkInt); + } // if + + // CRC + if (Header.HasCRC) + { + networkInt = BitConverter.ToInt32(RawHeader, Header.PayloadOffset + Header.PayloadSize); + Header.CRC = IPAddress.NetworkToHostOrder(networkInt); + } // if + + // not-implemnted + if ((Header.Encription != 0) || (Header.Compression != 0)) + { + throw new NotImplementedException(); + } // if + } // DecodeHeader + + protected void PartialDecodeHeader() + { + byte[] RawHeader; + + RawHeader = DatagramData; + + // byte[0] + Header.HasCRC = (RawHeader[0] & DvbStpHeaderMasks.HasCRC) == 0 ? false : true; + + // byte[11] + Header.HasServiceProviderId = (RawHeader[11] & DvbStpHeaderMasks.HasServiceProviderId) == 0 ? false : true; + Header.PrivateHeaderLength = (byte)(RawHeader[11] & DvbStpHeaderMasks.PrivateHeaderLength); + + Header.PayloadOffset = DefaultHeaderLength + (Header.HasServiceProviderId ? 4 : 0) + Header.PrivateHeaderLength; + Header.PayloadSize = ReceivedBytes - Header.PayloadOffset - (Header.HasCRC ? 4 : 0); + } // PartialDecodeHeader + + #region Timeout handling + + private void StartNoDataTimeout() + { + StartTime = DateTime.Now; + NoDataTimeoutStartTime = StartTime; + } // StartTimeout + + protected void ResetNoDataTimeout() + { + NoDataTimeoutStartTime = DateTime.Now; + } // ResetNoDataTimeout + + protected void CheckTimeouts() + { + TimeSpan elapsed; + + if (NoDataTimeout > 0) + { + elapsed = DateTime.Now - NoDataTimeoutStartTime; + if (elapsed.TotalMilliseconds > NoDataTimeout) throw new TimeoutException(); + } // if + if (OperationTimeout > 0) + { + elapsed = DateTime.Now - StartTime; + if (elapsed.TotalMilliseconds > OperationTimeout) throw new TimeoutException(); + } // if + } // CheckTimeouts + + #endregion + } // class DvbStpBaseClient +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj b/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj index 3c9b9b37..f249e297 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj @@ -1,78 +1,78 @@ - - - - - Debug - AnyCPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} - Library - Properties - Project.IpTv.DvbStp.Client - DvbStpClient - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} + Library + Properties + IpTviewr.DvbStp.Client + DvbStpClient + v3.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs index 2fc1f876..dbed17d4 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs @@ -1,53 +1,53 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public class DvbStpClientSegmentInfo - { - public DvbStpClientSegmentInfo() - { - // no op - } // constructor - - public DvbStpClientSegmentInfo(byte payloadId, short? segmentId) - { - PayloadId = payloadId; - SegmentId = segmentId; - } // constructor - - // Required IN parameter - public byte PayloadId - { - get; - set; - } // PayloadId - - // Optional IN parameter. If not set, downloads the first segment found for the given PayloadId - // Set with downloaded SegmentId on exit - public short? SegmentId - { - get; - set; - } // SegmentId - - // Set on exit - public byte SegmentVersion - { - get; - set; - } // SegmentVersion - - // Set on exit - public byte[] Data - { - get; - set; - } // Data - } // class DvbStpClientSegmentInfo -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public class DvbStpClientSegmentInfo + { + public DvbStpClientSegmentInfo() + { + // no op + } // constructor + + public DvbStpClientSegmentInfo(byte payloadId, short? segmentId) + { + PayloadId = payloadId; + SegmentId = segmentId; + } // constructor + + // Required IN parameter + public byte PayloadId + { + get; + set; + } // PayloadId + + // Optional IN parameter. If not set, downloads the first segment found for the given PayloadId + // Set with downloaded SegmentId on exit + public short? SegmentId + { + get; + set; + } // SegmentId + + // Set on exit + public byte SegmentVersion + { + get; + set; + } // SegmentVersion + + // Set on exit + public byte[] Data + { + get; + set; + } // Data + } // class DvbStpClientSegmentInfo +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.EventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.EventArgs.cs index ab7f17bd..cb9cb922 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.EventArgs.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.EventArgs.cs @@ -1,282 +1,282 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public partial class DvbStpEnhancedClient - { - public event EventHandler DownloadStarted; - public event EventHandler DownloadCompleted; - public event EventHandler SectionReceived; - public event EventHandler SegmentDownloadStarted; - public event EventHandler SegmentSectionReceived; - public event EventHandler SegmentDownloadRestarted; - public event EventHandler SegmentDownloadCompleted; - - #region EventArgs classes - - public class DownloadStartedEventArgs : EventArgs - { - public int SegmentsCount - { - get; - set; - } // SegmentsCount - } // class DvbStpEnhancedClient.DownloadStartedEventArgs - - public class DownloadCompletedEventArgs: EventArgs - { - public IList Payloads - { - get; - set; - } // Payloads - } // DvbStpEnhancedClient.DownloadCompletedEventArgs - - public class SegmentSectionReceivedEventArgs : DvbStpSimpleClient.PayloadSectionReceivedEventArgs - { - public int SegmentListIndex - { - get; - set; - } // SegmentListIndex - } // DvbStpEnhancedClient.SegmentSectionReceivedEventArgs - - public class SegmentDownloadRestartedEventArgs : DvbStpSimpleClient.DownloadRestartedEventArgs - { - public int SegmentListIndex - { - get; - set; - } // SegmentListIndex - - public int GlobalRestartCount - { - get; - set; - } // GlobalRestartCount - - public int RestartCount - { - get; - set; - } // RestartCount - } // DvbStpEnhancedClient.SegmentDownloadRestartedEventArgs - - public class SegmentDownloadCompletedEventArgs : EventArgs - { - private SegmentAssembler SegmentData; - - public SegmentDownloadCompletedEventArgs(SegmentAssembler segmentData) - { - SegmentData = segmentData; - } // constructor - - public int SegmentListIndex - { - get; - set; - } // SegmentListIndex - - public int SegmentsReceived - { - get; - set; - } // SegmentsReceived - - public int SegmentsPending - { - get; - set; - } // SegmentsPending - - public byte PayloadId; - public short SegmentId; - public byte SegmentVersion; - public int SectionCount; - - public byte[] GetPayloadData(bool keep) - { - var data = SegmentData.GetPayload(); - if (!keep) - { - SegmentData.Dispose(); - } // if - - return data; - } // GetPayloadData - } // DvbStpEnhancedClient.SegmentDownloadCompletedEventArgs - - #endregion - - #region FireEvent() methods - - protected virtual void FireDownloadStarted() - { - if (DownloadStarted == null) return; - - var e = new DownloadStartedEventArgs() - { - SegmentsCount = this.Payloads.Count - }; - OnDownloadStarted(this, e); - } // FireDownloadStarted - - protected virtual void FireDownloadCompleted() - { - if (DownloadCompleted == null) return; - - var e = new DownloadCompletedEventArgs() - { - Payloads = this.Payloads - }; - OnDownloadCompleted(this, e); - } // FireDownloadCompleted - - private void FireSectionReceived() - { - if (SectionReceived == null) return; - - var e = new DvbStpSimpleClient.SectionReceivedEventArgs() - { - DatagramCount = this.DatagramCount, - PayloadId = Header.PayloadId, - SegmentIdNetworkLo = Header.SegmentIdNetworkLo, - SegmentIdNetworkHi = Header.SegmentIdNetworkHi, - SegmentVersion = Header.SegmentVersion - }; - - OnSectionReceived(this, e); - } // FireSectionReceived - - protected virtual void FireSegmentDownloadStarted(SegmentStatus status) - { - if (SegmentDownloadStarted == null) return; - - var e = GetSegmentSectionReceivedEventArgs(status); - OnSegmentDownloadStarted(this, e); - } // FireSegmentDownloadStarted - - protected virtual void FireSegmentSectionReceived(SegmentStatus status) - { - if (SegmentSectionReceived == null) return; - - var e = GetSegmentSectionReceivedEventArgs(status); - OnSegmentSectionReceived(this, e); - } // FireSegmentSectionReceived - - protected virtual void FireSegmentDownloadRestarted(SegmentStatus status, byte oldVersion) - { - if (SegmentDownloadRestarted == null) return; - - var e = new SegmentDownloadRestartedEventArgs() - { - PayloadId = status.PayloadId, - SegmentListIndex = status.InfoIndex, - OldVersion = oldVersion, - NewVersion = status.SegmentVersion, - SectionCount = status.SegmentData.LastSectionNumber + 1, - RestartCount = status.DowloadRestartCount, - GlobalRestartCount = this.DowloadRestartCount, - }; - OnSegmentDownloadRestarted(this, e); - } // FireSegmentDownloadRestarted - - protected virtual void FireSegmentDownloadCompleted(SegmentStatus status) - { - if (SegmentDownloadCompleted == null) return; - - var e = new SegmentDownloadCompletedEventArgs(status.SegmentData) - { - PayloadId = Header.PayloadId, - SegmentId = Header.SegmentId, - SegmentVersion = Header.SegmentVersion, - SectionCount = status.SegmentData.LastSectionNumber + 1, - SegmentListIndex = status.InfoIndex, - SegmentsReceived = this.SegmentsReceived, - SegmentsPending = this.SegmentsPending, - }; - OnSegmentDownloadCompleted(this, e); - } // SegmentDownloadCompleted - - #endregion - - #region OnEvent() methods - - protected virtual void OnDownloadStarted(object sender, DownloadStartedEventArgs e) - { - if (DownloadStarted == null) return; - - DownloadStarted(sender, e); - } // OnDownloadStarted - - protected virtual void OnDownloadCompleted(object sender, DownloadCompletedEventArgs e) - { - if (DownloadCompleted == null) return; - - DownloadCompleted(sender, e); - } // OnDownloadCompleted - - protected virtual void OnSectionReceived(object sender, DvbStpSimpleClient.SectionReceivedEventArgs e) - { - if (SectionReceived == null) return; - - SectionReceived(sender, e); - } // OnSectionReceived - - protected virtual void OnSegmentDownloadStarted(object sender, SegmentSectionReceivedEventArgs e) - { - if (SegmentDownloadStarted == null) return; - - SegmentDownloadStarted(sender, e); - } // OnSegmentDownloadStarted - - protected virtual void OnSegmentSectionReceived(object sender, SegmentSectionReceivedEventArgs e) - { - if (SegmentSectionReceived == null) return; - - SegmentSectionReceived(sender, e); - } // OnSegmentSectionReceived - - protected virtual void OnSegmentDownloadRestarted(object sender, SegmentDownloadRestartedEventArgs e) - { - if (SegmentDownloadRestarted == null) return; - - SegmentDownloadRestarted(sender, e); - } // SegmentDownloadRestarted - - protected virtual void OnSegmentDownloadCompleted(object sender, SegmentDownloadCompletedEventArgs e) - { - if (SegmentDownloadCompleted == null) return; - - SegmentDownloadCompleted(sender, e); - } // OnSegmentDownloadCompleted - - #endregion - - #region Auxiliary methods - - protected SegmentSectionReceivedEventArgs GetSegmentSectionReceivedEventArgs(SegmentStatus status) - { - var e = new SegmentSectionReceivedEventArgs() - { - PayloadId = Header.PayloadId, - SegmentId = Header.SegmentId, - SegmentVersion = Header.SegmentVersion, - SectionCount = status.SegmentData.LastSectionNumber + 1, - SectionsReceived = status.SegmentData.ReceivedSections, - SectionNumber = Header.SectionNumber, - SegmentListIndex = status.InfoIndex - }; - - return e; - } // GetSegmentSectionReceivedEventArgs - - #endregion - } // class DvbStpEnhancedClient -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public partial class DvbStpEnhancedClient + { + public event EventHandler DownloadStarted; + public event EventHandler DownloadCompleted; + public event EventHandler SectionReceived; + public event EventHandler SegmentDownloadStarted; + public event EventHandler SegmentSectionReceived; + public event EventHandler SegmentDownloadRestarted; + public event EventHandler SegmentDownloadCompleted; + + #region EventArgs classes + + public class DownloadStartedEventArgs : EventArgs + { + public int SegmentsCount + { + get; + set; + } // SegmentsCount + } // class DvbStpEnhancedClient.DownloadStartedEventArgs + + public class DownloadCompletedEventArgs: EventArgs + { + public IList Payloads + { + get; + set; + } // Payloads + } // DvbStpEnhancedClient.DownloadCompletedEventArgs + + public class SegmentSectionReceivedEventArgs : DvbStpSimpleClient.PayloadSectionReceivedEventArgs + { + public int SegmentListIndex + { + get; + set; + } // SegmentListIndex + } // DvbStpEnhancedClient.SegmentSectionReceivedEventArgs + + public class SegmentDownloadRestartedEventArgs : DvbStpSimpleClient.DownloadRestartedEventArgs + { + public int SegmentListIndex + { + get; + set; + } // SegmentListIndex + + public int GlobalRestartCount + { + get; + set; + } // GlobalRestartCount + + public int RestartCount + { + get; + set; + } // RestartCount + } // DvbStpEnhancedClient.SegmentDownloadRestartedEventArgs + + public class SegmentDownloadCompletedEventArgs : EventArgs + { + private SegmentAssembler SegmentData; + + public SegmentDownloadCompletedEventArgs(SegmentAssembler segmentData) + { + SegmentData = segmentData; + } // constructor + + public int SegmentListIndex + { + get; + set; + } // SegmentListIndex + + public int SegmentsReceived + { + get; + set; + } // SegmentsReceived + + public int SegmentsPending + { + get; + set; + } // SegmentsPending + + public byte PayloadId; + public short SegmentId; + public byte SegmentVersion; + public int SectionCount; + + public byte[] GetPayloadData(bool keep) + { + var data = SegmentData.GetPayload(); + if (!keep) + { + SegmentData.Dispose(); + } // if + + return data; + } // GetPayloadData + } // DvbStpEnhancedClient.SegmentDownloadCompletedEventArgs + + #endregion + + #region FireEvent() methods + + protected virtual void FireDownloadStarted() + { + if (DownloadStarted == null) return; + + var e = new DownloadStartedEventArgs() + { + SegmentsCount = this.Payloads.Count + }; + OnDownloadStarted(this, e); + } // FireDownloadStarted + + protected virtual void FireDownloadCompleted() + { + if (DownloadCompleted == null) return; + + var e = new DownloadCompletedEventArgs() + { + Payloads = this.Payloads + }; + OnDownloadCompleted(this, e); + } // FireDownloadCompleted + + private void FireSectionReceived() + { + if (SectionReceived == null) return; + + var e = new DvbStpSimpleClient.SectionReceivedEventArgs() + { + DatagramCount = this.DatagramCount, + PayloadId = Header.PayloadId, + SegmentIdNetworkLo = Header.SegmentIdNetworkLo, + SegmentIdNetworkHi = Header.SegmentIdNetworkHi, + SegmentVersion = Header.SegmentVersion + }; + + OnSectionReceived(this, e); + } // FireSectionReceived + + protected virtual void FireSegmentDownloadStarted(SegmentStatus status) + { + if (SegmentDownloadStarted == null) return; + + var e = GetSegmentSectionReceivedEventArgs(status); + OnSegmentDownloadStarted(this, e); + } // FireSegmentDownloadStarted + + protected virtual void FireSegmentSectionReceived(SegmentStatus status) + { + if (SegmentSectionReceived == null) return; + + var e = GetSegmentSectionReceivedEventArgs(status); + OnSegmentSectionReceived(this, e); + } // FireSegmentSectionReceived + + protected virtual void FireSegmentDownloadRestarted(SegmentStatus status, byte oldVersion) + { + if (SegmentDownloadRestarted == null) return; + + var e = new SegmentDownloadRestartedEventArgs() + { + PayloadId = status.PayloadId, + SegmentListIndex = status.InfoIndex, + OldVersion = oldVersion, + NewVersion = status.SegmentVersion, + SectionCount = status.SegmentData.LastSectionNumber + 1, + RestartCount = status.DowloadRestartCount, + GlobalRestartCount = this.DowloadRestartCount, + }; + OnSegmentDownloadRestarted(this, e); + } // FireSegmentDownloadRestarted + + protected virtual void FireSegmentDownloadCompleted(SegmentStatus status) + { + if (SegmentDownloadCompleted == null) return; + + var e = new SegmentDownloadCompletedEventArgs(status.SegmentData) + { + PayloadId = Header.PayloadId, + SegmentId = Header.SegmentId, + SegmentVersion = Header.SegmentVersion, + SectionCount = status.SegmentData.LastSectionNumber + 1, + SegmentListIndex = status.InfoIndex, + SegmentsReceived = this.SegmentsReceived, + SegmentsPending = this.SegmentsPending, + }; + OnSegmentDownloadCompleted(this, e); + } // SegmentDownloadCompleted + + #endregion + + #region OnEvent() methods + + protected virtual void OnDownloadStarted(object sender, DownloadStartedEventArgs e) + { + if (DownloadStarted == null) return; + + DownloadStarted(sender, e); + } // OnDownloadStarted + + protected virtual void OnDownloadCompleted(object sender, DownloadCompletedEventArgs e) + { + if (DownloadCompleted == null) return; + + DownloadCompleted(sender, e); + } // OnDownloadCompleted + + protected virtual void OnSectionReceived(object sender, DvbStpSimpleClient.SectionReceivedEventArgs e) + { + if (SectionReceived == null) return; + + SectionReceived(sender, e); + } // OnSectionReceived + + protected virtual void OnSegmentDownloadStarted(object sender, SegmentSectionReceivedEventArgs e) + { + if (SegmentDownloadStarted == null) return; + + SegmentDownloadStarted(sender, e); + } // OnSegmentDownloadStarted + + protected virtual void OnSegmentSectionReceived(object sender, SegmentSectionReceivedEventArgs e) + { + if (SegmentSectionReceived == null) return; + + SegmentSectionReceived(sender, e); + } // OnSegmentSectionReceived + + protected virtual void OnSegmentDownloadRestarted(object sender, SegmentDownloadRestartedEventArgs e) + { + if (SegmentDownloadRestarted == null) return; + + SegmentDownloadRestarted(sender, e); + } // SegmentDownloadRestarted + + protected virtual void OnSegmentDownloadCompleted(object sender, SegmentDownloadCompletedEventArgs e) + { + if (SegmentDownloadCompleted == null) return; + + SegmentDownloadCompleted(sender, e); + } // OnSegmentDownloadCompleted + + #endregion + + #region Auxiliary methods + + protected SegmentSectionReceivedEventArgs GetSegmentSectionReceivedEventArgs(SegmentStatus status) + { + var e = new SegmentSectionReceivedEventArgs() + { + PayloadId = Header.PayloadId, + SegmentId = Header.SegmentId, + SegmentVersion = Header.SegmentVersion, + SectionCount = status.SegmentData.LastSectionNumber + 1, + SectionsReceived = status.SegmentData.ReceivedSections, + SectionNumber = Header.SectionNumber, + SegmentListIndex = status.InfoIndex + }; + + return e; + } // GetSegmentSectionReceivedEventArgs + + #endregion + } // class DvbStpEnhancedClient +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs index 018c726b..74eafd49 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs @@ -1,244 +1,244 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public partial class DvbStpEnhancedClient : DvbStpBaseClient - { - private SegmentStatus[] Status; - private IList Payloads; - private int SegmentsReceived; - private int SegmentsPending; - private bool IsDownloadStarted; - - protected class SegmentStatus - { - public byte PayloadId; - public short SegmentId; - public byte[] ExpectedSegmentId; - public SegmentAssembler SegmentData; - public int InfoIndex; - public byte SegmentVersion; - public int DowloadRestartCount; - } // SegmentStatus - - public DvbStpEnhancedClient(IPAddress ip, int port) - : base(ip, port) - { - NoDataTimeout = 30000; // milliseconds - MaxDowloadRestartCount = 5; - } // constructor - - public int DowloadRestartCount - { - get; - private set; - } // DowloadRestartCount - - public int MaxDowloadRestartCount - { - get; - private set; - } // MaxDowloadRestartCount - - public void DownloadPayloads(IList payloads) - { - try - { - Setup(payloads); - ReceiveData(); - - if (CancelRequested) return; - - ProcessSegments(); - FireDownloadCompleted(); - } - finally - { - Clean(); - } // finally - } // DownloadPayloads - - public override void Close() - { - base.Close(); - Clean(); - } // Close - - protected override bool FilterSection() - { - // notify reception of section - FireSectionReceived(); - - // quick filtering of payloadId & segment - var status = Status[Header.PayloadId]; - if (status == null) return true; - - if (status.ExpectedSegmentId == null) - { - // accept first segment received as the one we're looking for and then ignore remaining segments - status.ExpectedSegmentId = new byte[] - { - Header.SegmentIdNetworkLo, - Header.SegmentIdNetworkHi - }; - } - else - { - if (Header.SegmentIdNetworkLo != status.ExpectedSegmentId[0]) return true; - if (Header.SegmentIdNetworkHi != status.ExpectedSegmentId[1]) return true; - } // if-else - - // is this segment completed? - if ((status.SegmentData != null) && (status.SegmentData.IsSegmentComplete)) return true; - - // accept this section data - return false; - } // FilterSection - - protected override void ProcessReceivedData() - { - // download started? - if (!IsDownloadStarted) - { - IsDownloadStarted = true; - FireDownloadStarted(); - } // if - - var status = Status[Header.PayloadId]; - - // have we just received a "first" section of the payload? - if (status.SegmentData == null) - { - InitSectionData(status); - } // if - - // notify reception of a requested section - FireSegmentSectionReceived(status); - - // store data - StoreSectionData(status); - } // ProcessReceivedData - - private void Setup(IList payloads) - { - Payloads = payloads; - SegmentsReceived = 0; - SegmentsPending = payloads.Count; - Status = new SegmentStatus[256]; - - for (int index = 0; index < payloads.Count; index++) - { - var info = payloads[index]; - var status = new SegmentStatus() - { - PayloadId = info.PayloadId, - SegmentId = -1, - SegmentVersion = 0xFF, - InfoIndex = index, - ExpectedSegmentId = info.SegmentId.HasValue ? BitConverter.GetBytes(IPAddress.HostToNetworkOrder(info.SegmentId.Value)) : null - }; - Status[info.PayloadId] = status; - } // for - } // Setup - - private void InitSectionData(SegmentStatus status) - { - // initialize segment data storage - status.SegmentId = Header.SegmentId; - status.SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - status.SegmentVersion = Header.SegmentVersion; - - // notify start of download - FireSegmentDownloadStarted(status); - } // InitSectionData - - private void RestartSectionData(SegmentStatus status) - { - // increment restart count - DowloadRestartCount++; - status.DowloadRestartCount++; - - // avoid infinite restart loops - if (DowloadRestartCount > MaxDowloadRestartCount) - { - throw new TimeoutException(); - } // if - - // start over - var oldVersion = status.SegmentVersion; - status.SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - status.SegmentVersion = Header.SegmentVersion; - ResetNoDataTimeout(); - - // notify of download restart - FireSegmentDownloadRestarted(status, oldVersion); - } // RestartSectionData - - private void StoreSectionData(SegmentStatus status) - { - // reset timeout - ResetNoDataTimeout(); - - // version change? - if (Header.SegmentVersion != status.SegmentVersion) - { - RestartSectionData(status); - } // if - - status.SegmentData.AddSectionData(Header.SectionNumber, DatagramData, Header.PayloadOffset, Header.PayloadSize); - if (status.SegmentData.IsSegmentComplete) - { - SegmentsReceived++; - SegmentsPending--; - FireSegmentDownloadCompleted(status); - } // if - - EndReceptionLoop = (SegmentsPending == 0); - } // StoreSectionData - - private void Clean() - { - Status = null; - Payloads = null; - } // Clean - - private void OnSectionReceived() - { - DvbStpSimpleClient.SectionReceivedEventArgs e; - - e = new DvbStpSimpleClient.SectionReceivedEventArgs() - { - DatagramCount = this.DatagramCount, - PayloadId = Header.PayloadId, - SegmentIdNetworkLo = Header.SegmentIdNetworkLo, - SegmentIdNetworkHi = Header.SegmentIdNetworkHi, - SegmentVersion = Header.SegmentVersion - }; - - SectionReceived(this, e); - } // OnSectionReceived - - private void ProcessSegments() - { - for (int index = 0; index < Payloads.Count; index++) - { - var segment = Payloads[index]; - var status = Status[segment.PayloadId]; - segment.SegmentId = status.SegmentId; - segment.SegmentVersion = status.SegmentVersion; - if ((status.SegmentData != null) && (!status.SegmentData.IsDisposed)) - { - segment.Data = status.SegmentData.GetPayload(); - } // if - } // for - } // ProcessSegments - } // sealed class DvbStpEnhancedClient -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public partial class DvbStpEnhancedClient : DvbStpBaseClient + { + private SegmentStatus[] Status; + private IList Payloads; + private int SegmentsReceived; + private int SegmentsPending; + private bool IsDownloadStarted; + + protected class SegmentStatus + { + public byte PayloadId; + public short SegmentId; + public byte[] ExpectedSegmentId; + public SegmentAssembler SegmentData; + public int InfoIndex; + public byte SegmentVersion; + public int DowloadRestartCount; + } // SegmentStatus + + public DvbStpEnhancedClient(IPAddress ip, int port) + : base(ip, port) + { + NoDataTimeout = 30000; // milliseconds + MaxDowloadRestartCount = 5; + } // constructor + + public int DowloadRestartCount + { + get; + private set; + } // DowloadRestartCount + + public int MaxDowloadRestartCount + { + get; + private set; + } // MaxDowloadRestartCount + + public void DownloadPayloads(IList payloads) + { + try + { + Setup(payloads); + ReceiveData(); + + if (CancelRequested) return; + + ProcessSegments(); + FireDownloadCompleted(); + } + finally + { + Clean(); + } // finally + } // DownloadPayloads + + public override void Close() + { + base.Close(); + Clean(); + } // Close + + protected override bool FilterSection() + { + // notify reception of section + FireSectionReceived(); + + // quick filtering of payloadId & segment + var status = Status[Header.PayloadId]; + if (status == null) return true; + + if (status.ExpectedSegmentId == null) + { + // accept first segment received as the one we're looking for and then ignore remaining segments + status.ExpectedSegmentId = new byte[] + { + Header.SegmentIdNetworkLo, + Header.SegmentIdNetworkHi + }; + } + else + { + if (Header.SegmentIdNetworkLo != status.ExpectedSegmentId[0]) return true; + if (Header.SegmentIdNetworkHi != status.ExpectedSegmentId[1]) return true; + } // if-else + + // is this segment completed? + if ((status.SegmentData != null) && (status.SegmentData.IsSegmentComplete)) return true; + + // accept this section data + return false; + } // FilterSection + + protected override void ProcessReceivedData() + { + // download started? + if (!IsDownloadStarted) + { + IsDownloadStarted = true; + FireDownloadStarted(); + } // if + + var status = Status[Header.PayloadId]; + + // have we just received a "first" section of the payload? + if (status.SegmentData == null) + { + InitSectionData(status); + } // if + + // notify reception of a requested section + FireSegmentSectionReceived(status); + + // store data + StoreSectionData(status); + } // ProcessReceivedData + + private void Setup(IList payloads) + { + Payloads = payloads; + SegmentsReceived = 0; + SegmentsPending = payloads.Count; + Status = new SegmentStatus[256]; + + for (int index = 0; index < payloads.Count; index++) + { + var info = payloads[index]; + var status = new SegmentStatus() + { + PayloadId = info.PayloadId, + SegmentId = -1, + SegmentVersion = 0xFF, + InfoIndex = index, + ExpectedSegmentId = info.SegmentId.HasValue ? BitConverter.GetBytes(IPAddress.HostToNetworkOrder(info.SegmentId.Value)) : null + }; + Status[info.PayloadId] = status; + } // for + } // Setup + + private void InitSectionData(SegmentStatus status) + { + // initialize segment data storage + status.SegmentId = Header.SegmentId; + status.SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); + status.SegmentVersion = Header.SegmentVersion; + + // notify start of download + FireSegmentDownloadStarted(status); + } // InitSectionData + + private void RestartSectionData(SegmentStatus status) + { + // increment restart count + DowloadRestartCount++; + status.DowloadRestartCount++; + + // avoid infinite restart loops + if (DowloadRestartCount > MaxDowloadRestartCount) + { + throw new TimeoutException(); + } // if + + // start over + var oldVersion = status.SegmentVersion; + status.SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); + status.SegmentVersion = Header.SegmentVersion; + ResetNoDataTimeout(); + + // notify of download restart + FireSegmentDownloadRestarted(status, oldVersion); + } // RestartSectionData + + private void StoreSectionData(SegmentStatus status) + { + // reset timeout + ResetNoDataTimeout(); + + // version change? + if (Header.SegmentVersion != status.SegmentVersion) + { + RestartSectionData(status); + } // if + + status.SegmentData.AddSectionData(Header.SectionNumber, DatagramData, Header.PayloadOffset, Header.PayloadSize); + if (status.SegmentData.IsSegmentComplete) + { + SegmentsReceived++; + SegmentsPending--; + FireSegmentDownloadCompleted(status); + } // if + + EndReceptionLoop = (SegmentsPending == 0); + } // StoreSectionData + + private void Clean() + { + Status = null; + Payloads = null; + } // Clean + + private void OnSectionReceived() + { + DvbStpSimpleClient.SectionReceivedEventArgs e; + + e = new DvbStpSimpleClient.SectionReceivedEventArgs() + { + DatagramCount = this.DatagramCount, + PayloadId = Header.PayloadId, + SegmentIdNetworkLo = Header.SegmentIdNetworkLo, + SegmentIdNetworkHi = Header.SegmentIdNetworkHi, + SegmentVersion = Header.SegmentVersion + }; + + SectionReceived(this, e); + } // OnSectionReceived + + private void ProcessSegments() + { + for (int index = 0; index < Payloads.Count; index++) + { + var segment = Payloads[index]; + var status = Status[segment.PayloadId]; + segment.SegmentId = status.SegmentId; + segment.SegmentVersion = status.SegmentVersion; + if ((status.SegmentData != null) && (!status.SegmentData.IsDisposed)) + { + segment.Data = status.SegmentData.GetPayload(); + } // if + } // for + } // ProcessSegments + } // sealed class DvbStpEnhancedClient +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs index 8ed3d833..ec86a61d 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs @@ -1,165 +1,165 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public partial class DvbStpExplorer : DvbStpBaseClient - { - public event EventHandler SectionReceived; - public event EventHandler UnexpectedHeaderVersionReceived; - public event EventHandler RunEnded; - - private short StartSectionNumber; - private int ReceivedPayloadBytes; - private DvbStpHeader LastHeader; - - protected bool EndLoop - { - get; - set; - } // EndLoop - - public DvbStpExplorer(IPAddress ip, int port) - : base(ip, port) - { - // no op - } // constructor - - public void ExploreMulticastStream() - { - try - { - Connect(); - - CancelRequested = false; - EndLoop = false; - StartSectionNumber = -1; - while (!(CancelRequested || EndLoop)) - { - if (Header != null) LastHeader = Header.Clone(); - Receive(true); - - if (StartSectionNumber == -1) - { - LastHeader = Header.Clone(); - LastHeader.SectionNumber--; - InitRun(); - } // if - - if (Header.Version != 0) - { - OnUnexpectedHeaderVersionReceived(); - } - else - { - OnSectionReceived(); - } // if-else - - ReceivedPayloadBytes += Header.PayloadSize; - - if ((Header.PayloadId != LastHeader.PayloadId) || - (Header.SegmentId != LastHeader.SegmentId) || - (Header.SegmentVersion != LastHeader.SegmentVersion) || - (Header.SectionNumber != LastHeader.SectionNumber + 1)) - { - OnRunEnded(); - InitRun(); - } // if - } // while - - if (!CancelRequested) - { - OnRunEnded(); - } // if - } - finally - { - Close(); - } // - } // ExplorerMulticastStream - - protected override void ProcessReceivedData() - { - // our implementation (at least for now) is not using ReceiveData(), so there's no need for this function - throw new NotImplementedException(); - } // ProcessReceivedData - - private void InitRun() - { - StartSectionNumber = Header.SectionNumber; - ReceivedPayloadBytes = 0; - } // InitRun - - private void OnSectionReceived() - { - if (SectionReceived == null) return; - - var args = new DvbStpExplorerSectionReceivedEventArgs(); - - args.Header = Header.Clone(); - args.BytesReceived = ReceivedBytes; - args.Payload = new byte[Header.PayloadSize]; - Array.Copy(DatagramData, Header.PayloadOffset, args.Payload, 0, Header.PayloadSize); - if (Header.PrivateHeaderLength > 0) - { - args.PrivateHeader = new byte[Header.PrivateHeaderLength]; - Array.Copy(DatagramData, Header.PrivateHeaderOffset, args.PrivateHeader, 0, Header.PrivateHeaderLength); - } // if - - SectionReceived(this, args); - - if (args.Cancel) - { - CancelRequest(); - } // if - } // OnSectionReceived - - private void OnUnexpectedHeaderVersionReceived() - { - if (UnexpectedHeaderVersionReceived == null) return; - - var args = new DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs(); - - args.HeaderVersion = Header.Version; - args.DatagramData = new byte[ReceivedBytes]; - Array.Copy(DatagramData, args.DatagramData, ReceivedBytes); - - UnexpectedHeaderVersionReceived(this, args); - - if (args.Cancel) - { - CancelRequest(); - } // if - } // OnUnexpectedHeaderVersionReceived - - private void OnRunEnded() - { - if (RunEnded == null) return; - - var args = new DvbStpExplorerRunEndedEventArgs() - { - PayloadId = LastHeader.PayloadId, - ReceivedPayloadBytes = ReceivedPayloadBytes, - SegmentId = LastHeader.SegmentId, - LastSectionNumber = LastHeader.LastSectionNumber, - SegmentVersion = LastHeader.SegmentVersion, - StartSectionNumber = StartSectionNumber, - EndSectionNumber = LastHeader.SectionNumber, - TotalSegmentSize = LastHeader.TotalSegmentSize, - }; - - RunEnded(this, args); - - if (args.Cancel) - { - CancelRequest(); - } // if - } // OnRunEnded - } // class DvbStpExplorer -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public partial class DvbStpExplorer : DvbStpBaseClient + { + public event EventHandler SectionReceived; + public event EventHandler UnexpectedHeaderVersionReceived; + public event EventHandler RunEnded; + + private short StartSectionNumber; + private int ReceivedPayloadBytes; + private DvbStpHeader LastHeader; + + protected bool EndLoop + { + get; + set; + } // EndLoop + + public DvbStpExplorer(IPAddress ip, int port) + : base(ip, port) + { + // no op + } // constructor + + public void ExploreMulticastStream() + { + try + { + Connect(); + + CancelRequested = false; + EndLoop = false; + StartSectionNumber = -1; + while (!(CancelRequested || EndLoop)) + { + if (Header != null) LastHeader = Header.Clone(); + Receive(true); + + if (StartSectionNumber == -1) + { + LastHeader = Header.Clone(); + LastHeader.SectionNumber--; + InitRun(); + } // if + + if (Header.Version != 0) + { + OnUnexpectedHeaderVersionReceived(); + } + else + { + OnSectionReceived(); + } // if-else + + ReceivedPayloadBytes += Header.PayloadSize; + + if ((Header.PayloadId != LastHeader.PayloadId) || + (Header.SegmentId != LastHeader.SegmentId) || + (Header.SegmentVersion != LastHeader.SegmentVersion) || + (Header.SectionNumber != LastHeader.SectionNumber + 1)) + { + OnRunEnded(); + InitRun(); + } // if + } // while + + if (!CancelRequested) + { + OnRunEnded(); + } // if + } + finally + { + Close(); + } // + } // ExplorerMulticastStream + + protected override void ProcessReceivedData() + { + // our implementation (at least for now) is not using ReceiveData(), so there's no need for this function + throw new NotImplementedException(); + } // ProcessReceivedData + + private void InitRun() + { + StartSectionNumber = Header.SectionNumber; + ReceivedPayloadBytes = 0; + } // InitRun + + private void OnSectionReceived() + { + if (SectionReceived == null) return; + + var args = new DvbStpExplorerSectionReceivedEventArgs(); + + args.Header = Header.Clone(); + args.BytesReceived = ReceivedBytes; + args.Payload = new byte[Header.PayloadSize]; + Array.Copy(DatagramData, Header.PayloadOffset, args.Payload, 0, Header.PayloadSize); + if (Header.PrivateHeaderLength > 0) + { + args.PrivateHeader = new byte[Header.PrivateHeaderLength]; + Array.Copy(DatagramData, Header.PrivateHeaderOffset, args.PrivateHeader, 0, Header.PrivateHeaderLength); + } // if + + SectionReceived(this, args); + + if (args.Cancel) + { + CancelRequest(); + } // if + } // OnSectionReceived + + private void OnUnexpectedHeaderVersionReceived() + { + if (UnexpectedHeaderVersionReceived == null) return; + + var args = new DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs(); + + args.HeaderVersion = Header.Version; + args.DatagramData = new byte[ReceivedBytes]; + Array.Copy(DatagramData, args.DatagramData, ReceivedBytes); + + UnexpectedHeaderVersionReceived(this, args); + + if (args.Cancel) + { + CancelRequest(); + } // if + } // OnUnexpectedHeaderVersionReceived + + private void OnRunEnded() + { + if (RunEnded == null) return; + + var args = new DvbStpExplorerRunEndedEventArgs() + { + PayloadId = LastHeader.PayloadId, + ReceivedPayloadBytes = ReceivedPayloadBytes, + SegmentId = LastHeader.SegmentId, + LastSectionNumber = LastHeader.LastSectionNumber, + SegmentVersion = LastHeader.SegmentVersion, + StartSectionNumber = StartSectionNumber, + EndSectionNumber = LastHeader.SectionNumber, + TotalSegmentSize = LastHeader.TotalSegmentSize, + }; + + RunEnded(this, args); + + if (args.Cancel) + { + CancelRequest(); + } // if + } // OnRunEnded + } // class DvbStpExplorer +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs index 86e47a7f..22d1fc32 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs @@ -1,104 +1,104 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public class DvbStpExplorerSectionReceivedEventArgs : CancelEventArgs - { - public DvbStpHeader Header - { - get; - internal set; - } // Header - - public int BytesReceived - { - get; - internal set; - } // BytesReceived - - public byte[] PrivateHeader - { - get; - internal set; - } // PrivateHeader - - public byte[] Payload - { - get; - internal set; - } // Payload - } // class DvbStpExplorerSectionReceivedEventArgs - - public class DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs : CancelEventArgs - { - public byte HeaderVersion - { - get; - internal set; - } // headerVersion - - public byte[] DatagramData - { - get; - internal set; - } // DatagramData - } // class DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs - - public class DvbStpExplorerRunEndedEventArgs : CancelEventArgs - { - public byte PayloadId - { - get; - internal set; - } // PayloadId - - public short SegmentId - { - get; - internal set; - } // SegmentId - - public byte SegmentVersion - { - get; - internal set; - } // SegmentVersion - - public short LastSectionNumber - { - get; - internal set; - } // LastSectionNumber - - public short StartSectionNumber - { - get; - internal set; - } // StartSectionNumber - - public short EndSectionNumber - { - get; - internal set; - } // EndSectionNumber - - public int TotalSegmentSize - { - get; - internal set; - } // TotalSegmentSize - - public int ReceivedPayloadBytes - { - get; - internal set; - } // ReceivedPayloadBytes - } // class DvbStpExplorerRunEndedEventArgs -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public class DvbStpExplorerSectionReceivedEventArgs : CancelEventArgs + { + public DvbStpHeader Header + { + get; + internal set; + } // Header + + public int BytesReceived + { + get; + internal set; + } // BytesReceived + + public byte[] PrivateHeader + { + get; + internal set; + } // PrivateHeader + + public byte[] Payload + { + get; + internal set; + } // Payload + } // class DvbStpExplorerSectionReceivedEventArgs + + public class DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs : CancelEventArgs + { + public byte HeaderVersion + { + get; + internal set; + } // headerVersion + + public byte[] DatagramData + { + get; + internal set; + } // DatagramData + } // class DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs + + public class DvbStpExplorerRunEndedEventArgs : CancelEventArgs + { + public byte PayloadId + { + get; + internal set; + } // PayloadId + + public short SegmentId + { + get; + internal set; + } // SegmentId + + public byte SegmentVersion + { + get; + internal set; + } // SegmentVersion + + public short LastSectionNumber + { + get; + internal set; + } // LastSectionNumber + + public short StartSectionNumber + { + get; + internal set; + } // StartSectionNumber + + public short EndSectionNumber + { + get; + internal set; + } // EndSectionNumber + + public int TotalSegmentSize + { + get; + internal set; + } // TotalSegmentSize + + public int ReceivedPayloadBytes + { + get; + internal set; + } // ReceivedPayloadBytes + } // class DvbStpExplorerRunEndedEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs index 691b50c9..20f07742 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs @@ -1,51 +1,51 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public class DvbStpHeader - { - public byte Version; - public byte Reserved; - public byte Encription; - public bool HasCRC; - public int TotalSegmentSize; - public byte PayloadId; - public short SegmentId; - public byte SegmentIdNetworkLo; - public byte SegmentIdNetworkHi; - public byte SegmentVersion; - public short SectionNumber; - public short LastSectionNumber; - public CompressionMethod Compression; - public bool HasServiceProviderId; - public byte PrivateHeaderLength; - public int ServiceProviderId; - public int PrivateHeaderOffset; - public int PayloadOffset; - public int PayloadSize; - public int CRC; - - public enum CompressionMethod: byte - { - None = 0, - BiM = 1, - GZip = 2, - Reserved1 = 3, - Reserved2 = 4, - Reserved3 = 5, - Reserved4 = 6, - User = 7, - } // enum CompressionMethod - - public DvbStpHeader Clone() - { - return MemberwiseClone() as DvbStpHeader; - } // Clone - } // class DvbStpHeader -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public class DvbStpHeader + { + public byte Version; + public byte Reserved; + public byte Encription; + public bool HasCRC; + public int TotalSegmentSize; + public byte PayloadId; + public short SegmentId; + public byte SegmentIdNetworkLo; + public byte SegmentIdNetworkHi; + public byte SegmentVersion; + public short SectionNumber; + public short LastSectionNumber; + public CompressionMethod Compression; + public bool HasServiceProviderId; + public byte PrivateHeaderLength; + public int ServiceProviderId; + public int PrivateHeaderOffset; + public int PayloadOffset; + public int PayloadSize; + public int CRC; + + public enum CompressionMethod: byte + { + None = 0, + BiM = 1, + GZip = 2, + Reserved1 = 3, + Reserved2 = 4, + Reserved3 = 5, + Reserved4 = 6, + User = 7, + } // enum CompressionMethod + + public DvbStpHeader Clone() + { + return MemberwiseClone() as DvbStpHeader; + } // Clone + } // class DvbStpHeader +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs index e1bb9468..261258f4 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs @@ -1,36 +1,36 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - /// - /// DVBSTP protocol, like allmost all protocols, use MSB 0 bit order transmission - /// Thus, for C#, bit 0 is bit 7 and so on - /// Hence, the masks seems to be "reversed" - /// http://en.wikipedia.org/wiki/Bit_numbering - /// - public static class DvbStpHeaderMasks - { - // byte 0 - public const byte Version = 0xC0; // 1100 0000 - public const byte Reserved = 0x38; // 0011 1000 - public const byte Encription = 0x06; // 0000 0110 - public const byte HasCRC = 0x01; // 0000 0001 - - // byte 8-9 - public const short SectionNumberLSB = 0xF0; // 1111 0000 - - // byte 9-10 - public const short LastSectionNumberMSB = 0x0F; // 0000 1111 - - // byte 11 - public const byte Compression = 0xE0; // 1110 0000 - public const byte HasServiceProviderId = 0x10; // 0001 0000 - public const byte PrivateHeaderLength = 0x0F; // 0000 1111 - } //static class DvbStpHeaderMasks -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + /// + /// DVBSTP protocol, like allmost all protocols, use MSB 0 bit order transmission + /// Thus, for C#, bit 0 is bit 7 and so on + /// Hence, the masks seems to be "reversed" + /// http://en.wikipedia.org/wiki/Bit_numbering + /// + public static class DvbStpHeaderMasks + { + // byte 0 + public const byte Version = 0xC0; // 1100 0000 + public const byte Reserved = 0x38; // 0011 1000 + public const byte Encription = 0x06; // 0000 0110 + public const byte HasCRC = 0x01; // 0000 0001 + + // byte 8-9 + public const short SectionNumberLSB = 0xF0; // 1111 0000 + + // byte 9-10 + public const short LastSectionNumberMSB = 0x0F; // 0000 1111 + + // byte 11 + public const byte Compression = 0xE0; // 1110 0000 + public const byte HasServiceProviderId = 0x10; // 0001 0000 + public const byte PrivateHeaderLength = 0x0F; // 0000 1111 + } //static class DvbStpHeaderMasks +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs index ac0a6c6d..1835cd7d 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs @@ -1,46 +1,46 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public struct DvbStpSegmentIdentity - { - public byte PayloadId - { - get; - private set; - } // PayloadId - - public short Id - { - get; - private set; - } // SegmentId - - public byte Version - { - get; - private set; - } // Version - - public DvbStpSegmentIdentity(byte payloadId, short segmentId, byte segmentVersion) - : this() - { - PayloadId = payloadId; - Id = segmentId; - Version = segmentVersion; - } // constructor - - public DvbStpSegmentIdentity(DvbStpHeader header) - : this(header.PayloadId, header.SegmentId, header.SegmentVersion) - { - } // constructor - - public override string ToString() - { - return string.Format("p{0:X2}s{1:X4}v{2:X2}", PayloadId, Id, Version); - } // ToString - } // struct DvbStpSegmentIdentity -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public struct DvbStpSegmentIdentity + { + public byte PayloadId + { + get; + private set; + } // PayloadId + + public short Id + { + get; + private set; + } // SegmentId + + public byte Version + { + get; + private set; + } // Version + + public DvbStpSegmentIdentity(byte payloadId, short segmentId, byte segmentVersion) + : this() + { + PayloadId = payloadId; + Id = segmentId; + Version = segmentVersion; + } // constructor + + public DvbStpSegmentIdentity(DvbStpHeader header) + : this(header.PayloadId, header.SegmentId, header.SegmentVersion) + { + } // constructor + + public override string ToString() + { + return string.Format("p{0:X2}s{1:X4}v{2:X2}", PayloadId, Id, Version); + } // ToString + } // struct DvbStpSegmentIdentity +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs index f274eebe..5ac30792 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs @@ -1,237 +1,237 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public sealed partial class DvbStpSimpleClient : DvbStpBaseClient - { - private byte ExpectedPayloadId; - private byte[] ExpectedSegmentId; - private SegmentAssembler SegmentData; - - public DvbStpSimpleClient(IPAddress ip, int port) - : base(ip, port) - { - NoDataTimeout = 30000; // milliseconds - MaxDowloadRestartCount = 5; - } // constructor - - public int ReceivedSections - { - get { return (SegmentData != null) ? SegmentData.ReceivedSections : 0; } - } // ReceivedSections - - public int SectionCount - { - get { return (SegmentData != null) ? SegmentData.LastSectionNumber + 1 : 0; } - } // SectionCount - - public byte SegmentVersion - { - get { return (SegmentData != null) ? SegmentData.SegmentIdentity.Version : (byte)0; } - } // SegmentVersion - - public int DowloadRestartCount - { - get; - private set; - } // DowloadRestartCount - - public int MaxDowloadRestartCount - { - get; - private set; - } // MaxDowloadRestartCount - - public event EventHandler SectionReceived; - public event EventHandler PayloadSectionReceived; - public event EventHandler DownloadStarted; - public event EventHandler DownloadCompleted; - public event EventHandler DownloadRestarted; - - public byte[] GetPayload(byte payloadId, short? segmentId) - { - try - { - ExpectedPayloadId = payloadId; - ExpectedSegmentId = segmentId.HasValue ? BitConverter.GetBytes(IPAddress.HostToNetworkOrder(segmentId.Value)) : null; - Clean(); - - ReceiveData(); - - if (CancelRequested) return null; - if (DownloadCompleted != null) OnDownloadCompleted(); - - return SegmentData.GetPayload(); - } - finally - { - Clean(); - } // finally - } // GetPayload - - public override void Close() - { - base.Close(); - Clean(); - } // Close - - protected override bool FilterSection() - { - // notify reception of section - if (SectionReceived != null) OnSectionReceived(); - - // quick filtering of payloadId & segment - if (Header.PayloadId != ExpectedPayloadId) return true; - if (ExpectedSegmentId == null) - { - // accept first segment received as the one we're looking for and then ignore remaining segments - ExpectedSegmentId = new byte[] - { - Header.SegmentIdNetworkLo, - Header.SegmentIdNetworkHi - }; - } - else - { - if (Header.SegmentIdNetworkLo != ExpectedSegmentId[0]) return true; - if (Header.SegmentIdNetworkHi != ExpectedSegmentId[1]) return true; - } // if-else - - // accept this section data - return false; - } // FilterSection - - protected override void ProcessReceivedData() - { - // have we just received a "first" section of the payload? - if (SegmentData == null) - { - InitSectionData(); - } // if - - // notify reception of a requested section - if (PayloadSectionReceived != null) OnPayloadSectionReceived(); - - // store data - StoreSectionData(); - } // ProcessReceivedData - - private void InitSectionData() - { - // initialize segment data storage - SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - - // notify start of download - if (DownloadStarted != null) - { - OnDownloadStarted(); - } // if - } // InitSectionData - - private void RestartSectionData() - { - // increment restart count - DowloadRestartCount++; - - // avoid infinite restart loops - if (DowloadRestartCount > MaxDowloadRestartCount) - { - throw new TimeoutException(); - } // if - - // notify of download restart - if (DownloadRestarted != null) OnDowloadRestarted(); - - // start over - SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - ResetNoDataTimeout(); - } // RestartSectionData - - private void StoreSectionData() - { - // reset timeout - ResetNoDataTimeout(); - - // version change? - if (Header.SegmentVersion != SegmentVersion) - { - RestartSectionData(); - } // if - - SegmentData.AddSectionData(Header.SectionNumber, DatagramData, Header.PayloadOffset, Header.PayloadSize); - EndReceptionLoop = SegmentData.IsSegmentComplete; - } // StoreSectionData - - private void Clean() - { - SegmentData = null; - } // Clean - - private void OnSectionReceived() - { - SectionReceivedEventArgs e; - - e = new SectionReceivedEventArgs() - { - DatagramCount = this.DatagramCount, - PayloadId = Header.PayloadId, - SegmentIdNetworkLo = Header.SegmentIdNetworkLo, - SegmentIdNetworkHi = Header.SegmentIdNetworkHi, - SegmentVersion = Header.SegmentVersion - }; - - SectionReceived(this, e); - } // OnSectionReceived - - private void OnPayloadSectionReceived() - { - PayloadSectionReceived(this, GetPayloadSectionReceivedEventArgs()); - } // OnPayloadSectionReceived - - private PayloadSectionReceivedEventArgs GetPayloadSectionReceivedEventArgs() - { - return new PayloadSectionReceivedEventArgs() - { - PayloadId = Header.PayloadId, - SegmentId = Header.SegmentId, - SegmentVersion = Header.SegmentVersion, - SectionCount = this.SectionCount, - SectionsReceived = this.ReceivedSections, - SectionNumber = Header.SectionNumber, - }; - } // GetPayloadSectionReceivedEventArgs - - private void OnDownloadStarted() - { - DownloadStarted(this, GetPayloadSectionReceivedEventArgs()); - } // OnDownloadStarted - - private void OnDownloadCompleted() - { - DownloadCompleted(this, GetPayloadSectionReceivedEventArgs()); - } // OnDownloadCompleted - - private void OnDowloadRestarted() - { - DownloadRestartedEventArgs e; - - e = new DownloadRestartedEventArgs() - { - PayloadId = Header.PayloadId, - SegmentId = Header.SegmentId, - OldVersion = SegmentVersion, - NewVersion = Header.SegmentVersion, - SectionCount = Header.LastSectionNumber + 1 - }; - - DownloadRestarted(this, e); - } // OnDownloadRestarted - } // sealed class DvbStpSimpleClient -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public sealed partial class DvbStpSimpleClient : DvbStpBaseClient + { + private byte ExpectedPayloadId; + private byte[] ExpectedSegmentId; + private SegmentAssembler SegmentData; + + public DvbStpSimpleClient(IPAddress ip, int port) + : base(ip, port) + { + NoDataTimeout = 30000; // milliseconds + MaxDowloadRestartCount = 5; + } // constructor + + public int ReceivedSections + { + get { return (SegmentData != null) ? SegmentData.ReceivedSections : 0; } + } // ReceivedSections + + public int SectionCount + { + get { return (SegmentData != null) ? SegmentData.LastSectionNumber + 1 : 0; } + } // SectionCount + + public byte SegmentVersion + { + get { return (SegmentData != null) ? SegmentData.SegmentIdentity.Version : (byte)0; } + } // SegmentVersion + + public int DowloadRestartCount + { + get; + private set; + } // DowloadRestartCount + + public int MaxDowloadRestartCount + { + get; + private set; + } // MaxDowloadRestartCount + + public event EventHandler SectionReceived; + public event EventHandler PayloadSectionReceived; + public event EventHandler DownloadStarted; + public event EventHandler DownloadCompleted; + public event EventHandler DownloadRestarted; + + public byte[] GetPayload(byte payloadId, short? segmentId) + { + try + { + ExpectedPayloadId = payloadId; + ExpectedSegmentId = segmentId.HasValue ? BitConverter.GetBytes(IPAddress.HostToNetworkOrder(segmentId.Value)) : null; + Clean(); + + ReceiveData(); + + if (CancelRequested) return null; + if (DownloadCompleted != null) OnDownloadCompleted(); + + return SegmentData.GetPayload(); + } + finally + { + Clean(); + } // finally + } // GetPayload + + public override void Close() + { + base.Close(); + Clean(); + } // Close + + protected override bool FilterSection() + { + // notify reception of section + if (SectionReceived != null) OnSectionReceived(); + + // quick filtering of payloadId & segment + if (Header.PayloadId != ExpectedPayloadId) return true; + if (ExpectedSegmentId == null) + { + // accept first segment received as the one we're looking for and then ignore remaining segments + ExpectedSegmentId = new byte[] + { + Header.SegmentIdNetworkLo, + Header.SegmentIdNetworkHi + }; + } + else + { + if (Header.SegmentIdNetworkLo != ExpectedSegmentId[0]) return true; + if (Header.SegmentIdNetworkHi != ExpectedSegmentId[1]) return true; + } // if-else + + // accept this section data + return false; + } // FilterSection + + protected override void ProcessReceivedData() + { + // have we just received a "first" section of the payload? + if (SegmentData == null) + { + InitSectionData(); + } // if + + // notify reception of a requested section + if (PayloadSectionReceived != null) OnPayloadSectionReceived(); + + // store data + StoreSectionData(); + } // ProcessReceivedData + + private void InitSectionData() + { + // initialize segment data storage + SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); + + // notify start of download + if (DownloadStarted != null) + { + OnDownloadStarted(); + } // if + } // InitSectionData + + private void RestartSectionData() + { + // increment restart count + DowloadRestartCount++; + + // avoid infinite restart loops + if (DowloadRestartCount > MaxDowloadRestartCount) + { + throw new TimeoutException(); + } // if + + // notify of download restart + if (DownloadRestarted != null) OnDowloadRestarted(); + + // start over + SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); + ResetNoDataTimeout(); + } // RestartSectionData + + private void StoreSectionData() + { + // reset timeout + ResetNoDataTimeout(); + + // version change? + if (Header.SegmentVersion != SegmentVersion) + { + RestartSectionData(); + } // if + + SegmentData.AddSectionData(Header.SectionNumber, DatagramData, Header.PayloadOffset, Header.PayloadSize); + EndReceptionLoop = SegmentData.IsSegmentComplete; + } // StoreSectionData + + private void Clean() + { + SegmentData = null; + } // Clean + + private void OnSectionReceived() + { + SectionReceivedEventArgs e; + + e = new SectionReceivedEventArgs() + { + DatagramCount = this.DatagramCount, + PayloadId = Header.PayloadId, + SegmentIdNetworkLo = Header.SegmentIdNetworkLo, + SegmentIdNetworkHi = Header.SegmentIdNetworkHi, + SegmentVersion = Header.SegmentVersion + }; + + SectionReceived(this, e); + } // OnSectionReceived + + private void OnPayloadSectionReceived() + { + PayloadSectionReceived(this, GetPayloadSectionReceivedEventArgs()); + } // OnPayloadSectionReceived + + private PayloadSectionReceivedEventArgs GetPayloadSectionReceivedEventArgs() + { + return new PayloadSectionReceivedEventArgs() + { + PayloadId = Header.PayloadId, + SegmentId = Header.SegmentId, + SegmentVersion = Header.SegmentVersion, + SectionCount = this.SectionCount, + SectionsReceived = this.ReceivedSections, + SectionNumber = Header.SectionNumber, + }; + } // GetPayloadSectionReceivedEventArgs + + private void OnDownloadStarted() + { + DownloadStarted(this, GetPayloadSectionReceivedEventArgs()); + } // OnDownloadStarted + + private void OnDownloadCompleted() + { + DownloadCompleted(this, GetPayloadSectionReceivedEventArgs()); + } // OnDownloadCompleted + + private void OnDowloadRestarted() + { + DownloadRestartedEventArgs e; + + e = new DownloadRestartedEventArgs() + { + PayloadId = Header.PayloadId, + SegmentId = Header.SegmentId, + OldVersion = SegmentVersion, + NewVersion = Header.SegmentVersion, + SectionCount = Header.LastSectionNumber + 1 + }; + + DownloadRestarted(this, e); + } // OnDownloadRestarted + } // sealed class DvbStpSimpleClient +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs index 8e19bbd3..37145c59 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs @@ -1,41 +1,41 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public partial class DvbStpSimpleClient - { - public class SectionReceivedEventArgs : EventArgs - { - public int DatagramCount; - public byte PayloadId; - public byte SegmentIdNetworkHi; - public byte SegmentIdNetworkLo; - public byte SegmentVersion; - } // class SectionReceivedEventArgs - - public class PayloadSectionReceivedEventArgs : EventArgs - { - public byte PayloadId; - public short SegmentId; - public byte SegmentVersion; - public short SectionNumber; - public int SectionCount; - public int SectionsReceived; - } // class PayloadSectionReceivedEventArgs - - public class DownloadRestartedEventArgs : EventArgs - { - public byte PayloadId; - public short SegmentId; - public int OldVersion; - public int NewVersion; - public int SectionCount; - } // class DownloadRestartedEventArgs - } // partial class DvbStpSimpleClient -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public partial class DvbStpSimpleClient + { + public class SectionReceivedEventArgs : EventArgs + { + public int DatagramCount; + public byte PayloadId; + public byte SegmentIdNetworkHi; + public byte SegmentIdNetworkLo; + public byte SegmentVersion; + } // class SectionReceivedEventArgs + + public class PayloadSectionReceivedEventArgs : EventArgs + { + public byte PayloadId; + public short SegmentId; + public byte SegmentVersion; + public short SectionNumber; + public int SectionCount; + public int SectionsReceived; + } // class PayloadSectionReceivedEventArgs + + public class DownloadRestartedEventArgs : EventArgs + { + public byte PayloadId; + public short SegmentId; + public int OldVersion; + public int NewVersion; + public int SectionCount; + } // class DownloadRestartedEventArgs + } // partial class DvbStpSimpleClient +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.EventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.EventArgs.cs index 5ecfd9b2..3e24c0b2 100644 --- a/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.EventArgs.cs +++ b/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.EventArgs.cs @@ -1,107 +1,107 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - partial class PayloadStorage - { - public abstract class StorageHeaderEventArgs : EventArgs - { - public StorageHeaderEventArgs(DvbStpHeader header) - { - Header = header.Clone(); - } // constructor - - public DvbStpHeader Header - { - get; - private set; - } // Header - } // class StorageHeaderEventArgs - - public class SegmentStartedEventArgs : PayloadStorage.StorageHeaderEventArgs - { - public SegmentStartedEventArgs(DvbStpHeader header) - : base(header) - { - } // constructor - } // class SegmentStartedEventArgs - - public class SectionReceivedEventArgs : PayloadStorage.StorageHeaderEventArgs - { - public SectionReceivedEventArgs(DvbStpHeader header, SegmentAssembler assembler) - : base(header) - { - ReceivedSections = assembler.ReceivedSections; - RemainingSections = assembler.RemainingSections; - ReceivedBytes = assembler.ReceivedBytes; - RemainingBytes = header.TotalSegmentSize - ReceivedBytes; - } // constructor - - public int ReceivedSections - { - get; - private set; - } // ReceivedSections - - public int RemainingSections - { - get; - private set; - } // RemainingSections - - public int ReceivedBytes - { - get; - private set; - } // ReceivedBytes - - public int RemainingBytes - { - get; - private set; - } // RemainingBytes - } // class SectionReceivedEventArgs - - public class SegmentReceivedEventArgs : EventArgs - { - public SegmentReceivedEventArgs(SegmentAssembler assembler) - { - SegmentIdentity = assembler.SegmentIdentity; - SectionCount = assembler.ReceivedSections; - } // constructor - - public DvbStpSegmentIdentity SegmentIdentity - { - get; - private set; - } // SegmentIdentity - - public int SectionCount - { - get; - private set; - } // SectionCount - } // class SegmentReceivedEventArgs - - public class SegmentPayloadReceivedEventArgs : SegmentReceivedEventArgs - { - public SegmentPayloadReceivedEventArgs(SegmentAssembler assembler) - : base(assembler) - { - Payload = assembler.GetPayload(); - } // constructor - - public byte[] Payload - { - get; - private set; - } // Payload - } // SegmentPayloadReceivedEventArgs - } // partial class PayloadStorage -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + partial class PayloadStorage + { + public abstract class StorageHeaderEventArgs : EventArgs + { + public StorageHeaderEventArgs(DvbStpHeader header) + { + Header = header.Clone(); + } // constructor + + public DvbStpHeader Header + { + get; + private set; + } // Header + } // class StorageHeaderEventArgs + + public class SegmentStartedEventArgs : PayloadStorage.StorageHeaderEventArgs + { + public SegmentStartedEventArgs(DvbStpHeader header) + : base(header) + { + } // constructor + } // class SegmentStartedEventArgs + + public class SectionReceivedEventArgs : PayloadStorage.StorageHeaderEventArgs + { + public SectionReceivedEventArgs(DvbStpHeader header, SegmentAssembler assembler) + : base(header) + { + ReceivedSections = assembler.ReceivedSections; + RemainingSections = assembler.RemainingSections; + ReceivedBytes = assembler.ReceivedBytes; + RemainingBytes = header.TotalSegmentSize - ReceivedBytes; + } // constructor + + public int ReceivedSections + { + get; + private set; + } // ReceivedSections + + public int RemainingSections + { + get; + private set; + } // RemainingSections + + public int ReceivedBytes + { + get; + private set; + } // ReceivedBytes + + public int RemainingBytes + { + get; + private set; + } // RemainingBytes + } // class SectionReceivedEventArgs + + public class SegmentReceivedEventArgs : EventArgs + { + public SegmentReceivedEventArgs(SegmentAssembler assembler) + { + SegmentIdentity = assembler.SegmentIdentity; + SectionCount = assembler.ReceivedSections; + } // constructor + + public DvbStpSegmentIdentity SegmentIdentity + { + get; + private set; + } // SegmentIdentity + + public int SectionCount + { + get; + private set; + } // SectionCount + } // class SegmentReceivedEventArgs + + public class SegmentPayloadReceivedEventArgs : SegmentReceivedEventArgs + { + public SegmentPayloadReceivedEventArgs(SegmentAssembler assembler) + : base(assembler) + { + Payload = assembler.GetPayload(); + } // constructor + + public byte[] Payload + { + get; + private set; + } // Payload + } // SegmentPayloadReceivedEventArgs + } // partial class PayloadStorage +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs b/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs index c2353861..62dfda8f 100644 --- a/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs +++ b/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs @@ -1,104 +1,104 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public partial class PayloadStorage - { - private Dictionary Sections; - - internal static byte[] EmptyData = new byte[0]; - - public event EventHandler SegmentStarted; - public event EventHandler SectionReceived; - public event EventHandler SegmentReceived; - public event EventHandler SegmentPayloadReceived; - - public bool SaveData - { - get; - private set; - } // SaveData - - public PayloadStorage(bool saveData) - { - Sections = new Dictionary(); - SaveData = saveData; - } // constructor - - public bool AddSection(DvbStpHeader header, byte[] data, bool isRawData) - { - VersionStorage versions; - - var p = (int)header.PayloadId; - var s = (int)header.SegmentId; - var key = ((p << 16) | s); - - if (!Sections.TryGetValue(key, out versions)) - { - versions = CreateNewVersions(header); - Sections[key] = versions; - } // if - - return versions.AddSection(header, data, isRawData); - } // AddSection - - private VersionStorage CreateNewVersions(DvbStpHeader header) - { - VersionStorage versions; - - versions = new VersionStorage(header.PayloadId, header.SegmentId, SaveData); - if (SegmentStarted != null) - { - versions.SegmentStarted += Versions_SegmentStarted; - } // if - if (SectionReceived != null) - { - versions.SectionReceived += Versions_SectionReceived; - } // if - if (SegmentReceived != null) - { - versions.SegmentReceived += Versions_SegmentReceived; - } // if - if (SegmentPayloadReceived != null) - { - versions.SegmentPayloadReceived += Versions_SegmentPayloadReceived; - } // if - - return versions; - } // CreateNewVersions - - void Versions_SegmentStarted(object sender, SegmentStartedEventArgs e) - { - if (SegmentStarted == null) return; - - SegmentStarted(this, e); - } // Versions_SegmentStarted - - private void Versions_SectionReceived(object sender, SectionReceivedEventArgs e) - { - if (SectionReceived == null) return; - - SectionReceived(this, e); - } // Versions_SectionReceived - - private void Versions_SegmentReceived(object sender, SegmentReceivedEventArgs e) - { - if (SegmentReceived == null) return; - - SegmentReceived(this, e); - } // Versions_SegmentReceived - - private void Versions_SegmentPayloadReceived(object sender, SegmentPayloadReceivedEventArgs e) - { - if (SegmentPayloadReceived == null) return; - - SegmentPayloadReceived(this, e); - } // Versions_SegmentPayloadReceived - } // class PayloadStorage -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public partial class PayloadStorage + { + private Dictionary Sections; + + internal static byte[] EmptyData = new byte[0]; + + public event EventHandler SegmentStarted; + public event EventHandler SectionReceived; + public event EventHandler SegmentReceived; + public event EventHandler SegmentPayloadReceived; + + public bool SaveData + { + get; + private set; + } // SaveData + + public PayloadStorage(bool saveData) + { + Sections = new Dictionary(); + SaveData = saveData; + } // constructor + + public bool AddSection(DvbStpHeader header, byte[] data, bool isRawData) + { + VersionStorage versions; + + var p = (int)header.PayloadId; + var s = (int)header.SegmentId; + var key = ((p << 16) | s); + + if (!Sections.TryGetValue(key, out versions)) + { + versions = CreateNewVersions(header); + Sections[key] = versions; + } // if + + return versions.AddSection(header, data, isRawData); + } // AddSection + + private VersionStorage CreateNewVersions(DvbStpHeader header) + { + VersionStorage versions; + + versions = new VersionStorage(header.PayloadId, header.SegmentId, SaveData); + if (SegmentStarted != null) + { + versions.SegmentStarted += Versions_SegmentStarted; + } // if + if (SectionReceived != null) + { + versions.SectionReceived += Versions_SectionReceived; + } // if + if (SegmentReceived != null) + { + versions.SegmentReceived += Versions_SegmentReceived; + } // if + if (SegmentPayloadReceived != null) + { + versions.SegmentPayloadReceived += Versions_SegmentPayloadReceived; + } // if + + return versions; + } // CreateNewVersions + + void Versions_SegmentStarted(object sender, SegmentStartedEventArgs e) + { + if (SegmentStarted == null) return; + + SegmentStarted(this, e); + } // Versions_SegmentStarted + + private void Versions_SectionReceived(object sender, SectionReceivedEventArgs e) + { + if (SectionReceived == null) return; + + SectionReceived(this, e); + } // Versions_SectionReceived + + private void Versions_SegmentReceived(object sender, SegmentReceivedEventArgs e) + { + if (SegmentReceived == null) return; + + SegmentReceived(this, e); + } // Versions_SegmentReceived + + private void Versions_SegmentPayloadReceived(object sender, SegmentPayloadReceivedEventArgs e) + { + if (SegmentPayloadReceived == null) return; + + SegmentPayloadReceived(this, e); + } // Versions_SegmentPayloadReceived + } // class PayloadStorage +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs index ec785d48..d47592c1 100644 --- a/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Cliente del protocolo DVB STP")] -[assembly: AssemblyDescription("Project.IpTv.DvbStp.Client")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("cae0e7f0-58f2-4f86-99d9-e3504c47ede0")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Cliente del protocolo DVB STP")] +[assembly: AssemblyDescription("IpTviewr.DvbStp.Client")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("cae0e7f0-58f2-4f86-99d9-e3504c47ede0")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs b/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs index f7c76339..95be9f3e 100644 --- a/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs +++ b/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs @@ -1,127 +1,127 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public sealed class SegmentAssembler - { - private byte[][] SectionData; - - public DvbStpSegmentIdentity SegmentIdentity - { - get; - private set; - } // SegmentIdentity - - public int ReceivedSections - { - get; - private set; - } // ReceivedSections - - public int ReceivedBytes - { - get; - private set; - } // ReceivedBytes - - public int RemainingSections - { - get; - private set; - } // RemainingSections - - public int LastSectionNumber - { - get; - private set; - } // LastSectionNumber - - public bool IsDisposed - { - get; - private set; - } // IsDisposed - - public bool IsSegmentComplete - { - get { return RemainingSections <= 0; } - } // IsSegmentComplete - - public SegmentAssembler(DvbStpSegmentIdentity segmentIdentity, int lastSectionNumber) - { - SegmentIdentity = segmentIdentity; - LastSectionNumber = lastSectionNumber; - Reset(); - } // constructor - - public bool AddSectionData(int sectionNumber, byte[] data, int start, int length) - { - if (SectionData[sectionNumber] != null) return false; - - SectionData[sectionNumber] = new byte[length]; - Array.Copy(data, start, SectionData[sectionNumber], 0, length); - - ReceivedSections++; - RemainingSections--; - ReceivedBytes += length; - - return true; - } // AddSection - - public byte[] GetPayload() - { - if (IsDisposed) throw new ObjectDisposedException("SegmentAssembler"); - if ((!IsSegmentComplete) || (SectionData == null)) throw new InvalidOperationException(); - - int totalPayloadSize; - byte[] payload; - - totalPayloadSize = ReceivedBytes; - payload = new byte[totalPayloadSize]; - for (int i = 0, destIndex = 0; i < SectionData.Length; i++) - { - Array.Copy(SectionData[i], 0, payload, destIndex, SectionData[i].Length); - destIndex += SectionData[i].Length; - } // for - - return payload; - } // GetPayload - - public void Reset() - { - SectionData = new byte[LastSectionNumber + 1][]; - RemainingSections = LastSectionNumber + 1; - IsDisposed = false; - } // Reset - - public void Dispose() - { - SectionData = null; - IsDisposed = true; - } // Dispose - - /* - public int GetReceivedBytes() - { - int totalPayloadSize; - - totalPayloadSize = 0; - for (int i = 0; i < SectionData.Length; i++) - { - if (SectionData[i] != null) - { - totalPayloadSize += SectionData[i].Length; - } // if - } // for - - return totalPayloadSize; - } // GetReceivedBytes - */ - } // class SegmentAssembler -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public sealed class SegmentAssembler + { + private byte[][] SectionData; + + public DvbStpSegmentIdentity SegmentIdentity + { + get; + private set; + } // SegmentIdentity + + public int ReceivedSections + { + get; + private set; + } // ReceivedSections + + public int ReceivedBytes + { + get; + private set; + } // ReceivedBytes + + public int RemainingSections + { + get; + private set; + } // RemainingSections + + public int LastSectionNumber + { + get; + private set; + } // LastSectionNumber + + public bool IsDisposed + { + get; + private set; + } // IsDisposed + + public bool IsSegmentComplete + { + get { return RemainingSections <= 0; } + } // IsSegmentComplete + + public SegmentAssembler(DvbStpSegmentIdentity segmentIdentity, int lastSectionNumber) + { + SegmentIdentity = segmentIdentity; + LastSectionNumber = lastSectionNumber; + Reset(); + } // constructor + + public bool AddSectionData(int sectionNumber, byte[] data, int start, int length) + { + if (SectionData[sectionNumber] != null) return false; + + SectionData[sectionNumber] = new byte[length]; + Array.Copy(data, start, SectionData[sectionNumber], 0, length); + + ReceivedSections++; + RemainingSections--; + ReceivedBytes += length; + + return true; + } // AddSection + + public byte[] GetPayload() + { + if (IsDisposed) throw new ObjectDisposedException("SegmentAssembler"); + if ((!IsSegmentComplete) || (SectionData == null)) throw new InvalidOperationException(); + + int totalPayloadSize; + byte[] payload; + + totalPayloadSize = ReceivedBytes; + payload = new byte[totalPayloadSize]; + for (int i = 0, destIndex = 0; i < SectionData.Length; i++) + { + Array.Copy(SectionData[i], 0, payload, destIndex, SectionData[i].Length); + destIndex += SectionData[i].Length; + } // for + + return payload; + } // GetPayload + + public void Reset() + { + SectionData = new byte[LastSectionNumber + 1][]; + RemainingSections = LastSectionNumber + 1; + IsDisposed = false; + } // Reset + + public void Dispose() + { + SectionData = null; + IsDisposed = true; + } // Dispose + + /* + public int GetReceivedBytes() + { + int totalPayloadSize; + + totalPayloadSize = 0; + for (int i = 0; i < SectionData.Length; i++) + { + if (SectionData[i] != null) + { + totalPayloadSize += SectionData[i].Length; + } // if + } // for + + return totalPayloadSize; + } // GetReceivedBytes + */ + } // class SegmentAssembler +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs b/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs index b048ba37..b90cd994 100644 --- a/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs +++ b/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs @@ -1,125 +1,125 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public class VersionStorage - { - private Dictionary Versions; - - public event EventHandler SegmentStarted; - public event EventHandler SectionReceived; - public event EventHandler SegmentReceived; - public event EventHandler SegmentPayloadReceived; - - public bool SaveData - { - get; - private set; - } // SaveData - - public byte PayloadId - { - get; - private set; - } // PayloadId - - public short SegmentId - { - get; - private set; - } // SegmentId - - public string HexId - { - get { return string.Format("p{0:X2}s{1:X2}", PayloadId, SegmentId); } - } // HexId - - public VersionStorage(byte payloadId, short segmentId, bool saveData) - { - PayloadId = payloadId; - SegmentId = segmentId; - Versions = new Dictionary(); - SaveData = saveData; - } // constructor - - public bool AddSection(DvbStpHeader header, byte[] data, bool isRawData) - { - SegmentAssembler assembler; - bool newSection; - - if (!Versions.TryGetValue(header.SegmentVersion, out assembler)) - { - assembler = new SegmentAssembler(new DvbStpSegmentIdentity(header), header.LastSectionNumber); - Versions[header.SegmentVersion] = assembler; - OnSegmentStarted(header); - } // if - - if (SaveData) - { - if (isRawData) - { - newSection = assembler.AddSectionData(header.SectionNumber, data, header.PayloadOffset, header.PayloadSize); - } - else - { - newSection = assembler.AddSectionData(header.SectionNumber, data, 0, data.Length); - } // if-else - } - else - { - newSection = assembler.AddSectionData(header.SectionNumber, PayloadStorage.EmptyData, 0, 0); - } // if-else - - if (newSection) - { - OnSectionReceived(header, assembler); - if (assembler.IsSegmentComplete) - { - OnSegmentReceived(assembler); - } // if - } // if - - return newSection; - } // AddSection - - private void OnSegmentStarted(DvbStpHeader header) - { - if (SegmentStarted == null) return; - - var args = new PayloadStorage.SegmentStartedEventArgs(header); - SegmentStarted(this, args); - } // OnSegmentStarted - - private void OnSectionReceived(DvbStpHeader header, SegmentAssembler assembler) - { - if (SectionReceived == null) return; - - var args = new PayloadStorage.SectionReceivedEventArgs(header, assembler); - SectionReceived(this, args); - } // OnSectionReceived - - private void OnSegmentReceived(SegmentAssembler assembler) - { - if (SegmentReceived != null) - { - var args = new PayloadStorage.SegmentReceivedEventArgs(assembler); - SegmentReceived(this, args); - } // if - - if (SegmentPayloadReceived != null) - { - var args = new PayloadStorage.SegmentPayloadReceivedEventArgs(assembler); - SegmentPayloadReceived(this, args); - } // if - - // discard data - assembler.Reset(); - } // OnSegmentReceived - } // VersionStorage -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.DvbStp.Client +{ + public class VersionStorage + { + private Dictionary Versions; + + public event EventHandler SegmentStarted; + public event EventHandler SectionReceived; + public event EventHandler SegmentReceived; + public event EventHandler SegmentPayloadReceived; + + public bool SaveData + { + get; + private set; + } // SaveData + + public byte PayloadId + { + get; + private set; + } // PayloadId + + public short SegmentId + { + get; + private set; + } // SegmentId + + public string HexId + { + get { return string.Format("p{0:X2}s{1:X2}", PayloadId, SegmentId); } + } // HexId + + public VersionStorage(byte payloadId, short segmentId, bool saveData) + { + PayloadId = payloadId; + SegmentId = segmentId; + Versions = new Dictionary(); + SaveData = saveData; + } // constructor + + public bool AddSection(DvbStpHeader header, byte[] data, bool isRawData) + { + SegmentAssembler assembler; + bool newSection; + + if (!Versions.TryGetValue(header.SegmentVersion, out assembler)) + { + assembler = new SegmentAssembler(new DvbStpSegmentIdentity(header), header.LastSectionNumber); + Versions[header.SegmentVersion] = assembler; + OnSegmentStarted(header); + } // if + + if (SaveData) + { + if (isRawData) + { + newSection = assembler.AddSectionData(header.SectionNumber, data, header.PayloadOffset, header.PayloadSize); + } + else + { + newSection = assembler.AddSectionData(header.SectionNumber, data, 0, data.Length); + } // if-else + } + else + { + newSection = assembler.AddSectionData(header.SectionNumber, PayloadStorage.EmptyData, 0, 0); + } // if-else + + if (newSection) + { + OnSectionReceived(header, assembler); + if (assembler.IsSegmentComplete) + { + OnSegmentReceived(assembler); + } // if + } // if + + return newSection; + } // AddSection + + private void OnSegmentStarted(DvbStpHeader header) + { + if (SegmentStarted == null) return; + + var args = new PayloadStorage.SegmentStartedEventArgs(header); + SegmentStarted(this, args); + } // OnSegmentStarted + + private void OnSectionReceived(DvbStpHeader header, SegmentAssembler assembler) + { + if (SectionReceived == null) return; + + var args = new PayloadStorage.SectionReceivedEventArgs(header, assembler); + SectionReceived(this, args); + } // OnSectionReceived + + private void OnSegmentReceived(SegmentAssembler assembler) + { + if (SegmentReceived != null) + { + var args = new PayloadStorage.SegmentReceivedEventArgs(assembler); + SegmentReceived(this, args); + } // if + + if (SegmentPayloadReceived != null) + { + var args = new PayloadStorage.SegmentPayloadReceivedEventArgs(assembler); + SegmentPayloadReceived(this, args); + } // if + + // discard data + assembler.Reset(); + } // OnSegmentReceived + } // VersionStorage +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs index e124fdaf..db5d9bdd 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs @@ -1,742 +1,742 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - partial class ConfigForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm)); - this.selectFolder = new Project.IpTv.UiServices.Common.Controls.SelectFolderDialog(); - this.openFile = new System.Windows.Forms.OpenFileDialog(); - this.labelStepTitle = new System.Windows.Forms.Label(); - this.panelButtons = new System.Windows.Forms.Panel(); - this.buttonPreviousPage = new System.Windows.Forms.Button(); - this.buttonNextPage = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.wizardControl = new Project.IpTv.Tools.FirstTimeConfig.WizardTabControl(); - this.wizardPageReadme = new System.Windows.Forms.TabPage(); - this.checkReadmeAck = new System.Windows.Forms.CheckBox(); - this.richTextReadme = new System.Windows.Forms.RichTextBox(); - this.pictureIconReadme = new System.Windows.Forms.PictureBox(); - this.labelReadmeWarning = new System.Windows.Forms.Label(); - this.wizardPagePrerequisites = new System.Windows.Forms.TabPage(); - this.groupVlc = new System.Windows.Forms.GroupBox(); - this.buttonTestVlc = new System.Windows.Forms.Button(); - this.labelVlcInstallCheckResult = new System.Windows.Forms.Label(); - this.buttonFindVlc = new System.Windows.Forms.Button(); - this.textBoxVlc = new System.Windows.Forms.TextBox(); - this.labelVlcPath = new System.Windows.Forms.Label(); - this.pictureBoxVlcOk = new System.Windows.Forms.PictureBox(); - this.buttonVerifyVlc = new System.Windows.Forms.Button(); - this.linkLabelPrerequisiteVlc = new System.Windows.Forms.LinkLabel(); - this.labelVlc = new System.Windows.Forms.Label(); - this.groupPrerequisites = new System.Windows.Forms.GroupBox(); - this.linkLabelSetupSqlCe = new System.Windows.Forms.LinkLabel(); - this.linkLabelSetupEmb = new System.Windows.Forms.LinkLabel(); - this.pictureBoxSqlCeOk = new System.Windows.Forms.PictureBox(); - this.buttonVerifySqlCe = new System.Windows.Forms.Button(); - this.linkLabelPrerequisiteSqlCe = new System.Windows.Forms.LinkLabel(); - this.labelSqlCe = new System.Windows.Forms.Label(); - this.pictureBoxEmbOk = new System.Windows.Forms.PictureBox(); - this.buttonVerifyEmb = new System.Windows.Forms.Button(); - this.linkLabelPrerequisiteEmb = new System.Windows.Forms.LinkLabel(); - this.labelEmb = new System.Windows.Forms.Label(); - this.wizardPageFirewall = new System.Windows.Forms.TabPage(); - this.groupAnalytics = new System.Windows.Forms.GroupBox(); - this.checkAnalyticsExceptions = new System.Windows.Forms.CheckBox(); - this.linkAnalyticsHelp = new System.Windows.Forms.LinkLabel(); - this.checkAnalyticsUsage = new System.Windows.Forms.CheckBox(); - this.checkEnableAnalytics = new System.Windows.Forms.CheckBox(); - this.groupFirewall = new System.Windows.Forms.GroupBox(); - this.checkFirewallManual = new System.Windows.Forms.CheckBox(); - this.buttonFirewall = new System.Windows.Forms.Button(); - this.labelFirewallWarning = new System.Windows.Forms.Label(); - this.checkBoxFirewallVlc = new System.Windows.Forms.CheckBox(); - this.checkBoxFirewallDecoder = new System.Windows.Forms.CheckBox(); - this.wizardPageBasic = new System.Windows.Forms.TabPage(); - this.groupBoxChannelNumbers = new System.Windows.Forms.GroupBox(); - this.radioChannelSDPriority = new System.Windows.Forms.RadioButton(); - this.radioChannelHDPriority = new System.Windows.Forms.RadioButton(); - this.labelChannelAssignmentExplanation = new System.Windows.Forms.Label(); - this.groupEPG = new System.Windows.Forms.GroupBox(); - this.checkEpgAutoUpdate = new System.Windows.Forms.CheckBox(); - this.labelEpgWarning = new System.Windows.Forms.Label(); - this.checkEpg = new System.Windows.Forms.CheckBox(); - this.wizardPageRecordings = new System.Windows.Forms.TabPage(); - this.labelCreatingConfig = new System.Windows.Forms.Label(); - this.buttonConfig = new System.Windows.Forms.Button(); - this.groupRecordConfig = new System.Windows.Forms.GroupBox(); - this.checkSaveSubfolder = new System.Windows.Forms.CheckBox(); - this.textSaveSubFolder = new System.Windows.Forms.TextBox(); - this.labelSaveSubFolder = new System.Windows.Forms.Label(); - this.buttonBrowseSave = new System.Windows.Forms.Button(); - this.textBoxSave = new System.Windows.Forms.TextBox(); - this.labelSaveFolder = new System.Windows.Forms.Label(); - this.panelButtons.SuspendLayout(); - this.wizardControl.SuspendLayout(); - this.wizardPageReadme.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconReadme)).BeginInit(); - this.wizardPagePrerequisites.SuspendLayout(); - this.groupVlc.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).BeginInit(); - this.groupPrerequisites.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSqlCeOk)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEmbOk)).BeginInit(); - this.wizardPageFirewall.SuspendLayout(); - this.groupAnalytics.SuspendLayout(); - this.groupFirewall.SuspendLayout(); - this.wizardPageBasic.SuspendLayout(); - this.groupBoxChannelNumbers.SuspendLayout(); - this.groupEPG.SuspendLayout(); - this.wizardPageRecordings.SuspendLayout(); - this.groupRecordConfig.SuspendLayout(); - this.SuspendLayout(); - // - // selectFolder - // - this.selectFolder.Description = ""; - this.selectFolder.DontIncludeNetworkFoldersBelowDomainLevel = false; - this.selectFolder.NewStyle = true; - this.selectFolder.RootFolder = System.Environment.SpecialFolder.MyComputer; - this.selectFolder.SelectedPath = ""; - this.selectFolder.ShowBothFilesAndFolders = false; - this.selectFolder.ShowEditBox = true; - this.selectFolder.ShowFullPathInEditBox = true; - this.selectFolder.ShowNewFolderButton = true; - // - // openFile - // - this.openFile.DefaultExt = "exe"; - this.openFile.FileName = "vlc.exe"; - this.openFile.RestoreDirectory = true; - // - // labelStepTitle - // - this.labelStepTitle.AutoEllipsis = true; - this.labelStepTitle.BackColor = System.Drawing.Color.Transparent; - resources.ApplyResources(this.labelStepTitle, "labelStepTitle"); - this.labelStepTitle.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.WizardTop; - this.labelStepTitle.Name = "labelStepTitle"; - // - // panelButtons - // - this.panelButtons.BackColor = System.Drawing.SystemColors.Control; - this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.panelButtons.Controls.Add(this.buttonPreviousPage); - this.panelButtons.Controls.Add(this.buttonNextPage); - this.panelButtons.Controls.Add(this.buttonCancel); - resources.ApplyResources(this.panelButtons, "panelButtons"); - this.panelButtons.Name = "panelButtons"; - // - // buttonPreviousPage - // - this.buttonPreviousPage.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionBack_Medium_16; - resources.ApplyResources(this.buttonPreviousPage, "buttonPreviousPage"); - this.buttonPreviousPage.Name = "buttonPreviousPage"; - this.buttonPreviousPage.UseVisualStyleBackColor = true; - // - // buttonNextPage - // - this.buttonNextPage.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionForward_Medium_16; - resources.ApplyResources(this.buttonNextPage, "buttonNextPage"); - this.buttonNextPage.Name = "buttonNextPage"; - this.buttonNextPage.UseVisualStyleBackColor = true; - // - // buttonCancel - // - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); - // - // wizardControl - // - resources.ApplyResources(this.wizardControl, "wizardControl"); - this.wizardControl.Controls.Add(this.wizardPageReadme); - this.wizardControl.Controls.Add(this.wizardPagePrerequisites); - this.wizardControl.Controls.Add(this.wizardPageFirewall); - this.wizardControl.Controls.Add(this.wizardPageBasic); - this.wizardControl.Controls.Add(this.wizardPageRecordings); - this.wizardControl.LabelTitle = null; - this.wizardControl.Name = "wizardControl"; - this.wizardControl.NextButton = null; - this.wizardControl.PreviousButton = null; - this.wizardControl.SelectedIndex = 0; - // - // wizardPageReadme - // - this.wizardPageReadme.Controls.Add(this.checkReadmeAck); - this.wizardPageReadme.Controls.Add(this.richTextReadme); - this.wizardPageReadme.Controls.Add(this.pictureIconReadme); - this.wizardPageReadme.Controls.Add(this.labelReadmeWarning); - resources.ApplyResources(this.wizardPageReadme, "wizardPageReadme"); - this.wizardPageReadme.Name = "wizardPageReadme"; - this.wizardPageReadme.Tag = ""; - this.wizardPageReadme.UseVisualStyleBackColor = true; - // - // checkReadmeAck - // - resources.ApplyResources(this.checkReadmeAck, "checkReadmeAck"); - this.checkReadmeAck.Name = "checkReadmeAck"; - this.checkReadmeAck.UseVisualStyleBackColor = true; - this.checkReadmeAck.CheckedChanged += new System.EventHandler(this.checkReadmeAck_CheckedChanged); - // - // richTextReadme - // - this.richTextReadme.BackColor = System.Drawing.SystemColors.Window; - resources.ApplyResources(this.richTextReadme, "richTextReadme"); - this.richTextReadme.Name = "richTextReadme"; - this.richTextReadme.ReadOnly = true; - this.richTextReadme.ShowSelectionMargin = true; - this.richTextReadme.VScroll += new System.EventHandler(this.richTextReadme_VScroll); - // - // pictureIconReadme - // - this.pictureIconReadme.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Warning_48x48; - resources.ApplyResources(this.pictureIconReadme, "pictureIconReadme"); - this.pictureIconReadme.Name = "pictureIconReadme"; - this.pictureIconReadme.TabStop = false; - // - // labelReadmeWarning - // - resources.ApplyResources(this.labelReadmeWarning, "labelReadmeWarning"); - this.labelReadmeWarning.Name = "labelReadmeWarning"; - // - // wizardPagePrerequisites - // - this.wizardPagePrerequisites.Controls.Add(this.groupVlc); - this.wizardPagePrerequisites.Controls.Add(this.groupPrerequisites); - resources.ApplyResources(this.wizardPagePrerequisites, "wizardPagePrerequisites"); - this.wizardPagePrerequisites.Name = "wizardPagePrerequisites"; - this.wizardPagePrerequisites.UseVisualStyleBackColor = true; - // - // groupVlc - // - this.groupVlc.Controls.Add(this.buttonTestVlc); - this.groupVlc.Controls.Add(this.labelVlcInstallCheckResult); - this.groupVlc.Controls.Add(this.buttonFindVlc); - this.groupVlc.Controls.Add(this.textBoxVlc); - this.groupVlc.Controls.Add(this.labelVlcPath); - this.groupVlc.Controls.Add(this.pictureBoxVlcOk); - this.groupVlc.Controls.Add(this.buttonVerifyVlc); - this.groupVlc.Controls.Add(this.linkLabelPrerequisiteVlc); - this.groupVlc.Controls.Add(this.labelVlc); - resources.ApplyResources(this.groupVlc, "groupVlc"); - this.groupVlc.Name = "groupVlc"; - this.groupVlc.TabStop = false; - // - // buttonTestVlc - // - this.buttonTestVlc.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionRun_16x16; - resources.ApplyResources(this.buttonTestVlc, "buttonTestVlc"); - this.buttonTestVlc.Name = "buttonTestVlc"; - this.buttonTestVlc.UseVisualStyleBackColor = true; - this.buttonTestVlc.Click += new System.EventHandler(this.buttonTestVlc_Click); - // - // labelVlcInstallCheckResult - // - resources.ApplyResources(this.labelVlcInstallCheckResult, "labelVlcInstallCheckResult"); - this.labelVlcInstallCheckResult.Name = "labelVlcInstallCheckResult"; - // - // buttonFindVlc - // - this.buttonFindVlc.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.AttachFileHS; - resources.ApplyResources(this.buttonFindVlc, "buttonFindVlc"); - this.buttonFindVlc.Name = "buttonFindVlc"; - this.buttonFindVlc.UseVisualStyleBackColor = true; - this.buttonFindVlc.Click += new System.EventHandler(this.buttonFindVlc_Click); - // - // textBoxVlc - // - this.textBoxVlc.BackColor = System.Drawing.SystemColors.Window; - resources.ApplyResources(this.textBoxVlc, "textBoxVlc"); - this.textBoxVlc.Name = "textBoxVlc"; - this.textBoxVlc.ReadOnly = true; - // - // labelVlcPath - // - resources.ApplyResources(this.labelVlcPath, "labelVlcPath"); - this.labelVlcPath.Name = "labelVlcPath"; - // - // pictureBoxVlcOk - // - this.pictureBoxVlcOk.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; - resources.ApplyResources(this.pictureBoxVlcOk, "pictureBoxVlcOk"); - this.pictureBoxVlcOk.Name = "pictureBoxVlcOk"; - this.pictureBoxVlcOk.TabStop = false; - // - // buttonVerifyVlc - // - this.buttonVerifyVlc.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; - resources.ApplyResources(this.buttonVerifyVlc, "buttonVerifyVlc"); - this.buttonVerifyVlc.Name = "buttonVerifyVlc"; - this.buttonVerifyVlc.UseVisualStyleBackColor = true; - this.buttonVerifyVlc.Click += new System.EventHandler(this.buttonVerifyVlc_Click); - // - // linkLabelPrerequisiteVlc - // - resources.ApplyResources(this.linkLabelPrerequisiteVlc, "linkLabelPrerequisiteVlc"); - this.linkLabelPrerequisiteVlc.Name = "linkLabelPrerequisiteVlc"; - this.linkLabelPrerequisiteVlc.TabStop = true; - this.linkLabelPrerequisiteVlc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteVlc_LinkClicked); - // - // labelVlc - // - resources.ApplyResources(this.labelVlc, "labelVlc"); - this.labelVlc.Name = "labelVlc"; - // - // groupPrerequisites - // - this.groupPrerequisites.Controls.Add(this.linkLabelSetupSqlCe); - this.groupPrerequisites.Controls.Add(this.linkLabelSetupEmb); - this.groupPrerequisites.Controls.Add(this.pictureBoxSqlCeOk); - this.groupPrerequisites.Controls.Add(this.buttonVerifySqlCe); - this.groupPrerequisites.Controls.Add(this.linkLabelPrerequisiteSqlCe); - this.groupPrerequisites.Controls.Add(this.labelSqlCe); - this.groupPrerequisites.Controls.Add(this.pictureBoxEmbOk); - this.groupPrerequisites.Controls.Add(this.buttonVerifyEmb); - this.groupPrerequisites.Controls.Add(this.linkLabelPrerequisiteEmb); - this.groupPrerequisites.Controls.Add(this.labelEmb); - resources.ApplyResources(this.groupPrerequisites, "groupPrerequisites"); - this.groupPrerequisites.Name = "groupPrerequisites"; - this.groupPrerequisites.TabStop = false; - // - // linkLabelSetupSqlCe - // - resources.ApplyResources(this.linkLabelSetupSqlCe, "linkLabelSetupSqlCe"); - this.linkLabelSetupSqlCe.Name = "linkLabelSetupSqlCe"; - this.linkLabelSetupSqlCe.TabStop = true; - this.linkLabelSetupSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupSqlCe_LinkClicked); - // - // linkLabelSetupEmb - // - resources.ApplyResources(this.linkLabelSetupEmb, "linkLabelSetupEmb"); - this.linkLabelSetupEmb.Name = "linkLabelSetupEmb"; - this.linkLabelSetupEmb.TabStop = true; - this.linkLabelSetupEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupEmb_LinkClicked); - // - // pictureBoxSqlCeOk - // - this.pictureBoxSqlCeOk.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; - resources.ApplyResources(this.pictureBoxSqlCeOk, "pictureBoxSqlCeOk"); - this.pictureBoxSqlCeOk.Name = "pictureBoxSqlCeOk"; - this.pictureBoxSqlCeOk.TabStop = false; - // - // buttonVerifySqlCe - // - this.buttonVerifySqlCe.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; - resources.ApplyResources(this.buttonVerifySqlCe, "buttonVerifySqlCe"); - this.buttonVerifySqlCe.Name = "buttonVerifySqlCe"; - this.buttonVerifySqlCe.UseVisualStyleBackColor = true; - this.buttonVerifySqlCe.Click += new System.EventHandler(this.buttonVerifySqlCe_Click); - // - // linkLabelPrerequisiteSqlCe - // - resources.ApplyResources(this.linkLabelPrerequisiteSqlCe, "linkLabelPrerequisiteSqlCe"); - this.linkLabelPrerequisiteSqlCe.Name = "linkLabelPrerequisiteSqlCe"; - this.linkLabelPrerequisiteSqlCe.TabStop = true; - this.linkLabelPrerequisiteSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteSqlCe_LinkClicked); - // - // labelSqlCe - // - resources.ApplyResources(this.labelSqlCe, "labelSqlCe"); - this.labelSqlCe.Name = "labelSqlCe"; - // - // pictureBoxEmbOk - // - this.pictureBoxEmbOk.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; - resources.ApplyResources(this.pictureBoxEmbOk, "pictureBoxEmbOk"); - this.pictureBoxEmbOk.Name = "pictureBoxEmbOk"; - this.pictureBoxEmbOk.TabStop = false; - // - // buttonVerifyEmb - // - this.buttonVerifyEmb.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; - resources.ApplyResources(this.buttonVerifyEmb, "buttonVerifyEmb"); - this.buttonVerifyEmb.Name = "buttonVerifyEmb"; - this.buttonVerifyEmb.UseVisualStyleBackColor = true; - this.buttonVerifyEmb.Click += new System.EventHandler(this.buttonVerifyEmb_Click); - // - // linkLabelPrerequisiteEmb - // - resources.ApplyResources(this.linkLabelPrerequisiteEmb, "linkLabelPrerequisiteEmb"); - this.linkLabelPrerequisiteEmb.Name = "linkLabelPrerequisiteEmb"; - this.linkLabelPrerequisiteEmb.TabStop = true; - this.linkLabelPrerequisiteEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteEmb_LinkClicked); - // - // labelEmb - // - resources.ApplyResources(this.labelEmb, "labelEmb"); - this.labelEmb.Name = "labelEmb"; - // - // wizardPageFirewall - // - this.wizardPageFirewall.Controls.Add(this.groupAnalytics); - this.wizardPageFirewall.Controls.Add(this.groupFirewall); - resources.ApplyResources(this.wizardPageFirewall, "wizardPageFirewall"); - this.wizardPageFirewall.Name = "wizardPageFirewall"; - this.wizardPageFirewall.UseVisualStyleBackColor = true; - // - // groupAnalytics - // - this.groupAnalytics.Controls.Add(this.checkAnalyticsExceptions); - this.groupAnalytics.Controls.Add(this.linkAnalyticsHelp); - this.groupAnalytics.Controls.Add(this.checkAnalyticsUsage); - this.groupAnalytics.Controls.Add(this.checkEnableAnalytics); - resources.ApplyResources(this.groupAnalytics, "groupAnalytics"); - this.groupAnalytics.Name = "groupAnalytics"; - this.groupAnalytics.TabStop = false; - // - // checkAnalyticsExceptions - // - resources.ApplyResources(this.checkAnalyticsExceptions, "checkAnalyticsExceptions"); - this.checkAnalyticsExceptions.Checked = true; - this.checkAnalyticsExceptions.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkAnalyticsExceptions.Name = "checkAnalyticsExceptions"; - this.checkAnalyticsExceptions.UseVisualStyleBackColor = true; - // - // linkAnalyticsHelp - // - resources.ApplyResources(this.linkAnalyticsHelp, "linkAnalyticsHelp"); - this.linkAnalyticsHelp.Name = "linkAnalyticsHelp"; - this.linkAnalyticsHelp.TabStop = true; - this.linkAnalyticsHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkAnalyticsHelp_LinkClicked); - // - // checkAnalyticsUsage - // - resources.ApplyResources(this.checkAnalyticsUsage, "checkAnalyticsUsage"); - this.checkAnalyticsUsage.Checked = true; - this.checkAnalyticsUsage.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkAnalyticsUsage.Name = "checkAnalyticsUsage"; - this.checkAnalyticsUsage.UseVisualStyleBackColor = true; - // - // checkEnableAnalytics - // - resources.ApplyResources(this.checkEnableAnalytics, "checkEnableAnalytics"); - this.checkEnableAnalytics.Checked = true; - this.checkEnableAnalytics.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkEnableAnalytics.Name = "checkEnableAnalytics"; - this.checkEnableAnalytics.UseVisualStyleBackColor = true; - this.checkEnableAnalytics.CheckedChanged += new System.EventHandler(this.checkEnableAnalytics_CheckedChanged); - // - // groupFirewall - // - this.groupFirewall.Controls.Add(this.checkFirewallManual); - this.groupFirewall.Controls.Add(this.buttonFirewall); - this.groupFirewall.Controls.Add(this.labelFirewallWarning); - this.groupFirewall.Controls.Add(this.checkBoxFirewallVlc); - this.groupFirewall.Controls.Add(this.checkBoxFirewallDecoder); - resources.ApplyResources(this.groupFirewall, "groupFirewall"); - this.groupFirewall.Name = "groupFirewall"; - this.groupFirewall.TabStop = false; - // - // checkFirewallManual - // - resources.ApplyResources(this.checkFirewallManual, "checkFirewallManual"); - this.checkFirewallManual.Name = "checkFirewallManual"; - this.checkFirewallManual.UseVisualStyleBackColor = true; - this.checkFirewallManual.CheckedChanged += new System.EventHandler(this.checkFirewallManual_CheckedChanged); - // - // buttonFirewall - // - this.buttonFirewall.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Shield_16x16; - resources.ApplyResources(this.buttonFirewall, "buttonFirewall"); - this.buttonFirewall.Name = "buttonFirewall"; - this.buttonFirewall.UseVisualStyleBackColor = true; - this.buttonFirewall.Click += new System.EventHandler(this.buttonFirewall_Click); - // - // labelFirewallWarning - // - resources.ApplyResources(this.labelFirewallWarning, "labelFirewallWarning"); - this.labelFirewallWarning.Name = "labelFirewallWarning"; - // - // checkBoxFirewallVlc - // - resources.ApplyResources(this.checkBoxFirewallVlc, "checkBoxFirewallVlc"); - this.checkBoxFirewallVlc.Name = "checkBoxFirewallVlc"; - this.checkBoxFirewallVlc.UseVisualStyleBackColor = true; - this.checkBoxFirewallVlc.CheckedChanged += new System.EventHandler(this.checkBoxFirewall_CheckedChanged); - // - // checkBoxFirewallDecoder - // - resources.ApplyResources(this.checkBoxFirewallDecoder, "checkBoxFirewallDecoder"); - this.checkBoxFirewallDecoder.Name = "checkBoxFirewallDecoder"; - this.checkBoxFirewallDecoder.UseVisualStyleBackColor = true; - this.checkBoxFirewallDecoder.CheckedChanged += new System.EventHandler(this.checkBoxFirewall_CheckedChanged); - // - // wizardPageBasic - // - this.wizardPageBasic.Controls.Add(this.groupBoxChannelNumbers); - this.wizardPageBasic.Controls.Add(this.groupEPG); - resources.ApplyResources(this.wizardPageBasic, "wizardPageBasic"); - this.wizardPageBasic.Name = "wizardPageBasic"; - this.wizardPageBasic.UseVisualStyleBackColor = true; - // - // groupBoxChannelNumbers - // - this.groupBoxChannelNumbers.Controls.Add(this.radioChannelSDPriority); - this.groupBoxChannelNumbers.Controls.Add(this.radioChannelHDPriority); - this.groupBoxChannelNumbers.Controls.Add(this.labelChannelAssignmentExplanation); - resources.ApplyResources(this.groupBoxChannelNumbers, "groupBoxChannelNumbers"); - this.groupBoxChannelNumbers.Name = "groupBoxChannelNumbers"; - this.groupBoxChannelNumbers.TabStop = false; - // - // radioChannelSDPriority - // - resources.ApplyResources(this.radioChannelSDPriority, "radioChannelSDPriority"); - this.radioChannelSDPriority.Name = "radioChannelSDPriority"; - this.radioChannelSDPriority.UseVisualStyleBackColor = true; - // - // radioChannelHDPriority - // - resources.ApplyResources(this.radioChannelHDPriority, "radioChannelHDPriority"); - this.radioChannelHDPriority.Checked = true; - this.radioChannelHDPriority.Name = "radioChannelHDPriority"; - this.radioChannelHDPriority.TabStop = true; - this.radioChannelHDPriority.UseVisualStyleBackColor = true; - // - // labelChannelAssignmentExplanation - // - resources.ApplyResources(this.labelChannelAssignmentExplanation, "labelChannelAssignmentExplanation"); - this.labelChannelAssignmentExplanation.Name = "labelChannelAssignmentExplanation"; - // - // groupEPG - // - this.groupEPG.Controls.Add(this.checkEpgAutoUpdate); - this.groupEPG.Controls.Add(this.labelEpgWarning); - this.groupEPG.Controls.Add(this.checkEpg); - resources.ApplyResources(this.groupEPG, "groupEPG"); - this.groupEPG.Name = "groupEPG"; - this.groupEPG.TabStop = false; - // - // checkEpgAutoUpdate - // - resources.ApplyResources(this.checkEpgAutoUpdate, "checkEpgAutoUpdate"); - this.checkEpgAutoUpdate.Name = "checkEpgAutoUpdate"; - this.checkEpgAutoUpdate.UseVisualStyleBackColor = true; - // - // labelEpgWarning - // - resources.ApplyResources(this.labelEpgWarning, "labelEpgWarning"); - this.labelEpgWarning.Name = "labelEpgWarning"; - // - // checkEpg - // - resources.ApplyResources(this.checkEpg, "checkEpg"); - this.checkEpg.Name = "checkEpg"; - this.checkEpg.UseVisualStyleBackColor = true; - // - // wizardPageRecordings - // - this.wizardPageRecordings.Controls.Add(this.labelCreatingConfig); - this.wizardPageRecordings.Controls.Add(this.buttonConfig); - this.wizardPageRecordings.Controls.Add(this.groupRecordConfig); - resources.ApplyResources(this.wizardPageRecordings, "wizardPageRecordings"); - this.wizardPageRecordings.Name = "wizardPageRecordings"; - this.wizardPageRecordings.UseVisualStyleBackColor = true; - // - // labelCreatingConfig - // - resources.ApplyResources(this.labelCreatingConfig, "labelCreatingConfig"); - this.labelCreatingConfig.Name = "labelCreatingConfig"; - // - // buttonConfig - // - this.buttonConfig.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionRun_16x16; - resources.ApplyResources(this.buttonConfig, "buttonConfig"); - this.buttonConfig.Name = "buttonConfig"; - this.buttonConfig.UseVisualStyleBackColor = true; - this.buttonConfig.Click += new System.EventHandler(this.buttonConfig_Click); - // - // groupRecordConfig - // - this.groupRecordConfig.Controls.Add(this.checkSaveSubfolder); - this.groupRecordConfig.Controls.Add(this.textSaveSubFolder); - this.groupRecordConfig.Controls.Add(this.labelSaveSubFolder); - this.groupRecordConfig.Controls.Add(this.buttonBrowseSave); - this.groupRecordConfig.Controls.Add(this.textBoxSave); - this.groupRecordConfig.Controls.Add(this.labelSaveFolder); - resources.ApplyResources(this.groupRecordConfig, "groupRecordConfig"); - this.groupRecordConfig.Name = "groupRecordConfig"; - this.groupRecordConfig.TabStop = false; - // - // checkSaveSubfolder - // - resources.ApplyResources(this.checkSaveSubfolder, "checkSaveSubfolder"); - this.checkSaveSubfolder.Checked = true; - this.checkSaveSubfolder.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkSaveSubfolder.Name = "checkSaveSubfolder"; - this.checkSaveSubfolder.UseVisualStyleBackColor = true; - this.checkSaveSubfolder.CheckedChanged += new System.EventHandler(this.checkSaveSubfolder_CheckedChanged); - // - // textSaveSubFolder - // - resources.ApplyResources(this.textSaveSubFolder, "textSaveSubFolder"); - this.textSaveSubFolder.Name = "textSaveSubFolder"; - // - // labelSaveSubFolder - // - resources.ApplyResources(this.labelSaveSubFolder, "labelSaveSubFolder"); - this.labelSaveSubFolder.Name = "labelSaveSubFolder"; - // - // buttonBrowseSave - // - this.buttonBrowseSave.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.openfolderHS; - resources.ApplyResources(this.buttonBrowseSave, "buttonBrowseSave"); - this.buttonBrowseSave.Name = "buttonBrowseSave"; - this.buttonBrowseSave.UseVisualStyleBackColor = true; - this.buttonBrowseSave.Click += new System.EventHandler(this.buttonBrowseSave_Click); - // - // textBoxSave - // - resources.ApplyResources(this.textBoxSave, "textBoxSave"); - this.textBoxSave.Name = "textBoxSave"; - this.textBoxSave.ReadOnly = true; - // - // labelSaveFolder - // - resources.ApplyResources(this.labelSaveFolder, "labelSaveFolder"); - this.labelSaveFolder.Name = "labelSaveFolder"; - // - // ConfigForm - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonCancel; - this.Controls.Add(this.panelButtons); - this.Controls.Add(this.labelStepTitle); - this.Controls.Add(this.wizardControl); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "ConfigForm"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigForm_FormClosing); - this.Load += new System.EventHandler(this.ConfigForm_Load); - this.Shown += new System.EventHandler(this.ConfigForm_Shown); - this.panelButtons.ResumeLayout(false); - this.wizardControl.ResumeLayout(false); - this.wizardPageReadme.ResumeLayout(false); - this.wizardPageReadme.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconReadme)).EndInit(); - this.wizardPagePrerequisites.ResumeLayout(false); - this.groupVlc.ResumeLayout(false); - this.groupVlc.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).EndInit(); - this.groupPrerequisites.ResumeLayout(false); - this.groupPrerequisites.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSqlCeOk)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEmbOk)).EndInit(); - this.wizardPageFirewall.ResumeLayout(false); - this.groupAnalytics.ResumeLayout(false); - this.groupAnalytics.PerformLayout(); - this.groupFirewall.ResumeLayout(false); - this.groupFirewall.PerformLayout(); - this.wizardPageBasic.ResumeLayout(false); - this.groupBoxChannelNumbers.ResumeLayout(false); - this.groupBoxChannelNumbers.PerformLayout(); - this.groupEPG.ResumeLayout(false); - this.groupEPG.PerformLayout(); - this.wizardPageRecordings.ResumeLayout(false); - this.groupRecordConfig.ResumeLayout(false); - this.groupRecordConfig.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private Project.IpTv.UiServices.Common.Controls.SelectFolderDialog selectFolder; - private System.Windows.Forms.OpenFileDialog openFile; - private WizardTabControl wizardControl; - private System.Windows.Forms.TabPage wizardPagePrerequisites; - private System.Windows.Forms.GroupBox groupPrerequisites; - private System.Windows.Forms.Button buttonVerifyEmb; - private System.Windows.Forms.LinkLabel linkLabelPrerequisiteVlc; - private System.Windows.Forms.Label labelVlc; - private System.Windows.Forms.LinkLabel linkLabelPrerequisiteEmb; - private System.Windows.Forms.Label labelEmb; - private System.Windows.Forms.TabPage wizardPageFirewall; - private System.Windows.Forms.GroupBox groupVlc; - private System.Windows.Forms.Button buttonVerifyVlc; - private System.Windows.Forms.PictureBox pictureBoxVlcOk; - private System.Windows.Forms.PictureBox pictureBoxEmbOk; - private System.Windows.Forms.Button buttonFindVlc; - private System.Windows.Forms.TextBox textBoxVlc; - private System.Windows.Forms.Label labelVlcPath; - private System.Windows.Forms.Label labelVlcInstallCheckResult; - private System.Windows.Forms.Button buttonTestVlc; - private System.Windows.Forms.GroupBox groupFirewall; - private System.Windows.Forms.Button buttonFirewall; - private System.Windows.Forms.Label labelFirewallWarning; - private System.Windows.Forms.CheckBox checkBoxFirewallVlc; - private System.Windows.Forms.CheckBox checkBoxFirewallDecoder; - private System.Windows.Forms.PictureBox pictureBoxSqlCeOk; - private System.Windows.Forms.Button buttonVerifySqlCe; - private System.Windows.Forms.LinkLabel linkLabelPrerequisiteSqlCe; - private System.Windows.Forms.Label labelSqlCe; - private System.Windows.Forms.Label labelStepTitle; - private System.Windows.Forms.Panel panelButtons; - private System.Windows.Forms.Button buttonPreviousPage; - private System.Windows.Forms.Button buttonNextPage; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.TabPage wizardPageBasic; - private System.Windows.Forms.GroupBox groupAnalytics; - private System.Windows.Forms.CheckBox checkAnalyticsExceptions; - private System.Windows.Forms.LinkLabel linkAnalyticsHelp; - private System.Windows.Forms.CheckBox checkAnalyticsUsage; - private System.Windows.Forms.CheckBox checkEnableAnalytics; - private System.Windows.Forms.GroupBox groupEPG; - private System.Windows.Forms.CheckBox checkEpgAutoUpdate; - private System.Windows.Forms.Label labelEpgWarning; - private System.Windows.Forms.CheckBox checkEpg; - private System.Windows.Forms.TabPage wizardPageReadme; - private System.Windows.Forms.TabPage wizardPageRecordings; - private System.Windows.Forms.Button buttonConfig; - private System.Windows.Forms.GroupBox groupRecordConfig; - private System.Windows.Forms.TextBox textSaveSubFolder; - private System.Windows.Forms.Label labelSaveSubFolder; - private System.Windows.Forms.Button buttonBrowseSave; - private System.Windows.Forms.TextBox textBoxSave; - private System.Windows.Forms.Label labelSaveFolder; - private System.Windows.Forms.CheckBox checkSaveSubfolder; - private System.Windows.Forms.CheckBox checkFirewallManual; - private System.Windows.Forms.GroupBox groupBoxChannelNumbers; - private System.Windows.Forms.RadioButton radioChannelSDPriority; - private System.Windows.Forms.RadioButton radioChannelHDPriority; - private System.Windows.Forms.Label labelChannelAssignmentExplanation; - private System.Windows.Forms.LinkLabel linkLabelSetupSqlCe; - private System.Windows.Forms.LinkLabel linkLabelSetupEmb; - private System.Windows.Forms.Label labelCreatingConfig; - private System.Windows.Forms.RichTextBox richTextReadme; - private System.Windows.Forms.Label labelReadmeWarning; - private System.Windows.Forms.PictureBox pictureIconReadme; - private System.Windows.Forms.CheckBox checkReadmeAck; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Tools.FirstTimeConfig +{ + partial class ConfigForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm)); + this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); + this.openFile = new System.Windows.Forms.OpenFileDialog(); + this.labelStepTitle = new System.Windows.Forms.Label(); + this.panelButtons = new System.Windows.Forms.Panel(); + this.buttonPreviousPage = new System.Windows.Forms.Button(); + this.buttonNextPage = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.wizardControl = new IpTviewr.Tools.FirstTimeConfig.WizardTabControl(); + this.wizardPageReadme = new System.Windows.Forms.TabPage(); + this.checkReadmeAck = new System.Windows.Forms.CheckBox(); + this.richTextReadme = new System.Windows.Forms.RichTextBox(); + this.pictureIconReadme = new System.Windows.Forms.PictureBox(); + this.labelReadmeWarning = new System.Windows.Forms.Label(); + this.wizardPagePrerequisites = new System.Windows.Forms.TabPage(); + this.groupVlc = new System.Windows.Forms.GroupBox(); + this.buttonTestVlc = new System.Windows.Forms.Button(); + this.labelVlcInstallCheckResult = new System.Windows.Forms.Label(); + this.buttonFindVlc = new System.Windows.Forms.Button(); + this.textBoxVlc = new System.Windows.Forms.TextBox(); + this.labelVlcPath = new System.Windows.Forms.Label(); + this.pictureBoxVlcOk = new System.Windows.Forms.PictureBox(); + this.buttonVerifyVlc = new System.Windows.Forms.Button(); + this.linkLabelPrerequisiteVlc = new System.Windows.Forms.LinkLabel(); + this.labelVlc = new System.Windows.Forms.Label(); + this.groupPrerequisites = new System.Windows.Forms.GroupBox(); + this.linkLabelSetupSqlCe = new System.Windows.Forms.LinkLabel(); + this.linkLabelSetupEmb = new System.Windows.Forms.LinkLabel(); + this.pictureBoxSqlCeOk = new System.Windows.Forms.PictureBox(); + this.buttonVerifySqlCe = new System.Windows.Forms.Button(); + this.linkLabelPrerequisiteSqlCe = new System.Windows.Forms.LinkLabel(); + this.labelSqlCe = new System.Windows.Forms.Label(); + this.pictureBoxEmbOk = new System.Windows.Forms.PictureBox(); + this.buttonVerifyEmb = new System.Windows.Forms.Button(); + this.linkLabelPrerequisiteEmb = new System.Windows.Forms.LinkLabel(); + this.labelEmb = new System.Windows.Forms.Label(); + this.wizardPageFirewall = new System.Windows.Forms.TabPage(); + this.groupAnalytics = new System.Windows.Forms.GroupBox(); + this.checkAnalyticsExceptions = new System.Windows.Forms.CheckBox(); + this.linkAnalyticsHelp = new System.Windows.Forms.LinkLabel(); + this.checkAnalyticsUsage = new System.Windows.Forms.CheckBox(); + this.checkEnableAnalytics = new System.Windows.Forms.CheckBox(); + this.groupFirewall = new System.Windows.Forms.GroupBox(); + this.checkFirewallManual = new System.Windows.Forms.CheckBox(); + this.buttonFirewall = new System.Windows.Forms.Button(); + this.labelFirewallWarning = new System.Windows.Forms.Label(); + this.checkBoxFirewallVlc = new System.Windows.Forms.CheckBox(); + this.checkBoxFirewallDecoder = new System.Windows.Forms.CheckBox(); + this.wizardPageBasic = new System.Windows.Forms.TabPage(); + this.groupBoxChannelNumbers = new System.Windows.Forms.GroupBox(); + this.radioChannelSDPriority = new System.Windows.Forms.RadioButton(); + this.radioChannelHDPriority = new System.Windows.Forms.RadioButton(); + this.labelChannelAssignmentExplanation = new System.Windows.Forms.Label(); + this.groupEPG = new System.Windows.Forms.GroupBox(); + this.checkEpgAutoUpdate = new System.Windows.Forms.CheckBox(); + this.labelEpgWarning = new System.Windows.Forms.Label(); + this.checkEpg = new System.Windows.Forms.CheckBox(); + this.wizardPageRecordings = new System.Windows.Forms.TabPage(); + this.labelCreatingConfig = new System.Windows.Forms.Label(); + this.buttonConfig = new System.Windows.Forms.Button(); + this.groupRecordConfig = new System.Windows.Forms.GroupBox(); + this.checkSaveSubfolder = new System.Windows.Forms.CheckBox(); + this.textSaveSubFolder = new System.Windows.Forms.TextBox(); + this.labelSaveSubFolder = new System.Windows.Forms.Label(); + this.buttonBrowseSave = new System.Windows.Forms.Button(); + this.textBoxSave = new System.Windows.Forms.TextBox(); + this.labelSaveFolder = new System.Windows.Forms.Label(); + this.panelButtons.SuspendLayout(); + this.wizardControl.SuspendLayout(); + this.wizardPageReadme.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconReadme)).BeginInit(); + this.wizardPagePrerequisites.SuspendLayout(); + this.groupVlc.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).BeginInit(); + this.groupPrerequisites.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSqlCeOk)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEmbOk)).BeginInit(); + this.wizardPageFirewall.SuspendLayout(); + this.groupAnalytics.SuspendLayout(); + this.groupFirewall.SuspendLayout(); + this.wizardPageBasic.SuspendLayout(); + this.groupBoxChannelNumbers.SuspendLayout(); + this.groupEPG.SuspendLayout(); + this.wizardPageRecordings.SuspendLayout(); + this.groupRecordConfig.SuspendLayout(); + this.SuspendLayout(); + // + // selectFolder + // + this.selectFolder.Description = ""; + this.selectFolder.DontIncludeNetworkFoldersBelowDomainLevel = false; + this.selectFolder.NewStyle = true; + this.selectFolder.RootFolder = System.Environment.SpecialFolder.MyComputer; + this.selectFolder.SelectedPath = ""; + this.selectFolder.ShowBothFilesAndFolders = false; + this.selectFolder.ShowEditBox = true; + this.selectFolder.ShowFullPathInEditBox = true; + this.selectFolder.ShowNewFolderButton = true; + // + // openFile + // + this.openFile.DefaultExt = "exe"; + this.openFile.FileName = "vlc.exe"; + this.openFile.RestoreDirectory = true; + // + // labelStepTitle + // + this.labelStepTitle.AutoEllipsis = true; + this.labelStepTitle.BackColor = System.Drawing.Color.Transparent; + resources.ApplyResources(this.labelStepTitle, "labelStepTitle"); + this.labelStepTitle.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.WizardTop; + this.labelStepTitle.Name = "labelStepTitle"; + // + // panelButtons + // + this.panelButtons.BackColor = System.Drawing.SystemColors.Control; + this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.panelButtons.Controls.Add(this.buttonPreviousPage); + this.panelButtons.Controls.Add(this.buttonNextPage); + this.panelButtons.Controls.Add(this.buttonCancel); + resources.ApplyResources(this.panelButtons, "panelButtons"); + this.panelButtons.Name = "panelButtons"; + // + // buttonPreviousPage + // + this.buttonPreviousPage.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionBack_Medium_16; + resources.ApplyResources(this.buttonPreviousPage, "buttonPreviousPage"); + this.buttonPreviousPage.Name = "buttonPreviousPage"; + this.buttonPreviousPage.UseVisualStyleBackColor = true; + // + // buttonNextPage + // + this.buttonNextPage.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionForward_Medium_16; + resources.ApplyResources(this.buttonNextPage, "buttonNextPage"); + this.buttonNextPage.Name = "buttonNextPage"; + this.buttonNextPage.UseVisualStyleBackColor = true; + // + // buttonCancel + // + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // wizardControl + // + resources.ApplyResources(this.wizardControl, "wizardControl"); + this.wizardControl.Controls.Add(this.wizardPageReadme); + this.wizardControl.Controls.Add(this.wizardPagePrerequisites); + this.wizardControl.Controls.Add(this.wizardPageFirewall); + this.wizardControl.Controls.Add(this.wizardPageBasic); + this.wizardControl.Controls.Add(this.wizardPageRecordings); + this.wizardControl.LabelTitle = null; + this.wizardControl.Name = "wizardControl"; + this.wizardControl.NextButton = null; + this.wizardControl.PreviousButton = null; + this.wizardControl.SelectedIndex = 0; + // + // wizardPageReadme + // + this.wizardPageReadme.Controls.Add(this.checkReadmeAck); + this.wizardPageReadme.Controls.Add(this.richTextReadme); + this.wizardPageReadme.Controls.Add(this.pictureIconReadme); + this.wizardPageReadme.Controls.Add(this.labelReadmeWarning); + resources.ApplyResources(this.wizardPageReadme, "wizardPageReadme"); + this.wizardPageReadme.Name = "wizardPageReadme"; + this.wizardPageReadme.Tag = ""; + this.wizardPageReadme.UseVisualStyleBackColor = true; + // + // checkReadmeAck + // + resources.ApplyResources(this.checkReadmeAck, "checkReadmeAck"); + this.checkReadmeAck.Name = "checkReadmeAck"; + this.checkReadmeAck.UseVisualStyleBackColor = true; + this.checkReadmeAck.CheckedChanged += new System.EventHandler(this.checkReadmeAck_CheckedChanged); + // + // richTextReadme + // + this.richTextReadme.BackColor = System.Drawing.SystemColors.Window; + resources.ApplyResources(this.richTextReadme, "richTextReadme"); + this.richTextReadme.Name = "richTextReadme"; + this.richTextReadme.ReadOnly = true; + this.richTextReadme.ShowSelectionMargin = true; + this.richTextReadme.VScroll += new System.EventHandler(this.richTextReadme_VScroll); + // + // pictureIconReadme + // + this.pictureIconReadme.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Warning_48x48; + resources.ApplyResources(this.pictureIconReadme, "pictureIconReadme"); + this.pictureIconReadme.Name = "pictureIconReadme"; + this.pictureIconReadme.TabStop = false; + // + // labelReadmeWarning + // + resources.ApplyResources(this.labelReadmeWarning, "labelReadmeWarning"); + this.labelReadmeWarning.Name = "labelReadmeWarning"; + // + // wizardPagePrerequisites + // + this.wizardPagePrerequisites.Controls.Add(this.groupVlc); + this.wizardPagePrerequisites.Controls.Add(this.groupPrerequisites); + resources.ApplyResources(this.wizardPagePrerequisites, "wizardPagePrerequisites"); + this.wizardPagePrerequisites.Name = "wizardPagePrerequisites"; + this.wizardPagePrerequisites.UseVisualStyleBackColor = true; + // + // groupVlc + // + this.groupVlc.Controls.Add(this.buttonTestVlc); + this.groupVlc.Controls.Add(this.labelVlcInstallCheckResult); + this.groupVlc.Controls.Add(this.buttonFindVlc); + this.groupVlc.Controls.Add(this.textBoxVlc); + this.groupVlc.Controls.Add(this.labelVlcPath); + this.groupVlc.Controls.Add(this.pictureBoxVlcOk); + this.groupVlc.Controls.Add(this.buttonVerifyVlc); + this.groupVlc.Controls.Add(this.linkLabelPrerequisiteVlc); + this.groupVlc.Controls.Add(this.labelVlc); + resources.ApplyResources(this.groupVlc, "groupVlc"); + this.groupVlc.Name = "groupVlc"; + this.groupVlc.TabStop = false; + // + // buttonTestVlc + // + this.buttonTestVlc.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionRun_16x16; + resources.ApplyResources(this.buttonTestVlc, "buttonTestVlc"); + this.buttonTestVlc.Name = "buttonTestVlc"; + this.buttonTestVlc.UseVisualStyleBackColor = true; + this.buttonTestVlc.Click += new System.EventHandler(this.buttonTestVlc_Click); + // + // labelVlcInstallCheckResult + // + resources.ApplyResources(this.labelVlcInstallCheckResult, "labelVlcInstallCheckResult"); + this.labelVlcInstallCheckResult.Name = "labelVlcInstallCheckResult"; + // + // buttonFindVlc + // + this.buttonFindVlc.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.AttachFileHS; + resources.ApplyResources(this.buttonFindVlc, "buttonFindVlc"); + this.buttonFindVlc.Name = "buttonFindVlc"; + this.buttonFindVlc.UseVisualStyleBackColor = true; + this.buttonFindVlc.Click += new System.EventHandler(this.buttonFindVlc_Click); + // + // textBoxVlc + // + this.textBoxVlc.BackColor = System.Drawing.SystemColors.Window; + resources.ApplyResources(this.textBoxVlc, "textBoxVlc"); + this.textBoxVlc.Name = "textBoxVlc"; + this.textBoxVlc.ReadOnly = true; + // + // labelVlcPath + // + resources.ApplyResources(this.labelVlcPath, "labelVlcPath"); + this.labelVlcPath.Name = "labelVlcPath"; + // + // pictureBoxVlcOk + // + this.pictureBoxVlcOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; + resources.ApplyResources(this.pictureBoxVlcOk, "pictureBoxVlcOk"); + this.pictureBoxVlcOk.Name = "pictureBoxVlcOk"; + this.pictureBoxVlcOk.TabStop = false; + // + // buttonVerifyVlc + // + this.buttonVerifyVlc.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; + resources.ApplyResources(this.buttonVerifyVlc, "buttonVerifyVlc"); + this.buttonVerifyVlc.Name = "buttonVerifyVlc"; + this.buttonVerifyVlc.UseVisualStyleBackColor = true; + this.buttonVerifyVlc.Click += new System.EventHandler(this.buttonVerifyVlc_Click); + // + // linkLabelPrerequisiteVlc + // + resources.ApplyResources(this.linkLabelPrerequisiteVlc, "linkLabelPrerequisiteVlc"); + this.linkLabelPrerequisiteVlc.Name = "linkLabelPrerequisiteVlc"; + this.linkLabelPrerequisiteVlc.TabStop = true; + this.linkLabelPrerequisiteVlc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteVlc_LinkClicked); + // + // labelVlc + // + resources.ApplyResources(this.labelVlc, "labelVlc"); + this.labelVlc.Name = "labelVlc"; + // + // groupPrerequisites + // + this.groupPrerequisites.Controls.Add(this.linkLabelSetupSqlCe); + this.groupPrerequisites.Controls.Add(this.linkLabelSetupEmb); + this.groupPrerequisites.Controls.Add(this.pictureBoxSqlCeOk); + this.groupPrerequisites.Controls.Add(this.buttonVerifySqlCe); + this.groupPrerequisites.Controls.Add(this.linkLabelPrerequisiteSqlCe); + this.groupPrerequisites.Controls.Add(this.labelSqlCe); + this.groupPrerequisites.Controls.Add(this.pictureBoxEmbOk); + this.groupPrerequisites.Controls.Add(this.buttonVerifyEmb); + this.groupPrerequisites.Controls.Add(this.linkLabelPrerequisiteEmb); + this.groupPrerequisites.Controls.Add(this.labelEmb); + resources.ApplyResources(this.groupPrerequisites, "groupPrerequisites"); + this.groupPrerequisites.Name = "groupPrerequisites"; + this.groupPrerequisites.TabStop = false; + // + // linkLabelSetupSqlCe + // + resources.ApplyResources(this.linkLabelSetupSqlCe, "linkLabelSetupSqlCe"); + this.linkLabelSetupSqlCe.Name = "linkLabelSetupSqlCe"; + this.linkLabelSetupSqlCe.TabStop = true; + this.linkLabelSetupSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupSqlCe_LinkClicked); + // + // linkLabelSetupEmb + // + resources.ApplyResources(this.linkLabelSetupEmb, "linkLabelSetupEmb"); + this.linkLabelSetupEmb.Name = "linkLabelSetupEmb"; + this.linkLabelSetupEmb.TabStop = true; + this.linkLabelSetupEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupEmb_LinkClicked); + // + // pictureBoxSqlCeOk + // + this.pictureBoxSqlCeOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; + resources.ApplyResources(this.pictureBoxSqlCeOk, "pictureBoxSqlCeOk"); + this.pictureBoxSqlCeOk.Name = "pictureBoxSqlCeOk"; + this.pictureBoxSqlCeOk.TabStop = false; + // + // buttonVerifySqlCe + // + this.buttonVerifySqlCe.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; + resources.ApplyResources(this.buttonVerifySqlCe, "buttonVerifySqlCe"); + this.buttonVerifySqlCe.Name = "buttonVerifySqlCe"; + this.buttonVerifySqlCe.UseVisualStyleBackColor = true; + this.buttonVerifySqlCe.Click += new System.EventHandler(this.buttonVerifySqlCe_Click); + // + // linkLabelPrerequisiteSqlCe + // + resources.ApplyResources(this.linkLabelPrerequisiteSqlCe, "linkLabelPrerequisiteSqlCe"); + this.linkLabelPrerequisiteSqlCe.Name = "linkLabelPrerequisiteSqlCe"; + this.linkLabelPrerequisiteSqlCe.TabStop = true; + this.linkLabelPrerequisiteSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteSqlCe_LinkClicked); + // + // labelSqlCe + // + resources.ApplyResources(this.labelSqlCe, "labelSqlCe"); + this.labelSqlCe.Name = "labelSqlCe"; + // + // pictureBoxEmbOk + // + this.pictureBoxEmbOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; + resources.ApplyResources(this.pictureBoxEmbOk, "pictureBoxEmbOk"); + this.pictureBoxEmbOk.Name = "pictureBoxEmbOk"; + this.pictureBoxEmbOk.TabStop = false; + // + // buttonVerifyEmb + // + this.buttonVerifyEmb.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; + resources.ApplyResources(this.buttonVerifyEmb, "buttonVerifyEmb"); + this.buttonVerifyEmb.Name = "buttonVerifyEmb"; + this.buttonVerifyEmb.UseVisualStyleBackColor = true; + this.buttonVerifyEmb.Click += new System.EventHandler(this.buttonVerifyEmb_Click); + // + // linkLabelPrerequisiteEmb + // + resources.ApplyResources(this.linkLabelPrerequisiteEmb, "linkLabelPrerequisiteEmb"); + this.linkLabelPrerequisiteEmb.Name = "linkLabelPrerequisiteEmb"; + this.linkLabelPrerequisiteEmb.TabStop = true; + this.linkLabelPrerequisiteEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteEmb_LinkClicked); + // + // labelEmb + // + resources.ApplyResources(this.labelEmb, "labelEmb"); + this.labelEmb.Name = "labelEmb"; + // + // wizardPageFirewall + // + this.wizardPageFirewall.Controls.Add(this.groupAnalytics); + this.wizardPageFirewall.Controls.Add(this.groupFirewall); + resources.ApplyResources(this.wizardPageFirewall, "wizardPageFirewall"); + this.wizardPageFirewall.Name = "wizardPageFirewall"; + this.wizardPageFirewall.UseVisualStyleBackColor = true; + // + // groupAnalytics + // + this.groupAnalytics.Controls.Add(this.checkAnalyticsExceptions); + this.groupAnalytics.Controls.Add(this.linkAnalyticsHelp); + this.groupAnalytics.Controls.Add(this.checkAnalyticsUsage); + this.groupAnalytics.Controls.Add(this.checkEnableAnalytics); + resources.ApplyResources(this.groupAnalytics, "groupAnalytics"); + this.groupAnalytics.Name = "groupAnalytics"; + this.groupAnalytics.TabStop = false; + // + // checkAnalyticsExceptions + // + resources.ApplyResources(this.checkAnalyticsExceptions, "checkAnalyticsExceptions"); + this.checkAnalyticsExceptions.Checked = true; + this.checkAnalyticsExceptions.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkAnalyticsExceptions.Name = "checkAnalyticsExceptions"; + this.checkAnalyticsExceptions.UseVisualStyleBackColor = true; + // + // linkAnalyticsHelp + // + resources.ApplyResources(this.linkAnalyticsHelp, "linkAnalyticsHelp"); + this.linkAnalyticsHelp.Name = "linkAnalyticsHelp"; + this.linkAnalyticsHelp.TabStop = true; + this.linkAnalyticsHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkAnalyticsHelp_LinkClicked); + // + // checkAnalyticsUsage + // + resources.ApplyResources(this.checkAnalyticsUsage, "checkAnalyticsUsage"); + this.checkAnalyticsUsage.Checked = true; + this.checkAnalyticsUsage.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkAnalyticsUsage.Name = "checkAnalyticsUsage"; + this.checkAnalyticsUsage.UseVisualStyleBackColor = true; + // + // checkEnableAnalytics + // + resources.ApplyResources(this.checkEnableAnalytics, "checkEnableAnalytics"); + this.checkEnableAnalytics.Checked = true; + this.checkEnableAnalytics.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkEnableAnalytics.Name = "checkEnableAnalytics"; + this.checkEnableAnalytics.UseVisualStyleBackColor = true; + this.checkEnableAnalytics.CheckedChanged += new System.EventHandler(this.checkEnableAnalytics_CheckedChanged); + // + // groupFirewall + // + this.groupFirewall.Controls.Add(this.checkFirewallManual); + this.groupFirewall.Controls.Add(this.buttonFirewall); + this.groupFirewall.Controls.Add(this.labelFirewallWarning); + this.groupFirewall.Controls.Add(this.checkBoxFirewallVlc); + this.groupFirewall.Controls.Add(this.checkBoxFirewallDecoder); + resources.ApplyResources(this.groupFirewall, "groupFirewall"); + this.groupFirewall.Name = "groupFirewall"; + this.groupFirewall.TabStop = false; + // + // checkFirewallManual + // + resources.ApplyResources(this.checkFirewallManual, "checkFirewallManual"); + this.checkFirewallManual.Name = "checkFirewallManual"; + this.checkFirewallManual.UseVisualStyleBackColor = true; + this.checkFirewallManual.CheckedChanged += new System.EventHandler(this.checkFirewallManual_CheckedChanged); + // + // buttonFirewall + // + this.buttonFirewall.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Shield_16x16; + resources.ApplyResources(this.buttonFirewall, "buttonFirewall"); + this.buttonFirewall.Name = "buttonFirewall"; + this.buttonFirewall.UseVisualStyleBackColor = true; + this.buttonFirewall.Click += new System.EventHandler(this.buttonFirewall_Click); + // + // labelFirewallWarning + // + resources.ApplyResources(this.labelFirewallWarning, "labelFirewallWarning"); + this.labelFirewallWarning.Name = "labelFirewallWarning"; + // + // checkBoxFirewallVlc + // + resources.ApplyResources(this.checkBoxFirewallVlc, "checkBoxFirewallVlc"); + this.checkBoxFirewallVlc.Name = "checkBoxFirewallVlc"; + this.checkBoxFirewallVlc.UseVisualStyleBackColor = true; + this.checkBoxFirewallVlc.CheckedChanged += new System.EventHandler(this.checkBoxFirewall_CheckedChanged); + // + // checkBoxFirewallDecoder + // + resources.ApplyResources(this.checkBoxFirewallDecoder, "checkBoxFirewallDecoder"); + this.checkBoxFirewallDecoder.Name = "checkBoxFirewallDecoder"; + this.checkBoxFirewallDecoder.UseVisualStyleBackColor = true; + this.checkBoxFirewallDecoder.CheckedChanged += new System.EventHandler(this.checkBoxFirewall_CheckedChanged); + // + // wizardPageBasic + // + this.wizardPageBasic.Controls.Add(this.groupBoxChannelNumbers); + this.wizardPageBasic.Controls.Add(this.groupEPG); + resources.ApplyResources(this.wizardPageBasic, "wizardPageBasic"); + this.wizardPageBasic.Name = "wizardPageBasic"; + this.wizardPageBasic.UseVisualStyleBackColor = true; + // + // groupBoxChannelNumbers + // + this.groupBoxChannelNumbers.Controls.Add(this.radioChannelSDPriority); + this.groupBoxChannelNumbers.Controls.Add(this.radioChannelHDPriority); + this.groupBoxChannelNumbers.Controls.Add(this.labelChannelAssignmentExplanation); + resources.ApplyResources(this.groupBoxChannelNumbers, "groupBoxChannelNumbers"); + this.groupBoxChannelNumbers.Name = "groupBoxChannelNumbers"; + this.groupBoxChannelNumbers.TabStop = false; + // + // radioChannelSDPriority + // + resources.ApplyResources(this.radioChannelSDPriority, "radioChannelSDPriority"); + this.radioChannelSDPriority.Name = "radioChannelSDPriority"; + this.radioChannelSDPriority.UseVisualStyleBackColor = true; + // + // radioChannelHDPriority + // + resources.ApplyResources(this.radioChannelHDPriority, "radioChannelHDPriority"); + this.radioChannelHDPriority.Checked = true; + this.radioChannelHDPriority.Name = "radioChannelHDPriority"; + this.radioChannelHDPriority.TabStop = true; + this.radioChannelHDPriority.UseVisualStyleBackColor = true; + // + // labelChannelAssignmentExplanation + // + resources.ApplyResources(this.labelChannelAssignmentExplanation, "labelChannelAssignmentExplanation"); + this.labelChannelAssignmentExplanation.Name = "labelChannelAssignmentExplanation"; + // + // groupEPG + // + this.groupEPG.Controls.Add(this.checkEpgAutoUpdate); + this.groupEPG.Controls.Add(this.labelEpgWarning); + this.groupEPG.Controls.Add(this.checkEpg); + resources.ApplyResources(this.groupEPG, "groupEPG"); + this.groupEPG.Name = "groupEPG"; + this.groupEPG.TabStop = false; + // + // checkEpgAutoUpdate + // + resources.ApplyResources(this.checkEpgAutoUpdate, "checkEpgAutoUpdate"); + this.checkEpgAutoUpdate.Name = "checkEpgAutoUpdate"; + this.checkEpgAutoUpdate.UseVisualStyleBackColor = true; + // + // labelEpgWarning + // + resources.ApplyResources(this.labelEpgWarning, "labelEpgWarning"); + this.labelEpgWarning.Name = "labelEpgWarning"; + // + // checkEpg + // + resources.ApplyResources(this.checkEpg, "checkEpg"); + this.checkEpg.Name = "checkEpg"; + this.checkEpg.UseVisualStyleBackColor = true; + // + // wizardPageRecordings + // + this.wizardPageRecordings.Controls.Add(this.labelCreatingConfig); + this.wizardPageRecordings.Controls.Add(this.buttonConfig); + this.wizardPageRecordings.Controls.Add(this.groupRecordConfig); + resources.ApplyResources(this.wizardPageRecordings, "wizardPageRecordings"); + this.wizardPageRecordings.Name = "wizardPageRecordings"; + this.wizardPageRecordings.UseVisualStyleBackColor = true; + // + // labelCreatingConfig + // + resources.ApplyResources(this.labelCreatingConfig, "labelCreatingConfig"); + this.labelCreatingConfig.Name = "labelCreatingConfig"; + // + // buttonConfig + // + this.buttonConfig.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionRun_16x16; + resources.ApplyResources(this.buttonConfig, "buttonConfig"); + this.buttonConfig.Name = "buttonConfig"; + this.buttonConfig.UseVisualStyleBackColor = true; + this.buttonConfig.Click += new System.EventHandler(this.buttonConfig_Click); + // + // groupRecordConfig + // + this.groupRecordConfig.Controls.Add(this.checkSaveSubfolder); + this.groupRecordConfig.Controls.Add(this.textSaveSubFolder); + this.groupRecordConfig.Controls.Add(this.labelSaveSubFolder); + this.groupRecordConfig.Controls.Add(this.buttonBrowseSave); + this.groupRecordConfig.Controls.Add(this.textBoxSave); + this.groupRecordConfig.Controls.Add(this.labelSaveFolder); + resources.ApplyResources(this.groupRecordConfig, "groupRecordConfig"); + this.groupRecordConfig.Name = "groupRecordConfig"; + this.groupRecordConfig.TabStop = false; + // + // checkSaveSubfolder + // + resources.ApplyResources(this.checkSaveSubfolder, "checkSaveSubfolder"); + this.checkSaveSubfolder.Checked = true; + this.checkSaveSubfolder.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkSaveSubfolder.Name = "checkSaveSubfolder"; + this.checkSaveSubfolder.UseVisualStyleBackColor = true; + this.checkSaveSubfolder.CheckedChanged += new System.EventHandler(this.checkSaveSubfolder_CheckedChanged); + // + // textSaveSubFolder + // + resources.ApplyResources(this.textSaveSubFolder, "textSaveSubFolder"); + this.textSaveSubFolder.Name = "textSaveSubFolder"; + // + // labelSaveSubFolder + // + resources.ApplyResources(this.labelSaveSubFolder, "labelSaveSubFolder"); + this.labelSaveSubFolder.Name = "labelSaveSubFolder"; + // + // buttonBrowseSave + // + this.buttonBrowseSave.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.openfolderHS; + resources.ApplyResources(this.buttonBrowseSave, "buttonBrowseSave"); + this.buttonBrowseSave.Name = "buttonBrowseSave"; + this.buttonBrowseSave.UseVisualStyleBackColor = true; + this.buttonBrowseSave.Click += new System.EventHandler(this.buttonBrowseSave_Click); + // + // textBoxSave + // + resources.ApplyResources(this.textBoxSave, "textBoxSave"); + this.textBoxSave.Name = "textBoxSave"; + this.textBoxSave.ReadOnly = true; + // + // labelSaveFolder + // + resources.ApplyResources(this.labelSaveFolder, "labelSaveFolder"); + this.labelSaveFolder.Name = "labelSaveFolder"; + // + // ConfigForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.panelButtons); + this.Controls.Add(this.labelStepTitle); + this.Controls.Add(this.wizardControl); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ConfigForm"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigForm_FormClosing); + this.Load += new System.EventHandler(this.ConfigForm_Load); + this.Shown += new System.EventHandler(this.ConfigForm_Shown); + this.panelButtons.ResumeLayout(false); + this.wizardControl.ResumeLayout(false); + this.wizardPageReadme.ResumeLayout(false); + this.wizardPageReadme.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconReadme)).EndInit(); + this.wizardPagePrerequisites.ResumeLayout(false); + this.groupVlc.ResumeLayout(false); + this.groupVlc.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).EndInit(); + this.groupPrerequisites.ResumeLayout(false); + this.groupPrerequisites.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSqlCeOk)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEmbOk)).EndInit(); + this.wizardPageFirewall.ResumeLayout(false); + this.groupAnalytics.ResumeLayout(false); + this.groupAnalytics.PerformLayout(); + this.groupFirewall.ResumeLayout(false); + this.groupFirewall.PerformLayout(); + this.wizardPageBasic.ResumeLayout(false); + this.groupBoxChannelNumbers.ResumeLayout(false); + this.groupBoxChannelNumbers.PerformLayout(); + this.groupEPG.ResumeLayout(false); + this.groupEPG.PerformLayout(); + this.wizardPageRecordings.ResumeLayout(false); + this.groupRecordConfig.ResumeLayout(false); + this.groupRecordConfig.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private IpTviewr.UiServices.Common.Controls.SelectFolderDialog selectFolder; + private System.Windows.Forms.OpenFileDialog openFile; + private WizardTabControl wizardControl; + private System.Windows.Forms.TabPage wizardPagePrerequisites; + private System.Windows.Forms.GroupBox groupPrerequisites; + private System.Windows.Forms.Button buttonVerifyEmb; + private System.Windows.Forms.LinkLabel linkLabelPrerequisiteVlc; + private System.Windows.Forms.Label labelVlc; + private System.Windows.Forms.LinkLabel linkLabelPrerequisiteEmb; + private System.Windows.Forms.Label labelEmb; + private System.Windows.Forms.TabPage wizardPageFirewall; + private System.Windows.Forms.GroupBox groupVlc; + private System.Windows.Forms.Button buttonVerifyVlc; + private System.Windows.Forms.PictureBox pictureBoxVlcOk; + private System.Windows.Forms.PictureBox pictureBoxEmbOk; + private System.Windows.Forms.Button buttonFindVlc; + private System.Windows.Forms.TextBox textBoxVlc; + private System.Windows.Forms.Label labelVlcPath; + private System.Windows.Forms.Label labelVlcInstallCheckResult; + private System.Windows.Forms.Button buttonTestVlc; + private System.Windows.Forms.GroupBox groupFirewall; + private System.Windows.Forms.Button buttonFirewall; + private System.Windows.Forms.Label labelFirewallWarning; + private System.Windows.Forms.CheckBox checkBoxFirewallVlc; + private System.Windows.Forms.CheckBox checkBoxFirewallDecoder; + private System.Windows.Forms.PictureBox pictureBoxSqlCeOk; + private System.Windows.Forms.Button buttonVerifySqlCe; + private System.Windows.Forms.LinkLabel linkLabelPrerequisiteSqlCe; + private System.Windows.Forms.Label labelSqlCe; + private System.Windows.Forms.Label labelStepTitle; + private System.Windows.Forms.Panel panelButtons; + private System.Windows.Forms.Button buttonPreviousPage; + private System.Windows.Forms.Button buttonNextPage; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.TabPage wizardPageBasic; + private System.Windows.Forms.GroupBox groupAnalytics; + private System.Windows.Forms.CheckBox checkAnalyticsExceptions; + private System.Windows.Forms.LinkLabel linkAnalyticsHelp; + private System.Windows.Forms.CheckBox checkAnalyticsUsage; + private System.Windows.Forms.CheckBox checkEnableAnalytics; + private System.Windows.Forms.GroupBox groupEPG; + private System.Windows.Forms.CheckBox checkEpgAutoUpdate; + private System.Windows.Forms.Label labelEpgWarning; + private System.Windows.Forms.CheckBox checkEpg; + private System.Windows.Forms.TabPage wizardPageReadme; + private System.Windows.Forms.TabPage wizardPageRecordings; + private System.Windows.Forms.Button buttonConfig; + private System.Windows.Forms.GroupBox groupRecordConfig; + private System.Windows.Forms.TextBox textSaveSubFolder; + private System.Windows.Forms.Label labelSaveSubFolder; + private System.Windows.Forms.Button buttonBrowseSave; + private System.Windows.Forms.TextBox textBoxSave; + private System.Windows.Forms.Label labelSaveFolder; + private System.Windows.Forms.CheckBox checkSaveSubfolder; + private System.Windows.Forms.CheckBox checkFirewallManual; + private System.Windows.Forms.GroupBox groupBoxChannelNumbers; + private System.Windows.Forms.RadioButton radioChannelSDPriority; + private System.Windows.Forms.RadioButton radioChannelHDPriority; + private System.Windows.Forms.Label labelChannelAssignmentExplanation; + private System.Windows.Forms.LinkLabel linkLabelSetupSqlCe; + private System.Windows.Forms.LinkLabel linkLabelSetupEmb; + private System.Windows.Forms.Label labelCreatingConfig; + private System.Windows.Forms.RichTextBox richTextReadme; + private System.Windows.Forms.Label labelReadmeWarning; + private System.Windows.Forms.PictureBox pictureIconReadme; + private System.Windows.Forms.CheckBox checkReadmeAck; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs index c59eca05..b1a105d6 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs @@ -1,11 +1,11 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Tools.FirstTimeConfig.Properties; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; +using IpTviewr.Common.Telemetry; +using IpTviewr.Tools.FirstTimeConfig.Properties; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,7 +17,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.Tools.FirstTimeConfig +namespace IpTviewr.Tools.FirstTimeConfig { public partial class ConfigForm : Form { diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx index f4881029..4c15b7d8 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx @@ -2013,7 +2013,7 @@ Which channels should appear first? wizardControl - Project.IpTv.Tools.FirstTimeConfig.WizardTabControl, FirstTimeConfig, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.Tools.FirstTimeConfig.WizardTabControl, FirstTimeConfig, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -2040,7 +2040,7 @@ Which channels should appear first? selectFolder - Project.IpTv.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null openFile diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs b/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs index 51aadc49..3bfbdea2 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs @@ -1,11 +1,11 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using Project.IpTv.UiServices.Configuration.Settings.Network; -using Project.IpTv.UiServices.Configuration.Settings.TvPlayers; -using Project.IpTv.UiServices.Discovery.BroadcastList; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Configuration.Settings.Network; +using IpTviewr.UiServices.Configuration.Settings.TvPlayers; +using IpTviewr.UiServices.Discovery.BroadcastList; using System; using System.Collections.Generic; using System.IO; @@ -14,10 +14,10 @@ using System.Windows.Forms; using System.Xml; using System.Xml.Linq; -using Project.IpTv.Core.IpTvProvider; -using Project.IpTv.MovistarPlus; +using IpTviewr.Core.IpTvProvider; +using IpTviewr.MovistarPlus; -namespace Project.IpTv.Tools.FirstTimeConfig +namespace IpTviewr.Tools.FirstTimeConfig { internal class Configuration { diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs index b0a95a67..be34b9b7 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs @@ -1,151 +1,151 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - partial class FirewallForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FirewallForm)); - this.groupFirewall = new System.Windows.Forms.GroupBox(); - this.labelSuccess = new System.Windows.Forms.Label(); - this.pictureBoxSuccess = new System.Windows.Forms.PictureBox(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.checkBoxFirewallVlc = new System.Windows.Forms.CheckBox(); - this.checkBoxFirewallDecoder = new System.Windows.Forms.CheckBox(); - this.buttonFirewall = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.buttonClose = new System.Windows.Forms.Button(); - this.groupFirewall.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSuccess)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.SuspendLayout(); - // - // groupFirewall - // - this.groupFirewall.Controls.Add(this.labelSuccess); - this.groupFirewall.Controls.Add(this.pictureBoxSuccess); - this.groupFirewall.Controls.Add(this.pictureBox1); - this.groupFirewall.Controls.Add(this.checkBoxFirewallVlc); - this.groupFirewall.Controls.Add(this.checkBoxFirewallDecoder); - resources.ApplyResources(this.groupFirewall, "groupFirewall"); - this.groupFirewall.Name = "groupFirewall"; - this.groupFirewall.TabStop = false; - // - // labelSuccess - // - resources.ApplyResources(this.labelSuccess, "labelSuccess"); - this.labelSuccess.Name = "labelSuccess"; - // - // pictureBoxSuccess - // - this.pictureBoxSuccess.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Sucess_16x16; - resources.ApplyResources(this.pictureBoxSuccess, "pictureBoxSuccess"); - this.pictureBoxSuccess.Name = "pictureBoxSuccess"; - this.pictureBoxSuccess.TabStop = false; - // - // pictureBox1 - // - this.pictureBox1.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.Firewall_48x48; - resources.ApplyResources(this.pictureBox1, "pictureBox1"); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.TabStop = false; - // - // checkBoxFirewallVlc - // - this.checkBoxFirewallVlc.AutoCheck = false; - resources.ApplyResources(this.checkBoxFirewallVlc, "checkBoxFirewallVlc"); - this.checkBoxFirewallVlc.Name = "checkBoxFirewallVlc"; - this.checkBoxFirewallVlc.UseVisualStyleBackColor = true; - // - // checkBoxFirewallDecoder - // - this.checkBoxFirewallDecoder.AutoCheck = false; - resources.ApplyResources(this.checkBoxFirewallDecoder, "checkBoxFirewallDecoder"); - this.checkBoxFirewallDecoder.Name = "checkBoxFirewallDecoder"; - this.checkBoxFirewallDecoder.UseVisualStyleBackColor = true; - // - // buttonFirewall - // - this.buttonFirewall.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionForward_Medium_16; - resources.ApplyResources(this.buttonFirewall, "buttonFirewall"); - this.buttonFirewall.Name = "buttonFirewall"; - this.buttonFirewall.UseVisualStyleBackColor = true; - this.buttonFirewall.Click += new System.EventHandler(this.buttonFirewall_Click); - // - // buttonCancel - // - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // buttonClose - // - this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonClose.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionOk_16x16; - resources.ApplyResources(this.buttonClose, "buttonClose"); - this.buttonClose.Name = "buttonClose"; - this.buttonClose.UseVisualStyleBackColor = true; - // - // FirewallForm - // - this.AcceptButton = this.buttonClose; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonCancel; - this.Controls.Add(this.buttonClose); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonFirewall); - this.Controls.Add(this.groupFirewall); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "FirewallForm"; - this.groupFirewall.ResumeLayout(false); - this.groupFirewall.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSuccess)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupFirewall; - private System.Windows.Forms.CheckBox checkBoxFirewallVlc; - private System.Windows.Forms.CheckBox checkBoxFirewallDecoder; - private System.Windows.Forms.Button buttonFirewall; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.Button buttonClose; - private System.Windows.Forms.Label labelSuccess; - private System.Windows.Forms.PictureBox pictureBoxSuccess; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Tools.FirstTimeConfig +{ + partial class FirewallForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FirewallForm)); + this.groupFirewall = new System.Windows.Forms.GroupBox(); + this.labelSuccess = new System.Windows.Forms.Label(); + this.pictureBoxSuccess = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.checkBoxFirewallVlc = new System.Windows.Forms.CheckBox(); + this.checkBoxFirewallDecoder = new System.Windows.Forms.CheckBox(); + this.buttonFirewall = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonClose = new System.Windows.Forms.Button(); + this.groupFirewall.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSuccess)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // groupFirewall + // + this.groupFirewall.Controls.Add(this.labelSuccess); + this.groupFirewall.Controls.Add(this.pictureBoxSuccess); + this.groupFirewall.Controls.Add(this.pictureBox1); + this.groupFirewall.Controls.Add(this.checkBoxFirewallVlc); + this.groupFirewall.Controls.Add(this.checkBoxFirewallDecoder); + resources.ApplyResources(this.groupFirewall, "groupFirewall"); + this.groupFirewall.Name = "groupFirewall"; + this.groupFirewall.TabStop = false; + // + // labelSuccess + // + resources.ApplyResources(this.labelSuccess, "labelSuccess"); + this.labelSuccess.Name = "labelSuccess"; + // + // pictureBoxSuccess + // + this.pictureBoxSuccess.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Sucess_16x16; + resources.ApplyResources(this.pictureBoxSuccess, "pictureBoxSuccess"); + this.pictureBoxSuccess.Name = "pictureBoxSuccess"; + this.pictureBoxSuccess.TabStop = false; + // + // pictureBox1 + // + this.pictureBox1.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Firewall_48x48; + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // checkBoxFirewallVlc + // + this.checkBoxFirewallVlc.AutoCheck = false; + resources.ApplyResources(this.checkBoxFirewallVlc, "checkBoxFirewallVlc"); + this.checkBoxFirewallVlc.Name = "checkBoxFirewallVlc"; + this.checkBoxFirewallVlc.UseVisualStyleBackColor = true; + // + // checkBoxFirewallDecoder + // + this.checkBoxFirewallDecoder.AutoCheck = false; + resources.ApplyResources(this.checkBoxFirewallDecoder, "checkBoxFirewallDecoder"); + this.checkBoxFirewallDecoder.Name = "checkBoxFirewallDecoder"; + this.checkBoxFirewallDecoder.UseVisualStyleBackColor = true; + // + // buttonFirewall + // + this.buttonFirewall.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionForward_Medium_16; + resources.ApplyResources(this.buttonFirewall, "buttonFirewall"); + this.buttonFirewall.Name = "buttonFirewall"; + this.buttonFirewall.UseVisualStyleBackColor = true; + this.buttonFirewall.Click += new System.EventHandler(this.buttonFirewall_Click); + // + // buttonCancel + // + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonClose + // + this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonClose.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionOk_16x16; + resources.ApplyResources(this.buttonClose, "buttonClose"); + this.buttonClose.Name = "buttonClose"; + this.buttonClose.UseVisualStyleBackColor = true; + // + // FirewallForm + // + this.AcceptButton = this.buttonClose; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.buttonClose); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonFirewall); + this.Controls.Add(this.groupFirewall); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FirewallForm"; + this.groupFirewall.ResumeLayout(false); + this.groupFirewall.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSuccess)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupFirewall; + private System.Windows.Forms.CheckBox checkBoxFirewallVlc; + private System.Windows.Forms.CheckBox checkBoxFirewallDecoder; + private System.Windows.Forms.Button buttonFirewall; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button buttonClose; + private System.Windows.Forms.Label labelSuccess; + private System.Windows.Forms.PictureBox pictureBoxSuccess; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs index ff2cb41b..bb7bc4f1 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs @@ -1,55 +1,55 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Tools.FirstTimeConfig.Properties; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - public partial class FirewallForm : Form - { - public FirewallForm() - { - InitializeComponent(); - this.Icon = Resources.FirewallIcon; - - checkBoxFirewallDecoder.Enabled = !string.IsNullOrEmpty(Program.FirewallBinPath); - checkBoxFirewallDecoder.Checked = checkBoxFirewallDecoder.Enabled; - - checkBoxFirewallVlc.Enabled = !string.IsNullOrEmpty(Program.FirewallVlcPath); - checkBoxFirewallVlc.Checked = checkBoxFirewallVlc.Enabled; - } // constructor - - private void buttonFirewall_Click(object sender, EventArgs e) - { - string message; - - var ok = Installation.ConfigureFirewall( - checkBoxFirewallDecoder.Checked ? Program.FirewallBinPath : null, - checkBoxFirewallVlc.Checked ? Program.FirewallVlcPath : null, - out message); - - if (message != null) - { - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } // if - - pictureBoxSuccess.Visible = true; - labelSuccess.Visible = true; - - buttonFirewall.Enabled = false; - buttonCancel.Visible = false; - buttonClose.Location = buttonCancel.Location; - buttonClose.Size = buttonCancel.Size; - buttonClose.Visible = true; - } // buttonFirewall_Click - } // class FirewallForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Tools.FirstTimeConfig.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + public partial class FirewallForm : Form + { + public FirewallForm() + { + InitializeComponent(); + this.Icon = Resources.FirewallIcon; + + checkBoxFirewallDecoder.Enabled = !string.IsNullOrEmpty(Program.FirewallBinPath); + checkBoxFirewallDecoder.Checked = checkBoxFirewallDecoder.Enabled; + + checkBoxFirewallVlc.Enabled = !string.IsNullOrEmpty(Program.FirewallVlcPath); + checkBoxFirewallVlc.Checked = checkBoxFirewallVlc.Enabled; + } // constructor + + private void buttonFirewall_Click(object sender, EventArgs e) + { + string message; + + var ok = Installation.ConfigureFirewall( + checkBoxFirewallDecoder.Checked ? Program.FirewallBinPath : null, + checkBoxFirewallVlc.Checked ? Program.FirewallVlcPath : null, + out message); + + if (message != null) + { + MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } // if + + pictureBoxSuccess.Visible = true; + labelSuccess.Visible = true; + + buttonFirewall.Enabled = false; + buttonCancel.Visible = false; + buttonClose.Location = buttonCancel.Location; + buttonClose.Size = buttonCancel.Size; + buttonClose.Visible = true; + } // buttonFirewall_Click + } // class FirewallForm +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj index 576e7a96..4b1453d9 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj @@ -1,236 +1,236 @@ - - - - - Debug - AnyCPU - {6B23C0BE-C1CE-457A-B701-55870E355560} - WinExe - Properties - Project.IpTv.Tools.FirstTimeConfig - FirstTimeConfig - v3.5 - 512 - SAK - SAK - SAK - SAK - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - Resources\first-time-config.ico - - - - - - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - Form - - - ConfigForm.cs - - - - Form - - - FirewallForm.cs - - - - - - - True - True - Texts.resx - - - - Form - - - WizardEndDialog.cs - - - Component - - - Form - - - WizardWelcomeDialog.cs - - - ConfigForm.cs - - - ConfigForm.cs - - - FirewallForm.cs - - - FirewallForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - Designer - - - ResXFileCodeGenerator - Texts.Designer.cs - - - WizardEndDialog.cs - - - WizardEndDialog.cs - - - WizardWelcomeDialog.cs - - - WizardWelcomeDialog.cs - - - Resources\GoogleTelemetry_en.rtf - - - Resources\GoogleTelemetry_es.rtf - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - - - - - - - - Resources\Status_Pending_16x16.png - - - Resources\Status_Wait_16x16.png - - - - - - - - - - - - - - - - - {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider - - - {e1748f45-dd50-4479-96f6-f7eba6f3e28b} - IpTv.MovistarPlus - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} - Services.Record.Serialization - - - {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} - UiServices.Common - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} - UiServices.Config - - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery - - - - - {58FBCF7C-E7A9-467C-80B3-FC65E8FCCA08} - 1 - 0 - 0 - tlbimp - False - True - - - - + + + + + Debug + AnyCPU + {6B23C0BE-C1CE-457A-B701-55870E355560} + WinExe + Properties + IpTviewr.Tools.FirstTimeConfig + FirstTimeConfig + v3.5 + 512 + SAK + SAK + SAK + SAK + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Resources\first-time-config.ico + + + + + + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + Form + + + ConfigForm.cs + + + + Form + + + FirewallForm.cs + + + + + + + True + True + Texts.resx + + + + Form + + + WizardEndDialog.cs + + + Component + + + Form + + + WizardWelcomeDialog.cs + + + ConfigForm.cs + + + ConfigForm.cs + + + FirewallForm.cs + + + FirewallForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Designer + + + ResXFileCodeGenerator + Texts.Designer.cs + + + WizardEndDialog.cs + + + WizardEndDialog.cs + + + WizardWelcomeDialog.cs + + + WizardWelcomeDialog.cs + + + Resources\GoogleTelemetry_en.rtf + + + Resources\GoogleTelemetry_es.rtf + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + Resources\Status_Pending_16x16.png + + + Resources\Status_Wait_16x16.png + + + + + + + + + + + + + + + + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + Core.IpTvProvider + + + {e1748f45-dd50-4479-96f6-f7eba6f3e28b} + IpTv.MovistarPlus + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} + Services.Record.Serialization + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + + + + + {58FBCF7C-E7A9-467C-80B3-FC65E8FCCA08} + 1 + 0 + 0 + tlbimp + False + True + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs b/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs index 197e6778..a74da612 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs @@ -1,615 +1,615 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.Win32; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Tools.FirstTimeConfig.Properties; -using Project.IpTv.UiServices.Configuration; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - internal class Installation - { - private static string RedistFolder; - - public static bool Is32BitWindows - { - get; - set; - } // Is32BitWindow - - public static AppUiConfiguration LoadRegistrySettings(out InitializationResult initializationResult) - { - Is32BitWindows = WindowsBitness.Is32BitWindows(); - var result = AppUiConfiguration.LoadRegistryAppConfiguration(out initializationResult); -#if DEBUG - RedistFolder = Path.Combine(result.Folders.Base, "Bin\\Redist"); -#else - RedistFolder = Path.Combine(result.Folders.Install, "Redist"); -#endif - - return result; - } // LoadRegistrySettings - - #region IsComponentInstalled - - public static bool IsNetInstalled(out string message) - { - RegistryKey key; - object value; - int intValue; - - string[] keys = new string[] - { - "SOFTWARE", - "Microsoft", - "NET Framework Setup", - "NDP", - "v3.5" - }; - - try - { - key = Microsoft.Win32.Registry.LocalMachine; - foreach (var keyName in keys) - { - var newKey = key.OpenSubKey(keyName); - key.Close(); - key = newKey; - if (key == null) { message = Properties.Texts.IsNetInstalledNotInstalled; return false; } - } // foreach - - value = key.GetValue("Install"); - if (value == null) { message = string.Format(Properties.Texts.IsNetInstalledKeyValueNotFound, "Install"); return false; } - intValue = 0; - if ((!int.TryParse(value.ToString(), out intValue)) || (intValue < 0)) - { - message = string.Format(Properties.Texts.IsNetInstalledKeyValueLessThan, "Install", "1"); return false; - } // if - - value = key.GetValue("SP"); - if (value == null) { message = string.Format(Properties.Texts.IsNetInstalledKeyValueNotFound, "SP"); return false; } - intValue = 0; - if ((!int.TryParse(value.ToString(), out intValue)) || (intValue < 0)) - { - message = string.Format(Properties.Texts.IsNetInstalledKeyValueLessThan, "SP", "1"); return false; - } // if - - message = Properties.Texts.IsNetInstalledOk; - return true; - } - catch (Exception ex) - { - message = string.Format(Properties.Texts.IsNetInstalledException, ex.ToString()); - return false; - } // try-catch - } // IsNetInstalled - - public static bool IsEmbInstalled(out string message) - { - try - { - Version assemblyVersion, fileVersion; - - // Solve bug per work item 1757 - var found = IsAssemblyInstalled(Resources.EmbComponentAssemblyName, out assemblyVersion, out fileVersion); - - if (!found) - { - message = Properties.Texts.IsEmbInstalledNotInstalled; - return false; - } // if - - message = string.Format(Texts.IsEmbInstalledOk, fileVersion); - return true; - } - catch (Exception ex) - { - message = string.Format(Texts.IsEmbInstalledException, ex.ToString()); - return false; - } // try-catch - } // IsEmbNotInstalled - - public static bool IsSqlCeInstalled(out string message) - { - try - { - Version assemblyVersion, fileVersion; - - var found = IsAssemblyInstalled(Resources.SqlCeComponentAssemblyName, out assemblyVersion, out fileVersion); - - if (!found) - { - message = Properties.Texts.IsSqlCeInstalledNotInstalled; - return false; - } // if - - message = string.Format(Texts.IsSqlCeInstalledOk, fileVersion); - return true; - } - catch (Exception ex) - { - message = string.Format(Texts.IsSqlCeInstalledException, ex.ToString()); - return false; - } // try-catch - } // IsSqlCeInstalled - - public static bool IsVlcInstalled(out string message, ref string path) - { - try - { - // locate VLC at it's default location - if (string.IsNullOrEmpty(path)) - { - var programFiles = GetProgramFilesAnyFolder(); - path = Path.Combine(programFiles, Resources.VlcDefaultLocation); - } // if - - // file exists? - if (!File.Exists(path)) - { - message = string.Format(Texts.IsVlcInstalledNotInstalled, path); - return false; - } // if - - // check VLC.exe file version - var vlcVersion = FileVersionInfo.GetVersionInfo(path); - var vlcFileVersion = new Version(vlcVersion.FileMajorPart, vlcVersion.FileMinorPart, vlcVersion.FileBuildPart, vlcVersion.FilePrivatePart); - var expectedVersion = new Version(Resources.VlcExeTargetVersion); - if (vlcFileVersion < expectedVersion) - { - message = string.Format(Texts.IsVlcInstalledVersion, expectedVersion, vlcFileVersion); - return false; - } // if - - // locate vlclib.dll - var vlcLibPath = Path.Combine(Path.GetDirectoryName(path), Resources.VlcLibFilename); - if (!File.Exists(vlcLibPath)) - { - message = string.Format(Texts.IsVlcLibInstalledNotInstalled, vlcLibPath); - return false; - } // if - - // check VLC.exe file version - var vlcLibVersion = FileVersionInfo.GetVersionInfo(vlcLibPath); - var vlcLibFileVersion = new Version(vlcLibVersion.FileMajorPart, vlcLibVersion.FileMinorPart, vlcLibVersion.FileBuildPart, vlcLibVersion.FilePrivatePart); - var expectedVlcLibVersion = new Version(Resources.VlcLibTargetVersion); - if (vlcLibFileVersion < expectedVlcLibVersion) - { - message = string.Format(Texts.IsVlcLibInstalledVersion, expectedVlcLibVersion, vlcLibFileVersion); - return false; - } // if - - message = string.Format(Texts.IsVlcInstalledOk, vlcFileVersion, vlcLibFileVersion); - return true; - } - catch (Exception ex) - { - message = string.Format(Texts.IsVlcInstalledException, ex.ToString()); - return false; - } // try-catch - } // IsVlcInstalled - - public static bool TestVlcInstallation(out string message, string path, string testVideoPath) - { - try - { - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = path, - Arguments = (testVideoPath != null) ? string.Format("\"{0}\"", testVideoPath) : null, - UseShellExecute = false, - }; - process.Start(); - - // TODO: WaitForExit in a non-blocking manner - // process.WaitForExit(); - } // using process - } - catch (Exception ex) - { - message = string.Format(Properties.Texts.TestVlcInstallationException, ex.ToString()); - return false; - } // try-catch - - message = Properties.Texts.TestVlcInstallationOk; - return true; - } // TestVlcInstallation - - #endregion - - #region Redist setup - - public static bool CheckRedistFile(string file64bit, string file32bit) - { - var file = GetRedistFileFullPath(file64bit, file32bit); - return File.Exists(file); - } // CheckRedistFile - - public static void PromptDownloadFromVendor(Form owner, string vendor, string file64bit, string file32bit) - { - string text; - - if (Is32BitWindows) - { - text = string.Format(Properties.Texts.DownloadFromVendor32bit, vendor, file32bit); - } - else - { - text = string.Format(Properties.Texts.DownloadFromVendor64bit, vendor, file64bit); - } // if-else - - MessageBox.Show(owner, text, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); - } // PromptDownloadFromVendor - - public static bool RedistSetup(Form owner, string file64bit, string file32bit, string productName, Label labelProduct, Action setupExitCallback) - { - Exception exception; - var filename = GetRedistFileFullPath(file64bit, file32bit); - - exception = null; - try - { - var process = new Process(); - process.StartInfo = new ProcessStartInfo() - { - FileName = filename, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = (owner != null) ? owner.Handle : IntPtr.Zero, - }; - process.EnableRaisingEvents = true; - process.Exited += (o, e) => - { - var exitCode = process.ExitCode; - process.Dispose(); - - owner.BeginInvoke(new RedistSetup_ProcessExited_Delegate(RedistSetup_ProcessExited), exitCode, owner, productName, labelProduct, setupExitCallback); - }; - process.Start(); - - labelProduct.Text = string.Format(Texts.RedistSetupInstalling, productName); - - return true; - } - catch (Win32Exception ex) - { - if (ex.NativeErrorCode != 1223) // Operation cancelled by user - { - exception = ex; - } // if - } - catch (Exception ex) - { - exception = ex; - } // try-catch - - if (exception != null) - { - var message = string.Format(Properties.Texts.LaunchSetupException, filename, labelProduct.Text, exception.ToString()); - MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } // if - - return false; - } // RedistSetup - - private delegate void RedistSetup_ProcessExited_Delegate(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback); - - static void RedistSetup_ProcessExited(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback) - { - var format = (exitCode == 0) ? Texts.LaunchSetupSuccess : Texts.LaunchSetupError; - var message = string.Format(format, productName, exitCode); - MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, exitCode == 0 ? MessageBoxIcon.Information : MessageBoxIcon.Warning); - - labelProduct.Text = productName; - - setupExitCallback(exitCode == 0); - } // RedistSetup_ProcessExited - - private static string GetRedistFileFullPath(string file64bit, string file32bit) - { - var file = Is32BitWindows ? file32bit : file64bit; - file.Replace('\\', Path.DirectorySeparatorChar); - file = Path.Combine(RedistFolder, file); - - return file; - } // GetRedistFileFullPath - - #endregion - - #region Firewall installation - - public static InitializationResult RunSelfForFirewall(string binPath, string vlcPath) - { - int exitCode; - - try - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm"); - - var arguments = new StringBuilder(); - arguments.AppendFormat("/ForceUiCulture:{0}", CultureInfo.CurrentUICulture.Name); - arguments.Append(" /firewall"); - if (!string.IsNullOrEmpty(binPath)) - { - arguments.Append (" \""); - arguments.AppendFormat("/decoder:{0}", binPath); - // this trick is to avoid a nasty 'feature' of .NET (or even Windows) when parsing arguments - // The bin path ends with '\' and if followed by '"', then it will be interpreted as '"' - // ["/decoder:foo\bar\" "/vlc:C:\Program Files\foo\bar.exe"] is incorrectly interpreted as [/decoder:foo\bar" /vlc:C:\Program] and [Files\foo\bar.exe] - // WARNING: be sure to call Path.GetDirectoryName() before using the path to remove '*.exe' - arguments.Append("*.exe"); - arguments.Append("\""); - } // if - if (!string.IsNullOrEmpty(vlcPath)) - { - arguments.Append(" \""); - arguments.AppendFormat("/vlc:{0}", vlcPath); - arguments.Append("\""); - } // if - - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = Application.ExecutablePath, - Arguments = arguments.ToString(), - UseShellExecute = true, - Verb = "runas", - }; - process.Start(); - process.WaitForExit(); - exitCode = process.ExitCode; - } // using process - } - catch (Win32Exception win32) - { - if (win32.NativeErrorCode == 1223) // operation cancelled by user - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: UACancel"); - return new InitializationResult(Texts.FirewallUserCancel); - } - else - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Exception"); - return new InitializationResult(win32); - } // if-else - } - catch (Exception ex) - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Exception"); - BasicGoogleTelemetry.SendExtendedExceptionHit(ex, true, "FirewallForm: Execute", "FirewallForm"); - return new InitializationResult(ex); - } // try-catch - - if (exitCode == 0) - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Ok"); - return new InitializationResult(Texts.FirewallOk) - { - IsOk = true - }; - } - else if (exitCode > 0) - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Cancel"); - return new InitializationResult(Texts.FirewallUserCancel); - } - else - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: " + exitCode.ToString()); - return new InitializationResult((string)null); - } // if-else - } // RunSelfForFirewall - - public static bool ConfigureFirewall(string binPath, string vlcPath, out string message) - { - WindowsFirewall firewall; - - firewall = null; - try - { - firewall = new WindowsFirewall(); - - if (binPath != null) - { - binPath = Path.GetDirectoryName(binPath); - var programs = Resources.FirewallProgramList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - foreach (var program in programs) - { - var programPath = Path.Combine(binPath, program); - var fileVersionInfo = FileVersionInfo.GetVersionInfo(programPath); - var name = string.Format(Resources.FirewallRulePrefix, fileVersionInfo.OriginalFilename); - var description = string.Format(Properties.Texts.FirewallDvbIpTvRuleDescription, - fileVersionInfo.OriginalFilename, "{0}", SolutionVersion.AssemblyProduct); - - // for reasons unknown the path can not contain the '~' symbol!! - // before discovering this, the installation path was \Documents\IPTV\MovistarTV~1.0~Wolf424\bin\ - // so the WiX setup needs to be changed to remove the '~' from the path name - firewall.AllowProgram(programPath, name, description); - } // foreach program - } // if - - if (vlcPath != null) - { - firewall.AllowProgram(vlcPath, string.Format(Resources.FirewallRulePrefix, "VLC media player"), Properties.Texts.FirewallVlcRuleDescription); - } // if - } - catch (Exception ex) - { - message = ex.ToString(); - return false; - } - finally - { - if (firewall != null) firewall.Dispose(); - } // try-catch-finally - - message = null; - return true; - } // ConfigureFirewall - - #endregion - - public static string GetProgramFilesAnyFolder() - { - try - { - return Installation.GetProgramFilesx86Folder(); - } - catch - { - return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); - } // try-catch - } // GetProgramFilesAnyFolder - - public static string GetProgramFilesx86Folder() - { - var folder = KnownFolders.GetKnownFolder(KnownFolders.System.ProgramFiles_x86, KnownFolders.Flags.None); - return System.Environment.ExpandEnvironmentVariables(folder); - } // GetProgramFilesx86Folder - - public static string GetCurrentUserVideosFolder() - { - var folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Videos, KnownFolders.Flags.None); - return System.Environment.ExpandEnvironmentVariables(folder); - } // GetCurrentUserVideosFolder - - public static string GetTestMedia() - { - string folder; - int step; - - step = 1; - folder = null; - while (true) - { - try - { - switch (step) - { - case 1: folder = KnownFolders.GetKnownFolder(KnownFolders.Common.SampleVideos, KnownFolders.Flags.None); break; - case 2: folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Videos, KnownFolders.Flags.None); break; - case 3: folder = KnownFolders.GetKnownFolder(KnownFolders.Common.SampleMusic, KnownFolders.Flags.None); break; - case 4: folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Music, KnownFolders.Flags.None); break; - default: - return null; - } // switch - - var files = Directory.GetFiles(folder); - var q = from file in files - let ext = Path.GetExtension(file).ToLowerInvariant() - where ((ext == ".wmv") || (ext == ".mp4") || (ext == ".mkv") || (ext == ".avi") || - (ext == ".wma") || (ext == ".mp3") || (ext == ".aac") || (ext == ".wav")) - select file; - var media = q.FirstOrDefault(); - if (media != null) return media; - } - catch - { - // ignore - } // try-catch - step++; - } // while - } // GetTestMedia - - public static void OpenUrl(Form parent, string url) - { - try - { - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = url, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = parent.Handle, - }; - process.Start(); - } // using process - } - catch (Exception ex) - { - MessageBox.Show(parent, - string.Format(Properties.Texts.OpenUrlError, url, ex.ToString()), - parent.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } // try-catch - } // OpenUrl - - internal static string Launch(IWin32Window parent, string basePath, string programFile) - { - var filename = (programFile == null) ? basePath : Path.Combine(basePath, programFile); - - try - { - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = filename, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = (parent != null)? parent.Handle : IntPtr.Zero, - }; - process.Start(); - return null; - } // using process - } - catch (Exception ex) - { - return string.Format(Properties.Texts.LaunchProgramException, filename, ex.ToString()); - } // try-catch - } // Launch - - private static bool IsAssemblyInstalled(string assemblyName, out Version assemblyVersion, out Version fileVersion) - { - AppDomain domain; - string location; - - assemblyVersion = new Version(); - fileVersion = new Version(); - domain = null; - location = null; - - try - { - domain = AppDomain.CreateDomain("AssemblyLoadTest"); - try - { - var assembly = domain.Load(assemblyName); - assemblyVersion = assembly.GetName().Version; - location = assembly.Location; - } - catch - { - return false; - } // try-finally - - var fileVersionInfo = FileVersionInfo.GetVersionInfo(location); - fileVersion = new Version(fileVersionInfo.FileMajorPart, fileVersionInfo.FileMinorPart, fileVersionInfo.FileBuildPart, fileVersionInfo.FilePrivatePart); - - return true; - } - finally - { - if (domain != null) - { - AppDomain.Unload(domain); - } // if - } // try-catch - } // IsAssemblyInstalled - } // class Installation -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Microsoft.Win32; +using IpTviewr.Common.Telemetry; +using IpTviewr.Tools.FirstTimeConfig.Properties; +using IpTviewr.UiServices.Configuration; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + internal class Installation + { + private static string RedistFolder; + + public static bool Is32BitWindows + { + get; + set; + } // Is32BitWindow + + public static AppUiConfiguration LoadRegistrySettings(out InitializationResult initializationResult) + { + Is32BitWindows = WindowsBitness.Is32BitWindows(); + var result = AppUiConfiguration.LoadRegistryAppConfiguration(out initializationResult); +#if DEBUG + RedistFolder = Path.Combine(result.Folders.Base, "Bin\\Redist"); +#else + RedistFolder = Path.Combine(result.Folders.Install, "Redist"); +#endif + + return result; + } // LoadRegistrySettings + + #region IsComponentInstalled + + public static bool IsNetInstalled(out string message) + { + RegistryKey key; + object value; + int intValue; + + string[] keys = new string[] + { + "SOFTWARE", + "Microsoft", + "NET Framework Setup", + "NDP", + "v3.5" + }; + + try + { + key = Microsoft.Win32.Registry.LocalMachine; + foreach (var keyName in keys) + { + var newKey = key.OpenSubKey(keyName); + key.Close(); + key = newKey; + if (key == null) { message = Properties.Texts.IsNetInstalledNotInstalled; return false; } + } // foreach + + value = key.GetValue("Install"); + if (value == null) { message = string.Format(Properties.Texts.IsNetInstalledKeyValueNotFound, "Install"); return false; } + intValue = 0; + if ((!int.TryParse(value.ToString(), out intValue)) || (intValue < 0)) + { + message = string.Format(Properties.Texts.IsNetInstalledKeyValueLessThan, "Install", "1"); return false; + } // if + + value = key.GetValue("SP"); + if (value == null) { message = string.Format(Properties.Texts.IsNetInstalledKeyValueNotFound, "SP"); return false; } + intValue = 0; + if ((!int.TryParse(value.ToString(), out intValue)) || (intValue < 0)) + { + message = string.Format(Properties.Texts.IsNetInstalledKeyValueLessThan, "SP", "1"); return false; + } // if + + message = Properties.Texts.IsNetInstalledOk; + return true; + } + catch (Exception ex) + { + message = string.Format(Properties.Texts.IsNetInstalledException, ex.ToString()); + return false; + } // try-catch + } // IsNetInstalled + + public static bool IsEmbInstalled(out string message) + { + try + { + Version assemblyVersion, fileVersion; + + // Solve bug per work item 1757 + var found = IsAssemblyInstalled(Resources.EmbComponentAssemblyName, out assemblyVersion, out fileVersion); + + if (!found) + { + message = Properties.Texts.IsEmbInstalledNotInstalled; + return false; + } // if + + message = string.Format(Texts.IsEmbInstalledOk, fileVersion); + return true; + } + catch (Exception ex) + { + message = string.Format(Texts.IsEmbInstalledException, ex.ToString()); + return false; + } // try-catch + } // IsEmbNotInstalled + + public static bool IsSqlCeInstalled(out string message) + { + try + { + Version assemblyVersion, fileVersion; + + var found = IsAssemblyInstalled(Resources.SqlCeComponentAssemblyName, out assemblyVersion, out fileVersion); + + if (!found) + { + message = Properties.Texts.IsSqlCeInstalledNotInstalled; + return false; + } // if + + message = string.Format(Texts.IsSqlCeInstalledOk, fileVersion); + return true; + } + catch (Exception ex) + { + message = string.Format(Texts.IsSqlCeInstalledException, ex.ToString()); + return false; + } // try-catch + } // IsSqlCeInstalled + + public static bool IsVlcInstalled(out string message, ref string path) + { + try + { + // locate VLC at it's default location + if (string.IsNullOrEmpty(path)) + { + var programFiles = GetProgramFilesAnyFolder(); + path = Path.Combine(programFiles, Resources.VlcDefaultLocation); + } // if + + // file exists? + if (!File.Exists(path)) + { + message = string.Format(Texts.IsVlcInstalledNotInstalled, path); + return false; + } // if + + // check VLC.exe file version + var vlcVersion = FileVersionInfo.GetVersionInfo(path); + var vlcFileVersion = new Version(vlcVersion.FileMajorPart, vlcVersion.FileMinorPart, vlcVersion.FileBuildPart, vlcVersion.FilePrivatePart); + var expectedVersion = new Version(Resources.VlcExeTargetVersion); + if (vlcFileVersion < expectedVersion) + { + message = string.Format(Texts.IsVlcInstalledVersion, expectedVersion, vlcFileVersion); + return false; + } // if + + // locate vlclib.dll + var vlcLibPath = Path.Combine(Path.GetDirectoryName(path), Resources.VlcLibFilename); + if (!File.Exists(vlcLibPath)) + { + message = string.Format(Texts.IsVlcLibInstalledNotInstalled, vlcLibPath); + return false; + } // if + + // check VLC.exe file version + var vlcLibVersion = FileVersionInfo.GetVersionInfo(vlcLibPath); + var vlcLibFileVersion = new Version(vlcLibVersion.FileMajorPart, vlcLibVersion.FileMinorPart, vlcLibVersion.FileBuildPart, vlcLibVersion.FilePrivatePart); + var expectedVlcLibVersion = new Version(Resources.VlcLibTargetVersion); + if (vlcLibFileVersion < expectedVlcLibVersion) + { + message = string.Format(Texts.IsVlcLibInstalledVersion, expectedVlcLibVersion, vlcLibFileVersion); + return false; + } // if + + message = string.Format(Texts.IsVlcInstalledOk, vlcFileVersion, vlcLibFileVersion); + return true; + } + catch (Exception ex) + { + message = string.Format(Texts.IsVlcInstalledException, ex.ToString()); + return false; + } // try-catch + } // IsVlcInstalled + + public static bool TestVlcInstallation(out string message, string path, string testVideoPath) + { + try + { + using (var process = new Process()) + { + process.StartInfo = new ProcessStartInfo() + { + FileName = path, + Arguments = (testVideoPath != null) ? string.Format("\"{0}\"", testVideoPath) : null, + UseShellExecute = false, + }; + process.Start(); + + // TODO: WaitForExit in a non-blocking manner + // process.WaitForExit(); + } // using process + } + catch (Exception ex) + { + message = string.Format(Properties.Texts.TestVlcInstallationException, ex.ToString()); + return false; + } // try-catch + + message = Properties.Texts.TestVlcInstallationOk; + return true; + } // TestVlcInstallation + + #endregion + + #region Redist setup + + public static bool CheckRedistFile(string file64bit, string file32bit) + { + var file = GetRedistFileFullPath(file64bit, file32bit); + return File.Exists(file); + } // CheckRedistFile + + public static void PromptDownloadFromVendor(Form owner, string vendor, string file64bit, string file32bit) + { + string text; + + if (Is32BitWindows) + { + text = string.Format(Properties.Texts.DownloadFromVendor32bit, vendor, file32bit); + } + else + { + text = string.Format(Properties.Texts.DownloadFromVendor64bit, vendor, file64bit); + } // if-else + + MessageBox.Show(owner, text, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } // PromptDownloadFromVendor + + public static bool RedistSetup(Form owner, string file64bit, string file32bit, string productName, Label labelProduct, Action setupExitCallback) + { + Exception exception; + var filename = GetRedistFileFullPath(file64bit, file32bit); + + exception = null; + try + { + var process = new Process(); + process.StartInfo = new ProcessStartInfo() + { + FileName = filename, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = (owner != null) ? owner.Handle : IntPtr.Zero, + }; + process.EnableRaisingEvents = true; + process.Exited += (o, e) => + { + var exitCode = process.ExitCode; + process.Dispose(); + + owner.BeginInvoke(new RedistSetup_ProcessExited_Delegate(RedistSetup_ProcessExited), exitCode, owner, productName, labelProduct, setupExitCallback); + }; + process.Start(); + + labelProduct.Text = string.Format(Texts.RedistSetupInstalling, productName); + + return true; + } + catch (Win32Exception ex) + { + if (ex.NativeErrorCode != 1223) // Operation cancelled by user + { + exception = ex; + } // if + } + catch (Exception ex) + { + exception = ex; + } // try-catch + + if (exception != null) + { + var message = string.Format(Properties.Texts.LaunchSetupException, filename, labelProduct.Text, exception.ToString()); + MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); + } // if + + return false; + } // RedistSetup + + private delegate void RedistSetup_ProcessExited_Delegate(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback); + + static void RedistSetup_ProcessExited(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback) + { + var format = (exitCode == 0) ? Texts.LaunchSetupSuccess : Texts.LaunchSetupError; + var message = string.Format(format, productName, exitCode); + MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, exitCode == 0 ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + + labelProduct.Text = productName; + + setupExitCallback(exitCode == 0); + } // RedistSetup_ProcessExited + + private static string GetRedistFileFullPath(string file64bit, string file32bit) + { + var file = Is32BitWindows ? file32bit : file64bit; + file.Replace('\\', Path.DirectorySeparatorChar); + file = Path.Combine(RedistFolder, file); + + return file; + } // GetRedistFileFullPath + + #endregion + + #region Firewall installation + + public static InitializationResult RunSelfForFirewall(string binPath, string vlcPath) + { + int exitCode; + + try + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm"); + + var arguments = new StringBuilder(); + arguments.AppendFormat("/ForceUiCulture:{0}", CultureInfo.CurrentUICulture.Name); + arguments.Append(" /firewall"); + if (!string.IsNullOrEmpty(binPath)) + { + arguments.Append (" \""); + arguments.AppendFormat("/decoder:{0}", binPath); + // this trick is to avoid a nasty 'feature' of .NET (or even Windows) when parsing arguments + // The bin path ends with '\' and if followed by '"', then it will be interpreted as '"' + // ["/decoder:foo\bar\" "/vlc:C:\Program Files\foo\bar.exe"] is incorrectly interpreted as [/decoder:foo\bar" /vlc:C:\Program] and [Files\foo\bar.exe] + // WARNING: be sure to call Path.GetDirectoryName() before using the path to remove '*.exe' + arguments.Append("*.exe"); + arguments.Append("\""); + } // if + if (!string.IsNullOrEmpty(vlcPath)) + { + arguments.Append(" \""); + arguments.AppendFormat("/vlc:{0}", vlcPath); + arguments.Append("\""); + } // if + + using (var process = new Process()) + { + process.StartInfo = new ProcessStartInfo() + { + FileName = Application.ExecutablePath, + Arguments = arguments.ToString(), + UseShellExecute = true, + Verb = "runas", + }; + process.Start(); + process.WaitForExit(); + exitCode = process.ExitCode; + } // using process + } + catch (Win32Exception win32) + { + if (win32.NativeErrorCode == 1223) // operation cancelled by user + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm: UACancel"); + return new InitializationResult(Texts.FirewallUserCancel); + } + else + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm: Exception"); + return new InitializationResult(win32); + } // if-else + } + catch (Exception ex) + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm: Exception"); + BasicGoogleTelemetry.SendExtendedExceptionHit(ex, true, "FirewallForm: Execute", "FirewallForm"); + return new InitializationResult(ex); + } // try-catch + + if (exitCode == 0) + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm: Ok"); + return new InitializationResult(Texts.FirewallOk) + { + IsOk = true + }; + } + else if (exitCode > 0) + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm: Cancel"); + return new InitializationResult(Texts.FirewallUserCancel); + } + else + { + BasicGoogleTelemetry.SendScreenHit("FirewallForm: " + exitCode.ToString()); + return new InitializationResult((string)null); + } // if-else + } // RunSelfForFirewall + + public static bool ConfigureFirewall(string binPath, string vlcPath, out string message) + { + WindowsFirewall firewall; + + firewall = null; + try + { + firewall = new WindowsFirewall(); + + if (binPath != null) + { + binPath = Path.GetDirectoryName(binPath); + var programs = Resources.FirewallProgramList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var program in programs) + { + var programPath = Path.Combine(binPath, program); + var fileVersionInfo = FileVersionInfo.GetVersionInfo(programPath); + var name = string.Format(Resources.FirewallRulePrefix, fileVersionInfo.OriginalFilename); + var description = string.Format(Properties.Texts.FirewallDvbIpTvRuleDescription, + fileVersionInfo.OriginalFilename, "{0}", SolutionVersion.AssemblyProduct); + + // for reasons unknown the path can not contain the '~' symbol!! + // before discovering this, the installation path was \Documents\IPTV\MovistarTV~1.0~Wolf424\bin\ + // so the WiX setup needs to be changed to remove the '~' from the path name + firewall.AllowProgram(programPath, name, description); + } // foreach program + } // if + + if (vlcPath != null) + { + firewall.AllowProgram(vlcPath, string.Format(Resources.FirewallRulePrefix, "VLC media player"), Properties.Texts.FirewallVlcRuleDescription); + } // if + } + catch (Exception ex) + { + message = ex.ToString(); + return false; + } + finally + { + if (firewall != null) firewall.Dispose(); + } // try-catch-finally + + message = null; + return true; + } // ConfigureFirewall + + #endregion + + public static string GetProgramFilesAnyFolder() + { + try + { + return Installation.GetProgramFilesx86Folder(); + } + catch + { + return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); + } // try-catch + } // GetProgramFilesAnyFolder + + public static string GetProgramFilesx86Folder() + { + var folder = KnownFolders.GetKnownFolder(KnownFolders.System.ProgramFiles_x86, KnownFolders.Flags.None); + return System.Environment.ExpandEnvironmentVariables(folder); + } // GetProgramFilesx86Folder + + public static string GetCurrentUserVideosFolder() + { + var folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Videos, KnownFolders.Flags.None); + return System.Environment.ExpandEnvironmentVariables(folder); + } // GetCurrentUserVideosFolder + + public static string GetTestMedia() + { + string folder; + int step; + + step = 1; + folder = null; + while (true) + { + try + { + switch (step) + { + case 1: folder = KnownFolders.GetKnownFolder(KnownFolders.Common.SampleVideos, KnownFolders.Flags.None); break; + case 2: folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Videos, KnownFolders.Flags.None); break; + case 3: folder = KnownFolders.GetKnownFolder(KnownFolders.Common.SampleMusic, KnownFolders.Flags.None); break; + case 4: folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Music, KnownFolders.Flags.None); break; + default: + return null; + } // switch + + var files = Directory.GetFiles(folder); + var q = from file in files + let ext = Path.GetExtension(file).ToLowerInvariant() + where ((ext == ".wmv") || (ext == ".mp4") || (ext == ".mkv") || (ext == ".avi") || + (ext == ".wma") || (ext == ".mp3") || (ext == ".aac") || (ext == ".wav")) + select file; + var media = q.FirstOrDefault(); + if (media != null) return media; + } + catch + { + // ignore + } // try-catch + step++; + } // while + } // GetTestMedia + + public static void OpenUrl(Form parent, string url) + { + try + { + using (var process = new Process()) + { + process.StartInfo = new ProcessStartInfo() + { + FileName = url, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = parent.Handle, + }; + process.Start(); + } // using process + } + catch (Exception ex) + { + MessageBox.Show(parent, + string.Format(Properties.Texts.OpenUrlError, url, ex.ToString()), + parent.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); + } // try-catch + } // OpenUrl + + internal static string Launch(IWin32Window parent, string basePath, string programFile) + { + var filename = (programFile == null) ? basePath : Path.Combine(basePath, programFile); + + try + { + using (var process = new Process()) + { + process.StartInfo = new ProcessStartInfo() + { + FileName = filename, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = (parent != null)? parent.Handle : IntPtr.Zero, + }; + process.Start(); + return null; + } // using process + } + catch (Exception ex) + { + return string.Format(Properties.Texts.LaunchProgramException, filename, ex.ToString()); + } // try-catch + } // Launch + + private static bool IsAssemblyInstalled(string assemblyName, out Version assemblyVersion, out Version fileVersion) + { + AppDomain domain; + string location; + + assemblyVersion = new Version(); + fileVersion = new Version(); + domain = null; + location = null; + + try + { + domain = AppDomain.CreateDomain("AssemblyLoadTest"); + try + { + var assembly = domain.Load(assemblyName); + assemblyVersion = assembly.GetName().Version; + location = assembly.Location; + } + catch + { + return false; + } // try-finally + + var fileVersionInfo = FileVersionInfo.GetVersionInfo(location); + fileVersion = new Version(fileVersionInfo.FileMajorPart, fileVersionInfo.FileMinorPart, fileVersionInfo.FileBuildPart, fileVersionInfo.FilePrivatePart); + + return true; + } + finally + { + if (domain != null) + { + AppDomain.Unload(domain); + } // if + } // try-catch + } // IsAssemblyInstalled + } // class Installation +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs b/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs index ab275b4d..1f613016 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs @@ -1,108 +1,108 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security.Permissions; -using System.Text; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - public class KnownFolders - { - internal class UnsafeNativeMethods - { - [DllImport("shell32.dll")] - public static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, - uint dwFlags, IntPtr hToken, out IntPtr pszPath); - } // class UnsafeNativeMethods - - public class CurrentUser - { - public const string Music = "4BD8D571-6D19-48D3-BE97-422220080E43"; - public const string Videos = "18989B1D-99B5-455B-841C-AB7C74E4DDFC"; - // work in progress - } // class CurrentUser - - public class Common - { - public const string SampleMusic = "B250C668-F57D-4EE1-A63C-290EE7D1AA1F"; - public const string SampleVideos = "859EAD94-2E85-48AD-A71A-0969CB56A6CD"; - // work in progress - } // class Common - - public class System - { - public const string ProgramFiles = "905e63b6-c1bf-494e-b29c-65b732d3d21a"; - public const string ProgramFiles_x86 = "7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E"; - /// This value is not supported on 32-bit operating systems. It also is not supported for 32-bit applications running on 64-bit operating systems. Attempting to use ProgramFiles_x64 in either situation results in an error. - public const string ProgramFiles_x64 = "6D809377-6AF0-444b-8957-A3773F02200E"; - // work in progress - } // class System - - public class Virtual - { - // work in progress - } // class Virtual - - [Flags] - public enum Flags: uint - { - /// No special retrieval options. - None = 0, - - /// Build a simple IDList (PIDL) This value can be used when you want to retrieve the file system path but do not specify this value if you are retrieving the localized display name of the folder because it might not resolve correctly. - SimpleIdList = 0x00000100, - - /// Gets the folder's default path independent of the current location of its parent. 'DefaultPath' flag must also be set. - NotParentRelative = 0x00000200, - - /// Gets the default path for a known folder. If this flag is not set, the function retrieves the current—and possibly redirected—path of the folder. The execution of this flag includes a verification of the folder's existence unless 'DoNotVerify' flag is set. - DefaultPath = 0x00000400, - - /// Initializes the folder using its Desktop.ini settings. If the folder cannot be initialized, the function returns a failure code and no path is returned. This flag should always be combined with 'Create' flag. - /// If the folder is located on a network, the function might take a longer time to execute. - Init = 0x00000800, - - /// Gets the true system path for the folder, free of any aliased placeholders such as %USERPROFILE%, returned by SHGetKnownFolderIDList and IKnownFolder::GetIDList. This flag has no effect on paths returned by SHGetKnownFolderPath and IKnownFolder::GetPath. By default, known folder retrieval functions and methods return the aliased path if an alias exists. - NoAlias = 0x00001000, - - /// Stores the full path in the registry without using environment strings. If this flag is not set, portions of the path may be represented by environment strings such as %USERPROFILE%. This flag can only be used with SHSetKnownFolderPath and IKnownFolder::SetPath. - DoNotUnexpand = 0x00002000, - - /// Do not verify the folder's existence before attempting to retrieve the path or IDList. - DoNotVerify = 0x00004000, - - /// Forces the creation of the specified folder if that folder does not already exist. The security provisions predefined for that folder are applied. If the folder does not exist and cannot be created, the function returns a failure code and no path is returned. - /// This value can be used only with the following functions and methods: SHGetKnownFolderPath, SHGetKnownFolderIDList, IKnownFolder::GetIDList, IKnownFolder::GetPath and IKnownFolder::GetShellItem - Create = 0x00008000, - - /// When running inside an app container, or when providing an app container token, this flag prevents redirection to app container folders. Instead, it retrieves the path that would be returned where it not running inside an app container. (Introduced in Windows 7.) - NoAppContainerRedirection = 0x00010000, - - /// Return only aliased PIDLs. Do not use the file system path.(Introduced in Windows 7.) - AliasOnly = 0x80000000 - } // Flags - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - public static string GetKnownFolder(string knownFolderGuid, Flags flags) - { - IntPtr pszPath; - - var guid = new Guid(knownFolderGuid); - var hResult = UnsafeNativeMethods.SHGetKnownFolderPath(guid, (uint)flags, IntPtr.Zero, out pszPath); - if (hResult != 0) - { - throw Marshal.GetExceptionForHR(hResult); - } // if - - var path = Marshal.PtrToStringUni(pszPath); - Marshal.FreeCoTaskMem(pszPath); - pszPath = IntPtr.Zero; - - return path; - } // GetKnownFolder - } // class KnownFolders -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Text; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + public class KnownFolders + { + internal class UnsafeNativeMethods + { + [DllImport("shell32.dll")] + public static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, + uint dwFlags, IntPtr hToken, out IntPtr pszPath); + } // class UnsafeNativeMethods + + public class CurrentUser + { + public const string Music = "4BD8D571-6D19-48D3-BE97-422220080E43"; + public const string Videos = "18989B1D-99B5-455B-841C-AB7C74E4DDFC"; + // work in progress + } // class CurrentUser + + public class Common + { + public const string SampleMusic = "B250C668-F57D-4EE1-A63C-290EE7D1AA1F"; + public const string SampleVideos = "859EAD94-2E85-48AD-A71A-0969CB56A6CD"; + // work in progress + } // class Common + + public class System + { + public const string ProgramFiles = "905e63b6-c1bf-494e-b29c-65b732d3d21a"; + public const string ProgramFiles_x86 = "7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E"; + /// This value is not supported on 32-bit operating systems. It also is not supported for 32-bit applications running on 64-bit operating systems. Attempting to use ProgramFiles_x64 in either situation results in an error. + public const string ProgramFiles_x64 = "6D809377-6AF0-444b-8957-A3773F02200E"; + // work in progress + } // class System + + public class Virtual + { + // work in progress + } // class Virtual + + [Flags] + public enum Flags: uint + { + /// No special retrieval options. + None = 0, + + /// Build a simple IDList (PIDL) This value can be used when you want to retrieve the file system path but do not specify this value if you are retrieving the localized display name of the folder because it might not resolve correctly. + SimpleIdList = 0x00000100, + + /// Gets the folder's default path independent of the current location of its parent. 'DefaultPath' flag must also be set. + NotParentRelative = 0x00000200, + + /// Gets the default path for a known folder. If this flag is not set, the function retrieves the current—and possibly redirected—path of the folder. The execution of this flag includes a verification of the folder's existence unless 'DoNotVerify' flag is set. + DefaultPath = 0x00000400, + + /// Initializes the folder using its Desktop.ini settings. If the folder cannot be initialized, the function returns a failure code and no path is returned. This flag should always be combined with 'Create' flag. + /// If the folder is located on a network, the function might take a longer time to execute. + Init = 0x00000800, + + /// Gets the true system path for the folder, free of any aliased placeholders such as %USERPROFILE%, returned by SHGetKnownFolderIDList and IKnownFolder::GetIDList. This flag has no effect on paths returned by SHGetKnownFolderPath and IKnownFolder::GetPath. By default, known folder retrieval functions and methods return the aliased path if an alias exists. + NoAlias = 0x00001000, + + /// Stores the full path in the registry without using environment strings. If this flag is not set, portions of the path may be represented by environment strings such as %USERPROFILE%. This flag can only be used with SHSetKnownFolderPath and IKnownFolder::SetPath. + DoNotUnexpand = 0x00002000, + + /// Do not verify the folder's existence before attempting to retrieve the path or IDList. + DoNotVerify = 0x00004000, + + /// Forces the creation of the specified folder if that folder does not already exist. The security provisions predefined for that folder are applied. If the folder does not exist and cannot be created, the function returns a failure code and no path is returned. + /// This value can be used only with the following functions and methods: SHGetKnownFolderPath, SHGetKnownFolderIDList, IKnownFolder::GetIDList, IKnownFolder::GetPath and IKnownFolder::GetShellItem + Create = 0x00008000, + + /// When running inside an app container, or when providing an app container token, this flag prevents redirection to app container folders. Instead, it retrieves the path that would be returned where it not running inside an app container. (Introduced in Windows 7.) + NoAppContainerRedirection = 0x00010000, + + /// Return only aliased PIDLs. Do not use the file system path.(Introduced in Windows 7.) + AliasOnly = 0x80000000 + } // Flags + + [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] + public static string GetKnownFolder(string knownFolderGuid, Flags flags) + { + IntPtr pszPath; + + var guid = new Guid(knownFolderGuid); + var hResult = UnsafeNativeMethods.SHGetKnownFolderPath(guid, (uint)flags, IntPtr.Zero, out pszPath); + if (hResult != 0) + { + throw Marshal.GetExceptionForHR(hResult); + } // if + + var path = Marshal.PtrToStringUni(pszPath); + Marshal.FreeCoTaskMem(pszPath); + pszPath = IntPtr.Zero; + + return path; + } // GetKnownFolder + } // class KnownFolders +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Program.cs b/1.5 'Kruger 60'/FirstTimeConfig/Program.cs index 11fb93c3..52fa52e3 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Program.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Program.cs @@ -1,184 +1,184 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Configuration; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - static class Program - { - private const string ForceUiCultureArgument = "/forceuiculture:"; - private const string FirewallArgument = "/firewall"; - private const string FirewallDecoderArgument = "/decoder:"; - private const string FirewallVlcArgument = "/vlc:"; - - internal static bool RunFirewallConfiguration; - internal static string FirewallBinPath; - internal static string FirewallVlcPath; - internal static AppUiConfiguration AppUiConfig; - - private static DialogResult WizardEndResult; - private static string WizardEndText; - private static Exception WizardEndException; - - /// - /// The main entry point for the application. - /// - [STAThread] - static int Main(string[] arguments) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - ProcessArguments(arguments); - - if (!RunFirewallConfiguration) - { - var result = LaunchWizard(); - BasicGoogleTelemetry.EnsureHitsSents(); - - return result; - } - else - { - using (var dlg = new FirewallForm()) - { - dlg.ShowDialog(); - return (dlg.DialogResult == DialogResult.OK) ? 0 : (dlg.DialogResult == DialogResult.Cancel) ? 1 : -1; - } // using dlg - } // if-else - } // Main - - internal static void SetWizardResult(DialogResult endResult) - { - SetWizardResult(endResult, null, null); - } // SetWizardResult - - internal static void SetWizardResult(DialogResult endResult, string message, Exception ex) - { - WizardEndResult = endResult; - WizardEndText = message; - WizardEndException = ex; - } // SetWizardResult - - static int LaunchWizard() - { - InitializationResult initResult; - bool launchMainProgram = false; - int result = 0; - - WizardEndResult = DialogResult.Abort; - - AppUiConfig = Installation.LoadRegistrySettings(out initResult); - if (AppUiConfig == null) - { - Program.SetWizardResult(DialogResult.Abort, string.Format("{0}\r\n{1}", initResult.Caption, initResult.Message), initResult.InnerException); - goto End; - } // if - BasicGoogleTelemetry.Init(Properties.Resources.AnalyticsGoogleTrackingId, AppUiConfig.AnalyticsClientId, true, true, true); - - using (var dlg = new WizardWelcomeDialog()) - { - switch (dlg.ShowDialog()) - { - case DialogResult.Cancel: - Program.SetWizardResult(DialogResult.Cancel); - goto End; - } // switch - } // using - - using (var dlg = new ConfigForm()) - { - dlg.ShowDialog(); - } // using dlg - - End: - using (var dlg = new WizardEndDialog()) - { - dlg.EndResult = WizardEndResult; - dlg.ErrorMessage = WizardEndText; - dlg.ErrorException = WizardEndException; - dlg.ShowDialog(); - - launchMainProgram = dlg.checkRunMainProgram.Checked; - result = (WizardEndResult == DialogResult.OK) ? 0 : -1; - } // using - - if (launchMainProgram) - { - var message = Installation.Launch(null, AppUiConfig.Folders.Install, Properties.Resources.SuccessExecuteProgram); - if (message != null) - { - MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } // if - } // if - - return result; - } // LaunchWizard - - static void ProcessArguments(string[] arguments) - { - if ((arguments == null) || (arguments.Length == 0)) return; - - var culture = (string)null; - foreach (var argument in arguments) - { - var argumentLower = argument.ToLowerInvariant(); - - if (argumentLower.StartsWith(ForceUiCultureArgument)) - { - culture = argument.Substring(ForceUiCultureArgument.Length); - continue; - } // if - - if (argumentLower.StartsWith(FirewallArgument)) - { - RunFirewallConfiguration = true; - continue; - } // if - - if (argumentLower.StartsWith(FirewallDecoderArgument)) - { - FirewallBinPath = argument.Substring(FirewallDecoderArgument.Length); - continue; - } // if - - if (argumentLower.StartsWith(FirewallVlcArgument)) - { - FirewallVlcPath = argument.Substring(FirewallVlcArgument.Length); - continue; - } // if - } // foreach - - if (culture != null) - { - ForceUiCulture(culture); - } // if - } // ProcessArguments - - static void ForceUiCulture(string culture) - { - if (culture == null) return; - culture = culture.Trim(); - if (culture == string.Empty) return; - - try - { - Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); - } - catch - { - MessageBox.Show(Properties.Texts.ExceptionForceUiCulture, - Path.GetFileName(Application.ExecutablePath), - MessageBoxButtons.OK, MessageBoxIcon.Error); - } // try-catch - } // ForceUiCulture - } // class Program -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Configuration; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + static class Program + { + private const string ForceUiCultureArgument = "/forceuiculture:"; + private const string FirewallArgument = "/firewall"; + private const string FirewallDecoderArgument = "/decoder:"; + private const string FirewallVlcArgument = "/vlc:"; + + internal static bool RunFirewallConfiguration; + internal static string FirewallBinPath; + internal static string FirewallVlcPath; + internal static AppUiConfiguration AppUiConfig; + + private static DialogResult WizardEndResult; + private static string WizardEndText; + private static Exception WizardEndException; + + /// + /// The main entry point for the application. + /// + [STAThread] + static int Main(string[] arguments) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + ProcessArguments(arguments); + + if (!RunFirewallConfiguration) + { + var result = LaunchWizard(); + BasicGoogleTelemetry.EnsureHitsSents(); + + return result; + } + else + { + using (var dlg = new FirewallForm()) + { + dlg.ShowDialog(); + return (dlg.DialogResult == DialogResult.OK) ? 0 : (dlg.DialogResult == DialogResult.Cancel) ? 1 : -1; + } // using dlg + } // if-else + } // Main + + internal static void SetWizardResult(DialogResult endResult) + { + SetWizardResult(endResult, null, null); + } // SetWizardResult + + internal static void SetWizardResult(DialogResult endResult, string message, Exception ex) + { + WizardEndResult = endResult; + WizardEndText = message; + WizardEndException = ex; + } // SetWizardResult + + static int LaunchWizard() + { + InitializationResult initResult; + bool launchMainProgram = false; + int result = 0; + + WizardEndResult = DialogResult.Abort; + + AppUiConfig = Installation.LoadRegistrySettings(out initResult); + if (AppUiConfig == null) + { + Program.SetWizardResult(DialogResult.Abort, string.Format("{0}\r\n{1}", initResult.Caption, initResult.Message), initResult.InnerException); + goto End; + } // if + BasicGoogleTelemetry.Init(Properties.Resources.AnalyticsGoogleTrackingId, AppUiConfig.AnalyticsClientId, true, true, true); + + using (var dlg = new WizardWelcomeDialog()) + { + switch (dlg.ShowDialog()) + { + case DialogResult.Cancel: + Program.SetWizardResult(DialogResult.Cancel); + goto End; + } // switch + } // using + + using (var dlg = new ConfigForm()) + { + dlg.ShowDialog(); + } // using dlg + + End: + using (var dlg = new WizardEndDialog()) + { + dlg.EndResult = WizardEndResult; + dlg.ErrorMessage = WizardEndText; + dlg.ErrorException = WizardEndException; + dlg.ShowDialog(); + + launchMainProgram = dlg.checkRunMainProgram.Checked; + result = (WizardEndResult == DialogResult.OK) ? 0 : -1; + } // using + + if (launchMainProgram) + { + var message = Installation.Launch(null, AppUiConfig.Folders.Install, Properties.Resources.SuccessExecuteProgram); + if (message != null) + { + MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Stop); + } // if + } // if + + return result; + } // LaunchWizard + + static void ProcessArguments(string[] arguments) + { + if ((arguments == null) || (arguments.Length == 0)) return; + + var culture = (string)null; + foreach (var argument in arguments) + { + var argumentLower = argument.ToLowerInvariant(); + + if (argumentLower.StartsWith(ForceUiCultureArgument)) + { + culture = argument.Substring(ForceUiCultureArgument.Length); + continue; + } // if + + if (argumentLower.StartsWith(FirewallArgument)) + { + RunFirewallConfiguration = true; + continue; + } // if + + if (argumentLower.StartsWith(FirewallDecoderArgument)) + { + FirewallBinPath = argument.Substring(FirewallDecoderArgument.Length); + continue; + } // if + + if (argumentLower.StartsWith(FirewallVlcArgument)) + { + FirewallVlcPath = argument.Substring(FirewallVlcArgument.Length); + continue; + } // if + } // foreach + + if (culture != null) + { + ForceUiCulture(culture); + } // if + } // ProcessArguments + + static void ForceUiCulture(string culture) + { + if (culture == null) return; + culture = culture.Trim(); + if (culture == string.Empty) return; + + try + { + Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); + } + catch + { + MessageBox.Show(Properties.Texts.ExceptionForceUiCulture, + Path.GetFileName(Application.ExecutablePath), + MessageBoxButtons.OK, MessageBoxIcon.Error); + } // try-catch + } // ForceUiCulture + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs index 19285be1..df8f2891 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.Tools.FirstTimeConfig.Properties { +namespace IpTviewr.Tools.FirstTimeConfig.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Tools.FirstTimeConfig.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Tools.FirstTimeConfig.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs index 8c48dfc7..c36071d9 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Tools.FirstTimeConfig.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Tools.FirstTimeConfig.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs index 479ee10b..a60ecf02 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.Tools.FirstTimeConfig.Properties { +namespace IpTviewr.Tools.FirstTimeConfig.Properties { using System; @@ -39,7 +39,7 @@ internal Texts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Tools.FirstTimeConfig.Properties.Texts", typeof(Texts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Tools.FirstTimeConfig.Properties.Texts", typeof(Texts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs b/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs index 93c3e9f7..d6c2277f 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs @@ -1,158 +1,158 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using NetFwTypeLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - internal class WindowsFirewall : IDisposable - { - private bool Disposed; - private INetFwPolicy2 FirewallPolicy; - private Type NetFwRuleType; - private bool SupportsIFwRule2; - - public WindowsFirewall() - { - var fwPolicy2Type = Type.GetTypeFromCLSID(new Guid("E2B3C97F-6AE1-41AC-817A-F6F92166D7DD")); - FirewallPolicy = (INetFwPolicy2)Activator.CreateInstance(fwPolicy2Type); - - NetFwRuleType = Type.GetTypeFromCLSID(new Guid("2C5BC43E-3369-4C33-AB0C-BE9469677AF4")); - - object rule = null; - INetFwRule2 rule2 = null; - try - { - rule = Activator.CreateInstance(NetFwRuleType); - rule2 = rule as INetFwRule2; - if (rule2 != null) - { - SupportsIFwRule2 = true; - } // if - } - finally - { - if (rule != null) Marshal.FinalReleaseComObject(rule); - if (rule2 != null) Marshal.FinalReleaseComObject(rule2); - } // try-finally - } // constructor - - ~WindowsFirewall() - { - Dispose(false); - } // destructor - - public void AllowProgram(string path, string name, string description) - { - if (SupportsIFwRule2) - { - AllowProgramWin7plus(path, name, description); - } - else - { - AllowProgramWinVista(path, name, description); - } // if-else - } // AllowProgram - - public void Dispose() - { - if (Disposed) return; - Dispose(true); - GC.SuppressFinalize(this); - } // Dispose - - private void Dispose(bool disposing) - { - Marshal.FinalReleaseComObject(FirewallPolicy); - - Disposed = true; - } // Dispose - - private void AllowProgramWinVista(string path, string name, string description) - { - INetFwRule fwRuleTcp, fwRuleUdp; - INetFwRules fwRules; - - fwRuleTcp = null; - fwRuleUdp = null; - fwRules = null; - try - { - fwRuleTcp = (INetFwRule)Activator.CreateInstance(NetFwRuleType); - fwRuleTcp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; - fwRuleTcp.ApplicationName = path; - fwRuleTcp.Description = string.Format(description, "TCP"); - fwRuleTcp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; - fwRuleTcp.Enabled = true; - fwRuleTcp.Name = name; - fwRuleTcp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; - - fwRuleUdp = (INetFwRule)Activator.CreateInstance(NetFwRuleType); - fwRuleUdp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; - fwRuleUdp.ApplicationName = path; - fwRuleUdp.Description = string.Format(description, "UDP"); - fwRuleUdp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; - fwRuleUdp.Enabled = true; - fwRuleUdp.Name = name; - fwRuleUdp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; - - fwRules = FirewallPolicy.Rules; - fwRules.Add(fwRuleTcp); - fwRules.Add(fwRuleUdp); - } - finally - { - if (fwRules != null) Marshal.FinalReleaseComObject(fwRules); - if (fwRuleTcp != null) Marshal.FinalReleaseComObject(fwRuleTcp); - if (fwRuleUdp != null) Marshal.FinalReleaseComObject(fwRuleUdp); - } // try-finally - } // AllowProgramWinVista - - private void AllowProgramWin7plus(string path, string name, string description) - { - INetFwRule2 fwRuleTcp, fwRuleUdp; - INetFwRules fwRules; - - fwRuleTcp = null; - fwRuleUdp = null; - fwRules = null; - try - { - fwRuleTcp = (INetFwRule2)Activator.CreateInstance(NetFwRuleType); - fwRuleTcp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; - fwRuleTcp.ApplicationName = path; - fwRuleTcp.Description = string.Format(description, "TCP"); - fwRuleTcp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; - fwRuleTcp.Enabled = true; - fwRuleTcp.Name = name; - fwRuleTcp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; - fwRuleTcp.Profiles = (int)(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE | NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); - - fwRuleUdp = (INetFwRule2)Activator.CreateInstance(NetFwRuleType); - fwRuleUdp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; - fwRuleUdp.ApplicationName = path; - fwRuleUdp.Description = string.Format(description, "UDP"); - fwRuleUdp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; - fwRuleUdp.Enabled = true; - fwRuleUdp.Name = name; - fwRuleUdp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; - fwRuleUdp.Profiles = (int)(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE | NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); - - fwRules = FirewallPolicy.Rules; - fwRules.Add(fwRuleTcp); - fwRules.Add(fwRuleUdp); - } - finally - { - if (fwRules != null) Marshal.FinalReleaseComObject(fwRules); - if (fwRuleTcp != null) Marshal.FinalReleaseComObject(fwRuleTcp); - if (fwRuleUdp != null) Marshal.FinalReleaseComObject(fwRuleUdp); - } // try-finally - } // AllowProgramWin7plus - } // internal class WindowsFirewall -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using NetFwTypeLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + internal class WindowsFirewall : IDisposable + { + private bool Disposed; + private INetFwPolicy2 FirewallPolicy; + private Type NetFwRuleType; + private bool SupportsIFwRule2; + + public WindowsFirewall() + { + var fwPolicy2Type = Type.GetTypeFromCLSID(new Guid("E2B3C97F-6AE1-41AC-817A-F6F92166D7DD")); + FirewallPolicy = (INetFwPolicy2)Activator.CreateInstance(fwPolicy2Type); + + NetFwRuleType = Type.GetTypeFromCLSID(new Guid("2C5BC43E-3369-4C33-AB0C-BE9469677AF4")); + + object rule = null; + INetFwRule2 rule2 = null; + try + { + rule = Activator.CreateInstance(NetFwRuleType); + rule2 = rule as INetFwRule2; + if (rule2 != null) + { + SupportsIFwRule2 = true; + } // if + } + finally + { + if (rule != null) Marshal.FinalReleaseComObject(rule); + if (rule2 != null) Marshal.FinalReleaseComObject(rule2); + } // try-finally + } // constructor + + ~WindowsFirewall() + { + Dispose(false); + } // destructor + + public void AllowProgram(string path, string name, string description) + { + if (SupportsIFwRule2) + { + AllowProgramWin7plus(path, name, description); + } + else + { + AllowProgramWinVista(path, name, description); + } // if-else + } // AllowProgram + + public void Dispose() + { + if (Disposed) return; + Dispose(true); + GC.SuppressFinalize(this); + } // Dispose + + private void Dispose(bool disposing) + { + Marshal.FinalReleaseComObject(FirewallPolicy); + + Disposed = true; + } // Dispose + + private void AllowProgramWinVista(string path, string name, string description) + { + INetFwRule fwRuleTcp, fwRuleUdp; + INetFwRules fwRules; + + fwRuleTcp = null; + fwRuleUdp = null; + fwRules = null; + try + { + fwRuleTcp = (INetFwRule)Activator.CreateInstance(NetFwRuleType); + fwRuleTcp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; + fwRuleTcp.ApplicationName = path; + fwRuleTcp.Description = string.Format(description, "TCP"); + fwRuleTcp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; + fwRuleTcp.Enabled = true; + fwRuleTcp.Name = name; + fwRuleTcp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; + + fwRuleUdp = (INetFwRule)Activator.CreateInstance(NetFwRuleType); + fwRuleUdp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; + fwRuleUdp.ApplicationName = path; + fwRuleUdp.Description = string.Format(description, "UDP"); + fwRuleUdp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; + fwRuleUdp.Enabled = true; + fwRuleUdp.Name = name; + fwRuleUdp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; + + fwRules = FirewallPolicy.Rules; + fwRules.Add(fwRuleTcp); + fwRules.Add(fwRuleUdp); + } + finally + { + if (fwRules != null) Marshal.FinalReleaseComObject(fwRules); + if (fwRuleTcp != null) Marshal.FinalReleaseComObject(fwRuleTcp); + if (fwRuleUdp != null) Marshal.FinalReleaseComObject(fwRuleUdp); + } // try-finally + } // AllowProgramWinVista + + private void AllowProgramWin7plus(string path, string name, string description) + { + INetFwRule2 fwRuleTcp, fwRuleUdp; + INetFwRules fwRules; + + fwRuleTcp = null; + fwRuleUdp = null; + fwRules = null; + try + { + fwRuleTcp = (INetFwRule2)Activator.CreateInstance(NetFwRuleType); + fwRuleTcp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; + fwRuleTcp.ApplicationName = path; + fwRuleTcp.Description = string.Format(description, "TCP"); + fwRuleTcp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; + fwRuleTcp.Enabled = true; + fwRuleTcp.Name = name; + fwRuleTcp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; + fwRuleTcp.Profiles = (int)(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE | NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); + + fwRuleUdp = (INetFwRule2)Activator.CreateInstance(NetFwRuleType); + fwRuleUdp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; + fwRuleUdp.ApplicationName = path; + fwRuleUdp.Description = string.Format(description, "UDP"); + fwRuleUdp.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; + fwRuleUdp.Enabled = true; + fwRuleUdp.Name = name; + fwRuleUdp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; + fwRuleUdp.Profiles = (int)(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE | NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); + + fwRules = FirewallPolicy.Rules; + fwRules.Add(fwRuleTcp); + fwRules.Add(fwRuleUdp); + } + finally + { + if (fwRules != null) Marshal.FinalReleaseComObject(fwRules); + if (fwRuleTcp != null) Marshal.FinalReleaseComObject(fwRuleTcp); + if (fwRuleUdp != null) Marshal.FinalReleaseComObject(fwRuleUdp); + } // try-finally + } // AllowProgramWin7plus + } // internal class WindowsFirewall +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs index b2cee026..62770d99 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs @@ -1,162 +1,162 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - partial class WizardEndDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WizardEndDialog)); - this.pictureWelcome = new System.Windows.Forms.PictureBox(); - this.panelButtons = new System.Windows.Forms.Panel(); - this.buttonBack = new System.Windows.Forms.Button(); - this.buttonNext = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.labelEndTitle = new System.Windows.Forms.Label(); - this.labelEndText = new System.Windows.Forms.Label(); - this.pictureEndIcon = new System.Windows.Forms.PictureBox(); - this.checkRunMainProgram = new System.Windows.Forms.CheckBox(); - this.linkErrorDetails = new System.Windows.Forms.LinkLabel(); - ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).BeginInit(); - this.panelButtons.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureEndIcon)).BeginInit(); - this.SuspendLayout(); - // - // pictureWelcome - // - resources.ApplyResources(this.pictureWelcome, "pictureWelcome"); - this.pictureWelcome.BackgroundImage = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.WizardSidePattern; - this.pictureWelcome.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.WizardSide; - this.pictureWelcome.Name = "pictureWelcome"; - this.pictureWelcome.TabStop = false; - // - // panelButtons - // - this.panelButtons.BackColor = System.Drawing.SystemColors.Control; - this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.panelButtons.Controls.Add(this.buttonBack); - this.panelButtons.Controls.Add(this.buttonNext); - this.panelButtons.Controls.Add(this.buttonCancel); - resources.ApplyResources(this.panelButtons, "panelButtons"); - this.panelButtons.Name = "panelButtons"; - // - // buttonBack - // - this.buttonBack.DialogResult = System.Windows.Forms.DialogResult.No; - resources.ApplyResources(this.buttonBack, "buttonBack"); - this.buttonBack.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionBack_Medium_16; - this.buttonBack.Name = "buttonBack"; - this.buttonBack.UseVisualStyleBackColor = true; - // - // buttonNext - // - this.buttonNext.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonNext.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionOk_16x16; - resources.ApplyResources(this.buttonNext, "buttonNext"); - this.buttonNext.Name = "buttonNext"; - this.buttonNext.UseVisualStyleBackColor = true; - // - // buttonCancel - // - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // labelEndTitle - // - resources.ApplyResources(this.labelEndTitle, "labelEndTitle"); - this.labelEndTitle.Name = "labelEndTitle"; - // - // labelEndText - // - resources.ApplyResources(this.labelEndText, "labelEndText"); - this.labelEndText.Name = "labelEndText"; - // - // pictureEndIcon - // - resources.ApplyResources(this.pictureEndIcon, "pictureEndIcon"); - this.pictureEndIcon.Name = "pictureEndIcon"; - this.pictureEndIcon.TabStop = false; - // - // checkRunMainProgram - // - resources.ApplyResources(this.checkRunMainProgram, "checkRunMainProgram"); - this.checkRunMainProgram.BackColor = System.Drawing.SystemColors.Window; - this.checkRunMainProgram.Name = "checkRunMainProgram"; - this.checkRunMainProgram.UseVisualStyleBackColor = false; - // - // linkErrorDetails - // - resources.ApplyResources(this.linkErrorDetails, "linkErrorDetails"); - this.linkErrorDetails.Name = "linkErrorDetails"; - this.linkErrorDetails.TabStop = true; - this.linkErrorDetails.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkErrorDetails_LinkClicked); - // - // WizardEndDialog - // - this.AcceptButton = this.buttonCancel; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Window; - this.CancelButton = this.buttonNext; - this.Controls.Add(this.linkErrorDetails); - this.Controls.Add(this.checkRunMainProgram); - this.Controls.Add(this.pictureEndIcon); - this.Controls.Add(this.labelEndText); - this.Controls.Add(this.labelEndTitle); - this.Controls.Add(this.panelButtons); - this.Controls.Add(this.pictureWelcome); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "WizardEndDialog"; - this.Load += new System.EventHandler(this.WizardEndDialog_Load); - ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).EndInit(); - this.panelButtons.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureEndIcon)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureWelcome; - private System.Windows.Forms.Panel panelButtons; - private System.Windows.Forms.Button buttonNext; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Label labelEndTitle; - private System.Windows.Forms.Label labelEndText; - private System.Windows.Forms.Button buttonBack; - private System.Windows.Forms.PictureBox pictureEndIcon; - internal System.Windows.Forms.CheckBox checkRunMainProgram; - private System.Windows.Forms.LinkLabel linkErrorDetails; - } +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Tools.FirstTimeConfig +{ + partial class WizardEndDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WizardEndDialog)); + this.pictureWelcome = new System.Windows.Forms.PictureBox(); + this.panelButtons = new System.Windows.Forms.Panel(); + this.buttonBack = new System.Windows.Forms.Button(); + this.buttonNext = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelEndTitle = new System.Windows.Forms.Label(); + this.labelEndText = new System.Windows.Forms.Label(); + this.pictureEndIcon = new System.Windows.Forms.PictureBox(); + this.checkRunMainProgram = new System.Windows.Forms.CheckBox(); + this.linkErrorDetails = new System.Windows.Forms.LinkLabel(); + ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).BeginInit(); + this.panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureEndIcon)).BeginInit(); + this.SuspendLayout(); + // + // pictureWelcome + // + resources.ApplyResources(this.pictureWelcome, "pictureWelcome"); + this.pictureWelcome.BackgroundImage = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.WizardSidePattern; + this.pictureWelcome.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.WizardSide; + this.pictureWelcome.Name = "pictureWelcome"; + this.pictureWelcome.TabStop = false; + // + // panelButtons + // + this.panelButtons.BackColor = System.Drawing.SystemColors.Control; + this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.panelButtons.Controls.Add(this.buttonBack); + this.panelButtons.Controls.Add(this.buttonNext); + this.panelButtons.Controls.Add(this.buttonCancel); + resources.ApplyResources(this.panelButtons, "panelButtons"); + this.panelButtons.Name = "panelButtons"; + // + // buttonBack + // + this.buttonBack.DialogResult = System.Windows.Forms.DialogResult.No; + resources.ApplyResources(this.buttonBack, "buttonBack"); + this.buttonBack.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionBack_Medium_16; + this.buttonBack.Name = "buttonBack"; + this.buttonBack.UseVisualStyleBackColor = true; + // + // buttonNext + // + this.buttonNext.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonNext.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionOk_16x16; + resources.ApplyResources(this.buttonNext, "buttonNext"); + this.buttonNext.Name = "buttonNext"; + this.buttonNext.UseVisualStyleBackColor = true; + // + // buttonCancel + // + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // labelEndTitle + // + resources.ApplyResources(this.labelEndTitle, "labelEndTitle"); + this.labelEndTitle.Name = "labelEndTitle"; + // + // labelEndText + // + resources.ApplyResources(this.labelEndText, "labelEndText"); + this.labelEndText.Name = "labelEndText"; + // + // pictureEndIcon + // + resources.ApplyResources(this.pictureEndIcon, "pictureEndIcon"); + this.pictureEndIcon.Name = "pictureEndIcon"; + this.pictureEndIcon.TabStop = false; + // + // checkRunMainProgram + // + resources.ApplyResources(this.checkRunMainProgram, "checkRunMainProgram"); + this.checkRunMainProgram.BackColor = System.Drawing.SystemColors.Window; + this.checkRunMainProgram.Name = "checkRunMainProgram"; + this.checkRunMainProgram.UseVisualStyleBackColor = false; + // + // linkErrorDetails + // + resources.ApplyResources(this.linkErrorDetails, "linkErrorDetails"); + this.linkErrorDetails.Name = "linkErrorDetails"; + this.linkErrorDetails.TabStop = true; + this.linkErrorDetails.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkErrorDetails_LinkClicked); + // + // WizardEndDialog + // + this.AcceptButton = this.buttonCancel; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.CancelButton = this.buttonNext; + this.Controls.Add(this.linkErrorDetails); + this.Controls.Add(this.checkRunMainProgram); + this.Controls.Add(this.pictureEndIcon); + this.Controls.Add(this.labelEndText); + this.Controls.Add(this.labelEndTitle); + this.Controls.Add(this.panelButtons); + this.Controls.Add(this.pictureWelcome); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "WizardEndDialog"; + this.Load += new System.EventHandler(this.WizardEndDialog_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).EndInit(); + this.panelButtons.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureEndIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureWelcome; + private System.Windows.Forms.Panel panelButtons; + private System.Windows.Forms.Button buttonNext; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelEndTitle; + private System.Windows.Forms.Label labelEndText; + private System.Windows.Forms.Button buttonBack; + private System.Windows.Forms.PictureBox pictureEndIcon; + internal System.Windows.Forms.CheckBox checkRunMainProgram; + private System.Windows.Forms.LinkLabel linkErrorDetails; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs index dc37abcf..12e4ab0b 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs @@ -1,102 +1,102 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - public partial class WizardEndDialog : Form - { - public WizardEndDialog() - { - InitializeComponent(); - this.Icon = Properties.Resources.FirstTimeConfigIcon; - } // constructor - - public DialogResult EndResult - { - get; - set; - } // EndResult - - public string ErrorMessage - { - get; - set; - } // ErrorMessage - - public Exception ErrorException - { - get; - set; - } // ErrorException - - private void WizardEndDialog_Load(object sender, EventArgs e) - { - switch (EndResult) - { - case System.Windows.Forms.DialogResult.OK: - BasicGoogleTelemetry.SendScreenHit(this, "Ok"); - pictureEndIcon.Image = Properties.Resources.Success_48x48; - labelEndTitle.Text = Properties.Texts.WizardEndTitleOk; - labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextOk); - checkRunMainProgram.Visible = true; - checkRunMainProgram.Checked = !string.IsNullOrEmpty(Program.AppUiConfig.Folders.Install); - checkRunMainProgram.Enabled = checkRunMainProgram.Checked; - checkRunMainProgram.Text = string.Format(checkRunMainProgram.Text, Properties.Texts.ProductMainProgramName); - break; - case System.Windows.Forms.DialogResult.Cancel: - BasicGoogleTelemetry.SendScreenHit(this, "Cancel"); - pictureEndIcon.Image = Properties.Resources.Warning_48x48; - labelEndTitle.Text = Properties.Texts.WizardEndTitleCancel; - labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextCancel); - break; - default: - BasicGoogleTelemetry.SendScreenHit(this, "Abort"); - pictureEndIcon.Image = Properties.Resources.Exclamation_48x48; - labelEndTitle.Text = Properties.Texts.WizardEndTitleAbort; - labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextAbort); - linkErrorDetails.Left = checkRunMainProgram.Left; - linkErrorDetails.Visible = true; - break; - } // switch - } // WizardEndDialog_Load - - private void linkErrorDetails_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string text; - - if (ErrorMessage != null) - { - if (ErrorException == null) - { - text = ErrorMessage; - } - else - { - text = string.Format("{0}\r\n\r\n{1}", ErrorMessage, ErrorException.ToString()); - } // if-else - } - else - { - if (ErrorException == null) - { - text = "(Exception or error data is not available)"; - } - else - { - text = ErrorException.ToString(); - } // if-else - } // if-else - - MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); - } // linkErrorDetails_LinkClicked - } // class WizardEndDialog -} // namespace +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + public partial class WizardEndDialog : Form + { + public WizardEndDialog() + { + InitializeComponent(); + this.Icon = Properties.Resources.FirstTimeConfigIcon; + } // constructor + + public DialogResult EndResult + { + get; + set; + } // EndResult + + public string ErrorMessage + { + get; + set; + } // ErrorMessage + + public Exception ErrorException + { + get; + set; + } // ErrorException + + private void WizardEndDialog_Load(object sender, EventArgs e) + { + switch (EndResult) + { + case System.Windows.Forms.DialogResult.OK: + BasicGoogleTelemetry.SendScreenHit(this, "Ok"); + pictureEndIcon.Image = Properties.Resources.Success_48x48; + labelEndTitle.Text = Properties.Texts.WizardEndTitleOk; + labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextOk); + checkRunMainProgram.Visible = true; + checkRunMainProgram.Checked = !string.IsNullOrEmpty(Program.AppUiConfig.Folders.Install); + checkRunMainProgram.Enabled = checkRunMainProgram.Checked; + checkRunMainProgram.Text = string.Format(checkRunMainProgram.Text, Properties.Texts.ProductMainProgramName); + break; + case System.Windows.Forms.DialogResult.Cancel: + BasicGoogleTelemetry.SendScreenHit(this, "Cancel"); + pictureEndIcon.Image = Properties.Resources.Warning_48x48; + labelEndTitle.Text = Properties.Texts.WizardEndTitleCancel; + labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextCancel); + break; + default: + BasicGoogleTelemetry.SendScreenHit(this, "Abort"); + pictureEndIcon.Image = Properties.Resources.Exclamation_48x48; + labelEndTitle.Text = Properties.Texts.WizardEndTitleAbort; + labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextAbort); + linkErrorDetails.Left = checkRunMainProgram.Left; + linkErrorDetails.Visible = true; + break; + } // switch + } // WizardEndDialog_Load + + private void linkErrorDetails_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string text; + + if (ErrorMessage != null) + { + if (ErrorException == null) + { + text = ErrorMessage; + } + else + { + text = string.Format("{0}\r\n\r\n{1}", ErrorMessage, ErrorException.ToString()); + } // if-else + } + else + { + if (ErrorException == null) + { + text = "(Exception or error data is not available)"; + } + else + { + text = ErrorException.ToString(); + } // if-else + } // if-else + + MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } // linkErrorDetails_LinkClicked + } // class WizardEndDialog +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs index 91044485..936d5746 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs @@ -1,167 +1,167 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - internal class WizardTabControl : TabControl - { - public WizardTabControl() - { - IsPageAllowed = new Dictionary(); - Initialization = new Dictionary(); - } // constructor - - public Label LabelTitle - { - get; - set; - } // LabelTitle - - public Button PreviousButton - { - get; - set; - } // PreviousButton - - public Button NextButton - { - get; - set; - } // NextButton - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IDictionary IsPageAllowed - { - get; - set; - } // IsPageAllowed - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IDictionary Initialization - { - get; - set; - } // Initialization - - protected override void OnCreateControl() - { - base.OnCreateControl(); - - if (DesignMode) return; - - UpdateWizardButtons(); - PreviousButton.Click += PreviousButton_Click; - NextButton.Click += NextButton_Click; - this.Selected += WizardTabControl_Selected; - } // OnCreateControl - - protected override void WndProc(ref Message m) - { - // Hide tabs by trapping the TCM_ADJUSTRECT message - if (m.Msg == 0x1328 && !DesignMode) - { - m.Result = (IntPtr)1; - } - else - { - base.WndProc(ref m); - } // if-else - } // WndProc - - void WizardTabControl_Selected(object sender, TabControlEventArgs e) - { - if (DesignMode) return; - - if ((LabelTitle != null) && (e.TabPage != null)) - { - LabelTitle.Text = e.TabPage.ToolTipText; - } // if - } // WizardTabControl_Selected - - protected override void OnSelecting(TabControlCancelEventArgs e) - { - bool isAllowed; - - base.OnSelecting(e); - if (DesignMode) return; - - if (e.TabPage == null) return; - - isAllowed = (IsPageAllowed.TryGetValue(e.TabPage.Name, out isAllowed)) ? isAllowed : false; - e.Cancel = !isAllowed; - - if (isAllowed) - { - Action init; - - if (Initialization.TryGetValue(e.TabPage.Name, out init)) - { - Initialization.Remove(e.TabPage.Name); - init(); - BasicGoogleTelemetry.SendScreenHit(this.FindForm(), e.TabPage.Text); - } // if - } // if - } // OnSelecting - - protected override void OnSelected(TabControlEventArgs e) - { - base.OnSelected(e); - if (DesignMode) return; - - UpdateWizardButtons(); - } // OnSelected - - private void PreviousButton_Click(object sender, EventArgs e) - { - this.SelectedIndex = this.SelectedIndex - 1; - } // PreviousButton_Click - - private void NextButton_Click(object sender, EventArgs e) - { - this.SelectedIndex = this.SelectedIndex + 1; - } // NextButton_Click - - public void UpdateWizardButtons() - { - bool isAllowed; - - isAllowed = false; - if (this.SelectedIndex > 0) - { - var page = TabPages[this.SelectedIndex - 1]; - isAllowed = (IsPageAllowed.TryGetValue(page.Name, out isAllowed)) ? isAllowed : false; - } // if - PreviousButton.Enabled = isAllowed; - - isAllowed = false; - if ((this.SelectedIndex + 1) < this.TabCount) - { - var page = TabPages[this.SelectedIndex + 1]; - isAllowed = (IsPageAllowed.TryGetValue(page.Name, out isAllowed)) ? isAllowed : false; - } // if - - NextButton.Enabled = isAllowed; - } // UpdateWizardButtons - - public void ShowWizardButtons(bool show) - { - if (show) - { - UpdateWizardButtons(); - } // if - - PreviousButton.Visible = show; - NextButton.Visible = show; - } // ShowWizardButtons - } // class WizardTabControl -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + internal class WizardTabControl : TabControl + { + public WizardTabControl() + { + IsPageAllowed = new Dictionary(); + Initialization = new Dictionary(); + } // constructor + + public Label LabelTitle + { + get; + set; + } // LabelTitle + + public Button PreviousButton + { + get; + set; + } // PreviousButton + + public Button NextButton + { + get; + set; + } // NextButton + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public IDictionary IsPageAllowed + { + get; + set; + } // IsPageAllowed + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public IDictionary Initialization + { + get; + set; + } // Initialization + + protected override void OnCreateControl() + { + base.OnCreateControl(); + + if (DesignMode) return; + + UpdateWizardButtons(); + PreviousButton.Click += PreviousButton_Click; + NextButton.Click += NextButton_Click; + this.Selected += WizardTabControl_Selected; + } // OnCreateControl + + protected override void WndProc(ref Message m) + { + // Hide tabs by trapping the TCM_ADJUSTRECT message + if (m.Msg == 0x1328 && !DesignMode) + { + m.Result = (IntPtr)1; + } + else + { + base.WndProc(ref m); + } // if-else + } // WndProc + + void WizardTabControl_Selected(object sender, TabControlEventArgs e) + { + if (DesignMode) return; + + if ((LabelTitle != null) && (e.TabPage != null)) + { + LabelTitle.Text = e.TabPage.ToolTipText; + } // if + } // WizardTabControl_Selected + + protected override void OnSelecting(TabControlCancelEventArgs e) + { + bool isAllowed; + + base.OnSelecting(e); + if (DesignMode) return; + + if (e.TabPage == null) return; + + isAllowed = (IsPageAllowed.TryGetValue(e.TabPage.Name, out isAllowed)) ? isAllowed : false; + e.Cancel = !isAllowed; + + if (isAllowed) + { + Action init; + + if (Initialization.TryGetValue(e.TabPage.Name, out init)) + { + Initialization.Remove(e.TabPage.Name); + init(); + BasicGoogleTelemetry.SendScreenHit(this.FindForm(), e.TabPage.Text); + } // if + } // if + } // OnSelecting + + protected override void OnSelected(TabControlEventArgs e) + { + base.OnSelected(e); + if (DesignMode) return; + + UpdateWizardButtons(); + } // OnSelected + + private void PreviousButton_Click(object sender, EventArgs e) + { + this.SelectedIndex = this.SelectedIndex - 1; + } // PreviousButton_Click + + private void NextButton_Click(object sender, EventArgs e) + { + this.SelectedIndex = this.SelectedIndex + 1; + } // NextButton_Click + + public void UpdateWizardButtons() + { + bool isAllowed; + + isAllowed = false; + if (this.SelectedIndex > 0) + { + var page = TabPages[this.SelectedIndex - 1]; + isAllowed = (IsPageAllowed.TryGetValue(page.Name, out isAllowed)) ? isAllowed : false; + } // if + PreviousButton.Enabled = isAllowed; + + isAllowed = false; + if ((this.SelectedIndex + 1) < this.TabCount) + { + var page = TabPages[this.SelectedIndex + 1]; + isAllowed = (IsPageAllowed.TryGetValue(page.Name, out isAllowed)) ? isAllowed : false; + } // if + + NextButton.Enabled = isAllowed; + } // UpdateWizardButtons + + public void ShowWizardButtons(bool show) + { + if (show) + { + UpdateWizardButtons(); + } // if + + PreviousButton.Visible = show; + NextButton.Visible = show; + } // ShowWizardButtons + } // class WizardTabControl +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs index 8752c54d..119cb520 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs @@ -1,154 +1,154 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - partial class WizardWelcomeDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WizardWelcomeDialog)); - this.pictureWelcome = new System.Windows.Forms.PictureBox(); - this.panelButtons = new System.Windows.Forms.Panel(); - this.buttonBack = new System.Windows.Forms.Button(); - this.buttonNext = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.labelWelcomeTitle = new System.Windows.Forms.Label(); - this.labelWelcomeText = new System.Windows.Forms.Label(); - this.checkAnalytics = new System.Windows.Forms.CheckBox(); - this.linkAnalyticsHelp = new System.Windows.Forms.LinkLabel(); - ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).BeginInit(); - this.panelButtons.SuspendLayout(); - this.SuspendLayout(); - // - // pictureWelcome - // - resources.ApplyResources(this.pictureWelcome, "pictureWelcome"); - this.pictureWelcome.BackgroundImage = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.WizardSidePattern; - this.pictureWelcome.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.WizardSide; - this.pictureWelcome.Name = "pictureWelcome"; - this.pictureWelcome.TabStop = false; - // - // panelButtons - // - this.panelButtons.BackColor = System.Drawing.SystemColors.Control; - this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.panelButtons.Controls.Add(this.buttonBack); - this.panelButtons.Controls.Add(this.buttonNext); - this.panelButtons.Controls.Add(this.buttonCancel); - resources.ApplyResources(this.panelButtons, "panelButtons"); - this.panelButtons.Name = "panelButtons"; - // - // buttonBack - // - this.buttonBack.DialogResult = System.Windows.Forms.DialogResult.No; - resources.ApplyResources(this.buttonBack, "buttonBack"); - this.buttonBack.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionBack_Medium_16; - this.buttonBack.Name = "buttonBack"; - this.buttonBack.UseVisualStyleBackColor = true; - // - // buttonNext - // - this.buttonNext.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonNext.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionForward_Medium_16; - resources.ApplyResources(this.buttonNext, "buttonNext"); - this.buttonNext.Name = "buttonNext"; - this.buttonNext.UseVisualStyleBackColor = true; - // - // buttonCancel - // - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // labelWelcomeTitle - // - resources.ApplyResources(this.labelWelcomeTitle, "labelWelcomeTitle"); - this.labelWelcomeTitle.Name = "labelWelcomeTitle"; - // - // labelWelcomeText - // - resources.ApplyResources(this.labelWelcomeText, "labelWelcomeText"); - this.labelWelcomeText.Name = "labelWelcomeText"; - // - // checkAnalytics - // - resources.ApplyResources(this.checkAnalytics, "checkAnalytics"); - this.checkAnalytics.Checked = true; - this.checkAnalytics.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkAnalytics.Name = "checkAnalytics"; - this.checkAnalytics.UseVisualStyleBackColor = true; - // - // linkAnalyticsHelp - // - resources.ApplyResources(this.linkAnalyticsHelp, "linkAnalyticsHelp"); - this.linkAnalyticsHelp.Name = "linkAnalyticsHelp"; - this.linkAnalyticsHelp.TabStop = true; - this.linkAnalyticsHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkAnalyticsHelp_LinkClicked); - // - // WizardWelcomeDialog - // - this.AcceptButton = this.buttonCancel; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Window; - this.CancelButton = this.buttonNext; - this.Controls.Add(this.linkAnalyticsHelp); - this.Controls.Add(this.checkAnalytics); - this.Controls.Add(this.labelWelcomeTitle); - this.Controls.Add(this.labelWelcomeText); - this.Controls.Add(this.panelButtons); - this.Controls.Add(this.pictureWelcome); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "WizardWelcomeDialog"; - this.TopMost = true; - this.Load += new System.EventHandler(this.WizardWelcomeDialog_Load); - this.Shown += new System.EventHandler(this.WizardWelcomeDialog_Shown); - ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).EndInit(); - this.panelButtons.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureWelcome; - private System.Windows.Forms.Panel panelButtons; - private System.Windows.Forms.Button buttonNext; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Label labelWelcomeTitle; - private System.Windows.Forms.Label labelWelcomeText; - private System.Windows.Forms.Button buttonBack; - private System.Windows.Forms.CheckBox checkAnalytics; - private System.Windows.Forms.LinkLabel linkAnalyticsHelp; - } +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Tools.FirstTimeConfig +{ + partial class WizardWelcomeDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WizardWelcomeDialog)); + this.pictureWelcome = new System.Windows.Forms.PictureBox(); + this.panelButtons = new System.Windows.Forms.Panel(); + this.buttonBack = new System.Windows.Forms.Button(); + this.buttonNext = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelWelcomeTitle = new System.Windows.Forms.Label(); + this.labelWelcomeText = new System.Windows.Forms.Label(); + this.checkAnalytics = new System.Windows.Forms.CheckBox(); + this.linkAnalyticsHelp = new System.Windows.Forms.LinkLabel(); + ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).BeginInit(); + this.panelButtons.SuspendLayout(); + this.SuspendLayout(); + // + // pictureWelcome + // + resources.ApplyResources(this.pictureWelcome, "pictureWelcome"); + this.pictureWelcome.BackgroundImage = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.WizardSidePattern; + this.pictureWelcome.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.WizardSide; + this.pictureWelcome.Name = "pictureWelcome"; + this.pictureWelcome.TabStop = false; + // + // panelButtons + // + this.panelButtons.BackColor = System.Drawing.SystemColors.Control; + this.panelButtons.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.panelButtons.Controls.Add(this.buttonBack); + this.panelButtons.Controls.Add(this.buttonNext); + this.panelButtons.Controls.Add(this.buttonCancel); + resources.ApplyResources(this.panelButtons, "panelButtons"); + this.panelButtons.Name = "panelButtons"; + // + // buttonBack + // + this.buttonBack.DialogResult = System.Windows.Forms.DialogResult.No; + resources.ApplyResources(this.buttonBack, "buttonBack"); + this.buttonBack.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionBack_Medium_16; + this.buttonBack.Name = "buttonBack"; + this.buttonBack.UseVisualStyleBackColor = true; + // + // buttonNext + // + this.buttonNext.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonNext.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionForward_Medium_16; + resources.ApplyResources(this.buttonNext, "buttonNext"); + this.buttonNext.Name = "buttonNext"; + this.buttonNext.UseVisualStyleBackColor = true; + // + // buttonCancel + // + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ActionCancel_16x16; + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // labelWelcomeTitle + // + resources.ApplyResources(this.labelWelcomeTitle, "labelWelcomeTitle"); + this.labelWelcomeTitle.Name = "labelWelcomeTitle"; + // + // labelWelcomeText + // + resources.ApplyResources(this.labelWelcomeText, "labelWelcomeText"); + this.labelWelcomeText.Name = "labelWelcomeText"; + // + // checkAnalytics + // + resources.ApplyResources(this.checkAnalytics, "checkAnalytics"); + this.checkAnalytics.Checked = true; + this.checkAnalytics.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkAnalytics.Name = "checkAnalytics"; + this.checkAnalytics.UseVisualStyleBackColor = true; + // + // linkAnalyticsHelp + // + resources.ApplyResources(this.linkAnalyticsHelp, "linkAnalyticsHelp"); + this.linkAnalyticsHelp.Name = "linkAnalyticsHelp"; + this.linkAnalyticsHelp.TabStop = true; + this.linkAnalyticsHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkAnalyticsHelp_LinkClicked); + // + // WizardWelcomeDialog + // + this.AcceptButton = this.buttonCancel; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.CancelButton = this.buttonNext; + this.Controls.Add(this.linkAnalyticsHelp); + this.Controls.Add(this.checkAnalytics); + this.Controls.Add(this.labelWelcomeTitle); + this.Controls.Add(this.labelWelcomeText); + this.Controls.Add(this.panelButtons); + this.Controls.Add(this.pictureWelcome); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "WizardWelcomeDialog"; + this.TopMost = true; + this.Load += new System.EventHandler(this.WizardWelcomeDialog_Load); + this.Shown += new System.EventHandler(this.WizardWelcomeDialog_Shown); + ((System.ComponentModel.ISupportInitialize)(this.pictureWelcome)).EndInit(); + this.panelButtons.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureWelcome; + private System.Windows.Forms.Panel panelButtons; + private System.Windows.Forms.Button buttonNext; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelWelcomeTitle; + private System.Windows.Forms.Label labelWelcomeText; + private System.Windows.Forms.Button buttonBack; + private System.Windows.Forms.CheckBox checkAnalytics; + private System.Windows.Forms.LinkLabel linkAnalyticsHelp; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs index f170deaa..3319afd1 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs @@ -1,46 +1,46 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Common.Forms; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Tools.FirstTimeConfig -{ - public partial class WizardWelcomeDialog : Form - { - public WizardWelcomeDialog() - { - InitializeComponent(); - this.Icon = Properties.Resources.FirstTimeConfigIcon; -#if DEBUG - checkAnalytics.Checked = false; - checkAnalytics.Enabled = false; -#endif - } // constructor - - private void WizardWelcomeDialog_Load(object sender, EventArgs e) - { - labelWelcomeTitle.Text = string.Format(labelWelcomeTitle.Text, Properties.Texts.ProductShortName); - labelWelcomeText.Text = string.Format(labelWelcomeText.Text, Properties.Texts.ProductFullName); - } // WizardWelcomeDialog_Load - - private void WizardWelcomeDialog_Shown(object sender, EventArgs e) - { - BringToFront(); - buttonNext.Focus(); - TopMost = false; - } // WizardWelcomeDialog_Shown - - private void linkAnalyticsHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - HelpDialog.ShowRtfHelp(this, Properties.Texts.GoogleTelemetry, Properties.Texts.TelemetryHelpCaption); - } // linkAnalyticsHelp_LinkClicked - } // class WizardWelcomeDialog -} // namespace +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Tools.FirstTimeConfig +{ + public partial class WizardWelcomeDialog : Form + { + public WizardWelcomeDialog() + { + InitializeComponent(); + this.Icon = Properties.Resources.FirstTimeConfigIcon; +#if DEBUG + checkAnalytics.Checked = false; + checkAnalytics.Enabled = false; +#endif + } // constructor + + private void WizardWelcomeDialog_Load(object sender, EventArgs e) + { + labelWelcomeTitle.Text = string.Format(labelWelcomeTitle.Text, Properties.Texts.ProductShortName); + labelWelcomeText.Text = string.Format(labelWelcomeText.Text, Properties.Texts.ProductFullName); + } // WizardWelcomeDialog_Load + + private void WizardWelcomeDialog_Shown(object sender, EventArgs e) + { + BringToFront(); + buttonNext.Focus(); + TopMost = false; + } // WizardWelcomeDialog_Shown + + private void linkAnalyticsHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + HelpDialog.ShowRtfHelp(this, Properties.Texts.GoogleTelemetry, Properties.Texts.TelemetryHelpCaption); + } // linkAnalyticsHelp_LinkClicked + } // class WizardWelcomeDialog +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj index eed1793a..91717c15 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj @@ -7,7 +7,7 @@ {A51CC220-48C4-46F6-BF5D-3178CC317426} WinExe Properties - Project.IpTv.Internal.Tools.ChannelLogos + IpTviewr.Internal.Tools.ChannelLogos ChannelLogos v3.5 512 diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheck.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheck.cs index 7ea096dc..248b777c 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheck.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheck.cs @@ -1,107 +1,107 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - abstract class ConsistencyCheck - { - protected IWin32Window Owner; - - public class ProgressChangedEventArgs: EventArgs - { - public string[] Messages; - } // class ProgressChangedEventArgs - - public event EventHandler ProgressChanged; - - public enum Severity - { - None = 0, - Info = 1, - Ok = 2, - Warning = 3, - Error = 4 - } // Severity - - public sealed class Result - { - public DateTime Timestamp - { - get; - private set; - } // Timestamp - - public Severity Severity - { - get; - private set; - } // Severity - - public string[] Data - { - get; - private set; - } // Data - - public Result(Severity severity, params string[] data) - { - Timestamp = DateTime.Now; - Severity = severity; - Data = data; - } // constructor - } // class Result - - public ConsistencyCheck() - { - Results = new List(); - StartTime = DateTime.Now; - } // constructor - - public DateTime StartTime - { - get; - private set; - } // Start Time - - public IList Results - { - get; - private set; - } // Results - - public void Execute(IWin32Window owner) - { - Owner = owner; - Run(); - Owner = null; - } // Execute - - protected abstract void Run(); - - protected void AddResult(Severity severity, params string[] data) - { - Results.Add(new Result(severity, data)); - - if (severity == Severity.Info) - { - var e = new ProgressChangedEventArgs() - { - Messages = data - }; - - OnProgressChanged(this, e); - } // if - } // AddResult - - protected virtual void OnProgressChanged(object sender, ProgressChangedEventArgs e) - { - var progressChanged = ProgressChanged; - if (progressChanged == null) return; - - progressChanged(sender, e); - } // OnProgressChanged - } // abstract class ConsistencyCheck -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + abstract class ConsistencyCheck + { + protected IWin32Window Owner; + + public class ProgressChangedEventArgs: EventArgs + { + public string[] Messages; + } // class ProgressChangedEventArgs + + public event EventHandler ProgressChanged; + + public enum Severity + { + None = 0, + Info = 1, + Ok = 2, + Warning = 3, + Error = 4 + } // Severity + + public sealed class Result + { + public DateTime Timestamp + { + get; + private set; + } // Timestamp + + public Severity Severity + { + get; + private set; + } // Severity + + public string[] Data + { + get; + private set; + } // Data + + public Result(Severity severity, params string[] data) + { + Timestamp = DateTime.Now; + Severity = severity; + Data = data; + } // constructor + } // class Result + + public ConsistencyCheck() + { + Results = new List(); + StartTime = DateTime.Now; + } // constructor + + public DateTime StartTime + { + get; + private set; + } // Start Time + + public IList Results + { + get; + private set; + } // Results + + public void Execute(IWin32Window owner) + { + Owner = owner; + Run(); + Owner = null; + } // Execute + + protected abstract void Run(); + + protected void AddResult(Severity severity, params string[] data) + { + Results.Add(new Result(severity, data)); + + if (severity == Severity.Info) + { + var e = new ProgressChangedEventArgs() + { + Messages = data + }; + + OnProgressChanged(this, e); + } // if + } // AddResult + + protected virtual void OnProgressChanged(object sender, ProgressChangedEventArgs e) + { + var progressChanged = ProgressChanged; + if (progressChanged == null) return; + + progressChanged(sender, e); + } // OnProgressChanged + } // abstract class ConsistencyCheck +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckAllServices.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckAllServices.cs index 06712583..b8572c3f 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckAllServices.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckAllServices.cs @@ -1,15 +1,15 @@ using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Schema2014.Logos; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Forms; using System; using System.Collections.Generic; using System.Linq; using System.Text; -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { abstract class ConsistencyCheckAllServices: ConsistencyCheck { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingLogoFiles.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingLogoFiles.cs index ae15fe07..30810a6e 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingLogoFiles.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingLogoFiles.cs @@ -1,12 +1,12 @@ -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Logos; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { sealed class ConsistencyCheckMissingLogoFiles : ConsistencyCheck { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingServiceLogos.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingServiceLogos.cs index 6807a4b4..8baa65ed 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingServiceLogos.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckMissingServiceLogos.cs @@ -1,71 +1,71 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - sealed class ConsistencyCheckMissingServiceLogos: ConsistencyCheckAllServices - { - protected override void Run() - { - AddResult(Severity.Info, "Loading providers"); - var providers = GetProviders(); - - AddResult(Severity.Info, "Loading broadcast data"); - var list = GetBroadcastList(providers); - if (list == null) goto end; - - AddResult(Severity.Info, "Loading domain mappings"); - var domainMappings = GetDomainMappings(); - - AddResult(Severity.Info, "Loading service mappings"); - var mappedServices = GetMappedServices(); - - AddResult(Severity.Info, "Locating missing logos"); - var missing = GetMissingEntries(list, mappedServices, domainMappings); - - ShowMissingEntries(missing); - - end: - AddResult(Severity.Info, "Check ended"); - } // Run - - private ICollection GetMissingEntries(IList list, IDictionary mappedServices, IDictionary domainMappings) - { - MappedService mappedService; - - var missing = new Dictionary(); - foreach (var item in list) - { - foreach (var service in item.Services) - { - mappedService = GetMappedService(item, service, mappedServices, domainMappings); - if (mappedService != null) continue; - - missing[service.ServiceName] = service; - } // foreach service - } // foreach item - - return missing.Values; - } // GetMissingEntries - - private void ShowMissingEntries(ICollection missing) - { - var missingCount = 0; - - foreach (var item in missing) - { - AddResult(Severity.Error, "Missing logo", item.ServiceName, item.DisplayName, "#" + item.DisplayLogicalNumber); - missingCount++; - } // foreach - - if (missingCount == 0) - { - AddResult(Severity.Info, "No missing entries"); - } // if - } // ShowMissingEntries - } // sealed class ConsistencyCheckMissingServiceLogos -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + sealed class ConsistencyCheckMissingServiceLogos: ConsistencyCheckAllServices + { + protected override void Run() + { + AddResult(Severity.Info, "Loading providers"); + var providers = GetProviders(); + + AddResult(Severity.Info, "Loading broadcast data"); + var list = GetBroadcastList(providers); + if (list == null) goto end; + + AddResult(Severity.Info, "Loading domain mappings"); + var domainMappings = GetDomainMappings(); + + AddResult(Severity.Info, "Loading service mappings"); + var mappedServices = GetMappedServices(); + + AddResult(Severity.Info, "Locating missing logos"); + var missing = GetMissingEntries(list, mappedServices, domainMappings); + + ShowMissingEntries(missing); + + end: + AddResult(Severity.Info, "Check ended"); + } // Run + + private ICollection GetMissingEntries(IList list, IDictionary mappedServices, IDictionary domainMappings) + { + MappedService mappedService; + + var missing = new Dictionary(); + foreach (var item in list) + { + foreach (var service in item.Services) + { + mappedService = GetMappedService(item, service, mappedServices, domainMappings); + if (mappedService != null) continue; + + missing[service.ServiceName] = service; + } // foreach service + } // foreach item + + return missing.Values; + } // GetMissingEntries + + private void ShowMissingEntries(ICollection missing) + { + var missingCount = 0; + + foreach (var item in missing) + { + AddResult(Severity.Error, "Missing logo", item.ServiceName, item.DisplayName, "#" + item.DisplayLogicalNumber); + missingCount++; + } // foreach + + if (missingCount == 0) + { + AddResult(Severity.Info, "No missing entries"); + } // if + } // ShowMissingEntries + } // sealed class ConsistencyCheckMissingServiceLogos +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedLogoFiles.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedLogoFiles.cs index 1add67fc..14527a22 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedLogoFiles.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedLogoFiles.cs @@ -1,12 +1,12 @@ -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Logos; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { sealed class ConsistencyCheckUnusedLogoFiles: ConsistencyCheck { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedServiceMappingEntries.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedServiceMappingEntries.cs index 96ae6070..12b016b8 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedServiceMappingEntries.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ConsistencyCheckUnusedServiceMappingEntries.cs @@ -1,80 +1,80 @@ -using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Schema2014.Logos; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Forms; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - class ConsistencyCheckUnusedServiceMappingEntries: ConsistencyCheckAllServices - { - protected override void Run() - { - AddResult(Severity.Info, "Loading providers"); - var providers = GetProviders(); - - AddResult(Severity.Info, "Loading broadcast data"); - var list = GetBroadcastList(providers); - if (list == null) goto end; - - AddResult(Severity.Info, "Loading domain mappings"); - var domainMappings = GetDomainMappings(); - - AddResult(Severity.Info, "Loading service mappings"); - var mappedServices = GetMappedServices(); - - AddResult(Severity.Info, "Locating unused entries"); - var unused = GetUnusedEntries(list, mappedServices, domainMappings); - - ShowUnusedEntries(unused); - - end: - AddResult(Severity.Info, "Check ended"); - } // Run - - private IEnumerable GetUnusedEntries(IList list, IDictionary mappedServices, IDictionary domainMappings) - { - MappedService mappedService; - - foreach (var item in list) - { - foreach (var service in item.Services) - { - mappedService = GetMappedService(item, service, mappedServices, domainMappings); - if (mappedService != null) - { - mappedService.Referenced = true; - } // if - } // foreach service - } // foreach item - - var result = from entry in mappedServices.Values - where entry.Referenced == false - select entry; - - return result; - } // GetUnusedEntries - - private void ShowUnusedEntries(IEnumerable unused) - { - var unusedCount = 0; - foreach (var entry in unused) - { - AddResult(Severity.Warning, "Unused entry", entry.Mapping.Name, entry.Mapping.Logo, entry.Domain); - unusedCount++; - } // foreach entry - - if (unusedCount == 0) - { - AddResult(Severity.Ok, "No unused entries"); - } // if - - } // ShowUnusedEntries - } // sealed class ConsistencyCheckUnusedServiceMappingEntries -} // namespace +using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Forms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + class ConsistencyCheckUnusedServiceMappingEntries: ConsistencyCheckAllServices + { + protected override void Run() + { + AddResult(Severity.Info, "Loading providers"); + var providers = GetProviders(); + + AddResult(Severity.Info, "Loading broadcast data"); + var list = GetBroadcastList(providers); + if (list == null) goto end; + + AddResult(Severity.Info, "Loading domain mappings"); + var domainMappings = GetDomainMappings(); + + AddResult(Severity.Info, "Loading service mappings"); + var mappedServices = GetMappedServices(); + + AddResult(Severity.Info, "Locating unused entries"); + var unused = GetUnusedEntries(list, mappedServices, domainMappings); + + ShowUnusedEntries(unused); + + end: + AddResult(Severity.Info, "Check ended"); + } // Run + + private IEnumerable GetUnusedEntries(IList list, IDictionary mappedServices, IDictionary domainMappings) + { + MappedService mappedService; + + foreach (var item in list) + { + foreach (var service in item.Services) + { + mappedService = GetMappedService(item, service, mappedServices, domainMappings); + if (mappedService != null) + { + mappedService.Referenced = true; + } // if + } // foreach service + } // foreach item + + var result = from entry in mappedServices.Values + where entry.Referenced == false + select entry; + + return result; + } // GetUnusedEntries + + private void ShowUnusedEntries(IEnumerable unused) + { + var unusedCount = 0; + foreach (var entry in unused) + { + AddResult(Severity.Warning, "Unused entry", entry.Mapping.Name, entry.Mapping.Logo, entry.Domain); + unusedCount++; + } // foreach entry + + if (unusedCount == 0) + { + AddResult(Severity.Ok, "No unused entries"); + } // if + + } // ShowUnusedEntries + } // sealed class ConsistencyCheckUnusedServiceMappingEntries +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.Designer.cs index 90b5b55a..be46ba17 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.Designer.cs @@ -1,4 +1,4 @@ -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { partial class FormConsistency { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.cs index 09125086..7559393d 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormConsistency.cs @@ -1,6 +1,6 @@ -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Forms; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,7 +10,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { public partial class FormConsistency : Form { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.Designer.cs index 83e46328..7949fd73 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.Designer.cs @@ -1,284 +1,284 @@ -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - partial class FormLogos - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - DoDispose(disposing); - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.ColumnHeader ChannelLocal; - System.Windows.Forms.ColumnHeader ChannelWeb; - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.listViewLocalLogos = new System.Windows.Forms.ListView(); - this.listViewWebLogos = new System.Windows.Forms.ListView(); - this.buttonLoad = new System.Windows.Forms.Button(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.labelStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.progressLocal = new System.Windows.Forms.ToolStripProgressBar(); - this.progressWeb = new System.Windows.Forms.ToolStripProgressBar(); - this.checkWebLogos = new System.Windows.Forms.CheckBox(); - this.comboLogoSize = new System.Windows.Forms.ComboBox(); - this.checkFromCache = new System.Windows.Forms.CheckBox(); - this.checkHighDefPriority = new System.Windows.Forms.CheckBox(); - this.labelServiceProvider = new System.Windows.Forms.Label(); - this.buttonSelectServiceProvider = new System.Windows.Forms.Button(); - ChannelLocal = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - ChannelWeb = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - this.statusStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // ChannelLocal - // - ChannelLocal.Text = "Channel"; - ChannelLocal.Width = 190; - // - // ChannelWeb - // - ChannelWeb.Text = "Channel"; - ChannelWeb.Width = 190; - // - // splitContainer1 - // - this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.splitContainer1.Location = new System.Drawing.Point(12, 43); - this.splitContainer1.Name = "splitContainer1"; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.listViewLocalLogos); - this.splitContainer1.Panel1MinSize = 75; - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.listViewWebLogos); - this.splitContainer1.Panel2MinSize = 75; - this.splitContainer1.Size = new System.Drawing.Size(460, 312); - this.splitContainer1.SplitterDistance = 228; - this.splitContainer1.TabIndex = 5; - // - // listViewLocalLogos - // - this.listViewLocalLogos.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - ChannelLocal}); - this.listViewLocalLogos.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewLocalLogos.FullRowSelect = true; - this.listViewLocalLogos.HideSelection = false; - this.listViewLocalLogos.Location = new System.Drawing.Point(0, 0); - this.listViewLocalLogos.Name = "listViewLocalLogos"; - this.listViewLocalLogos.Size = new System.Drawing.Size(228, 312); - this.listViewLocalLogos.TabIndex = 0; - this.listViewLocalLogos.UseCompatibleStateImageBehavior = false; - this.listViewLocalLogos.View = System.Windows.Forms.View.Tile; - this.listViewLocalLogos.SelectedIndexChanged += new System.EventHandler(this.listViewLocalLogos_SelectedIndexChanged); - // - // listViewWebLogos - // - this.listViewWebLogos.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - ChannelWeb}); - this.listViewWebLogos.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewWebLogos.FullRowSelect = true; - this.listViewWebLogos.HideSelection = false; - this.listViewWebLogos.Location = new System.Drawing.Point(0, 0); - this.listViewWebLogos.Name = "listViewWebLogos"; - this.listViewWebLogos.Size = new System.Drawing.Size(228, 312); - this.listViewWebLogos.TabIndex = 0; - this.listViewWebLogos.UseCompatibleStateImageBehavior = false; - this.listViewWebLogos.View = System.Windows.Forms.View.Tile; - this.listViewWebLogos.SelectedIndexChanged += new System.EventHandler(this.listViewWebLogos_SelectedIndexChanged); - // - // buttonLoad - // - this.buttonLoad.Location = new System.Drawing.Point(12, 12); - this.buttonLoad.Name = "buttonLoad"; - this.buttonLoad.Size = new System.Drawing.Size(100, 25); - this.buttonLoad.TabIndex = 0; - this.buttonLoad.Text = "Load logos"; - this.buttonLoad.UseVisualStyleBackColor = true; - this.buttonLoad.Click += new System.EventHandler(this.buttonLoad_Click); - // - // statusStrip1 - // - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.labelStatus, - this.progressLocal, - this.progressWeb}); - this.statusStrip1.Location = new System.Drawing.Point(0, 389); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(484, 22); - this.statusStrip1.TabIndex = 8; - this.statusStrip1.Text = "statusStrip1"; - // - // labelStatus - // - this.labelStatus.AutoToolTip = true; - this.labelStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.labelStatus.Name = "labelStatus"; - this.labelStatus.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.labelStatus.Size = new System.Drawing.Size(315, 17); - this.labelStatus.Spring = true; - this.labelStatus.Text = "Ready"; - this.labelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // progressLocal - // - this.progressLocal.Name = "progressLocal"; - this.progressLocal.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.progressLocal.Size = new System.Drawing.Size(75, 16); - this.progressLocal.Style = System.Windows.Forms.ProgressBarStyle.Continuous; - // - // progressWeb - // - this.progressWeb.Name = "progressWeb"; - this.progressWeb.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; - this.progressWeb.Size = new System.Drawing.Size(75, 16); - // - // checkWebLogos - // - this.checkWebLogos.AutoSize = true; - this.checkWebLogos.Checked = true; - this.checkWebLogos.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkWebLogos.Location = new System.Drawing.Point(224, 17); - this.checkWebLogos.Name = "checkWebLogos"; - this.checkWebLogos.Size = new System.Drawing.Size(86, 17); - this.checkWebLogos.TabIndex = 2; - this.checkWebLogos.Text = "Official logos"; - this.checkWebLogos.UseVisualStyleBackColor = true; - // - // comboLogoSize - // - this.comboLogoSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboLogoSize.FormattingEnabled = true; - this.comboLogoSize.Items.AddRange(new object[] { - "Small (32x32)", - "Normal (48x48)", - "Medium (64x64)", - "Large (96x96)", - "Extra Large (128x128)", - "Huge (256x256)"}); - this.comboLogoSize.Location = new System.Drawing.Point(118, 15); - this.comboLogoSize.Name = "comboLogoSize"; - this.comboLogoSize.Size = new System.Drawing.Size(100, 21); - this.comboLogoSize.TabIndex = 1; - this.comboLogoSize.SelectedIndexChanged += new System.EventHandler(this.comboLogoSize_SelectedIndexChanged); - // - // checkFromCache - // - this.checkFromCache.AutoSize = true; - this.checkFromCache.Checked = true; - this.checkFromCache.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkFromCache.Location = new System.Drawing.Point(316, 17); - this.checkFromCache.Name = "checkFromCache"; - this.checkFromCache.Size = new System.Drawing.Size(82, 17); - this.checkFromCache.TabIndex = 3; - this.checkFromCache.Text = "From cache"; - this.checkFromCache.UseVisualStyleBackColor = true; - this.checkFromCache.CheckedChanged += new System.EventHandler(this.checkFromCache_CheckedChanged); - // - // checkHighDefPriority - // - this.checkHighDefPriority.AutoSize = true; - this.checkHighDefPriority.Checked = true; - this.checkHighDefPriority.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkHighDefPriority.Enabled = false; - this.checkHighDefPriority.Location = new System.Drawing.Point(404, 17); - this.checkHighDefPriority.Name = "checkHighDefPriority"; - this.checkHighDefPriority.Size = new System.Drawing.Size(62, 17); - this.checkHighDefPriority.TabIndex = 4; - this.checkHighDefPriority.Text = "HD prio"; - this.checkHighDefPriority.UseVisualStyleBackColor = true; - // - // labelServiceProvider - // - this.labelServiceProvider.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.labelServiceProvider.AutoSize = true; - this.labelServiceProvider.Location = new System.Drawing.Point(93, 367); - this.labelServiceProvider.Name = "labelServiceProvider"; - this.labelServiceProvider.Size = new System.Drawing.Size(189, 13); - this.labelServiceProvider.TabIndex = 7; - this.labelServiceProvider.Text = "No service provider has been selected"; - // - // buttonSelectServiceProvider - // - this.buttonSelectServiceProvider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonSelectServiceProvider.Location = new System.Drawing.Point(12, 361); - this.buttonSelectServiceProvider.Name = "buttonSelectServiceProvider"; - this.buttonSelectServiceProvider.Size = new System.Drawing.Size(75, 25); - this.buttonSelectServiceProvider.TabIndex = 6; - this.buttonSelectServiceProvider.Text = "Select..."; - this.buttonSelectServiceProvider.UseVisualStyleBackColor = true; - this.buttonSelectServiceProvider.Click += new System.EventHandler(this.buttonSelectServiceProvider_Click); - // - // FormLogos - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(484, 411); - this.Controls.Add(this.buttonSelectServiceProvider); - this.Controls.Add(this.labelServiceProvider); - this.Controls.Add(this.checkHighDefPriority); - this.Controls.Add(this.checkFromCache); - this.Controls.Add(this.comboLogoSize); - this.Controls.Add(this.checkWebLogos); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.buttonLoad); - this.Controls.Add(this.splitContainer1); - this.Name = "FormLogos"; - this.Text = "Grid - Channel logos"; - this.Load += new System.EventHandler(this.FormLogos_Load); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - this.splitContainer1.ResumeLayout(false); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.SplitContainer splitContainer1; - private System.Windows.Forms.ListView listViewLocalLogos; - private System.Windows.Forms.ListView listViewWebLogos; - private System.Windows.Forms.Button buttonLoad; - private System.Windows.Forms.StatusStrip statusStrip1; - private System.Windows.Forms.ToolStripStatusLabel labelStatus; - private System.Windows.Forms.ToolStripProgressBar progressLocal; - private System.Windows.Forms.ToolStripProgressBar progressWeb; - private System.Windows.Forms.CheckBox checkWebLogos; - private System.Windows.Forms.ComboBox comboLogoSize; - private System.Windows.Forms.CheckBox checkFromCache; - private System.Windows.Forms.CheckBox checkHighDefPriority; - private System.Windows.Forms.Label labelServiceProvider; - private System.Windows.Forms.Button buttonSelectServiceProvider; - } -} - +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + partial class FormLogos + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + DoDispose(disposing); + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ColumnHeader ChannelLocal; + System.Windows.Forms.ColumnHeader ChannelWeb; + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.listViewLocalLogos = new System.Windows.Forms.ListView(); + this.listViewWebLogos = new System.Windows.Forms.ListView(); + this.buttonLoad = new System.Windows.Forms.Button(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.labelStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.progressLocal = new System.Windows.Forms.ToolStripProgressBar(); + this.progressWeb = new System.Windows.Forms.ToolStripProgressBar(); + this.checkWebLogos = new System.Windows.Forms.CheckBox(); + this.comboLogoSize = new System.Windows.Forms.ComboBox(); + this.checkFromCache = new System.Windows.Forms.CheckBox(); + this.checkHighDefPriority = new System.Windows.Forms.CheckBox(); + this.labelServiceProvider = new System.Windows.Forms.Label(); + this.buttonSelectServiceProvider = new System.Windows.Forms.Button(); + ChannelLocal = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + ChannelWeb = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // ChannelLocal + // + ChannelLocal.Text = "Channel"; + ChannelLocal.Width = 190; + // + // ChannelWeb + // + ChannelWeb.Text = "Channel"; + ChannelWeb.Width = 190; + // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.Location = new System.Drawing.Point(12, 43); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.listViewLocalLogos); + this.splitContainer1.Panel1MinSize = 75; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.listViewWebLogos); + this.splitContainer1.Panel2MinSize = 75; + this.splitContainer1.Size = new System.Drawing.Size(460, 312); + this.splitContainer1.SplitterDistance = 228; + this.splitContainer1.TabIndex = 5; + // + // listViewLocalLogos + // + this.listViewLocalLogos.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + ChannelLocal}); + this.listViewLocalLogos.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewLocalLogos.FullRowSelect = true; + this.listViewLocalLogos.HideSelection = false; + this.listViewLocalLogos.Location = new System.Drawing.Point(0, 0); + this.listViewLocalLogos.Name = "listViewLocalLogos"; + this.listViewLocalLogos.Size = new System.Drawing.Size(228, 312); + this.listViewLocalLogos.TabIndex = 0; + this.listViewLocalLogos.UseCompatibleStateImageBehavior = false; + this.listViewLocalLogos.View = System.Windows.Forms.View.Tile; + this.listViewLocalLogos.SelectedIndexChanged += new System.EventHandler(this.listViewLocalLogos_SelectedIndexChanged); + // + // listViewWebLogos + // + this.listViewWebLogos.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + ChannelWeb}); + this.listViewWebLogos.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewWebLogos.FullRowSelect = true; + this.listViewWebLogos.HideSelection = false; + this.listViewWebLogos.Location = new System.Drawing.Point(0, 0); + this.listViewWebLogos.Name = "listViewWebLogos"; + this.listViewWebLogos.Size = new System.Drawing.Size(228, 312); + this.listViewWebLogos.TabIndex = 0; + this.listViewWebLogos.UseCompatibleStateImageBehavior = false; + this.listViewWebLogos.View = System.Windows.Forms.View.Tile; + this.listViewWebLogos.SelectedIndexChanged += new System.EventHandler(this.listViewWebLogos_SelectedIndexChanged); + // + // buttonLoad + // + this.buttonLoad.Location = new System.Drawing.Point(12, 12); + this.buttonLoad.Name = "buttonLoad"; + this.buttonLoad.Size = new System.Drawing.Size(100, 25); + this.buttonLoad.TabIndex = 0; + this.buttonLoad.Text = "Load logos"; + this.buttonLoad.UseVisualStyleBackColor = true; + this.buttonLoad.Click += new System.EventHandler(this.buttonLoad_Click); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.labelStatus, + this.progressLocal, + this.progressWeb}); + this.statusStrip1.Location = new System.Drawing.Point(0, 389); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(484, 22); + this.statusStrip1.TabIndex = 8; + this.statusStrip1.Text = "statusStrip1"; + // + // labelStatus + // + this.labelStatus.AutoToolTip = true; + this.labelStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.labelStatus.Name = "labelStatus"; + this.labelStatus.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; + this.labelStatus.Size = new System.Drawing.Size(315, 17); + this.labelStatus.Spring = true; + this.labelStatus.Text = "Ready"; + this.labelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // progressLocal + // + this.progressLocal.Name = "progressLocal"; + this.progressLocal.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; + this.progressLocal.Size = new System.Drawing.Size(75, 16); + this.progressLocal.Style = System.Windows.Forms.ProgressBarStyle.Continuous; + // + // progressWeb + // + this.progressWeb.Name = "progressWeb"; + this.progressWeb.Overflow = System.Windows.Forms.ToolStripItemOverflow.Never; + this.progressWeb.Size = new System.Drawing.Size(75, 16); + // + // checkWebLogos + // + this.checkWebLogos.AutoSize = true; + this.checkWebLogos.Checked = true; + this.checkWebLogos.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkWebLogos.Location = new System.Drawing.Point(224, 17); + this.checkWebLogos.Name = "checkWebLogos"; + this.checkWebLogos.Size = new System.Drawing.Size(86, 17); + this.checkWebLogos.TabIndex = 2; + this.checkWebLogos.Text = "Official logos"; + this.checkWebLogos.UseVisualStyleBackColor = true; + // + // comboLogoSize + // + this.comboLogoSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboLogoSize.FormattingEnabled = true; + this.comboLogoSize.Items.AddRange(new object[] { + "Small (32x32)", + "Normal (48x48)", + "Medium (64x64)", + "Large (96x96)", + "Extra Large (128x128)", + "Huge (256x256)"}); + this.comboLogoSize.Location = new System.Drawing.Point(118, 15); + this.comboLogoSize.Name = "comboLogoSize"; + this.comboLogoSize.Size = new System.Drawing.Size(100, 21); + this.comboLogoSize.TabIndex = 1; + this.comboLogoSize.SelectedIndexChanged += new System.EventHandler(this.comboLogoSize_SelectedIndexChanged); + // + // checkFromCache + // + this.checkFromCache.AutoSize = true; + this.checkFromCache.Checked = true; + this.checkFromCache.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkFromCache.Location = new System.Drawing.Point(316, 17); + this.checkFromCache.Name = "checkFromCache"; + this.checkFromCache.Size = new System.Drawing.Size(82, 17); + this.checkFromCache.TabIndex = 3; + this.checkFromCache.Text = "From cache"; + this.checkFromCache.UseVisualStyleBackColor = true; + this.checkFromCache.CheckedChanged += new System.EventHandler(this.checkFromCache_CheckedChanged); + // + // checkHighDefPriority + // + this.checkHighDefPriority.AutoSize = true; + this.checkHighDefPriority.Checked = true; + this.checkHighDefPriority.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkHighDefPriority.Enabled = false; + this.checkHighDefPriority.Location = new System.Drawing.Point(404, 17); + this.checkHighDefPriority.Name = "checkHighDefPriority"; + this.checkHighDefPriority.Size = new System.Drawing.Size(62, 17); + this.checkHighDefPriority.TabIndex = 4; + this.checkHighDefPriority.Text = "HD prio"; + this.checkHighDefPriority.UseVisualStyleBackColor = true; + // + // labelServiceProvider + // + this.labelServiceProvider.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.labelServiceProvider.AutoSize = true; + this.labelServiceProvider.Location = new System.Drawing.Point(93, 367); + this.labelServiceProvider.Name = "labelServiceProvider"; + this.labelServiceProvider.Size = new System.Drawing.Size(189, 13); + this.labelServiceProvider.TabIndex = 7; + this.labelServiceProvider.Text = "No service provider has been selected"; + // + // buttonSelectServiceProvider + // + this.buttonSelectServiceProvider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonSelectServiceProvider.Location = new System.Drawing.Point(12, 361); + this.buttonSelectServiceProvider.Name = "buttonSelectServiceProvider"; + this.buttonSelectServiceProvider.Size = new System.Drawing.Size(75, 25); + this.buttonSelectServiceProvider.TabIndex = 6; + this.buttonSelectServiceProvider.Text = "Select..."; + this.buttonSelectServiceProvider.UseVisualStyleBackColor = true; + this.buttonSelectServiceProvider.Click += new System.EventHandler(this.buttonSelectServiceProvider_Click); + // + // FormLogos + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(484, 411); + this.Controls.Add(this.buttonSelectServiceProvider); + this.Controls.Add(this.labelServiceProvider); + this.Controls.Add(this.checkHighDefPriority); + this.Controls.Add(this.checkFromCache); + this.Controls.Add(this.comboLogoSize); + this.Controls.Add(this.checkWebLogos); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.buttonLoad); + this.Controls.Add(this.splitContainer1); + this.Name = "FormLogos"; + this.Text = "Grid - Channel logos"; + this.Load += new System.EventHandler(this.FormLogos_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ListView listViewLocalLogos; + private System.Windows.Forms.ListView listViewWebLogos; + private System.Windows.Forms.Button buttonLoad; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel labelStatus; + private System.Windows.Forms.ToolStripProgressBar progressLocal; + private System.Windows.Forms.ToolStripProgressBar progressWeb; + private System.Windows.Forms.CheckBox checkWebLogos; + private System.Windows.Forms.ComboBox comboLogoSize; + private System.Windows.Forms.CheckBox checkFromCache; + private System.Windows.Forms.CheckBox checkHighDefPriority; + private System.Windows.Forms.Label labelServiceProvider; + private System.Windows.Forms.Button buttonSelectServiceProvider; + } +} + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.cs index dfaa2ec9..269bf7de 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormLogos.cs @@ -1,11 +1,11 @@ using Etsi.Ts102034.v010501.XmlSerialization; using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.DvbStpClient; -using Project.IpTv.UiServices.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.DvbStpClient; +using IpTviewr.UiServices.Forms; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,7 +17,7 @@ using System.Threading; using System.Windows.Forms; -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { public partial class FormLogos : Form { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs index 7d16380c..fb8eb134 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs @@ -1,114 +1,114 @@ -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - partial class FormStart - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.label1 = new System.Windows.Forms.Label(); - this.radioLogosGrid = new System.Windows.Forms.RadioButton(); - this.radioConsistency = new System.Windows.Forms.RadioButton(); - this.buttonGo = new System.Windows.Forms.Button(); - this.labelLoadingConfiguration = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 9); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(69, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Select a tool:"; - // - // radioLogosGrid - // - this.radioLogosGrid.AutoSize = true; - this.radioLogosGrid.Checked = true; - this.radioLogosGrid.Location = new System.Drawing.Point(12, 34); - this.radioLogosGrid.Name = "radioLogosGrid"; - this.radioLogosGrid.Size = new System.Drawing.Size(74, 17); - this.radioLogosGrid.TabIndex = 1; - this.radioLogosGrid.TabStop = true; - this.radioLogosGrid.Text = "Logos grid"; - this.radioLogosGrid.UseVisualStyleBackColor = true; - // - // radioConsistency - // - this.radioConsistency.AutoSize = true; - this.radioConsistency.Location = new System.Drawing.Point(12, 57); - this.radioConsistency.Name = "radioConsistency"; - this.radioConsistency.Size = new System.Drawing.Size(120, 17); - this.radioConsistency.TabIndex = 2; - this.radioConsistency.Text = "Consistency checks"; - this.radioConsistency.UseVisualStyleBackColor = true; - // - // buttonGo - // - this.buttonGo.Location = new System.Drawing.Point(12, 92); - this.buttonGo.Name = "buttonGo"; - this.buttonGo.Size = new System.Drawing.Size(100, 25); - this.buttonGo.TabIndex = 3; - this.buttonGo.Text = "Go"; - this.buttonGo.UseVisualStyleBackColor = true; - this.buttonGo.Click += new System.EventHandler(this.buttonGo_Click); - // - // labelLoadingConfiguration - // - this.labelLoadingConfiguration.AutoSize = true; - this.labelLoadingConfiguration.Location = new System.Drawing.Point(12, 239); - this.labelLoadingConfiguration.Name = "labelLoadingConfiguration"; - this.labelLoadingConfiguration.Size = new System.Drawing.Size(109, 13); - this.labelLoadingConfiguration.TabIndex = 4; - this.labelLoadingConfiguration.Text = "(Config load progress)"; - this.labelLoadingConfiguration.Visible = false; - // - // FormStart - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 261); - this.Controls.Add(this.labelLoadingConfiguration); - this.Controls.Add(this.buttonGo); - this.Controls.Add(this.radioConsistency); - this.Controls.Add(this.radioLogosGrid); - this.Controls.Add(this.label1); - this.Name = "FormStart"; - this.Text = "Select tool - Channel logos"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.RadioButton radioLogosGrid; - private System.Windows.Forms.RadioButton radioConsistency; - private System.Windows.Forms.Button buttonGo; - private System.Windows.Forms.Label labelLoadingConfiguration; - } +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + partial class FormStart + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.radioLogosGrid = new System.Windows.Forms.RadioButton(); + this.radioConsistency = new System.Windows.Forms.RadioButton(); + this.buttonGo = new System.Windows.Forms.Button(); + this.labelLoadingConfiguration = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(69, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Select a tool:"; + // + // radioLogosGrid + // + this.radioLogosGrid.AutoSize = true; + this.radioLogosGrid.Checked = true; + this.radioLogosGrid.Location = new System.Drawing.Point(12, 34); + this.radioLogosGrid.Name = "radioLogosGrid"; + this.radioLogosGrid.Size = new System.Drawing.Size(74, 17); + this.radioLogosGrid.TabIndex = 1; + this.radioLogosGrid.TabStop = true; + this.radioLogosGrid.Text = "Logos grid"; + this.radioLogosGrid.UseVisualStyleBackColor = true; + // + // radioConsistency + // + this.radioConsistency.AutoSize = true; + this.radioConsistency.Location = new System.Drawing.Point(12, 57); + this.radioConsistency.Name = "radioConsistency"; + this.radioConsistency.Size = new System.Drawing.Size(120, 17); + this.radioConsistency.TabIndex = 2; + this.radioConsistency.Text = "Consistency checks"; + this.radioConsistency.UseVisualStyleBackColor = true; + // + // buttonGo + // + this.buttonGo.Location = new System.Drawing.Point(12, 92); + this.buttonGo.Name = "buttonGo"; + this.buttonGo.Size = new System.Drawing.Size(100, 25); + this.buttonGo.TabIndex = 3; + this.buttonGo.Text = "Go"; + this.buttonGo.UseVisualStyleBackColor = true; + this.buttonGo.Click += new System.EventHandler(this.buttonGo_Click); + // + // labelLoadingConfiguration + // + this.labelLoadingConfiguration.AutoSize = true; + this.labelLoadingConfiguration.Location = new System.Drawing.Point(12, 239); + this.labelLoadingConfiguration.Name = "labelLoadingConfiguration"; + this.labelLoadingConfiguration.Size = new System.Drawing.Size(109, 13); + this.labelLoadingConfiguration.TabIndex = 4; + this.labelLoadingConfiguration.Text = "(Config load progress)"; + this.labelLoadingConfiguration.Visible = false; + // + // FormStart + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(284, 261); + this.Controls.Add(this.labelLoadingConfiguration); + this.Controls.Add(this.buttonGo); + this.Controls.Add(this.radioConsistency); + this.Controls.Add(this.radioLogosGrid); + this.Controls.Add(this.label1); + this.Name = "FormStart"; + this.Text = "Select tool - Channel logos"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RadioButton radioLogosGrid; + private System.Windows.Forms.RadioButton radioConsistency; + private System.Windows.Forms.Button buttonGo; + private System.Windows.Forms.Label labelLoadingConfiguration; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs index 5685ff7b..fba2fba8 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs @@ -1,84 +1,84 @@ -using Project.IpTv.UiServices.Configuration; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - public partial class FormStart : Form - { - public FormStart() - { - InitializeComponent(); - Icon = Properties.Resources.IPTViewr_Tool; - } // constructor - - private void buttonGo_Click(object sender, EventArgs e) - { - Form form; - - if (AppUiConfiguration.Current == null) - { - labelLoadingConfiguration.Text = "Loading configuration..."; - labelLoadingConfiguration.Visible = true; - labelLoadingConfiguration.Refresh(); - if (!LoadConfiguration()) return; - - labelLoadingConfiguration.Visible = false; - } // if - - if (radioLogosGrid.Checked) form = new FormLogos(); - else if (radioConsistency.Checked) form = new FormConsistency(); - else form = null; - - if (form == null) return; - - form.Show(); - } // buttonGo_Click - - private bool LoadConfiguration() - { - var result = GetConfiguration(); - if (!result.IsOk) - { - LoadDisplayProgress(result.Message); - Program.HandleException(this, result.Caption, result.Message, result.InnerException); - return false; - }; - - return true; - } // LoadConfiguration - - private InitializationResult GetConfiguration() - { - InitializationResult result; - - try - { - result = AppUiConfiguration.Load(null, LoadDisplayProgress); - if (result.IsError) return result; - - return InitializationResult.Ok; - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = "Application configuration error", - Message = "An unexpected error has occured while loading the application configuration.", - InnerException = ex - }; - } // try-catch - } // GetConfiguration - private void LoadDisplayProgress(string text) - { - labelLoadingConfiguration.Text = text; - labelLoadingConfiguration.Refresh(); - } // LoadDisplayProgress - } // class FormStart -} // namespace +using IpTviewr.UiServices.Configuration; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + public partial class FormStart : Form + { + public FormStart() + { + InitializeComponent(); + Icon = Properties.Resources.IPTViewr_Tool; + } // constructor + + private void buttonGo_Click(object sender, EventArgs e) + { + Form form; + + if (AppUiConfiguration.Current == null) + { + labelLoadingConfiguration.Text = "Loading configuration..."; + labelLoadingConfiguration.Visible = true; + labelLoadingConfiguration.Refresh(); + if (!LoadConfiguration()) return; + + labelLoadingConfiguration.Visible = false; + } // if + + if (radioLogosGrid.Checked) form = new FormLogos(); + else if (radioConsistency.Checked) form = new FormConsistency(); + else form = null; + + if (form == null) return; + + form.Show(); + } // buttonGo_Click + + private bool LoadConfiguration() + { + var result = GetConfiguration(); + if (!result.IsOk) + { + LoadDisplayProgress(result.Message); + Program.HandleException(this, result.Caption, result.Message, result.InnerException); + return false; + }; + + return true; + } // LoadConfiguration + + private InitializationResult GetConfiguration() + { + InitializationResult result; + + try + { + result = AppUiConfiguration.Load(null, LoadDisplayProgress); + if (result.IsError) return result; + + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = "Application configuration error", + Message = "An unexpected error has occured while loading the application configuration.", + InnerException = ex + }; + } // try-catch + } // GetConfiguration + private void LoadDisplayProgress(string text) + { + labelLoadingConfiguration.Text = text; + labelLoadingConfiguration.Refresh(); + } // LoadDisplayProgress + } // class FormStart +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs index 5e1822bd..a5fcca00 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs @@ -1,11 +1,11 @@ using Microsoft.SqlServer.MessageBox; -using Project.IpTv.Common; +using IpTviewr.Common; using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; -namespace Project.IpTv.Internal.Tools.ChannelLogos +namespace IpTviewr.Internal.Tools.ChannelLogos { static class Program { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs index f96ca1e4..8f50949e 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs @@ -1,73 +1,73 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Internal.Tools.ChannelLogos.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Internal.Tools.ChannelLogos.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon IPTViewr_Tool { - get { - object obj = ResourceManager.GetObject("IPTViewr_Tool", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.ChannelLogos.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.ChannelLogos.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon IPTViewr_Tool { + get { + object obj = ResourceManager.GetObject("IPTViewr_Tool", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs index ee5acee8..b44956a1 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Internal.Tools.ChannelLogos.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.ChannelLogos.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs index 3bb91804..42655d58 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs @@ -1,59 +1,59 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace Project.IpTv.Internal.Tools.ChannelLogos -{ - public class WebClientEx : WebClient - { - public WebClientEx(CookieContainer container) - { - this.container = container; - } - - public CookieContainer CookieContainer - { - get { return container; } - set { container = value; } - } - - private CookieContainer container; - - protected override WebRequest GetWebRequest(Uri address) - { - WebRequest r = base.GetWebRequest(address); - var request = r as HttpWebRequest; - if (request != null) - { - request.CookieContainer = container; - } - return r; - } - - protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result) - { - WebResponse response = base.GetWebResponse(request, result); - ReadCookies(response); - return response; - } - - protected override WebResponse GetWebResponse(WebRequest request) - { - WebResponse response = base.GetWebResponse(request); - ReadCookies(response); - return response; - } - - private void ReadCookies(WebResponse r) - { - var response = r as HttpWebResponse; - if (response != null) - { - CookieCollection cookies = response.Cookies; - container.Add(cookies); - } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + public class WebClientEx : WebClient + { + public WebClientEx(CookieContainer container) + { + this.container = container; + } + + public CookieContainer CookieContainer + { + get { return container; } + set { container = value; } + } + + private CookieContainer container; + + protected override WebRequest GetWebRequest(Uri address) + { + WebRequest r = base.GetWebRequest(address); + var request = r as HttpWebRequest; + if (request != null) + { + request.CookieContainer = container; + } + return r; + } + + protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result) + { + WebResponse response = base.GetWebResponse(request, result); + ReadCookies(response); + return response; + } + + protected override WebResponse GetWebResponse(WebRequest request) + { + WebResponse response = base.GetWebResponse(request); + ReadCookies(response); + return response; + } + + private void ReadCookies(WebResponse r) + { + var response = r as HttpWebResponse; + if (response != null) + { + CookieCollection cookies = response.Cookies; + container.Add(cookies); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs index 483498da..7102704e 100644 --- a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs @@ -1,70 +1,70 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using Project.IpTv.Common.Serialization; -/* -using Project.IpTv.Services.EPG; -using Project.IpTv.Services.EPG.Serialization; -using Project.IpTv.Services.EPG.TvAnytime; -using Project.IpTv.Services.SqlServerCE; -using Project.IpTv.UiServices.EPG; -*/ -using System; -using System.Collections.Generic; -using System.Data.SqlServerCe; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Internal.Tools.ConsoleExperiments -{ - class Program - { - static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - //EpgInfoDownload.Experiment(); - //EpgInfoDownload.GetJsonSchema(); - //EpgInfoDownload.ExploreJsonValues(); - //EpgInfoDownload.DisplayJsonData(); - - return; - - DateTime start; - DateTime end; - DateTime now; - - start = new DateTime(2015, 03, 05, 20, 35, 0); - now = new DateTime(2015, 03, 06, 7, 20, 0); - end = new DateTime(2015, 03, 07, 10, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - - start = new DateTime(2015, 03, 05, 20, 35, 0); - now = new DateTime(2015, 03, 06, 7, 20, 0); - end = new DateTime(2015, 03, 06, 10, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - - start = new DateTime(2015, 03, 06, 7, 35, 0); - now = new DateTime(2015, 03, 06, 17, 20, 0); - end = new DateTime(2015, 03, 07, 10, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - - start = new DateTime(2015, 03, 06, 7, 35, 0); - now = new DateTime(2015, 03, 06, 17, 20, 0); - end = new DateTime(2015, 03, 06, 22, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - } - - } // class Program +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common; +using IpTviewr.Common.Serialization; +/* +using IpTviewr.Services.EPG; +using IpTviewr.Services.EPG.Serialization; +using IpTviewr.Services.EPG.TvAnytime; +using IpTviewr.Services.SqlServerCE; +using IpTviewr.UiServices.EPG; +*/ +using System; +using System.Collections.Generic; +using System.Data.SqlServerCe; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Internal.Tools.ConsoleExperiments +{ + class Program + { + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + //EpgInfoDownload.Experiment(); + //EpgInfoDownload.GetJsonSchema(); + //EpgInfoDownload.ExploreJsonValues(); + //EpgInfoDownload.DisplayJsonData(); + + return; + + DateTime start; + DateTime end; + DateTime now; + + start = new DateTime(2015, 03, 05, 20, 35, 0); + now = new DateTime(2015, 03, 06, 7, 20, 0); + end = new DateTime(2015, 03, 07, 10, 15, 0); + + Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); + + start = new DateTime(2015, 03, 05, 20, 35, 0); + now = new DateTime(2015, 03, 06, 7, 20, 0); + end = new DateTime(2015, 03, 06, 10, 15, 0); + + Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); + + start = new DateTime(2015, 03, 06, 7, 35, 0); + now = new DateTime(2015, 03, 06, 17, 20, 0); + end = new DateTime(2015, 03, 07, 10, 15, 0); + + Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); + + start = new DateTime(2015, 03, 06, 7, 35, 0); + now = new DateTime(2015, 03, 06, 17, 20, 0); + end = new DateTime(2015, 03, 06, 22, 15, 0); + + Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); + } + + } // class Program } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs index 3cd3852a..481185a5 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs @@ -1,42 +1,42 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Services.EPG.EpgDownloader -{ - partial class EpgDownloadForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Text = "Form1"; - } - - #endregion - } -} // namespace - +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Services.EPG.EpgDownloader +{ + partial class EpgDownloadForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "Form1"; + } + + #endregion + } +} // namespace + diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs index 1dd6b863..c0a9c7a2 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs @@ -1,22 +1,22 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Services.EPG.EpgDownloader -{ - public partial class EpgDownloadForm : Form - { - public EpgDownloadForm() - { - InitializeComponent(); - } - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Services.EPG.EpgDownloader +{ + public partial class EpgDownloadForm : Form + { + public EpgDownloadForm() + { + InitializeComponent(); + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs index 9fdf9205..5a7a1ea0 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs @@ -1,24 +1,24 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; - -namespace Project.IpTv.Services.EPG.EpgDownloader -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new EpgDownloadForm()); - } // Main - } // static class Program -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace IpTviewr.Services.EPG.EpgDownloader +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new EpgDownloadForm()); + } // Main + } // static class Program +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs index d4810d4a..2cead694 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs @@ -1,73 +1,73 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Services.EPG.EpgDownloader.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Services.EPG.EpgDownloader.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon EpgDownload { - get { - object obj = ResourceManager.GetObject("EpgDownload", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Services.EPG.EpgDownloader.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.EPG.EpgDownloader.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon EpgDownload { + get { + object obj = ResourceManager.GetObject("EpgDownload", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs index b6fa7b35..0560f57e 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Services.EPG.EpgDownloader.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Services.EPG.EpgDownloader.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs index 71f7b93a..3f0b44dd 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs @@ -1,122 +1,122 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - partial class LaunchForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.groupBoxTools = new System.Windows.Forms.GroupBox(); - this.radioMulticastExplorer = new System.Windows.Forms.RadioButton(); - this.radioSimpleDownload = new System.Windows.Forms.RadioButton(); - this.buttonExecute = new System.Windows.Forms.Button(); - this.radioOpchExplorer = new System.Windows.Forms.RadioButton(); - this.groupBoxTools.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxTools - // - this.groupBoxTools.Controls.Add(this.radioOpchExplorer); - this.groupBoxTools.Controls.Add(this.radioMulticastExplorer); - this.groupBoxTools.Controls.Add(this.radioSimpleDownload); - this.groupBoxTools.Location = new System.Drawing.Point(12, 12); - this.groupBoxTools.Name = "groupBoxTools"; - this.groupBoxTools.Size = new System.Drawing.Size(393, 207); - this.groupBoxTools.TabIndex = 0; - this.groupBoxTools.TabStop = false; - this.groupBoxTools.Text = "Select tool"; - // - // radioMulticastExplorer - // - this.radioMulticastExplorer.AutoSize = true; - this.radioMulticastExplorer.Location = new System.Drawing.Point(6, 42); - this.radioMulticastExplorer.Name = "radioMulticastExplorer"; - this.radioMulticastExplorer.Size = new System.Drawing.Size(144, 17); - this.radioMulticastExplorer.TabIndex = 1; - this.radioMulticastExplorer.TabStop = true; - this.radioMulticastExplorer.Text = "Multicast Stream Explorer"; - this.radioMulticastExplorer.UseVisualStyleBackColor = true; - // - // radioSimpleDownload - // - this.radioSimpleDownload.AutoSize = true; - this.radioSimpleDownload.Location = new System.Drawing.Point(6, 19); - this.radioSimpleDownload.Name = "radioSimpleDownload"; - this.radioSimpleDownload.Size = new System.Drawing.Size(204, 17); - this.radioSimpleDownload.TabIndex = 0; - this.radioSimpleDownload.TabStop = true; - this.radioSimpleDownload.Text = "Simple DVB-STP Payload downloader"; - this.radioSimpleDownload.UseVisualStyleBackColor = true; - // - // buttonExecute - // - this.buttonExecute.Location = new System.Drawing.Point(305, 225); - this.buttonExecute.Name = "buttonExecute"; - this.buttonExecute.Size = new System.Drawing.Size(100, 25); - this.buttonExecute.TabIndex = 1; - this.buttonExecute.Text = "Execute"; - this.buttonExecute.UseVisualStyleBackColor = true; - this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click); - // - // radioOpchExplorer - // - this.radioOpchExplorer.AutoSize = true; - this.radioOpchExplorer.Location = new System.Drawing.Point(6, 65); - this.radioOpchExplorer.Name = "radioOpchExplorer"; - this.radioOpchExplorer.Size = new System.Drawing.Size(132, 17); - this.radioOpchExplorer.TabIndex = 2; - this.radioOpchExplorer.TabStop = true; - this.radioOpchExplorer.Text = "OPCH Stream Explorer"; - this.radioOpchExplorer.UseVisualStyleBackColor = true; - // - // LaunchForm - // - this.AcceptButton = this.buttonExecute; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(417, 262); - this.Controls.Add(this.buttonExecute); - this.Controls.Add(this.groupBoxTools); - this.Name = "LaunchForm"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "LaunchForm"; - this.groupBoxTools.ResumeLayout(false); - this.groupBoxTools.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxTools; - private System.Windows.Forms.Button buttonExecute; - private System.Windows.Forms.RadioButton radioSimpleDownload; - private System.Windows.Forms.RadioButton radioMulticastExplorer; - private System.Windows.Forms.RadioButton radioOpchExplorer; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class LaunchForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBoxTools = new System.Windows.Forms.GroupBox(); + this.radioMulticastExplorer = new System.Windows.Forms.RadioButton(); + this.radioSimpleDownload = new System.Windows.Forms.RadioButton(); + this.buttonExecute = new System.Windows.Forms.Button(); + this.radioOpchExplorer = new System.Windows.Forms.RadioButton(); + this.groupBoxTools.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxTools + // + this.groupBoxTools.Controls.Add(this.radioOpchExplorer); + this.groupBoxTools.Controls.Add(this.radioMulticastExplorer); + this.groupBoxTools.Controls.Add(this.radioSimpleDownload); + this.groupBoxTools.Location = new System.Drawing.Point(12, 12); + this.groupBoxTools.Name = "groupBoxTools"; + this.groupBoxTools.Size = new System.Drawing.Size(393, 207); + this.groupBoxTools.TabIndex = 0; + this.groupBoxTools.TabStop = false; + this.groupBoxTools.Text = "Select tool"; + // + // radioMulticastExplorer + // + this.radioMulticastExplorer.AutoSize = true; + this.radioMulticastExplorer.Location = new System.Drawing.Point(6, 42); + this.radioMulticastExplorer.Name = "radioMulticastExplorer"; + this.radioMulticastExplorer.Size = new System.Drawing.Size(144, 17); + this.radioMulticastExplorer.TabIndex = 1; + this.radioMulticastExplorer.TabStop = true; + this.radioMulticastExplorer.Text = "Multicast Stream Explorer"; + this.radioMulticastExplorer.UseVisualStyleBackColor = true; + // + // radioSimpleDownload + // + this.radioSimpleDownload.AutoSize = true; + this.radioSimpleDownload.Location = new System.Drawing.Point(6, 19); + this.radioSimpleDownload.Name = "radioSimpleDownload"; + this.radioSimpleDownload.Size = new System.Drawing.Size(204, 17); + this.radioSimpleDownload.TabIndex = 0; + this.radioSimpleDownload.TabStop = true; + this.radioSimpleDownload.Text = "Simple DVB-STP Payload downloader"; + this.radioSimpleDownload.UseVisualStyleBackColor = true; + // + // buttonExecute + // + this.buttonExecute.Location = new System.Drawing.Point(305, 225); + this.buttonExecute.Name = "buttonExecute"; + this.buttonExecute.Size = new System.Drawing.Size(100, 25); + this.buttonExecute.TabIndex = 1; + this.buttonExecute.Text = "Execute"; + this.buttonExecute.UseVisualStyleBackColor = true; + this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click); + // + // radioOpchExplorer + // + this.radioOpchExplorer.AutoSize = true; + this.radioOpchExplorer.Location = new System.Drawing.Point(6, 65); + this.radioOpchExplorer.Name = "radioOpchExplorer"; + this.radioOpchExplorer.Size = new System.Drawing.Size(132, 17); + this.radioOpchExplorer.TabIndex = 2; + this.radioOpchExplorer.TabStop = true; + this.radioOpchExplorer.Text = "OPCH Stream Explorer"; + this.radioOpchExplorer.UseVisualStyleBackColor = true; + // + // LaunchForm + // + this.AcceptButton = this.buttonExecute; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(417, 262); + this.Controls.Add(this.buttonExecute); + this.Controls.Add(this.groupBoxTools); + this.Name = "LaunchForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Text = "LaunchForm"; + this.groupBoxTools.ResumeLayout(false); + this.groupBoxTools.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxTools; + private System.Windows.Forms.Button buttonExecute; + private System.Windows.Forms.RadioButton radioSimpleDownload; + private System.Windows.Forms.RadioButton radioMulticastExplorer; + private System.Windows.Forms.RadioButton radioOpchExplorer; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs index ae694660..e68a3666 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs @@ -1,37 +1,37 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - public partial class LaunchForm : Form - { - public LaunchForm() - { - InitializeComponent(); - this.Icon = Properties.Resources.GuiTools; - } // constructor - - private void buttonExecute_Click(object sender, EventArgs e) - { - Form form = null; - - if (radioSimpleDownload.Checked) form = new SimpleDvbStpDownloadForm(); - else if (radioMulticastExplorer.Checked) form = new MulticastStreamExplorerForm(); - else if (radioOpchExplorer.Checked) form = new OpchExplorerForm(); - - if (form != null) - { - form.Show(); - } // if - } // buttonExecute_Click - } // class LaunchForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class LaunchForm : Form + { + public LaunchForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.GuiTools; + } // constructor + + private void buttonExecute_Click(object sender, EventArgs e) + { + Form form = null; + + if (radioSimpleDownload.Checked) form = new SimpleDvbStpDownloadForm(); + else if (radioMulticastExplorer.Checked) form = new MulticastStreamExplorerForm(); + else if (radioOpchExplorer.Checked) form = new OpchExplorerForm(); + + if (form != null) + { + form.Show(); + } // if + } // buttonExecute_Click + } // class LaunchForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs index 5d982186..c3b499bd 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs @@ -1,225 +1,225 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - partial class MulticastStreamExplorerForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.buttonStart = new System.Windows.Forms.Button(); - this.buttonStop = new System.Windows.Forms.Button(); - this.textPort = new System.Windows.Forms.TextBox(); - this.labelPort = new System.Windows.Forms.Label(); - this.textIpAddress = new System.Windows.Forms.TextBox(); - this.labelIpAddress = new System.Windows.Forms.Label(); - this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); - this.labelBaseDumpFolder = new System.Windows.Forms.Label(); - this.checkDumpDatagrams = new System.Windows.Forms.CheckBox(); - this.labelDataReception = new System.Windows.Forms.Label(); - this.labelReceiving = new System.Windows.Forms.Label(); - this.labelDatagramCount = new System.Windows.Forms.Label(); - this.labelByteCount = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // buttonStart - // - this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonStart.Image = global::Project.IpTv.Internal.Tools.GuiTools.Properties.Resources.Action_Play_LG_16x16; - this.buttonStart.Location = new System.Drawing.Point(466, 12); - this.buttonStart.Name = "buttonStart"; - this.buttonStart.Size = new System.Drawing.Size(100, 25); - this.buttonStart.TabIndex = 0; - this.buttonStart.Text = "Start"; - this.buttonStart.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.buttonStart.UseVisualStyleBackColor = true; - this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); - // - // buttonStop - // - this.buttonStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonStop.Image = global::Project.IpTv.Internal.Tools.GuiTools.Properties.Resources.Action_Cancel_Red_16x16; - this.buttonStop.Location = new System.Drawing.Point(572, 12); - this.buttonStop.Name = "buttonStop"; - this.buttonStop.Size = new System.Drawing.Size(100, 25); - this.buttonStop.TabIndex = 1; - this.buttonStop.Text = "Stop"; - this.buttonStop.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.buttonStop.UseVisualStyleBackColor = true; - this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); - // - // textPort - // - this.textPort.Location = new System.Drawing.Point(213, 15); - this.textPort.Name = "textPort"; - this.textPort.Size = new System.Drawing.Size(50, 20); - this.textPort.TabIndex = 19; - this.textPort.Text = "3937"; - // - // labelPort - // - this.labelPort.AutoSize = true; - this.labelPort.Location = new System.Drawing.Point(181, 18); - this.labelPort.Name = "labelPort"; - this.labelPort.Size = new System.Drawing.Size(26, 13); - this.labelPort.TabIndex = 18; - this.labelPort.Text = "Port"; - // - // textIpAddress - // - this.textIpAddress.Location = new System.Drawing.Point(75, 15); - this.textIpAddress.Name = "textIpAddress"; - this.textIpAddress.Size = new System.Drawing.Size(100, 20); - this.textIpAddress.TabIndex = 17; - this.textIpAddress.Text = "239.0.2.129"; - // - // labelIpAddress - // - this.labelIpAddress.AutoSize = true; - this.labelIpAddress.Location = new System.Drawing.Point(12, 18); - this.labelIpAddress.Name = "labelIpAddress"; - this.labelIpAddress.Size = new System.Drawing.Size(57, 13); - this.labelIpAddress.TabIndex = 16; - this.labelIpAddress.Text = "IP address"; - // - // textBaseDumpFolder - // - this.textBaseDumpFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBaseDumpFolder.Location = new System.Drawing.Point(237, 43); - this.textBaseDumpFolder.Name = "textBaseDumpFolder"; - this.textBaseDumpFolder.Size = new System.Drawing.Size(435, 20); - this.textBaseDumpFolder.TabIndex = 22; - // - // labelBaseDumpFolder - // - this.labelBaseDumpFolder.AutoSize = true; - this.labelBaseDumpFolder.Location = new System.Drawing.Point(124, 46); - this.labelBaseDumpFolder.Name = "labelBaseDumpFolder"; - this.labelBaseDumpFolder.Size = new System.Drawing.Size(107, 13); - this.labelBaseDumpFolder.TabIndex = 21; - this.labelBaseDumpFolder.Text = "Base folder for dump:"; - // - // checkDumpDatagrams - // - this.checkDumpDatagrams.AutoSize = true; - this.checkDumpDatagrams.Location = new System.Drawing.Point(12, 45); - this.checkDumpDatagrams.Name = "checkDumpDatagrams"; - this.checkDumpDatagrams.Size = new System.Drawing.Size(106, 17); - this.checkDumpDatagrams.TabIndex = 20; - this.checkDumpDatagrams.Text = "Dump datagrams"; - this.checkDumpDatagrams.UseVisualStyleBackColor = true; - this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); - // - // labelDataReception - // - this.labelDataReception.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDataReception.Font = new System.Drawing.Font("Wingdings", 9F); - this.labelDataReception.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDataReception.Location = new System.Drawing.Point(12, 390); - this.labelDataReception.Name = "labelDataReception"; - this.labelDataReception.Size = new System.Drawing.Size(100, 13); - this.labelDataReception.TabIndex = 24; - this.labelDataReception.Text = "l"; - this.labelDataReception.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // labelReceiving - // - this.labelReceiving.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelReceiving.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelReceiving.Location = new System.Drawing.Point(118, 390); - this.labelReceiving.Name = "labelReceiving"; - this.labelReceiving.Size = new System.Drawing.Size(175, 13); - this.labelReceiving.TabIndex = 23; - this.labelReceiving.Text = "Data reception is in progress"; - // - // labelDatagramCount - // - this.labelDatagramCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDatagramCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDatagramCount.Location = new System.Drawing.Point(299, 390); - this.labelDatagramCount.Name = "labelDatagramCount"; - this.labelDatagramCount.Size = new System.Drawing.Size(175, 13); - this.labelDatagramCount.TabIndex = 25; - this.labelDatagramCount.Text = "(Count)"; - // - // labelByteCount - // - this.labelByteCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelByteCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelByteCount.Location = new System.Drawing.Point(480, 390); - this.labelByteCount.Name = "labelByteCount"; - this.labelByteCount.Size = new System.Drawing.Size(175, 13); - this.labelByteCount.TabIndex = 26; - this.labelByteCount.Text = "(Byte count)"; - // - // MulticastStreamExplorerForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(684, 412); - this.Controls.Add(this.labelByteCount); - this.Controls.Add(this.labelDatagramCount); - this.Controls.Add(this.labelDataReception); - this.Controls.Add(this.labelReceiving); - this.Controls.Add(this.textBaseDumpFolder); - this.Controls.Add(this.labelBaseDumpFolder); - this.Controls.Add(this.checkDumpDatagrams); - this.Controls.Add(this.textPort); - this.Controls.Add(this.labelPort); - this.Controls.Add(this.textIpAddress); - this.Controls.Add(this.labelIpAddress); - this.Controls.Add(this.buttonStop); - this.Controls.Add(this.buttonStart); - this.Name = "MulticastStreamExplorerForm"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "Multicast Stream Explorer"; - this.Load += new System.EventHandler(this.MulticastStreamExplorerForm_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button buttonStart; - private System.Windows.Forms.Button buttonStop; - private System.Windows.Forms.TextBox textPort; - private System.Windows.Forms.Label labelPort; - private System.Windows.Forms.TextBox textIpAddress; - private System.Windows.Forms.Label labelIpAddress; - private System.Windows.Forms.TextBox textBaseDumpFolder; - private System.Windows.Forms.Label labelBaseDumpFolder; - private System.Windows.Forms.CheckBox checkDumpDatagrams; - private System.Windows.Forms.Label labelDataReception; - private System.Windows.Forms.Label labelReceiving; - private System.Windows.Forms.Label labelDatagramCount; - private System.Windows.Forms.Label labelByteCount; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class MulticastStreamExplorerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonStart = new System.Windows.Forms.Button(); + this.buttonStop = new System.Windows.Forms.Button(); + this.textPort = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.textIpAddress = new System.Windows.Forms.TextBox(); + this.labelIpAddress = new System.Windows.Forms.Label(); + this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); + this.labelBaseDumpFolder = new System.Windows.Forms.Label(); + this.checkDumpDatagrams = new System.Windows.Forms.CheckBox(); + this.labelDataReception = new System.Windows.Forms.Label(); + this.labelReceiving = new System.Windows.Forms.Label(); + this.labelDatagramCount = new System.Windows.Forms.Label(); + this.labelByteCount = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // buttonStart + // + this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStart.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Play_LG_16x16; + this.buttonStart.Location = new System.Drawing.Point(466, 12); + this.buttonStart.Name = "buttonStart"; + this.buttonStart.Size = new System.Drawing.Size(100, 25); + this.buttonStart.TabIndex = 0; + this.buttonStart.Text = "Start"; + this.buttonStart.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStart.UseVisualStyleBackColor = true; + this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); + // + // buttonStop + // + this.buttonStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStop.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Cancel_Red_16x16; + this.buttonStop.Location = new System.Drawing.Point(572, 12); + this.buttonStop.Name = "buttonStop"; + this.buttonStop.Size = new System.Drawing.Size(100, 25); + this.buttonStop.TabIndex = 1; + this.buttonStop.Text = "Stop"; + this.buttonStop.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStop.UseVisualStyleBackColor = true; + this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); + // + // textPort + // + this.textPort.Location = new System.Drawing.Point(213, 15); + this.textPort.Name = "textPort"; + this.textPort.Size = new System.Drawing.Size(50, 20); + this.textPort.TabIndex = 19; + this.textPort.Text = "3937"; + // + // labelPort + // + this.labelPort.AutoSize = true; + this.labelPort.Location = new System.Drawing.Point(181, 18); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(26, 13); + this.labelPort.TabIndex = 18; + this.labelPort.Text = "Port"; + // + // textIpAddress + // + this.textIpAddress.Location = new System.Drawing.Point(75, 15); + this.textIpAddress.Name = "textIpAddress"; + this.textIpAddress.Size = new System.Drawing.Size(100, 20); + this.textIpAddress.TabIndex = 17; + this.textIpAddress.Text = "239.0.2.129"; + // + // labelIpAddress + // + this.labelIpAddress.AutoSize = true; + this.labelIpAddress.Location = new System.Drawing.Point(12, 18); + this.labelIpAddress.Name = "labelIpAddress"; + this.labelIpAddress.Size = new System.Drawing.Size(57, 13); + this.labelIpAddress.TabIndex = 16; + this.labelIpAddress.Text = "IP address"; + // + // textBaseDumpFolder + // + this.textBaseDumpFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBaseDumpFolder.Location = new System.Drawing.Point(237, 43); + this.textBaseDumpFolder.Name = "textBaseDumpFolder"; + this.textBaseDumpFolder.Size = new System.Drawing.Size(435, 20); + this.textBaseDumpFolder.TabIndex = 22; + // + // labelBaseDumpFolder + // + this.labelBaseDumpFolder.AutoSize = true; + this.labelBaseDumpFolder.Location = new System.Drawing.Point(124, 46); + this.labelBaseDumpFolder.Name = "labelBaseDumpFolder"; + this.labelBaseDumpFolder.Size = new System.Drawing.Size(107, 13); + this.labelBaseDumpFolder.TabIndex = 21; + this.labelBaseDumpFolder.Text = "Base folder for dump:"; + // + // checkDumpDatagrams + // + this.checkDumpDatagrams.AutoSize = true; + this.checkDumpDatagrams.Location = new System.Drawing.Point(12, 45); + this.checkDumpDatagrams.Name = "checkDumpDatagrams"; + this.checkDumpDatagrams.Size = new System.Drawing.Size(106, 17); + this.checkDumpDatagrams.TabIndex = 20; + this.checkDumpDatagrams.Text = "Dump datagrams"; + this.checkDumpDatagrams.UseVisualStyleBackColor = true; + this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); + // + // labelDataReception + // + this.labelDataReception.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelDataReception.Font = new System.Drawing.Font("Wingdings", 9F); + this.labelDataReception.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelDataReception.Location = new System.Drawing.Point(12, 390); + this.labelDataReception.Name = "labelDataReception"; + this.labelDataReception.Size = new System.Drawing.Size(100, 13); + this.labelDataReception.TabIndex = 24; + this.labelDataReception.Text = "l"; + this.labelDataReception.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // labelReceiving + // + this.labelReceiving.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelReceiving.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelReceiving.Location = new System.Drawing.Point(118, 390); + this.labelReceiving.Name = "labelReceiving"; + this.labelReceiving.Size = new System.Drawing.Size(175, 13); + this.labelReceiving.TabIndex = 23; + this.labelReceiving.Text = "Data reception is in progress"; + // + // labelDatagramCount + // + this.labelDatagramCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelDatagramCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelDatagramCount.Location = new System.Drawing.Point(299, 390); + this.labelDatagramCount.Name = "labelDatagramCount"; + this.labelDatagramCount.Size = new System.Drawing.Size(175, 13); + this.labelDatagramCount.TabIndex = 25; + this.labelDatagramCount.Text = "(Count)"; + // + // labelByteCount + // + this.labelByteCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelByteCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelByteCount.Location = new System.Drawing.Point(480, 390); + this.labelByteCount.Name = "labelByteCount"; + this.labelByteCount.Size = new System.Drawing.Size(175, 13); + this.labelByteCount.TabIndex = 26; + this.labelByteCount.Text = "(Byte count)"; + // + // MulticastStreamExplorerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.labelByteCount); + this.Controls.Add(this.labelDatagramCount); + this.Controls.Add(this.labelDataReception); + this.Controls.Add(this.labelReceiving); + this.Controls.Add(this.textBaseDumpFolder); + this.Controls.Add(this.labelBaseDumpFolder); + this.Controls.Add(this.checkDumpDatagrams); + this.Controls.Add(this.textPort); + this.Controls.Add(this.labelPort); + this.Controls.Add(this.textIpAddress); + this.Controls.Add(this.labelIpAddress); + this.Controls.Add(this.buttonStop); + this.Controls.Add(this.buttonStart); + this.Name = "MulticastStreamExplorerForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Text = "Multicast Stream Explorer"; + this.Load += new System.EventHandler(this.MulticastStreamExplorerForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonStart; + private System.Windows.Forms.Button buttonStop; + private System.Windows.Forms.TextBox textPort; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.TextBox textIpAddress; + private System.Windows.Forms.Label labelIpAddress; + private System.Windows.Forms.TextBox textBaseDumpFolder; + private System.Windows.Forms.Label labelBaseDumpFolder; + private System.Windows.Forms.CheckBox checkDumpDatagrams; + private System.Windows.Forms.Label labelDataReception; + private System.Windows.Forms.Label labelReceiving; + private System.Windows.Forms.Label labelDatagramCount; + private System.Windows.Forms.Label labelByteCount; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs index c599275a..b9bd021f 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs @@ -1,173 +1,173 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - public partial class MulticastStreamExplorerForm : Form - { - private BackgroundWorker Worker; - private IPAddress MulticastIpAddress; - private int MulticastPort; - private int DatagramCount; - private long DatagramByteCount; - private string DumpFolder; - - public MulticastStreamExplorerForm() - { - InitializeComponent(); - this.Icon = Properties.Resources.GuiTools; - } // constructor - - private void MulticastStreamExplorerForm_Load(object sender, EventArgs e) - { - var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); - var folder = string.Format("IPTV\\{0} {1}\\Data", appExe, Application.ProductVersion); - var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); - textBaseDumpFolder.Text = baseFolder; - - checkDumpDatagrams.Checked = true; - labelDataReception.Visible = false; - labelReceiving.Visible = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; - - buttonStop.Enabled = false; - } // MulticastStreamExplorerForm_Load - - private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) - { - labelBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; - textBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; - } // checkDumpPayloads_CheckedChanged - - private void buttonStart_Click(object sender, EventArgs e) - { - string context = null; - - try - { - context = "IP Address"; - var input = textIpAddress.Text.Trim(); - MulticastIpAddress = IPAddress.Parse(input); - - context = "Port"; - MulticastPort = Program.ParseNumber(textPort.Text); - - context = "Dump folder"; - if (checkDumpDatagrams.Checked) - { - DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("MulticastStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); - Directory.CreateDirectory(DumpFolder); - } - else - { - DumpFolder = null; - } // if-else - } - catch (Exception ex) - { - MyApplication.HandleException(this, context, ex); - return; - } // try-catch - - DatagramCount = 0; - DatagramByteCount = 0; - buttonStop.Enabled = true; - checkDumpDatagrams.Enabled = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; - - Worker = new BackgroundWorker() - { - WorkerReportsProgress = true, - WorkerSupportsCancellation = true - }; - Worker.DoWork += Worker_DoWork; - Worker.ProgressChanged += Worker_ProgressChanged; - Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - Worker.RunWorkerAsync(); - } // buttonStart_Click - - private void buttonStop_Click(object sender, EventArgs e) - { - buttonStop.Enabled = false; - buttonStop.Text = "Cancelling"; - buttonStop.Image = Properties.Resources.Status_Wait_16x16; - Worker.CancelAsync(); - } // buttonStop_Click - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - buttonStop.Text = "Stop"; - buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; - labelDataReception.Visible = false; - labelReceiving.Visible = false; - - Worker.Dispose(); - Worker = null; - } // Worker_RunWorkerCompleted - - void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - var data = e.UserState as byte[]; - - labelDataReception.Visible = true; - labelReceiving.Visible = true; - - if (DumpFolder != null) - { - var path = Path.Combine(DumpFolder, string.Format("{0:00000000} ~ 0x{0:X}.udp.bin", DatagramCount)); - File.WriteAllBytes(path, data); - } // if - - DatagramCount++; - DatagramByteCount += data.Length; - - int length = (DatagramCount % 10) + 1; - labelDataReception.Text = new string(labelDataReception.Text[0], length); - - labelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); - labelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); - } // Worker_ProgressChanged - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - UdpClient client; - IPEndPoint endPoint; - - client = null; - try - { - client = new UdpClient(MulticastPort); - client.JoinMulticastGroup(MulticastIpAddress); - - endPoint = null; - while (!Worker.CancellationPending) - { - var data = client.Receive(ref endPoint); - Worker.ReportProgress(0, data); - } // while - } - finally - { - if (client != null) - { - client.DropMulticastGroup(MulticastIpAddress); - client.Close(); - } // if - } // finally - } // Worker_DoWork - } // class MulticastStreamExplorerForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class MulticastStreamExplorerForm : Form + { + private BackgroundWorker Worker; + private IPAddress MulticastIpAddress; + private int MulticastPort; + private int DatagramCount; + private long DatagramByteCount; + private string DumpFolder; + + public MulticastStreamExplorerForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.GuiTools; + } // constructor + + private void MulticastStreamExplorerForm_Load(object sender, EventArgs e) + { + var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + var folder = string.Format("IPTV\\{0} {1}\\Data", appExe, Application.ProductVersion); + var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); + textBaseDumpFolder.Text = baseFolder; + + checkDumpDatagrams.Checked = true; + labelDataReception.Visible = false; + labelReceiving.Visible = false; + labelDatagramCount.Text = null; + labelByteCount.Text = null; + + buttonStop.Enabled = false; + } // MulticastStreamExplorerForm_Load + + private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) + { + labelBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; + textBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; + } // checkDumpPayloads_CheckedChanged + + private void buttonStart_Click(object sender, EventArgs e) + { + string context = null; + + try + { + context = "IP Address"; + var input = textIpAddress.Text.Trim(); + MulticastIpAddress = IPAddress.Parse(input); + + context = "Port"; + MulticastPort = Program.ParseNumber(textPort.Text); + + context = "Dump folder"; + if (checkDumpDatagrams.Checked) + { + DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("MulticastStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); + Directory.CreateDirectory(DumpFolder); + } + else + { + DumpFolder = null; + } // if-else + } + catch (Exception ex) + { + MyApplication.HandleException(this, context, ex); + return; + } // try-catch + + DatagramCount = 0; + DatagramByteCount = 0; + buttonStop.Enabled = true; + checkDumpDatagrams.Enabled = false; + labelDatagramCount.Text = null; + labelByteCount.Text = null; + + Worker = new BackgroundWorker() + { + WorkerReportsProgress = true, + WorkerSupportsCancellation = true + }; + Worker.DoWork += Worker_DoWork; + Worker.ProgressChanged += Worker_ProgressChanged; + Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + Worker.RunWorkerAsync(); + } // buttonStart_Click + + private void buttonStop_Click(object sender, EventArgs e) + { + buttonStop.Enabled = false; + buttonStop.Text = "Cancelling"; + buttonStop.Image = Properties.Resources.Status_Wait_16x16; + Worker.CancelAsync(); + } // buttonStop_Click + + void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + buttonStop.Text = "Stop"; + buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; + labelDataReception.Visible = false; + labelReceiving.Visible = false; + + Worker.Dispose(); + Worker = null; + } // Worker_RunWorkerCompleted + + void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + var data = e.UserState as byte[]; + + labelDataReception.Visible = true; + labelReceiving.Visible = true; + + if (DumpFolder != null) + { + var path = Path.Combine(DumpFolder, string.Format("{0:00000000} ~ 0x{0:X}.udp.bin", DatagramCount)); + File.WriteAllBytes(path, data); + } // if + + DatagramCount++; + DatagramByteCount += data.Length; + + int length = (DatagramCount % 10) + 1; + labelDataReception.Text = new string(labelDataReception.Text[0], length); + + labelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + labelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + } // Worker_ProgressChanged + + void Worker_DoWork(object sender, DoWorkEventArgs e) + { + UdpClient client; + IPEndPoint endPoint; + + client = null; + try + { + client = new UdpClient(MulticastPort); + client.JoinMulticastGroup(MulticastIpAddress); + + endPoint = null; + while (!Worker.CancellationPending) + { + var data = client.Receive(ref endPoint); + Worker.ReportProgress(0, data); + } // while + } + finally + { + if (client != null) + { + client.DropMulticastGroup(MulticastIpAddress); + client.Close(); + } // if + } // finally + } // Worker_DoWork + } // class MulticastStreamExplorerForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs index 6599505e..b9b1f8c3 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs @@ -1,132 +1,132 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.SqlServer.MessageBox; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - internal static class MyApplication - { - public static void HandleException(IWin32Window owner, Exception ex) - { - AddExceptionAdvancedInformation(ex); - var box = new Microsoft.SqlServer.MessageBox.ExceptionMessageBox() - { - Caption = Properties.Resources.MyAppHandleExceptionDefaultCaption, - Message = ex, - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Error, - }; - box.Show(owner); - } // HandleException - - public static void HandleException(IWin32Window owner, string message, Exception ex) - { - HandleException(owner, - null, - message, - MessageBoxIcon.Error, - ex); - } // HandleException - - public static void HandleException(IWin32Window owner, string caption, string message, Exception ex) - { - HandleException(owner, - caption, - message, - MessageBoxIcon.Error, - ex); - } // HandleException - - public static void HandleException(IWin32Window owner, string caption, string message, MessageBoxIcon icon, Exception ex) - { - AddExceptionAdvancedInformation(ex); - var box = new ExceptionMessageBox() - { - Caption = caption ?? Properties.Resources.MyAppHandleExceptionDefaultCaption, - Text = message, - InnerException = ex, - Beep = true, - Symbol = TranslateIconToSymbol(icon), - }; - box.Show(owner); - } // HandleException - - private static ExceptionMessageBoxSymbol TranslateIconToSymbol(MessageBoxIcon icon) - { - switch (icon) - { - case MessageBoxIcon.Asterisk: return ExceptionMessageBoxSymbol.Asterisk; - case MessageBoxIcon.Error: return ExceptionMessageBoxSymbol.Error; - case MessageBoxIcon.Exclamation: return ExceptionMessageBoxSymbol.Exclamation; - //case MessageBoxIcon.Hand: return ExceptionMessageBoxSymbol.Hand; - //case MessageBoxIcon.Information: return ExceptionMessageBoxSymbol.Information; - case MessageBoxIcon.Question: return ExceptionMessageBoxSymbol.Question; - //case MessageBoxIcon.Stop: return ExceptionMessageBoxSymbol.Stop; - //case MessageBoxIcon.Warning: return ExceptionMessageBoxSymbol.Warning; - default: - return ExceptionMessageBoxSymbol.None; - } // switch - } // TranslateIconToSymbol - - private static void AddExceptionAdvancedInformation(Exception ex) - { - while (ex != null) - { - ex.Data["AdvancedInformation.Exception.Type"] = ex.GetType().FullName; - ex.Data["AdvancedInformation.Exception.Assembly"] = ex.GetType().Assembly.ToString(); - ex = ex.InnerException; - } // while - } // AddExceptionAdvancedInformation - - private const string ForceUiCultureArgument = "/forceuiculture:"; - - internal static void ForceUiCulture(string[] arguments, string settingsCulture) - { - var culture = (string)null; - - // Command line culture has preference over settings culture (allows to override user setting) - if ((arguments != null) && (arguments.Length != 0)) - { - foreach (var argument in arguments) - { - if (!argument.ToLowerInvariant().StartsWith(ForceUiCultureArgument)) continue; - culture = argument.Substring(ForceUiCultureArgument.Length); - break; - } // foreach - } // if - - // If no culture is specified in command line arguments, use settings culture - if (culture == null) - { - culture = settingsCulture; - } // if - - ForceUiCulture(culture); - } // ForceUiCulture - - private static void ForceUiCulture(string culture) - { - if (culture == null) return; - culture = culture.Trim(); - if (culture == string.Empty) return; - - try - { - Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); - } - catch (Exception ex) - { - MyApplication.HandleException(null, ex); - } // try-catch - } // ForceUiCulture - } // static class MyApplication -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Microsoft.SqlServer.MessageBox; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + internal static class MyApplication + { + public static void HandleException(IWin32Window owner, Exception ex) + { + AddExceptionAdvancedInformation(ex); + var box = new Microsoft.SqlServer.MessageBox.ExceptionMessageBox() + { + Caption = Properties.Resources.MyAppHandleExceptionDefaultCaption, + Message = ex, + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Error, + }; + box.Show(owner); + } // HandleException + + public static void HandleException(IWin32Window owner, string message, Exception ex) + { + HandleException(owner, + null, + message, + MessageBoxIcon.Error, + ex); + } // HandleException + + public static void HandleException(IWin32Window owner, string caption, string message, Exception ex) + { + HandleException(owner, + caption, + message, + MessageBoxIcon.Error, + ex); + } // HandleException + + public static void HandleException(IWin32Window owner, string caption, string message, MessageBoxIcon icon, Exception ex) + { + AddExceptionAdvancedInformation(ex); + var box = new ExceptionMessageBox() + { + Caption = caption ?? Properties.Resources.MyAppHandleExceptionDefaultCaption, + Text = message, + InnerException = ex, + Beep = true, + Symbol = TranslateIconToSymbol(icon), + }; + box.Show(owner); + } // HandleException + + private static ExceptionMessageBoxSymbol TranslateIconToSymbol(MessageBoxIcon icon) + { + switch (icon) + { + case MessageBoxIcon.Asterisk: return ExceptionMessageBoxSymbol.Asterisk; + case MessageBoxIcon.Error: return ExceptionMessageBoxSymbol.Error; + case MessageBoxIcon.Exclamation: return ExceptionMessageBoxSymbol.Exclamation; + //case MessageBoxIcon.Hand: return ExceptionMessageBoxSymbol.Hand; + //case MessageBoxIcon.Information: return ExceptionMessageBoxSymbol.Information; + case MessageBoxIcon.Question: return ExceptionMessageBoxSymbol.Question; + //case MessageBoxIcon.Stop: return ExceptionMessageBoxSymbol.Stop; + //case MessageBoxIcon.Warning: return ExceptionMessageBoxSymbol.Warning; + default: + return ExceptionMessageBoxSymbol.None; + } // switch + } // TranslateIconToSymbol + + private static void AddExceptionAdvancedInformation(Exception ex) + { + while (ex != null) + { + ex.Data["AdvancedInformation.Exception.Type"] = ex.GetType().FullName; + ex.Data["AdvancedInformation.Exception.Assembly"] = ex.GetType().Assembly.ToString(); + ex = ex.InnerException; + } // while + } // AddExceptionAdvancedInformation + + private const string ForceUiCultureArgument = "/forceuiculture:"; + + internal static void ForceUiCulture(string[] arguments, string settingsCulture) + { + var culture = (string)null; + + // Command line culture has preference over settings culture (allows to override user setting) + if ((arguments != null) && (arguments.Length != 0)) + { + foreach (var argument in arguments) + { + if (!argument.ToLowerInvariant().StartsWith(ForceUiCultureArgument)) continue; + culture = argument.Substring(ForceUiCultureArgument.Length); + break; + } // foreach + } // if + + // If no culture is specified in command line arguments, use settings culture + if (culture == null) + { + culture = settingsCulture; + } // if + + ForceUiCulture(culture); + } // ForceUiCulture + + private static void ForceUiCulture(string culture) + { + if (culture == null) return; + culture = culture.Trim(); + if (culture == string.Empty) return; + + try + { + Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); + } + catch (Exception ex) + { + MyApplication.HandleException(null, ex); + } // try-catch + } // ForceUiCulture + } // static class MyApplication +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs index dfacfcf2..6726ed57 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs @@ -1,294 +1,294 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - partial class OpchExplorerForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.ColumnHeader columnHeaderFilename; - System.Windows.Forms.ColumnHeader columnHeaderFragment; - System.Windows.Forms.ColumnHeader columnHeaderSize; - System.Windows.Forms.ColumnHeader columnHeaderSuffix; - System.Windows.Forms.ColumnHeader columnHeaderCount; - System.Windows.Forms.ColumnHeader columnHeaderPrefix; - this.buttonStart = new System.Windows.Forms.Button(); - this.buttonStop = new System.Windows.Forms.Button(); - this.textPort = new System.Windows.Forms.TextBox(); - this.labelPort = new System.Windows.Forms.Label(); - this.textIpAddress = new System.Windows.Forms.TextBox(); - this.labelIpAddress = new System.Windows.Forms.Label(); - this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); - this.labelBaseDumpFolder = new System.Windows.Forms.Label(); - this.checkDumpDatagrams = new System.Windows.Forms.CheckBox(); - this.labelDataReception = new System.Windows.Forms.Label(); - this.labelReceiving = new System.Windows.Forms.Label(); - this.labelDatagramCount = new System.Windows.Forms.Label(); - this.labelByteCount = new System.Windows.Forms.Label(); - this.listViewFiles = new System.Windows.Forms.ListView(); - columnHeaderFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeaderFragment = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeaderSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeaderSuffix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeaderCount = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeaderPrefix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.SuspendLayout(); - // - // buttonStart - // - this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonStart.Image = global::Project.IpTv.Internal.Tools.GuiTools.Properties.Resources.Action_Play_LG_16x16; - this.buttonStart.Location = new System.Drawing.Point(466, 12); - this.buttonStart.Name = "buttonStart"; - this.buttonStart.Size = new System.Drawing.Size(100, 25); - this.buttonStart.TabIndex = 0; - this.buttonStart.Text = "Start"; - this.buttonStart.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.buttonStart.UseVisualStyleBackColor = true; - this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); - // - // buttonStop - // - this.buttonStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonStop.Image = global::Project.IpTv.Internal.Tools.GuiTools.Properties.Resources.Action_Cancel_Red_16x16; - this.buttonStop.Location = new System.Drawing.Point(572, 12); - this.buttonStop.Name = "buttonStop"; - this.buttonStop.Size = new System.Drawing.Size(100, 25); - this.buttonStop.TabIndex = 1; - this.buttonStop.Text = "Stop"; - this.buttonStop.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.buttonStop.UseVisualStyleBackColor = true; - this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); - // - // textPort - // - this.textPort.Location = new System.Drawing.Point(213, 15); - this.textPort.Name = "textPort"; - this.textPort.Size = new System.Drawing.Size(50, 20); - this.textPort.TabIndex = 19; - this.textPort.Text = "22222"; - // - // labelPort - // - this.labelPort.AutoSize = true; - this.labelPort.Location = new System.Drawing.Point(181, 18); - this.labelPort.Name = "labelPort"; - this.labelPort.Size = new System.Drawing.Size(26, 13); - this.labelPort.TabIndex = 18; - this.labelPort.Text = "Port"; - // - // textIpAddress - // - this.textIpAddress.Location = new System.Drawing.Point(75, 15); - this.textIpAddress.Name = "textIpAddress"; - this.textIpAddress.Size = new System.Drawing.Size(100, 20); - this.textIpAddress.TabIndex = 17; - this.textIpAddress.Text = "239.0.2.30"; - // - // labelIpAddress - // - this.labelIpAddress.AutoSize = true; - this.labelIpAddress.Location = new System.Drawing.Point(12, 18); - this.labelIpAddress.Name = "labelIpAddress"; - this.labelIpAddress.Size = new System.Drawing.Size(57, 13); - this.labelIpAddress.TabIndex = 16; - this.labelIpAddress.Text = "IP address"; - // - // textBaseDumpFolder - // - this.textBaseDumpFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBaseDumpFolder.Location = new System.Drawing.Point(237, 43); - this.textBaseDumpFolder.Name = "textBaseDumpFolder"; - this.textBaseDumpFolder.Size = new System.Drawing.Size(435, 20); - this.textBaseDumpFolder.TabIndex = 22; - // - // labelBaseDumpFolder - // - this.labelBaseDumpFolder.AutoSize = true; - this.labelBaseDumpFolder.Location = new System.Drawing.Point(124, 46); - this.labelBaseDumpFolder.Name = "labelBaseDumpFolder"; - this.labelBaseDumpFolder.Size = new System.Drawing.Size(107, 13); - this.labelBaseDumpFolder.TabIndex = 21; - this.labelBaseDumpFolder.Text = "Base folder for dump:"; - // - // checkDumpDatagrams - // - this.checkDumpDatagrams.AutoSize = true; - this.checkDumpDatagrams.Location = new System.Drawing.Point(12, 45); - this.checkDumpDatagrams.Name = "checkDumpDatagrams"; - this.checkDumpDatagrams.Size = new System.Drawing.Size(106, 17); - this.checkDumpDatagrams.TabIndex = 20; - this.checkDumpDatagrams.Text = "Dump datagrams"; - this.checkDumpDatagrams.UseVisualStyleBackColor = true; - this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); - // - // labelDataReception - // - this.labelDataReception.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDataReception.Font = new System.Drawing.Font("Wingdings", 9F); - this.labelDataReception.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDataReception.Location = new System.Drawing.Point(12, 390); - this.labelDataReception.Name = "labelDataReception"; - this.labelDataReception.Size = new System.Drawing.Size(100, 13); - this.labelDataReception.TabIndex = 24; - this.labelDataReception.Text = "l"; - this.labelDataReception.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // labelReceiving - // - this.labelReceiving.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelReceiving.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelReceiving.Location = new System.Drawing.Point(118, 390); - this.labelReceiving.Name = "labelReceiving"; - this.labelReceiving.Size = new System.Drawing.Size(175, 13); - this.labelReceiving.TabIndex = 23; - this.labelReceiving.Text = "Data reception is in progress"; - // - // labelDatagramCount - // - this.labelDatagramCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDatagramCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDatagramCount.Location = new System.Drawing.Point(299, 390); - this.labelDatagramCount.Name = "labelDatagramCount"; - this.labelDatagramCount.Size = new System.Drawing.Size(175, 13); - this.labelDatagramCount.TabIndex = 25; - this.labelDatagramCount.Text = "(Count)"; - // - // labelByteCount - // - this.labelByteCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelByteCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelByteCount.Location = new System.Drawing.Point(480, 390); - this.labelByteCount.Name = "labelByteCount"; - this.labelByteCount.Size = new System.Drawing.Size(175, 13); - this.labelByteCount.TabIndex = 26; - this.labelByteCount.Text = "(Byte count)"; - // - // listViewFiles - // - this.listViewFiles.AllowColumnReorder = true; - this.listViewFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.listViewFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - columnHeaderFilename, - columnHeaderCount, - columnHeaderFragment, - columnHeaderSize, - columnHeaderPrefix, - columnHeaderSuffix}); - this.listViewFiles.FullRowSelect = true; - this.listViewFiles.GridLines = true; - this.listViewFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.listViewFiles.Location = new System.Drawing.Point(12, 69); - this.listViewFiles.MultiSelect = false; - this.listViewFiles.Name = "listViewFiles"; - this.listViewFiles.Size = new System.Drawing.Size(660, 318); - this.listViewFiles.TabIndex = 33; - this.listViewFiles.UseCompatibleStateImageBehavior = false; - this.listViewFiles.View = System.Windows.Forms.View.Details; - // - // columnHeaderFilename - // - columnHeaderFilename.Text = "Filename"; - columnHeaderFilename.Width = 150; - // - // columnHeaderFragment - // - columnHeaderFragment.Text = "Fragment"; - columnHeaderFragment.Width = 75; - // - // columnHeaderSize - // - columnHeaderSize.Text = "Size"; - columnHeaderSize.Width = 75; - // - // columnHeaderSuffix - // - columnHeaderSuffix.Text = "Suffix"; - columnHeaderSuffix.Width = 100; - // - // columnHeaderCount - // - columnHeaderCount.Text = "Count"; - columnHeaderCount.Width = 75; - // - // columnHeaderPrefix - // - columnHeaderPrefix.Text = "Prefix"; - columnHeaderPrefix.Width = 100; - // - // OpchExplorerForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(684, 412); - this.Controls.Add(this.listViewFiles); - this.Controls.Add(this.labelByteCount); - this.Controls.Add(this.labelDatagramCount); - this.Controls.Add(this.labelDataReception); - this.Controls.Add(this.labelReceiving); - this.Controls.Add(this.textBaseDumpFolder); - this.Controls.Add(this.labelBaseDumpFolder); - this.Controls.Add(this.checkDumpDatagrams); - this.Controls.Add(this.textPort); - this.Controls.Add(this.labelPort); - this.Controls.Add(this.textIpAddress); - this.Controls.Add(this.labelIpAddress); - this.Controls.Add(this.buttonStop); - this.Controls.Add(this.buttonStart); - this.Name = "OpchExplorerForm"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "OPCH Stream Explorer"; - this.Load += new System.EventHandler(this.MulticastStreamExplorerForm_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button buttonStart; - private System.Windows.Forms.Button buttonStop; - private System.Windows.Forms.TextBox textPort; - private System.Windows.Forms.Label labelPort; - private System.Windows.Forms.TextBox textIpAddress; - private System.Windows.Forms.Label labelIpAddress; - private System.Windows.Forms.TextBox textBaseDumpFolder; - private System.Windows.Forms.Label labelBaseDumpFolder; - private System.Windows.Forms.CheckBox checkDumpDatagrams; - private System.Windows.Forms.Label labelDataReception; - private System.Windows.Forms.Label labelReceiving; - private System.Windows.Forms.Label labelDatagramCount; - private System.Windows.Forms.Label labelByteCount; - private System.Windows.Forms.ListView listViewFiles; - } // class OpchExplorerForm +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class OpchExplorerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ColumnHeader columnHeaderFilename; + System.Windows.Forms.ColumnHeader columnHeaderFragment; + System.Windows.Forms.ColumnHeader columnHeaderSize; + System.Windows.Forms.ColumnHeader columnHeaderSuffix; + System.Windows.Forms.ColumnHeader columnHeaderCount; + System.Windows.Forms.ColumnHeader columnHeaderPrefix; + this.buttonStart = new System.Windows.Forms.Button(); + this.buttonStop = new System.Windows.Forms.Button(); + this.textPort = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.textIpAddress = new System.Windows.Forms.TextBox(); + this.labelIpAddress = new System.Windows.Forms.Label(); + this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); + this.labelBaseDumpFolder = new System.Windows.Forms.Label(); + this.checkDumpDatagrams = new System.Windows.Forms.CheckBox(); + this.labelDataReception = new System.Windows.Forms.Label(); + this.labelReceiving = new System.Windows.Forms.Label(); + this.labelDatagramCount = new System.Windows.Forms.Label(); + this.labelByteCount = new System.Windows.Forms.Label(); + this.listViewFiles = new System.Windows.Forms.ListView(); + columnHeaderFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderFragment = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderSuffix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderCount = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderPrefix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.SuspendLayout(); + // + // buttonStart + // + this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStart.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Play_LG_16x16; + this.buttonStart.Location = new System.Drawing.Point(466, 12); + this.buttonStart.Name = "buttonStart"; + this.buttonStart.Size = new System.Drawing.Size(100, 25); + this.buttonStart.TabIndex = 0; + this.buttonStart.Text = "Start"; + this.buttonStart.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStart.UseVisualStyleBackColor = true; + this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); + // + // buttonStop + // + this.buttonStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStop.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Cancel_Red_16x16; + this.buttonStop.Location = new System.Drawing.Point(572, 12); + this.buttonStop.Name = "buttonStop"; + this.buttonStop.Size = new System.Drawing.Size(100, 25); + this.buttonStop.TabIndex = 1; + this.buttonStop.Text = "Stop"; + this.buttonStop.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStop.UseVisualStyleBackColor = true; + this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); + // + // textPort + // + this.textPort.Location = new System.Drawing.Point(213, 15); + this.textPort.Name = "textPort"; + this.textPort.Size = new System.Drawing.Size(50, 20); + this.textPort.TabIndex = 19; + this.textPort.Text = "22222"; + // + // labelPort + // + this.labelPort.AutoSize = true; + this.labelPort.Location = new System.Drawing.Point(181, 18); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(26, 13); + this.labelPort.TabIndex = 18; + this.labelPort.Text = "Port"; + // + // textIpAddress + // + this.textIpAddress.Location = new System.Drawing.Point(75, 15); + this.textIpAddress.Name = "textIpAddress"; + this.textIpAddress.Size = new System.Drawing.Size(100, 20); + this.textIpAddress.TabIndex = 17; + this.textIpAddress.Text = "239.0.2.30"; + // + // labelIpAddress + // + this.labelIpAddress.AutoSize = true; + this.labelIpAddress.Location = new System.Drawing.Point(12, 18); + this.labelIpAddress.Name = "labelIpAddress"; + this.labelIpAddress.Size = new System.Drawing.Size(57, 13); + this.labelIpAddress.TabIndex = 16; + this.labelIpAddress.Text = "IP address"; + // + // textBaseDumpFolder + // + this.textBaseDumpFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBaseDumpFolder.Location = new System.Drawing.Point(237, 43); + this.textBaseDumpFolder.Name = "textBaseDumpFolder"; + this.textBaseDumpFolder.Size = new System.Drawing.Size(435, 20); + this.textBaseDumpFolder.TabIndex = 22; + // + // labelBaseDumpFolder + // + this.labelBaseDumpFolder.AutoSize = true; + this.labelBaseDumpFolder.Location = new System.Drawing.Point(124, 46); + this.labelBaseDumpFolder.Name = "labelBaseDumpFolder"; + this.labelBaseDumpFolder.Size = new System.Drawing.Size(107, 13); + this.labelBaseDumpFolder.TabIndex = 21; + this.labelBaseDumpFolder.Text = "Base folder for dump:"; + // + // checkDumpDatagrams + // + this.checkDumpDatagrams.AutoSize = true; + this.checkDumpDatagrams.Location = new System.Drawing.Point(12, 45); + this.checkDumpDatagrams.Name = "checkDumpDatagrams"; + this.checkDumpDatagrams.Size = new System.Drawing.Size(106, 17); + this.checkDumpDatagrams.TabIndex = 20; + this.checkDumpDatagrams.Text = "Dump datagrams"; + this.checkDumpDatagrams.UseVisualStyleBackColor = true; + this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); + // + // labelDataReception + // + this.labelDataReception.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelDataReception.Font = new System.Drawing.Font("Wingdings", 9F); + this.labelDataReception.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelDataReception.Location = new System.Drawing.Point(12, 390); + this.labelDataReception.Name = "labelDataReception"; + this.labelDataReception.Size = new System.Drawing.Size(100, 13); + this.labelDataReception.TabIndex = 24; + this.labelDataReception.Text = "l"; + this.labelDataReception.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // labelReceiving + // + this.labelReceiving.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelReceiving.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelReceiving.Location = new System.Drawing.Point(118, 390); + this.labelReceiving.Name = "labelReceiving"; + this.labelReceiving.Size = new System.Drawing.Size(175, 13); + this.labelReceiving.TabIndex = 23; + this.labelReceiving.Text = "Data reception is in progress"; + // + // labelDatagramCount + // + this.labelDatagramCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelDatagramCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelDatagramCount.Location = new System.Drawing.Point(299, 390); + this.labelDatagramCount.Name = "labelDatagramCount"; + this.labelDatagramCount.Size = new System.Drawing.Size(175, 13); + this.labelDatagramCount.TabIndex = 25; + this.labelDatagramCount.Text = "(Count)"; + // + // labelByteCount + // + this.labelByteCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelByteCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelByteCount.Location = new System.Drawing.Point(480, 390); + this.labelByteCount.Name = "labelByteCount"; + this.labelByteCount.Size = new System.Drawing.Size(175, 13); + this.labelByteCount.TabIndex = 26; + this.labelByteCount.Text = "(Byte count)"; + // + // listViewFiles + // + this.listViewFiles.AllowColumnReorder = true; + this.listViewFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeaderFilename, + columnHeaderCount, + columnHeaderFragment, + columnHeaderSize, + columnHeaderPrefix, + columnHeaderSuffix}); + this.listViewFiles.FullRowSelect = true; + this.listViewFiles.GridLines = true; + this.listViewFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewFiles.Location = new System.Drawing.Point(12, 69); + this.listViewFiles.MultiSelect = false; + this.listViewFiles.Name = "listViewFiles"; + this.listViewFiles.Size = new System.Drawing.Size(660, 318); + this.listViewFiles.TabIndex = 33; + this.listViewFiles.UseCompatibleStateImageBehavior = false; + this.listViewFiles.View = System.Windows.Forms.View.Details; + // + // columnHeaderFilename + // + columnHeaderFilename.Text = "Filename"; + columnHeaderFilename.Width = 150; + // + // columnHeaderFragment + // + columnHeaderFragment.Text = "Fragment"; + columnHeaderFragment.Width = 75; + // + // columnHeaderSize + // + columnHeaderSize.Text = "Size"; + columnHeaderSize.Width = 75; + // + // columnHeaderSuffix + // + columnHeaderSuffix.Text = "Suffix"; + columnHeaderSuffix.Width = 100; + // + // columnHeaderCount + // + columnHeaderCount.Text = "Count"; + columnHeaderCount.Width = 75; + // + // columnHeaderPrefix + // + columnHeaderPrefix.Text = "Prefix"; + columnHeaderPrefix.Width = 100; + // + // OpchExplorerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.listViewFiles); + this.Controls.Add(this.labelByteCount); + this.Controls.Add(this.labelDatagramCount); + this.Controls.Add(this.labelDataReception); + this.Controls.Add(this.labelReceiving); + this.Controls.Add(this.textBaseDumpFolder); + this.Controls.Add(this.labelBaseDumpFolder); + this.Controls.Add(this.checkDumpDatagrams); + this.Controls.Add(this.textPort); + this.Controls.Add(this.labelPort); + this.Controls.Add(this.textIpAddress); + this.Controls.Add(this.labelIpAddress); + this.Controls.Add(this.buttonStop); + this.Controls.Add(this.buttonStart); + this.Name = "OpchExplorerForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Text = "OPCH Stream Explorer"; + this.Load += new System.EventHandler(this.MulticastStreamExplorerForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonStart; + private System.Windows.Forms.Button buttonStop; + private System.Windows.Forms.TextBox textPort; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.TextBox textIpAddress; + private System.Windows.Forms.Label labelIpAddress; + private System.Windows.Forms.TextBox textBaseDumpFolder; + private System.Windows.Forms.Label labelBaseDumpFolder; + private System.Windows.Forms.CheckBox checkDumpDatagrams; + private System.Windows.Forms.Label labelDataReception; + private System.Windows.Forms.Label labelReceiving; + private System.Windows.Forms.Label labelDatagramCount; + private System.Windows.Forms.Label labelByteCount; + private System.Windows.Forms.ListView listViewFiles; + } // class OpchExplorerForm } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs index d8a65bc5..a9722940 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs @@ -1,200 +1,200 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - public partial class OpchExplorerForm : Form - { - private BackgroundWorker Worker; - private IPAddress MulticastIpAddress; - private int MulticastPort; - private int DatagramCount; - private long DatagramByteCount; - private string DumpFolder; - - public OpchExplorerForm() - { - InitializeComponent(); - this.Icon = Properties.Resources.GuiTools; - } // constructor - - private void MulticastStreamExplorerForm_Load(object sender, EventArgs e) - { - var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); - var folder = string.Format("IPTV\\{0} {1}\\Data", appExe, Application.ProductVersion); - var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); - textBaseDumpFolder.Text = baseFolder; - - checkDumpDatagrams.Checked = true; - labelDataReception.Visible = false; - labelReceiving.Visible = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; - - buttonStop.Enabled = false; - } // MulticastStreamExplorerForm_Load - - private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) - { - labelBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; - textBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; - } // checkDumpPayloads_CheckedChanged - - private void buttonStart_Click(object sender, EventArgs e) - { - string context = null; - - try - { - context = "IP Address"; - var input = textIpAddress.Text.Trim(); - MulticastIpAddress = IPAddress.Parse(input); - - context = "Port"; - MulticastPort = Program.ParseNumber(textPort.Text); - - context = "Dump folder"; - if (checkDumpDatagrams.Checked) - { - DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("OpchStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); - Directory.CreateDirectory(DumpFolder); - } - else - { - DumpFolder = null; - } // if-else - } - catch (Exception ex) - { - MyApplication.HandleException(this, context, ex); - return; - } // try-catch - - DatagramCount = 0; - DatagramByteCount = 0; - buttonStart.Enabled = false; - buttonStop.Enabled = true; - checkDumpDatagrams.Enabled = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; - listViewFiles.Items.Clear(); - - Worker = new BackgroundWorker() - { - WorkerReportsProgress = true, - WorkerSupportsCancellation = true - }; - Worker.DoWork += Worker_DoWork; - Worker.ProgressChanged += Worker_ProgressChanged; - Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - Worker.RunWorkerAsync(); - } // buttonStart_Click - - private void buttonStop_Click(object sender, EventArgs e) - { - buttonStop.Enabled = false; - buttonStop.Text = "Cancelling"; - buttonStop.Image = Properties.Resources.Status_Wait_16x16; - Worker.CancelAsync(); - } // buttonStop_Click - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - buttonStart.Enabled = true; - buttonStop.Text = "Stop"; - buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; - labelDataReception.Visible = false; - labelReceiving.Visible = false; - - Worker.Dispose(); - Worker = null; - } // Worker_RunWorkerCompleted - - void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - var data = e.UserState as byte[]; - var file = Encoding.UTF8.GetString(data, 12, 32); - var l = data.Length; - - var index = file.IndexOf('\0'); - if (index > 0) - { - file = file.Substring(0, index); - } // if - - labelDataReception.Visible = true; - labelReceiving.Visible = true; - - if (DumpFolder != null) - { - var path = Path.Combine(DumpFolder, string.Format("{4} ~ 0x{0:X2}{1:X2}{2:X2}{3:X2}.bin", data[4], data[5], data[6], data[7], file)); - using (var output = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) - { - output.Write(data, 44, l - 44 - 4); - } // using output - } // if - - var item = new ListViewItem(); - item.Text = file; - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[8], data[9], data[10], data[11])); // fragment count - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[4], data[5], data[6], data[7])); // fragment # - item.SubItems.Add(string.Format("{0:N0}", l - 44 - 4)); - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[0], data[1], data[2], data[3])); // prefix? - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[l-4], data[l-3], data[l-2], data[l-1])); // global data CRC? - - listViewFiles.BeginUpdate(); - listViewFiles.Items.Add(item); - item.EnsureVisible(); - listViewFiles.EndUpdate(); - - DatagramCount++; - DatagramByteCount += data.Length; - - int length = (DatagramCount % 10) + 1; - labelDataReception.Text = new string(labelDataReception.Text[0], length); - - labelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); - labelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); - } // Worker_ProgressChanged - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - UdpClient client; - IPEndPoint endPoint; - - client = null; - try - { - client = new UdpClient(MulticastPort); - client.JoinMulticastGroup(MulticastIpAddress); - - endPoint = null; - while (!Worker.CancellationPending) - { - var data = client.Receive(ref endPoint); - Worker.ReportProgress(0, data); - } // while - } - finally - { - if (client != null) - { - client.DropMulticastGroup(MulticastIpAddress); - client.Close(); - } // if - } // finally - } // Worker_DoWork - } // class OpchExplorerForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class OpchExplorerForm : Form + { + private BackgroundWorker Worker; + private IPAddress MulticastIpAddress; + private int MulticastPort; + private int DatagramCount; + private long DatagramByteCount; + private string DumpFolder; + + public OpchExplorerForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.GuiTools; + } // constructor + + private void MulticastStreamExplorerForm_Load(object sender, EventArgs e) + { + var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + var folder = string.Format("IPTV\\{0} {1}\\Data", appExe, Application.ProductVersion); + var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); + textBaseDumpFolder.Text = baseFolder; + + checkDumpDatagrams.Checked = true; + labelDataReception.Visible = false; + labelReceiving.Visible = false; + labelDatagramCount.Text = null; + labelByteCount.Text = null; + + buttonStop.Enabled = false; + } // MulticastStreamExplorerForm_Load + + private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) + { + labelBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; + textBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; + } // checkDumpPayloads_CheckedChanged + + private void buttonStart_Click(object sender, EventArgs e) + { + string context = null; + + try + { + context = "IP Address"; + var input = textIpAddress.Text.Trim(); + MulticastIpAddress = IPAddress.Parse(input); + + context = "Port"; + MulticastPort = Program.ParseNumber(textPort.Text); + + context = "Dump folder"; + if (checkDumpDatagrams.Checked) + { + DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("OpchStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); + Directory.CreateDirectory(DumpFolder); + } + else + { + DumpFolder = null; + } // if-else + } + catch (Exception ex) + { + MyApplication.HandleException(this, context, ex); + return; + } // try-catch + + DatagramCount = 0; + DatagramByteCount = 0; + buttonStart.Enabled = false; + buttonStop.Enabled = true; + checkDumpDatagrams.Enabled = false; + labelDatagramCount.Text = null; + labelByteCount.Text = null; + listViewFiles.Items.Clear(); + + Worker = new BackgroundWorker() + { + WorkerReportsProgress = true, + WorkerSupportsCancellation = true + }; + Worker.DoWork += Worker_DoWork; + Worker.ProgressChanged += Worker_ProgressChanged; + Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + Worker.RunWorkerAsync(); + } // buttonStart_Click + + private void buttonStop_Click(object sender, EventArgs e) + { + buttonStop.Enabled = false; + buttonStop.Text = "Cancelling"; + buttonStop.Image = Properties.Resources.Status_Wait_16x16; + Worker.CancelAsync(); + } // buttonStop_Click + + void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + buttonStart.Enabled = true; + buttonStop.Text = "Stop"; + buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; + labelDataReception.Visible = false; + labelReceiving.Visible = false; + + Worker.Dispose(); + Worker = null; + } // Worker_RunWorkerCompleted + + void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + var data = e.UserState as byte[]; + var file = Encoding.UTF8.GetString(data, 12, 32); + var l = data.Length; + + var index = file.IndexOf('\0'); + if (index > 0) + { + file = file.Substring(0, index); + } // if + + labelDataReception.Visible = true; + labelReceiving.Visible = true; + + if (DumpFolder != null) + { + var path = Path.Combine(DumpFolder, string.Format("{4} ~ 0x{0:X2}{1:X2}{2:X2}{3:X2}.bin", data[4], data[5], data[6], data[7], file)); + using (var output = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) + { + output.Write(data, 44, l - 44 - 4); + } // using output + } // if + + var item = new ListViewItem(); + item.Text = file; + item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[8], data[9], data[10], data[11])); // fragment count + item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[4], data[5], data[6], data[7])); // fragment # + item.SubItems.Add(string.Format("{0:N0}", l - 44 - 4)); + item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[0], data[1], data[2], data[3])); // prefix? + item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[l-4], data[l-3], data[l-2], data[l-1])); // global data CRC? + + listViewFiles.BeginUpdate(); + listViewFiles.Items.Add(item); + item.EnsureVisible(); + listViewFiles.EndUpdate(); + + DatagramCount++; + DatagramByteCount += data.Length; + + int length = (DatagramCount % 10) + 1; + labelDataReception.Text = new string(labelDataReception.Text[0], length); + + labelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + labelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + } // Worker_ProgressChanged + + void Worker_DoWork(object sender, DoWorkEventArgs e) + { + UdpClient client; + IPEndPoint endPoint; + + client = null; + try + { + client = new UdpClient(MulticastPort); + client.JoinMulticastGroup(MulticastIpAddress); + + endPoint = null; + while (!Worker.CancellationPending) + { + var data = client.Receive(ref endPoint); + Worker.ReportProgress(0, data); + } // while + } + finally + { + if (client != null) + { + client.DropMulticastGroup(MulticastIpAddress); + client.Close(); + } // if + } // finally + } // Worker_DoWork + } // class OpchExplorerForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs index f453e80c..b72e29d0 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs @@ -1,47 +1,47 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new LaunchForm()); - } // Main - - internal static int ParseNumber(string text) - { - text = text.Trim(); - if (text.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase)) - { - return int.Parse(text.Substring(2), NumberStyles.HexNumber); - } - else - { - return int.Parse(text, NumberStyles.Integer); - } // if-else - } // ParseNumber - - internal static int? ParseNullableNumber(string text) - { - text = text.Trim(); - if (text == "") return null; - - return ParseNumber(text); - } // ParseNullableNumber - - } // class Program -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new LaunchForm()); + } // Main + + internal static int ParseNumber(string text) + { + text = text.Trim(); + if (text.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase)) + { + return int.Parse(text.Substring(2), NumberStyles.HexNumber); + } + else + { + return int.Parse(text, NumberStyles.Integer); + } // if-else + } // ParseNumber + + internal static int? ParseNullableNumber(string text) + { + text = text.Trim(); + if (text == "") return null; + + return ParseNumber(text); + } // ParseNullableNumber + + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs index 1db7596b..a55589eb 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IPTV project internal tools: GuiTools")] -[assembly: AssemblyDescription("Project.IpTv.Internal.Tools.GuiTools")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e73b3ee5-cedd-4484-a3f8-44894ff77c05")] - -// Version information for an assembly consists of the following four parameters: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute parameters to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IPTV project internal tools: GuiTools")] +[assembly: AssemblyDescription("IpTviewr.Internal.Tools.GuiTools")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e73b3ee5-cedd-4484-a3f8-44894ff77c05")] + +// Version information for an assembly consists of the following four parameters: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs index 660ac797..b53ae70f 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs @@ -1,112 +1,112 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Internal.Tools.GuiTools.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Internal.Tools.GuiTools.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_Red_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_Red_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Play_LG_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon GuiTools { - get { - object obj = ResourceManager.GetObject("GuiTools", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized string similar to An error has occurred while processing your request. - /// - internal static string MyAppHandleExceptionDefaultCaption { - get { - return ResourceManager.GetString("MyAppHandleExceptionDefaultCaption", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Wait_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Wait_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.GuiTools.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.GuiTools.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_Red_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_Red_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Play_LG_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon GuiTools { + get { + object obj = ResourceManager.GetObject("GuiTools", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized string similar to An error has occurred while processing your request. + /// + internal static string MyAppHandleExceptionDefaultCaption { + get { + return ResourceManager.GetString("MyAppHandleExceptionDefaultCaption", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Wait_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Wait_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs index 3da153b8..2cb35d8e 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Internal.Tools.GuiTools.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.GuiTools.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs index ef7ab27a..5d753691 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs @@ -1,181 +1,181 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - partial class SimpleDvbStpDownloadForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SimpleDvbStpDownloadForm)); - this.textSegmentId = new System.Windows.Forms.TextBox(); - this.labelSegmentID = new System.Windows.Forms.Label(); - this.textPayloadId = new System.Windows.Forms.TextBox(); - this.labelPayloadId = new System.Windows.Forms.Label(); - this.textBoxResult = new System.Windows.Forms.TextBox(); - this.buttonDownload = new System.Windows.Forms.Button(); - this.textPort = new System.Windows.Forms.TextBox(); - this.labelPort = new System.Windows.Forms.Label(); - this.textIpAddress = new System.Windows.Forms.TextBox(); - this.labelIpAddress = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // textSegmentId - // - this.textSegmentId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textSegmentId.Location = new System.Drawing.Point(491, 15); - this.textSegmentId.Name = "textSegmentId"; - this.textSegmentId.Size = new System.Drawing.Size(75, 20); - this.textSegmentId.TabIndex = 19; - // - // labelSegmentID - // - this.labelSegmentID.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelSegmentID.AutoSize = true; - this.labelSegmentID.Location = new System.Drawing.Point(425, 18); - this.labelSegmentID.Name = "labelSegmentID"; - this.labelSegmentID.Size = new System.Drawing.Size(60, 13); - this.labelSegmentID.TabIndex = 18; - this.labelSegmentID.Text = "SegmentID"; - // - // textPayloadId - // - this.textPayloadId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textPayloadId.Location = new System.Drawing.Point(369, 15); - this.textPayloadId.Name = "textPayloadId"; - this.textPayloadId.Size = new System.Drawing.Size(50, 20); - this.textPayloadId.TabIndex = 17; - this.textPayloadId.Text = "0x01"; - // - // labelPayloadId - // - this.labelPayloadId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelPayloadId.AutoSize = true; - this.labelPayloadId.Location = new System.Drawing.Point(307, 18); - this.labelPayloadId.Name = "labelPayloadId"; - this.labelPayloadId.Size = new System.Drawing.Size(56, 13); - this.labelPayloadId.TabIndex = 16; - this.labelPayloadId.Text = "PayloadID"; - // - // textBoxResult - // - this.textBoxResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxResult.Location = new System.Drawing.Point(13, 43); - this.textBoxResult.Multiline = true; - this.textBoxResult.Name = "textBoxResult"; - this.textBoxResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBoxResult.Size = new System.Drawing.Size(659, 357); - this.textBoxResult.TabIndex = 23; - // - // buttonDownload - // - this.buttonDownload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonDownload.Image = ((System.Drawing.Image)(resources.GetObject("buttonDownload.Image"))); - this.buttonDownload.Location = new System.Drawing.Point(572, 12); - this.buttonDownload.Name = "buttonDownload"; - this.buttonDownload.Size = new System.Drawing.Size(100, 25); - this.buttonDownload.TabIndex = 20; - this.buttonDownload.Text = "Get Payload"; - this.buttonDownload.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonDownload.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.buttonDownload.UseVisualStyleBackColor = true; - this.buttonDownload.Click += new System.EventHandler(this.buttonDownload_Click); - // - // textPort - // - this.textPort.Location = new System.Drawing.Point(213, 15); - this.textPort.Name = "textPort"; - this.textPort.Size = new System.Drawing.Size(50, 20); - this.textPort.TabIndex = 15; - this.textPort.Text = "3937"; - // - // labelPort - // - this.labelPort.AutoSize = true; - this.labelPort.Location = new System.Drawing.Point(181, 18); - this.labelPort.Name = "labelPort"; - this.labelPort.Size = new System.Drawing.Size(26, 13); - this.labelPort.TabIndex = 14; - this.labelPort.Text = "Port"; - // - // textIpAddress - // - this.textIpAddress.Location = new System.Drawing.Point(75, 15); - this.textIpAddress.Name = "textIpAddress"; - this.textIpAddress.Size = new System.Drawing.Size(100, 20); - this.textIpAddress.TabIndex = 13; - this.textIpAddress.Text = "239.0.2.129"; - // - // labelIpAddress - // - this.labelIpAddress.AutoSize = true; - this.labelIpAddress.Location = new System.Drawing.Point(12, 18); - this.labelIpAddress.Name = "labelIpAddress"; - this.labelIpAddress.Size = new System.Drawing.Size(57, 13); - this.labelIpAddress.TabIndex = 12; - this.labelIpAddress.Text = "IP address"; - // - // SimpleDvbStpDownloadForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(684, 412); - this.Controls.Add(this.textSegmentId); - this.Controls.Add(this.labelSegmentID); - this.Controls.Add(this.textPayloadId); - this.Controls.Add(this.labelPayloadId); - this.Controls.Add(this.textBoxResult); - this.Controls.Add(this.buttonDownload); - this.Controls.Add(this.textPort); - this.Controls.Add(this.labelPort); - this.Controls.Add(this.textIpAddress); - this.Controls.Add(this.labelIpAddress); - this.Name = "SimpleDvbStpDownloadForm"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "Simple DVB-STP Payload downloader"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox textSegmentId; - private System.Windows.Forms.Label labelSegmentID; - private System.Windows.Forms.TextBox textPayloadId; - private System.Windows.Forms.Label labelPayloadId; - private System.Windows.Forms.TextBox textBoxResult; - private System.Windows.Forms.Button buttonDownload; - private System.Windows.Forms.TextBox textPort; - private System.Windows.Forms.Label labelPort; - private System.Windows.Forms.TextBox textIpAddress; - private System.Windows.Forms.Label labelIpAddress; - - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class SimpleDvbStpDownloadForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SimpleDvbStpDownloadForm)); + this.textSegmentId = new System.Windows.Forms.TextBox(); + this.labelSegmentID = new System.Windows.Forms.Label(); + this.textPayloadId = new System.Windows.Forms.TextBox(); + this.labelPayloadId = new System.Windows.Forms.Label(); + this.textBoxResult = new System.Windows.Forms.TextBox(); + this.buttonDownload = new System.Windows.Forms.Button(); + this.textPort = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.textIpAddress = new System.Windows.Forms.TextBox(); + this.labelIpAddress = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // textSegmentId + // + this.textSegmentId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textSegmentId.Location = new System.Drawing.Point(491, 15); + this.textSegmentId.Name = "textSegmentId"; + this.textSegmentId.Size = new System.Drawing.Size(75, 20); + this.textSegmentId.TabIndex = 19; + // + // labelSegmentID + // + this.labelSegmentID.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelSegmentID.AutoSize = true; + this.labelSegmentID.Location = new System.Drawing.Point(425, 18); + this.labelSegmentID.Name = "labelSegmentID"; + this.labelSegmentID.Size = new System.Drawing.Size(60, 13); + this.labelSegmentID.TabIndex = 18; + this.labelSegmentID.Text = "SegmentID"; + // + // textPayloadId + // + this.textPayloadId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textPayloadId.Location = new System.Drawing.Point(369, 15); + this.textPayloadId.Name = "textPayloadId"; + this.textPayloadId.Size = new System.Drawing.Size(50, 20); + this.textPayloadId.TabIndex = 17; + this.textPayloadId.Text = "0x01"; + // + // labelPayloadId + // + this.labelPayloadId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelPayloadId.AutoSize = true; + this.labelPayloadId.Location = new System.Drawing.Point(307, 18); + this.labelPayloadId.Name = "labelPayloadId"; + this.labelPayloadId.Size = new System.Drawing.Size(56, 13); + this.labelPayloadId.TabIndex = 16; + this.labelPayloadId.Text = "PayloadID"; + // + // textBoxResult + // + this.textBoxResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxResult.Location = new System.Drawing.Point(13, 43); + this.textBoxResult.Multiline = true; + this.textBoxResult.Name = "textBoxResult"; + this.textBoxResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxResult.Size = new System.Drawing.Size(659, 357); + this.textBoxResult.TabIndex = 23; + // + // buttonDownload + // + this.buttonDownload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDownload.Image = ((System.Drawing.Image)(resources.GetObject("buttonDownload.Image"))); + this.buttonDownload.Location = new System.Drawing.Point(572, 12); + this.buttonDownload.Name = "buttonDownload"; + this.buttonDownload.Size = new System.Drawing.Size(100, 25); + this.buttonDownload.TabIndex = 20; + this.buttonDownload.Text = "Get Payload"; + this.buttonDownload.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonDownload.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonDownload.UseVisualStyleBackColor = true; + this.buttonDownload.Click += new System.EventHandler(this.buttonDownload_Click); + // + // textPort + // + this.textPort.Location = new System.Drawing.Point(213, 15); + this.textPort.Name = "textPort"; + this.textPort.Size = new System.Drawing.Size(50, 20); + this.textPort.TabIndex = 15; + this.textPort.Text = "3937"; + // + // labelPort + // + this.labelPort.AutoSize = true; + this.labelPort.Location = new System.Drawing.Point(181, 18); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(26, 13); + this.labelPort.TabIndex = 14; + this.labelPort.Text = "Port"; + // + // textIpAddress + // + this.textIpAddress.Location = new System.Drawing.Point(75, 15); + this.textIpAddress.Name = "textIpAddress"; + this.textIpAddress.Size = new System.Drawing.Size(100, 20); + this.textIpAddress.TabIndex = 13; + this.textIpAddress.Text = "239.0.2.129"; + // + // labelIpAddress + // + this.labelIpAddress.AutoSize = true; + this.labelIpAddress.Location = new System.Drawing.Point(12, 18); + this.labelIpAddress.Name = "labelIpAddress"; + this.labelIpAddress.Size = new System.Drawing.Size(57, 13); + this.labelIpAddress.TabIndex = 12; + this.labelIpAddress.Text = "IP address"; + // + // SimpleDvbStpDownloadForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.textSegmentId); + this.Controls.Add(this.labelSegmentID); + this.Controls.Add(this.textPayloadId); + this.Controls.Add(this.labelPayloadId); + this.Controls.Add(this.textBoxResult); + this.Controls.Add(this.buttonDownload); + this.Controls.Add(this.textPort); + this.Controls.Add(this.labelPort); + this.Controls.Add(this.textIpAddress); + this.Controls.Add(this.labelIpAddress); + this.Name = "SimpleDvbStpDownloadForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Text = "Simple DVB-STP Payload downloader"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textSegmentId; + private System.Windows.Forms.Label labelSegmentID; + private System.Windows.Forms.TextBox textPayloadId; + private System.Windows.Forms.Label labelPayloadId; + private System.Windows.Forms.TextBox textBoxResult; + private System.Windows.Forms.Button buttonDownload; + private System.Windows.Forms.TextBox textPort; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.TextBox textIpAddress; + private System.Windows.Forms.Label labelIpAddress; + + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs index 813575e1..0f910355 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs @@ -1,72 +1,72 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.DvbStpClient; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.Tools.GuiTools -{ - public partial class SimpleDvbStpDownloadForm : Form - { - public SimpleDvbStpDownloadForm() - { - InitializeComponent(); - this.Icon = Properties.Resources.GuiTools; - } // constructor - - private void buttonDownload_Click(object sender, EventArgs e) - { - string context = null; - string input; - - textBoxResult.Text = null; - - try - { - context = "IP Address"; - input = textIpAddress.Text.Trim(); - var ipAddress = IPAddress.Parse(input); - - context = "Port"; - var port = Program.ParseNumber(textPort.Text); - - context = "PayloadID"; - var payloadId = (byte)Program.ParseNumber(textPayloadId.Text); - - context = "SegmentID"; - var segmentId = (short?)Program.ParseNullableNumber(textSegmentId.Text); - - context = "Start downloader"; - var downloader = new UiDvbStpSimpleDownloader(); - downloader.Request = new UiDvbStpSimpleDownloadRequest() - { - MulticastAddress = ipAddress, - MulticastPort = port, - PayloadId = payloadId, - SegmentId = segmentId, - NoDataTimeout = 120000, - }; - downloader.Download(this); - - context = "After download"; - if (downloader.IsOk) - { - textBoxResult.Text = Encoding.UTF8.GetString(downloader.Response.PayloadData); - } // if - } - catch (Exception ex) - { - MyApplication.HandleException(this, context, ex); - } // try-catch - } // buttonDownload_Click - } // class SimpleDvbStpDownloadForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.DvbStpClient; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Net; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class SimpleDvbStpDownloadForm : Form + { + public SimpleDvbStpDownloadForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.GuiTools; + } // constructor + + private void buttonDownload_Click(object sender, EventArgs e) + { + string context = null; + string input; + + textBoxResult.Text = null; + + try + { + context = "IP Address"; + input = textIpAddress.Text.Trim(); + var ipAddress = IPAddress.Parse(input); + + context = "Port"; + var port = Program.ParseNumber(textPort.Text); + + context = "PayloadID"; + var payloadId = (byte)Program.ParseNumber(textPayloadId.Text); + + context = "SegmentID"; + var segmentId = (short?)Program.ParseNullableNumber(textSegmentId.Text); + + context = "Start downloader"; + var downloader = new UiDvbStpSimpleDownloader(); + downloader.Request = new UiDvbStpSimpleDownloadRequest() + { + MulticastAddress = ipAddress, + MulticastPort = port, + PayloadId = payloadId, + SegmentId = segmentId, + NoDataTimeout = 120000, + }; + downloader.Download(this); + + context = "After download"; + if (downloader.IsOk) + { + textBoxResult.Text = Encoding.UTF8.GetString(downloader.Response.PayloadData); + } // if + } + catch (Exception ex) + { + MyApplication.HandleException(this, context, ex); + } // try-catch + } // buttonDownload_Click + } // class SimpleDvbStpDownloadForm +} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj index 381b8718..326ba171 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj +++ b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj @@ -1,81 +1,81 @@ - - - - - Debug - AnyCPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B} - Library - Properties - Project.IpTv.MovistarPlus - IpTv.MovistarPlus - v3.5 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\Third-party\Json70r1\Bin\Net35\Newtonsoft.Json.dll - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - - {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} - UiServices.Config - - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery - - - - + + + + + Debug + AnyCPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B} + Library + Properties + IpTviewr.MovistarPlus + IpTv.MovistarPlus + v3.5 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\Third-party\Json70r1\Bin\Net35\Newtonsoft.Json.dll + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + Core.IpTvProvider + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs index ad01b8f9..8be4cc76 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs +++ b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs @@ -1,18 +1,18 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.UiServices.Configuration; - -namespace Project.IpTv.MovistarPlus -{ - public class IpTvProviderMovistarPlus : Core.IpTvProvider.IpTvProvider - { - public override InitializationResult Initialize() - { - //EpgInfo = new EpgInfoProvider(); - - return InitializationResult.Ok; - } // Initialize - } // class IpTvProviderMovistarPlus -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IpTviewr.UiServices.Configuration; + +namespace IpTviewr.MovistarPlus +{ + public class IpTvProviderMovistarPlus : Core.IpTvProvider.IpTvProvider + { + public override InitializationResult Initialize() + { + //EpgInfo = new EpgInfoProvider(); + + return InitializationResult.Ok; + } // Initialize + } // class IpTvProviderMovistarPlus +} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs index b955e890..a9d0e443 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs +++ b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs @@ -1,49 +1,49 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.MovistarPlus -{ - public class MovistarCrId - { - public static MovistarCrId Get(string CRID) - { - var crid = new Uri(CRID); - var components = crid.AbsolutePath.Split('/'); - if (components.Length != 4) return null; - if (components[2] != components[3]) return null; - if (components[3].Length < 5) return null; - - var result = new MovistarCrId() - { - SeriesId = components[1], - ContentIdRoot = components[3].Substring(0, 4), - ContentId = components[3] - }; - - return result; - } // Get - - public string SeriesId - { - get; - private set; - } // SeriedId - - public string ContentIdRoot - { - get; - private set; - } // ContentIdRoot - - public string ContentId - { - get; - private set; - } // ContentId - } // class MovistarCrId -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.MovistarPlus +{ + public class MovistarCrId + { + public static MovistarCrId Get(string CRID) + { + var crid = new Uri(CRID); + var components = crid.AbsolutePath.Split('/'); + if (components.Length != 4) return null; + if (components[2] != components[3]) return null; + if (components[3].Length < 5) return null; + + var result = new MovistarCrId() + { + SeriesId = components[1], + ContentIdRoot = components[3].Substring(0, 4), + ContentId = components[3] + }; + + return result; + } // Get + + public string SeriesId + { + get; + private set; + } // SeriedId + + public string ContentIdRoot + { + get; + private set; + } // ContentIdRoot + + public string ContentId + { + get; + private set; + } // ContentId + } // class MovistarCrId +} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs index a4c99821..3231a8ca 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs +++ b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs @@ -1,23 +1,23 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.MovistarPlus -{ - public abstract class MovistarJsonResponse - { - [JsonProperty("resultCode")] - public int Code; - - [JsonProperty("resultText")] - public string Text; - - [JsonProperty("hashCode")] - public string HashCode; - } // abstract class MovistarJsonResponse -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.MovistarPlus +{ + public abstract class MovistarJsonResponse + { + [JsonProperty("resultCode")] + public int Code; + + [JsonProperty("resultText")] + public string Text; + + [JsonProperty("hashCode")] + public string HashCode; + } // abstract class MovistarJsonResponse +} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs index 5163deb6..d7ac313d 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IpTv.MovistarPlus")] -[assembly: AssemblyDescription("Project.IpTv.IpTvProvider.MovistarPlus")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d01ab43e-4873-413f-9fb2-9bde7c593b00")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IpTv.MovistarPlus")] +[assembly: AssemblyDescription("IpTviewr.IpTvProvider.MovistarPlus")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d01ab43e-4873-413f-9fb2-9bde7c593b00")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs index 1348d64d..46dc1643 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs @@ -1,55 +1,55 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.RecorderLauncher -{ - internal static class InternalExtensions - { - public static string ToString(this Exception ex, bool withMessage, bool withStackTrace) - { - StringBuilder buffer; - - buffer = new StringBuilder(); - ex.ToString(buffer, withMessage, withStackTrace); - - return buffer.ToString(); - } // Exception.ToString - - public static void ToString(this Exception ex, StringBuilder buffer, bool withMessage, bool withStackTrace) - { - string message = withMessage ? ex.Message : null; - - buffer.Append(ex.GetType().FullName); - if (message != null && message.Length > 0) - { - buffer.Append(": "); - buffer.Append(message); - } // if-else - - if (ex.InnerException != null) - { - buffer.Append(Environment.NewLine); - buffer.Append(" --> "); - ex.InnerException.ToString(buffer, withMessage, withStackTrace); - buffer.Append(Environment.NewLine); - buffer.Append(" "); - buffer.Append(Properties.Texts.ExceptionEndInnerList); - } // if - - if (withStackTrace) - { - string stackTrace = ex.StackTrace; - if (stackTrace != null) - { - buffer.Append(Environment.NewLine); - buffer.Append(stackTrace); - } // if - } // if - } // Exception.ToString - } // class Extensions -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.RecorderLauncher +{ + internal static class InternalExtensions + { + public static string ToString(this Exception ex, bool withMessage, bool withStackTrace) + { + StringBuilder buffer; + + buffer = new StringBuilder(); + ex.ToString(buffer, withMessage, withStackTrace); + + return buffer.ToString(); + } // Exception.ToString + + public static void ToString(this Exception ex, StringBuilder buffer, bool withMessage, bool withStackTrace) + { + string message = withMessage ? ex.Message : null; + + buffer.Append(ex.GetType().FullName); + if (message != null && message.Length > 0) + { + buffer.Append(": "); + buffer.Append(message); + } // if-else + + if (ex.InnerException != null) + { + buffer.Append(Environment.NewLine); + buffer.Append(" --> "); + ex.InnerException.ToString(buffer, withMessage, withStackTrace); + buffer.Append(Environment.NewLine); + buffer.Append(" "); + buffer.Append(Properties.Texts.ExceptionEndInnerList); + } // if + + if (withStackTrace) + { + string stackTrace = ex.StackTrace; + if (stackTrace != null) + { + buffer.Append(Environment.NewLine); + buffer.Append(stackTrace); + } // if + } // if + } // Exception.ToString + } // class Extensions +} // namespace diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj b/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj index a0e01cc6..0dba536e 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj @@ -1,123 +1,123 @@ - - - - - Debug - AnyCPU - {DDA7264E-C003-4E3A-B657-27EE2543F101} - Exe - Properties - Project.IpTv.RecorderLauncher - IpTvRecorderLauncher - v3.5 - 512 - SAK - SAK - SAK - SAK - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - Resources\recorder.ico - - - - - - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - True - True - SerializationTexts.resx - - - - - - True - True - Resources.resx - - - True - True - Texts.resx - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - ResXFileCodeGenerator - SerializationTexts.Designer.cs - - - - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} - Services.Record.Serialization - - - - + + + + + Debug + AnyCPU + {DDA7264E-C003-4E3A-B657-27EE2543F101} + Exe + Properties + IpTviewr.RecorderLauncher + IpTvRecorderLauncher + v3.5 + 512 + SAK + SAK + SAK + SAK + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Resources\recorder.ico + + + + + + + + + False + ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + True + True + SerializationTexts.resx + + + + + + True + True + Resources.resx + + + True + True + Texts.resx + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + ResXFileCodeGenerator + SerializationTexts.Designer.cs + + + + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} + Services.Record.Serialization + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs index de73b4ae..882cb546 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs @@ -1,397 +1,397 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.Win32.SafeHandles; -using Project.IpTv.Common; -using Project.IpTv.Services.Record.Serialization; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.RecorderLauncher -{ - internal class Launcher - { - private DateTime StartTime; - private TimeSpan TotalTime; - private bool RecordingLate; - private bool RecordingTimeExceeded; - private bool RecordingTimeExceededDisplayed; - private int TimerTickCount; - - public Program.Result Run(Guid taskId, string dbFile, string logFolder) - { - var logFilename = Path.Combine(logFolder, string.Format("{0}{1}", taskId, Properties.Resources.ExtensionLogFile)); - if (logFolder != null) - { - Logger.Start(logFilename, Logger.Level.Verbose); - } // if - - var task = LoadRecordTask(taskId, dbFile); - if (task == null) return Program.Result.XmlFile; - - CreateWindowsJob(); - - return LaunchRecorderProgram(task); - } // Run - - private static RecordTask LoadRecordTask(Guid taskId, string dbFile) - { - RecordTask task; - - try - { - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLoadingXml, taskId, dbFile); - Console.Write(Properties.Texts.DisplayLoadingXml); - - task = RecordTaskSerialization.LoadFromDatabase(dbFile, taskId); - - Console.WriteLine(Properties.Texts.DisplayActionOk); - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLoadingXmlOk); - - return task; - } - catch (Exception ex) - { - Console.WriteLine(); - Console.WriteLine(Properties.Texts.DisplayErrorLoadTaskFile); - Program.DisplayException(ex); - Logger.Exception(ex, Properties.Texts.LogExceptionLoadTaskFile); - return null; - } // try-catch - } // LoadXml - - private static void CreateWindowsJob() - { -#if DEBUG - // Running in the development environment? - // If running under Visual Studio host process (vshost) or launched by Visual Studio, - // a "permission denied" error is thrown by Windows when trying to create the job - - var assembly = Assembly.GetEntryAssembly(); - var exePath = Path.GetDirectoryName(assembly.CodeBase); - if (exePath.EndsWith(Properties.Resources.PathUnderDevelopmentEnvironment, StringComparison.InvariantCultureIgnoreCase)) - { - Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningDevelopmentWindowsJob); - return; - } // if -#endif - SafeFileHandle jobHandle; - IntPtr extendedInfoPtr; - - jobHandle = null; - extendedInfoPtr = IntPtr.Zero; - - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoCreatingWindowsJob); - - try - { - using (var process = Process.GetCurrentProcess()) - { - string jobName = string.Format(Properties.Resources.FormatJobName, Assembly.GetEntryAssembly().GetName().Name, process.Id); - Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseJobName, jobName); - - var jobHandleNative = UnsafeNativeMethods.CreateJobObject(IntPtr.Zero, jobName); - if (jobHandleNative == IntPtr.Zero) - { - var ex = new Win32Exception(); - Logger.Exception(ex, Properties.Texts.LogExceptionCreateJobObject, jobName); - throw ex; - } // if - Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseJobHandle, jobHandleNative); - - jobHandle = new SafeFileHandle(jobHandleNative, true); - if (!UnsafeNativeMethods.AssignProcessToJobObject(jobHandleNative, process.Handle)) - { - var ex = new Win32Exception(); - Logger.Exception(ex, Properties.Texts.LogExceptionAssignProcessToJobObject, jobHandleNative, process.Handle); - throw ex; - } // if - } // using process - - var basicInfo = new UnsafeNativeMethods.JobObjectBasicLimitInformation() - { - LimitFlags = UnsafeNativeMethods.JobjObjectLimitKillOnJobClose, - }; - var extendedInfo = new UnsafeNativeMethods.JobObjectExtendedLimitInformation() - { - BasicLimitInformation = basicInfo, - }; - var length = Marshal.SizeOf(extendedInfo); - extendedInfoPtr = Marshal.AllocHGlobal(length); - Marshal.StructureToPtr(extendedInfo, extendedInfoPtr, false); - if (!UnsafeNativeMethods.SetInformationJobObject(jobHandle.DangerousGetHandle(), UnsafeNativeMethods.JobObjectInfoClass.ExtendedLimitInformation, extendedInfoPtr, (uint)length)) - { - var ex = new Win32Exception(); - Logger.Exception(ex, Properties.Texts.LogExceptionSetInformationJobObject); - throw ex; - } // if - - // avoid closing the job handle! If the job handle is closed, all the processes in the job will be closed, - // as this handle is the last handle to the job (as it is the only one). If the handle is not set as invalid, - // it will be closed at a later time when the GC collects the SafeFileHandle, thus aborting the recording process. - // as per MSDN: "JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE causes all processes associated with the job to terminate when the last handle to the job is closed." - // ** This resolves issue #1767 ** - jobHandle.SetHandleAsInvalid(); - jobHandle = null; - } - finally - { - if (extendedInfoPtr != IntPtr.Zero) - { - Marshal.FreeHGlobal(extendedInfoPtr); - } // if - if ((jobHandle != null) && (!jobHandle.IsInvalid)) - { - jobHandle.Close(); - } // if - } // finally - - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoCreatingWindowsJobOk); - } // CreateWindowsJob - - private void DisplayTaskData(RecordTask task, TimeSpan totalRecordTime) - { - var buffer = new StringBuilder(); - - task.BuildDescription(false, true, false, true, true, true, totalRecordTime, buffer); - buffer.AppendLine(); - - Console.WriteLine(buffer.ToString()); - } // DisplayTaskData - - private Program.Result LaunchRecorderProgram(RecordTask task) - { - var scheduledStartTime = task.Schedule.GetStartDateTime(); - var scheduledTotalTime = task.Schedule.GetSafetyMargin() + task.Duration.Length + task.Duration.SafetyMarginTimeSpan; - var now = DateTime.Now; - // var scheduledDateTime = new DateTime(scheduledStartTime.Year, scheduledStartTime.Month, scheduledStartTime.Day, scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); - // TODO: determine most probable launch date; we need to account for HUGE delays between scheduled run time and real run time - var scheduledDateTime = new DateTime(now.Year, now.Month, now.Day, scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); - var gap = now - scheduledDateTime; - - if (gap.TotalSeconds < 1) gap = TimeSpan.Zero; - TotalTime = scheduledTotalTime - gap; - - Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseScheduledStartTimeGap, - scheduledStartTime, scheduledTotalTime, gap, TotalTime); - DisplayTaskData(task, TotalTime); - - if (TotalTime.TotalSeconds < 1) - { - Logger.Log(Logger.Level.Error, Properties.Texts.LogErrorTooLate); - return Program.Result.TooLate; - } // if - - if (gap.TotalSeconds < 30) gap = TimeSpan.Zero; - if (gap.TotalSeconds > task.Schedule.GetSafetyMargin().TotalSeconds) - { - RecordingLate = true; - Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningRecordingLate, (int)task.Schedule.GetSafetyMargin().TotalMinutes); - Console.WriteLine(Properties.Texts.DisplayWarningRecordingLate, (int)task.Schedule.GetSafetyMargin().TotalMinutes); - } - else if (gap.TotalSeconds > 0) - { - Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningBehindSchedule, gap); - Console.WriteLine(Properties.Texts.DisplayWarningBehindSchedule, gap); - } // if-else - - var date = string.Format(Properties.Texts.FormatRecordFileDate, - now.Year, now.Month, now.Day, - scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); - - var filename = string.Format(Properties.Texts.FormatRecordFileName, - task.Action.SaveLocationPath, - task.Action.Filename, - date, - RecordingLate ? Properties.Texts.FormatRecordFileDelayed : null, - task.Action.FileExtension); - - var parameters = CreateParameters(filename, task); - LogParameters(parameters); - var arguments = ArgumentsManager.ExpandArguments(task.Action.Recorder.Arguments, parameters, Properties.Resources.ArgumentsOpenBrace, Properties.Resources.ArgumentsCloseBrace, StringComparison.CurrentCultureIgnoreCase); - var joinedArguments = ArgumentsManager.JoinArguments(arguments); - LogArguments(task.Action.Recorder.Path, task.Action.Recorder.Arguments, joinedArguments); - - try - { - var info = new ProcessStartInfo() - { - FileName = task.Action.Recorder.Path, - Arguments = joinedArguments, - ErrorDialog = false, - UseShellExecute = false, - }; - - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLaunchingRecorder); - Console.Write(Properties.Texts.DisplayLaunchingRecorder); - using (var process = Process.Start(info)) - { - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLaunchingRecorderOk, process.Id); - Console.WriteLine(Properties.Texts.DisplayLaunchingRecorderOk, process.Id); - - TimerTickCount = 0; - StartTime = DateTime.UtcNow; - var timer = new System.Threading.Timer(OnTimerTick, null, 0, 60000); - - Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseWaitForExit); - process.WaitForExit(); - - timer.Dispose(); - Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoRecorderExited, process.ExitCode); - - Console.WriteLine(); - Console.WriteLine(); - Console.WriteLine(Properties.Texts.DisplayRecorderFinished); - - if (process.ExitCode != 0) - { - return Program.Result.ExecFailure; - } // if - } // using - } - catch (Exception ex) - { - Logger.Exception(ex, Properties.Texts.LogExceptionLaunchingRecorder); - Program.DisplayException(ex); - - return Program.Result.ExecProblem; - } // try-catch - - return Program.Result.Ok; - } // LaunchRecorderProgram - - private IDictionary CreateParameters(string filename, RecordTask task) - { - var paramKeys = new string[] - { - "OutputFile", - "Channel.Url", - "Channel.Name", - "Channel.Description", - "Description.Name", - "Description.Description", - "Duration.TotalSeconds", - }; - var paramValues = new string[] - { - filename, - task.Channel.ChannelUrl, - task.Channel.Name, - task.Channel.Description, - task.Description.Name, - task.Description.Description, - ((int)TotalTime.TotalSeconds).ToString(CultureInfo.InvariantCulture), - }; - - return ArgumentsManager.CreateParameters(paramKeys, paramValues, false); - } // CreateParameters - - private void OnTimerTick(object state) - { - try - { - var elapsed = DateTime.UtcNow - StartTime; - var remaining = TotalTime - elapsed; - - if ((TimerTickCount % 10) == 0) - { - Logger.Log(Logger.Level.Verbose, "OnTimerTick({0}, {1})", elapsed, remaining); - } // if - ++TimerTickCount; - - if (remaining.TotalSeconds < 0) - { - if (remaining.TotalSeconds >= -30) - { - remaining = TimeSpan.Zero; - } - else - { - if (!RecordingTimeExceededDisplayed) - { - RecordingTimeExceeded = true; - RecordingTimeExceededDisplayed = true; - Logger.Log(Logger.Level.Error, Properties.Texts.LogErrorRecordingTimeExceeded); - - Console.Write(new string(' ', Console.WindowWidth - 2)); - Console.Write("\r"); - Console.WriteLine(Properties.Texts.DisplayRecordingTimeExceeded); - } // if - remaining = TimeSpan.FromSeconds(-remaining.TotalSeconds); - } // if - } // if - - if (elapsed > TotalTime) elapsed = TotalTime; - - var remainingFormat = (remaining.Days > 0) ? "{0,3}.{1:00}:{2:00}:{3:00}" : "{1:00}:{2:00}:{3:00}"; - var remainingText = string.Format(remainingFormat, remaining.Days, remaining.Hours, remaining.Minutes, remaining.Seconds); - - var barLength = (Console.WindowWidth - 2) - remainingText.Length; - var secondsPerChar = TotalTime.TotalSeconds / barLength; - var elapsedChars = (int)(elapsed.TotalSeconds / secondsPerChar); - var progressElapsed = new string('#', elapsedChars); - var progressRemaining = new string('.', barLength - elapsedChars); - - var ForeColor = Console.ForegroundColor; - if (RecordingTimeExceeded) Console.ForegroundColor = ConsoleColor.Red; - Console.Write(progressElapsed); - Console.Write(progressRemaining); - if (RecordingTimeExceeded) Console.ForegroundColor = ForeColor; - Console.Write(" "); - Console.Write(remainingText); - Console.Write("\r"); - } - catch (Exception ex) - { - Logger.Exception(ex); - } // try-catch - } // OnTimerTick - - private void LogParameters(IDictionary parameters) - { - if (Logger.MinLevel > Logger.Level.Verbose) return; - - var buffer = new StringBuilder(); - - buffer.Append(Properties.Texts.LogVerboseCreatingRecorderParameters); - foreach(var parameter in parameters) - { - buffer.AppendLine(); - buffer.AppendFormat("{0}: {1}", parameter.Key, parameter.Value); - } // for - - Logger.Log(Logger.Level.Verbose, buffer.ToString()); - } // LogParameters - - private void LogArguments(string exePath, string[] originalArguments, string arguments) - { - if (Logger.MinLevel > Logger.Level.Verbose) return; - - var buffer = new StringBuilder(); - - buffer.AppendLine(Properties.Texts.LogVerboseAboutLaunchRecorder); - - buffer.Append('"'); - buffer.Append(exePath); - buffer.Append("\" "); - buffer.Append(arguments); - - for (int index = 0; index < originalArguments.Length; index++) - { - buffer.AppendLine(); - buffer.AppendFormat("{0}", originalArguments[index]); - } // for - - Logger.Log(Logger.Level.Verbose, buffer.ToString()); - } // LogArguments - } // static class Launcher -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Microsoft.Win32.SafeHandles; +using IpTviewr.Common; +using IpTviewr.Services.Record.Serialization; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.RecorderLauncher +{ + internal class Launcher + { + private DateTime StartTime; + private TimeSpan TotalTime; + private bool RecordingLate; + private bool RecordingTimeExceeded; + private bool RecordingTimeExceededDisplayed; + private int TimerTickCount; + + public Program.Result Run(Guid taskId, string dbFile, string logFolder) + { + var logFilename = Path.Combine(logFolder, string.Format("{0}{1}", taskId, Properties.Resources.ExtensionLogFile)); + if (logFolder != null) + { + Logger.Start(logFilename, Logger.Level.Verbose); + } // if + + var task = LoadRecordTask(taskId, dbFile); + if (task == null) return Program.Result.XmlFile; + + CreateWindowsJob(); + + return LaunchRecorderProgram(task); + } // Run + + private static RecordTask LoadRecordTask(Guid taskId, string dbFile) + { + RecordTask task; + + try + { + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLoadingXml, taskId, dbFile); + Console.Write(Properties.Texts.DisplayLoadingXml); + + task = RecordTaskSerialization.LoadFromDatabase(dbFile, taskId); + + Console.WriteLine(Properties.Texts.DisplayActionOk); + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLoadingXmlOk); + + return task; + } + catch (Exception ex) + { + Console.WriteLine(); + Console.WriteLine(Properties.Texts.DisplayErrorLoadTaskFile); + Program.DisplayException(ex); + Logger.Exception(ex, Properties.Texts.LogExceptionLoadTaskFile); + return null; + } // try-catch + } // LoadXml + + private static void CreateWindowsJob() + { +#if DEBUG + // Running in the development environment? + // If running under Visual Studio host process (vshost) or launched by Visual Studio, + // a "permission denied" error is thrown by Windows when trying to create the job + + var assembly = Assembly.GetEntryAssembly(); + var exePath = Path.GetDirectoryName(assembly.CodeBase); + if (exePath.EndsWith(Properties.Resources.PathUnderDevelopmentEnvironment, StringComparison.InvariantCultureIgnoreCase)) + { + Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningDevelopmentWindowsJob); + return; + } // if +#endif + SafeFileHandle jobHandle; + IntPtr extendedInfoPtr; + + jobHandle = null; + extendedInfoPtr = IntPtr.Zero; + + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoCreatingWindowsJob); + + try + { + using (var process = Process.GetCurrentProcess()) + { + string jobName = string.Format(Properties.Resources.FormatJobName, Assembly.GetEntryAssembly().GetName().Name, process.Id); + Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseJobName, jobName); + + var jobHandleNative = UnsafeNativeMethods.CreateJobObject(IntPtr.Zero, jobName); + if (jobHandleNative == IntPtr.Zero) + { + var ex = new Win32Exception(); + Logger.Exception(ex, Properties.Texts.LogExceptionCreateJobObject, jobName); + throw ex; + } // if + Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseJobHandle, jobHandleNative); + + jobHandle = new SafeFileHandle(jobHandleNative, true); + if (!UnsafeNativeMethods.AssignProcessToJobObject(jobHandleNative, process.Handle)) + { + var ex = new Win32Exception(); + Logger.Exception(ex, Properties.Texts.LogExceptionAssignProcessToJobObject, jobHandleNative, process.Handle); + throw ex; + } // if + } // using process + + var basicInfo = new UnsafeNativeMethods.JobObjectBasicLimitInformation() + { + LimitFlags = UnsafeNativeMethods.JobjObjectLimitKillOnJobClose, + }; + var extendedInfo = new UnsafeNativeMethods.JobObjectExtendedLimitInformation() + { + BasicLimitInformation = basicInfo, + }; + var length = Marshal.SizeOf(extendedInfo); + extendedInfoPtr = Marshal.AllocHGlobal(length); + Marshal.StructureToPtr(extendedInfo, extendedInfoPtr, false); + if (!UnsafeNativeMethods.SetInformationJobObject(jobHandle.DangerousGetHandle(), UnsafeNativeMethods.JobObjectInfoClass.ExtendedLimitInformation, extendedInfoPtr, (uint)length)) + { + var ex = new Win32Exception(); + Logger.Exception(ex, Properties.Texts.LogExceptionSetInformationJobObject); + throw ex; + } // if + + // avoid closing the job handle! If the job handle is closed, all the processes in the job will be closed, + // as this handle is the last handle to the job (as it is the only one). If the handle is not set as invalid, + // it will be closed at a later time when the GC collects the SafeFileHandle, thus aborting the recording process. + // as per MSDN: "JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE causes all processes associated with the job to terminate when the last handle to the job is closed." + // ** This resolves issue #1767 ** + jobHandle.SetHandleAsInvalid(); + jobHandle = null; + } + finally + { + if (extendedInfoPtr != IntPtr.Zero) + { + Marshal.FreeHGlobal(extendedInfoPtr); + } // if + if ((jobHandle != null) && (!jobHandle.IsInvalid)) + { + jobHandle.Close(); + } // if + } // finally + + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoCreatingWindowsJobOk); + } // CreateWindowsJob + + private void DisplayTaskData(RecordTask task, TimeSpan totalRecordTime) + { + var buffer = new StringBuilder(); + + task.BuildDescription(false, true, false, true, true, true, totalRecordTime, buffer); + buffer.AppendLine(); + + Console.WriteLine(buffer.ToString()); + } // DisplayTaskData + + private Program.Result LaunchRecorderProgram(RecordTask task) + { + var scheduledStartTime = task.Schedule.GetStartDateTime(); + var scheduledTotalTime = task.Schedule.GetSafetyMargin() + task.Duration.Length + task.Duration.SafetyMarginTimeSpan; + var now = DateTime.Now; + // var scheduledDateTime = new DateTime(scheduledStartTime.Year, scheduledStartTime.Month, scheduledStartTime.Day, scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); + // TODO: determine most probable launch date; we need to account for HUGE delays between scheduled run time and real run time + var scheduledDateTime = new DateTime(now.Year, now.Month, now.Day, scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); + var gap = now - scheduledDateTime; + + if (gap.TotalSeconds < 1) gap = TimeSpan.Zero; + TotalTime = scheduledTotalTime - gap; + + Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseScheduledStartTimeGap, + scheduledStartTime, scheduledTotalTime, gap, TotalTime); + DisplayTaskData(task, TotalTime); + + if (TotalTime.TotalSeconds < 1) + { + Logger.Log(Logger.Level.Error, Properties.Texts.LogErrorTooLate); + return Program.Result.TooLate; + } // if + + if (gap.TotalSeconds < 30) gap = TimeSpan.Zero; + if (gap.TotalSeconds > task.Schedule.GetSafetyMargin().TotalSeconds) + { + RecordingLate = true; + Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningRecordingLate, (int)task.Schedule.GetSafetyMargin().TotalMinutes); + Console.WriteLine(Properties.Texts.DisplayWarningRecordingLate, (int)task.Schedule.GetSafetyMargin().TotalMinutes); + } + else if (gap.TotalSeconds > 0) + { + Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningBehindSchedule, gap); + Console.WriteLine(Properties.Texts.DisplayWarningBehindSchedule, gap); + } // if-else + + var date = string.Format(Properties.Texts.FormatRecordFileDate, + now.Year, now.Month, now.Day, + scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); + + var filename = string.Format(Properties.Texts.FormatRecordFileName, + task.Action.SaveLocationPath, + task.Action.Filename, + date, + RecordingLate ? Properties.Texts.FormatRecordFileDelayed : null, + task.Action.FileExtension); + + var parameters = CreateParameters(filename, task); + LogParameters(parameters); + var arguments = ArgumentsManager.ExpandArguments(task.Action.Recorder.Arguments, parameters, Properties.Resources.ArgumentsOpenBrace, Properties.Resources.ArgumentsCloseBrace, StringComparison.CurrentCultureIgnoreCase); + var joinedArguments = ArgumentsManager.JoinArguments(arguments); + LogArguments(task.Action.Recorder.Path, task.Action.Recorder.Arguments, joinedArguments); + + try + { + var info = new ProcessStartInfo() + { + FileName = task.Action.Recorder.Path, + Arguments = joinedArguments, + ErrorDialog = false, + UseShellExecute = false, + }; + + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLaunchingRecorder); + Console.Write(Properties.Texts.DisplayLaunchingRecorder); + using (var process = Process.Start(info)) + { + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLaunchingRecorderOk, process.Id); + Console.WriteLine(Properties.Texts.DisplayLaunchingRecorderOk, process.Id); + + TimerTickCount = 0; + StartTime = DateTime.UtcNow; + var timer = new System.Threading.Timer(OnTimerTick, null, 0, 60000); + + Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseWaitForExit); + process.WaitForExit(); + + timer.Dispose(); + Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoRecorderExited, process.ExitCode); + + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine(Properties.Texts.DisplayRecorderFinished); + + if (process.ExitCode != 0) + { + return Program.Result.ExecFailure; + } // if + } // using + } + catch (Exception ex) + { + Logger.Exception(ex, Properties.Texts.LogExceptionLaunchingRecorder); + Program.DisplayException(ex); + + return Program.Result.ExecProblem; + } // try-catch + + return Program.Result.Ok; + } // LaunchRecorderProgram + + private IDictionary CreateParameters(string filename, RecordTask task) + { + var paramKeys = new string[] + { + "OutputFile", + "Channel.Url", + "Channel.Name", + "Channel.Description", + "Description.Name", + "Description.Description", + "Duration.TotalSeconds", + }; + var paramValues = new string[] + { + filename, + task.Channel.ChannelUrl, + task.Channel.Name, + task.Channel.Description, + task.Description.Name, + task.Description.Description, + ((int)TotalTime.TotalSeconds).ToString(CultureInfo.InvariantCulture), + }; + + return ArgumentsManager.CreateParameters(paramKeys, paramValues, false); + } // CreateParameters + + private void OnTimerTick(object state) + { + try + { + var elapsed = DateTime.UtcNow - StartTime; + var remaining = TotalTime - elapsed; + + if ((TimerTickCount % 10) == 0) + { + Logger.Log(Logger.Level.Verbose, "OnTimerTick({0}, {1})", elapsed, remaining); + } // if + ++TimerTickCount; + + if (remaining.TotalSeconds < 0) + { + if (remaining.TotalSeconds >= -30) + { + remaining = TimeSpan.Zero; + } + else + { + if (!RecordingTimeExceededDisplayed) + { + RecordingTimeExceeded = true; + RecordingTimeExceededDisplayed = true; + Logger.Log(Logger.Level.Error, Properties.Texts.LogErrorRecordingTimeExceeded); + + Console.Write(new string(' ', Console.WindowWidth - 2)); + Console.Write("\r"); + Console.WriteLine(Properties.Texts.DisplayRecordingTimeExceeded); + } // if + remaining = TimeSpan.FromSeconds(-remaining.TotalSeconds); + } // if + } // if + + if (elapsed > TotalTime) elapsed = TotalTime; + + var remainingFormat = (remaining.Days > 0) ? "{0,3}.{1:00}:{2:00}:{3:00}" : "{1:00}:{2:00}:{3:00}"; + var remainingText = string.Format(remainingFormat, remaining.Days, remaining.Hours, remaining.Minutes, remaining.Seconds); + + var barLength = (Console.WindowWidth - 2) - remainingText.Length; + var secondsPerChar = TotalTime.TotalSeconds / barLength; + var elapsedChars = (int)(elapsed.TotalSeconds / secondsPerChar); + var progressElapsed = new string('#', elapsedChars); + var progressRemaining = new string('.', barLength - elapsedChars); + + var ForeColor = Console.ForegroundColor; + if (RecordingTimeExceeded) Console.ForegroundColor = ConsoleColor.Red; + Console.Write(progressElapsed); + Console.Write(progressRemaining); + if (RecordingTimeExceeded) Console.ForegroundColor = ForeColor; + Console.Write(" "); + Console.Write(remainingText); + Console.Write("\r"); + } + catch (Exception ex) + { + Logger.Exception(ex); + } // try-catch + } // OnTimerTick + + private void LogParameters(IDictionary parameters) + { + if (Logger.MinLevel > Logger.Level.Verbose) return; + + var buffer = new StringBuilder(); + + buffer.Append(Properties.Texts.LogVerboseCreatingRecorderParameters); + foreach(var parameter in parameters) + { + buffer.AppendLine(); + buffer.AppendFormat("{0}: {1}", parameter.Key, parameter.Value); + } // for + + Logger.Log(Logger.Level.Verbose, buffer.ToString()); + } // LogParameters + + private void LogArguments(string exePath, string[] originalArguments, string arguments) + { + if (Logger.MinLevel > Logger.Level.Verbose) return; + + var buffer = new StringBuilder(); + + buffer.AppendLine(Properties.Texts.LogVerboseAboutLaunchRecorder); + + buffer.Append('"'); + buffer.Append(exePath); + buffer.Append("\" "); + buffer.Append(arguments); + + for (int index = 0; index < originalArguments.Length; index++) + { + buffer.AppendLine(); + buffer.AppendFormat("{0}", originalArguments[index]); + } // for + + Logger.Log(Logger.Level.Verbose, buffer.ToString()); + } // LogArguments + } // static class Launcher +} // namespace diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs index 2b2195d2..61404a09 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs @@ -1,190 +1,190 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; - -namespace Project.IpTv.RecorderLauncher -{ - internal static class Logger - { - private static object syncLock; - private static string logFilename; - private static DateTime startTime; - private static int processId; - private static Level minLevel; - - public enum Level - { - Verbose = 0, - Info = 1, - Warning = 2, - Error = 3, - Exception = 9 - } // Level - - /// NOT THREAD SAFE. Call from MAIN thread before being used in other threads - public static void Start(string logFilename, Level minLevel) - { - Logger.logFilename = logFilename; - Logger.syncLock = new object(); - Logger.minLevel = minLevel; - startTime = DateTime.Now; - - using (var process = Process.GetCurrentProcess()) - { - processId = process.Id; - } // using process - - if (!File.Exists(logFilename)) - { - var folder = Path.GetDirectoryName(logFilename); - if (!Directory.Exists(folder)) - { - Directory.CreateDirectory(folder); - } // if - } // if - - WriteDate("PROGRAM-START", string.Format("ProcessId={0}", processId), false); - } // Start - - /// NOT THREAD SAFE. Call from main() just before returning the exit code - public static void Stop(int exitCode) - { - if (syncLock == null) return; - - WriteDate("PROGRAM-STOP ", string.Format("ProcessId={0} & ExitCode={1}", processId, exitCode), true); - - syncLock = null; - logFilename = null; - } // Stop - - #region Log methods - - public static Level MinLevel - { - get { return minLevel; } - } // MinLevel - - public static void Log(Level level, string text) - { - if (syncLock == null) return; - if (level < minLevel) return; - - Write(level, text, null); - } // Log - - public static void Log(Level level, string format, params object[] args) - { - if (syncLock == null) return; - if (level < minLevel) return; - - Write(level, format, args); - } // Log - - public static void Exception(Exception ex) - { - if (syncLock == null) return; - - Write(Level.Exception, ex.ToString(), null); - } // Exception - - public static void Exception(Exception ex, string context) - { - if (syncLock == null) return; - - Write(Level.Exception, Properties.Texts.LoggerExceptionFormat, context, ex.ToString()); - } // Exception - - public static void Exception(Exception ex, string context, params object[] args) - { - if (syncLock == null) return; - - Write(Level.Exception, Properties.Texts.LoggerExceptionFormat, string.Format(context, args), ex.ToString()); - } // Exception - - #endregion - - #region Implementation - - private static void WriteDate(string specialOperation, string text, bool newLine) - { - try - { - var buffer = new StringBuilder(); - buffer.Append(specialOperation); - buffer.Append(' '); - buffer.AppendFormat("{0:X8}", processId); - buffer.Append(' '); - buffer.AppendFormat("{0:O}", DateTime.Now); - buffer.Append(' '); - buffer.AppendLine(text); - if (newLine) buffer.AppendLine(); - - lock (syncLock) - { - File.AppendAllText(logFilename, buffer.ToString(), Encoding.UTF8); - } // lock - } - catch - { - // ignore if we can't write to log file - } // try-catch - } // WriteDate - - private static void Write(Level level, string text, params object[] args) - { - try - { - var ellapsed = DateTime.Now - startTime; - var buffer = new StringBuilder(); - - switch (level) - { - case Level.Verbose: buffer.Append("----"); break; - case Level.Info: buffer.Append("Info"); break; - case Level.Warning: buffer.Append("Warn"); break; - case Level.Error: buffer.Append("ERR "); break; - case Level.Exception: buffer.Append("EXCP"); break; - default: - buffer.Append("???? "); break; - } // switch - - buffer.Append(' '); - buffer.AppendFormat("{0:X8}", processId); - buffer.Append(' '); - - var format = (ellapsed.Days > 0) ? "P{0:00}DT{1:00}H{2:00}M{3:00}.{4:000}S" : "PT{1:00}H{2:00}M{3:00}.{4:000}S"; - buffer.AppendFormat(format, ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds, ellapsed.Milliseconds); - buffer.Append(' '); - - if ((args == null) || (args.Length == 0)) - { - buffer.Append(text); - } - else - { - buffer.AppendFormat(text, args); - }// if-else - - buffer.Replace("\r\n", "\r\n >> "); - buffer.AppendLine(); - - lock (syncLock) - { - File.AppendAllText(logFilename, buffer.ToString(), Encoding.UTF8); - } // lock - } - catch - { - // ignore if we can't write to log file - } // try-catch - } // Write - - #endregion - } // class Logger -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace IpTviewr.RecorderLauncher +{ + internal static class Logger + { + private static object syncLock; + private static string logFilename; + private static DateTime startTime; + private static int processId; + private static Level minLevel; + + public enum Level + { + Verbose = 0, + Info = 1, + Warning = 2, + Error = 3, + Exception = 9 + } // Level + + /// NOT THREAD SAFE. Call from MAIN thread before being used in other threads + public static void Start(string logFilename, Level minLevel) + { + Logger.logFilename = logFilename; + Logger.syncLock = new object(); + Logger.minLevel = minLevel; + startTime = DateTime.Now; + + using (var process = Process.GetCurrentProcess()) + { + processId = process.Id; + } // using process + + if (!File.Exists(logFilename)) + { + var folder = Path.GetDirectoryName(logFilename); + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } // if + } // if + + WriteDate("PROGRAM-START", string.Format("ProcessId={0}", processId), false); + } // Start + + /// NOT THREAD SAFE. Call from main() just before returning the exit code + public static void Stop(int exitCode) + { + if (syncLock == null) return; + + WriteDate("PROGRAM-STOP ", string.Format("ProcessId={0} & ExitCode={1}", processId, exitCode), true); + + syncLock = null; + logFilename = null; + } // Stop + + #region Log methods + + public static Level MinLevel + { + get { return minLevel; } + } // MinLevel + + public static void Log(Level level, string text) + { + if (syncLock == null) return; + if (level < minLevel) return; + + Write(level, text, null); + } // Log + + public static void Log(Level level, string format, params object[] args) + { + if (syncLock == null) return; + if (level < minLevel) return; + + Write(level, format, args); + } // Log + + public static void Exception(Exception ex) + { + if (syncLock == null) return; + + Write(Level.Exception, ex.ToString(), null); + } // Exception + + public static void Exception(Exception ex, string context) + { + if (syncLock == null) return; + + Write(Level.Exception, Properties.Texts.LoggerExceptionFormat, context, ex.ToString()); + } // Exception + + public static void Exception(Exception ex, string context, params object[] args) + { + if (syncLock == null) return; + + Write(Level.Exception, Properties.Texts.LoggerExceptionFormat, string.Format(context, args), ex.ToString()); + } // Exception + + #endregion + + #region Implementation + + private static void WriteDate(string specialOperation, string text, bool newLine) + { + try + { + var buffer = new StringBuilder(); + buffer.Append(specialOperation); + buffer.Append(' '); + buffer.AppendFormat("{0:X8}", processId); + buffer.Append(' '); + buffer.AppendFormat("{0:O}", DateTime.Now); + buffer.Append(' '); + buffer.AppendLine(text); + if (newLine) buffer.AppendLine(); + + lock (syncLock) + { + File.AppendAllText(logFilename, buffer.ToString(), Encoding.UTF8); + } // lock + } + catch + { + // ignore if we can't write to log file + } // try-catch + } // WriteDate + + private static void Write(Level level, string text, params object[] args) + { + try + { + var ellapsed = DateTime.Now - startTime; + var buffer = new StringBuilder(); + + switch (level) + { + case Level.Verbose: buffer.Append("----"); break; + case Level.Info: buffer.Append("Info"); break; + case Level.Warning: buffer.Append("Warn"); break; + case Level.Error: buffer.Append("ERR "); break; + case Level.Exception: buffer.Append("EXCP"); break; + default: + buffer.Append("???? "); break; + } // switch + + buffer.Append(' '); + buffer.AppendFormat("{0:X8}", processId); + buffer.Append(' '); + + var format = (ellapsed.Days > 0) ? "P{0:00}DT{1:00}H{2:00}M{3:00}.{4:000}S" : "PT{1:00}H{2:00}M{3:00}.{4:000}S"; + buffer.AppendFormat(format, ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds, ellapsed.Milliseconds); + buffer.Append(' '); + + if ((args == null) || (args.Length == 0)) + { + buffer.Append(text); + } + else + { + buffer.AppendFormat(text, args); + }// if-else + + buffer.Replace("\r\n", "\r\n >> "); + buffer.AppendLine(); + + lock (syncLock) + { + File.AppendAllText(logFilename, buffer.ToString(), Encoding.UTF8); + } // lock + } + catch + { + // ignore if we can't write to log file + } // try-catch + } // Write + + #endregion + } // class Logger +} // namespace diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs index 6dcb591c..f8c08c65 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs @@ -1,213 +1,213 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; - -namespace Project.IpTv.RecorderLauncher -{ - class Program - { - private static bool PressAnyKey; - private static bool NoLogo; - private static Guid TaskId; - private static string DbFile; - private static string LogFolder; - private static ProgramMode Mode; - - enum ProgramMode - { - None = 0, - Record = 10, - Help = -1, - } // ProgramMode - - public enum Result - { - Exception = -10, // unhandled exception occurred - Arguments = -1, // missing arguments or bad arguments - Ok = 0, - Help = 1, // help requested - XmlFile = 10, // exception/error while loading task XML file - TooLate = 100, // recording beyond the scheduled end date/time - ExecProblem = 200, // exception while launching recorder - ExecFailure = 250, // recorder exit code != 0 - } // enum Result - - static int Main(string[] args) - { - Result result; - - try - { - result = Run(args); - } - catch (Exception ex) - { - Logger.Exception(ex); - result = Result.Exception; - } // try-catch - - if (PressAnyKey) - { - Console.WriteLine(); - Console.Write(Properties.Texts.PressAnyKeyEnd); - Console.Write(" "); - Console.ReadKey(true); - } // if - - Logger.Stop((int)result); - return (int)result; - } // Main - - static Result Run(string[] args) - { - // Set console icon - using (var icon = Properties.Resources.RecorderAppIcon) - { - UnsafeNativeMethods.SetConsoleIcon(icon.Handle); - } // using icon - - // Initial setup - Console.Title = Properties.Texts.ProgramCaption; - PressAnyKey = true; - - if (!ProcessArguments(args)) - { - return Result.Arguments; - } // if - - if (!NoLogo) - { - DisplayLogo(); - } // if - - switch (Mode) - { - case ProgramMode.Help: - DisplayHelp(); - return Result.Help; - - case ProgramMode.Record: - PressAnyKey = false; - var launcher = new Launcher(); - return launcher.Run(TaskId, DbFile, LogFolder); - - default: - return Result.Arguments; - } // switch - } // Run - - static bool ProcessArguments(string[] args) - { - if ((args == null) || (args.Length == 0)) - { - DisplayLogo(); - Console.WriteLine(Properties.Texts.ErrorNoArguments); - return false; - } // if - - var parser = new CommandLineArguments() - { - SpecialHelpArgument = true - }; - - var arguments = parser.Parse(args); - if (!parser.IsOk) - { - DisplayLogo(); - Console.WriteLine(Properties.Texts.InvalidArgumentFormat); - return false; - } // if - - return ProcessArguments(arguments); - } // ProcessArguments - - static bool ProcessArguments(IDictionary arguments) - { - string value; - - if (arguments.TryGetValue("nologo", out value)) - { - NoLogo = true; - } // if - - if (arguments.TryGetValue("TaskId", out value)) - { - TaskId = new Guid(value); - } // if - - if (arguments.TryGetValue("Database", out value)) - { - DbFile = value; - } // if - - if (arguments.TryGetValue("LogFolder", out value)) - { - LogFolder = value; - } // if - - if (arguments.TryGetValue("Action", out value)) - { - if (string.Compare(value, "Record", true) == 0) - { - Mode = ProgramMode.Record; - } - else - { - // Unknown action - Mode = ProgramMode.None; - } // if-else - } // if - - // TODO: display error message if arguments validation fails - - // validate general arguments - if (!string.IsNullOrEmpty(LogFolder)) - { - if (!System.IO.Directory.Exists(LogFolder)) return false; - } // if - - // validate record mode arguments - if (Mode == ProgramMode.Record) - { - if (TaskId == Guid.Empty) return false; - if (string.IsNullOrEmpty(DbFile)) return false; - if (!System.IO.File.Exists(DbFile)) return false; - } // if - - return true; - } // ProcessArguments - - public static void DisplayException(Exception ex) - { - Console.WriteLine(Properties.Texts.DisplayExceptionFormat, null, ex.ToString(true, false)); - } // DisplayException - - static void DisplayLogo() - { - string copyright; - - // get copyright text - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - copyright = "Copyright (C) http://movistartv.codeplex.com"; - } - copyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright; - - Console.WriteLine(Properties.Texts.StartLogo, Assembly.GetEntryAssembly().GetName().Version, copyright); - Console.WriteLine(); - } // DisplayLogo - - static void DisplayHelp() - { - PressAnyKey = false; - Console.WriteLine(Properties.Texts.ProgramHelp, Assembly.GetEntryAssembly().GetName().Name); - } // DisplayHelp - } // class Program -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace IpTviewr.RecorderLauncher +{ + class Program + { + private static bool PressAnyKey; + private static bool NoLogo; + private static Guid TaskId; + private static string DbFile; + private static string LogFolder; + private static ProgramMode Mode; + + enum ProgramMode + { + None = 0, + Record = 10, + Help = -1, + } // ProgramMode + + public enum Result + { + Exception = -10, // unhandled exception occurred + Arguments = -1, // missing arguments or bad arguments + Ok = 0, + Help = 1, // help requested + XmlFile = 10, // exception/error while loading task XML file + TooLate = 100, // recording beyond the scheduled end date/time + ExecProblem = 200, // exception while launching recorder + ExecFailure = 250, // recorder exit code != 0 + } // enum Result + + static int Main(string[] args) + { + Result result; + + try + { + result = Run(args); + } + catch (Exception ex) + { + Logger.Exception(ex); + result = Result.Exception; + } // try-catch + + if (PressAnyKey) + { + Console.WriteLine(); + Console.Write(Properties.Texts.PressAnyKeyEnd); + Console.Write(" "); + Console.ReadKey(true); + } // if + + Logger.Stop((int)result); + return (int)result; + } // Main + + static Result Run(string[] args) + { + // Set console icon + using (var icon = Properties.Resources.RecorderAppIcon) + { + UnsafeNativeMethods.SetConsoleIcon(icon.Handle); + } // using icon + + // Initial setup + Console.Title = Properties.Texts.ProgramCaption; + PressAnyKey = true; + + if (!ProcessArguments(args)) + { + return Result.Arguments; + } // if + + if (!NoLogo) + { + DisplayLogo(); + } // if + + switch (Mode) + { + case ProgramMode.Help: + DisplayHelp(); + return Result.Help; + + case ProgramMode.Record: + PressAnyKey = false; + var launcher = new Launcher(); + return launcher.Run(TaskId, DbFile, LogFolder); + + default: + return Result.Arguments; + } // switch + } // Run + + static bool ProcessArguments(string[] args) + { + if ((args == null) || (args.Length == 0)) + { + DisplayLogo(); + Console.WriteLine(Properties.Texts.ErrorNoArguments); + return false; + } // if + + var parser = new CommandLineArguments() + { + SpecialHelpArgument = true + }; + + var arguments = parser.Parse(args); + if (!parser.IsOk) + { + DisplayLogo(); + Console.WriteLine(Properties.Texts.InvalidArgumentFormat); + return false; + } // if + + return ProcessArguments(arguments); + } // ProcessArguments + + static bool ProcessArguments(IDictionary arguments) + { + string value; + + if (arguments.TryGetValue("nologo", out value)) + { + NoLogo = true; + } // if + + if (arguments.TryGetValue("TaskId", out value)) + { + TaskId = new Guid(value); + } // if + + if (arguments.TryGetValue("Database", out value)) + { + DbFile = value; + } // if + + if (arguments.TryGetValue("LogFolder", out value)) + { + LogFolder = value; + } // if + + if (arguments.TryGetValue("Action", out value)) + { + if (string.Compare(value, "Record", true) == 0) + { + Mode = ProgramMode.Record; + } + else + { + // Unknown action + Mode = ProgramMode.None; + } // if-else + } // if + + // TODO: display error message if arguments validation fails + + // validate general arguments + if (!string.IsNullOrEmpty(LogFolder)) + { + if (!System.IO.Directory.Exists(LogFolder)) return false; + } // if + + // validate record mode arguments + if (Mode == ProgramMode.Record) + { + if (TaskId == Guid.Empty) return false; + if (string.IsNullOrEmpty(DbFile)) return false; + if (!System.IO.File.Exists(DbFile)) return false; + } // if + + return true; + } // ProcessArguments + + public static void DisplayException(Exception ex) + { + Console.WriteLine(Properties.Texts.DisplayExceptionFormat, null, ex.ToString(true, false)); + } // DisplayException + + static void DisplayLogo() + { + string copyright; + + // get copyright text + object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + if (attributes.Length == 0) + { + copyright = "Copyright (C) http://movistartv.codeplex.com"; + } + copyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + + Console.WriteLine(Properties.Texts.StartLogo, Assembly.GetEntryAssembly().GetName().Version, copyright); + Console.WriteLine(); + } // DisplayLogo + + static void DisplayHelp() + { + PressAnyKey = false; + Console.WriteLine(Properties.Texts.ProgramHelp, Assembly.GetEntryAssembly().GetName().Name); + } // DisplayHelp + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs index 2b161956..afce6087 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs @@ -1,118 +1,118 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.RecorderLauncher.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.RecorderLauncher.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to }. - /// - internal static string ArgumentsCloseBrace { - get { - return ResourceManager.GetString("ArgumentsCloseBrace", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {param:. - /// - internal static string ArgumentsOpenBrace { - get { - return ResourceManager.GetString("ArgumentsOpenBrace", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to .log.txt. - /// - internal static string ExtensionLogFile { - get { - return ResourceManager.GetString("ExtensionLogFile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Job:{0}:{1}. - /// - internal static string FormatJobName { - get { - return ResourceManager.GetString("FormatJobName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to \bin\debug. - /// - internal static string PathUnderDevelopmentEnvironment { - get { - return ResourceManager.GetString("PathUnderDevelopmentEnvironment", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon RecorderAppIcon { - get { - object obj = ResourceManager.GetObject("RecorderAppIcon", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.RecorderLauncher.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.RecorderLauncher.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to }. + /// + internal static string ArgumentsCloseBrace { + get { + return ResourceManager.GetString("ArgumentsCloseBrace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {param:. + /// + internal static string ArgumentsOpenBrace { + get { + return ResourceManager.GetString("ArgumentsOpenBrace", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to .log.txt. + /// + internal static string ExtensionLogFile { + get { + return ResourceManager.GetString("ExtensionLogFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Job:{0}:{1}. + /// + internal static string FormatJobName { + get { + return ResourceManager.GetString("FormatJobName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to \bin\debug. + /// + internal static string PathUnderDevelopmentEnvironment { + get { + return ResourceManager.GetString("PathUnderDevelopmentEnvironment", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon RecorderAppIcon { + get { + object obj = ResourceManager.GetObject("RecorderAppIcon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs index cab3bfea..1d69179b 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs @@ -1,312 +1,312 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.RecorderLauncher.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class SerializationTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal SerializationTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.RecorderLauncher.Properties.SerializationTexts", typeof(SerializationTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to >> Channel details << - ///TV Channel: {0} {1} - ///URL: {2} - ///IPTV service: {3}. - /// - internal static string BuildDescriptionChannel { - get { - return ResourceManager.GetString("BuildDescriptionChannel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scheduled recording duration is {0}, with a safety margin of {1} minutes. - ///Total recording time, including safety margins, is {2}.. - /// - internal static string BuildDescriptionDuration { - get { - return ResourceManager.GetString("BuildDescriptionDuration", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording will end the next day at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsNextDay { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsNextDay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording will end the same day at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsSameDay { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsSameDay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends today at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsToday { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsToday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsTomorrow { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsTomorrow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to >> Recording duration <<. - /// - internal static string BuildDescriptionDurationHeader { - get { - return ResourceManager.GetString("BuildDescriptionDurationHeader", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording duration is {0}, with a safety margin of {1} minutes. - ///Total recording time, including safety margins, will be {2}.. - /// - internal static string BuildDescriptionDurationPast { - get { - return ResourceManager.GetString("BuildDescriptionDurationPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to >> Recording schedule <<. - /// - internal static string BuildDescriptionScheduleHeader { - get { - return ResourceManager.GetString("BuildDescriptionScheduleHeader", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0} - ///Task description: {1}. - /// - internal static string BuildDescriptionTaskDescription { - get { - return ResourceManager.GetString("BuildDescriptionTaskDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0}. - /// - internal static string BuildDescriptionTaskName { - get { - return ResourceManager.GetString("BuildDescriptionTaskName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordDaily { - get { - return ResourceManager.GetString("VerbalizeRecordDaily", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Daily recording, everyday at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordDailyEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordDailyEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One time recording at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordOneTime { - get { - return ResourceManager.GetString("VerbalizeRecordOneTime", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordOneTimePast { - get { - return ResourceManager.GetString("VerbalizeRecordOneTimePast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording right now.. - /// - internal static string VerbalizeRecordRightNow { - get { - return ResourceManager.GetString("VerbalizeRecordRightNow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording as soon as possible.. - /// - internal static string VerbalizeRecordRightNowPast { - get { - return ResourceManager.GetString("VerbalizeRecordRightNowPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeekly { - get { - return ResourceManager.GetString("VerbalizeRecordWeekly", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to every . - /// - internal static string VerbalizeRecordWeeklyDays { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDays", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to every . - /// - internal static string VerbalizeRecordWeeklyDaysPast { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to , . - /// - internal static string VerbalizeRecordWeeklyDaysSeparator { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparator", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to and . - /// - internal static string VerbalizeRecordWeeklyDaysSeparatorFinal { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparatorFinal", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryWeeks { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryWeeksEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeksEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting on {0:D} with no expiry date.. - /// - internal static string VerbalizeStartDate { - get { - return ResourceManager.GetString("VerbalizeStartDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting on {0:D} and ending on {1:D}.. - /// - internal static string VerbalizeStartExpiryDate { - get { - return ResourceManager.GetString("VerbalizeStartExpiryDate", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.RecorderLauncher.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class SerializationTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal SerializationTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.RecorderLauncher.Properties.SerializationTexts", typeof(SerializationTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to >> Channel details << + ///TV Channel: {0} {1} + ///URL: {2} + ///IPTV service: {3}. + /// + internal static string BuildDescriptionChannel { + get { + return ResourceManager.GetString("BuildDescriptionChannel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled recording duration is {0}, with a safety margin of {1} minutes. + ///Total recording time, including safety margins, is {2}.. + /// + internal static string BuildDescriptionDuration { + get { + return ResourceManager.GetString("BuildDescriptionDuration", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording will end the next day at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsNextDay { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsNextDay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording will end the same day at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsSameDay { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsSameDay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends today at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsToday { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsToday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsTomorrow { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsTomorrow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >> Recording duration <<. + /// + internal static string BuildDescriptionDurationHeader { + get { + return ResourceManager.GetString("BuildDescriptionDurationHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording duration is {0}, with a safety margin of {1} minutes. + ///Total recording time, including safety margins, will be {2}.. + /// + internal static string BuildDescriptionDurationPast { + get { + return ResourceManager.GetString("BuildDescriptionDurationPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >> Recording schedule <<. + /// + internal static string BuildDescriptionScheduleHeader { + get { + return ResourceManager.GetString("BuildDescriptionScheduleHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0} + ///Task description: {1}. + /// + internal static string BuildDescriptionTaskDescription { + get { + return ResourceManager.GetString("BuildDescriptionTaskDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0}. + /// + internal static string BuildDescriptionTaskName { + get { + return ResourceManager.GetString("BuildDescriptionTaskName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordDaily { + get { + return ResourceManager.GetString("VerbalizeRecordDaily", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Daily recording, everyday at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordDailyEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordDailyEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to One time recording at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordOneTime { + get { + return ResourceManager.GetString("VerbalizeRecordOneTime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordOneTimePast { + get { + return ResourceManager.GetString("VerbalizeRecordOneTimePast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording right now.. + /// + internal static string VerbalizeRecordRightNow { + get { + return ResourceManager.GetString("VerbalizeRecordRightNow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording as soon as possible.. + /// + internal static string VerbalizeRecordRightNowPast { + get { + return ResourceManager.GetString("VerbalizeRecordRightNowPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeekly { + get { + return ResourceManager.GetString("VerbalizeRecordWeekly", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to every . + /// + internal static string VerbalizeRecordWeeklyDays { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDays", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to every . + /// + internal static string VerbalizeRecordWeeklyDaysPast { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to , . + /// + internal static string VerbalizeRecordWeeklyDaysSeparator { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparator", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to and . + /// + internal static string VerbalizeRecordWeeklyDaysSeparatorFinal { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparatorFinal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryWeeks { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryWeeksEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeksEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting on {0:D} with no expiry date.. + /// + internal static string VerbalizeStartDate { + get { + return ResourceManager.GetString("VerbalizeStartDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting on {0:D} and ending on {1:D}.. + /// + internal static string VerbalizeStartExpiryDate { + get { + return ResourceManager.GetString("VerbalizeStartExpiryDate", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs index 2a8621d9..ac9d78c9 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs @@ -1,532 +1,532 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.RecorderLauncher.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.RecorderLauncher.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to ok. - /// - internal static string DisplayActionOk { - get { - return ResourceManager.GetString("DisplayActionOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends today at {0:T}.. - /// - internal static string DisplayDurationEndsToday { - get { - return ResourceManager.GetString("DisplayDurationEndsToday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. - /// - internal static string DisplayDurationEndsTomorrow { - get { - return ResourceManager.GetString("DisplayDurationEndsTomorrow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ERROR: Unable to load the recording task configuration data.. - /// - internal static string DisplayErrorLoadTaskFile { - get { - return ResourceManager.GetString("DisplayErrorLoadTaskFile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to EXCEPTION: {1}. - /// - internal static string DisplayExceptionFormat { - get { - return ResourceManager.GetString("DisplayExceptionFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Launching external recorder.... - /// - internal static string DisplayLaunchingRecorder { - get { - return ResourceManager.GetString("DisplayLaunchingRecorder", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ok (PID {0}). - /// - internal static string DisplayLaunchingRecorderOk { - get { - return ResourceManager.GetString("DisplayLaunchingRecorderOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading record task from database.... - /// - internal static string DisplayLoadingXml { - get { - return ResourceManager.GetString("DisplayLoadingXml", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recorder program has finished. - /// - internal static string DisplayRecorderFinished { - get { - return ResourceManager.GetString("DisplayRecorderFinished", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ERROR: Recording time exceeded!. - /// - internal static string DisplayRecordingTimeExceeded { - get { - return ResourceManager.GetString("DisplayRecordingTimeExceeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scheduled recording duration is {0}, with an additional safety margin of {1} minutes.. - /// - internal static string DisplayScheduledDuration { - get { - return ResourceManager.GetString("DisplayScheduledDuration", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0}. - /// - internal static string DisplayTaskName { - get { - return ResourceManager.GetString("DisplayTaskName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Total recording time, including safety margins, will be {0}.. - /// - internal static string DisplayTotalRecordingTime { - get { - return ResourceManager.GetString("DisplayTotalRecordingTime", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Warning: Recording behind schedule. Gap is {0}. - /// - internal static string DisplayWarningBehindSchedule { - get { - return ResourceManager.GetString("DisplayWarningBehindSchedule", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Warning: RECORDING LATE, beyond the safety margin of {0} minutes. - /// - internal static string DisplayWarningRecordingLate { - get { - return ResourceManager.GetString("DisplayWarningRecordingLate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ERROR: No arguments have been specified. - ///Use /HELP for more information.. - /// - internal static string ErrorNoArguments { - get { - return ResourceManager.GetString("ErrorNoArguments", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [End of inner exception list]. - /// - internal static string ExceptionEndInnerList { - get { - return ResourceManager.GetString("ExceptionEndInnerList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}-{1:00}-{2:00} {3:00}-{4:00}-{5:00}. - /// - internal static string FormatRecordFileDate { - get { - return ResourceManager.GetString("FormatRecordFileDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delayed!. - /// - internal static string FormatRecordFileDelayed { - get { - return ResourceManager.GetString("FormatRecordFileDelayed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}\{1} {2}{3}{4}. - /// - internal static string FormatRecordFileName { - get { - return ResourceManager.GetString("FormatRecordFileName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to OK. - /// - internal static string InfoOk { - get { - return ResourceManager.GetString("InfoOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ERROR: Invalid argument format. - ///Use /HELP for more information.. - /// - internal static string InvalidArgumentFormat { - get { - return ResourceManager.GetString("InvalidArgumentFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording time exceeded!. - /// - internal static string LogErrorRecordingTimeExceeded { - get { - return ResourceManager.GetString("LogErrorRecordingTimeExceeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TOO LATE! Sorry about that!. - /// - internal static string LogErrorTooLate { - get { - return ResourceManager.GetString("LogErrorTooLate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AssignProcessToJobObject({0}, {1}). - /// - internal static string LogExceptionAssignProcessToJobObject { - get { - return ResourceManager.GetString("LogExceptionAssignProcessToJobObject", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to CreateJobObject('{0}'). - /// - internal static string LogExceptionCreateJobObject { - get { - return ResourceManager.GetString("LogExceptionCreateJobObject", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to execute recorder program. - /// - internal static string LogExceptionLaunchingRecorder { - get { - return ResourceManager.GetString("LogExceptionLaunchingRecorder", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load the XML recording task configuration file.. - /// - internal static string LogExceptionLoadTaskFile { - get { - return ResourceManager.GetString("LogExceptionLoadTaskFile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to SetInformationJobObject(...). - /// - internal static string LogExceptionSetInformationJobObject { - get { - return ResourceManager.GetString("LogExceptionSetInformationJobObject", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} - ///Exception details: {1}. - /// - internal static string LoggerExceptionFormat { - get { - return ResourceManager.GetString("LoggerExceptionFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Creating Windows Job. - /// - internal static string LogInfoCreatingWindowsJob { - get { - return ResourceManager.GetString("LogInfoCreatingWindowsJob", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Windows Job created. - /// - internal static string LogInfoCreatingWindowsJobOk { - get { - return ResourceManager.GetString("LogInfoCreatingWindowsJobOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Launching external recorder program. - /// - internal static string LogInfoLaunchingRecorder { - get { - return ResourceManager.GetString("LogInfoLaunchingRecorder", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recorder program successfully started (process Id is {0}). - /// - internal static string LogInfoLaunchingRecorderOk { - get { - return ResourceManager.GetString("LogInfoLaunchingRecorderOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading configuration data for task {0} from database - ///{1}. - /// - internal static string LogInfoLoadingXml { - get { - return ResourceManager.GetString("LogInfoLoadingXml", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task configuration data loaded. - /// - internal static string LogInfoLoadingXmlOk { - get { - return ResourceManager.GetString("LogInfoLoadingXmlOk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recorder program has exited (exit code is {0}). - /// - internal static string LogInfoRecorderExited { - get { - return ResourceManager.GetString("LogInfoRecorderExited", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to About to launch recorder program. - /// - internal static string LogVerboseAboutLaunchRecorder { - get { - return ResourceManager.GetString("LogVerboseAboutLaunchRecorder", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Creating parameters for recorder program. - /// - internal static string LogVerboseCreatingRecorderParameters { - get { - return ResourceManager.GetString("LogVerboseCreatingRecorderParameters", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Job handle: {0}. - /// - internal static string LogVerboseJobHandle { - get { - return ResourceManager.GetString("LogVerboseJobHandle", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Job name: {0}. - /// - internal static string LogVerboseJobName { - get { - return ResourceManager.GetString("LogVerboseJobName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scheduled start time: {0:T} - ///Scheduled total time: {1} - ///Gap: {2} - ///Real record time: {3}. - /// - internal static string LogVerboseScheduledStartTimeGap { - get { - return ResourceManager.GetString("LogVerboseScheduledStartTimeGap", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to WaitForExit(). - /// - internal static string LogVerboseWaitForExit { - get { - return ResourceManager.GetString("LogVerboseWaitForExit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording behind schedule. Gap is {0}. - /// - internal static string LogWarningBehindSchedule { - get { - return ResourceManager.GetString("LogWarningBehindSchedule", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Running under development context. Windows Job creation was aborted. - /// - internal static string LogWarningDevelopmentWindowsJob { - get { - return ResourceManager.GetString("LogWarningDevelopmentWindowsJob", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to RECORDING LATE, beyond the safety margin of {0} minutes. - /// - internal static string LogWarningRecordingLate { - get { - return ResourceManager.GetString("LogWarningRecordingLate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Press any key to exit.... - /// - internal static string PressAnyKeyEnd { - get { - return ResourceManager.GetString("PressAnyKeyEnd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IPTV Recorder launcher utility. - /// - internal static string ProgramCaption { - get { - return ResourceManager.GetString("ProgramCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} XMLTaskFile - ///{0} /help | /h | /? | -help | -h | -? - /// - ///XMLTaskFile XML file containing the record task definition. - /// Loads the task and launches the external recorder. - /// - ////help Displays this help message. - /// - ///-- General options -- - ////nologo Supresses the banner. - ///Options and switches can be specified with '/' or with '-'. - /// - internal static string ProgramHelp { - get { - return ResourceManager.GetString("ProgramHelp", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IPTV Recorder launcher utility - ///Version {0} - ///{1}. All rights reserved.. - /// - internal static string StartLogo { - get { - return ResourceManager.GetString("StartLogo", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.RecorderLauncher.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.RecorderLauncher.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to ok. + /// + internal static string DisplayActionOk { + get { + return ResourceManager.GetString("DisplayActionOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends today at {0:T}.. + /// + internal static string DisplayDurationEndsToday { + get { + return ResourceManager.GetString("DisplayDurationEndsToday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. + /// + internal static string DisplayDurationEndsTomorrow { + get { + return ResourceManager.GetString("DisplayDurationEndsTomorrow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: Unable to load the recording task configuration data.. + /// + internal static string DisplayErrorLoadTaskFile { + get { + return ResourceManager.GetString("DisplayErrorLoadTaskFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to EXCEPTION: {1}. + /// + internal static string DisplayExceptionFormat { + get { + return ResourceManager.GetString("DisplayExceptionFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Launching external recorder.... + /// + internal static string DisplayLaunchingRecorder { + get { + return ResourceManager.GetString("DisplayLaunchingRecorder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ok (PID {0}). + /// + internal static string DisplayLaunchingRecorderOk { + get { + return ResourceManager.GetString("DisplayLaunchingRecorderOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading record task from database.... + /// + internal static string DisplayLoadingXml { + get { + return ResourceManager.GetString("DisplayLoadingXml", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recorder program has finished. + /// + internal static string DisplayRecorderFinished { + get { + return ResourceManager.GetString("DisplayRecorderFinished", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: Recording time exceeded!. + /// + internal static string DisplayRecordingTimeExceeded { + get { + return ResourceManager.GetString("DisplayRecordingTimeExceeded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled recording duration is {0}, with an additional safety margin of {1} minutes.. + /// + internal static string DisplayScheduledDuration { + get { + return ResourceManager.GetString("DisplayScheduledDuration", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0}. + /// + internal static string DisplayTaskName { + get { + return ResourceManager.GetString("DisplayTaskName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Total recording time, including safety margins, will be {0}.. + /// + internal static string DisplayTotalRecordingTime { + get { + return ResourceManager.GetString("DisplayTotalRecordingTime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Warning: Recording behind schedule. Gap is {0}. + /// + internal static string DisplayWarningBehindSchedule { + get { + return ResourceManager.GetString("DisplayWarningBehindSchedule", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Warning: RECORDING LATE, beyond the safety margin of {0} minutes. + /// + internal static string DisplayWarningRecordingLate { + get { + return ResourceManager.GetString("DisplayWarningRecordingLate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: No arguments have been specified. + ///Use /HELP for more information.. + /// + internal static string ErrorNoArguments { + get { + return ResourceManager.GetString("ErrorNoArguments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [End of inner exception list]. + /// + internal static string ExceptionEndInnerList { + get { + return ResourceManager.GetString("ExceptionEndInnerList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}-{1:00}-{2:00} {3:00}-{4:00}-{5:00}. + /// + internal static string FormatRecordFileDate { + get { + return ResourceManager.GetString("FormatRecordFileDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Delayed!. + /// + internal static string FormatRecordFileDelayed { + get { + return ResourceManager.GetString("FormatRecordFileDelayed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}\{1} {2}{3}{4}. + /// + internal static string FormatRecordFileName { + get { + return ResourceManager.GetString("FormatRecordFileName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OK. + /// + internal static string InfoOk { + get { + return ResourceManager.GetString("InfoOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: Invalid argument format. + ///Use /HELP for more information.. + /// + internal static string InvalidArgumentFormat { + get { + return ResourceManager.GetString("InvalidArgumentFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording time exceeded!. + /// + internal static string LogErrorRecordingTimeExceeded { + get { + return ResourceManager.GetString("LogErrorRecordingTimeExceeded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to TOO LATE! Sorry about that!. + /// + internal static string LogErrorTooLate { + get { + return ResourceManager.GetString("LogErrorTooLate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to AssignProcessToJobObject({0}, {1}). + /// + internal static string LogExceptionAssignProcessToJobObject { + get { + return ResourceManager.GetString("LogExceptionAssignProcessToJobObject", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to CreateJobObject('{0}'). + /// + internal static string LogExceptionCreateJobObject { + get { + return ResourceManager.GetString("LogExceptionCreateJobObject", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to execute recorder program. + /// + internal static string LogExceptionLaunchingRecorder { + get { + return ResourceManager.GetString("LogExceptionLaunchingRecorder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load the XML recording task configuration file.. + /// + internal static string LogExceptionLoadTaskFile { + get { + return ResourceManager.GetString("LogExceptionLoadTaskFile", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SetInformationJobObject(...). + /// + internal static string LogExceptionSetInformationJobObject { + get { + return ResourceManager.GetString("LogExceptionSetInformationJobObject", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} + ///Exception details: {1}. + /// + internal static string LoggerExceptionFormat { + get { + return ResourceManager.GetString("LoggerExceptionFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Creating Windows Job. + /// + internal static string LogInfoCreatingWindowsJob { + get { + return ResourceManager.GetString("LogInfoCreatingWindowsJob", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Windows Job created. + /// + internal static string LogInfoCreatingWindowsJobOk { + get { + return ResourceManager.GetString("LogInfoCreatingWindowsJobOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Launching external recorder program. + /// + internal static string LogInfoLaunchingRecorder { + get { + return ResourceManager.GetString("LogInfoLaunchingRecorder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recorder program successfully started (process Id is {0}). + /// + internal static string LogInfoLaunchingRecorderOk { + get { + return ResourceManager.GetString("LogInfoLaunchingRecorderOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading configuration data for task {0} from database + ///{1}. + /// + internal static string LogInfoLoadingXml { + get { + return ResourceManager.GetString("LogInfoLoadingXml", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task configuration data loaded. + /// + internal static string LogInfoLoadingXmlOk { + get { + return ResourceManager.GetString("LogInfoLoadingXmlOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recorder program has exited (exit code is {0}). + /// + internal static string LogInfoRecorderExited { + get { + return ResourceManager.GetString("LogInfoRecorderExited", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to About to launch recorder program. + /// + internal static string LogVerboseAboutLaunchRecorder { + get { + return ResourceManager.GetString("LogVerboseAboutLaunchRecorder", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Creating parameters for recorder program. + /// + internal static string LogVerboseCreatingRecorderParameters { + get { + return ResourceManager.GetString("LogVerboseCreatingRecorderParameters", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Job handle: {0}. + /// + internal static string LogVerboseJobHandle { + get { + return ResourceManager.GetString("LogVerboseJobHandle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Job name: {0}. + /// + internal static string LogVerboseJobName { + get { + return ResourceManager.GetString("LogVerboseJobName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled start time: {0:T} + ///Scheduled total time: {1} + ///Gap: {2} + ///Real record time: {3}. + /// + internal static string LogVerboseScheduledStartTimeGap { + get { + return ResourceManager.GetString("LogVerboseScheduledStartTimeGap", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to WaitForExit(). + /// + internal static string LogVerboseWaitForExit { + get { + return ResourceManager.GetString("LogVerboseWaitForExit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording behind schedule. Gap is {0}. + /// + internal static string LogWarningBehindSchedule { + get { + return ResourceManager.GetString("LogWarningBehindSchedule", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Running under development context. Windows Job creation was aborted. + /// + internal static string LogWarningDevelopmentWindowsJob { + get { + return ResourceManager.GetString("LogWarningDevelopmentWindowsJob", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to RECORDING LATE, beyond the safety margin of {0} minutes. + /// + internal static string LogWarningRecordingLate { + get { + return ResourceManager.GetString("LogWarningRecordingLate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Press any key to exit.... + /// + internal static string PressAnyKeyEnd { + get { + return ResourceManager.GetString("PressAnyKeyEnd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IPTV Recorder launcher utility. + /// + internal static string ProgramCaption { + get { + return ResourceManager.GetString("ProgramCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} XMLTaskFile + ///{0} /help | /h | /? | -help | -h | -? + /// + ///XMLTaskFile XML file containing the record task definition. + /// Loads the task and launches the external recorder. + /// + ////help Displays this help message. + /// + ///-- General options -- + ////nologo Supresses the banner. + ///Options and switches can be specified with '/' or with '-'. + /// + internal static string ProgramHelp { + get { + return ResourceManager.GetString("ProgramHelp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IPTV Recorder launcher utility + ///Version {0} + ///{1}. All rights reserved.. + /// + internal static string StartLogo { + get { + return ResourceManager.GetString("StartLogo", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs index c125f3e6..95e3d11c 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs @@ -1,98 +1,98 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; - -namespace Project.IpTv.RecorderLauncher -{ - internal partial class UnsafeNativeMethods - { - /// Win32: JOBOBJECTINFOCLASS - public enum JobObjectInfoClass - { - /// JobObjectBasicAccountingInformation -> 1 - BasicAccountingInformation = 1, - BasicLimitInformation, - BasicProcessIdList, - BasicUIRestrictions, - SecurityLimitInformation, - EndOfJobTimeInformation, - AssociateCompletionPortInformation, - BasicAndIoAccountingInformation, - ExtendedLimitInformation, - JobSetInformation, - MaxJobObjectInfoClass, - } // enum JobObjectInfoClass - - [StructLayout(LayoutKind.Sequential)] - /// Win32: JOBOBJECT_BASIC_LIMIT_INFORMATION - public struct JobObjectBasicLimitInformation - { - public Int64 PerProcessUserTimeLimit; - public Int64 PerJobUserTimeLimit; - public UInt32 LimitFlags; - public UIntPtr MinimumWorkingSetSize; - public UIntPtr MaximumWorkingSetSize; - public UInt32 ActiveProcessLimit; - public UIntPtr Affinity; - public UInt32 PriorityClass; - public UInt32 SchedulingClass; - } // struct JobObjectBasicLimitInformation - - [StructLayout(LayoutKind.Sequential)] - /// Win32: IO_COUNTERS - public struct IoCounters - { - public UInt64 ReadOperationCount; - public UInt64 WriteOperationCount; - public UInt64 OtherOperationCount; - public UInt64 ReadTransferCount; - public UInt64 WriteTransferCount; - public UInt64 OtherTransferCount; - } // struct IoCounters - - [StructLayout(LayoutKind.Sequential)] - /// Win32: JOBOBJECT_EXTENDED_LIMIT_INFORMATION - public struct JobObjectExtendedLimitInformation - { - public JobObjectBasicLimitInformation BasicLimitInformation; - public IoCounters IoInfo; - public UIntPtr ProcessMemoryLimit; - public UIntPtr JobMemoryLimit; - public UIntPtr PeakProcessMemoryUsed; - public UIntPtr PeakJobMemoryUsed; - } // JobObjectExtendedLimitInformation - - /// Win32: JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE - public const int JobjObjectLimitKillOnJobClose = 0x00002000; - - // Return Type: HANDLE->void* - // lpJobAttributes: LPSECURITY_ATTRIBUTES->_SECURITY_ATTRIBUTES* - // lpName: LPCWSTR->WCHAR* - [DllImport("kernel32.dll", EntryPoint = "CreateJobObjectW", SetLastError=true)] - public static extern System.IntPtr CreateJobObject([In] IntPtr lpJobAttributes, [In] [MarshalAs(UnmanagedType.LPWStr)] string lpName); - - // Return Type: BOOL->int - // hJob: HANDLE->void* - // hProcess: HANDLE->void* - [DllImport("kernel32.dll", EntryPoint = "AssignProcessToJobObject", SetLastError=true)] - [return: MarshalAsAttribute(UnmanagedType.Bool)] - public static extern bool AssignProcessToJobObject([In] IntPtr hJob, [In] IntPtr hProcess); - - // Return Type: BOOL->int - // hJob: HANDLE->void* - // JobObjectInformationClass: JOBOBJECTINFOCLASS->_JOBOBJECTINFOCLASS - // lpJobObjectInformation: LPVOID->void* - // cbJobObjectInformationLength: DWORD->unsigned int - [DllImport("kernel32.dll", EntryPoint = "SetInformationJobObject", SetLastError=true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool SetInformationJobObject([In] IntPtr hJob, JobObjectInfoClass JobObjectInformationClass, [In] IntPtr lpJobObjectInformation, uint cbJobObjectInformationLength); - - [DllImport("kernel32.dll", SetLastError = true)] - public static extern bool SetConsoleIcon(IntPtr hIcon); - } // class UnsafeNativeMethods -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace IpTviewr.RecorderLauncher +{ + internal partial class UnsafeNativeMethods + { + /// Win32: JOBOBJECTINFOCLASS + public enum JobObjectInfoClass + { + /// JobObjectBasicAccountingInformation -> 1 + BasicAccountingInformation = 1, + BasicLimitInformation, + BasicProcessIdList, + BasicUIRestrictions, + SecurityLimitInformation, + EndOfJobTimeInformation, + AssociateCompletionPortInformation, + BasicAndIoAccountingInformation, + ExtendedLimitInformation, + JobSetInformation, + MaxJobObjectInfoClass, + } // enum JobObjectInfoClass + + [StructLayout(LayoutKind.Sequential)] + /// Win32: JOBOBJECT_BASIC_LIMIT_INFORMATION + public struct JobObjectBasicLimitInformation + { + public Int64 PerProcessUserTimeLimit; + public Int64 PerJobUserTimeLimit; + public UInt32 LimitFlags; + public UIntPtr MinimumWorkingSetSize; + public UIntPtr MaximumWorkingSetSize; + public UInt32 ActiveProcessLimit; + public UIntPtr Affinity; + public UInt32 PriorityClass; + public UInt32 SchedulingClass; + } // struct JobObjectBasicLimitInformation + + [StructLayout(LayoutKind.Sequential)] + /// Win32: IO_COUNTERS + public struct IoCounters + { + public UInt64 ReadOperationCount; + public UInt64 WriteOperationCount; + public UInt64 OtherOperationCount; + public UInt64 ReadTransferCount; + public UInt64 WriteTransferCount; + public UInt64 OtherTransferCount; + } // struct IoCounters + + [StructLayout(LayoutKind.Sequential)] + /// Win32: JOBOBJECT_EXTENDED_LIMIT_INFORMATION + public struct JobObjectExtendedLimitInformation + { + public JobObjectBasicLimitInformation BasicLimitInformation; + public IoCounters IoInfo; + public UIntPtr ProcessMemoryLimit; + public UIntPtr JobMemoryLimit; + public UIntPtr PeakProcessMemoryUsed; + public UIntPtr PeakJobMemoryUsed; + } // JobObjectExtendedLimitInformation + + /// Win32: JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE + public const int JobjObjectLimitKillOnJobClose = 0x00002000; + + // Return Type: HANDLE->void* + // lpJobAttributes: LPSECURITY_ATTRIBUTES->_SECURITY_ATTRIBUTES* + // lpName: LPCWSTR->WCHAR* + [DllImport("kernel32.dll", EntryPoint = "CreateJobObjectW", SetLastError=true)] + public static extern System.IntPtr CreateJobObject([In] IntPtr lpJobAttributes, [In] [MarshalAs(UnmanagedType.LPWStr)] string lpName); + + // Return Type: BOOL->int + // hJob: HANDLE->void* + // hProcess: HANDLE->void* + [DllImport("kernel32.dll", EntryPoint = "AssignProcessToJobObject", SetLastError=true)] + [return: MarshalAsAttribute(UnmanagedType.Bool)] + public static extern bool AssignProcessToJobObject([In] IntPtr hJob, [In] IntPtr hProcess); + + // Return Type: BOOL->int + // hJob: HANDLE->void* + // JobObjectInformationClass: JOBOBJECTINFOCLASS->_JOBOBJECTINFOCLASS + // lpJobObjectInformation: LPVOID->void* + // cbJobObjectInformationLength: DWORD->unsigned int + [DllImport("kernel32.dll", EntryPoint = "SetInformationJobObject", SetLastError=true)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool SetInformationJobObject([In] IntPtr hJob, JobObjectInfoClass JobObjectInformationClass, [In] IntPtr lpJobObjectInformation, uint cbJobObjectInformationLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool SetConsoleIcon(IntPtr hIcon); + } // class UnsafeNativeMethods +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs b/1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs index 5955a83e..098b7823 100644 --- a/1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs +++ b/1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs @@ -1,136 +1,136 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Common -{ - public static class ArgumentsManager - { - public static string[] ExpandArguments(string[] rawArguments, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) - { - string[] result; - - if (rawArguments == null) return null; - - result = new string[rawArguments.Length]; - if (rawArguments.Length == 0) return result; - - Validate(parameters, openBrace, closeBrace); - - for (int index = 0; index < rawArguments.Length; index++) - { - result[index] = InternalExpandArgument(rawArguments[index], parameters, openBrace, closeBrace, braceComparisonType); - } // for - - return result; - } // ExpandArguments - - public static string ExpandArgument(string rawArgument, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) - { - Validate(parameters, openBrace, closeBrace); - - return InternalExpandArgument(rawArgument, parameters, openBrace, closeBrace, braceComparisonType); - } // ExpandArgument - - public static IDictionary CreateParameters(string[] keys, string[] values, bool caseSensitive) - { - if ((keys == null) || (keys.Length == 0)) throw new ArgumentException(); - if ((values == null) || (values.Length == 0)) throw new ArgumentException(); - if (keys.Length != values.Length) throw new ArgumentException(); - - var result = new Dictionary(keys.Length, caseSensitive ? StringComparer.CurrentCulture : StringComparer.CurrentCultureIgnoreCase); - - for (int keyIndex = 0, valueIndex = 0; (keyIndex < keys.Length) && (valueIndex < values.Length); keyIndex++, valueIndex++) - { - result.Add(keys[keyIndex], values[valueIndex]); - } // for - - return result; - } // CreateParameters - - public static string JoinArguments(string[] arguments) - { - if ((arguments == null) || (arguments.Length == 0)) return null; - - var length = 0; - foreach (var argument in arguments) - { - length += argument.Length; - length += 3; // open quote, close quote, space - } // foreach - - var result = new StringBuilder(length); - foreach (var argument in arguments) - { - result.Append('"'); - result.Append(argument); - result.Append('"'); - result.Append(' '); - } // foreach - result.Remove(result.Length - 1, 1); // remove last space - - return result.ToString(); - } // JoinArguments - - private static void Validate(IDictionary parameters, string openBrace, string closeBrace) - { - if ((string.IsNullOrEmpty(openBrace)) || (string.IsNullOrEmpty(closeBrace))) - { - throw new ArgumentException(); - } // if - if ((parameters == null) || (parameters.Count == 0)) - { - throw new ArgumentException(); - } // if - if ((string.IsNullOrEmpty(openBrace)) || (string.IsNullOrEmpty(closeBrace))) - { - throw new ArgumentException(); - } // if - } // Validate - - private static string InternalExpandArgument(string rawArgument, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) - { - int index, param; - - if (string.IsNullOrEmpty(rawArgument)) return rawArgument; - - index = rawArgument.IndexOf(openBrace, braceComparisonType); - if (index < 0) return rawArgument; - - var current = 0; - var result = new StringBuilder(); - while (index >= 0) - { - if (index > current) - { - result.Append(rawArgument.Substring(current, index - current)); - } // if - - param = index + openBrace.Length; - index = rawArgument.IndexOf(closeBrace, param, braceComparisonType); - - // close 'brace' not found or no param key is specified - if ((index == param) || (index < 0)) - { - throw new ArgumentOutOfRangeException(); - } // if - - var paramName = rawArgument.Substring(param, index - param); - result.Append(parameters[paramName]); - - current = index + closeBrace.Length; - index = rawArgument.IndexOf(openBrace, current, braceComparisonType); - } // while - if (current < rawArgument.Length) - { - result.Append(rawArgument.Substring(current)); - } // if - - return result.ToString(); - } // InternalExpandArgument - } // class ArgumentsManager -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Common +{ + public static class ArgumentsManager + { + public static string[] ExpandArguments(string[] rawArguments, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) + { + string[] result; + + if (rawArguments == null) return null; + + result = new string[rawArguments.Length]; + if (rawArguments.Length == 0) return result; + + Validate(parameters, openBrace, closeBrace); + + for (int index = 0; index < rawArguments.Length; index++) + { + result[index] = InternalExpandArgument(rawArguments[index], parameters, openBrace, closeBrace, braceComparisonType); + } // for + + return result; + } // ExpandArguments + + public static string ExpandArgument(string rawArgument, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) + { + Validate(parameters, openBrace, closeBrace); + + return InternalExpandArgument(rawArgument, parameters, openBrace, closeBrace, braceComparisonType); + } // ExpandArgument + + public static IDictionary CreateParameters(string[] keys, string[] values, bool caseSensitive) + { + if ((keys == null) || (keys.Length == 0)) throw new ArgumentException(); + if ((values == null) || (values.Length == 0)) throw new ArgumentException(); + if (keys.Length != values.Length) throw new ArgumentException(); + + var result = new Dictionary(keys.Length, caseSensitive ? StringComparer.CurrentCulture : StringComparer.CurrentCultureIgnoreCase); + + for (int keyIndex = 0, valueIndex = 0; (keyIndex < keys.Length) && (valueIndex < values.Length); keyIndex++, valueIndex++) + { + result.Add(keys[keyIndex], values[valueIndex]); + } // for + + return result; + } // CreateParameters + + public static string JoinArguments(string[] arguments) + { + if ((arguments == null) || (arguments.Length == 0)) return null; + + var length = 0; + foreach (var argument in arguments) + { + length += argument.Length; + length += 3; // open quote, close quote, space + } // foreach + + var result = new StringBuilder(length); + foreach (var argument in arguments) + { + result.Append('"'); + result.Append(argument); + result.Append('"'); + result.Append(' '); + } // foreach + result.Remove(result.Length - 1, 1); // remove last space + + return result.ToString(); + } // JoinArguments + + private static void Validate(IDictionary parameters, string openBrace, string closeBrace) + { + if ((string.IsNullOrEmpty(openBrace)) || (string.IsNullOrEmpty(closeBrace))) + { + throw new ArgumentException(); + } // if + if ((parameters == null) || (parameters.Count == 0)) + { + throw new ArgumentException(); + } // if + if ((string.IsNullOrEmpty(openBrace)) || (string.IsNullOrEmpty(closeBrace))) + { + throw new ArgumentException(); + } // if + } // Validate + + private static string InternalExpandArgument(string rawArgument, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) + { + int index, param; + + if (string.IsNullOrEmpty(rawArgument)) return rawArgument; + + index = rawArgument.IndexOf(openBrace, braceComparisonType); + if (index < 0) return rawArgument; + + var current = 0; + var result = new StringBuilder(); + while (index >= 0) + { + if (index > current) + { + result.Append(rawArgument.Substring(current, index - current)); + } // if + + param = index + openBrace.Length; + index = rawArgument.IndexOf(closeBrace, param, braceComparisonType); + + // close 'brace' not found or no param key is specified + if ((index == param) || (index < 0)) + { + throw new ArgumentOutOfRangeException(); + } // if + + var paramName = rawArgument.Substring(param, index - param); + result.Append(parameters[paramName]); + + current = index + closeBrace.Length; + index = rawArgument.IndexOf(openBrace, current, braceComparisonType); + } // while + if (current < rawArgument.Length) + { + result.Append(rawArgument.Substring(current)); + } // if + + return result.ToString(); + } // InternalExpandArgument + } // class ArgumentsManager +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs b/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs index bab6b45f..8dd5bb49 100644 --- a/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs +++ b/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs @@ -1,88 +1,88 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Common -{ - public class CommandLineArguments - { - public bool SpecialHelpArgument - { - get; - set; - } // SpecialHelpArgument - - public bool IsHelpRequested - { - get; - private set; - } // IsHelpRequested - - public bool IsOk - { - get; - private set; - } // IsOk - - public IDictionary Parse(string[] args) - { - string argName; - string argValue; - - IsHelpRequested = false; - IsOk = false; - - var arguments = new Dictionary(args.Length, StringComparer.InvariantCultureIgnoreCase); - - foreach (var arg in args) - { - if ((arg[0] == '/') || (arg[0] == '-')) - { - if (arg.Length < 2) // argument name expected - { - return arguments; - } // if - - if (SpecialHelpArgument) - { - var partialArg = arg.Substring(1, 1).ToLower(); - if ((partialArg.StartsWith("h")) || (partialArg.StartsWith("?"))) - { - IsHelpRequested = true; - break; - } // if - } // if - - argValue = null; - var pos = arg.IndexOf(':'); - if (pos == 0) // argument name expected - { - return arguments; - } - else if (pos > 0) - { - argName = arg.Substring(1, pos - 1); - argValue = arg.Substring(pos + 1); - } - else - { - argName = arg; - } // if-else - - arguments[argName] = argValue; - } - else - { - return arguments; - } // if-else - } // foreach arg - - IsOk = true; - return arguments; - } // Parse - } // class CommandLineArguments -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Common +{ + public class CommandLineArguments + { + public bool SpecialHelpArgument + { + get; + set; + } // SpecialHelpArgument + + public bool IsHelpRequested + { + get; + private set; + } // IsHelpRequested + + public bool IsOk + { + get; + private set; + } // IsOk + + public IDictionary Parse(string[] args) + { + string argName; + string argValue; + + IsHelpRequested = false; + IsOk = false; + + var arguments = new Dictionary(args.Length, StringComparer.InvariantCultureIgnoreCase); + + foreach (var arg in args) + { + if ((arg[0] == '/') || (arg[0] == '-')) + { + if (arg.Length < 2) // argument name expected + { + return arguments; + } // if + + if (SpecialHelpArgument) + { + var partialArg = arg.Substring(1, 1).ToLower(); + if ((partialArg.StartsWith("h")) || (partialArg.StartsWith("?"))) + { + IsHelpRequested = true; + break; + } // if + } // if + + argValue = null; + var pos = arg.IndexOf(':'); + if (pos == 0) // argument name expected + { + return arguments; + } + else if (pos > 0) + { + argName = arg.Substring(1, pos - 1); + argValue = arg.Substring(pos + 1); + } + else + { + argName = arg; + } // if-else + + arguments[argName] = argValue; + } + else + { + return arguments; + } // if-else + } // foreach arg + + IsOk = true; + return arguments; + } // Parse + } // class CommandLineArguments +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/FormatString.cs b/1.5 'Kruger 60'/Project.Common/FormatString.cs index b576d4f7..4181e9a3 100644 --- a/1.5 'Kruger 60'/Project.Common/FormatString.cs +++ b/1.5 'Kruger 60'/Project.Common/FormatString.cs @@ -1,99 +1,99 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Common -{ - public static class FormatString - { - public enum Format - { - Basic, - Compact, - Extended - } // Format - - #region DateTime - - public static string DateTimeFromToMinutes(DateTime start, DateTime end, DateTime referenceTime) - { - if (IsSameDay(start, referenceTime)) - { - if (IsSameDay(end, referenceTime)) - { - return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesStartEnd, start, end); - } - else - { - return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesStartDifferentEnd, start, end); - } // if-else - } - else - { - if (IsSameDay(end, referenceTime)) - { - return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesDifferentStartEnd, start, end); - } - else - { - return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesDifferentStartDifferentEnd, start, end); - } // if-else - } // if-else - } // DateTimeFromToMinutes - - public static bool IsSameDay(DateTime time1, DateTime time2) - { - return ((time1.Day == time2.Day) && (time1.Month == time2.Month) && (time1.Year == time2.Year)); - } // IsSameDay - - #endregion - - #region TimeSpan - - public static string TimeSpanTotalMinutes(TimeSpan value, Format format) - { - string spanFormat; - int minutes; - - switch (format) - { - case Format.Compact: - if (value.TotalMinutes < 61) - { - spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompact; - } - else if (value.TotalHours < 24) - { - spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompactHours; - } - else - { - spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompactDays; - } // if-else - break; - case Format.Extended: - if (value.TotalMinutes <= 60) - { - spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtended; - } - else if (value.TotalHours < 24) - { - spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtendedHours; - } - else - { - spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtendedDays; - } // if-else - break; - default: - return string.Format(Properties.FormatStringTexts.TimeSpanTotalMinutesBasic, value.TotalMinutes); - } // switch - - minutes = value.Minutes + ((value.Seconds > 0) ? 1 : 0); - return string.Format(spanFormat, minutes, value.Hours, value.Days); - } // TimeSpanTotalMinutes - - #endregion - } // class FormatString -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Common +{ + public static class FormatString + { + public enum Format + { + Basic, + Compact, + Extended + } // Format + + #region DateTime + + public static string DateTimeFromToMinutes(DateTime start, DateTime end, DateTime referenceTime) + { + if (IsSameDay(start, referenceTime)) + { + if (IsSameDay(end, referenceTime)) + { + return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesStartEnd, start, end); + } + else + { + return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesStartDifferentEnd, start, end); + } // if-else + } + else + { + if (IsSameDay(end, referenceTime)) + { + return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesDifferentStartEnd, start, end); + } + else + { + return string.Format(Properties.FormatStringTexts.DateTimeFromToMinutesDifferentStartDifferentEnd, start, end); + } // if-else + } // if-else + } // DateTimeFromToMinutes + + public static bool IsSameDay(DateTime time1, DateTime time2) + { + return ((time1.Day == time2.Day) && (time1.Month == time2.Month) && (time1.Year == time2.Year)); + } // IsSameDay + + #endregion + + #region TimeSpan + + public static string TimeSpanTotalMinutes(TimeSpan value, Format format) + { + string spanFormat; + int minutes; + + switch (format) + { + case Format.Compact: + if (value.TotalMinutes < 61) + { + spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompact; + } + else if (value.TotalHours < 24) + { + spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompactHours; + } + else + { + spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompactDays; + } // if-else + break; + case Format.Extended: + if (value.TotalMinutes <= 60) + { + spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtended; + } + else if (value.TotalHours < 24) + { + spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtendedHours; + } + else + { + spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtendedDays; + } // if-else + break; + default: + return string.Format(Properties.FormatStringTexts.TimeSpanTotalMinutesBasic, value.TotalMinutes); + } // switch + + minutes = value.Minutes + ((value.Seconds > 0) ? 1 : 0); + return string.Format(spanFormat, minutes, value.Hours, value.Days); + } // TimeSpanTotalMinutes + + #endregion + } // class FormatString +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs b/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs index 91a6acf0..80e4ca39 100644 --- a/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs +++ b/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs @@ -4,7 +4,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.Common +namespace IpTviewr.Common { public class HandleExceptionEventArgs: EventArgs { diff --git a/1.5 'Kruger 60'/Project.Common/Launcher.cs b/1.5 'Kruger 60'/Project.Common/Launcher.cs index c6eb5529..11c7ed52 100644 --- a/1.5 'Kruger 60'/Project.Common/Launcher.cs +++ b/1.5 'Kruger 60'/Project.Common/Launcher.cs @@ -1,61 +1,61 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.Common -{ - public class Launcher - { - /// - /// - /// - /// Handle to owner form for displaying OS error messages - /// Url to show in the default browser - /// - public static Exception OpenUrl(IWin32Window parentForm, string url) - { - try - { - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = url, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = parentForm.Handle, - }; - process.Start(); - } // using process - } - catch (Exception ex) - { - return ex; - } // try-catch - - return null; - } // OpenUrl - - /// - /// - /// - /// Handle to owner form for displaying OS error messages - /// Url to show in the default browser - /// Exception handler - /// Error formating text or null for standard message - public static void OpenUrl(IWin32Window parentForm, string url, Action exceptionHandler, string openUrlErrorFormat) - { - var ex = OpenUrl(parentForm, url); - if (ex != null) - { - exceptionHandler(string.Format(openUrlErrorFormat ?? Properties.Texts.LauncherOpenUrlError, url), ex); - } // if - } // OpenUrl - } // class Launcher -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Common +{ + public class Launcher + { + /// + /// + /// + /// Handle to owner form for displaying OS error messages + /// Url to show in the default browser + /// + public static Exception OpenUrl(IWin32Window parentForm, string url) + { + try + { + using (var process = new Process()) + { + process.StartInfo = new ProcessStartInfo() + { + FileName = url, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = parentForm.Handle, + }; + process.Start(); + } // using process + } + catch (Exception ex) + { + return ex; + } // try-catch + + return null; + } // OpenUrl + + /// + /// + /// + /// Handle to owner form for displaying OS error messages + /// Url to show in the default browser + /// Exception handler + /// Error formating text or null for standard message + public static void OpenUrl(IWin32Window parentForm, string url, Action exceptionHandler, string openUrlErrorFormat) + { + var ex = OpenUrl(parentForm, url); + if (ex != null) + { + exceptionHandler(string.Format(openUrlErrorFormat ?? Properties.Texts.LauncherOpenUrlError, url), ex); + } // if + } // OpenUrl + } // class Launcher +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj index c37bc1a4..6e500f3c 100644 --- a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj +++ b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj @@ -7,7 +7,7 @@ {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} Library Properties - Project.IpTv.Common + IpTviewr.Common Project.Common v3.5 512 diff --git a/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs index 1c379b6a..06fe9044 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs @@ -1,31 +1,31 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Project.Common")] -[assembly: AssemblyDescription("Project.IpTv.Common")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("554861bf-241d-400b-a46d-38cd9365e2ea")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Project.Common")] +[assembly: AssemblyDescription("IpTviewr.Common")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("554861bf-241d-400b-a46d-38cd9365e2ea")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs index e12b1a72..424b78da 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs +++ b/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs @@ -1,162 +1,162 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class FormatStringTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal FormatStringTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Common.Properties.FormatStringTexts", typeof(FormatStringTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to {0:d} {0:t} to {1:d} {1:t}. - /// - internal static string DateTimeFromToMinutesDifferentStartDifferentEnd { - get { - return ResourceManager.GetString("DateTimeFromToMinutesDifferentStartDifferentEnd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:d} {0:t} to {1:t}. - /// - internal static string DateTimeFromToMinutesDifferentStartEnd { - get { - return ResourceManager.GetString("DateTimeFromToMinutesDifferentStartEnd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:t} to {1:d} {1:t}. - /// - internal static string DateTimeFromToMinutesStartDifferentEnd { - get { - return ResourceManager.GetString("DateTimeFromToMinutesStartDifferentEnd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:t} to {1:t}. - /// - internal static string DateTimeFromToMinutesStartEnd { - get { - return ResourceManager.GetString("DateTimeFromToMinutesStartEnd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:N0} minutes. - /// - internal static string TimeSpanTotalMinutesBasic { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesBasic", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:N0}m. - /// - internal static string TimeSpanTotalMinutesCompact { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesCompact", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {2:N0}d {1:N0}h {0:N0}m. - /// - internal static string TimeSpanTotalMinutesCompactDays { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesCompactDays", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {1:N0}h {0:N0}m. - /// - internal static string TimeSpanTotalMinutesCompactHours { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesCompactHours", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:N0} minutes. - /// - internal static string TimeSpanTotalMinutesExtended { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesExtended", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {2:N0} days, {1:N0} hours, {0:N0} minutes. - /// - internal static string TimeSpanTotalMinutesExtendedDays { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesExtendedDays", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {1:N0} hours, {0:N0} minutes. - /// - internal static string TimeSpanTotalMinutesExtendedHours { - get { - return ResourceManager.GetString("TimeSpanTotalMinutesExtendedHours", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class FormatStringTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal FormatStringTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.FormatStringTexts", typeof(FormatStringTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0:d} {0:t} to {1:d} {1:t}. + /// + internal static string DateTimeFromToMinutesDifferentStartDifferentEnd { + get { + return ResourceManager.GetString("DateTimeFromToMinutesDifferentStartDifferentEnd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:d} {0:t} to {1:t}. + /// + internal static string DateTimeFromToMinutesDifferentStartEnd { + get { + return ResourceManager.GetString("DateTimeFromToMinutesDifferentStartEnd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:t} to {1:d} {1:t}. + /// + internal static string DateTimeFromToMinutesStartDifferentEnd { + get { + return ResourceManager.GetString("DateTimeFromToMinutesStartDifferentEnd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:t} to {1:t}. + /// + internal static string DateTimeFromToMinutesStartEnd { + get { + return ResourceManager.GetString("DateTimeFromToMinutesStartEnd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:N0} minutes. + /// + internal static string TimeSpanTotalMinutesBasic { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesBasic", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:N0}m. + /// + internal static string TimeSpanTotalMinutesCompact { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesCompact", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {2:N0}d {1:N0}h {0:N0}m. + /// + internal static string TimeSpanTotalMinutesCompactDays { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesCompactDays", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {1:N0}h {0:N0}m. + /// + internal static string TimeSpanTotalMinutesCompactHours { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesCompactHours", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:N0} minutes. + /// + internal static string TimeSpanTotalMinutesExtended { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesExtended", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {2:N0} days, {1:N0} hours, {0:N0} minutes. + /// + internal static string TimeSpanTotalMinutesExtendedDays { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesExtendedDays", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {1:N0} hours, {0:N0} minutes. + /// + internal static string TimeSpanTotalMinutesExtendedHours { + get { + return ResourceManager.GetString("TimeSpanTotalMinutesExtendedHours", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs index 324ec2ca..16685d62 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs @@ -1,63 +1,63 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Common.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs index 8a99f6d8..f4766988 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs @@ -1,72 +1,72 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Common.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Unable to open an Internet browser to display this web page: '{0}'.. - /// - internal static string LauncherOpenUrlError { - get { - return ResourceManager.GetString("LauncherOpenUrlError", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Unable to open an Internet browser to display this web page: '{0}'.. + /// + internal static string LauncherOpenUrlError { + get { + return ResourceManager.GetString("LauncherOpenUrlError", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs b/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs index 236d40f4..567eb2e7 100644 --- a/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs +++ b/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs @@ -1,175 +1,175 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Common.Serialization -{ - public static class XmlSerialization - { - #region Serialize - - public static object CloneObject(object data) - { - using (var buffer = new MemoryStream()) - { - XmlSerialization.SerializeObject(buffer, data); - buffer.Seek(0, SeekOrigin.Begin); - return XmlSerialization.Deserialize(buffer, data.GetType()); - } // using buffer - } // Clone - - public static T Clone(T data) where T : class - { - using (var buffer = new MemoryStream()) - { - XmlSerialization.Serialize(buffer, data); - buffer.Seek(0, SeekOrigin.Begin); - return XmlSerialization.Deserialize(buffer); - } // using buffer - } // CloneSettings - - public static void SerializeObject(Stream output, object o) - { - var serializer = new XmlSerializer(o.GetType()); - serializer.Serialize(output, o); - } // SerializeObject - - public static void Serialize(string filename, T o) - { - using (var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) - { - Serialize(output, o); - } // using output - } // Serialize - - public static void Serialize(string filename, Encoding encoding, T o) - { - using (var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) - { - Serialize(output, encoding, o); - } // using output - } // Serialize - - public static void Serialize(Stream output, T o) - { - var serializer = new XmlSerializer(typeof(T)); - serializer.Serialize(output, o); - } // Serialize - - public static void Serialize(Stream output, Encoding encoding, T o) - { - var serializer = new XmlSerializer(typeof(T)); - using (var outputWriter = new StreamWriter(output, encoding)) - { - serializer.Serialize(outputWriter, o); - } // using outputWriter - } // Serialize - - public static void Serialize(XmlWriter output, T o) - { - var serializer = new XmlSerializer(typeof(T)); - serializer.Serialize(output, o); - } // Serialize - - #endregion - - #region Deserialize - - public static object Deserialize(Stream input, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) - { - using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) - { - return Deserialize(reader, type, trimExtraWhitespace, namespaceReplacer); - } // using reader - } // Deserialize - - public static object Deserialize(XmlReader reader, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) - { - var serializer = new XmlSerializer(type); - return serializer.Deserialize(reader); - } // Deserialize - - public static T DeserializeXmlText(string xmlText, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - using (var input = new StringReader(xmlText)) - { - using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) - { - return Deserialize(reader); - } // using reader - } // using input - } // Deserialize - - public static T Deserialize(XmlReader reader) where T : class - { - var serializer = new XmlSerializer(typeof(T)); - return serializer.Deserialize(reader) as T; - } // Deserialize - - public static T Deserialize(string filename, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - using (var input = new FileStream(filename, FileMode.Open, FileAccess.Read)) - { - return Deserialize(input, trimExtraWhitespace, namespaceReplacer); - } // using input - } // XmlDeserialize - - public static T Deserialize(Stream input, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - return Deserialize(input, typeof(T), trimExtraWhitespace, namespaceReplacer) as T; - } // Deserialize - - public static T Deserialize(byte[] data, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - using (var input = new MemoryStream(data)) - { - return Deserialize(input, trimExtraWhitespace, namespaceReplacer); - } // using - } // Deserialize - - public static XmlReader CreateXmlReader(Stream input, bool trimExtraWhitespace, Func namespaceReplacer) - { - if (trimExtraWhitespace) - { - var readerSettings = new XmlReaderSettings() - { - IgnoreComments = true, - IgnoreWhitespace = true, - }; - - return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); - } - else - { - return XmlReader.Create(input); - } // if-else - } // CreateXmlReader - - public static XmlReader CreateXmlReader(TextReader input, bool trimExtraWhitespace, Func namespaceReplacer) - { - if (trimExtraWhitespace) - { - var readerSettings = new XmlReaderSettings() - { - IgnoreComments = true, - IgnoreWhitespace = true, - }; - - return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); - } - else - { - return XmlReader.Create(input); - } // if-else - } // CreateXmlReader - - #endregion - } // class XmlSerialization -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Common.Serialization +{ + public static class XmlSerialization + { + #region Serialize + + public static object CloneObject(object data) + { + using (var buffer = new MemoryStream()) + { + XmlSerialization.SerializeObject(buffer, data); + buffer.Seek(0, SeekOrigin.Begin); + return XmlSerialization.Deserialize(buffer, data.GetType()); + } // using buffer + } // Clone + + public static T Clone(T data) where T : class + { + using (var buffer = new MemoryStream()) + { + XmlSerialization.Serialize(buffer, data); + buffer.Seek(0, SeekOrigin.Begin); + return XmlSerialization.Deserialize(buffer); + } // using buffer + } // CloneSettings + + public static void SerializeObject(Stream output, object o) + { + var serializer = new XmlSerializer(o.GetType()); + serializer.Serialize(output, o); + } // SerializeObject + + public static void Serialize(string filename, T o) + { + using (var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) + { + Serialize(output, o); + } // using output + } // Serialize + + public static void Serialize(string filename, Encoding encoding, T o) + { + using (var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) + { + Serialize(output, encoding, o); + } // using output + } // Serialize + + public static void Serialize(Stream output, T o) + { + var serializer = new XmlSerializer(typeof(T)); + serializer.Serialize(output, o); + } // Serialize + + public static void Serialize(Stream output, Encoding encoding, T o) + { + var serializer = new XmlSerializer(typeof(T)); + using (var outputWriter = new StreamWriter(output, encoding)) + { + serializer.Serialize(outputWriter, o); + } // using outputWriter + } // Serialize + + public static void Serialize(XmlWriter output, T o) + { + var serializer = new XmlSerializer(typeof(T)); + serializer.Serialize(output, o); + } // Serialize + + #endregion + + #region Deserialize + + public static object Deserialize(Stream input, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) + { + using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) + { + return Deserialize(reader, type, trimExtraWhitespace, namespaceReplacer); + } // using reader + } // Deserialize + + public static object Deserialize(XmlReader reader, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) + { + var serializer = new XmlSerializer(type); + return serializer.Deserialize(reader); + } // Deserialize + + public static T DeserializeXmlText(string xmlText, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + using (var input = new StringReader(xmlText)) + { + using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) + { + return Deserialize(reader); + } // using reader + } // using input + } // Deserialize + + public static T Deserialize(XmlReader reader) where T : class + { + var serializer = new XmlSerializer(typeof(T)); + return serializer.Deserialize(reader) as T; + } // Deserialize + + public static T Deserialize(string filename, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + using (var input = new FileStream(filename, FileMode.Open, FileAccess.Read)) + { + return Deserialize(input, trimExtraWhitespace, namespaceReplacer); + } // using input + } // XmlDeserialize + + public static T Deserialize(Stream input, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + return Deserialize(input, typeof(T), trimExtraWhitespace, namespaceReplacer) as T; + } // Deserialize + + public static T Deserialize(byte[] data, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + using (var input = new MemoryStream(data)) + { + return Deserialize(input, trimExtraWhitespace, namespaceReplacer); + } // using + } // Deserialize + + public static XmlReader CreateXmlReader(Stream input, bool trimExtraWhitespace, Func namespaceReplacer) + { + if (trimExtraWhitespace) + { + var readerSettings = new XmlReaderSettings() + { + IgnoreComments = true, + IgnoreWhitespace = true, + }; + + return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); + } + else + { + return XmlReader.Create(input); + } // if-else + } // CreateXmlReader + + public static XmlReader CreateXmlReader(TextReader input, bool trimExtraWhitespace, Func namespaceReplacer) + { + if (trimExtraWhitespace) + { + var readerSettings = new XmlReaderSettings() + { + IgnoreComments = true, + IgnoreWhitespace = true, + }; + + return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); + } + else + { + return XmlReader.Create(input); + } // if-else + } // CreateXmlReader + + #endregion + } // class XmlSerialization +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs b/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs index 26c157d8..ef14671a 100644 --- a/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs +++ b/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs @@ -1,109 +1,109 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; - -namespace Project.IpTv.Common.Serialization -{ - public class XmlTextReaderTrimExtraWhitespace : XmlTextReader - { - private XmlReaderSettings MySettings; - private Func NamespaceReplacer; - - public XmlTextReaderTrimExtraWhitespace(Stream input, Func namespaceReplacer) - : base(input) - { - NamespaceReplacer = namespaceReplacer; - } // constructor - - public XmlTextReaderTrimExtraWhitespace(Stream input, XmlReaderSettings settings, Func namespaceReplacer) - : base(input) - { - MySettings = settings; - NamespaceReplacer = namespaceReplacer; - } // constructor - - public XmlTextReaderTrimExtraWhitespace(TextReader input, Func namespaceReplacer) - : base(input) - { - NamespaceReplacer = namespaceReplacer; - } // constructor - - public XmlTextReaderTrimExtraWhitespace(TextReader input, XmlReaderSettings settings, Func namespaceReplacer) - : base(input) - { - MySettings = settings; - NamespaceReplacer = namespaceReplacer; - } // constructor - - public override XmlReaderSettings Settings - { - get { return MySettings ?? base.Settings; } - } // Settings - - public override string NamespaceURI - { - get - { - var ns = base.NamespaceURI; - - if (NamespaceReplacer == null) return ns; - if (string.IsNullOrEmpty(ns)) return ns; - - return NamespaceReplacer(ns); - } // get - } // NamespaceURI - - public override string ReadString() - { - return TrimExtraWhitespace(base.ReadString()); - } // ReadString - - public static string TrimExtraWhitespace(string input) - { - if (string.IsNullOrEmpty(input)) return input; - - var startIndex = 0; - for (int i = 0; i < input.Length; i++) - { - if (!char.IsWhiteSpace(input[i])) - { - startIndex = i; - break; - } // if - } // for - - var endIndex = input.Length; - for (int i = input.Length - 1; i >= startIndex; i--) - { - if (!char.IsWhiteSpace(input[i])) - { - endIndex = i + 1; - break; - } // if - } // for - - var buffer = new StringBuilder((endIndex - startIndex) + 1); - for (int i = startIndex; i < endIndex; i++) - { - var c = input[i]; - var isWhitespace = char.IsWhiteSpace(c); - if (isWhitespace) - { - c = ' '; - } // if - if ((i == startIndex) || !isWhitespace || (isWhitespace && !char.IsWhiteSpace(input[i - 1]))) - { - buffer.Append(c); - } // if - } // for - - return buffer.ToString(); - } // TrimExtraWhitespace - } // XmlTextReaderTrimExtraWhitespace -} // namespace +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; + +namespace IpTviewr.Common.Serialization +{ + public class XmlTextReaderTrimExtraWhitespace : XmlTextReader + { + private XmlReaderSettings MySettings; + private Func NamespaceReplacer; + + public XmlTextReaderTrimExtraWhitespace(Stream input, Func namespaceReplacer) + : base(input) + { + NamespaceReplacer = namespaceReplacer; + } // constructor + + public XmlTextReaderTrimExtraWhitespace(Stream input, XmlReaderSettings settings, Func namespaceReplacer) + : base(input) + { + MySettings = settings; + NamespaceReplacer = namespaceReplacer; + } // constructor + + public XmlTextReaderTrimExtraWhitespace(TextReader input, Func namespaceReplacer) + : base(input) + { + NamespaceReplacer = namespaceReplacer; + } // constructor + + public XmlTextReaderTrimExtraWhitespace(TextReader input, XmlReaderSettings settings, Func namespaceReplacer) + : base(input) + { + MySettings = settings; + NamespaceReplacer = namespaceReplacer; + } // constructor + + public override XmlReaderSettings Settings + { + get { return MySettings ?? base.Settings; } + } // Settings + + public override string NamespaceURI + { + get + { + var ns = base.NamespaceURI; + + if (NamespaceReplacer == null) return ns; + if (string.IsNullOrEmpty(ns)) return ns; + + return NamespaceReplacer(ns); + } // get + } // NamespaceURI + + public override string ReadString() + { + return TrimExtraWhitespace(base.ReadString()); + } // ReadString + + public static string TrimExtraWhitespace(string input) + { + if (string.IsNullOrEmpty(input)) return input; + + var startIndex = 0; + for (int i = 0; i < input.Length; i++) + { + if (!char.IsWhiteSpace(input[i])) + { + startIndex = i; + break; + } // if + } // for + + var endIndex = input.Length; + for (int i = input.Length - 1; i >= startIndex; i--) + { + if (!char.IsWhiteSpace(input[i])) + { + endIndex = i + 1; + break; + } // if + } // for + + var buffer = new StringBuilder((endIndex - startIndex) + 1); + for (int i = startIndex; i < endIndex; i++) + { + var c = input[i]; + var isWhitespace = char.IsWhiteSpace(c); + if (isWhitespace) + { + c = ' '; + } // if + if ((i == startIndex) || !isWhitespace || (isWhitespace && !char.IsWhiteSpace(input[i - 1]))) + { + buffer.Append(c); + } // if + } // for + + return buffer.ToString(); + } // TrimExtraWhitespace + } // XmlTextReaderTrimExtraWhitespace +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs b/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs index fef68a19..6830b3ca 100644 --- a/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs +++ b/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs @@ -1,287 +1,287 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace Project.IpTv.Common.Telemetry -{ - public class BasicGoogleTelemetry - { -#if DEBUG - private static Uri UrlEndpoint = new Uri("https://www.google-analytics.com/debug/collect"); -#else - private static Uri UrlEndpoint = new Uri("https://www.google-analytics.com/collect"); -#endif - private static string UserAgent; - private static string ApplicationName; - - public static bool Enabled - { - get; - private set; - } // Enabled - - public static bool Usage - { - get; - private set; - } // Usage - - public static bool Exceptions - { - get; - private set; - } // Exceptions - - public static string TrackingId - { - get; - private set; - } // TrackingId - - public static string ClientId - { - get; - private set; - } // ClientId - - public static void Init(string trackingId, string clientId, bool enabled, bool usage, bool exceptions) - { - UserAgent = BuildUserAgent(); - ApplicationName = Path.GetFileNameWithoutExtension(Application.ExecutablePath); - TrackingId = trackingId; - ClientId = clientId; - Enabled = enabled; - Usage = usage & enabled; - Exceptions = exceptions & enabled; - ManageSession(false); - //MessageBox.Show(string.Format("TrackingId: {0}\r\nClientId: {1}\r\nEnable: {2} {3} {4}", TrackingId, ClientId, Enabled, Usage, Exceptions), "Init Google Telemetry"); - } // Init - - public static void EnsureHitsSents() - { - // this is a nasty trick to give time to the ThreadPool to send any remaining hits - // TODO: create a true queue -#if !DEBUG - if (Enabled) - { - Thread.Sleep(5000); - } // if -#endif - } // EnsureHitsSents - - public static void ManageSession(bool end) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "event"); - bag.Add("ec", "Session"); - bag.Add("ea", end? "End" : "Start"); - bag.Add("sr", string.Format("{0}x{1}", Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)); - bag.Add("vp", string.Format("{0}x{1}", SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height)); - bag.Add("sd", string.Format("{0}-bits", Screen.PrimaryScreen.BitsPerPixel)); - bag.Add("ni", "1"); // non-interactive - bag.Add("cd<1>", Environment.OSVersion.ToString()); - Send(bag); - - bag = CreateProperyBag(); - bag.Add("sc", end ? "end" : "start"); - bag.Add("ni", "1"); // non-interactive - Send(bag); - }); - } // EndSession - - public static void SendScreenHit(string screenName) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "screenview"); - bag.Add("cd", screenName); - Send(bag); - }); - } // SendScreenHit - - public static void SendScreenHit(Form form, string status = null) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "screenview"); - if (status == null) - { - bag.Add("cd", form.GetType().Name); - } - else - { - bag.Add("cd", string.Format("{0}: {1}", form.GetType().Name, status)); - } // if-else - Send(bag); - }); - } // SendScreenHit - - public static void SendExceptionHit(Exception ex) - { - if (!Exceptions) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "exception"); - bag.Add("exd", ex.GetType().FullName); - bag.Add("ni", "1"); - Send(bag); - }); - } // SendExceptionHit - - public static void SendExtendedExceptionHit(Exception ex, bool sendBasic = true, string context = null, string screenName = null) - { - if (!Exceptions) return; - - ThreadPool.QueueUserWorkItem((o) => - { - if (sendBasic) - { - var basicBag = CreateProperyBag(); - basicBag.Add("t", "exception"); - basicBag.Add("exd", ex.GetType().FullName); - basicBag.Add("ni", "1"); - if (screenName != null) - { - basicBag.Add("cd", screenName); - } // if - Send(basicBag); - } // if - - var bag = CreateProperyBag(); - bag.Add("t", "event"); - bag.Add("ec", "Exception"); - bag.Add("ea", ex.GetType().FullName); - if (context != null) - { - bag.Add("el", context); - } // if - if (screenName != null) - { - bag.Add("cd", screenName); - } // if - bag.Add("ni", "1"); - Send(bag); - }); - } // SendExtendedExceptionHit - - public static void SendEventHit(string category, string action, string label = null, string screenName = null, int? value = null) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "event"); - bag.Add("ec", category); - bag.Add("ea", action); - if (label != null) - { - bag.Add("el", label); - } // if - if (value != null) - { - bag.Add("ev", value.Value.ToString(CultureInfo.InvariantCulture)); - } // if - if (screenName != null) - { - bag.Add("cd", screenName); - } // if - Send(bag); - }); - } // SendEventHit - - private static IDictionary CreateProperyBag() - { - var bag = new Dictionary(); - - bag.Add("v", "1"); - bag.Add("tid", TrackingId); - bag.Add("cid", ClientId); - bag.Add("ul", Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant()); - bag.Add("an", ApplicationName); - bag.Add("av", SolutionVersion.AssemblyFileVersion); - - return bag; - } // CreateProperyBag - - private static void Send(IDictionary propertyBag) - { - try - { - var client = new WebClient(); - client.Headers.Add(HttpRequestHeader.UserAgent, UserAgent); - - var postData = GetPostData(propertyBag); - var binPostData = Encoding.UTF8.GetBytes(postData); -#if DEBUG - // Do NOT send hits in debug mode - // var result = client.UploadData(UrlEndpoint, binPostData); - // var json = Encoding.UTF8.GetString(result); -#else - //MessageBox.Show(UrlEndpoint.ToString() + "\r\n" + postData, "Basic Google Telemetry"); - client.UploadDataAsync(UrlEndpoint, binPostData); -#endif - } - catch - { - // ignore - } // try-catch - } // Send - - private static string GetPostData(IDictionary propertyBag) - { - var result = new StringBuilder(); - foreach (var property in propertyBag) - { - if (result.Length > 0) result.Append("&"); - result.Append(Uri.EscapeDataString(property.Key)); - result.Append("="); - result.Append(Uri.EscapeDataString(property.Value)); - } // foreach - - return result.ToString(); - } // GetPostData - - private static string BuildUserAgent() - { - string osName; - - var osInfo = Environment.OSVersion; - var osVersion = string.Format("{0}.{1}.{2}", osInfo.Version.Major, osInfo.Version.Minor, osInfo.Version.Build); - switch (osInfo.Platform) - { - case PlatformID.Win32NT: osName = "Windows NT"; break; - case PlatformID.Unix: osName = "Unix"; break; - case PlatformID.MacOSX: osName = "Macintosh"; break; - case PlatformID.Win32Windows: osName = "Windows"; break; - case PlatformID.Win32S: osName = "Windows"; break; - case PlatformID.WinCE: osName = "Windows CE"; break; - default: - osName = "Unknown"; break; - } // switch - - return string.Format("{0} ({1} {2})", "Mozilla/5.0", osName, osVersion); - } // BuildUserAgent - } // internal class BasicGoogleTelemetry -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.Common.Telemetry +{ + public class BasicGoogleTelemetry + { +#if DEBUG + private static Uri UrlEndpoint = new Uri("https://www.google-analytics.com/debug/collect"); +#else + private static Uri UrlEndpoint = new Uri("https://www.google-analytics.com/collect"); +#endif + private static string UserAgent; + private static string ApplicationName; + + public static bool Enabled + { + get; + private set; + } // Enabled + + public static bool Usage + { + get; + private set; + } // Usage + + public static bool Exceptions + { + get; + private set; + } // Exceptions + + public static string TrackingId + { + get; + private set; + } // TrackingId + + public static string ClientId + { + get; + private set; + } // ClientId + + public static void Init(string trackingId, string clientId, bool enabled, bool usage, bool exceptions) + { + UserAgent = BuildUserAgent(); + ApplicationName = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + TrackingId = trackingId; + ClientId = clientId; + Enabled = enabled; + Usage = usage & enabled; + Exceptions = exceptions & enabled; + ManageSession(false); + //MessageBox.Show(string.Format("TrackingId: {0}\r\nClientId: {1}\r\nEnable: {2} {3} {4}", TrackingId, ClientId, Enabled, Usage, Exceptions), "Init Google Telemetry"); + } // Init + + public static void EnsureHitsSents() + { + // this is a nasty trick to give time to the ThreadPool to send any remaining hits + // TODO: create a true queue +#if !DEBUG + if (Enabled) + { + Thread.Sleep(5000); + } // if +#endif + } // EnsureHitsSents + + public static void ManageSession(bool end) + { + if (!Usage) return; + + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreateProperyBag(); + bag.Add("t", "event"); + bag.Add("ec", "Session"); + bag.Add("ea", end? "End" : "Start"); + bag.Add("sr", string.Format("{0}x{1}", Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)); + bag.Add("vp", string.Format("{0}x{1}", SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height)); + bag.Add("sd", string.Format("{0}-bits", Screen.PrimaryScreen.BitsPerPixel)); + bag.Add("ni", "1"); // non-interactive + bag.Add("cd<1>", Environment.OSVersion.ToString()); + Send(bag); + + bag = CreateProperyBag(); + bag.Add("sc", end ? "end" : "start"); + bag.Add("ni", "1"); // non-interactive + Send(bag); + }); + } // EndSession + + public static void SendScreenHit(string screenName) + { + if (!Usage) return; + + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreateProperyBag(); + bag.Add("t", "screenview"); + bag.Add("cd", screenName); + Send(bag); + }); + } // SendScreenHit + + public static void SendScreenHit(Form form, string status = null) + { + if (!Usage) return; + + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreateProperyBag(); + bag.Add("t", "screenview"); + if (status == null) + { + bag.Add("cd", form.GetType().Name); + } + else + { + bag.Add("cd", string.Format("{0}: {1}", form.GetType().Name, status)); + } // if-else + Send(bag); + }); + } // SendScreenHit + + public static void SendExceptionHit(Exception ex) + { + if (!Exceptions) return; + + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreateProperyBag(); + bag.Add("t", "exception"); + bag.Add("exd", ex.GetType().FullName); + bag.Add("ni", "1"); + Send(bag); + }); + } // SendExceptionHit + + public static void SendExtendedExceptionHit(Exception ex, bool sendBasic = true, string context = null, string screenName = null) + { + if (!Exceptions) return; + + ThreadPool.QueueUserWorkItem((o) => + { + if (sendBasic) + { + var basicBag = CreateProperyBag(); + basicBag.Add("t", "exception"); + basicBag.Add("exd", ex.GetType().FullName); + basicBag.Add("ni", "1"); + if (screenName != null) + { + basicBag.Add("cd", screenName); + } // if + Send(basicBag); + } // if + + var bag = CreateProperyBag(); + bag.Add("t", "event"); + bag.Add("ec", "Exception"); + bag.Add("ea", ex.GetType().FullName); + if (context != null) + { + bag.Add("el", context); + } // if + if (screenName != null) + { + bag.Add("cd", screenName); + } // if + bag.Add("ni", "1"); + Send(bag); + }); + } // SendExtendedExceptionHit + + public static void SendEventHit(string category, string action, string label = null, string screenName = null, int? value = null) + { + if (!Usage) return; + + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreateProperyBag(); + bag.Add("t", "event"); + bag.Add("ec", category); + bag.Add("ea", action); + if (label != null) + { + bag.Add("el", label); + } // if + if (value != null) + { + bag.Add("ev", value.Value.ToString(CultureInfo.InvariantCulture)); + } // if + if (screenName != null) + { + bag.Add("cd", screenName); + } // if + Send(bag); + }); + } // SendEventHit + + private static IDictionary CreateProperyBag() + { + var bag = new Dictionary(); + + bag.Add("v", "1"); + bag.Add("tid", TrackingId); + bag.Add("cid", ClientId); + bag.Add("ul", Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant()); + bag.Add("an", ApplicationName); + bag.Add("av", SolutionVersion.AssemblyFileVersion); + + return bag; + } // CreateProperyBag + + private static void Send(IDictionary propertyBag) + { + try + { + var client = new WebClient(); + client.Headers.Add(HttpRequestHeader.UserAgent, UserAgent); + + var postData = GetPostData(propertyBag); + var binPostData = Encoding.UTF8.GetBytes(postData); +#if DEBUG + // Do NOT send hits in debug mode + // var result = client.UploadData(UrlEndpoint, binPostData); + // var json = Encoding.UTF8.GetString(result); +#else + //MessageBox.Show(UrlEndpoint.ToString() + "\r\n" + postData, "Basic Google Telemetry"); + client.UploadDataAsync(UrlEndpoint, binPostData); +#endif + } + catch + { + // ignore + } // try-catch + } // Send + + private static string GetPostData(IDictionary propertyBag) + { + var result = new StringBuilder(); + foreach (var property in propertyBag) + { + if (result.Length > 0) result.Append("&"); + result.Append(Uri.EscapeDataString(property.Key)); + result.Append("="); + result.Append(Uri.EscapeDataString(property.Value)); + } // foreach + + return result.ToString(); + } // GetPostData + + private static string BuildUserAgent() + { + string osName; + + var osInfo = Environment.OSVersion; + var osVersion = string.Format("{0}.{1}.{2}", osInfo.Version.Major, osInfo.Version.Minor, osInfo.Version.Build); + switch (osInfo.Platform) + { + case PlatformID.Win32NT: osName = "Windows NT"; break; + case PlatformID.Unix: osName = "Unix"; break; + case PlatformID.MacOSX: osName = "Macintosh"; break; + case PlatformID.Win32Windows: osName = "Windows"; break; + case PlatformID.Win32S: osName = "Windows"; break; + case PlatformID.WinCE: osName = "Windows CE"; break; + default: + osName = "Unknown"; break; + } // switch + + return string.Format("{0} ({1} {2})", "Mozilla/5.0", osName, osVersion); + } // BuildUserAgent + } // internal class BasicGoogleTelemetry +} // namespace diff --git a/1.5 'Kruger 60'/Project.Native/Project.Native.csproj b/1.5 'Kruger 60'/Project.Native/Project.Native.csproj index d5547fba..b8bdc133 100644 --- a/1.5 'Kruger 60'/Project.Native/Project.Native.csproj +++ b/1.5 'Kruger 60'/Project.Native/Project.Native.csproj @@ -1,61 +1,61 @@ - - - - - Debug - AnyCPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB} - Library - Properties - Project.IpTv.Native - Project.Native - v3.5 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - + + + + + Debug + AnyCPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + Library + Properties + IpTviewr.Native + Project.Native + v3.5 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs index 9dc90e8d..62c6bfcf 100644 --- a/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs @@ -1,31 +1,31 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Project.Native")] -[assembly: AssemblyDescription("Project.IpTv.Native")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b9724e24-10fb-45e0-8eee-e35975a9bb3f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Project.Native")] +[assembly: AssemblyDescription("IpTviewr.Native")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b9724e24-10fb-45e0-8eee-e35975a9bb3f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision [assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Native/ShellLink.cs b/1.5 'Kruger 60'/Project.Native/ShellLink.cs index ce623ec5..73e22cf6 100644 --- a/1.5 'Kruger 60'/Project.Native/ShellLink.cs +++ b/1.5 'Kruger 60'/Project.Native/ShellLink.cs @@ -1,244 +1,244 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security.Permissions; -using System.Text; - -namespace Project.IpTv.Native -{ - public class ShellLink - { - public class UnsafeNativeMethods - { - public static readonly Guid CLSID_FolderShortcut = new Guid(0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); - public static readonly Guid CLSID_ShellLink = new Guid("00021401-0000-0000-C000-000000000046"); - - [ComImport, Guid("0000010c-0000-0000-c000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IPersist - { - Guid GetClassID(); - } // interface IPersist - - [ComImport, Guid("0000010b-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IPersistFile - { - Guid GetClassID(); - - [PreserveSig] - int IsDirty(); - - void Load([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName, uint dwMode); - - void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [In, MarshalAs(UnmanagedType.Bool)] bool fRemember); - - void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName); - - void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName); - } // interface IPersistFile - - /// The IShellLink interface allows Shell links to be created, modified, and resolved - [ComImport(), Guid("000214F9-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), CoClass(typeof(ShellLinkClass))] - public interface IShellLinkW - { - /// Retrieves the path and file name of a Shell link object - void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out UnsafeNativeMethods.WIN32_FIND_DATAW pfd, UnsafeNativeMethods.SLGP_FLAGS fFlags); - /// Retrieves the list of item identifiers for a Shell link object - void GetIDList(out IntPtr ppidl); - /// Sets the pointer to an item identifier list (PIDL) for a Shell link object. - void SetIDList(IntPtr pidl); - /// Retrieves the description string for a Shell link object - void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName); - /// Sets the description for a Shell link object. The description can be any application-defined string - void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); - /// Retrieves the name of the working directory for a Shell link object - void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); - /// Sets the name of the working directory for a Shell link object - void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); - /// Retrieves the command-line arguments associated with a Shell link object - void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); - /// Sets the command-line arguments for a Shell link object - void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); - /// Retrieves the hot key for a Shell link object - void GetHotkey(out short pwHotkey); - /// Sets a hot key for a Shell link object - void SetHotkey(short wHotkey); - /// Retrieves the show command for a Shell link object - void GetShowCmd(out int piShowCmd); - /// Sets the show command for a Shell link object. The show command sets the initial show state of the window. - void SetShowCmd(int iShowCmd); - /// Retrieves the location (path and index) of the icon for a Shell link object - void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); - /// Sets the location (path and index) of the icon for a Shell link object - void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); - /// Sets the relative path to the Shell link object - void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); - /// Attempts to find the target of a Shell link, even if it has been moved or renamed - void Resolve(IntPtr hwnd, UnsafeNativeMethods.SLR_FLAGS fFlags); - /// Sets the path and file name of a Shell link object - void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); - } // interface IShellLink - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct WIN32_FIND_DATAW - { - public uint dwFileAttributes; - public Int64 ftCreationTime; - public Int64 ftLastAccessTime; - public Int64 ftLastWriteTime; - public uint nFileSizeHigh; - public uint nFileSizeLow; - public uint dwReserved0; - public uint dwReserved1; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] - public string cFileName; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] - public string cAlternateFileName; - } // enum WIN32_FIND_DATAW - - /// IShellLink.GetPath fFlags: Flags that specify the type of path information to retrieve - [Flags()] - public enum SLGP_FLAGS - { - /// Retrieves the standard short (8.3 format) file name - SLGP_SHORTPATH = 0x1, - /// Retrieves the Universal Naming Convention (UNC) path name of the file - SLGP_UNCPRIORITY = 0x2, - /// Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded - SLGP_RAWPATH = 0x4 - } // enum SLGP_FLAGS - - /// IShellLink.Resolve fFlags - [Flags()] - public enum SLR_FLAGS - { - /// - /// Do not display a dialog box if the link cannot be resolved. When SLR_NO_UI is set, - /// the high-order word of fFlags can be set to a time-out value that specifies the - /// maximum amount of time to be spent resolving the link. The function returns if the - /// link cannot be resolved within the time-out duration. If the high-order word is set - /// to zero, the time-out duration will be set to the default value of 3,000 milliseconds - /// (3 seconds). To specify a value, set the high word of fFlags to the desired time-out - /// duration, in milliseconds. - /// - SLR_NO_UI = 0x1, - /// Obsolete and no longer used - SLR_ANY_MATCH = 0x2, - /// If the link object has changed, update its path and list of identifiers. - /// If SLR_UPDATE is set, you do not need to call IPersistFile::IsDirty to determine - /// whether or not the link object has changed. - SLR_UPDATE = 0x4, - /// Do not update the link information - SLR_NOUPDATE = 0x8, - /// Do not execute the search heuristics - SLR_NOSEARCH = 0x10, - /// Do not use distributed link tracking - SLR_NOTRACK = 0x20, - /// Disable distributed link tracking. By default, distributed link tracking tracks - /// removable media across multiple devices based on the volume name. It also uses the - /// Universal Naming Convention (UNC) path to track remote file systems whose drive letter - /// has changed. Setting SLR_NOLINKINFO disables both types of tracking. - SLR_NOLINKINFO = 0x40, - /// Call the Microsoft Windows Installer - SLR_INVOKE_MSI = 0x80 - } // enum SLR_FLAGS - } // class - - [ComImport, Guid("00021401-0000-0000-C000-000000000046")] - public class ShellLinkClass - { - } // class ShellLink - - [ComImport, Guid("0AFACED1-E828-11D1-9187-B532F1E9575D")] - public class FolderShortcutClass - { - } // class FolderShortcut - - public string TargetPath - { - get; - set; - } // TargetPath - - public string WorkingDirectory - { - get; - set; - } // WorkingDirectory - - public string Arguments - { - get; - set; - } // Arguments - - public string Description - { - get; - set; - } // Description - - public string IconLocation - { - get; - set; - } // IconLocation - - public int IconIndex - { - get; - set; - } // IconIndex - - public bool IsFolderShortcut - { - get; - set; - } // IsFolderShortcut - - [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")] - public string CreateShortcut(string shortcutPath) - { - UnsafeNativeMethods.IShellLinkW shortcut; - UnsafeNativeMethods.IPersistFile shortcutFile; - - if (string.IsNullOrEmpty(shortcutPath)) throw new ArgumentNullException(); - if (string.IsNullOrEmpty(TargetPath)) throw new ArgumentNullException(); - - shortcut = null; - shortcutFile = null; - try - { - if (!IsFolderShortcut) - { - shortcut = new ShellLinkClass() as UnsafeNativeMethods.IShellLinkW; - } - else - { - shortcut = new FolderShortcutClass() as UnsafeNativeMethods.IShellLinkW; - } // if-else - - shortcut.SetPath(TargetPath); - if (!string.IsNullOrEmpty(Arguments)) shortcut.SetArguments(Arguments); - if (!string.IsNullOrEmpty(Description)) shortcut.SetDescription(Description); - if (!string.IsNullOrEmpty(WorkingDirectory)) shortcut.SetWorkingDirectory(WorkingDirectory); - if (!string.IsNullOrEmpty(IconLocation)) shortcut.SetIconLocation(IconLocation, IconIndex); - - shortcutFile = shortcut as UnsafeNativeMethods.IPersistFile; - if (!shortcutPath.EndsWith(".lnk")) shortcutPath += ".lnk"; - shortcutPath = System.IO.Path.GetFullPath(shortcutPath); - shortcutFile.Save(shortcutPath, true); - - return shortcutPath; - } - finally - { - if (shortcutFile != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(shortcutFile); - if (shortcut != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(shortcut); - } // try-finally - } // Create - } // ShellLink -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Text; + +namespace IpTviewr.Native +{ + public class ShellLink + { + public class UnsafeNativeMethods + { + public static readonly Guid CLSID_FolderShortcut = new Guid(0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); + public static readonly Guid CLSID_ShellLink = new Guid("00021401-0000-0000-C000-000000000046"); + + [ComImport, Guid("0000010c-0000-0000-c000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IPersist + { + Guid GetClassID(); + } // interface IPersist + + [ComImport, Guid("0000010b-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IPersistFile + { + Guid GetClassID(); + + [PreserveSig] + int IsDirty(); + + void Load([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName, uint dwMode); + + void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [In, MarshalAs(UnmanagedType.Bool)] bool fRemember); + + void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName); + + void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName); + } // interface IPersistFile + + /// The IShellLink interface allows Shell links to be created, modified, and resolved + [ComImport(), Guid("000214F9-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), CoClass(typeof(ShellLinkClass))] + public interface IShellLinkW + { + /// Retrieves the path and file name of a Shell link object + void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out UnsafeNativeMethods.WIN32_FIND_DATAW pfd, UnsafeNativeMethods.SLGP_FLAGS fFlags); + /// Retrieves the list of item identifiers for a Shell link object + void GetIDList(out IntPtr ppidl); + /// Sets the pointer to an item identifier list (PIDL) for a Shell link object. + void SetIDList(IntPtr pidl); + /// Retrieves the description string for a Shell link object + void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName); + /// Sets the description for a Shell link object. The description can be any application-defined string + void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); + /// Retrieves the name of the working directory for a Shell link object + void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); + /// Sets the name of the working directory for a Shell link object + void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); + /// Retrieves the command-line arguments associated with a Shell link object + void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); + /// Sets the command-line arguments for a Shell link object + void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); + /// Retrieves the hot key for a Shell link object + void GetHotkey(out short pwHotkey); + /// Sets a hot key for a Shell link object + void SetHotkey(short wHotkey); + /// Retrieves the show command for a Shell link object + void GetShowCmd(out int piShowCmd); + /// Sets the show command for a Shell link object. The show command sets the initial show state of the window. + void SetShowCmd(int iShowCmd); + /// Retrieves the location (path and index) of the icon for a Shell link object + void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); + /// Sets the location (path and index) of the icon for a Shell link object + void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); + /// Sets the relative path to the Shell link object + void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); + /// Attempts to find the target of a Shell link, even if it has been moved or renamed + void Resolve(IntPtr hwnd, UnsafeNativeMethods.SLR_FLAGS fFlags); + /// Sets the path and file name of a Shell link object + void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); + } // interface IShellLink + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct WIN32_FIND_DATAW + { + public uint dwFileAttributes; + public Int64 ftCreationTime; + public Int64 ftLastAccessTime; + public Int64 ftLastWriteTime; + public uint nFileSizeHigh; + public uint nFileSizeLow; + public uint dwReserved0; + public uint dwReserved1; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string cFileName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] + public string cAlternateFileName; + } // enum WIN32_FIND_DATAW + + /// IShellLink.GetPath fFlags: Flags that specify the type of path information to retrieve + [Flags()] + public enum SLGP_FLAGS + { + /// Retrieves the standard short (8.3 format) file name + SLGP_SHORTPATH = 0x1, + /// Retrieves the Universal Naming Convention (UNC) path name of the file + SLGP_UNCPRIORITY = 0x2, + /// Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded + SLGP_RAWPATH = 0x4 + } // enum SLGP_FLAGS + + /// IShellLink.Resolve fFlags + [Flags()] + public enum SLR_FLAGS + { + /// + /// Do not display a dialog box if the link cannot be resolved. When SLR_NO_UI is set, + /// the high-order word of fFlags can be set to a time-out value that specifies the + /// maximum amount of time to be spent resolving the link. The function returns if the + /// link cannot be resolved within the time-out duration. If the high-order word is set + /// to zero, the time-out duration will be set to the default value of 3,000 milliseconds + /// (3 seconds). To specify a value, set the high word of fFlags to the desired time-out + /// duration, in milliseconds. + /// + SLR_NO_UI = 0x1, + /// Obsolete and no longer used + SLR_ANY_MATCH = 0x2, + /// If the link object has changed, update its path and list of identifiers. + /// If SLR_UPDATE is set, you do not need to call IPersistFile::IsDirty to determine + /// whether or not the link object has changed. + SLR_UPDATE = 0x4, + /// Do not update the link information + SLR_NOUPDATE = 0x8, + /// Do not execute the search heuristics + SLR_NOSEARCH = 0x10, + /// Do not use distributed link tracking + SLR_NOTRACK = 0x20, + /// Disable distributed link tracking. By default, distributed link tracking tracks + /// removable media across multiple devices based on the volume name. It also uses the + /// Universal Naming Convention (UNC) path to track remote file systems whose drive letter + /// has changed. Setting SLR_NOLINKINFO disables both types of tracking. + SLR_NOLINKINFO = 0x40, + /// Call the Microsoft Windows Installer + SLR_INVOKE_MSI = 0x80 + } // enum SLR_FLAGS + } // class + + [ComImport, Guid("00021401-0000-0000-C000-000000000046")] + public class ShellLinkClass + { + } // class ShellLink + + [ComImport, Guid("0AFACED1-E828-11D1-9187-B532F1E9575D")] + public class FolderShortcutClass + { + } // class FolderShortcut + + public string TargetPath + { + get; + set; + } // TargetPath + + public string WorkingDirectory + { + get; + set; + } // WorkingDirectory + + public string Arguments + { + get; + set; + } // Arguments + + public string Description + { + get; + set; + } // Description + + public string IconLocation + { + get; + set; + } // IconLocation + + public int IconIndex + { + get; + set; + } // IconIndex + + public bool IsFolderShortcut + { + get; + set; + } // IsFolderShortcut + + [PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")] + public string CreateShortcut(string shortcutPath) + { + UnsafeNativeMethods.IShellLinkW shortcut; + UnsafeNativeMethods.IPersistFile shortcutFile; + + if (string.IsNullOrEmpty(shortcutPath)) throw new ArgumentNullException(); + if (string.IsNullOrEmpty(TargetPath)) throw new ArgumentNullException(); + + shortcut = null; + shortcutFile = null; + try + { + if (!IsFolderShortcut) + { + shortcut = new ShellLinkClass() as UnsafeNativeMethods.IShellLinkW; + } + else + { + shortcut = new FolderShortcutClass() as UnsafeNativeMethods.IShellLinkW; + } // if-else + + shortcut.SetPath(TargetPath); + if (!string.IsNullOrEmpty(Arguments)) shortcut.SetArguments(Arguments); + if (!string.IsNullOrEmpty(Description)) shortcut.SetDescription(Description); + if (!string.IsNullOrEmpty(WorkingDirectory)) shortcut.SetWorkingDirectory(WorkingDirectory); + if (!string.IsNullOrEmpty(IconLocation)) shortcut.SetIconLocation(IconLocation, IconIndex); + + shortcutFile = shortcut as UnsafeNativeMethods.IPersistFile; + if (!shortcutPath.EndsWith(".lnk")) shortcutPath += ".lnk"; + shortcutPath = System.IO.Path.GetFullPath(shortcutPath); + shortcutFile.Save(shortcutPath, true); + + return shortcutPath; + } + finally + { + if (shortcutFile != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(shortcutFile); + if (shortcut != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(shortcut); + } // try-finally + } // Create + } // ShellLink +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs index 930fd963..7d26fa0e 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.Record.Serialization")] -[assembly: AssemblyDescription("Project.IpTv.Services.Record.Serialization")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("938aa8d5-9245-4e17-8ad0-b610d75aa0f9")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.Record.Serialization")] +[assembly: AssemblyDescription("IpTviewr.Services.Record.Serialization")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("938aa8d5-9245-4e17-8ad0-b610d75aa0f9")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs index 436f52fb..7b96219b 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs @@ -1,312 +1,312 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Services.Record.Serialization.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Services.Record.Serialization.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to >> Channel details << - ///TV Channel: {0} {1} - ///URL: {2} - ///IPTV service: {3}. - /// - internal static string BuildDescriptionChannel { - get { - return ResourceManager.GetString("BuildDescriptionChannel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scheduled recording duration is {0}, with a safety margin of {1} minutes. - ///Total recording time, including safety margins, is {2}.. - /// - internal static string BuildDescriptionDuration { - get { - return ResourceManager.GetString("BuildDescriptionDuration", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording will end the next day at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsNextDay { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsNextDay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording will end the same day at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsSameDay { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsSameDay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends today at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsToday { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsToday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsTomorrow { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsTomorrow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to >> Recording duration <<. - /// - internal static string BuildDescriptionDurationHeader { - get { - return ResourceManager.GetString("BuildDescriptionDurationHeader", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording duration is {0}, with a safety margin of {1} minutes. - ///Total recording time, including safety margins, will be {2}.. - /// - internal static string BuildDescriptionDurationPast { - get { - return ResourceManager.GetString("BuildDescriptionDurationPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to >> Recording schedule <<. - /// - internal static string BuildDescriptionScheduleHeader { - get { - return ResourceManager.GetString("BuildDescriptionScheduleHeader", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0} - ///Task description: {1}. - /// - internal static string BuildDescriptionTaskDescription { - get { - return ResourceManager.GetString("BuildDescriptionTaskDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0}. - /// - internal static string BuildDescriptionTaskName { - get { - return ResourceManager.GetString("BuildDescriptionTaskName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordDaily { - get { - return ResourceManager.GetString("VerbalizeRecordDaily", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Daily recording, everyday at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordDailyEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordDailyEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One time recording at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordOneTime { - get { - return ResourceManager.GetString("VerbalizeRecordOneTime", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordOneTimePast { - get { - return ResourceManager.GetString("VerbalizeRecordOneTimePast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording right now.. - /// - internal static string VerbalizeRecordRightNow { - get { - return ResourceManager.GetString("VerbalizeRecordRightNow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording as soon as possible.. - /// - internal static string VerbalizeRecordRightNowPast { - get { - return ResourceManager.GetString("VerbalizeRecordRightNowPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeekly { - get { - return ResourceManager.GetString("VerbalizeRecordWeekly", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to every . - /// - internal static string VerbalizeRecordWeeklyDays { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDays", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to every . - /// - internal static string VerbalizeRecordWeeklyDaysPast { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to , . - /// - internal static string VerbalizeRecordWeeklyDaysSeparator { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparator", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to and . - /// - internal static string VerbalizeRecordWeeklyDaysSeparatorFinal { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparatorFinal", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryWeeks { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryWeeksEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeksEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting on {0:D} with no expiry date.. - /// - internal static string VerbalizeStartDate { - get { - return ResourceManager.GetString("VerbalizeStartDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting on {0:D} and ending on {1:D}.. - /// - internal static string VerbalizeStartExpiryDate { - get { - return ResourceManager.GetString("VerbalizeStartExpiryDate", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Services.Record.Serialization.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Serialization.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to >> Channel details << + ///TV Channel: {0} {1} + ///URL: {2} + ///IPTV service: {3}. + /// + internal static string BuildDescriptionChannel { + get { + return ResourceManager.GetString("BuildDescriptionChannel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled recording duration is {0}, with a safety margin of {1} minutes. + ///Total recording time, including safety margins, is {2}.. + /// + internal static string BuildDescriptionDuration { + get { + return ResourceManager.GetString("BuildDescriptionDuration", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording will end the next day at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsNextDay { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsNextDay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording will end the same day at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsSameDay { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsSameDay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends today at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsToday { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsToday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsTomorrow { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsTomorrow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >> Recording duration <<. + /// + internal static string BuildDescriptionDurationHeader { + get { + return ResourceManager.GetString("BuildDescriptionDurationHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording duration is {0}, with a safety margin of {1} minutes. + ///Total recording time, including safety margins, will be {2}.. + /// + internal static string BuildDescriptionDurationPast { + get { + return ResourceManager.GetString("BuildDescriptionDurationPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >> Recording schedule <<. + /// + internal static string BuildDescriptionScheduleHeader { + get { + return ResourceManager.GetString("BuildDescriptionScheduleHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0} + ///Task description: {1}. + /// + internal static string BuildDescriptionTaskDescription { + get { + return ResourceManager.GetString("BuildDescriptionTaskDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0}. + /// + internal static string BuildDescriptionTaskName { + get { + return ResourceManager.GetString("BuildDescriptionTaskName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordDaily { + get { + return ResourceManager.GetString("VerbalizeRecordDaily", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Daily recording, everyday at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordDailyEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordDailyEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to One time recording at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordOneTime { + get { + return ResourceManager.GetString("VerbalizeRecordOneTime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordOneTimePast { + get { + return ResourceManager.GetString("VerbalizeRecordOneTimePast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording right now.. + /// + internal static string VerbalizeRecordRightNow { + get { + return ResourceManager.GetString("VerbalizeRecordRightNow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording as soon as possible.. + /// + internal static string VerbalizeRecordRightNowPast { + get { + return ResourceManager.GetString("VerbalizeRecordRightNowPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeekly { + get { + return ResourceManager.GetString("VerbalizeRecordWeekly", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to every . + /// + internal static string VerbalizeRecordWeeklyDays { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDays", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to every . + /// + internal static string VerbalizeRecordWeeklyDaysPast { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to , . + /// + internal static string VerbalizeRecordWeeklyDaysSeparator { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparator", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to and . + /// + internal static string VerbalizeRecordWeeklyDaysSeparatorFinal { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparatorFinal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryWeeks { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryWeeksEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeksEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting on {0:D} with no expiry date.. + /// + internal static string VerbalizeStartDate { + get { + return ResourceManager.GetString("VerbalizeStartDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting on {0:D} and ending on {1:D}.. + /// + internal static string VerbalizeStartExpiryDate { + get { + return ResourceManager.GetString("VerbalizeStartExpiryDate", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs index d5d684a1..84019815 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs @@ -1,57 +1,57 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordAction - { - public string Filename - { - get; - set; - } // Filename - - public string FileExtension - { - get; - set; - } // FileExtension - - public string SaveLocationName - { - get; - set; - } // SaveLocationName - - public string SaveLocationPath - { - get; - set; - } // SaveLocationPath - - public RecordRecorder Recorder - { - get; - set; - } // Recorder - - public static RecordAction CreateWithDefaultValues() - { - RecordAction retry; - - retry = new RecordAction() - { - }; - - return retry; - } // CreateWithDefaultValues - } // class RecordAction -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordAction + { + public string Filename + { + get; + set; + } // Filename + + public string FileExtension + { + get; + set; + } // FileExtension + + public string SaveLocationName + { + get; + set; + } // SaveLocationName + + public string SaveLocationPath + { + get; + set; + } // SaveLocationPath + + public RecordRecorder Recorder + { + get; + set; + } // Recorder + + public static RecordAction CreateWithDefaultValues() + { + RecordAction retry; + + retry = new RecordAction() + { + }; + + return retry; + } // CreateWithDefaultValues + } // class RecordAction +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs index 31c3024d..2374b176 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs @@ -1,160 +1,160 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordAdvancedSettings - { - [Serializable] - public class Retry - { - [XmlAttribute("enabled")] - public bool Enabled - { - get; - set; - } // Enabled - - [XmlIgnore] - public TimeSpan RestartInterval - { - get; - set; - } // Time - - [XmlAttribute("restartInterval")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlRestartInterval - { - get { return SoapDuration.ToString(RestartInterval); } - set { RestartInterval = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlRestartInterval - - [XmlAttribute("retries")] - public int MaxRetries - { - get; - set; - } // MaxRetries - - public static Retry CreateWithDefaultValues() - { - Retry retry; - - retry = new Retry() - { - Enabled = true, - MaxRetries = 5, - RestartInterval = new TimeSpan(0, 1, 0), - }; - - return retry; - } // Retry - } // class Retry - - [Serializable] - [XmlType(AnonymousType=true)] - public class TimeLimit - { - [XmlAttribute("enabled")] - public bool Enabled - { - get; - set; - } // IsActive - - [XmlIgnore] - public TimeSpan Time - { - get; - set; - } // Time - - [XmlAttribute("time")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlTimeSpan - { - get { return SoapDuration.ToString(Time); } - set { Time = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlTimeSpan - } // TimeLimit - - public string TaskSchedulerFolder - { - get; - set; - } // TaskSchedulerFolder - - public bool AsSoonAsPossible - { - get; - set; - } // AsSoonAsPossible - - public Retry FailureRetry - { - get; - set; - } // FailureRetry - - public TimeLimit DeleteAfter - { - get; - set; - } // DeleteAfter - - public bool WakeComputer - { - get; - set; - } // WakeComputer - - public TimeLimit ExecutionTimeLimit - { - get; - set; - } // ExecutionTimeLimit - - public RecordMultipleInstances MultipleInstances - { - get; - set; - } // MultipleInstances - - public static RecordAdvancedSettings CreateWithDefaultValues() - { - RecordAdvancedSettings settings; - - settings = new RecordAdvancedSettings() - { - TaskSchedulerFolder = null, - AsSoonAsPossible = true, - FailureRetry = Retry.CreateWithDefaultValues(), - DeleteAfter = new TimeLimit() - { - Enabled = true, - Time = new TimeSpan(5, 0, 0, 0), - }, - WakeComputer = true, - ExecutionTimeLimit = new TimeLimit() - { - Enabled = true, - Time = new TimeSpan(0, 30, 0), - }, - MultipleInstances = RecordMultipleInstances.RecordBoth, - }; - - return settings; - } // CreateWithDefaultValues - } // class RecordAdvancedSettings -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordAdvancedSettings + { + [Serializable] + public class Retry + { + [XmlAttribute("enabled")] + public bool Enabled + { + get; + set; + } // Enabled + + [XmlIgnore] + public TimeSpan RestartInterval + { + get; + set; + } // Time + + [XmlAttribute("restartInterval")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlRestartInterval + { + get { return SoapDuration.ToString(RestartInterval); } + set { RestartInterval = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + } // XmlRestartInterval + + [XmlAttribute("retries")] + public int MaxRetries + { + get; + set; + } // MaxRetries + + public static Retry CreateWithDefaultValues() + { + Retry retry; + + retry = new Retry() + { + Enabled = true, + MaxRetries = 5, + RestartInterval = new TimeSpan(0, 1, 0), + }; + + return retry; + } // Retry + } // class Retry + + [Serializable] + [XmlType(AnonymousType=true)] + public class TimeLimit + { + [XmlAttribute("enabled")] + public bool Enabled + { + get; + set; + } // IsActive + + [XmlIgnore] + public TimeSpan Time + { + get; + set; + } // Time + + [XmlAttribute("time")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlTimeSpan + { + get { return SoapDuration.ToString(Time); } + set { Time = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + } // XmlTimeSpan + } // TimeLimit + + public string TaskSchedulerFolder + { + get; + set; + } // TaskSchedulerFolder + + public bool AsSoonAsPossible + { + get; + set; + } // AsSoonAsPossible + + public Retry FailureRetry + { + get; + set; + } // FailureRetry + + public TimeLimit DeleteAfter + { + get; + set; + } // DeleteAfter + + public bool WakeComputer + { + get; + set; + } // WakeComputer + + public TimeLimit ExecutionTimeLimit + { + get; + set; + } // ExecutionTimeLimit + + public RecordMultipleInstances MultipleInstances + { + get; + set; + } // MultipleInstances + + public static RecordAdvancedSettings CreateWithDefaultValues() + { + RecordAdvancedSettings settings; + + settings = new RecordAdvancedSettings() + { + TaskSchedulerFolder = null, + AsSoonAsPossible = true, + FailureRetry = Retry.CreateWithDefaultValues(), + DeleteAfter = new TimeLimit() + { + Enabled = true, + Time = new TimeSpan(5, 0, 0, 0), + }, + WakeComputer = true, + ExecutionTimeLimit = new TimeLimit() + { + Enabled = true, + Time = new TimeSpan(0, 30, 0), + }, + MultipleInstances = RecordMultipleInstances.RecordBoth, + }; + + return settings; + } // CreateWithDefaultValues + } // class RecordAdvancedSettings +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs index e40c8a55..db727b87 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs @@ -1,52 +1,52 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordChannel - { - public string LogicalNumber - { - get; - set; - } // LogicalNumber - - public string Name - { - get; - set; - } // Name - - public string Description - { - get; - set; - } // Description - - public string ServiceName - { - get; - set; - } // ServiceName - - public string ServiceKey - { - get; - set; - } // ServiceKey - - public string ChannelUrl - { - get; - set; - } // ChannelUrl - } // class RecordChannel -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordChannel + { + public string LogicalNumber + { + get; + set; + } // LogicalNumber + + public string Name + { + get; + set; + } // Name + + public string Description + { + get; + set; + } // Description + + public string ServiceName + { + get; + set; + } // ServiceName + + public string ServiceKey + { + get; + set; + } // ServiceKey + + public string ChannelUrl + { + get; + set; + } // ChannelUrl + } // class RecordChannel +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs index 543030ee..89e42ea8 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs @@ -1,54 +1,54 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordDaily : RecordScheduleTime - { - public RecordDaily() - { - RecurEveryDays = 1; - } // constructor - - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.Daily; } - } // ScheduleKind - - public short RecurEveryDays - { - get; - set; - } // RecurEveryDays - - public override void SetDefaultValues() - { - base.SetDefaultValues(); - RecurEveryDays = 1; - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - string format; - - if (RecurEveryDays > 1) - { - format = Properties.Texts.VerbalizeRecordDaily; - } - else - { - format = Properties.Texts.VerbalizeRecordDailyEveryday; - } // if-else - builder.AppendFormat(format, RecurEveryDays, StartDate, SafetyMarginTimeSpan.TotalMinutes); - VerbalizeStartExpiryDate(pastTime, builder); - } // Verbalize - } // class RecordDaily -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordDaily : RecordScheduleTime + { + public RecordDaily() + { + RecurEveryDays = 1; + } // constructor + + public override RecordScheduleKind Kind + { + get { return RecordScheduleKind.Daily; } + } // ScheduleKind + + public short RecurEveryDays + { + get; + set; + } // RecurEveryDays + + public override void SetDefaultValues() + { + base.SetDefaultValues(); + RecurEveryDays = 1; + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + string format; + + if (RecurEveryDays > 1) + { + format = Properties.Texts.VerbalizeRecordDaily; + } + else + { + format = Properties.Texts.VerbalizeRecordDailyEveryday; + } // if-else + builder.AppendFormat(format, RecurEveryDays, StartDate, SafetyMarginTimeSpan.TotalMinutes); + VerbalizeStartExpiryDate(pastTime, builder); + } // Verbalize + } // class RecordDaily +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs index e7a249b2..da4446c9 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs @@ -1,63 +1,63 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordDescription - { - public string Name - { - get; - set; - } // Name - - public string TaskSchedulerName - { - get; - set; - } // TaskSchedulerName - - public string Description - { - get; - set; - } // Description - - public string Details - { - get; - set; - } // Details - - public bool AddPrefix - { - get; - set; - } // AddPrefix - - public bool AddDetails - { - get; - set; - } // AddDetails - - public static RecordDescription CreateWithDefaultValues() - { - return new RecordDescription() - { - Name = "", - Description = "", - AddPrefix = false, - AddDetails = true, - }; - } // CreateWithDefaultValues - } // class RecordDescription -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordDescription + { + public string Name + { + get; + set; + } // Name + + public string TaskSchedulerName + { + get; + set; + } // TaskSchedulerName + + public string Description + { + get; + set; + } // Description + + public string Details + { + get; + set; + } // Details + + public bool AddPrefix + { + get; + set; + } // AddPrefix + + public bool AddDetails + { + get; + set; + } // AddDetails + + public static RecordDescription CreateWithDefaultValues() + { + return new RecordDescription() + { + Name = "", + Description = "", + AddPrefix = false, + AddDetails = true, + }; + } // CreateWithDefaultValues + } // class RecordDescription +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs index a7f06400..b6cdb1fd 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs @@ -1,88 +1,88 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordDuration - { - /// - /// Default safety margin, in minutes - /// - public static int DefaultSafetyMargin - { - get { return 5; } - } // DefaultSafetyMargin - - /// - /// The duration of the recording, as a TimeSpan - /// - [XmlIgnore] - public TimeSpan Length - { - get; - set; - } // Length - - [XmlElement("Length")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlLength - { - get { return SoapDuration.ToString(Length); } - set { Length = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlTimeSpan - - /// - /// Safety margin, in minutes, or null if there is no margin - /// - [XmlIgnore] - public int? SafetyMargin - { - get; - set; - } // SafetyMargin - - [XmlElement("SafetyMargin")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlSafetyMargin - { - get { return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; } - set { SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); } - } // XmlSafetyMargin - - /// - /// Gets the safety margin as a TimeSpan - /// - [XmlIgnore] - public TimeSpan SafetyMarginTimeSpan - { - get - { - return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : TimeSpan.Zero; - } // get - } // SafetyMarginTimeSpan - - /// - /// Creates a RecordDuration instance with default values - /// - /// An instance of a RecordDuration with default values - public static RecordDuration CreateWithDefaultValues() - { - return new RecordDuration() - { - SafetyMargin = DefaultSafetyMargin, - Length = new TimeSpan(1, 0, 0), - }; - } // CreateWithDefaultValues - } // RecordDuration -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordDuration + { + /// + /// Default safety margin, in minutes + /// + public static int DefaultSafetyMargin + { + get { return 5; } + } // DefaultSafetyMargin + + /// + /// The duration of the recording, as a TimeSpan + /// + [XmlIgnore] + public TimeSpan Length + { + get; + set; + } // Length + + [XmlElement("Length")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlLength + { + get { return SoapDuration.ToString(Length); } + set { Length = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + } // XmlTimeSpan + + /// + /// Safety margin, in minutes, or null if there is no margin + /// + [XmlIgnore] + public int? SafetyMargin + { + get; + set; + } // SafetyMargin + + [XmlElement("SafetyMargin")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlSafetyMargin + { + get { return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; } + set { SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); } + } // XmlSafetyMargin + + /// + /// Gets the safety margin as a TimeSpan + /// + [XmlIgnore] + public TimeSpan SafetyMarginTimeSpan + { + get + { + return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : TimeSpan.Zero; + } // get + } // SafetyMarginTimeSpan + + /// + /// Creates a RecordDuration instance with default values + /// + /// An instance of a RecordDuration with default values + public static RecordDuration CreateWithDefaultValues() + { + return new RecordDuration() + { + SafetyMargin = DefaultSafetyMargin, + Length = new TimeSpan(1, 0, 0), + }; + } // CreateWithDefaultValues + } // RecordDuration +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs index 1da57898..19cc0cf9 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs @@ -1,38 +1,38 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordMonthly : RecordScheduleTime - { - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.Monthly; } - } // ScheduleKind - - public RecordYearMonths Months - { - get; - set; - } // Months - - public override void SetDefaultValues() - { - base.SetDefaultValues(); - throw new NotImplementedException(); - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - throw new NotImplementedException(); - } // Verbalize - } // class RecordMonthly -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordMonthly : RecordScheduleTime + { + public override RecordScheduleKind Kind + { + get { return RecordScheduleKind.Monthly; } + } // ScheduleKind + + public RecordYearMonths Months + { + get; + set; + } // Months + + public override void SetDefaultValues() + { + base.SetDefaultValues(); + throw new NotImplementedException(); + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + throw new NotImplementedException(); + } // Verbalize + } // class RecordMonthly +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs index 42f43965..2fc6c3cb 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs @@ -1,28 +1,28 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public enum RecordMultipleInstances - { - [XmlEnum("Record-both")] - RecordBoth = 0, - - [XmlEnum("Do-not-record")] - DoNotRecord, - - [XmlEnum("Queue-and-wait")] - Queue, - - [XmlEnum("Stop-previous")] - StopPrevious - } // RecordMultipleInstances -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public enum RecordMultipleInstances + { + [XmlEnum("Record-both")] + RecordBoth = 0, + + [XmlEnum("Do-not-record")] + DoNotRecord, + + [XmlEnum("Queue-and-wait")] + Queue, + + [XmlEnum("Stop-previous")] + StopPrevious + } // RecordMultipleInstances +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs index 409de33a..f03cbff6 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs @@ -1,27 +1,27 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordOneTime : RecordScheduleTime - { - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.OneTime; } - } // King - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordOneTimePast : Properties.Texts.VerbalizeRecordOneTime, - StartDate, StartDate, SafetyMarginTimeSpan.TotalMinutes); - } // Verbalize - } // class RecordOneTime -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordOneTime : RecordScheduleTime + { + public override RecordScheduleKind Kind + { + get { return RecordScheduleKind.OneTime; } + } // King + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordOneTimePast : Properties.Texts.VerbalizeRecordOneTime, + StartDate, StartDate, SafetyMarginTimeSpan.TotalMinutes); + } // Verbalize + } // class RecordOneTime +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs index fde84d93..8033b6e1 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs @@ -1,34 +1,34 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordRecorder - { - [XmlAttribute("name")] - public string Name - { - get; - set; - } // Name - - public string Path - { - get; - set; - } // Path - - [XmlArray("Arguments", Namespace = RecordTask.XmlNamespace)] - [XmlArrayItem("Arg")] - public string[] Arguments - { - get; - set; - } // Parameters - } // RecordRecorder -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordRecorder + { + [XmlAttribute("name")] + public string Name + { + get; + set; + } // Name + + public string Path + { + get; + set; + } // Path + + [XmlArray("Arguments", Namespace = RecordTask.XmlNamespace)] + [XmlArrayItem("Arg")] + public string[] Arguments + { + get; + set; + } // Parameters + } // RecordRecorder +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs index cfc6140a..8156c32d 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs @@ -1,41 +1,41 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordRightNow: RecordSchedule - { - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.RightNow; } - } // ScheduleKind - - public override void SetDefaultValues() - { - // nothing to initialize - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordRightNowPast : Properties.Texts.VerbalizeRecordRightNow); - } // Verbalize - - public override DateTime GetStartDateTime() - { - return DateTime.Now; - } // GetStartDateTime - - public override TimeSpan GetSafetyMargin() - { - return TimeSpan.Zero; - } // GetSafetyMargin - } // class RecordRightNow -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordRightNow: RecordSchedule + { + public override RecordScheduleKind Kind + { + get { return RecordScheduleKind.RightNow; } + } // ScheduleKind + + public override void SetDefaultValues() + { + // nothing to initialize + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordRightNowPast : Properties.Texts.VerbalizeRecordRightNow); + } // Verbalize + + public override DateTime GetStartDateTime() + { + return DateTime.Now; + } // GetStartDateTime + + public override TimeSpan GetSafetyMargin() + { + return TimeSpan.Zero; + } // GetSafetyMargin + } // class RecordRightNow +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs index 57180ce4..741b59ae 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs @@ -1,59 +1,59 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlInclude(typeof(RecordRightNow))] - [XmlInclude(typeof(RecordScheduleTime))] - [XmlInclude(typeof(RecordOneTime))] - [XmlInclude(typeof(RecordDaily))] - [XmlInclude(typeof(RecordWeekly))] - [XmlInclude(typeof(RecordMonthly))] - [XmlType(Namespace=RecordTask.XmlNamespace)] - public abstract class RecordSchedule - { - [XmlIgnore] - public abstract RecordScheduleKind Kind - { - get; - } // Kind - - public static RecordSchedule CreateWithDefaultValues(RecordScheduleKind kind) - { - RecordSchedule schedule; - - switch (kind) - { - case RecordScheduleKind.RightNow: schedule = new RecordRightNow(); break; - case RecordScheduleKind.OneTime: schedule = new RecordOneTime(); break; - case RecordScheduleKind.Daily: schedule = new RecordDaily(); break; - case RecordScheduleKind.Weekly: schedule = new RecordWeekly(); break; - case RecordScheduleKind.Monthly: schedule = new RecordMonthly(); break; - default: - throw new IndexOutOfRangeException(); - } // switch - schedule.SetDefaultValues(); - - return schedule; - } // CreateWithDefaultValues - - public virtual string Verbalize(bool pastTime) - { - var builder = new StringBuilder(); - Verbalize(pastTime, builder); - return builder.ToString(); - } // Verbalize - - public abstract void SetDefaultValues(); - public abstract void Verbalize(bool pastTime, StringBuilder builder); - public abstract DateTime GetStartDateTime(); - public abstract TimeSpan GetSafetyMargin(); - } // abstract class RecordSchedule -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlInclude(typeof(RecordRightNow))] + [XmlInclude(typeof(RecordScheduleTime))] + [XmlInclude(typeof(RecordOneTime))] + [XmlInclude(typeof(RecordDaily))] + [XmlInclude(typeof(RecordWeekly))] + [XmlInclude(typeof(RecordMonthly))] + [XmlType(Namespace=RecordTask.XmlNamespace)] + public abstract class RecordSchedule + { + [XmlIgnore] + public abstract RecordScheduleKind Kind + { + get; + } // Kind + + public static RecordSchedule CreateWithDefaultValues(RecordScheduleKind kind) + { + RecordSchedule schedule; + + switch (kind) + { + case RecordScheduleKind.RightNow: schedule = new RecordRightNow(); break; + case RecordScheduleKind.OneTime: schedule = new RecordOneTime(); break; + case RecordScheduleKind.Daily: schedule = new RecordDaily(); break; + case RecordScheduleKind.Weekly: schedule = new RecordWeekly(); break; + case RecordScheduleKind.Monthly: schedule = new RecordMonthly(); break; + default: + throw new IndexOutOfRangeException(); + } // switch + schedule.SetDefaultValues(); + + return schedule; + } // CreateWithDefaultValues + + public virtual string Verbalize(bool pastTime) + { + var builder = new StringBuilder(); + Verbalize(pastTime, builder); + return builder.ToString(); + } // Verbalize + + public abstract void SetDefaultValues(); + public abstract void Verbalize(bool pastTime, StringBuilder builder); + public abstract DateTime GetStartDateTime(); + public abstract TimeSpan GetSafetyMargin(); + } // abstract class RecordSchedule +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs index 4f8a0c4e..a16eace5 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs @@ -1,20 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.Record.Serialization -{ - public enum RecordScheduleKind - { - OneTime = 0, - Daily = 10, - Weekly = 20, - Monthly = 30, - MontlyDoW = 35, - RightNow = 90, - } // enum RecordScheduleKind -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Services.Record.Serialization +{ + public enum RecordScheduleKind + { + OneTime = 0, + Daily = 10, + Weekly = 20, + Monthly = 30, + MontlyDoW = 35, + RightNow = 90, + } // enum RecordScheduleKind +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs index 02ada6e4..e0ed912f 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs @@ -1,122 +1,122 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public abstract class RecordScheduleTime : RecordSchedule - { - /// - /// Default safety margin, in minutes - /// - public static int DefaultSafetyMargin - { - get { return 5; } - } // DefaultSafetyMargin - - public DateTime StartDate - { - get; - set; - } // StartDate - - [XmlIgnore] - public DateTime? ExpiryDate - { - get; - set; - } // ExpiryDate - - [XmlElement(ElementName="ExpiryDate")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlExpiryDate - { - get - { - return (ExpiryDate == null) ? null : XmlConvert.ToString(ExpiryDate.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - ExpiryDate = null; - } - else - { - ExpiryDate = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - } // if-else - } // set - } // ExpiryDate - - /// - /// Safety margin, in minutes, or null if there is no margin - /// - [XmlIgnore] - public int? SafetyMargin - { - get; - set; - } // SafetyMargin - - [XmlElement("SafetyMargin")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlSafetyMargin - { - get - { - return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; - } // get - set - { - SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); - } // set - } // XmlSafetyMargin - - /// - /// Gets the safety margin as a TimeSpan - /// - [XmlIgnore] - public TimeSpan SafetyMarginTimeSpan - { - get - { - return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : new TimeSpan(); - } // get - } // SafetyMarginTimeSpan - - public override void SetDefaultValues() - { - var now = DateTime.Now; - StartDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) + new TimeSpan(0, 1, 0); - SafetyMargin = DefaultSafetyMargin; - } // SetDefaultValues - - protected void VerbalizeStartExpiryDate(bool pastTime, StringBuilder builder) - { - if (!pastTime) return; - - builder.AppendLine(); - var format = (ExpiryDate.HasValue) ? Properties.Texts.VerbalizeStartExpiryDate : Properties.Texts.VerbalizeStartDate; - builder.AppendFormat(format, StartDate, ExpiryDate); - } // VerbalizeStartExpiryDate - - public override DateTime GetStartDateTime() - { - return StartDate; - } // GetStartDateTime - - public override TimeSpan GetSafetyMargin() - { - return SafetyMarginTimeSpan; - } // GetSafetyMargin - } // abstract class RecordScheduleTime -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public abstract class RecordScheduleTime : RecordSchedule + { + /// + /// Default safety margin, in minutes + /// + public static int DefaultSafetyMargin + { + get { return 5; } + } // DefaultSafetyMargin + + public DateTime StartDate + { + get; + set; + } // StartDate + + [XmlIgnore] + public DateTime? ExpiryDate + { + get; + set; + } // ExpiryDate + + [XmlElement(ElementName="ExpiryDate")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlExpiryDate + { + get + { + return (ExpiryDate == null) ? null : XmlConvert.ToString(ExpiryDate.Value, XmlDateTimeSerializationMode.RoundtripKind); + } // get + set + { + if (string.IsNullOrEmpty(value)) + { + ExpiryDate = null; + } + else + { + ExpiryDate = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + } // if-else + } // set + } // ExpiryDate + + /// + /// Safety margin, in minutes, or null if there is no margin + /// + [XmlIgnore] + public int? SafetyMargin + { + get; + set; + } // SafetyMargin + + [XmlElement("SafetyMargin")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlSafetyMargin + { + get + { + return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; + } // get + set + { + SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); + } // set + } // XmlSafetyMargin + + /// + /// Gets the safety margin as a TimeSpan + /// + [XmlIgnore] + public TimeSpan SafetyMarginTimeSpan + { + get + { + return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : new TimeSpan(); + } // get + } // SafetyMarginTimeSpan + + public override void SetDefaultValues() + { + var now = DateTime.Now; + StartDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) + new TimeSpan(0, 1, 0); + SafetyMargin = DefaultSafetyMargin; + } // SetDefaultValues + + protected void VerbalizeStartExpiryDate(bool pastTime, StringBuilder builder) + { + if (!pastTime) return; + + builder.AppendLine(); + var format = (ExpiryDate.HasValue) ? Properties.Texts.VerbalizeStartExpiryDate : Properties.Texts.VerbalizeStartDate; + builder.AppendFormat(format, StartDate, ExpiryDate); + } // VerbalizeStartExpiryDate + + public override DateTime GetStartDateTime() + { + return StartDate; + } // GetStartDateTime + + public override TimeSpan GetSafetyMargin() + { + return SafetyMarginTimeSpan; + } // GetSafetyMargin + } // abstract class RecordScheduleTime +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs index 0e485b2f..faabeed1 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs @@ -1,175 +1,175 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlRoot(ElementName = "RecordTask", Namespace = RecordTask.XmlNamespace)] - public class RecordTask - { - public const string XmlNamespace = "urn:Project-DvbIpTV:2014:RecordTask"; - - public RecordTask() - { - TaskId = Guid.NewGuid(); - } // constructor - - [XmlAttribute("id")] - public Guid TaskId - { - get; - set; - } // TaskId - - public RecordChannel Channel - { - get; - set; - } // Channel - - [XmlElement("RightNow", typeof(RecordRightNow))] - [XmlElement("OneTimeSchedule", typeof(RecordOneTime))] - [XmlElement("DailySchedule", typeof(RecordDaily))] - [XmlElement("WeeklySchedule", typeof(RecordWeekly))] - [XmlElement("MonthlySchedule", typeof(RecordMonthly))] - public RecordSchedule Schedule - { - get; - set; - } // Schedule - - public RecordDuration Duration - { - get; - set; - } // Duration - - public RecordDescription Description - { - get; - set; - } // Description - - public RecordAction Action - { - get; - set; - } // Action - - public RecordAdvancedSettings AdvancedSettings - { - get; - set; - } // AdvancedSettings - - public static RecordTask CreateWithDefaultValues(RecordChannel channel) - { - RecordTask task; - - task = new RecordTask() - { - Channel = (channel != null) ? channel : new RecordChannel(), - Schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime), - Duration = RecordDuration.CreateWithDefaultValues(), - Description = RecordDescription.CreateWithDefaultValues(), - Action = RecordAction.CreateWithDefaultValues(), - AdvancedSettings = RecordAdvancedSettings.CreateWithDefaultValues(), - }; - - return task; - } // CreateWithDefaultValues - - public string BuildDescription(bool pastTime) - { - return BuildDescription(pastTime, true, false, true, true, true); - } // BuildDescription - - public string BuildDescription(bool pastTime, bool withBasicDescription, bool withFullDescription, bool withChannel, bool withSchedule, bool withDuration) - { - var buffer = new StringBuilder(); - BuildDescription(pastTime, withBasicDescription, withFullDescription, withChannel, withSchedule, withDuration, null, buffer); - - return buffer.ToString(); - } // BuildDescription - - public void BuildDescription(bool pastTime, StringBuilder buffer) - { - BuildDescription(pastTime, true, false, true, true, true, null, buffer); - } // BuildDescription - - public void BuildDescription(bool pastTime, bool withBasicDescription, bool withFullDescription, bool withChannel, bool withSchedule, bool withDuration, TimeSpan? overrideTotalRecordTime, StringBuilder buffer) - { - if ((withBasicDescription) || (withFullDescription)) - { - var taskFormat = withFullDescription ? Properties.Texts.BuildDescriptionTaskDescription : Properties.Texts.BuildDescriptionTaskName; - buffer.AppendFormat(taskFormat, Description.Name, Description.Description); - buffer.AppendLine(); - } // if - - if (withChannel) - { - buffer.AppendFormat(Properties.Texts.BuildDescriptionChannel, - Channel.LogicalNumber, Channel.Name, - Channel.ChannelUrl, - Channel.ServiceName); - buffer.AppendLine(); - } // if withChannel - - if (withSchedule) - { - buffer.AppendLine(Properties.Texts.BuildDescriptionScheduleHeader); - Schedule.Verbalize(pastTime, buffer); - buffer.AppendLine(); - } // if withSchedule - - if (withDuration) - { - buffer.AppendLine(Properties.Texts.BuildDescriptionDurationHeader); - var scheduleTime = Schedule as RecordScheduleTime; - var startSafetyMargin = (scheduleTime != null) ? scheduleTime.SafetyMarginTimeSpan : TimeSpan.Zero; - var endSafetyMargin = Duration.SafetyMarginTimeSpan; - var recordDuration = Duration.Length; - var totalRecordTime = startSafetyMargin + recordDuration + endSafetyMargin; - if (overrideTotalRecordTime.HasValue) totalRecordTime = overrideTotalRecordTime.Value; - - var formatDuration = pastTime ? Properties.Texts.BuildDescriptionDurationPast : Properties.Texts.BuildDescriptionDuration; - buffer.AppendFormat(formatDuration, - recordDuration, (int)endSafetyMargin.TotalMinutes, - totalRecordTime); - buffer.AppendLine(); - - if (scheduleTime != null) - { - string format; - var schedule = (RecordScheduleTime)Schedule; - var startDate = schedule.StartDate - schedule.SafetyMarginTimeSpan; - var endDate = startDate + totalRecordTime; - if (startDate.Day == endDate.Day) - { - format = pastTime ? Properties.Texts.BuildDescriptionDurationEndsSameDay : Properties.Texts.BuildDescriptionDurationEndsToday; - } - else - { - format = pastTime ? Properties.Texts.BuildDescriptionDurationEndsNextDay : Properties.Texts.BuildDescriptionDurationEndsTomorrow; - } // if-else - buffer.AppendFormat(format, endDate); - buffer.AppendLine(); - } // if - } // if withDuration - - // remove last CRLF - if (buffer.Length > 2) - { - buffer.Remove(buffer.Length - 2, 2); - } // if - } // BuildDescription - } // class RecordTask -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlRoot(ElementName = "RecordTask", Namespace = RecordTask.XmlNamespace)] + public class RecordTask + { + public const string XmlNamespace = "urn:Project-DvbIpTV:2014:RecordTask"; + + public RecordTask() + { + TaskId = Guid.NewGuid(); + } // constructor + + [XmlAttribute("id")] + public Guid TaskId + { + get; + set; + } // TaskId + + public RecordChannel Channel + { + get; + set; + } // Channel + + [XmlElement("RightNow", typeof(RecordRightNow))] + [XmlElement("OneTimeSchedule", typeof(RecordOneTime))] + [XmlElement("DailySchedule", typeof(RecordDaily))] + [XmlElement("WeeklySchedule", typeof(RecordWeekly))] + [XmlElement("MonthlySchedule", typeof(RecordMonthly))] + public RecordSchedule Schedule + { + get; + set; + } // Schedule + + public RecordDuration Duration + { + get; + set; + } // Duration + + public RecordDescription Description + { + get; + set; + } // Description + + public RecordAction Action + { + get; + set; + } // Action + + public RecordAdvancedSettings AdvancedSettings + { + get; + set; + } // AdvancedSettings + + public static RecordTask CreateWithDefaultValues(RecordChannel channel) + { + RecordTask task; + + task = new RecordTask() + { + Channel = (channel != null) ? channel : new RecordChannel(), + Schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime), + Duration = RecordDuration.CreateWithDefaultValues(), + Description = RecordDescription.CreateWithDefaultValues(), + Action = RecordAction.CreateWithDefaultValues(), + AdvancedSettings = RecordAdvancedSettings.CreateWithDefaultValues(), + }; + + return task; + } // CreateWithDefaultValues + + public string BuildDescription(bool pastTime) + { + return BuildDescription(pastTime, true, false, true, true, true); + } // BuildDescription + + public string BuildDescription(bool pastTime, bool withBasicDescription, bool withFullDescription, bool withChannel, bool withSchedule, bool withDuration) + { + var buffer = new StringBuilder(); + BuildDescription(pastTime, withBasicDescription, withFullDescription, withChannel, withSchedule, withDuration, null, buffer); + + return buffer.ToString(); + } // BuildDescription + + public void BuildDescription(bool pastTime, StringBuilder buffer) + { + BuildDescription(pastTime, true, false, true, true, true, null, buffer); + } // BuildDescription + + public void BuildDescription(bool pastTime, bool withBasicDescription, bool withFullDescription, bool withChannel, bool withSchedule, bool withDuration, TimeSpan? overrideTotalRecordTime, StringBuilder buffer) + { + if ((withBasicDescription) || (withFullDescription)) + { + var taskFormat = withFullDescription ? Properties.Texts.BuildDescriptionTaskDescription : Properties.Texts.BuildDescriptionTaskName; + buffer.AppendFormat(taskFormat, Description.Name, Description.Description); + buffer.AppendLine(); + } // if + + if (withChannel) + { + buffer.AppendFormat(Properties.Texts.BuildDescriptionChannel, + Channel.LogicalNumber, Channel.Name, + Channel.ChannelUrl, + Channel.ServiceName); + buffer.AppendLine(); + } // if withChannel + + if (withSchedule) + { + buffer.AppendLine(Properties.Texts.BuildDescriptionScheduleHeader); + Schedule.Verbalize(pastTime, buffer); + buffer.AppendLine(); + } // if withSchedule + + if (withDuration) + { + buffer.AppendLine(Properties.Texts.BuildDescriptionDurationHeader); + var scheduleTime = Schedule as RecordScheduleTime; + var startSafetyMargin = (scheduleTime != null) ? scheduleTime.SafetyMarginTimeSpan : TimeSpan.Zero; + var endSafetyMargin = Duration.SafetyMarginTimeSpan; + var recordDuration = Duration.Length; + var totalRecordTime = startSafetyMargin + recordDuration + endSafetyMargin; + if (overrideTotalRecordTime.HasValue) totalRecordTime = overrideTotalRecordTime.Value; + + var formatDuration = pastTime ? Properties.Texts.BuildDescriptionDurationPast : Properties.Texts.BuildDescriptionDuration; + buffer.AppendFormat(formatDuration, + recordDuration, (int)endSafetyMargin.TotalMinutes, + totalRecordTime); + buffer.AppendLine(); + + if (scheduleTime != null) + { + string format; + var schedule = (RecordScheduleTime)Schedule; + var startDate = schedule.StartDate - schedule.SafetyMarginTimeSpan; + var endDate = startDate + totalRecordTime; + if (startDate.Day == endDate.Day) + { + format = pastTime ? Properties.Texts.BuildDescriptionDurationEndsSameDay : Properties.Texts.BuildDescriptionDurationEndsToday; + } + else + { + format = pastTime ? Properties.Texts.BuildDescriptionDurationEndsNextDay : Properties.Texts.BuildDescriptionDurationEndsTomorrow; + } // if-else + buffer.AppendFormat(format, endDate); + buffer.AppendLine(); + } // if + } // if withDuration + + // remove last CRLF + if (buffer.Length > 2) + { + buffer.Remove(buffer.Length - 2, 2); + } // if + } // BuildDescription + } // class RecordTask +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs index b62b53aa..df0b5b15 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs @@ -1,158 +1,158 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using Project.IpTv.Services.SqlServerCE; -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlServerCe; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - public static class RecordTaskSerialization - { - public const int MaxTaskNameLength = 128; - - #region Load methods - - public static RecordTask LoadFromDatabase(string dbFile, Guid taskId) - { - return DbServices.Load(dbFile, GetDbLoadCommand(taskId), "XmlData"); - } // Load - - public static RecordTask LoadFromDatabase(SqlCeConnection cn, Guid taskId) - { - return DbServices.Load(cn, GetDbLoadCommand(taskId), "XmlData"); - } // Load - - public static RecordTask LoadFromXmlFile(string filename) - { - return XmlSerialization.Deserialize(filename); - } // LoadFromXmlFile - - public static RecordTask LoadFromXmlString(string xmlText) - { - return XmlSerialization.DeserializeXmlText(xmlText); - } // LoadFromXmlFile - - #endregion - - #region Save methods - - public static void SaveToDatabase(this RecordTask task, string dbFile) - { - var saveCmd = GetDbSaveCommand(task); - DbServices.Save(dbFile, saveCmd, "@XmlData", task); - } // Save - - public static void SaveTo(this RecordTask task, SqlCeConnection cn) - { - var saveCmd = GetDbSaveCommand(task); - DbServices.Save(cn, saveCmd, "@XmlData", task); - } // SaveTo - - public static void SaveToXmlFile(this RecordTask task, string filename) - { - XmlSerialization.Serialize(filename, task); - } // SaveToXmlFile - - public static void SaveTo(this RecordTask task, Stream stream) - { - XmlSerialization.Serialize(stream, task); - } // SaveTo - - public static string SaveAsString(this RecordTask task) - { - var buffer = new StringBuilder(); - task.SaveTo(buffer); - return buffer.ToString(); - } // SaveAsString - - public static void SaveTo(this RecordTask task, StringBuilder buffer) - { - using (var writer = XmlWriter.Create(buffer, new XmlWriterSettings() { Indent = true })) - { - task.SaveTo(writer); - } // using - } // SaveTo - - public static void SaveTo(this RecordTask task, XmlWriter writer) - { - XmlSerialization.Serialize(writer, task); - } // SaveTo - - #endregion - - #region Delete methods - - public static void DeleteFromDatabase(Guid taskId, string dbFile) - { - // TODO: Implement - throw new NotImplementedException(); - } // DeleteFromDatabase - - public static bool TryDeleteFromDatabase(Guid taskId, string dbFile) - { - try - { - DeleteFromDatabase(taskId, dbFile); - return true; - } - catch - { - return false; - } // try-catch - } // DeleteFromDatabase - - #endregion - - private static SqlCeCommand GetDbLoadCommand() - { - var cmd = new SqlCeCommand(); - cmd.CommandType = CommandType.Text; - cmd.CommandText = "SELECT [XmlData] FROM [Tasks] WHERE [TaskId] = ?"; - cmd.Parameters.Add("@TaskId", SqlDbType.UniqueIdentifier); - - return cmd; - } // GetDbLoadCommand - - private static SqlCeCommand GetDbLoadCommand(Guid taskId) - { - var cmd = GetDbLoadCommand(); - cmd.Parameters["@TaskId"].Value = taskId; - - return cmd; - } // GetDbLoadCommand - - private static SqlCeCommand GetDbSaveCommand() - { - var cmd = new SqlCeCommand(); - cmd.CommandType = CommandType.Text; - cmd.CommandText = "INSERT INTO [Tasks] (TaskId, TaskName, SchedulerName, SchedulerFolder, XmlData) VALUES (?, ?, ?, ?, ?)"; - cmd.Parameters.Add("@TaskId", SqlDbType.UniqueIdentifier); - cmd.Parameters.Add("@TaskName", SqlDbType.NVarChar, MaxTaskNameLength); - cmd.Parameters.Add("@SchedulerName", SqlDbType.NVarChar, 150); - cmd.Parameters.Add("@SchedulerFolder", SqlDbType.NVarChar, 128); - cmd.Parameters.Add("@XmlData", SqlDbType.Image); - - return cmd; - } // GetDbSaveCommand - - private static SqlCeCommand GetDbSaveCommand(RecordTask task) - { - var cmd = GetDbSaveCommand(); - cmd.Parameters["@TaskId"].Value = task.TaskId; - cmd.Parameters["@TaskName"].Value = task.Description.Name; - cmd.Parameters["@SchedulerName"].Value = task.Description.TaskSchedulerName; - cmd.Parameters["@SchedulerFolder"].Value = task.AdvancedSettings.TaskSchedulerFolder; - - return cmd; - } // GetDbLoadCommand - } // class RecordTaskSerialization -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Serialization; +using IpTviewr.Services.SqlServerCE; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlServerCe; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + public static class RecordTaskSerialization + { + public const int MaxTaskNameLength = 128; + + #region Load methods + + public static RecordTask LoadFromDatabase(string dbFile, Guid taskId) + { + return DbServices.Load(dbFile, GetDbLoadCommand(taskId), "XmlData"); + } // Load + + public static RecordTask LoadFromDatabase(SqlCeConnection cn, Guid taskId) + { + return DbServices.Load(cn, GetDbLoadCommand(taskId), "XmlData"); + } // Load + + public static RecordTask LoadFromXmlFile(string filename) + { + return XmlSerialization.Deserialize(filename); + } // LoadFromXmlFile + + public static RecordTask LoadFromXmlString(string xmlText) + { + return XmlSerialization.DeserializeXmlText(xmlText); + } // LoadFromXmlFile + + #endregion + + #region Save methods + + public static void SaveToDatabase(this RecordTask task, string dbFile) + { + var saveCmd = GetDbSaveCommand(task); + DbServices.Save(dbFile, saveCmd, "@XmlData", task); + } // Save + + public static void SaveTo(this RecordTask task, SqlCeConnection cn) + { + var saveCmd = GetDbSaveCommand(task); + DbServices.Save(cn, saveCmd, "@XmlData", task); + } // SaveTo + + public static void SaveToXmlFile(this RecordTask task, string filename) + { + XmlSerialization.Serialize(filename, task); + } // SaveToXmlFile + + public static void SaveTo(this RecordTask task, Stream stream) + { + XmlSerialization.Serialize(stream, task); + } // SaveTo + + public static string SaveAsString(this RecordTask task) + { + var buffer = new StringBuilder(); + task.SaveTo(buffer); + return buffer.ToString(); + } // SaveAsString + + public static void SaveTo(this RecordTask task, StringBuilder buffer) + { + using (var writer = XmlWriter.Create(buffer, new XmlWriterSettings() { Indent = true })) + { + task.SaveTo(writer); + } // using + } // SaveTo + + public static void SaveTo(this RecordTask task, XmlWriter writer) + { + XmlSerialization.Serialize(writer, task); + } // SaveTo + + #endregion + + #region Delete methods + + public static void DeleteFromDatabase(Guid taskId, string dbFile) + { + // TODO: Implement + throw new NotImplementedException(); + } // DeleteFromDatabase + + public static bool TryDeleteFromDatabase(Guid taskId, string dbFile) + { + try + { + DeleteFromDatabase(taskId, dbFile); + return true; + } + catch + { + return false; + } // try-catch + } // DeleteFromDatabase + + #endregion + + private static SqlCeCommand GetDbLoadCommand() + { + var cmd = new SqlCeCommand(); + cmd.CommandType = CommandType.Text; + cmd.CommandText = "SELECT [XmlData] FROM [Tasks] WHERE [TaskId] = ?"; + cmd.Parameters.Add("@TaskId", SqlDbType.UniqueIdentifier); + + return cmd; + } // GetDbLoadCommand + + private static SqlCeCommand GetDbLoadCommand(Guid taskId) + { + var cmd = GetDbLoadCommand(); + cmd.Parameters["@TaskId"].Value = taskId; + + return cmd; + } // GetDbLoadCommand + + private static SqlCeCommand GetDbSaveCommand() + { + var cmd = new SqlCeCommand(); + cmd.CommandType = CommandType.Text; + cmd.CommandText = "INSERT INTO [Tasks] (TaskId, TaskName, SchedulerName, SchedulerFolder, XmlData) VALUES (?, ?, ?, ?, ?)"; + cmd.Parameters.Add("@TaskId", SqlDbType.UniqueIdentifier); + cmd.Parameters.Add("@TaskName", SqlDbType.NVarChar, MaxTaskNameLength); + cmd.Parameters.Add("@SchedulerName", SqlDbType.NVarChar, 150); + cmd.Parameters.Add("@SchedulerFolder", SqlDbType.NVarChar, 128); + cmd.Parameters.Add("@XmlData", SqlDbType.Image); + + return cmd; + } // GetDbSaveCommand + + private static SqlCeCommand GetDbSaveCommand(RecordTask task) + { + var cmd = GetDbSaveCommand(); + cmd.Parameters["@TaskId"].Value = task.TaskId; + cmd.Parameters["@TaskName"].Value = task.Description.Name; + cmd.Parameters["@SchedulerName"].Value = task.Description.TaskSchedulerName; + cmd.Parameters["@SchedulerFolder"].Value = task.AdvancedSettings.TaskSchedulerFolder; + + return cmd; + } // GetDbLoadCommand + } // class RecordTaskSerialization +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs index 2bbde088..5085f98c 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs @@ -1,25 +1,25 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [Flags] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public enum RecordWeekDays - { - Sunday = 0x01, - Monday = 0x02, - Tuesday = 0x04, - Wednesday = 0x08, - Thursday = 0x10, - Friday = 0x20, - Saturday = 0x40, - } // enum RecordWeekDays -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [Flags] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public enum RecordWeekDays + { + Sunday = 0x01, + Monday = 0x02, + Tuesday = 0x04, + Wednesday = 0x08, + Thursday = 0x10, + Friday = 0x20, + Saturday = 0x40, + } // enum RecordWeekDays +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs index 6f73b21b..b7149cf2 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs @@ -1,129 +1,129 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordWeekly : RecordScheduleTime - { - public const RecordWeekDays AllWeekDays = RecordWeekDays.Sunday | RecordWeekDays.Monday | RecordWeekDays.Tuesday | RecordWeekDays.Wednesday | RecordWeekDays.Thursday | RecordWeekDays.Friday | RecordWeekDays.Saturday; - - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.Weekly; } - } // ScheduleKind - - public short RecurEveryWeeks - { - get; - set; - } // RecurEveryWeeks - - public RecordWeekDays WeekDays - { - get; - set; - } // WeekDays - - public static RecordWeekDays ToRecordWeekDays(DayOfWeek day) - { - switch (day) - { - case DayOfWeek.Sunday: return RecordWeekDays.Sunday; - case DayOfWeek.Monday: return RecordWeekDays.Monday; - case DayOfWeek.Tuesday: return RecordWeekDays.Tuesday; - case DayOfWeek.Wednesday: return RecordWeekDays.Wednesday; - case DayOfWeek.Thursday: return RecordWeekDays.Thursday; - case DayOfWeek.Friday: return RecordWeekDays.Friday; - case DayOfWeek.Saturday: return RecordWeekDays.Saturday; - } // switch - - return default(RecordWeekDays); - } // ToRecordWeekDays - - public override void SetDefaultValues() - { - base.SetDefaultValues(); - RecurEveryWeeks = 1; - WeekDays = RecordWeekly.ToRecordWeekDays(DateTime.Now.DayOfWeek); - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - string format; - - if (RecurEveryWeeks < 2) - { - format = (WeekDays == AllWeekDays) ? Properties.Texts.VerbalizeRecordWeeklyEveryday : Properties.Texts.VerbalizeRecordWeekly; - } - else - { - format = (WeekDays == AllWeekDays) ? Properties.Texts.VerbalizeRecordWeeklyEveryWeeksEveryday : Properties.Texts.VerbalizeRecordWeeklyEveryWeeks; - } // if-else - - var weekdays = VerbalizaRecordingDays(pastTime); - builder.AppendFormat(format, RecurEveryWeeks, StartDate, SafetyMarginTimeSpan.TotalMinutes, weekdays); - VerbalizeStartExpiryDate(pastTime, builder); - } // Verbalize - - private string VerbalizaRecordingDays(bool pastTime) - { - StringBuilder buffer; - - if (WeekDays == AllWeekDays) return null; - - buffer = new StringBuilder(); - var culture = System.Threading.Thread.CurrentThread.CurrentCulture; - var info = culture.DateTimeFormat; - var dayNames = info.DayNames; - var days = new List(6); - - for (int index = 0, day = (int)info.FirstDayOfWeek; index < dayNames.Length; index++) - { - var dayEnum = (DayOfWeek)day; - bool add; - - if ((dayEnum == DayOfWeek.Sunday) && ((WeekDays & RecordWeekDays.Sunday) != 0)) add = true; - else if ((dayEnum == DayOfWeek.Monday) && ((WeekDays & RecordWeekDays.Monday) != 0)) add = true; - else if ((dayEnum == DayOfWeek.Tuesday) && ((WeekDays & RecordWeekDays.Tuesday) != 0)) add = true; - else if ((dayEnum == DayOfWeek.Wednesday) && ((WeekDays & RecordWeekDays.Wednesday) != 0)) add = true; - else if ((dayEnum == DayOfWeek.Thursday) && ((WeekDays & RecordWeekDays.Thursday) != 0)) add = true; - else if ((dayEnum == DayOfWeek.Friday) && ((WeekDays & RecordWeekDays.Friday) != 0)) add = true; - else if ((dayEnum == DayOfWeek.Saturday) && ((WeekDays & RecordWeekDays.Saturday) != 0)) add = true; - else add = false; - - if (add) - { - days.Add(dayNames[day]); - } // if - day = (day + 1) % 7; - } // for - - buffer.Append(pastTime ? Properties.Texts.VerbalizeRecordWeeklyDaysPast : Properties.Texts.VerbalizeRecordWeeklyDays); - for (int index = 0; index < days.Count; index++) - { - if (index != 0) - { - if (index == (days.Count - 1)) - { - buffer.Append(Properties.Texts.VerbalizeRecordWeeklyDaysSeparatorFinal); - } - else - { - buffer.Append(Properties.Texts.VerbalizeRecordWeeklyDaysSeparator); - } // if-else - } // if - buffer.Append(days[index]); - } // for - - return buffer.ToString(); - } // VerbalizaRecordingDays - } // class RecordWeekly -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordWeekly : RecordScheduleTime + { + public const RecordWeekDays AllWeekDays = RecordWeekDays.Sunday | RecordWeekDays.Monday | RecordWeekDays.Tuesday | RecordWeekDays.Wednesday | RecordWeekDays.Thursday | RecordWeekDays.Friday | RecordWeekDays.Saturday; + + public override RecordScheduleKind Kind + { + get { return RecordScheduleKind.Weekly; } + } // ScheduleKind + + public short RecurEveryWeeks + { + get; + set; + } // RecurEveryWeeks + + public RecordWeekDays WeekDays + { + get; + set; + } // WeekDays + + public static RecordWeekDays ToRecordWeekDays(DayOfWeek day) + { + switch (day) + { + case DayOfWeek.Sunday: return RecordWeekDays.Sunday; + case DayOfWeek.Monday: return RecordWeekDays.Monday; + case DayOfWeek.Tuesday: return RecordWeekDays.Tuesday; + case DayOfWeek.Wednesday: return RecordWeekDays.Wednesday; + case DayOfWeek.Thursday: return RecordWeekDays.Thursday; + case DayOfWeek.Friday: return RecordWeekDays.Friday; + case DayOfWeek.Saturday: return RecordWeekDays.Saturday; + } // switch + + return default(RecordWeekDays); + } // ToRecordWeekDays + + public override void SetDefaultValues() + { + base.SetDefaultValues(); + RecurEveryWeeks = 1; + WeekDays = RecordWeekly.ToRecordWeekDays(DateTime.Now.DayOfWeek); + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + string format; + + if (RecurEveryWeeks < 2) + { + format = (WeekDays == AllWeekDays) ? Properties.Texts.VerbalizeRecordWeeklyEveryday : Properties.Texts.VerbalizeRecordWeekly; + } + else + { + format = (WeekDays == AllWeekDays) ? Properties.Texts.VerbalizeRecordWeeklyEveryWeeksEveryday : Properties.Texts.VerbalizeRecordWeeklyEveryWeeks; + } // if-else + + var weekdays = VerbalizaRecordingDays(pastTime); + builder.AppendFormat(format, RecurEveryWeeks, StartDate, SafetyMarginTimeSpan.TotalMinutes, weekdays); + VerbalizeStartExpiryDate(pastTime, builder); + } // Verbalize + + private string VerbalizaRecordingDays(bool pastTime) + { + StringBuilder buffer; + + if (WeekDays == AllWeekDays) return null; + + buffer = new StringBuilder(); + var culture = System.Threading.Thread.CurrentThread.CurrentCulture; + var info = culture.DateTimeFormat; + var dayNames = info.DayNames; + var days = new List(6); + + for (int index = 0, day = (int)info.FirstDayOfWeek; index < dayNames.Length; index++) + { + var dayEnum = (DayOfWeek)day; + bool add; + + if ((dayEnum == DayOfWeek.Sunday) && ((WeekDays & RecordWeekDays.Sunday) != 0)) add = true; + else if ((dayEnum == DayOfWeek.Monday) && ((WeekDays & RecordWeekDays.Monday) != 0)) add = true; + else if ((dayEnum == DayOfWeek.Tuesday) && ((WeekDays & RecordWeekDays.Tuesday) != 0)) add = true; + else if ((dayEnum == DayOfWeek.Wednesday) && ((WeekDays & RecordWeekDays.Wednesday) != 0)) add = true; + else if ((dayEnum == DayOfWeek.Thursday) && ((WeekDays & RecordWeekDays.Thursday) != 0)) add = true; + else if ((dayEnum == DayOfWeek.Friday) && ((WeekDays & RecordWeekDays.Friday) != 0)) add = true; + else if ((dayEnum == DayOfWeek.Saturday) && ((WeekDays & RecordWeekDays.Saturday) != 0)) add = true; + else add = false; + + if (add) + { + days.Add(dayNames[day]); + } // if + day = (day + 1) % 7; + } // for + + buffer.Append(pastTime ? Properties.Texts.VerbalizeRecordWeeklyDaysPast : Properties.Texts.VerbalizeRecordWeeklyDays); + for (int index = 0; index < days.Count; index++) + { + if (index != 0) + { + if (index == (days.Count - 1)) + { + buffer.Append(Properties.Texts.VerbalizeRecordWeeklyDaysSeparatorFinal); + } + else + { + buffer.Append(Properties.Texts.VerbalizeRecordWeeklyDaysSeparator); + } // if-else + } // if + buffer.Append(days[index]); + } // for + + return buffer.ToString(); + } // VerbalizaRecordingDays + } // class RecordWeekly +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs index 9eccfb21..992c7e98 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.Record.Serialization -{ - [Flags] - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public enum RecordYearMonths - { - January = 0x001, - February = 0x002, - March = 0x004, - April = 0x008, - May = 0x010, - June = 0x020, - July = 0x040, - August = 0x080, - September = 0x100, - October = 0x200, - November = 0x400, - December = 0x800, - } // enum RecordYearMonths -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Flags] + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public enum RecordYearMonths + { + January = 0x001, + February = 0x002, + March = 0x004, + April = 0x008, + May = 0x010, + June = 0x020, + July = 0x040, + August = 0x080, + September = 0x100, + October = 0x200, + November = 0x400, + December = 0x800, + } // enum RecordYearMonths +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj index 0393d0f8..091541d6 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj @@ -1,105 +1,105 @@ - - - - - Debug - AnyCPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69} - Library - Properties - Project.IpTv.Services.Record.Serialization - Services.Record.Serialization - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - Texts.resx - True - True - - - - - - - - - - - - - - - - - - - - - - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - - - - + + + + + Debug + AnyCPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69} + Library + Properties + IpTviewr.Services.Record.Serialization + Services.Record.Serialization + v3.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + False + ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + Texts.resx + True + True + + + + + + + + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {3a053f34-4edf-4071-b966-923255a0ae14} + Services.SqlServerCE + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs index 501bf8f4..76f2ad0b 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.Record")] -[assembly: AssemblyDescription("Project.IpTv.Services.Record")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3e4a840e-2302-44d0-9e8a-ea4ff39633d9")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.Record")] +[assembly: AssemblyDescription("IpTviewr.Services.Record")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3e4a840e-2302-44d0-9e8a-ea4ff39633d9")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs index 09cf4705..4e192405 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs @@ -1,120 +1,120 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Services.Record.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Services.Record.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task - ///TaskId: {0} - ///Database: {1}. - /// - internal static string DefinitionRegistrationInfo_Documentation { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task. - /// - internal static string DefinitionRegistrationInfo_Documentation_Begins { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation_Begins", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task Id: {0} - ///Task file: {1}. - /// - internal static string DefinitionRegistrationInfo_DocumentationV1 { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_DocumentationV1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task Id:. - /// - internal static string DefinitionRegistrationInfo_DocumentationV1_Begins { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_DocumentationV1_Begins", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Application. - /// - internal static string DefinitionRegistrationInfo_Source { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_Source", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to RecordTasks.sdf. - /// - internal static string RecordTasksDatabaseFile { - get { - return ResourceManager.GetString("RecordTasksDatabaseFile", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Services.Record.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task + ///TaskId: {0} + ///Database: {1}. + /// + internal static string DefinitionRegistrationInfo_Documentation { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task. + /// + internal static string DefinitionRegistrationInfo_Documentation_Begins { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation_Begins", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task Id: {0} + ///Task file: {1}. + /// + internal static string DefinitionRegistrationInfo_DocumentationV1 { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_DocumentationV1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task Id:. + /// + internal static string DefinitionRegistrationInfo_DocumentationV1_Begins { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_DocumentationV1_Begins", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application. + /// + internal static string DefinitionRegistrationInfo_Source { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_Source", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to RecordTasks.sdf. + /// + internal static string RecordTasksDatabaseFile { + get { + return ResourceManager.GetString("RecordTasksDatabaseFile", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs index c8535d4f..f7f46b09 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs @@ -1,91 +1,91 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Services.Record.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Services.Record.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to The folder does not exists.. - /// - internal static string FolderNotFoundException { - get { - return ResourceManager.GetString("FolderNotFoundException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unexpected error while contacting with the Windows Task Manager to create the recording task. - ///The recording task has not been created.. - /// - internal static string TaskCreationException { - get { - return ResourceManager.GetString("TaskCreationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to run the 'Right now' recording task and no recording action will take place.. - /// - internal static string TaskRunException { - get { - return ResourceManager.GetString("TaskRunException", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18444 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Services.Record.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The folder does not exists.. + /// + internal static string FolderNotFoundException { + get { + return ResourceManager.GetString("FolderNotFoundException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unexpected error while contacting with the Windows Task Manager to create the recording task. + ///The recording task has not been created.. + /// + internal static string TaskCreationException { + get { + return ResourceManager.GetString("TaskCreationException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to run the 'Right now' recording task and no recording action will take place.. + /// + internal static string TaskRunException { + get { + return ResourceManager.GetString("TaskRunException", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Services.Record/Scheduler.cs b/1.5 'Kruger 60'/Services.Record/Scheduler.cs index 7be2389e..66daf014 100644 --- a/1.5 'Kruger 60'/Services.Record/Scheduler.cs +++ b/1.5 'Kruger 60'/Services.Record/Scheduler.cs @@ -1,475 +1,475 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.Win32.TaskScheduler; -using System.Globalization; -using Project.IpTv.Services.Record.Serialization; -using System.Reflection; -using System.IO; -using Project.IpTv.Services.Record.Properties; -using System.Text.RegularExpressions; -using Project.IpTv.Common; - -namespace Project.IpTv.Services.Record -{ - public class Scheduler - { - private Action ExceptionHandler; - private string RecordTasksFolder; - private string RecorderLauncherPath; - private string DbFile; - private string LogFolder; - - private TimeSpan StartSafetyMargin; - private TimeSpan EndSafetyMargin; - private TimeSpan RecordDuration; - private TimeSpan TotalRecordTime; - private TaskFolder TaskFolder; - private string TaskName; - - public Scheduler(Action exceptionHandler, string recordTasksFolder, string recorderLauncherPath) - { - if ((exceptionHandler == null) || string.IsNullOrEmpty(recordTasksFolder) || string.IsNullOrEmpty(recorderLauncherPath)) - { - throw new ArgumentNullException(); - } // if - - ExceptionHandler = exceptionHandler; - RecordTasksFolder = recordTasksFolder; - RecorderLauncherPath = recorderLauncherPath; - DbFile = Path.Combine(recordTasksFolder, Resources.RecordTasksDatabaseFile); - LogFolder = recordTasksFolder; - } // constructor - - public static bool IsRecordSchedulerTask(Task schedulerTask, out RecordTask recordTask) - { - recordTask = null; - - if (string.IsNullOrEmpty(schedulerTask.Definition.RegistrationInfo.Documentation)) return false; - if (string.IsNullOrEmpty(schedulerTask.Definition.Data)) return false; - - if (!schedulerTask.Definition.RegistrationInfo.Documentation.StartsWith(Resources.DefinitionRegistrationInfo_Documentation_Begins, StringComparison.InvariantCultureIgnoreCase)) - { - // try v1 documentation format - if (!schedulerTask.Definition.RegistrationInfo.Documentation.StartsWith(Resources.DefinitionRegistrationInfo_DocumentationV1_Begins, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } // if - } // if - - try - { - recordTask = RecordTaskSerialization.LoadFromXmlString(schedulerTask.Definition.Data); - return true; - } - catch - { - // ignore, but return a null RecordTask - return true; - } // try-catch - } // IsRecordSchedulerTask - - public bool CreateTask(RecordTask record) - { - TaskService taskScheduler; - TaskDefinition definition; - Task task; - bool isOk; - - TaskFolder = null; - TaskName = null; - - taskScheduler = null; - definition = null; - task = null; - isOk = false; - - try - { - taskScheduler = new TaskService(); - definition = taskScheduler.NewTask(); - - // Get folder for new task - TaskFolder = GetTaskSchedulerFolder(record.AdvancedSettings, taskScheduler); - - // "Duration" - // Duration 'per-se' is handled by the recording process. - // However, we need extract some information - GetDuration(record); - - // "Schedule" - SetSchedule(definition, record.Schedule); - - // "Description" - SetDescription(definition, record); - - // "Save" - // Save location is handled by the recording process - - // "Advanced" - SetAdvancedSettings(definition.Settings, record.AdvancedSettings, record.Schedule.Kind == RecordScheduleKind.RightNow); - - // Save xml data - SaveXmlData(record); - - // Aditional task data - SetAdditionalData(definition, record, DbFile); - - // Action - SetAction(definition, record, DbFile, LogFolder); - - // Register task - task = TaskFolder.RegisterTaskDefinition(TaskName, definition); - isOk = true; - - // Run task right now? - if (record.Schedule.Kind == RecordScheduleKind.RightNow) - { - try - { - task.Run(null); - } - catch (Exception ex) - { - ExceptionHandler(Texts.TaskRunException, ex); - return false; - } // try-catch - } // if - - return true; - } - catch (Exception ex) - { - ExceptionHandler(Texts.TaskCreationException, ex); - return false; - } - finally - { - if (!isOk) - { - RecordTaskSerialization.TryDeleteFromDatabase(record.TaskId, DbFile); - } // if - if (task != null) - { - task.Dispose(); - task = null; - } // if - if (definition != null) - { - definition.Dispose(); - definition = null; - } // if - if (TaskFolder != null) - { - TaskFolder.Dispose(); - TaskFolder = null; - } // if - if (taskScheduler != null) - { - taskScheduler.Dispose(); - taskScheduler = null; - } // if - TaskName = null; - } // try-finally - } // CreateTask - - private static TaskFolder GetTaskSchedulerFolder(RecordAdvancedSettings settings, TaskService taskScheduler) - { - if (string.IsNullOrEmpty(settings.TaskSchedulerFolder)) - { - return taskScheduler.RootFolder; - } // if - - try - { - return taskScheduler.GetFolder(settings.TaskSchedulerFolder); - } - catch (DirectoryNotFoundException) - { - // folder does not exist: create it - return taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); - } - catch (FileNotFoundException) - { - // folder does not exist: create it - return taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); - - } // try-catch - } // GetTaskSchedulerFolder - - private void GetDuration(RecordTask task) - { - // extract start details - var scheduleTime = task.Schedule as RecordScheduleTime; - if (scheduleTime != null) - { - StartSafetyMargin = scheduleTime.SafetyMarginTimeSpan; - } - else - { - StartSafetyMargin = new TimeSpan(0, 0, 0); - } // if-else - - // extract duration details - EndSafetyMargin = task.Duration.SafetyMarginTimeSpan; - RecordDuration = task.Duration.Length; - - // do some math - TotalRecordTime = StartSafetyMargin + RecordDuration + EndSafetyMargin; - } // GetDuration - - private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedule) - { - switch (recordSchedule.Kind) - { - case RecordScheduleKind.RightNow: - { - var rightNow = new TimeTrigger(); - rightNow.EndBoundary = DateTime.Now + TotalRecordTime; - - definition.Triggers.Add(rightNow); - break; - } // case RecordScheduleKind.RightNow - - case RecordScheduleKind.OneTime: - { - var oneTime = new TimeTrigger(); - var schedule = (RecordOneTime)recordSchedule; - oneTime.StartBoundary = schedule.StartDate - StartSafetyMargin; - oneTime.EndBoundary = schedule.StartDate + TotalRecordTime; - - definition.Triggers.Add(oneTime); - break; - } // case RecordScheduleKind.OneTime - - case RecordScheduleKind.Daily: - { - var daily = new DailyTrigger(); - var schedule = (RecordDaily)recordSchedule; - daily.StartBoundary = schedule.StartDate - StartSafetyMargin; - if (schedule.ExpiryDate.HasValue) - { - daily.EndBoundary = schedule.ExpiryDate.Value; - } // if - daily.DaysInterval = schedule.RecurEveryDays; - - definition.Triggers.Add(daily); - break; - } // case RecordScheduleKind.Daily - - case RecordScheduleKind.Weekly: - { - var weekly = new WeeklyTrigger(); - var schedule = (RecordWeekly)recordSchedule; - weekly.StartBoundary = schedule.StartDate - StartSafetyMargin; - if (schedule.ExpiryDate.HasValue) - { - weekly.EndBoundary = schedule.ExpiryDate.Value; - } // if - weekly.WeeksInterval = schedule.RecurEveryWeeks; - weekly.DaysOfWeek = GetDaysOfTheWeek(schedule.WeekDays); - - definition.Triggers.Add(weekly); - break; - } // case RecordScheduleKind.Weekly - - case RecordScheduleKind.Monthly: - { - var monthly = new MonthlyTrigger(); - var schedule = (RecordMonthly)recordSchedule; - monthly.StartBoundary = schedule.StartDate - StartSafetyMargin; - if (schedule.ExpiryDate.HasValue) - { - monthly.EndBoundary = schedule.ExpiryDate.Value; - } // if - - throw new NotImplementedException(); - } // case RecordScheduleKind.Monthly - - default: - throw new IndexOutOfRangeException(); - } // switch - } // SetSchedule - - private void SetDescription(TaskDefinition definition, RecordTask task) - { - string userDescription; - - TaskName = GetUniqueTaskName(task, "IPTV"); - task.Description.TaskSchedulerName = TaskName; - - userDescription = task.Description.Description; - if (!task.Description.AddDetails) - { - if (userDescription.Length > 0) - { - definition.RegistrationInfo.Description = userDescription; - } // if - } - else - { - var details = new StringBuilder(); - task.BuildDescription(true, false, false, true, true, true, null, details); - task.Description.Details = details.ToString(); - - if (userDescription.Length > 0) - { - details = new StringBuilder(userDescription.Length + task.Description.Details.Length + 2); - details.Append(userDescription); - details.AppendLine(); - details.Append(task.Description.Details); - } // if - details.Replace("\r\n", " \r\n"); - - definition.RegistrationInfo.Description = details.ToString(); - } // if-else - } // SetDescription - - private void SetAdvancedSettings(TaskSettings settings, RecordAdvancedSettings advanced, bool isRightNow) - { - // Fixed parameters - settings.Enabled = true; - settings.Hidden = false; - - // From UI - settings.AllowDemandStart = isRightNow; - if ((advanced.DeleteAfter != null) && (advanced.DeleteAfter.Enabled)) - { - settings.DeleteExpiredTaskAfter = advanced.DeleteAfter.Time; - } // if - - switch (advanced.MultipleInstances) - { - case RecordMultipleInstances.RecordBoth: - settings.MultipleInstances = TaskInstancesPolicy.Parallel; - break; - case RecordMultipleInstances.DoNotRecord: - settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew; - break; - case RecordMultipleInstances.Queue: - settings.MultipleInstances = TaskInstancesPolicy.Queue; - // NOTE: The recording process should not start recording if the task is started after the end of the program - break; - case RecordMultipleInstances.StopPrevious: - settings.MultipleInstances = TaskInstancesPolicy.StopExisting; - break; - default: - throw new IndexOutOfRangeException(); - } // switch - - if ((advanced.FailureRetry != null) && (advanced.FailureRetry.Enabled)) - { - settings.RestartInterval = advanced.FailureRetry.RestartInterval; - settings.RestartCount = advanced.FailureRetry.MaxRetries; - } // if - - // Start recording as soon as possible if the schedule is missed - // NOTE: The recording process should not start recording if the task is started after the end of the program - settings.StartWhenAvailable = advanced.AsSoonAsPossible; - - settings.WakeToRun = advanced.WakeComputer; - - // The RecordTask execution limit is not an absolute value. It has to be added to the total record time (including safety margins) - if ((advanced.ExecutionTimeLimit != null) && (advanced.ExecutionTimeLimit.Enabled)) - { - settings.ExecutionTimeLimit = TotalRecordTime + advanced.ExecutionTimeLimit.Time; - } // if - } // SetAdvancedSettings - - private void SaveXmlData(RecordTask record) - { - record.SaveToDatabase(DbFile); - } // SaveXmlData - - private static void SetAdditionalData(TaskDefinition definition, RecordTask record, string dbFile) - { - definition.RegistrationInfo.Author = string.Format("{0} {1}", Assembly.GetEntryAssembly().GetName().Name, SolutionVersion.ProductVersion); - definition.RegistrationInfo.Source = Resources.DefinitionRegistrationInfo_Source; - definition.RegistrationInfo.Documentation = string.Format(Resources.DefinitionRegistrationInfo_Documentation, record.TaskId, dbFile); - definition.RegistrationInfo.Date = DateTime.Now; - definition.Data = record.SaveAsString(); - } // SetAdditionalData - - private void SetAction(TaskDefinition definition, RecordTask record, string dbFile, string logFolder) - { - var arguments = new string[] - { - "/Action:Record", - string.Format("/TaskId:{0}", record.TaskId), - string.Format("/Database:{0}", dbFile), - string.Format("/LogFolder:{0}", logFolder) - }; - - var action = new ExecAction() - { - Path = RecorderLauncherPath, - Arguments = ArgumentsManager.JoinArguments(arguments), - WorkingDirectory = record.Action.SaveLocationPath, - }; - definition.Actions.Add(action); - } // SetAction - - private static DaysOfTheWeek GetDaysOfTheWeek(RecordWeekDays recordWeekDays) - { - DaysOfTheWeek result; - - result = new DaysOfTheWeek(); - if ((recordWeekDays & RecordWeekDays.Sunday) != 0) result |= DaysOfTheWeek.Sunday; - if ((recordWeekDays & RecordWeekDays.Monday) != 0) result |= DaysOfTheWeek.Monday; - if ((recordWeekDays & RecordWeekDays.Tuesday) != 0) result |= DaysOfTheWeek.Tuesday; - if ((recordWeekDays & RecordWeekDays.Wednesday) != 0) result |= DaysOfTheWeek.Wednesday; - if ((recordWeekDays & RecordWeekDays.Thursday) != 0) result |= DaysOfTheWeek.Thursday; - if ((recordWeekDays & RecordWeekDays.Friday) != 0) result |= DaysOfTheWeek.Friday; - if ((recordWeekDays & RecordWeekDays.Saturday) != 0) result |= DaysOfTheWeek.Saturday; - - return result; - } // SetSchedule - - private static string GetUniqueTaskName(RecordTask task, string prefix) - { - string format; - string description; - - description = task.Description.Name; - if (task.Description.AddPrefix) - { - format = (description.Length > 0) ? "{2} ~ {0} {1:P}" : "{2} {1:P}"; - } - else - { - format = (description.Length > 0) ? "{0} {1:P}" : "{2} {1:P}"; - } // if-else - - return string.Format(format, description, task.TaskId, prefix); - } // GetUniqueTaskName - - private static string EnsureTaskNameIsUnique(string taskName, TaskFolder folder) - { - string originalName; - int count; - - originalName = taskName; - count = 2; - - while (true) - { - var query = from task in folder.AllTasks - where task.Name == taskName - select true; - if (query.FirstOrDefault()) - { - taskName = string.Format("{0} #{1}", originalName, count.ToString(CultureInfo.InvariantCulture)); - count++; - } - else - { - return taskName; - } // if-else - } // while - } // EnsureTaskNameIsUnique - } // class Scheduler -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Microsoft.Win32.TaskScheduler; +using System.Globalization; +using IpTviewr.Services.Record.Serialization; +using System.Reflection; +using System.IO; +using IpTviewr.Services.Record.Properties; +using System.Text.RegularExpressions; +using IpTviewr.Common; + +namespace IpTviewr.Services.Record +{ + public class Scheduler + { + private Action ExceptionHandler; + private string RecordTasksFolder; + private string RecorderLauncherPath; + private string DbFile; + private string LogFolder; + + private TimeSpan StartSafetyMargin; + private TimeSpan EndSafetyMargin; + private TimeSpan RecordDuration; + private TimeSpan TotalRecordTime; + private TaskFolder TaskFolder; + private string TaskName; + + public Scheduler(Action exceptionHandler, string recordTasksFolder, string recorderLauncherPath) + { + if ((exceptionHandler == null) || string.IsNullOrEmpty(recordTasksFolder) || string.IsNullOrEmpty(recorderLauncherPath)) + { + throw new ArgumentNullException(); + } // if + + ExceptionHandler = exceptionHandler; + RecordTasksFolder = recordTasksFolder; + RecorderLauncherPath = recorderLauncherPath; + DbFile = Path.Combine(recordTasksFolder, Resources.RecordTasksDatabaseFile); + LogFolder = recordTasksFolder; + } // constructor + + public static bool IsRecordSchedulerTask(Task schedulerTask, out RecordTask recordTask) + { + recordTask = null; + + if (string.IsNullOrEmpty(schedulerTask.Definition.RegistrationInfo.Documentation)) return false; + if (string.IsNullOrEmpty(schedulerTask.Definition.Data)) return false; + + if (!schedulerTask.Definition.RegistrationInfo.Documentation.StartsWith(Resources.DefinitionRegistrationInfo_Documentation_Begins, StringComparison.InvariantCultureIgnoreCase)) + { + // try v1 documentation format + if (!schedulerTask.Definition.RegistrationInfo.Documentation.StartsWith(Resources.DefinitionRegistrationInfo_DocumentationV1_Begins, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } // if + } // if + + try + { + recordTask = RecordTaskSerialization.LoadFromXmlString(schedulerTask.Definition.Data); + return true; + } + catch + { + // ignore, but return a null RecordTask + return true; + } // try-catch + } // IsRecordSchedulerTask + + public bool CreateTask(RecordTask record) + { + TaskService taskScheduler; + TaskDefinition definition; + Task task; + bool isOk; + + TaskFolder = null; + TaskName = null; + + taskScheduler = null; + definition = null; + task = null; + isOk = false; + + try + { + taskScheduler = new TaskService(); + definition = taskScheduler.NewTask(); + + // Get folder for new task + TaskFolder = GetTaskSchedulerFolder(record.AdvancedSettings, taskScheduler); + + // "Duration" + // Duration 'per-se' is handled by the recording process. + // However, we need extract some information + GetDuration(record); + + // "Schedule" + SetSchedule(definition, record.Schedule); + + // "Description" + SetDescription(definition, record); + + // "Save" + // Save location is handled by the recording process + + // "Advanced" + SetAdvancedSettings(definition.Settings, record.AdvancedSettings, record.Schedule.Kind == RecordScheduleKind.RightNow); + + // Save xml data + SaveXmlData(record); + + // Aditional task data + SetAdditionalData(definition, record, DbFile); + + // Action + SetAction(definition, record, DbFile, LogFolder); + + // Register task + task = TaskFolder.RegisterTaskDefinition(TaskName, definition); + isOk = true; + + // Run task right now? + if (record.Schedule.Kind == RecordScheduleKind.RightNow) + { + try + { + task.Run(null); + } + catch (Exception ex) + { + ExceptionHandler(Texts.TaskRunException, ex); + return false; + } // try-catch + } // if + + return true; + } + catch (Exception ex) + { + ExceptionHandler(Texts.TaskCreationException, ex); + return false; + } + finally + { + if (!isOk) + { + RecordTaskSerialization.TryDeleteFromDatabase(record.TaskId, DbFile); + } // if + if (task != null) + { + task.Dispose(); + task = null; + } // if + if (definition != null) + { + definition.Dispose(); + definition = null; + } // if + if (TaskFolder != null) + { + TaskFolder.Dispose(); + TaskFolder = null; + } // if + if (taskScheduler != null) + { + taskScheduler.Dispose(); + taskScheduler = null; + } // if + TaskName = null; + } // try-finally + } // CreateTask + + private static TaskFolder GetTaskSchedulerFolder(RecordAdvancedSettings settings, TaskService taskScheduler) + { + if (string.IsNullOrEmpty(settings.TaskSchedulerFolder)) + { + return taskScheduler.RootFolder; + } // if + + try + { + return taskScheduler.GetFolder(settings.TaskSchedulerFolder); + } + catch (DirectoryNotFoundException) + { + // folder does not exist: create it + return taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); + } + catch (FileNotFoundException) + { + // folder does not exist: create it + return taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); + + } // try-catch + } // GetTaskSchedulerFolder + + private void GetDuration(RecordTask task) + { + // extract start details + var scheduleTime = task.Schedule as RecordScheduleTime; + if (scheduleTime != null) + { + StartSafetyMargin = scheduleTime.SafetyMarginTimeSpan; + } + else + { + StartSafetyMargin = new TimeSpan(0, 0, 0); + } // if-else + + // extract duration details + EndSafetyMargin = task.Duration.SafetyMarginTimeSpan; + RecordDuration = task.Duration.Length; + + // do some math + TotalRecordTime = StartSafetyMargin + RecordDuration + EndSafetyMargin; + } // GetDuration + + private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedule) + { + switch (recordSchedule.Kind) + { + case RecordScheduleKind.RightNow: + { + var rightNow = new TimeTrigger(); + rightNow.EndBoundary = DateTime.Now + TotalRecordTime; + + definition.Triggers.Add(rightNow); + break; + } // case RecordScheduleKind.RightNow + + case RecordScheduleKind.OneTime: + { + var oneTime = new TimeTrigger(); + var schedule = (RecordOneTime)recordSchedule; + oneTime.StartBoundary = schedule.StartDate - StartSafetyMargin; + oneTime.EndBoundary = schedule.StartDate + TotalRecordTime; + + definition.Triggers.Add(oneTime); + break; + } // case RecordScheduleKind.OneTime + + case RecordScheduleKind.Daily: + { + var daily = new DailyTrigger(); + var schedule = (RecordDaily)recordSchedule; + daily.StartBoundary = schedule.StartDate - StartSafetyMargin; + if (schedule.ExpiryDate.HasValue) + { + daily.EndBoundary = schedule.ExpiryDate.Value; + } // if + daily.DaysInterval = schedule.RecurEveryDays; + + definition.Triggers.Add(daily); + break; + } // case RecordScheduleKind.Daily + + case RecordScheduleKind.Weekly: + { + var weekly = new WeeklyTrigger(); + var schedule = (RecordWeekly)recordSchedule; + weekly.StartBoundary = schedule.StartDate - StartSafetyMargin; + if (schedule.ExpiryDate.HasValue) + { + weekly.EndBoundary = schedule.ExpiryDate.Value; + } // if + weekly.WeeksInterval = schedule.RecurEveryWeeks; + weekly.DaysOfWeek = GetDaysOfTheWeek(schedule.WeekDays); + + definition.Triggers.Add(weekly); + break; + } // case RecordScheduleKind.Weekly + + case RecordScheduleKind.Monthly: + { + var monthly = new MonthlyTrigger(); + var schedule = (RecordMonthly)recordSchedule; + monthly.StartBoundary = schedule.StartDate - StartSafetyMargin; + if (schedule.ExpiryDate.HasValue) + { + monthly.EndBoundary = schedule.ExpiryDate.Value; + } // if + + throw new NotImplementedException(); + } // case RecordScheduleKind.Monthly + + default: + throw new IndexOutOfRangeException(); + } // switch + } // SetSchedule + + private void SetDescription(TaskDefinition definition, RecordTask task) + { + string userDescription; + + TaskName = GetUniqueTaskName(task, "IPTV"); + task.Description.TaskSchedulerName = TaskName; + + userDescription = task.Description.Description; + if (!task.Description.AddDetails) + { + if (userDescription.Length > 0) + { + definition.RegistrationInfo.Description = userDescription; + } // if + } + else + { + var details = new StringBuilder(); + task.BuildDescription(true, false, false, true, true, true, null, details); + task.Description.Details = details.ToString(); + + if (userDescription.Length > 0) + { + details = new StringBuilder(userDescription.Length + task.Description.Details.Length + 2); + details.Append(userDescription); + details.AppendLine(); + details.Append(task.Description.Details); + } // if + details.Replace("\r\n", " \r\n"); + + definition.RegistrationInfo.Description = details.ToString(); + } // if-else + } // SetDescription + + private void SetAdvancedSettings(TaskSettings settings, RecordAdvancedSettings advanced, bool isRightNow) + { + // Fixed parameters + settings.Enabled = true; + settings.Hidden = false; + + // From UI + settings.AllowDemandStart = isRightNow; + if ((advanced.DeleteAfter != null) && (advanced.DeleteAfter.Enabled)) + { + settings.DeleteExpiredTaskAfter = advanced.DeleteAfter.Time; + } // if + + switch (advanced.MultipleInstances) + { + case RecordMultipleInstances.RecordBoth: + settings.MultipleInstances = TaskInstancesPolicy.Parallel; + break; + case RecordMultipleInstances.DoNotRecord: + settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew; + break; + case RecordMultipleInstances.Queue: + settings.MultipleInstances = TaskInstancesPolicy.Queue; + // NOTE: The recording process should not start recording if the task is started after the end of the program + break; + case RecordMultipleInstances.StopPrevious: + settings.MultipleInstances = TaskInstancesPolicy.StopExisting; + break; + default: + throw new IndexOutOfRangeException(); + } // switch + + if ((advanced.FailureRetry != null) && (advanced.FailureRetry.Enabled)) + { + settings.RestartInterval = advanced.FailureRetry.RestartInterval; + settings.RestartCount = advanced.FailureRetry.MaxRetries; + } // if + + // Start recording as soon as possible if the schedule is missed + // NOTE: The recording process should not start recording if the task is started after the end of the program + settings.StartWhenAvailable = advanced.AsSoonAsPossible; + + settings.WakeToRun = advanced.WakeComputer; + + // The RecordTask execution limit is not an absolute value. It has to be added to the total record time (including safety margins) + if ((advanced.ExecutionTimeLimit != null) && (advanced.ExecutionTimeLimit.Enabled)) + { + settings.ExecutionTimeLimit = TotalRecordTime + advanced.ExecutionTimeLimit.Time; + } // if + } // SetAdvancedSettings + + private void SaveXmlData(RecordTask record) + { + record.SaveToDatabase(DbFile); + } // SaveXmlData + + private static void SetAdditionalData(TaskDefinition definition, RecordTask record, string dbFile) + { + definition.RegistrationInfo.Author = string.Format("{0} {1}", Assembly.GetEntryAssembly().GetName().Name, SolutionVersion.ProductVersion); + definition.RegistrationInfo.Source = Resources.DefinitionRegistrationInfo_Source; + definition.RegistrationInfo.Documentation = string.Format(Resources.DefinitionRegistrationInfo_Documentation, record.TaskId, dbFile); + definition.RegistrationInfo.Date = DateTime.Now; + definition.Data = record.SaveAsString(); + } // SetAdditionalData + + private void SetAction(TaskDefinition definition, RecordTask record, string dbFile, string logFolder) + { + var arguments = new string[] + { + "/Action:Record", + string.Format("/TaskId:{0}", record.TaskId), + string.Format("/Database:{0}", dbFile), + string.Format("/LogFolder:{0}", logFolder) + }; + + var action = new ExecAction() + { + Path = RecorderLauncherPath, + Arguments = ArgumentsManager.JoinArguments(arguments), + WorkingDirectory = record.Action.SaveLocationPath, + }; + definition.Actions.Add(action); + } // SetAction + + private static DaysOfTheWeek GetDaysOfTheWeek(RecordWeekDays recordWeekDays) + { + DaysOfTheWeek result; + + result = new DaysOfTheWeek(); + if ((recordWeekDays & RecordWeekDays.Sunday) != 0) result |= DaysOfTheWeek.Sunday; + if ((recordWeekDays & RecordWeekDays.Monday) != 0) result |= DaysOfTheWeek.Monday; + if ((recordWeekDays & RecordWeekDays.Tuesday) != 0) result |= DaysOfTheWeek.Tuesday; + if ((recordWeekDays & RecordWeekDays.Wednesday) != 0) result |= DaysOfTheWeek.Wednesday; + if ((recordWeekDays & RecordWeekDays.Thursday) != 0) result |= DaysOfTheWeek.Thursday; + if ((recordWeekDays & RecordWeekDays.Friday) != 0) result |= DaysOfTheWeek.Friday; + if ((recordWeekDays & RecordWeekDays.Saturday) != 0) result |= DaysOfTheWeek.Saturday; + + return result; + } // SetSchedule + + private static string GetUniqueTaskName(RecordTask task, string prefix) + { + string format; + string description; + + description = task.Description.Name; + if (task.Description.AddPrefix) + { + format = (description.Length > 0) ? "{2} ~ {0} {1:P}" : "{2} {1:P}"; + } + else + { + format = (description.Length > 0) ? "{0} {1:P}" : "{2} {1:P}"; + } // if-else + + return string.Format(format, description, task.TaskId, prefix); + } // GetUniqueTaskName + + private static string EnsureTaskNameIsUnique(string taskName, TaskFolder folder) + { + string originalName; + int count; + + originalName = taskName; + count = 2; + + while (true) + { + var query = from task in folder.AllTasks + where task.Name == taskName + select true; + if (query.FirstOrDefault()) + { + taskName = string.Format("{0} #{1}", originalName, count.ToString(CultureInfo.InvariantCulture)); + count++; + } + else + { + return taskName; + } // if-else + } // while + } // EnsureTaskNameIsUnique + } // class Scheduler +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/Services.Record.csproj b/1.5 'Kruger 60'/Services.Record/Services.Record.csproj index b8cd33d5..758db769 100644 --- a/1.5 'Kruger 60'/Services.Record/Services.Record.csproj +++ b/1.5 'Kruger 60'/Services.Record/Services.Record.csproj @@ -1,101 +1,101 @@ - - - - - Debug - AnyCPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273} - Library - Properties - Project.IpTv.Services.Record - Services.Record - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\Third-party\TaskScheduler\2.2.2\v2.0\Microsoft.Win32.TaskScheduler.dll - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - True - True - Resources.resx - - - - True - True - Texts.resx - - - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} - Services.Record.Serialization - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - - - - + + + + + Debug + AnyCPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273} + Library + Properties + IpTviewr.Services.Record + Services.Record + v3.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\Third-party\TaskScheduler\2.2.2\v2.0\Microsoft.Win32.TaskScheduler.dll + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + True + True + Resources.resx + + + + True + True + Texts.resx + + + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} + Services.Record.Serialization + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record/TaskAction.cs b/1.5 'Kruger 60'/Services.Record/TaskAction.cs index fadde4d8..6e0f96d9 100644 --- a/1.5 'Kruger 60'/Services.Record/TaskAction.cs +++ b/1.5 'Kruger 60'/Services.Record/TaskAction.cs @@ -1,18 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.Record -{ - public enum TaskAction - { - None = 0, - Default, - Delete, - Recreate, - } // enum TaskAction -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Services.Record +{ + public enum TaskAction + { + None = 0, + Default, + Delete, + Recreate, + } // enum TaskAction +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskData.cs b/1.5 'Kruger 60'/Services.Record/TaskData.cs index 1346611f..66130ca0 100644 --- a/1.5 'Kruger 60'/Services.Record/TaskData.cs +++ b/1.5 'Kruger 60'/Services.Record/TaskData.cs @@ -1,66 +1,66 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.Services.Record.Serialization; - -namespace Project.IpTv.Services.Record -{ - public class TaskData - { - public TaskStatus Status - { - get; - internal set; - } // Status - - public TaskAction Action - { - get; - set; - } // Action - - public Guid Id - { - get { return Task.TaskId; } - } // Id - - public string Name - { - get { return Task.Description.Name; } - } // Name - - public string SchedulerName - { - get; - internal set; - } // SchedulerName - - public string SchedulerPath - { - get; - internal set; - } // SchedulerPath - - public string XmlFilePath - { - get; - internal set; - } // XmlFilePath - - public int? NumberOfRecordings - { - get; - internal set; - } // NumberOfRecordings - - public RecordTask Task - { - get; - internal set; - } // Task - } // TaskData -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IpTviewr.Services.Record.Serialization; + +namespace IpTviewr.Services.Record +{ + public class TaskData + { + public TaskStatus Status + { + get; + internal set; + } // Status + + public TaskAction Action + { + get; + set; + } // Action + + public Guid Id + { + get { return Task.TaskId; } + } // Id + + public string Name + { + get { return Task.Description.Name; } + } // Name + + public string SchedulerName + { + get; + internal set; + } // SchedulerName + + public string SchedulerPath + { + get; + internal set; + } // SchedulerPath + + public string XmlFilePath + { + get; + internal set; + } // XmlFilePath + + public int? NumberOfRecordings + { + get; + internal set; + } // NumberOfRecordings + + public RecordTask Task + { + get; + internal set; + } // Task + } // TaskData +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskList.cs b/1.5 'Kruger 60'/Services.Record/TaskList.cs index 026fdf37..6152d678 100644 --- a/1.5 'Kruger 60'/Services.Record/TaskList.cs +++ b/1.5 'Kruger 60'/Services.Record/TaskList.cs @@ -1,219 +1,219 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using Project.IpTv.Services.Record.Serialization; -using Project.IpTv.Services.Record.Properties; -using Microsoft.Win32.TaskScheduler; - -namespace Project.IpTv.Services.Record -{ - public class TaskList: ICollection - { - protected IList List; - - public TaskList() - { - List = new List(); - } // TaskList - - public static TaskList Build(TaskListBuildOptions options) - { - TaskList result; - - if (options == null) throw new ArgumentNullException(); - if (string.IsNullOrEmpty(options.RecordTaskFolder)) throw new ArgumentNullException(); - if (!Directory.Exists(options.RecordTaskFolder)) throw new DirectoryNotFoundException(options.RecordTaskFolder); - - - result = new TaskList(); - result.FillFromFolder(options.RecordTaskFolder); - if ((options.SchedulerFolders != null) || (options.ScanAllWindowsSchedulerTasks)) - { - result.FillFromWindowsScheduler(options); - } // if - - return result; - } // Build - - public void ApplyActions() - { - } // ApplyActions - - #region ICollection Members - - public void Add(TaskData item) - { - throw new NotSupportedException(); - } // Add - - public void Clear() - { - throw new NotSupportedException(); - } // Clear - - public bool Contains(TaskData item) - { - return List.Contains(item); - } // Constains - - public void CopyTo(TaskData[] array, int arrayIndex) - { - List.CopyTo(array, arrayIndex); - } // CopyTo - - public int Count - { - get { return List.Count; } - } // Count - - public bool IsReadOnly - { - get { return true; } - } // IsReadOnly - - public bool Remove(TaskData item) - { - throw new NotSupportedException(); - } // Remove - - #endregion - - #region IEnumerable Members - - public IEnumerator GetEnumerator() - { - return List.GetEnumerator(); - } // GetEnumerator - - #endregion - - #region IEnumerable Members - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return List.GetEnumerator(); - } // IEnumerable.GetEnumerator - - #endregion - - private void FillFromFolder(string recordTaskFolder) - { - foreach (var file in Directory.GetFiles(recordTaskFolder, "*.xml")) - { - TaskData task; - - task = null; - try - { - task = new TaskData(); - task.XmlFilePath = file; - task.Task = RecordTaskSerialization.LoadFromXmlFile(file); - task.SchedulerName = task.Task.Description.TaskSchedulerName; - task.SchedulerPath = task.Task.AdvancedSettings.TaskSchedulerFolder; - task.Status = TaskStatus.WindowsTaskMissing; - } - catch - { - // ignore - if (task != null) - { - task.Status = TaskStatus.XmlError; - } // if - } // try-catch - List.Add(task); - } // foreach file - } // FillFromFolder - - private void FillFromWindowsScheduler(TaskListBuildOptions options) - { - IDictionary tasks; - TaskService service; - TaskFolder schedulerFolder; - - tasks = new Dictionary(Count); - foreach (var task in List) - { - if (task.Status != TaskStatus.XmlError) - { - tasks.Add(task.SchedulerName, task); - } // if - } // foreach - - service = new TaskService(); - - if (options.ScanAllWindowsSchedulerTasks) - { - var schedulerTasks = service.AllTasks; - ProcessTasks(schedulerTasks, options, tasks); - } - else if (options.SchedulerFolders != null) - { - foreach (var folder in options.SchedulerFolders) - { - try - { - schedulerFolder = service.GetFolder(folder); - } - catch (FileNotFoundException) - { - continue; - } // try-catch - - var schedulerTasks = schedulerFolder.Tasks; - ProcessTasks(schedulerTasks, options, tasks); - } // foreach - } // if-else if - } // FillFromWindowsScheduler - - private void ProcessTasks(IEnumerable schedulerTasks, TaskListBuildOptions options, IDictionary tasks) - { - TaskData taskData; - RecordTask recordTask; - - foreach (var schedulerTask in schedulerTasks) - { - if (!Scheduler.IsRecordSchedulerTask(schedulerTask, out recordTask)) continue; - - if (!tasks.TryGetValue(schedulerTask.Name, out taskData)) - { - if (options.AddAllWindowsSchedulerTaks) - { - AddSchedulerTask(schedulerTask, recordTask); - } // if - } - else - { - if ((taskData.SchedulerName != schedulerTask.Name) || - (taskData.SchedulerPath != schedulerTask.Folder.Path)) - { - taskData.Status = TaskStatus.WindowsTaskMoved; - } - else - { - taskData.Status = (recordTask != null) ? TaskStatus.Ok : TaskStatus.WindowsTaskXmlError; - } // if-else - } // if-else - } // foreach - } // ProcessTasks - - private void AddSchedulerTask(Task schedulerTask, RecordTask recordTask) - { - TaskData taskData; - - taskData = new TaskData() - { - Status = TaskStatus.MissingXml, - SchedulerName = schedulerTask.Name, - SchedulerPath = schedulerTask.Folder.Path, - Task = recordTask - }; - - List.Add(taskData); - } // AddSchedulerTask - } // class TaskList -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.Services.Record.Properties; +using Microsoft.Win32.TaskScheduler; + +namespace IpTviewr.Services.Record +{ + public class TaskList: ICollection + { + protected IList List; + + public TaskList() + { + List = new List(); + } // TaskList + + public static TaskList Build(TaskListBuildOptions options) + { + TaskList result; + + if (options == null) throw new ArgumentNullException(); + if (string.IsNullOrEmpty(options.RecordTaskFolder)) throw new ArgumentNullException(); + if (!Directory.Exists(options.RecordTaskFolder)) throw new DirectoryNotFoundException(options.RecordTaskFolder); + + + result = new TaskList(); + result.FillFromFolder(options.RecordTaskFolder); + if ((options.SchedulerFolders != null) || (options.ScanAllWindowsSchedulerTasks)) + { + result.FillFromWindowsScheduler(options); + } // if + + return result; + } // Build + + public void ApplyActions() + { + } // ApplyActions + + #region ICollection Members + + public void Add(TaskData item) + { + throw new NotSupportedException(); + } // Add + + public void Clear() + { + throw new NotSupportedException(); + } // Clear + + public bool Contains(TaskData item) + { + return List.Contains(item); + } // Constains + + public void CopyTo(TaskData[] array, int arrayIndex) + { + List.CopyTo(array, arrayIndex); + } // CopyTo + + public int Count + { + get { return List.Count; } + } // Count + + public bool IsReadOnly + { + get { return true; } + } // IsReadOnly + + public bool Remove(TaskData item) + { + throw new NotSupportedException(); + } // Remove + + #endregion + + #region IEnumerable Members + + public IEnumerator GetEnumerator() + { + return List.GetEnumerator(); + } // GetEnumerator + + #endregion + + #region IEnumerable Members + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return List.GetEnumerator(); + } // IEnumerable.GetEnumerator + + #endregion + + private void FillFromFolder(string recordTaskFolder) + { + foreach (var file in Directory.GetFiles(recordTaskFolder, "*.xml")) + { + TaskData task; + + task = null; + try + { + task = new TaskData(); + task.XmlFilePath = file; + task.Task = RecordTaskSerialization.LoadFromXmlFile(file); + task.SchedulerName = task.Task.Description.TaskSchedulerName; + task.SchedulerPath = task.Task.AdvancedSettings.TaskSchedulerFolder; + task.Status = TaskStatus.WindowsTaskMissing; + } + catch + { + // ignore + if (task != null) + { + task.Status = TaskStatus.XmlError; + } // if + } // try-catch + List.Add(task); + } // foreach file + } // FillFromFolder + + private void FillFromWindowsScheduler(TaskListBuildOptions options) + { + IDictionary tasks; + TaskService service; + TaskFolder schedulerFolder; + + tasks = new Dictionary(Count); + foreach (var task in List) + { + if (task.Status != TaskStatus.XmlError) + { + tasks.Add(task.SchedulerName, task); + } // if + } // foreach + + service = new TaskService(); + + if (options.ScanAllWindowsSchedulerTasks) + { + var schedulerTasks = service.AllTasks; + ProcessTasks(schedulerTasks, options, tasks); + } + else if (options.SchedulerFolders != null) + { + foreach (var folder in options.SchedulerFolders) + { + try + { + schedulerFolder = service.GetFolder(folder); + } + catch (FileNotFoundException) + { + continue; + } // try-catch + + var schedulerTasks = schedulerFolder.Tasks; + ProcessTasks(schedulerTasks, options, tasks); + } // foreach + } // if-else if + } // FillFromWindowsScheduler + + private void ProcessTasks(IEnumerable schedulerTasks, TaskListBuildOptions options, IDictionary tasks) + { + TaskData taskData; + RecordTask recordTask; + + foreach (var schedulerTask in schedulerTasks) + { + if (!Scheduler.IsRecordSchedulerTask(schedulerTask, out recordTask)) continue; + + if (!tasks.TryGetValue(schedulerTask.Name, out taskData)) + { + if (options.AddAllWindowsSchedulerTaks) + { + AddSchedulerTask(schedulerTask, recordTask); + } // if + } + else + { + if ((taskData.SchedulerName != schedulerTask.Name) || + (taskData.SchedulerPath != schedulerTask.Folder.Path)) + { + taskData.Status = TaskStatus.WindowsTaskMoved; + } + else + { + taskData.Status = (recordTask != null) ? TaskStatus.Ok : TaskStatus.WindowsTaskXmlError; + } // if-else + } // if-else + } // foreach + } // ProcessTasks + + private void AddSchedulerTask(Task schedulerTask, RecordTask recordTask) + { + TaskData taskData; + + taskData = new TaskData() + { + Status = TaskStatus.MissingXml, + SchedulerName = schedulerTask.Name, + SchedulerPath = schedulerTask.Folder.Path, + Task = recordTask + }; + + List.Add(taskData); + } // AddSchedulerTask + } // class TaskList +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs b/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs index fc98af7d..1e913ee6 100644 --- a/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs +++ b/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs @@ -1,34 +1,34 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.Record -{ - public class TaskListBuildOptions - { - public string RecordTaskFolder - { - get; - set; - } // RecordTaskFolder - - public IEnumerable SchedulerFolders - { - get; - set; - } // SchedulerFolders - - public bool ScanAllWindowsSchedulerTasks - { - get; - set; - } // ScanAllWindowsSchedulerTasks - - public bool AddAllWindowsSchedulerTaks - { - get; - set; - } // AddAllWindowsSchedulerTaks - } // class TaskListBuildOptions -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Services.Record +{ + public class TaskListBuildOptions + { + public string RecordTaskFolder + { + get; + set; + } // RecordTaskFolder + + public IEnumerable SchedulerFolders + { + get; + set; + } // SchedulerFolders + + public bool ScanAllWindowsSchedulerTasks + { + get; + set; + } // ScanAllWindowsSchedulerTasks + + public bool AddAllWindowsSchedulerTaks + { + get; + set; + } // AddAllWindowsSchedulerTaks + } // class TaskListBuildOptions +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskStatus.cs b/1.5 'Kruger 60'/Services.Record/TaskStatus.cs index 6ab36aaf..71bb356f 100644 --- a/1.5 'Kruger 60'/Services.Record/TaskStatus.cs +++ b/1.5 'Kruger 60'/Services.Record/TaskStatus.cs @@ -1,20 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.Record -{ - public enum TaskStatus - { - Ok = 0, - MissingXml, - XmlError, - WindowsTaskMissing, - WindowsTaskXmlError, - WindowsTaskMoved, - } // enum TaskStatus -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Services.Record +{ + public enum TaskStatus + { + Ok = 0, + MissingXml, + XmlError, + WindowsTaskMissing, + WindowsTaskXmlError, + WindowsTaskMoved, + } // enum TaskStatus +} // namespace diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs b/1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs index 3884b231..0786593e 100644 --- a/1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs +++ b/1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs @@ -1,311 +1,311 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlServerCe; -using System.IO; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.SqlServerCE -{ - public class DbServices - { - public delegate TData LoadDataAction(TDbData deserializedData, SqlCeDataReader reader); - - public static T Load(string dbFile, SqlCeCommand loadCommand, string xmlDataColumnName) where T : class - { - using (var cn = GetConnection(dbFile)) - { - var result = Load(cn, loadCommand, xmlDataColumnName); - cn.Close(); - - return result; - } // using cn - } // Load - - public static T Load(SqlCeConnection cn, SqlCeCommand loadCommand, string xmlDataColumnName) where T : class - { - byte[] data; - - using (var cmd = loadCommand) - { - if (cn != null) loadCommand.Connection = cn; - using (var reader = cmd.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SingleRow)) - { - int index = reader.GetOrdinal(xmlDataColumnName); - reader.Read(); - var value = reader.GetValue(index); - data = (byte[])value; - } // using reader - } // using cmd - - using (var memory = new MemoryStream(data)) - { - return XmlSerialization.Deserialize(memory); - } // using - } // Load - - public static T LoadData(SqlCeDataReader reader, int dataIndex, int dataAltIdex) where T : class - { - if (!reader.IsDBNull(0)) - { - var data = reader.GetSqlBinary(dataIndex).Value; - return XmlSerialization.Deserialize(data); - } - else if (!reader.IsDBNull(1)) - { - var data = reader.GetSqlBinary(dataAltIdex).Value; - return XmlSerialization.Deserialize(data); - } - else - { - return null; - } // if-else - } // LoadData - - public static TData LoadData(SqlCeDataReader reader, int dataIndex, int dataAltIdex, LoadDataAction load) - where TDbData : class - where TData : class - { - var data = LoadData(reader, dataIndex, dataAltIdex); - return load(data, reader); - } // LoadData - - public static int Save(string dbFile, SqlCeCommand saveCommand, string xmlDataParameterName, T obj, bool disposeCommand = true) where T : class - { - using (var cn = GetConnection(dbFile)) - { - var result = Save(cn, saveCommand, xmlDataParameterName, obj, disposeCommand); - cn.Close(); - - return result; - } // using cn - } // Save - - /// - /// Serializes an object as XML data and stores it in the given database - /// - /// Type of the object to save - /// The connection to the database - /// The command to excute a save action - /// Name of the parameter to store the data - /// The object to save as XML data - /// Indicates if the command is to be disposed after its execution or not - /// Number of rows affected - public static int Save(SqlCeConnection cn, SqlCeCommand saveCommand, string xmlDataParameterName, T obj, bool disposeCommand = true) where T : class - { - byte[] data; - - if (obj == null) - { - data = null; - } - else - { - using (var memory = new MemoryStream()) - { - XmlSerialization.Serialize(memory, obj); - data = memory.ToArray(); - } // using memory - } // if-else - - if (cn != null) saveCommand.Connection = cn; - saveCommand.Parameters[xmlDataParameterName].Value = ((object)data) ?? DBNull.Value; - - if (disposeCommand) - { - using (var cmd = saveCommand) - { - return cmd.ExecuteNonQuery(); - } // using cmd - } - else - { - return saveCommand.ExecuteNonQuery(); - } // if-ele - } // Save - - /// - /// Serializes an object as XML data and stores it in the given database - /// - /// Type of the object to save - /// The connection to the database - /// The command to excute a save action - /// Name of the parameter to store the data - /// Name of the parameter to alternatively store the data - /// The object to save as XML data - /// Indicates if the command is to be disposed after its execution or not - /// Number of rows affected - /// - /// This method allows to overcome a SQL Server CE 4.0 limitation/problem/issue. - /// Two columns are required. One must be a varbinary/binary and the second one an image. - /// If the serialized XML data fits in the first column, data is stored there; otherwise its stored in - /// the image column, and the other column is set to DBNull. - /// This allows to minimize database size, as image columns use at least one page (4096 bytes), - /// even for storing a single byte of information, as CE trims only at the page level. - /// - public static int Save(SqlCeConnection cn, SqlCeCommand saveCommand, string xmlDataParameterName, string xmlDataAlternativeParameterName, T obj, bool disposeCommand = true) where T : class - { - byte[] data; - - if (obj == null) - { - data = null; - } - else - { - using (var memory = new MemoryStream()) - { - XmlSerialization.Serialize(memory, obj); - data = memory.ToArray(); - } // using memory - } // if-else - - if (cn != null) saveCommand.Connection = cn; - if (data == null) - { - saveCommand.Parameters[xmlDataParameterName].Value = DBNull.Value; - saveCommand.Parameters[xmlDataAlternativeParameterName].Value = DBNull.Value; - } - else - { - var dataParam = saveCommand.Parameters[xmlDataParameterName]; - if (data.Length <= dataParam.Size) - { - dataParam.Value = data; - saveCommand.Parameters[xmlDataAlternativeParameterName].Value = DBNull.Value; - } - else - { - dataParam.Value = DBNull.Value; - saveCommand.Parameters[xmlDataAlternativeParameterName].Value = data; - } // if-else - } // if-else - - if (disposeCommand) - { - using (var cmd = saveCommand) - { - return cmd.ExecuteNonQuery(); - } // using cmd - } - else - { - return saveCommand.ExecuteNonQuery(); - } // if-ele - } // Save - - public static int Save(string dbFile, SqlCeCommand saveCommand, string xmlData1ParameterName, T1 obj1, string xmlData2ParameterName, T2 obj2, bool disposeCommand = true) - where T1 : class - where T2 : class - { - using (var cn = GetConnection(dbFile)) - { - var result = Save(cn, saveCommand, xmlData1ParameterName, obj1, xmlData2ParameterName, obj2, disposeCommand); - cn.Close(); - - return result; - } // using cn - } // Save - - public static int Save(SqlCeConnection cn, SqlCeCommand saveCommand, string xmlData1ParameterName, T1 obj1, string xmlData2ParameterName, T2 obj2, bool disposeCommand = true) - where T1 : class - where T2 : class - { - byte[] data1, data2; - - if (obj1 == null) - { - data1 = null; - } - else - { - using (var memory = new MemoryStream()) - { - XmlSerialization.Serialize(memory, obj1); - data1 = memory.ToArray(); - } // using memory - } // if - - if (obj2 == null) - { - data2 = null; - } - else - { - using (var memory = new MemoryStream()) - { - XmlSerialization.Serialize(memory, obj2); - data2 = memory.ToArray(); - } // using memory - } // if-else - - if (cn != null) saveCommand.Connection = cn; - saveCommand.Parameters[xmlData1ParameterName].Value = ((object)data1) ?? DBNull.Value; - saveCommand.Parameters[xmlData2ParameterName].Value = ((object)data2) ?? DBNull.Value; - - if (disposeCommand) - { - using (var cmd = saveCommand) - { - - return cmd.ExecuteNonQuery(); - } // using cmd - } - else - { - return saveCommand.ExecuteNonQuery(); - } // if-else - } // Save - - public static SqlCeConnection GetConnection(string dbFile) - { - SqlCeConnectionStringBuilder builder; - - builder = new SqlCeConnectionStringBuilder(); - builder.DataSource = dbFile; - builder.Password = "movistartv.codeplex.com"; - - var cn = new SqlCeConnection(builder.ConnectionString); - cn.Open(); - - return cn; - } // GetConnection - - public static int Execute(string dbFile, SqlCeCommand cmd) - { - using (var cn = GetConnection(dbFile)) - { - var result = Execute(cn, cmd); - cn.Close(); - - return result; - } // using cn - } // Execute - - public static int Execute(SqlCeConnection cn, SqlCeCommand cmd) - { - if (cn != null) cmd.Connection = cn; - - return cmd.ExecuteNonQuery(); - } // Execute - - public static SqlCeDataReader ExecuteReader(string dbFile, SqlCeCommand cmd, CommandBehavior options = CommandBehavior.Default) - { - var cn = GetConnection(dbFile); - cmd.Connection = cn; - return cmd.ExecuteReader(CommandBehavior.CloseConnection | options); - } // ExecuteReader - - public static SqlCeDataReader ExecuteReader(SqlCeConnection cn, SqlCeCommand cmd, CommandBehavior options = CommandBehavior.Default) - { - if (cn != null) cmd.Connection = cn; - - return cmd.ExecuteReader(options); - } // ExecuteReader - } // class DbServices -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Serialization; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlServerCe; +using System.IO; +using System.Linq; +using System.Text; + +namespace IpTviewr.Services.SqlServerCE +{ + public class DbServices + { + public delegate TData LoadDataAction(TDbData deserializedData, SqlCeDataReader reader); + + public static T Load(string dbFile, SqlCeCommand loadCommand, string xmlDataColumnName) where T : class + { + using (var cn = GetConnection(dbFile)) + { + var result = Load(cn, loadCommand, xmlDataColumnName); + cn.Close(); + + return result; + } // using cn + } // Load + + public static T Load(SqlCeConnection cn, SqlCeCommand loadCommand, string xmlDataColumnName) where T : class + { + byte[] data; + + using (var cmd = loadCommand) + { + if (cn != null) loadCommand.Connection = cn; + using (var reader = cmd.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SingleRow)) + { + int index = reader.GetOrdinal(xmlDataColumnName); + reader.Read(); + var value = reader.GetValue(index); + data = (byte[])value; + } // using reader + } // using cmd + + using (var memory = new MemoryStream(data)) + { + return XmlSerialization.Deserialize(memory); + } // using + } // Load + + public static T LoadData(SqlCeDataReader reader, int dataIndex, int dataAltIdex) where T : class + { + if (!reader.IsDBNull(0)) + { + var data = reader.GetSqlBinary(dataIndex).Value; + return XmlSerialization.Deserialize(data); + } + else if (!reader.IsDBNull(1)) + { + var data = reader.GetSqlBinary(dataAltIdex).Value; + return XmlSerialization.Deserialize(data); + } + else + { + return null; + } // if-else + } // LoadData + + public static TData LoadData(SqlCeDataReader reader, int dataIndex, int dataAltIdex, LoadDataAction load) + where TDbData : class + where TData : class + { + var data = LoadData(reader, dataIndex, dataAltIdex); + return load(data, reader); + } // LoadData + + public static int Save(string dbFile, SqlCeCommand saveCommand, string xmlDataParameterName, T obj, bool disposeCommand = true) where T : class + { + using (var cn = GetConnection(dbFile)) + { + var result = Save(cn, saveCommand, xmlDataParameterName, obj, disposeCommand); + cn.Close(); + + return result; + } // using cn + } // Save + + /// + /// Serializes an object as XML data and stores it in the given database + /// + /// Type of the object to save + /// The connection to the database + /// The command to excute a save action + /// Name of the parameter to store the data + /// The object to save as XML data + /// Indicates if the command is to be disposed after its execution or not + /// Number of rows affected + public static int Save(SqlCeConnection cn, SqlCeCommand saveCommand, string xmlDataParameterName, T obj, bool disposeCommand = true) where T : class + { + byte[] data; + + if (obj == null) + { + data = null; + } + else + { + using (var memory = new MemoryStream()) + { + XmlSerialization.Serialize(memory, obj); + data = memory.ToArray(); + } // using memory + } // if-else + + if (cn != null) saveCommand.Connection = cn; + saveCommand.Parameters[xmlDataParameterName].Value = ((object)data) ?? DBNull.Value; + + if (disposeCommand) + { + using (var cmd = saveCommand) + { + return cmd.ExecuteNonQuery(); + } // using cmd + } + else + { + return saveCommand.ExecuteNonQuery(); + } // if-ele + } // Save + + /// + /// Serializes an object as XML data and stores it in the given database + /// + /// Type of the object to save + /// The connection to the database + /// The command to excute a save action + /// Name of the parameter to store the data + /// Name of the parameter to alternatively store the data + /// The object to save as XML data + /// Indicates if the command is to be disposed after its execution or not + /// Number of rows affected + /// + /// This method allows to overcome a SQL Server CE 4.0 limitation/problem/issue. + /// Two columns are required. One must be a varbinary/binary and the second one an image. + /// If the serialized XML data fits in the first column, data is stored there; otherwise its stored in + /// the image column, and the other column is set to DBNull. + /// This allows to minimize database size, as image columns use at least one page (4096 bytes), + /// even for storing a single byte of information, as CE trims only at the page level. + /// + public static int Save(SqlCeConnection cn, SqlCeCommand saveCommand, string xmlDataParameterName, string xmlDataAlternativeParameterName, T obj, bool disposeCommand = true) where T : class + { + byte[] data; + + if (obj == null) + { + data = null; + } + else + { + using (var memory = new MemoryStream()) + { + XmlSerialization.Serialize(memory, obj); + data = memory.ToArray(); + } // using memory + } // if-else + + if (cn != null) saveCommand.Connection = cn; + if (data == null) + { + saveCommand.Parameters[xmlDataParameterName].Value = DBNull.Value; + saveCommand.Parameters[xmlDataAlternativeParameterName].Value = DBNull.Value; + } + else + { + var dataParam = saveCommand.Parameters[xmlDataParameterName]; + if (data.Length <= dataParam.Size) + { + dataParam.Value = data; + saveCommand.Parameters[xmlDataAlternativeParameterName].Value = DBNull.Value; + } + else + { + dataParam.Value = DBNull.Value; + saveCommand.Parameters[xmlDataAlternativeParameterName].Value = data; + } // if-else + } // if-else + + if (disposeCommand) + { + using (var cmd = saveCommand) + { + return cmd.ExecuteNonQuery(); + } // using cmd + } + else + { + return saveCommand.ExecuteNonQuery(); + } // if-ele + } // Save + + public static int Save(string dbFile, SqlCeCommand saveCommand, string xmlData1ParameterName, T1 obj1, string xmlData2ParameterName, T2 obj2, bool disposeCommand = true) + where T1 : class + where T2 : class + { + using (var cn = GetConnection(dbFile)) + { + var result = Save(cn, saveCommand, xmlData1ParameterName, obj1, xmlData2ParameterName, obj2, disposeCommand); + cn.Close(); + + return result; + } // using cn + } // Save + + public static int Save(SqlCeConnection cn, SqlCeCommand saveCommand, string xmlData1ParameterName, T1 obj1, string xmlData2ParameterName, T2 obj2, bool disposeCommand = true) + where T1 : class + where T2 : class + { + byte[] data1, data2; + + if (obj1 == null) + { + data1 = null; + } + else + { + using (var memory = new MemoryStream()) + { + XmlSerialization.Serialize(memory, obj1); + data1 = memory.ToArray(); + } // using memory + } // if + + if (obj2 == null) + { + data2 = null; + } + else + { + using (var memory = new MemoryStream()) + { + XmlSerialization.Serialize(memory, obj2); + data2 = memory.ToArray(); + } // using memory + } // if-else + + if (cn != null) saveCommand.Connection = cn; + saveCommand.Parameters[xmlData1ParameterName].Value = ((object)data1) ?? DBNull.Value; + saveCommand.Parameters[xmlData2ParameterName].Value = ((object)data2) ?? DBNull.Value; + + if (disposeCommand) + { + using (var cmd = saveCommand) + { + + return cmd.ExecuteNonQuery(); + } // using cmd + } + else + { + return saveCommand.ExecuteNonQuery(); + } // if-else + } // Save + + public static SqlCeConnection GetConnection(string dbFile) + { + SqlCeConnectionStringBuilder builder; + + builder = new SqlCeConnectionStringBuilder(); + builder.DataSource = dbFile; + builder.Password = "movistartv.codeplex.com"; + + var cn = new SqlCeConnection(builder.ConnectionString); + cn.Open(); + + return cn; + } // GetConnection + + public static int Execute(string dbFile, SqlCeCommand cmd) + { + using (var cn = GetConnection(dbFile)) + { + var result = Execute(cn, cmd); + cn.Close(); + + return result; + } // using cn + } // Execute + + public static int Execute(SqlCeConnection cn, SqlCeCommand cmd) + { + if (cn != null) cmd.Connection = cn; + + return cmd.ExecuteNonQuery(); + } // Execute + + public static SqlCeDataReader ExecuteReader(string dbFile, SqlCeCommand cmd, CommandBehavior options = CommandBehavior.Default) + { + var cn = GetConnection(dbFile); + cmd.Connection = cn; + return cmd.ExecuteReader(CommandBehavior.CloseConnection | options); + } // ExecuteReader + + public static SqlCeDataReader ExecuteReader(SqlCeConnection cn, SqlCeCommand cmd, CommandBehavior options = CommandBehavior.Default) + { + if (cn != null) cmd.Connection = cn; + + return cmd.ExecuteReader(options); + } // ExecuteReader + } // class DbServices +} // namespace diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs index 369ff7c5..1f917f81 100644 --- a/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.SqlServerCE")] -[assembly: AssemblyDescription("Project.IpTv.Services.SqlServerCE")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ffa1f30f-60ab-4ea3-93e3-e5e43a64c3a1")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.SqlServerCE")] +[assembly: AssemblyDescription("IpTviewr.Services.SqlServerCE")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ffa1f30f-60ab-4ea3-93e3-e5e43a64c3a1")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj b/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj index 39f7610a..4f845c01 100644 --- a/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj +++ b/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj @@ -1,72 +1,72 @@ - - - - - Debug - AnyCPU - {3A053F34-4EDF-4071-B966-923255A0AE14} - Library - Properties - Project.IpTv.Services.SqlServerCE - Services.SqlServerCE - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - - + + + + + Debug + AnyCPU + {3A053F34-4EDF-4071-B966-923255A0AE14} + Library + Properties + IpTviewr.Services.SqlServerCE + Services.SqlServerCE + v3.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + False + ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs index 8457e771..47d8f22f 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs @@ -1,166 +1,166 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(TextBox))] - public class FilenameTextBox : TextBox - { - private char[] InvalidCharacters; - private string InvalidCharacterText; - private bool ManualUpdateOfValue; - - public FilenameTextBox() - { - InvalidCharacters = Path.GetInvalidFileNameChars(); - } // constructor - - public static string RemoveOffendingChars(string text, char[] offendingChars) - { - bool modified; - - return RemoveOffendingChars(text, offendingChars, null, out modified); - } // RemoveOffendingChars - - public static string RemoveOffendingChars(string text, char[] offendingChars, string replacementText) - { - bool modified; - - return RemoveOffendingChars(text, offendingChars, replacementText, out modified); - } // RemoveOffendingChars - - public static string RemoveOffendingChars(string text, char[] offendingChars, string replacementText, out bool modified) - { - if ((offendingChars == null) || (offendingChars.Length == 0)) - { - throw new ArgumentException("offendingChars"); - } // if - - return InternalRemoveOffendingChars(text, offendingChars, replacementText, out modified); - } // RemoveOffendingChars - - /// - /// Sets the text and removes invalid characters if needed - /// - /// Text to set - public void SetText(string text, bool raiseTextChangedEvent) - { - ManualUpdateOfValue = true; - this.Text = text; - RemoveOffendingChars(false); - ManualUpdateOfValue = false; - - if (raiseTextChangedEvent) - { - base.OnTextChanged(EventArgs.Empty); - } // if - } // SetText - - protected override void OnTextChanged(EventArgs e) - { - if (ManualUpdateOfValue) return; - if (RemoveOffendingChars(true)) return; - - base.OnTextChanged(e); - } // OnTextChanged - - private void DisplayInvalidCharacterWarning() - { - if (InvalidCharacterText == null) - { - StringBuilder buffer; - - buffer = new StringBuilder(); - buffer.Append(Properties.Filename.InputInvalidChar); - buffer.AppendLine(); - buffer.AppendLine(); - - var invalid = from c in InvalidCharacters - where c >= 31 - orderby c - select c; - - foreach (var ch in invalid) - { - buffer.Append(' '); - buffer.Append(ch); - } // foreach - InvalidCharacterText = buffer.ToString(); - } // if - - MessageBox.Show(this, InvalidCharacterText, Properties.Filename.InputInvalidCharCaption, - MessageBoxButtons.OK, MessageBoxIcon.Warning); - } // DisplayInvalidCharacterWarning - - private bool RemoveOffendingChars(bool displayWarning) - { - bool modified; - int caretPos; - - var newText = InternalRemoveOffendingChars(this.Text, InvalidCharacters, null, out modified); - if (!modified) return false; - - if (displayWarning) - { - DisplayInvalidCharacterWarning(); - } // if - - ManualUpdateOfValue = true; - caretPos = this.SelectionStart; - this.Text = newText; - this.SelectionStart = (caretPos <= 0)? 0 : caretPos - 1; - ManualUpdateOfValue = false; - - return true; - } // RemoveOffendingChars - - private static string InternalRemoveOffendingChars(string text, char[] offendingChars, string replacementString, out bool modified) - { - StringBuilder buffer; - int startIndex, index; - - modified = false; - - // do nothing is null or empty - if (string.IsNullOrEmpty(text)) return text; - - // quick test: any offending char? - index = text.IndexOfAny(offendingChars); - if (index < 0) return text; - - buffer = new StringBuilder(text.Length * 2); - startIndex = 0; - while (index >= 0) - { - if (index != startIndex) - { - buffer.Append(text.Substring(startIndex, (index - startIndex))); - if (replacementString != null) - { - buffer.Append(replacementString); - } // if - } // if - - startIndex = index + 1; - index = (startIndex < text.Length) ? text.IndexOfAny(offendingChars, startIndex) : -1; - } // while - - // add final text - if (startIndex < text.Length) - { - buffer.Append(text.Substring(startIndex, text.Length - startIndex)); - } // if - - modified = true; - return buffer.ToString(); - } // RemoveOffendingChars - } // class FilenameTextBox -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(TextBox))] + public class FilenameTextBox : TextBox + { + private char[] InvalidCharacters; + private string InvalidCharacterText; + private bool ManualUpdateOfValue; + + public FilenameTextBox() + { + InvalidCharacters = Path.GetInvalidFileNameChars(); + } // constructor + + public static string RemoveOffendingChars(string text, char[] offendingChars) + { + bool modified; + + return RemoveOffendingChars(text, offendingChars, null, out modified); + } // RemoveOffendingChars + + public static string RemoveOffendingChars(string text, char[] offendingChars, string replacementText) + { + bool modified; + + return RemoveOffendingChars(text, offendingChars, replacementText, out modified); + } // RemoveOffendingChars + + public static string RemoveOffendingChars(string text, char[] offendingChars, string replacementText, out bool modified) + { + if ((offendingChars == null) || (offendingChars.Length == 0)) + { + throw new ArgumentException("offendingChars"); + } // if + + return InternalRemoveOffendingChars(text, offendingChars, replacementText, out modified); + } // RemoveOffendingChars + + /// + /// Sets the text and removes invalid characters if needed + /// + /// Text to set + public void SetText(string text, bool raiseTextChangedEvent) + { + ManualUpdateOfValue = true; + this.Text = text; + RemoveOffendingChars(false); + ManualUpdateOfValue = false; + + if (raiseTextChangedEvent) + { + base.OnTextChanged(EventArgs.Empty); + } // if + } // SetText + + protected override void OnTextChanged(EventArgs e) + { + if (ManualUpdateOfValue) return; + if (RemoveOffendingChars(true)) return; + + base.OnTextChanged(e); + } // OnTextChanged + + private void DisplayInvalidCharacterWarning() + { + if (InvalidCharacterText == null) + { + StringBuilder buffer; + + buffer = new StringBuilder(); + buffer.Append(Properties.Filename.InputInvalidChar); + buffer.AppendLine(); + buffer.AppendLine(); + + var invalid = from c in InvalidCharacters + where c >= 31 + orderby c + select c; + + foreach (var ch in invalid) + { + buffer.Append(' '); + buffer.Append(ch); + } // foreach + InvalidCharacterText = buffer.ToString(); + } // if + + MessageBox.Show(this, InvalidCharacterText, Properties.Filename.InputInvalidCharCaption, + MessageBoxButtons.OK, MessageBoxIcon.Warning); + } // DisplayInvalidCharacterWarning + + private bool RemoveOffendingChars(bool displayWarning) + { + bool modified; + int caretPos; + + var newText = InternalRemoveOffendingChars(this.Text, InvalidCharacters, null, out modified); + if (!modified) return false; + + if (displayWarning) + { + DisplayInvalidCharacterWarning(); + } // if + + ManualUpdateOfValue = true; + caretPos = this.SelectionStart; + this.Text = newText; + this.SelectionStart = (caretPos <= 0)? 0 : caretPos - 1; + ManualUpdateOfValue = false; + + return true; + } // RemoveOffendingChars + + private static string InternalRemoveOffendingChars(string text, char[] offendingChars, string replacementString, out bool modified) + { + StringBuilder buffer; + int startIndex, index; + + modified = false; + + // do nothing is null or empty + if (string.IsNullOrEmpty(text)) return text; + + // quick test: any offending char? + index = text.IndexOfAny(offendingChars); + if (index < 0) return text; + + buffer = new StringBuilder(text.Length * 2); + startIndex = 0; + while (index >= 0) + { + if (index != startIndex) + { + buffer.Append(text.Substring(startIndex, (index - startIndex))); + if (replacementString != null) + { + buffer.Append(replacementString); + } // if + } // if + + startIndex = index + 1; + index = (startIndex < text.Length) ? text.IndexOfAny(offendingChars, startIndex) : -1; + } // while + + // add final text + if (startIndex < text.Length) + { + buffer.Append(text.Substring(startIndex, text.Length - startIndex)); + } // if + + modified = true; + return buffer.ToString(); + } // RemoveOffendingChars + } // class FilenameTextBox +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs index cdb08737..777febf3 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs @@ -1,195 +1,195 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Controls -{ - public class ListItemsManager - { - private ListBox ListBox; - private Control RemoveControl, UpControl, DownControl; - private IDictionary Dictionary; - - public ListItemsManager(ListBox listBox, Control removeControl, Control upControl, Control downControl) - { - if ((listBox == null) || (removeControl == null) || (upControl == null) || (downControl == null)) - { - throw new ArgumentNullException(); - } // if - - if ((listBox.SelectionMode == SelectionMode.MultiSimple) || (listBox.SelectionMode == SelectionMode.MultiExtended)) - { - throw new ArgumentException("listBox"); - } // if - - ListBox = listBox; - RemoveControl = removeControl; - UpControl = upControl; - DownControl = downControl; - - RemoveControl.Enabled = false; - UpControl.Enabled = false; - DownControl.Enabled = false; - - ListBox.DisplayMember = "Value"; - ListBox.ValueMember = "Key"; - ListBox.SelectedIndexChanged += ListBox_SelectedIndexChanged; - } // constructor - - public void SetValueDictionary(IList> items, IEqualityComparer comparer) - { - if (items == null) throw new ArgumentNullException("items"); - - Dictionary = new Dictionary(items.Count, comparer); - foreach (var item in items) - { - Dictionary.Add(item); - } // if - } // SetValueDictionary - - public void SetValueDictionary(IDictionary dictionary) - { - if (dictionary == null) throw new ArgumentNullException("dictionary"); - Dictionary = dictionary; - } // SetValueDictionary - - public int Add(TValue value, string text) - { - return Add(new KeyValuePair(value, text)); - } // Add - - public int Add(KeyValuePair item) - { - var index = ListBox.Items.Add(item); - ListBox.SelectedIndex = index; - - return index; - } // Add - - public void Add(IEnumerable> items) - { - Add(items.ToArray()); - } // Add - - public void Add(IList> items) - { - var add = new object[items.Count]; - for (int index = 0; index < items.Count;index++ ) - { - add[index] = items[index]; - } // for - AddItems(add); - } // Add - - public void Add(KeyValuePair[] items) - { - var add = new object[items.Length]; - Array.Copy(items, add, items.Length); - AddItems(add); - } // Add - - public int Add(TValue value) - { - if (Dictionary == null) throw new InvalidOperationException(); - - return Add(value, Dictionary[value]); - } // Add - - public void Add(IList values) - { - if (Dictionary == null) throw new InvalidOperationException(); - - var add = new object[values.Count]; - for (int index = 0; index < values.Count; index++) - { - var value = values[index]; - add[index] = new KeyValuePair(value, Dictionary[value]); - } // for - AddItems(add); - } // Add - - public List GetListValues() - { - var count = ListBox.Items.Count; - var result = new List(count); - - for (int index = 0; index < count; index++) - { - var item = (KeyValuePair)ListBox.Items[index]; - result.Add(item.Key); - } // for - - return result; - } // GetListValues - - public IList> GetListItems() - { - var count = ListBox.Items.Count; - var result = new List>(count); - - for (int index = 0; index < count; index++) - { - var item = (KeyValuePair)ListBox.Items[index]; - result.Add(item); - } // for - - return result; - } // GetListItems - - public void RemoveSelection() - { - var index = ListBox.SelectedIndex; - if (index < 0) throw new InvalidOperationException(); - - ListBox.Items.RemoveAt(index); - - if (index >= ListBox.Items.Count) index -= 1; - ListBox.SelectedIndex = index; - } // RemoveSelection - - public void MoveSelectionUp() - { - var index = ListBox.SelectedIndex; - if (index < 0) throw new InvalidOperationException(); - - var upItem = ListBox.Items[index - 1]; - var current = ListBox.Items[index]; - - ListBox.Items[index - 1] = current; - ListBox.Items[index] = upItem; - - ListBox.SelectedIndex = index - 1; - } // MoveUp - - public void MoveSelectionDown() - { - var index = ListBox.SelectedIndex; - if ((index +1) >= ListBox.Items.Count) throw new InvalidOperationException(); - - var current = ListBox.Items[index]; - var downItem = ListBox.Items[index + 1]; - - ListBox.Items[index + 1] = current; - ListBox.Items[index] = downItem; - - ListBox.SelectedIndex = index + 1; - } // MoveDown - - private void ListBox_SelectedIndexChanged(object sender, EventArgs e) - { - var index = ListBox.SelectedIndex; - RemoveControl.Enabled = (index >= 0) && (ListBox.Items.Count > 0); - UpControl.Enabled = (index > 0) && (ListBox.Items.Count > 1); - DownControl.Enabled = ((index + 1) < ListBox.Items.Count); - } // ListBox_SelectedIndexChanged - - private void AddItems(object[] items) - { - var index = ListBox.SelectedIndex; - ListBox.Items.AddRange(items); - ListBox.SelectedIndex = index; - } // AddItems - } // class ListItemsManager -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + public class ListItemsManager + { + private ListBox ListBox; + private Control RemoveControl, UpControl, DownControl; + private IDictionary Dictionary; + + public ListItemsManager(ListBox listBox, Control removeControl, Control upControl, Control downControl) + { + if ((listBox == null) || (removeControl == null) || (upControl == null) || (downControl == null)) + { + throw new ArgumentNullException(); + } // if + + if ((listBox.SelectionMode == SelectionMode.MultiSimple) || (listBox.SelectionMode == SelectionMode.MultiExtended)) + { + throw new ArgumentException("listBox"); + } // if + + ListBox = listBox; + RemoveControl = removeControl; + UpControl = upControl; + DownControl = downControl; + + RemoveControl.Enabled = false; + UpControl.Enabled = false; + DownControl.Enabled = false; + + ListBox.DisplayMember = "Value"; + ListBox.ValueMember = "Key"; + ListBox.SelectedIndexChanged += ListBox_SelectedIndexChanged; + } // constructor + + public void SetValueDictionary(IList> items, IEqualityComparer comparer) + { + if (items == null) throw new ArgumentNullException("items"); + + Dictionary = new Dictionary(items.Count, comparer); + foreach (var item in items) + { + Dictionary.Add(item); + } // if + } // SetValueDictionary + + public void SetValueDictionary(IDictionary dictionary) + { + if (dictionary == null) throw new ArgumentNullException("dictionary"); + Dictionary = dictionary; + } // SetValueDictionary + + public int Add(TValue value, string text) + { + return Add(new KeyValuePair(value, text)); + } // Add + + public int Add(KeyValuePair item) + { + var index = ListBox.Items.Add(item); + ListBox.SelectedIndex = index; + + return index; + } // Add + + public void Add(IEnumerable> items) + { + Add(items.ToArray()); + } // Add + + public void Add(IList> items) + { + var add = new object[items.Count]; + for (int index = 0; index < items.Count;index++ ) + { + add[index] = items[index]; + } // for + AddItems(add); + } // Add + + public void Add(KeyValuePair[] items) + { + var add = new object[items.Length]; + Array.Copy(items, add, items.Length); + AddItems(add); + } // Add + + public int Add(TValue value) + { + if (Dictionary == null) throw new InvalidOperationException(); + + return Add(value, Dictionary[value]); + } // Add + + public void Add(IList values) + { + if (Dictionary == null) throw new InvalidOperationException(); + + var add = new object[values.Count]; + for (int index = 0; index < values.Count; index++) + { + var value = values[index]; + add[index] = new KeyValuePair(value, Dictionary[value]); + } // for + AddItems(add); + } // Add + + public List GetListValues() + { + var count = ListBox.Items.Count; + var result = new List(count); + + for (int index = 0; index < count; index++) + { + var item = (KeyValuePair)ListBox.Items[index]; + result.Add(item.Key); + } // for + + return result; + } // GetListValues + + public IList> GetListItems() + { + var count = ListBox.Items.Count; + var result = new List>(count); + + for (int index = 0; index < count; index++) + { + var item = (KeyValuePair)ListBox.Items[index]; + result.Add(item); + } // for + + return result; + } // GetListItems + + public void RemoveSelection() + { + var index = ListBox.SelectedIndex; + if (index < 0) throw new InvalidOperationException(); + + ListBox.Items.RemoveAt(index); + + if (index >= ListBox.Items.Count) index -= 1; + ListBox.SelectedIndex = index; + } // RemoveSelection + + public void MoveSelectionUp() + { + var index = ListBox.SelectedIndex; + if (index < 0) throw new InvalidOperationException(); + + var upItem = ListBox.Items[index - 1]; + var current = ListBox.Items[index]; + + ListBox.Items[index - 1] = current; + ListBox.Items[index] = upItem; + + ListBox.SelectedIndex = index - 1; + } // MoveUp + + public void MoveSelectionDown() + { + var index = ListBox.SelectedIndex; + if ((index +1) >= ListBox.Items.Count) throw new InvalidOperationException(); + + var current = ListBox.Items[index]; + var downItem = ListBox.Items[index + 1]; + + ListBox.Items[index + 1] = current; + ListBox.Items[index] = downItem; + + ListBox.SelectedIndex = index + 1; + } // MoveDown + + private void ListBox_SelectedIndexChanged(object sender, EventArgs e) + { + var index = ListBox.SelectedIndex; + RemoveControl.Enabled = (index >= 0) && (ListBox.Items.Count > 0); + UpControl.Enabled = (index > 0) && (ListBox.Items.Count > 1); + DownControl.Enabled = ((index + 1) < ListBox.Items.Count); + } // ListBox_SelectedIndexChanged + + private void AddItems(object[] items) + { + var index = ListBox.SelectedIndex; + ListBox.Items.AddRange(items); + ListBox.SelectedIndex = index; + } // AddItems + } // class ListItemsManager +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs index ad38cf8f..07d4432d 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs @@ -8,7 +8,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Common.Controls +namespace IpTviewr.UiServices.Common.Controls { public class ListViewColumnItemComparer : IComparer { diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs index 19badeed..438ca33d 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs @@ -1,290 +1,290 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Windows.Forms.VisualStyles; - -namespace Project.IpTv.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(ListView))] - public class ListViewSortable : ListView - { - public enum EllipsisStyle - { - Default, - None, - Path, - End - } // enum EllipsisStyle - - public ListViewSortable() - : base() - { - SelfSorting = true; - IsDoubleBuffered = true; - CurrentSortColumn = -1; - HeaderCustomTextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - } // constructor - - public event EventHandler AfterSorting; - - public bool IsDoubleBuffered - { - get { return base.DoubleBuffered; } - set { base.DoubleBuffered = value; } - } // IsDoubleBuffered - - - [DefaultValue(false)] - public bool HeaderUsesCustomFont - { - get; - set; - } // HeaderUsesCustomFont - - public Font HeaderCustomFont - { - get; - set; - } // HeaderCustomFont - - [DefaultValue(false)] - public bool HeaderUsesCustomForeColor - { - get; - set; - } // HeaderUsesCustomForeColor - - public Color HeaderCustomForeColor - { - get; - set; - } // HeaderCustomForeColor - - [DefaultValue(false)] - public bool HeaderUsesCustomTextAlignment - { - get; - set; - } // HeaderUsesCustomTextAlignment - - [DefaultValue(System.Drawing.ContentAlignment.MiddleLeft)] - public System.Drawing.ContentAlignment HeaderCustomTextAlignment - { - get; - set; - } // HeaderCustomTextAlignment - - [DefaultValue(false)] - public bool HeaderCustomWordBreak - { - get; - set; - } // HeaderCustomWordBreak - - [DefaultValue(EllipsisStyle.Default)] - public EllipsisStyle HeaderCustomEllipsis - { - get; - set; - } // HeaderCustomEllipsis - - [DefaultValue(true)] - public bool SelfSorting - { - get; - set; - } // SelfSorting - - public int CurrentSortColumn - { - get; - private set; - } // CurrentSortColumn - - public bool CurrentSortIsDescending - { - get; - private set; - } // CurrentSortIsDescending - - /// - /// Sorts the list - /// - /// Column to sort - /// null = toggle current column sort order (ascending->descending; descending->ascending); true = sort ascending; false = sort descending - public void Sort(int sortColumnIndex, bool? sortAscending) - { - bool ascending; - - if (sortColumnIndex >= Columns.Count) throw new ArgumentOutOfRangeException("columnIndex"); - - if (sortColumnIndex < 0) - { - CurrentSortColumn = -1; - CurrentSortIsDescending = false; - ListViewItemSorter = null; - } - else - { - if (!sortAscending.HasValue) - { - ascending = true; - if (sortColumnIndex == CurrentSortColumn) - { - ascending = CurrentSortIsDescending; - } // if - } - else - { - ascending = sortAscending.Value; - } // if-else - - CurrentSortColumn = sortColumnIndex; - CurrentSortIsDescending = !ascending; - - if (SelfSorting) - { - this.ListViewItemSorter = new ListViewColumnItemComparer(CurrentSortColumn, CurrentSortIsDescending); - } // if - } // if-else - - // force redraw to update the "arrow" on the header - RedrawHeader(); - - if (AfterSorting != null) - { - AfterSorting(this, EventArgs.Empty); - } // if - } // Sort - - protected override void OnColumnClick(ColumnClickEventArgs e) - { - bool ascending; - - base.OnColumnClick(e); - if (!SelfSorting) return; - - ascending = (CurrentSortColumn == e.Column)? CurrentSortIsDescending: true; - Sort(e.Column, ascending); - } // OnColumnClick - - protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) - { - VisualStyleRenderer renderer; - VisualStyleElement style; - Size arrowSize; - TextFormatFlags format; - Rectangle bounds; - - // render background - if (e.State == ListViewItemStates.Hot) - style = VisualStyleElement.Header.Item.Hot; - else if (e.State == ListViewItemStates.Selected) - style = VisualStyleElement.Header.Item.Pressed; - else - style = VisualStyleElement.Header.Item.Normal; - - renderer = new VisualStyleRenderer(style); - renderer.DrawBackground(e.Graphics, e.Bounds); - - // build text style - if (HeaderUsesCustomTextAlignment) - { - format = TextFormatFlags.Default; - switch (HeaderCustomTextAlignment) - { - case System.Drawing.ContentAlignment.TopLeft: - format = TextFormatFlags.Left | TextFormatFlags.Top; break; - case System.Drawing.ContentAlignment.TopCenter: - format = TextFormatFlags.HorizontalCenter | TextFormatFlags.Top; break; - case System.Drawing.ContentAlignment.TopRight: - format = TextFormatFlags.Right | TextFormatFlags.Top; break; - case System.Drawing.ContentAlignment.MiddleLeft: - format = TextFormatFlags.Left | TextFormatFlags.VerticalCenter; break; - case System.Drawing.ContentAlignment.MiddleCenter: - format = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; break; - case System.Drawing.ContentAlignment.MiddleRight: - format = TextFormatFlags.Right | TextFormatFlags.VerticalCenter; break; - case System.Drawing.ContentAlignment.BottomLeft: - format = TextFormatFlags.Left | TextFormatFlags.Bottom; break; - case System.Drawing.ContentAlignment.BottomCenter: - format = TextFormatFlags.HorizontalCenter | TextFormatFlags.Bottom; break; - case System.Drawing.ContentAlignment.BottomRight: - format = TextFormatFlags.Right | TextFormatFlags.Bottom; break; - default: - format = TextFormatFlags.Default; break; - } // case - - switch (this.HeaderCustomEllipsis) - { - case EllipsisStyle.None: break; - case EllipsisStyle.End: format |= TextFormatFlags.EndEllipsis; break; - case EllipsisStyle.Path: format |= TextFormatFlags.PathEllipsis; break; - default: - format |= TextFormatFlags.WordEllipsis; break; - } // switch - - format |= HeaderCustomWordBreak ? TextFormatFlags.WordBreak : TextFormatFlags.SingleLine; - } - else - { - HorizontalAlignment textAlign = e.Header.TextAlign; - format = (textAlign == HorizontalAlignment.Left) ? TextFormatFlags.Left : ((textAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right); - format |= TextFormatFlags.WordEllipsis; - format |= TextFormatFlags.VerticalCenter; - format |= TextFormatFlags.SingleLine; - } // if-else - - // select text drawing attributtes - var font = HeaderUsesCustomFont ? HeaderCustomFont : e.Font; - var foreColor = HeaderUsesCustomForeColor ? HeaderCustomForeColor : e.ForeColor; - - // measure sort arrow size - style = (CurrentSortIsDescending) ? VisualStyleElement.Header.SortArrow.SortedUp : VisualStyleElement.Header.SortArrow.SortedDown; - renderer = new VisualStyleRenderer(style); - arrowSize = renderer.GetPartSize(e.Graphics, ThemeSizeType.True); - bounds = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width - arrowSize.Width - 3, e.Bounds.Height); // -3 = give extra right space - - // render text - TextRenderer.DrawText(e.Graphics, e.Header.Text, font, bounds, foreColor, format); - - // render sort arrow - if (e.ColumnIndex == CurrentSortColumn) - { - renderer.DrawBackground(e.Graphics, - new Rectangle(e.Bounds.Left + bounds.Width, - e.Bounds.Top, - arrowSize.Width, - e.Bounds.Height)); - } // if - } // OnDrawColumnHeader - - protected override void OnDrawItem(DrawListViewItemEventArgs e) - { - e.DrawDefault = true; - base.OnDrawItem(e); - } // OnDrawItem - - protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) - { - e.DrawDefault = true; - base.OnDrawSubItem(e); - } // OnDrawSubItem - - protected void RedrawHeader() - { - BeginUpdate(); - var old = HeaderStyle; - HeaderStyle = ColumnHeaderStyle.None; - HeaderStyle = old; - EndUpdate(); - } // RedrawHeader - } // ListViewSortable -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(ListView))] + public class ListViewSortable : ListView + { + public enum EllipsisStyle + { + Default, + None, + Path, + End + } // enum EllipsisStyle + + public ListViewSortable() + : base() + { + SelfSorting = true; + IsDoubleBuffered = true; + CurrentSortColumn = -1; + HeaderCustomTextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + } // constructor + + public event EventHandler AfterSorting; + + public bool IsDoubleBuffered + { + get { return base.DoubleBuffered; } + set { base.DoubleBuffered = value; } + } // IsDoubleBuffered + + + [DefaultValue(false)] + public bool HeaderUsesCustomFont + { + get; + set; + } // HeaderUsesCustomFont + + public Font HeaderCustomFont + { + get; + set; + } // HeaderCustomFont + + [DefaultValue(false)] + public bool HeaderUsesCustomForeColor + { + get; + set; + } // HeaderUsesCustomForeColor + + public Color HeaderCustomForeColor + { + get; + set; + } // HeaderCustomForeColor + + [DefaultValue(false)] + public bool HeaderUsesCustomTextAlignment + { + get; + set; + } // HeaderUsesCustomTextAlignment + + [DefaultValue(System.Drawing.ContentAlignment.MiddleLeft)] + public System.Drawing.ContentAlignment HeaderCustomTextAlignment + { + get; + set; + } // HeaderCustomTextAlignment + + [DefaultValue(false)] + public bool HeaderCustomWordBreak + { + get; + set; + } // HeaderCustomWordBreak + + [DefaultValue(EllipsisStyle.Default)] + public EllipsisStyle HeaderCustomEllipsis + { + get; + set; + } // HeaderCustomEllipsis + + [DefaultValue(true)] + public bool SelfSorting + { + get; + set; + } // SelfSorting + + public int CurrentSortColumn + { + get; + private set; + } // CurrentSortColumn + + public bool CurrentSortIsDescending + { + get; + private set; + } // CurrentSortIsDescending + + /// + /// Sorts the list + /// + /// Column to sort + /// null = toggle current column sort order (ascending->descending; descending->ascending); true = sort ascending; false = sort descending + public void Sort(int sortColumnIndex, bool? sortAscending) + { + bool ascending; + + if (sortColumnIndex >= Columns.Count) throw new ArgumentOutOfRangeException("columnIndex"); + + if (sortColumnIndex < 0) + { + CurrentSortColumn = -1; + CurrentSortIsDescending = false; + ListViewItemSorter = null; + } + else + { + if (!sortAscending.HasValue) + { + ascending = true; + if (sortColumnIndex == CurrentSortColumn) + { + ascending = CurrentSortIsDescending; + } // if + } + else + { + ascending = sortAscending.Value; + } // if-else + + CurrentSortColumn = sortColumnIndex; + CurrentSortIsDescending = !ascending; + + if (SelfSorting) + { + this.ListViewItemSorter = new ListViewColumnItemComparer(CurrentSortColumn, CurrentSortIsDescending); + } // if + } // if-else + + // force redraw to update the "arrow" on the header + RedrawHeader(); + + if (AfterSorting != null) + { + AfterSorting(this, EventArgs.Empty); + } // if + } // Sort + + protected override void OnColumnClick(ColumnClickEventArgs e) + { + bool ascending; + + base.OnColumnClick(e); + if (!SelfSorting) return; + + ascending = (CurrentSortColumn == e.Column)? CurrentSortIsDescending: true; + Sort(e.Column, ascending); + } // OnColumnClick + + protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) + { + VisualStyleRenderer renderer; + VisualStyleElement style; + Size arrowSize; + TextFormatFlags format; + Rectangle bounds; + + // render background + if (e.State == ListViewItemStates.Hot) + style = VisualStyleElement.Header.Item.Hot; + else if (e.State == ListViewItemStates.Selected) + style = VisualStyleElement.Header.Item.Pressed; + else + style = VisualStyleElement.Header.Item.Normal; + + renderer = new VisualStyleRenderer(style); + renderer.DrawBackground(e.Graphics, e.Bounds); + + // build text style + if (HeaderUsesCustomTextAlignment) + { + format = TextFormatFlags.Default; + switch (HeaderCustomTextAlignment) + { + case System.Drawing.ContentAlignment.TopLeft: + format = TextFormatFlags.Left | TextFormatFlags.Top; break; + case System.Drawing.ContentAlignment.TopCenter: + format = TextFormatFlags.HorizontalCenter | TextFormatFlags.Top; break; + case System.Drawing.ContentAlignment.TopRight: + format = TextFormatFlags.Right | TextFormatFlags.Top; break; + case System.Drawing.ContentAlignment.MiddleLeft: + format = TextFormatFlags.Left | TextFormatFlags.VerticalCenter; break; + case System.Drawing.ContentAlignment.MiddleCenter: + format = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; break; + case System.Drawing.ContentAlignment.MiddleRight: + format = TextFormatFlags.Right | TextFormatFlags.VerticalCenter; break; + case System.Drawing.ContentAlignment.BottomLeft: + format = TextFormatFlags.Left | TextFormatFlags.Bottom; break; + case System.Drawing.ContentAlignment.BottomCenter: + format = TextFormatFlags.HorizontalCenter | TextFormatFlags.Bottom; break; + case System.Drawing.ContentAlignment.BottomRight: + format = TextFormatFlags.Right | TextFormatFlags.Bottom; break; + default: + format = TextFormatFlags.Default; break; + } // case + + switch (this.HeaderCustomEllipsis) + { + case EllipsisStyle.None: break; + case EllipsisStyle.End: format |= TextFormatFlags.EndEllipsis; break; + case EllipsisStyle.Path: format |= TextFormatFlags.PathEllipsis; break; + default: + format |= TextFormatFlags.WordEllipsis; break; + } // switch + + format |= HeaderCustomWordBreak ? TextFormatFlags.WordBreak : TextFormatFlags.SingleLine; + } + else + { + HorizontalAlignment textAlign = e.Header.TextAlign; + format = (textAlign == HorizontalAlignment.Left) ? TextFormatFlags.Left : ((textAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right); + format |= TextFormatFlags.WordEllipsis; + format |= TextFormatFlags.VerticalCenter; + format |= TextFormatFlags.SingleLine; + } // if-else + + // select text drawing attributtes + var font = HeaderUsesCustomFont ? HeaderCustomFont : e.Font; + var foreColor = HeaderUsesCustomForeColor ? HeaderCustomForeColor : e.ForeColor; + + // measure sort arrow size + style = (CurrentSortIsDescending) ? VisualStyleElement.Header.SortArrow.SortedUp : VisualStyleElement.Header.SortArrow.SortedDown; + renderer = new VisualStyleRenderer(style); + arrowSize = renderer.GetPartSize(e.Graphics, ThemeSizeType.True); + bounds = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width - arrowSize.Width - 3, e.Bounds.Height); // -3 = give extra right space + + // render text + TextRenderer.DrawText(e.Graphics, e.Header.Text, font, bounds, foreColor, format); + + // render sort arrow + if (e.ColumnIndex == CurrentSortColumn) + { + renderer.DrawBackground(e.Graphics, + new Rectangle(e.Bounds.Left + bounds.Width, + e.Bounds.Top, + arrowSize.Width, + e.Bounds.Height)); + } // if + } // OnDrawColumnHeader + + protected override void OnDrawItem(DrawListViewItemEventArgs e) + { + e.DrawDefault = true; + base.OnDrawItem(e); + } // OnDrawItem + + protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) + { + e.DrawDefault = true; + base.OnDrawSubItem(e); + } // OnDrawSubItem + + protected void RedrawHeader() + { + BeginUpdate(); + var old = HeaderStyle; + HeaderStyle = ColumnHeaderStyle.None; + HeaderStyle = old; + EndUpdate(); + } // RedrawHeader + } // ListViewSortable +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs index e8e46487..a04acde5 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs @@ -1,58 +1,58 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -// v1.0 RC 0: Moved from ChannelList > PictureBoxEx.cs - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(PictureBox))] - public class PictureBoxEx : PictureBox - { - protected override void OnPaint(PaintEventArgs pe) - { - pe.Graphics.CompositingQuality = CompositingQuality.HighQuality; - pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; - base.OnPaint(pe); - } // OnPaint - - public static Bitmap ToGrayscale(Image original) - { - // create the grayscale ColorMatrix - ColorMatrix colorMatrix = new ColorMatrix(new float[][] - { - new float[] {.3f, .3f, .3f, 0, 0}, - new float[] {.59f, .59f, .59f, 0, 0}, - new float[] {.11f, .11f, .11f, 0, 0}, - new float[] {0, 0, 0, 1, 0}, - new float[] {0, 0, 0, 0, 1} - }); - - // set the color matrix to an image attributes object - ImageAttributes attributes = new ImageAttributes(); - attributes.SetColorMatrix(colorMatrix); - - // create a new bitmap with the same size as the original; then, - // create a Graphics from it - Bitmap greyscaleBitmap = new Bitmap(original.Width, original.Height); - using (Graphics g = Graphics.FromImage(greyscaleBitmap)) - { - // copy the original image to the new image (by means of the Graphics) using the color matrix - g.DrawImage(original, - new Rectangle(0, 0, original.Width, original.Height), - 0, 0, original.Width, original.Height, - GraphicsUnit.Pixel, attributes); - } // using - - return greyscaleBitmap; - } // ToGrayscale - } // class PictureBoxEx -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +// v1.0 RC 0: Moved from ChannelList > PictureBoxEx.cs + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(PictureBox))] + public class PictureBoxEx : PictureBox + { + protected override void OnPaint(PaintEventArgs pe) + { + pe.Graphics.CompositingQuality = CompositingQuality.HighQuality; + pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + base.OnPaint(pe); + } // OnPaint + + public static Bitmap ToGrayscale(Image original) + { + // create the grayscale ColorMatrix + ColorMatrix colorMatrix = new ColorMatrix(new float[][] + { + new float[] {.3f, .3f, .3f, 0, 0}, + new float[] {.59f, .59f, .59f, 0, 0}, + new float[] {.11f, .11f, .11f, 0, 0}, + new float[] {0, 0, 0, 1, 0}, + new float[] {0, 0, 0, 0, 1} + }); + + // set the color matrix to an image attributes object + ImageAttributes attributes = new ImageAttributes(); + attributes.SetColorMatrix(colorMatrix); + + // create a new bitmap with the same size as the original; then, + // create a Graphics from it + Bitmap greyscaleBitmap = new Bitmap(original.Width, original.Height); + using (Graphics g = Graphics.FromImage(greyscaleBitmap)) + { + // copy the original image to the new image (by means of the Graphics) using the color matrix + g.DrawImage(original, + new Rectangle(0, 0, original.Width, original.Height), + 0, 0, original.Width, original.Height, + GraphicsUnit.Pixel, attributes); + } // using + + return greyscaleBitmap; + } // ToGrayscale + } // class PictureBoxEx +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs index 70ff9744..6ff3eb98 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs @@ -1,555 +1,555 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.ComponentModel; -using System.Security.Permissions; -using System.Security; -using System.Threading; -using System.Drawing; - -namespace Project.IpTv.UiServices.Common.Controls -{ - /* - The following code has been copied verbatim from the http://dotnetzip.codeplex.com project - It has been modified where needed to changed the class name from FolderBrowserDialogEx to - SelectFolderDialog. http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 - It has also been modified to address Code Analysis issues. - The code is licensed under the Ms-PL license (http://dotnetzip.codeplex.com/license) - */ - - // FolderBrowserDialogEx.cs - // - // A replacement for the builtin System.Windows.Forms.FolderBrowserDialog class. - // This one includes an edit box, and also displays the full path in the edit box. - // - // based on code from http://support.microsoft.com/default.aspx?scid=kb;[LN];306285 - // - // 20 Feb 2009 - // - // ======================================================================================== - // Example usage: - // - // string _folderName = "c:\\dinoch"; - // private void button1_Click(object sender, EventArgs e) - // { - // _folderName = (System.IO.Directory.Exists(_folderName)) ? _folderName : ""; - // var dlg1 = new Ionic.Utils.FolderBrowserDialogEx - // { - // Description = "Select a folder for the extracted files:", - // ShowNewFolderButton = true, - // ShowEditBox = true, - // //NewStyle = false, - // SelectedPath = _folderName, - // ShowFullPathInEditBox= false, - // }; - // dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; - // - // var result = dlg1.ShowDialog(); - // - // if (result == DialogResult.OK) - // { - // _folderName = dlg1.SelectedPath; - // this.label1.Text = "The folder selected was: "; - // this.label2.Text = _folderName; - // } - // } - // - - [Designer("System.Windows.Forms.Design.FolderBrowserDialogDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] - [DefaultEvent("HelpRequest")] - [DefaultProperty("SelectedPath")] - [ToolboxBitmap(typeof(FolderBrowserDialog))] - public class SelectFolderDialog : CommonDialog - { - private static readonly int MAX_PATH = 260; - - // Fields - private UnsafeNativeMethods.BrowseFolderCallbackProc _callback; - private string _descriptionText; - private Environment.SpecialFolder _rootFolder; - private string _selectedPath; - private bool _selectedPathNeedsCheck; - private bool _showNewFolderButton; - private bool _showEditBox; - private bool _showBothFilesAndFolders; - private bool _newStyle = true; - private bool _showFullPathInEditBox = true; - private bool _dontIncludeNetworkFoldersBelowDomainLevel; - private int _uiFlags; - private IntPtr _hwndEdit; - private IntPtr _rootFolderLocation; - - // Events - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new event EventHandler HelpRequest - { - add - { - base.HelpRequest += value; - } - remove - { - base.HelpRequest -= value; - } - } - - // ctor - public SelectFolderDialog() - { - this.Reset(); - } - - // Factory Methods - public static SelectFolderDialog PrinterBrowser() - { - SelectFolderDialog x = new SelectFolderDialog(); - // avoid MBRO comppiler warning when passing _rootFolderLocation as a ref: - x.BecomePrinterBrowser(); - return x; - } - - public static SelectFolderDialog ComputerBrowser() - { - SelectFolderDialog x = new SelectFolderDialog(); - // avoid MBRO comppiler warning when passing _rootFolderLocation as a ref: - x.BecomeComputerBrowser(); - return x; - } - - - // Helpers - private void BecomePrinterBrowser() - { - _uiFlags += BrowseFlags.BIF_BROWSEFORPRINTER; - Description = "Select a printer:"; - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.PRINTERS, ref this._rootFolderLocation); - ShowNewFolderButton = false; - ShowEditBox = false; - } - - private void BecomeComputerBrowser() - { - _uiFlags += BrowseFlags.BIF_BROWSEFORCOMPUTER; - Description = "Select a computer:"; - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.NETWORK, ref this._rootFolderLocation); - ShowNewFolderButton = false; - ShowEditBox = false; - } - - - private class CSIDL - { - public const int PRINTERS = 4; - public const int NETWORK = 0x12; - } - - private class BrowseFlags - { - public const int BIF_DEFAULT = 0x0000; - public const int BIF_BROWSEFORCOMPUTER = 0x1000; - public const int BIF_BROWSEFORPRINTER = 0x2000; - public const int BIF_BROWSEINCLUDEFILES = 0x4000; - public const int BIF_BROWSEINCLUDEURLS = 0x0080; - public const int BIF_DONTGOBELOWDOMAIN = 0x0002; - public const int BIF_EDITBOX = 0x0010; - public const int BIF_NEWDIALOGSTYLE = 0x0040; - public const int BIF_NONEWFOLDERBUTTON = 0x0200; - public const int BIF_RETURNFSANCESTORS = 0x0008; - public const int BIF_RETURNONLYFSDIRS = 0x0001; - public const int BIF_SHAREABLE = 0x8000; - public const int BIF_STATUSTEXT = 0x0004; - public const int BIF_UAHINT = 0x0100; - public const int BIF_VALIDATE = 0x0020; - public const int BIF_NOTRANSLATETARGETS = 0x0400; - } - - private static class BrowseForFolderMessages - { - // messages FROM the folder browser - public const int BFFM_INITIALIZED = 1; - public const int BFFM_SELCHANGED = 2; - public const int BFFM_VALIDATEFAILEDA = 3; - public const int BFFM_VALIDATEFAILEDW = 4; - public const int BFFM_IUNKNOWN = 5; - - // messages TO the folder browser - public const int BFFM_SETSTATUSTEXT = 0x464; - public const int BFFM_ENABLEOK = 0x465; - public const int BFFM_SETSELECTIONA = 0x466; - public const int BFFM_SETSELECTIONW = 0x467; - } - - private int FolderBrowserCallback(IntPtr hwnd, uint msg, IntPtr lParam, IntPtr lpData) - { - switch (msg) - { - case BrowseForFolderMessages.BFFM_INITIALIZED: - if (this._selectedPath.Length != 0) - { - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_SETSELECTIONW, (IntPtr)1, this._selectedPath); - if (this._showEditBox && this._showFullPathInEditBox) - { - // get handle to the Edit box inside the Folder Browser Dialog - _hwndEdit = UnsafeNativeMethods.User32.FindWindowExW(new HandleRef(null, hwnd), IntPtr.Zero, "Edit", null); - UnsafeNativeMethods.User32.SetWindowTextW(_hwndEdit, this._selectedPath); - } - } - break; - - case BrowseForFolderMessages.BFFM_SELCHANGED: - IntPtr pidl = lParam; - if (pidl != IntPtr.Zero) - { - if (((_uiFlags & BrowseFlags.BIF_BROWSEFORPRINTER) == BrowseFlags.BIF_BROWSEFORPRINTER) || - ((_uiFlags & BrowseFlags.BIF_BROWSEFORCOMPUTER) == BrowseFlags.BIF_BROWSEFORCOMPUTER)) - { - // we're browsing for a printer or computer, enable the OK button unconditionally. - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_ENABLEOK, (IntPtr)0, (IntPtr)1); - } - else - { - IntPtr pszPath = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); - bool haveValidPath = UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); - String displayedPath = Marshal.PtrToStringAuto(pszPath); - Marshal.FreeHGlobal(pszPath); - // whether to enable the OK button or not. (if file is valid) - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_ENABLEOK, (IntPtr)0, (IntPtr)(haveValidPath ? 1 : 0)); - - // Maybe set the Edit Box text to the Full Folder path - if (haveValidPath && !String.IsNullOrEmpty(displayedPath)) - { - if (_showEditBox && _showFullPathInEditBox) - { - if (_hwndEdit != IntPtr.Zero) - UnsafeNativeMethods.User32.SetWindowTextW(_hwndEdit, displayedPath); - } - - if ((_uiFlags & BrowseFlags.BIF_STATUSTEXT) == BrowseFlags.BIF_STATUSTEXT) - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_SETSTATUSTEXT, (IntPtr)0, displayedPath); - } - } - } - break; - } - return 0; - } - - private static UnsafeNativeMethods.IMalloc GetSHMalloc() - { - UnsafeNativeMethods.IMalloc[] ppMalloc = new UnsafeNativeMethods.IMalloc[1]; - UnsafeNativeMethods.Shell32.SHGetMalloc(ppMalloc); - return ppMalloc[0]; - } - - public override void Reset() - { - this._rootFolder = (Environment.SpecialFolder)0; - this._descriptionText = string.Empty; - this._selectedPath = string.Empty; - this._selectedPathNeedsCheck = false; - this._showNewFolderButton = true; - this._showEditBox = true; - this._newStyle = true; - this._dontIncludeNetworkFoldersBelowDomainLevel = false; - this._hwndEdit = IntPtr.Zero; - this._rootFolderLocation = IntPtr.Zero; - } - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - protected override bool RunDialog(IntPtr hWndOwner) - { - bool result = false; - if (_rootFolderLocation == IntPtr.Zero) - { - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(hWndOwner, (int)this._rootFolder, ref _rootFolderLocation); - if (_rootFolderLocation == IntPtr.Zero) - { - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(hWndOwner, 0, ref _rootFolderLocation); - if (_rootFolderLocation == IntPtr.Zero) - { - throw new InvalidOperationException("FolderBrowserDialogNoRootFolder"); - } - } - } - _hwndEdit = IntPtr.Zero; - //_uiFlags = 0; - if (_dontIncludeNetworkFoldersBelowDomainLevel) - _uiFlags += BrowseFlags.BIF_DONTGOBELOWDOMAIN; - if (this._newStyle) - _uiFlags += BrowseFlags.BIF_NEWDIALOGSTYLE; - if (!this._showNewFolderButton) - _uiFlags += BrowseFlags.BIF_NONEWFOLDERBUTTON; - if (this._showEditBox) - _uiFlags += BrowseFlags.BIF_EDITBOX; - if (this._showBothFilesAndFolders) - _uiFlags += BrowseFlags.BIF_BROWSEINCLUDEFILES; - - - if (Control.CheckForIllegalCrossThreadCalls && (Application.OleRequired() != ApartmentState.STA)) - { - throw new ThreadStateException("DebuggingException: ThreadMustBeSTA"); - } - IntPtr pidl = IntPtr.Zero; - IntPtr hglobal = IntPtr.Zero; - IntPtr pszPath = IntPtr.Zero; - try - { - UnsafeNativeMethods.BROWSEINFO browseInfo = new UnsafeNativeMethods.BROWSEINFO(); - hglobal = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); - pszPath = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); - this._callback = new UnsafeNativeMethods.BrowseFolderCallbackProc(this.FolderBrowserCallback); - browseInfo.pidlRoot = _rootFolderLocation; - browseInfo.Owner = hWndOwner; - browseInfo.pszDisplayName = hglobal; - browseInfo.Title = this._descriptionText; - browseInfo.Flags = _uiFlags; - browseInfo.callback = this._callback; - browseInfo.lParam = IntPtr.Zero; - browseInfo.iImage = 0; - pidl = UnsafeNativeMethods.Shell32.SHBrowseForFolderW(browseInfo); - if (((_uiFlags & BrowseFlags.BIF_BROWSEFORPRINTER) == BrowseFlags.BIF_BROWSEFORPRINTER) || - ((_uiFlags & BrowseFlags.BIF_BROWSEFORCOMPUTER) == BrowseFlags.BIF_BROWSEFORCOMPUTER)) - { - this._selectedPath = Marshal.PtrToStringAuto(browseInfo.pszDisplayName); - result = true; - } - else - { - if (pidl != IntPtr.Zero) - { - UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); - this._selectedPathNeedsCheck = true; - this._selectedPath = Marshal.PtrToStringAuto(pszPath); - result = true; - } - } - } - finally - { - UnsafeNativeMethods.IMalloc sHMalloc = GetSHMalloc(); - sHMalloc.Free(_rootFolderLocation); - _rootFolderLocation = IntPtr.Zero; - if (pidl != IntPtr.Zero) - { - sHMalloc.Free(pidl); - } - if (pszPath != IntPtr.Zero) - { - Marshal.FreeHGlobal(pszPath); - } - if (hglobal != IntPtr.Zero) - { - Marshal.FreeHGlobal(hglobal); - } - this._callback = null; - } - return result; - } - - // Properties - //[SRDescription("FolderBrowserDialogDescription"), SRCategory("CatFolderBrowsing"), Browsable(true), DefaultValue(""), Localizable(true)] - - /// - /// This description appears near the top of the dialog box, providing direction to the user. - /// - public string Description - { - get - { - return this._descriptionText; - } - set - { - this._descriptionText = (value == null) ? string.Empty : value; - } - } - - //[Localizable(false), SRCategory("CatFolderBrowsing"), SRDescription("FolderBrowserDialogRootFolder"), TypeConverter(typeof(SpecialFolderEnumConverter)), Browsable(true), DefaultValue(0)] - public Environment.SpecialFolder RootFolder - { - get - { - return this._rootFolder; - } - set - { - if (!Enum.IsDefined(typeof(Environment.SpecialFolder), value)) - { - throw new InvalidEnumArgumentException("value", (int)value, typeof(Environment.SpecialFolder)); - } - this._rootFolder = value; - } - } - - //[Browsable(true), SRDescription("FolderBrowserDialogSelectedPath"), SRCategory("CatFolderBrowsing"), DefaultValue(""), Editor("System.Windows.Forms.Design.SelectedPathEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), Localizable(true)] - - /// - /// Set or get the selected path. - /// - public string SelectedPath - { - get - { - if (((this._selectedPath != null) && (this._selectedPath.Length != 0)) && this._selectedPathNeedsCheck) - { - new FileIOPermission(FileIOPermissionAccess.PathDiscovery, this._selectedPath).Demand(); - this._selectedPathNeedsCheck = false; - } - return this._selectedPath; - } - set - { - this._selectedPath = (value == null) ? string.Empty : value; - this._selectedPathNeedsCheck = true; - } - } - - //[SRDescription("FolderBrowserDialogShowNewFolderButton"), Localizable(false), Browsable(true), DefaultValue(true), SRCategory("CatFolderBrowsing")] - - /// - /// Enable or disable the "New Folder" button in the browser dialog. - /// - public bool ShowNewFolderButton - { - get - { - return this._showNewFolderButton; - } - set - { - this._showNewFolderButton = value; - } - } - - /// - /// Show an "edit box" in the folder browser. - /// - /// - /// The "edit box" normally shows the name of the selected folder. - /// The user may also type a pathname directly into the edit box. - /// - /// - public bool ShowEditBox - { - get - { - return this._showEditBox; - } - set - { - this._showEditBox = value; - } - } - - /// - /// Set whether to use the New Folder Browser dialog style. - /// - /// - /// The new style is resizable and includes a "New Folder" button. - /// - public bool NewStyle - { - get - { - return this._newStyle; - } - set - { - this._newStyle = value; - } - } - - - public bool DontIncludeNetworkFoldersBelowDomainLevel - { - get { return _dontIncludeNetworkFoldersBelowDomainLevel; } - set { _dontIncludeNetworkFoldersBelowDomainLevel = value; } - } - - /// - /// Show the full path in the edit box as the user selects it. - /// - /// - /// This works only if ShowEditBox is also set to true. - /// - public bool ShowFullPathInEditBox - { - get { return _showFullPathInEditBox; } - set { _showFullPathInEditBox = value; } - } - - public bool ShowBothFilesAndFolders - { - get { return _showBothFilesAndFolders; } - set { _showBothFilesAndFolders = value; } - } - } - - internal static class UnsafeNativeMethods - { - public delegate int BrowseFolderCallbackProc(IntPtr hwnd, uint msg, IntPtr lParam, IntPtr lpData); - - internal static class User32 - { - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - public static extern IntPtr SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, string lParam); - - [DllImport("user32.dll")] - public static extern IntPtr SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, IntPtr lParam); - - [DllImport("user32.dll", SetLastError = true, CharSet=CharSet.Unicode)] - public static extern IntPtr FindWindowExW(HandleRef hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); - - [DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError = true)] - public static extern Boolean SetWindowTextW(IntPtr hWnd, String text); - } - - [ComImport, Guid("00000002-0000-0000-c000-000000000046"), SuppressUnmanagedCodeSecurity, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IMalloc - { - [PreserveSig] - IntPtr Alloc(int cb); - [PreserveSig] - IntPtr Realloc(IntPtr pv, int cb); - [PreserveSig] - void Free(IntPtr pv); - [PreserveSig] - int GetSize(IntPtr pv); - [PreserveSig] - int DidAlloc(IntPtr pv); - [PreserveSig] - void HeapMinimize(); - } // interface IMalloc - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class BROWSEINFO - { - public IntPtr Owner; - public IntPtr pidlRoot; - public IntPtr pszDisplayName; - [MarshalAs(UnmanagedType.LPWStr)] - public string Title; - public int Flags; - public BrowseFolderCallbackProc callback; - public IntPtr lParam; - public int iImage; - } // class BROWSEINFO - - [SuppressUnmanagedCodeSecurity] - internal static class Shell32 - { - // Methods - [DllImport("shell32.dll", CharSet = CharSet.Unicode)] - public static extern IntPtr SHBrowseForFolderW([In] UnsafeNativeMethods.BROWSEINFO lpbi); - [DllImport("shell32.dll")] - public static extern int SHGetMalloc([Out, MarshalAs(UnmanagedType.LPArray)] UnsafeNativeMethods.IMalloc[] ppMalloc); - [DllImport("shell32.dll", CharSet = CharSet.Auto)] - public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath); - [DllImport("shell32.dll")] - public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, ref IntPtr ppidl); - } // internal static class Shell32 - } // class UnsafeNativeMethods -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.ComponentModel; +using System.Security.Permissions; +using System.Security; +using System.Threading; +using System.Drawing; + +namespace IpTviewr.UiServices.Common.Controls +{ + /* + The following code has been copied verbatim from the http://dotnetzip.codeplex.com project + It has been modified where needed to changed the class name from FolderBrowserDialogEx to + SelectFolderDialog. http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 + It has also been modified to address Code Analysis issues. + The code is licensed under the Ms-PL license (http://dotnetzip.codeplex.com/license) + */ + + // FolderBrowserDialogEx.cs + // + // A replacement for the builtin System.Windows.Forms.FolderBrowserDialog class. + // This one includes an edit box, and also displays the full path in the edit box. + // + // based on code from http://support.microsoft.com/default.aspx?scid=kb;[LN];306285 + // + // 20 Feb 2009 + // + // ======================================================================================== + // Example usage: + // + // string _folderName = "c:\\dinoch"; + // private void button1_Click(object sender, EventArgs e) + // { + // _folderName = (System.IO.Directory.Exists(_folderName)) ? _folderName : ""; + // var dlg1 = new Ionic.Utils.FolderBrowserDialogEx + // { + // Description = "Select a folder for the extracted files:", + // ShowNewFolderButton = true, + // ShowEditBox = true, + // //NewStyle = false, + // SelectedPath = _folderName, + // ShowFullPathInEditBox= false, + // }; + // dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; + // + // var result = dlg1.ShowDialog(); + // + // if (result == DialogResult.OK) + // { + // _folderName = dlg1.SelectedPath; + // this.label1.Text = "The folder selected was: "; + // this.label2.Text = _folderName; + // } + // } + // + + [Designer("System.Windows.Forms.Design.FolderBrowserDialogDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] + [DefaultEvent("HelpRequest")] + [DefaultProperty("SelectedPath")] + [ToolboxBitmap(typeof(FolderBrowserDialog))] + public class SelectFolderDialog : CommonDialog + { + private static readonly int MAX_PATH = 260; + + // Fields + private UnsafeNativeMethods.BrowseFolderCallbackProc _callback; + private string _descriptionText; + private Environment.SpecialFolder _rootFolder; + private string _selectedPath; + private bool _selectedPathNeedsCheck; + private bool _showNewFolderButton; + private bool _showEditBox; + private bool _showBothFilesAndFolders; + private bool _newStyle = true; + private bool _showFullPathInEditBox = true; + private bool _dontIncludeNetworkFoldersBelowDomainLevel; + private int _uiFlags; + private IntPtr _hwndEdit; + private IntPtr _rootFolderLocation; + + // Events + //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler HelpRequest + { + add + { + base.HelpRequest += value; + } + remove + { + base.HelpRequest -= value; + } + } + + // ctor + public SelectFolderDialog() + { + this.Reset(); + } + + // Factory Methods + public static SelectFolderDialog PrinterBrowser() + { + SelectFolderDialog x = new SelectFolderDialog(); + // avoid MBRO comppiler warning when passing _rootFolderLocation as a ref: + x.BecomePrinterBrowser(); + return x; + } + + public static SelectFolderDialog ComputerBrowser() + { + SelectFolderDialog x = new SelectFolderDialog(); + // avoid MBRO comppiler warning when passing _rootFolderLocation as a ref: + x.BecomeComputerBrowser(); + return x; + } + + + // Helpers + private void BecomePrinterBrowser() + { + _uiFlags += BrowseFlags.BIF_BROWSEFORPRINTER; + Description = "Select a printer:"; + UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.PRINTERS, ref this._rootFolderLocation); + ShowNewFolderButton = false; + ShowEditBox = false; + } + + private void BecomeComputerBrowser() + { + _uiFlags += BrowseFlags.BIF_BROWSEFORCOMPUTER; + Description = "Select a computer:"; + UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.NETWORK, ref this._rootFolderLocation); + ShowNewFolderButton = false; + ShowEditBox = false; + } + + + private class CSIDL + { + public const int PRINTERS = 4; + public const int NETWORK = 0x12; + } + + private class BrowseFlags + { + public const int BIF_DEFAULT = 0x0000; + public const int BIF_BROWSEFORCOMPUTER = 0x1000; + public const int BIF_BROWSEFORPRINTER = 0x2000; + public const int BIF_BROWSEINCLUDEFILES = 0x4000; + public const int BIF_BROWSEINCLUDEURLS = 0x0080; + public const int BIF_DONTGOBELOWDOMAIN = 0x0002; + public const int BIF_EDITBOX = 0x0010; + public const int BIF_NEWDIALOGSTYLE = 0x0040; + public const int BIF_NONEWFOLDERBUTTON = 0x0200; + public const int BIF_RETURNFSANCESTORS = 0x0008; + public const int BIF_RETURNONLYFSDIRS = 0x0001; + public const int BIF_SHAREABLE = 0x8000; + public const int BIF_STATUSTEXT = 0x0004; + public const int BIF_UAHINT = 0x0100; + public const int BIF_VALIDATE = 0x0020; + public const int BIF_NOTRANSLATETARGETS = 0x0400; + } + + private static class BrowseForFolderMessages + { + // messages FROM the folder browser + public const int BFFM_INITIALIZED = 1; + public const int BFFM_SELCHANGED = 2; + public const int BFFM_VALIDATEFAILEDA = 3; + public const int BFFM_VALIDATEFAILEDW = 4; + public const int BFFM_IUNKNOWN = 5; + + // messages TO the folder browser + public const int BFFM_SETSTATUSTEXT = 0x464; + public const int BFFM_ENABLEOK = 0x465; + public const int BFFM_SETSELECTIONA = 0x466; + public const int BFFM_SETSELECTIONW = 0x467; + } + + private int FolderBrowserCallback(IntPtr hwnd, uint msg, IntPtr lParam, IntPtr lpData) + { + switch (msg) + { + case BrowseForFolderMessages.BFFM_INITIALIZED: + if (this._selectedPath.Length != 0) + { + UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_SETSELECTIONW, (IntPtr)1, this._selectedPath); + if (this._showEditBox && this._showFullPathInEditBox) + { + // get handle to the Edit box inside the Folder Browser Dialog + _hwndEdit = UnsafeNativeMethods.User32.FindWindowExW(new HandleRef(null, hwnd), IntPtr.Zero, "Edit", null); + UnsafeNativeMethods.User32.SetWindowTextW(_hwndEdit, this._selectedPath); + } + } + break; + + case BrowseForFolderMessages.BFFM_SELCHANGED: + IntPtr pidl = lParam; + if (pidl != IntPtr.Zero) + { + if (((_uiFlags & BrowseFlags.BIF_BROWSEFORPRINTER) == BrowseFlags.BIF_BROWSEFORPRINTER) || + ((_uiFlags & BrowseFlags.BIF_BROWSEFORCOMPUTER) == BrowseFlags.BIF_BROWSEFORCOMPUTER)) + { + // we're browsing for a printer or computer, enable the OK button unconditionally. + UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_ENABLEOK, (IntPtr)0, (IntPtr)1); + } + else + { + IntPtr pszPath = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); + bool haveValidPath = UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); + String displayedPath = Marshal.PtrToStringAuto(pszPath); + Marshal.FreeHGlobal(pszPath); + // whether to enable the OK button or not. (if file is valid) + UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_ENABLEOK, (IntPtr)0, (IntPtr)(haveValidPath ? 1 : 0)); + + // Maybe set the Edit Box text to the Full Folder path + if (haveValidPath && !String.IsNullOrEmpty(displayedPath)) + { + if (_showEditBox && _showFullPathInEditBox) + { + if (_hwndEdit != IntPtr.Zero) + UnsafeNativeMethods.User32.SetWindowTextW(_hwndEdit, displayedPath); + } + + if ((_uiFlags & BrowseFlags.BIF_STATUSTEXT) == BrowseFlags.BIF_STATUSTEXT) + UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_SETSTATUSTEXT, (IntPtr)0, displayedPath); + } + } + } + break; + } + return 0; + } + + private static UnsafeNativeMethods.IMalloc GetSHMalloc() + { + UnsafeNativeMethods.IMalloc[] ppMalloc = new UnsafeNativeMethods.IMalloc[1]; + UnsafeNativeMethods.Shell32.SHGetMalloc(ppMalloc); + return ppMalloc[0]; + } + + public override void Reset() + { + this._rootFolder = (Environment.SpecialFolder)0; + this._descriptionText = string.Empty; + this._selectedPath = string.Empty; + this._selectedPathNeedsCheck = false; + this._showNewFolderButton = true; + this._showEditBox = true; + this._newStyle = true; + this._dontIncludeNetworkFoldersBelowDomainLevel = false; + this._hwndEdit = IntPtr.Zero; + this._rootFolderLocation = IntPtr.Zero; + } + + [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] + protected override bool RunDialog(IntPtr hWndOwner) + { + bool result = false; + if (_rootFolderLocation == IntPtr.Zero) + { + UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(hWndOwner, (int)this._rootFolder, ref _rootFolderLocation); + if (_rootFolderLocation == IntPtr.Zero) + { + UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(hWndOwner, 0, ref _rootFolderLocation); + if (_rootFolderLocation == IntPtr.Zero) + { + throw new InvalidOperationException("FolderBrowserDialogNoRootFolder"); + } + } + } + _hwndEdit = IntPtr.Zero; + //_uiFlags = 0; + if (_dontIncludeNetworkFoldersBelowDomainLevel) + _uiFlags += BrowseFlags.BIF_DONTGOBELOWDOMAIN; + if (this._newStyle) + _uiFlags += BrowseFlags.BIF_NEWDIALOGSTYLE; + if (!this._showNewFolderButton) + _uiFlags += BrowseFlags.BIF_NONEWFOLDERBUTTON; + if (this._showEditBox) + _uiFlags += BrowseFlags.BIF_EDITBOX; + if (this._showBothFilesAndFolders) + _uiFlags += BrowseFlags.BIF_BROWSEINCLUDEFILES; + + + if (Control.CheckForIllegalCrossThreadCalls && (Application.OleRequired() != ApartmentState.STA)) + { + throw new ThreadStateException("DebuggingException: ThreadMustBeSTA"); + } + IntPtr pidl = IntPtr.Zero; + IntPtr hglobal = IntPtr.Zero; + IntPtr pszPath = IntPtr.Zero; + try + { + UnsafeNativeMethods.BROWSEINFO browseInfo = new UnsafeNativeMethods.BROWSEINFO(); + hglobal = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); + pszPath = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); + this._callback = new UnsafeNativeMethods.BrowseFolderCallbackProc(this.FolderBrowserCallback); + browseInfo.pidlRoot = _rootFolderLocation; + browseInfo.Owner = hWndOwner; + browseInfo.pszDisplayName = hglobal; + browseInfo.Title = this._descriptionText; + browseInfo.Flags = _uiFlags; + browseInfo.callback = this._callback; + browseInfo.lParam = IntPtr.Zero; + browseInfo.iImage = 0; + pidl = UnsafeNativeMethods.Shell32.SHBrowseForFolderW(browseInfo); + if (((_uiFlags & BrowseFlags.BIF_BROWSEFORPRINTER) == BrowseFlags.BIF_BROWSEFORPRINTER) || + ((_uiFlags & BrowseFlags.BIF_BROWSEFORCOMPUTER) == BrowseFlags.BIF_BROWSEFORCOMPUTER)) + { + this._selectedPath = Marshal.PtrToStringAuto(browseInfo.pszDisplayName); + result = true; + } + else + { + if (pidl != IntPtr.Zero) + { + UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); + this._selectedPathNeedsCheck = true; + this._selectedPath = Marshal.PtrToStringAuto(pszPath); + result = true; + } + } + } + finally + { + UnsafeNativeMethods.IMalloc sHMalloc = GetSHMalloc(); + sHMalloc.Free(_rootFolderLocation); + _rootFolderLocation = IntPtr.Zero; + if (pidl != IntPtr.Zero) + { + sHMalloc.Free(pidl); + } + if (pszPath != IntPtr.Zero) + { + Marshal.FreeHGlobal(pszPath); + } + if (hglobal != IntPtr.Zero) + { + Marshal.FreeHGlobal(hglobal); + } + this._callback = null; + } + return result; + } + + // Properties + //[SRDescription("FolderBrowserDialogDescription"), SRCategory("CatFolderBrowsing"), Browsable(true), DefaultValue(""), Localizable(true)] + + /// + /// This description appears near the top of the dialog box, providing direction to the user. + /// + public string Description + { + get + { + return this._descriptionText; + } + set + { + this._descriptionText = (value == null) ? string.Empty : value; + } + } + + //[Localizable(false), SRCategory("CatFolderBrowsing"), SRDescription("FolderBrowserDialogRootFolder"), TypeConverter(typeof(SpecialFolderEnumConverter)), Browsable(true), DefaultValue(0)] + public Environment.SpecialFolder RootFolder + { + get + { + return this._rootFolder; + } + set + { + if (!Enum.IsDefined(typeof(Environment.SpecialFolder), value)) + { + throw new InvalidEnumArgumentException("value", (int)value, typeof(Environment.SpecialFolder)); + } + this._rootFolder = value; + } + } + + //[Browsable(true), SRDescription("FolderBrowserDialogSelectedPath"), SRCategory("CatFolderBrowsing"), DefaultValue(""), Editor("System.Windows.Forms.Design.SelectedPathEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), Localizable(true)] + + /// + /// Set or get the selected path. + /// + public string SelectedPath + { + get + { + if (((this._selectedPath != null) && (this._selectedPath.Length != 0)) && this._selectedPathNeedsCheck) + { + new FileIOPermission(FileIOPermissionAccess.PathDiscovery, this._selectedPath).Demand(); + this._selectedPathNeedsCheck = false; + } + return this._selectedPath; + } + set + { + this._selectedPath = (value == null) ? string.Empty : value; + this._selectedPathNeedsCheck = true; + } + } + + //[SRDescription("FolderBrowserDialogShowNewFolderButton"), Localizable(false), Browsable(true), DefaultValue(true), SRCategory("CatFolderBrowsing")] + + /// + /// Enable or disable the "New Folder" button in the browser dialog. + /// + public bool ShowNewFolderButton + { + get + { + return this._showNewFolderButton; + } + set + { + this._showNewFolderButton = value; + } + } + + /// + /// Show an "edit box" in the folder browser. + /// + /// + /// The "edit box" normally shows the name of the selected folder. + /// The user may also type a pathname directly into the edit box. + /// + /// + public bool ShowEditBox + { + get + { + return this._showEditBox; + } + set + { + this._showEditBox = value; + } + } + + /// + /// Set whether to use the New Folder Browser dialog style. + /// + /// + /// The new style is resizable and includes a "New Folder" button. + /// + public bool NewStyle + { + get + { + return this._newStyle; + } + set + { + this._newStyle = value; + } + } + + + public bool DontIncludeNetworkFoldersBelowDomainLevel + { + get { return _dontIncludeNetworkFoldersBelowDomainLevel; } + set { _dontIncludeNetworkFoldersBelowDomainLevel = value; } + } + + /// + /// Show the full path in the edit box as the user selects it. + /// + /// + /// This works only if ShowEditBox is also set to true. + /// + public bool ShowFullPathInEditBox + { + get { return _showFullPathInEditBox; } + set { _showFullPathInEditBox = value; } + } + + public bool ShowBothFilesAndFolders + { + get { return _showBothFilesAndFolders; } + set { _showBothFilesAndFolders = value; } + } + } + + internal static class UnsafeNativeMethods + { + public delegate int BrowseFolderCallbackProc(IntPtr hwnd, uint msg, IntPtr lParam, IntPtr lpData); + + internal static class User32 + { + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, string lParam); + + [DllImport("user32.dll")] + public static extern IntPtr SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll", SetLastError = true, CharSet=CharSet.Unicode)] + public static extern IntPtr FindWindowExW(HandleRef hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); + + [DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError = true)] + public static extern Boolean SetWindowTextW(IntPtr hWnd, String text); + } + + [ComImport, Guid("00000002-0000-0000-c000-000000000046"), SuppressUnmanagedCodeSecurity, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + public interface IMalloc + { + [PreserveSig] + IntPtr Alloc(int cb); + [PreserveSig] + IntPtr Realloc(IntPtr pv, int cb); + [PreserveSig] + void Free(IntPtr pv); + [PreserveSig] + int GetSize(IntPtr pv); + [PreserveSig] + int DidAlloc(IntPtr pv); + [PreserveSig] + void HeapMinimize(); + } // interface IMalloc + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public class BROWSEINFO + { + public IntPtr Owner; + public IntPtr pidlRoot; + public IntPtr pszDisplayName; + [MarshalAs(UnmanagedType.LPWStr)] + public string Title; + public int Flags; + public BrowseFolderCallbackProc callback; + public IntPtr lParam; + public int iImage; + } // class BROWSEINFO + + [SuppressUnmanagedCodeSecurity] + internal static class Shell32 + { + // Methods + [DllImport("shell32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SHBrowseForFolderW([In] UnsafeNativeMethods.BROWSEINFO lpbi); + [DllImport("shell32.dll")] + public static extern int SHGetMalloc([Out, MarshalAs(UnmanagedType.LPArray)] UnsafeNativeMethods.IMalloc[] ppMalloc); + [DllImport("shell32.dll", CharSet = CharSet.Auto)] + public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath); + [DllImport("shell32.dll")] + public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, ref IntPtr ppidl); + } // internal static class Shell32 + } // class UnsafeNativeMethods +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs index 3a5368aa..3bed15e2 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs @@ -1,47 +1,47 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(TabControl))] - public sealed class TabControlEx: TabControl - { - private bool fieldShowTabs; - private const int TCM_ADJUSTRECT = 0x1328; - - [DefaultValue(false)] - public bool ShowTabs - { - get - { - return fieldShowTabs; - } // get - set - { - fieldShowTabs = value; - RecreateHandle(); - } // set - } // ShowTabs - - protected override void WndProc(ref Message m) - { - // Hide tabs by trapping the TCM_ADJUSTRECT message - if (m.Msg == TCM_ADJUSTRECT && !DesignMode) - { - if (!ShowTabs) - { - m.Result = (IntPtr)1; - } // if - } - else - { - base.WndProc(ref m); - } // if-else - } // WndProc - } // class -} // namespace +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(TabControl))] + public sealed class TabControlEx: TabControl + { + private bool fieldShowTabs; + private const int TCM_ADJUSTRECT = 0x1328; + + [DefaultValue(false)] + public bool ShowTabs + { + get + { + return fieldShowTabs; + } // get + set + { + fieldShowTabs = value; + RecreateHandle(); + } // set + } // ShowTabs + + protected override void WndProc(ref Message m) + { + // Hide tabs by trapping the TCM_ADJUSTRECT message + if (m.Msg == TCM_ADJUSTRECT && !DesignMode) + { + if (!ShowTabs) + { + m.Result = (IntPtr)1; + } // if + } + else + { + base.WndProc(ref m); + } // if-else + } // WndProc + } // class +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs index e254a11f..5fede6e9 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs @@ -1,177 +1,177 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Controls -{ - partial class TimeSpanUpDown - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.labelTimeSpanS = new System.Windows.Forms.Label(); - this.numericTimeSpanSeconds = new System.Windows.Forms.NumericUpDown(); - this.labelTimeSpanM = new System.Windows.Forms.Label(); - this.numericTimeSpanMinutes = new System.Windows.Forms.NumericUpDown(); - this.labelTimeSpanH = new System.Windows.Forms.Label(); - this.numericTimeSpanHours = new System.Windows.Forms.NumericUpDown(); - this.labelTimeSpanD = new System.Windows.Forms.Label(); - this.numericTimeSpanDays = new System.Windows.Forms.NumericUpDown(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).BeginInit(); - this.SuspendLayout(); - // - // labelTimeSpanS - // - this.labelTimeSpanS.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanS.Location = new System.Drawing.Point(228, 3); - this.labelTimeSpanS.Name = "labelTimeSpanS"; - this.labelTimeSpanS.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanS.TabIndex = 7; - this.labelTimeSpanS.Text = "mm"; - // - // numericTimeSpanSeconds - // - this.numericTimeSpanSeconds.CausesValidation = false; - this.numericTimeSpanSeconds.Location = new System.Drawing.Point(192, 0); - this.numericTimeSpanSeconds.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.numericTimeSpanSeconds.Name = "numericTimeSpanSeconds"; - this.numericTimeSpanSeconds.Size = new System.Drawing.Size(35, 20); - this.numericTimeSpanSeconds.TabIndex = 6; - this.numericTimeSpanSeconds.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanSeconds.ValueChanged += new System.EventHandler(this.numericTimeSpanSeconds_ValueChanged); - // - // labelTimeSpanM - // - this.labelTimeSpanM.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanM.Location = new System.Drawing.Point(168, 3); - this.labelTimeSpanM.Name = "labelTimeSpanM"; - this.labelTimeSpanM.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanM.TabIndex = 5; - this.labelTimeSpanM.Text = "mm"; - // - // numericTimeSpanMinutes - // - this.numericTimeSpanMinutes.CausesValidation = false; - this.numericTimeSpanMinutes.Location = new System.Drawing.Point(132, 0); - this.numericTimeSpanMinutes.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.numericTimeSpanMinutes.Name = "numericTimeSpanMinutes"; - this.numericTimeSpanMinutes.Size = new System.Drawing.Size(35, 20); - this.numericTimeSpanMinutes.TabIndex = 4; - this.numericTimeSpanMinutes.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanMinutes.ValueChanged += new System.EventHandler(this.numericTimeSpanMinutes_ValueChanged); - // - // labelTimeSpanH - // - this.labelTimeSpanH.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanH.Location = new System.Drawing.Point(107, 3); - this.labelTimeSpanH.Name = "labelTimeSpanH"; - this.labelTimeSpanH.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanH.TabIndex = 3; - this.labelTimeSpanH.Text = "mm"; - // - // numericTimeSpanHours - // - this.numericTimeSpanHours.CausesValidation = false; - this.numericTimeSpanHours.Location = new System.Drawing.Point(66, 0); - this.numericTimeSpanHours.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.numericTimeSpanHours.Name = "numericTimeSpanHours"; - this.numericTimeSpanHours.Size = new System.Drawing.Size(40, 20); - this.numericTimeSpanHours.TabIndex = 2; - this.numericTimeSpanHours.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanHours.ValueChanged += new System.EventHandler(this.numericTimeSpanHours_ValueChanged); - // - // labelTimeSpanD - // - this.labelTimeSpanD.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanD.Location = new System.Drawing.Point(41, 2); - this.labelTimeSpanD.Name = "labelTimeSpanD"; - this.labelTimeSpanD.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanD.TabIndex = 1; - this.labelTimeSpanD.Text = "mm"; - // - // numericTimeSpanDays - // - this.numericTimeSpanDays.CausesValidation = false; - this.numericTimeSpanDays.Location = new System.Drawing.Point(0, 0); - this.numericTimeSpanDays.Maximum = new decimal(new int[] { - 999, - 0, - 0, - 0}); - this.numericTimeSpanDays.Name = "numericTimeSpanDays"; - this.numericTimeSpanDays.Size = new System.Drawing.Size(40, 20); - this.numericTimeSpanDays.TabIndex = 0; - this.numericTimeSpanDays.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanDays.ValueChanged += new System.EventHandler(this.numericTimeSpanDays_ValueChanged); - // - // TimeSpanUpDown - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.labelTimeSpanD); - this.Controls.Add(this.numericTimeSpanDays); - this.Controls.Add(this.labelTimeSpanS); - this.Controls.Add(this.numericTimeSpanSeconds); - this.Controls.Add(this.labelTimeSpanM); - this.Controls.Add(this.numericTimeSpanMinutes); - this.Controls.Add(this.labelTimeSpanH); - this.Controls.Add(this.numericTimeSpanHours); - this.Name = "TimeSpanUpDown"; - this.Size = new System.Drawing.Size(253, 20); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Label labelTimeSpanS; - private System.Windows.Forms.NumericUpDown numericTimeSpanSeconds; - private System.Windows.Forms.Label labelTimeSpanM; - private System.Windows.Forms.NumericUpDown numericTimeSpanMinutes; - private System.Windows.Forms.Label labelTimeSpanH; - private System.Windows.Forms.NumericUpDown numericTimeSpanHours; - private System.Windows.Forms.Label labelTimeSpanD; - private System.Windows.Forms.NumericUpDown numericTimeSpanDays; - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Controls +{ + partial class TimeSpanUpDown + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.labelTimeSpanS = new System.Windows.Forms.Label(); + this.numericTimeSpanSeconds = new System.Windows.Forms.NumericUpDown(); + this.labelTimeSpanM = new System.Windows.Forms.Label(); + this.numericTimeSpanMinutes = new System.Windows.Forms.NumericUpDown(); + this.labelTimeSpanH = new System.Windows.Forms.Label(); + this.numericTimeSpanHours = new System.Windows.Forms.NumericUpDown(); + this.labelTimeSpanD = new System.Windows.Forms.Label(); + this.numericTimeSpanDays = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).BeginInit(); + this.SuspendLayout(); + // + // labelTimeSpanS + // + this.labelTimeSpanS.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanS.Location = new System.Drawing.Point(228, 3); + this.labelTimeSpanS.Name = "labelTimeSpanS"; + this.labelTimeSpanS.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanS.TabIndex = 7; + this.labelTimeSpanS.Text = "mm"; + // + // numericTimeSpanSeconds + // + this.numericTimeSpanSeconds.CausesValidation = false; + this.numericTimeSpanSeconds.Location = new System.Drawing.Point(192, 0); + this.numericTimeSpanSeconds.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numericTimeSpanSeconds.Name = "numericTimeSpanSeconds"; + this.numericTimeSpanSeconds.Size = new System.Drawing.Size(35, 20); + this.numericTimeSpanSeconds.TabIndex = 6; + this.numericTimeSpanSeconds.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanSeconds.ValueChanged += new System.EventHandler(this.numericTimeSpanSeconds_ValueChanged); + // + // labelTimeSpanM + // + this.labelTimeSpanM.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanM.Location = new System.Drawing.Point(168, 3); + this.labelTimeSpanM.Name = "labelTimeSpanM"; + this.labelTimeSpanM.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanM.TabIndex = 5; + this.labelTimeSpanM.Text = "mm"; + // + // numericTimeSpanMinutes + // + this.numericTimeSpanMinutes.CausesValidation = false; + this.numericTimeSpanMinutes.Location = new System.Drawing.Point(132, 0); + this.numericTimeSpanMinutes.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numericTimeSpanMinutes.Name = "numericTimeSpanMinutes"; + this.numericTimeSpanMinutes.Size = new System.Drawing.Size(35, 20); + this.numericTimeSpanMinutes.TabIndex = 4; + this.numericTimeSpanMinutes.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanMinutes.ValueChanged += new System.EventHandler(this.numericTimeSpanMinutes_ValueChanged); + // + // labelTimeSpanH + // + this.labelTimeSpanH.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanH.Location = new System.Drawing.Point(107, 3); + this.labelTimeSpanH.Name = "labelTimeSpanH"; + this.labelTimeSpanH.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanH.TabIndex = 3; + this.labelTimeSpanH.Text = "mm"; + // + // numericTimeSpanHours + // + this.numericTimeSpanHours.CausesValidation = false; + this.numericTimeSpanHours.Location = new System.Drawing.Point(66, 0); + this.numericTimeSpanHours.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numericTimeSpanHours.Name = "numericTimeSpanHours"; + this.numericTimeSpanHours.Size = new System.Drawing.Size(40, 20); + this.numericTimeSpanHours.TabIndex = 2; + this.numericTimeSpanHours.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanHours.ValueChanged += new System.EventHandler(this.numericTimeSpanHours_ValueChanged); + // + // labelTimeSpanD + // + this.labelTimeSpanD.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanD.Location = new System.Drawing.Point(41, 2); + this.labelTimeSpanD.Name = "labelTimeSpanD"; + this.labelTimeSpanD.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanD.TabIndex = 1; + this.labelTimeSpanD.Text = "mm"; + // + // numericTimeSpanDays + // + this.numericTimeSpanDays.CausesValidation = false; + this.numericTimeSpanDays.Location = new System.Drawing.Point(0, 0); + this.numericTimeSpanDays.Maximum = new decimal(new int[] { + 999, + 0, + 0, + 0}); + this.numericTimeSpanDays.Name = "numericTimeSpanDays"; + this.numericTimeSpanDays.Size = new System.Drawing.Size(40, 20); + this.numericTimeSpanDays.TabIndex = 0; + this.numericTimeSpanDays.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanDays.ValueChanged += new System.EventHandler(this.numericTimeSpanDays_ValueChanged); + // + // TimeSpanUpDown + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.labelTimeSpanD); + this.Controls.Add(this.numericTimeSpanDays); + this.Controls.Add(this.labelTimeSpanS); + this.Controls.Add(this.numericTimeSpanSeconds); + this.Controls.Add(this.labelTimeSpanM); + this.Controls.Add(this.numericTimeSpanMinutes); + this.Controls.Add(this.labelTimeSpanH); + this.Controls.Add(this.numericTimeSpanHours); + this.Name = "TimeSpanUpDown"; + this.Size = new System.Drawing.Size(253, 20); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label labelTimeSpanS; + private System.Windows.Forms.NumericUpDown numericTimeSpanSeconds; + private System.Windows.Forms.Label labelTimeSpanM; + private System.Windows.Forms.NumericUpDown numericTimeSpanMinutes; + private System.Windows.Forms.Label labelTimeSpanH; + private System.Windows.Forms.NumericUpDown numericTimeSpanHours; + private System.Windows.Forms.Label labelTimeSpanD; + private System.Windows.Forms.NumericUpDown numericTimeSpanDays; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs index 0b29f14d..740c35fe 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs @@ -1,205 +1,205 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(NumericUpDown))] - public partial class TimeSpanUpDown : UserControl - { - private int SupressValueChangedEvent; - - public event EventHandler ValueChanged; - - public int MaxDays - { - get - { - return (int)numericTimeSpanDays.Maximum; - } // get - set - { - if (value < 0) throw new ArgumentOutOfRangeException(); - - var initial = (int)numericTimeSpanDays.Value; - var current = initial; - if (current > value) - { - current = value; - } // if - - numericTimeSpanDays.Value = numericTimeSpanDays.Minimum; - numericTimeSpanDays.Maximum = value; - numericTimeSpanDays.Value = current; - - RefreshLayout(); - } // set - } // MaxDays - - [DefaultValue(1)] - public int DaysIncrement - { - get { return (int)numericTimeSpanDays.Increment; } - set { numericTimeSpanDays.Increment = value; } - } // DaysIncrement - - [DefaultValue(1)] - public int HoursIncrement - { - get { return (int)numericTimeSpanHours.Increment; } - set { numericTimeSpanHours.Increment = value; } - } // HoursIncrement - - [DefaultValue(1)] - public int MinutesIncrement - { - get { return (int)numericTimeSpanMinutes.Increment; } - set { numericTimeSpanMinutes.Increment = value; } - } // MinutesIncrement - - [DefaultValue(false)] - public bool SecondsAllowed - { - get - { - return numericTimeSpanSeconds.Visible; - } // get - set - { - var current = numericTimeSpanSeconds.Visible; - if (current != value) - { - numericTimeSpanSeconds.Visible = value; - labelTimeSpanS.Visible = value; - } // if - } // set - } // SecondsAllowed - - [DefaultValue(1)] - public int SecondsIncrement - { - get { return (int)numericTimeSpanSeconds.Increment; } - set { numericTimeSpanSeconds.Increment = value; } - } // SecondsIncrement - - public TimeSpan Value - { - get - { - return new TimeSpan(numericTimeSpanDays.Visible? (int)numericTimeSpanDays.Value : 0, - (int)numericTimeSpanHours.Value, - (int)numericTimeSpanMinutes.Value, - SecondsAllowed? (int)numericTimeSpanSeconds.Value : 0); - } // get - set - { - if (value.TotalSeconds < 0) throw new ArgumentOutOfRangeException(); - - SupressValueChangedEvent++; - numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, value.Days); - numericTimeSpanHours.Value = Math.Min(numericTimeSpanHours.Maximum, value.Hours); - numericTimeSpanMinutes.Value = value.Minutes; - numericTimeSpanSeconds.Value = value.Seconds; - SupressValueChangedEvent--; - FireValueChanged(); - } // set - } // Value - - public TimeSpanUpDown() - { - InitializeComponent(); - - labelTimeSpanD.Text = Properties.TimeSpanUpDown.DaysShortLabel; - labelTimeSpanH.Text = Properties.TimeSpanUpDown.HoursShortLabel; - labelTimeSpanM.Text = Properties.TimeSpanUpDown.MinutesShortLabel; - labelTimeSpanS.Text = Properties.TimeSpanUpDown.SecondsShortLabel; - } // TimeSpanUpDown - - private void numericTimeSpanDays_ValueChanged(object sender, EventArgs e) - { - FireValueChanged(); - } // numericTimeSpanDays_ValueChanged - - private void numericTimeSpanHours_ValueChanged(object sender, EventArgs e) - { - if (MaxDays == 0) return; - - var value = (int)numericTimeSpanHours.Value; - if (value > 24) - { - SupressValueChangedEvent++; - numericTimeSpanHours.Value = value % 60; - var days = numericTimeSpanDays.Value + value / 60; - numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, days); - SupressValueChangedEvent--; - } // if - FireValueChanged(); - } // numericTimeSpanHours_ValueChanged - - private void numericTimeSpanMinutes_ValueChanged(object sender, EventArgs e) - { - var value = (int)numericTimeSpanMinutes.Value; - if (value > 59) - { - SupressValueChangedEvent++; - numericTimeSpanMinutes.Value = value % 60; - numericTimeSpanHours.Value += value / 60; - SupressValueChangedEvent--; - } // if - FireValueChanged(); - } - - private void numericTimeSpanSeconds_ValueChanged(object sender, EventArgs e) - { - var value = (int)numericTimeSpanSeconds.Value; - if (value > 59) - { - SupressValueChangedEvent++; - numericTimeSpanSeconds.Value = value % 60; - numericTimeSpanMinutes.Value += value / 60; - SupressValueChangedEvent--; - } // if - FireValueChanged(); - } - - private void RefreshLayout() - { - if (numericTimeSpanDays.Maximum == 0) - { - numericTimeSpanDays.Visible = false; - labelTimeSpanD.Visible = false; - numericTimeSpanHours.Left = 0; - } - else - { - numericTimeSpanDays.Visible = true; - numericTimeSpanDays.Left = 0; - labelTimeSpanD.Visible = true; - labelTimeSpanD.Left = numericTimeSpanDays.Left + numericTimeSpanDays.Width + 1; - numericTimeSpanHours.Left = labelTimeSpanD.Left + labelTimeSpanD.Width + 2; - } // if-else - - labelTimeSpanH.Left = numericTimeSpanHours.Left + numericTimeSpanHours.Width + 1; - - numericTimeSpanMinutes.Left = labelTimeSpanH.Left + labelTimeSpanH.Width + 2; - labelTimeSpanM.Left = numericTimeSpanMinutes.Left + numericTimeSpanMinutes.Width + 1; - - numericTimeSpanSeconds.Left = labelTimeSpanM.Left + labelTimeSpanM.Width + 2; - labelTimeSpanS.Left = numericTimeSpanSeconds.Left + numericTimeSpanSeconds.Width + 1; - } // RefreshLayout - - private void FireValueChanged() - { - if ((SupressValueChangedEvent > 0) || (ValueChanged == null)) return; - ValueChanged(this, EventArgs.Empty); - } // FireValueChanged - } // class TimeSpanUpDown -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(NumericUpDown))] + public partial class TimeSpanUpDown : UserControl + { + private int SupressValueChangedEvent; + + public event EventHandler ValueChanged; + + public int MaxDays + { + get + { + return (int)numericTimeSpanDays.Maximum; + } // get + set + { + if (value < 0) throw new ArgumentOutOfRangeException(); + + var initial = (int)numericTimeSpanDays.Value; + var current = initial; + if (current > value) + { + current = value; + } // if + + numericTimeSpanDays.Value = numericTimeSpanDays.Minimum; + numericTimeSpanDays.Maximum = value; + numericTimeSpanDays.Value = current; + + RefreshLayout(); + } // set + } // MaxDays + + [DefaultValue(1)] + public int DaysIncrement + { + get { return (int)numericTimeSpanDays.Increment; } + set { numericTimeSpanDays.Increment = value; } + } // DaysIncrement + + [DefaultValue(1)] + public int HoursIncrement + { + get { return (int)numericTimeSpanHours.Increment; } + set { numericTimeSpanHours.Increment = value; } + } // HoursIncrement + + [DefaultValue(1)] + public int MinutesIncrement + { + get { return (int)numericTimeSpanMinutes.Increment; } + set { numericTimeSpanMinutes.Increment = value; } + } // MinutesIncrement + + [DefaultValue(false)] + public bool SecondsAllowed + { + get + { + return numericTimeSpanSeconds.Visible; + } // get + set + { + var current = numericTimeSpanSeconds.Visible; + if (current != value) + { + numericTimeSpanSeconds.Visible = value; + labelTimeSpanS.Visible = value; + } // if + } // set + } // SecondsAllowed + + [DefaultValue(1)] + public int SecondsIncrement + { + get { return (int)numericTimeSpanSeconds.Increment; } + set { numericTimeSpanSeconds.Increment = value; } + } // SecondsIncrement + + public TimeSpan Value + { + get + { + return new TimeSpan(numericTimeSpanDays.Visible? (int)numericTimeSpanDays.Value : 0, + (int)numericTimeSpanHours.Value, + (int)numericTimeSpanMinutes.Value, + SecondsAllowed? (int)numericTimeSpanSeconds.Value : 0); + } // get + set + { + if (value.TotalSeconds < 0) throw new ArgumentOutOfRangeException(); + + SupressValueChangedEvent++; + numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, value.Days); + numericTimeSpanHours.Value = Math.Min(numericTimeSpanHours.Maximum, value.Hours); + numericTimeSpanMinutes.Value = value.Minutes; + numericTimeSpanSeconds.Value = value.Seconds; + SupressValueChangedEvent--; + FireValueChanged(); + } // set + } // Value + + public TimeSpanUpDown() + { + InitializeComponent(); + + labelTimeSpanD.Text = Properties.TimeSpanUpDown.DaysShortLabel; + labelTimeSpanH.Text = Properties.TimeSpanUpDown.HoursShortLabel; + labelTimeSpanM.Text = Properties.TimeSpanUpDown.MinutesShortLabel; + labelTimeSpanS.Text = Properties.TimeSpanUpDown.SecondsShortLabel; + } // TimeSpanUpDown + + private void numericTimeSpanDays_ValueChanged(object sender, EventArgs e) + { + FireValueChanged(); + } // numericTimeSpanDays_ValueChanged + + private void numericTimeSpanHours_ValueChanged(object sender, EventArgs e) + { + if (MaxDays == 0) return; + + var value = (int)numericTimeSpanHours.Value; + if (value > 24) + { + SupressValueChangedEvent++; + numericTimeSpanHours.Value = value % 60; + var days = numericTimeSpanDays.Value + value / 60; + numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, days); + SupressValueChangedEvent--; + } // if + FireValueChanged(); + } // numericTimeSpanHours_ValueChanged + + private void numericTimeSpanMinutes_ValueChanged(object sender, EventArgs e) + { + var value = (int)numericTimeSpanMinutes.Value; + if (value > 59) + { + SupressValueChangedEvent++; + numericTimeSpanMinutes.Value = value % 60; + numericTimeSpanHours.Value += value / 60; + SupressValueChangedEvent--; + } // if + FireValueChanged(); + } + + private void numericTimeSpanSeconds_ValueChanged(object sender, EventArgs e) + { + var value = (int)numericTimeSpanSeconds.Value; + if (value > 59) + { + SupressValueChangedEvent++; + numericTimeSpanSeconds.Value = value % 60; + numericTimeSpanMinutes.Value += value / 60; + SupressValueChangedEvent--; + } // if + FireValueChanged(); + } + + private void RefreshLayout() + { + if (numericTimeSpanDays.Maximum == 0) + { + numericTimeSpanDays.Visible = false; + labelTimeSpanD.Visible = false; + numericTimeSpanHours.Left = 0; + } + else + { + numericTimeSpanDays.Visible = true; + numericTimeSpanDays.Left = 0; + labelTimeSpanD.Visible = true; + labelTimeSpanD.Left = numericTimeSpanDays.Left + numericTimeSpanDays.Width + 1; + numericTimeSpanHours.Left = labelTimeSpanD.Left + labelTimeSpanD.Width + 2; + } // if-else + + labelTimeSpanH.Left = numericTimeSpanHours.Left + numericTimeSpanHours.Width + 1; + + numericTimeSpanMinutes.Left = labelTimeSpanH.Left + labelTimeSpanH.Width + 2; + labelTimeSpanM.Left = numericTimeSpanMinutes.Left + numericTimeSpanMinutes.Width + 1; + + numericTimeSpanSeconds.Left = labelTimeSpanM.Left + labelTimeSpanM.Width + 2; + labelTimeSpanS.Left = numericTimeSpanSeconds.Left + numericTimeSpanSeconds.Width + 1; + } // RefreshLayout + + private void FireValueChanged() + { + if ((SupressValueChangedEvent > 0) || (ValueChanged == null)) return; + ValueChanged(this, EventArgs.Empty); + } // FireValueChanged + } // class TimeSpanUpDown +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs index c38b1345..bffd2cff 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs @@ -1,163 +1,163 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Forms -{ - partial class AboutBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); - this.okButton = new System.Windows.Forms.Button(); - this.logoPictureBox = new System.Windows.Forms.PictureBox(); - this.labelProductName = new System.Windows.Forms.TextBox(); - this.labelVersion = new System.Windows.Forms.TextBox(); - this.labelCopyright = new System.Windows.Forms.TextBox(); - this.labelCompanyName = new System.Windows.Forms.TextBox(); - this.textBoxDescription = new System.Windows.Forms.RichTextBox(); - this.linkLabelCodeplex = new System.Windows.Forms.LinkLabel(); - this.labelEULA = new System.Windows.Forms.Label(); - this.labelAppName = new System.Windows.Forms.Label(); - this.labelAppVersion = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); - this.SuspendLayout(); - // - // okButton - // - resources.ApplyResources(this.okButton, "okButton"); - this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.okButton.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.Action_Ok_16x16; - this.okButton.Name = "okButton"; - // - // logoPictureBox - // - this.logoPictureBox.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.DefaultAbout; - resources.ApplyResources(this.logoPictureBox, "logoPictureBox"); - this.logoPictureBox.Name = "logoPictureBox"; - this.logoPictureBox.TabStop = false; - // - // labelProductName - // - resources.ApplyResources(this.labelProductName, "labelProductName"); - this.labelProductName.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelProductName.Name = "labelProductName"; - this.labelProductName.ReadOnly = true; - // - // labelVersion - // - resources.ApplyResources(this.labelVersion, "labelVersion"); - this.labelVersion.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelVersion.Name = "labelVersion"; - this.labelVersion.ReadOnly = true; - // - // labelCopyright - // - resources.ApplyResources(this.labelCopyright, "labelCopyright"); - this.labelCopyright.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelCopyright.Name = "labelCopyright"; - this.labelCopyright.ReadOnly = true; - // - // labelCompanyName - // - resources.ApplyResources(this.labelCompanyName, "labelCompanyName"); - this.labelCompanyName.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelCompanyName.Name = "labelCompanyName"; - this.labelCompanyName.ReadOnly = true; - // - // textBoxDescription - // - resources.ApplyResources(this.textBoxDescription, "textBoxDescription"); - this.textBoxDescription.BackColor = System.Drawing.SystemColors.Window; - this.textBoxDescription.Name = "textBoxDescription"; - this.textBoxDescription.ReadOnly = true; - // - // linkLabelCodeplex - // - resources.ApplyResources(this.linkLabelCodeplex, "linkLabelCodeplex"); - this.linkLabelCodeplex.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.linkLabelCodeplex.Name = "linkLabelCodeplex"; - this.linkLabelCodeplex.TabStop = true; - this.linkLabelCodeplex.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelCodeplex_LinkClicked); - // - // labelEULA - // - resources.ApplyResources(this.labelEULA, "labelEULA"); - this.labelEULA.Name = "labelEULA"; - // - // labelAppName - // - resources.ApplyResources(this.labelAppName, "labelAppName"); - this.labelAppName.Name = "labelAppName"; - // - // labelAppVersion - // - resources.ApplyResources(this.labelAppVersion, "labelAppVersion"); - this.labelAppVersion.Name = "labelAppVersion"; - // - // AboutBox - // - this.AcceptButton = this.okButton; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.labelAppVersion); - this.Controls.Add(this.labelAppName); - this.Controls.Add(this.labelEULA); - this.Controls.Add(this.linkLabelCodeplex); - this.Controls.Add(this.okButton); - this.Controls.Add(this.labelProductName); - this.Controls.Add(this.labelVersion); - this.Controls.Add(this.labelCopyright); - this.Controls.Add(this.labelCompanyName); - this.Controls.Add(this.textBoxDescription); - this.Controls.Add(this.logoPictureBox); - this.MinimizeBox = false; - this.Name = "AboutBox"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Load += new System.EventHandler(this.AboutBox_Load); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button okButton; - private System.Windows.Forms.PictureBox logoPictureBox; - private System.Windows.Forms.TextBox labelProductName; - private System.Windows.Forms.TextBox labelVersion; - private System.Windows.Forms.TextBox labelCopyright; - private System.Windows.Forms.TextBox labelCompanyName; - private System.Windows.Forms.RichTextBox textBoxDescription; - private System.Windows.Forms.LinkLabel linkLabelCodeplex; - private System.Windows.Forms.Label labelEULA; - private System.Windows.Forms.Label labelAppName; - private System.Windows.Forms.Label labelAppVersion; - - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class AboutBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); + this.okButton = new System.Windows.Forms.Button(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.TextBox(); + this.labelVersion = new System.Windows.Forms.TextBox(); + this.labelCopyright = new System.Windows.Forms.TextBox(); + this.labelCompanyName = new System.Windows.Forms.TextBox(); + this.textBoxDescription = new System.Windows.Forms.RichTextBox(); + this.linkLabelCodeplex = new System.Windows.Forms.LinkLabel(); + this.labelEULA = new System.Windows.Forms.Label(); + this.labelAppName = new System.Windows.Forms.Label(); + this.labelAppVersion = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // okButton + // + resources.ApplyResources(this.okButton, "okButton"); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.okButton.Name = "okButton"; + // + // logoPictureBox + // + this.logoPictureBox.Image = global::IpTviewr.UiServices.Common.Properties.Resources.DefaultAbout; + resources.ApplyResources(this.logoPictureBox, "logoPictureBox"); + this.logoPictureBox.Name = "logoPictureBox"; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + resources.ApplyResources(this.labelProductName, "labelProductName"); + this.labelProductName.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelProductName.Name = "labelProductName"; + this.labelProductName.ReadOnly = true; + // + // labelVersion + // + resources.ApplyResources(this.labelVersion, "labelVersion"); + this.labelVersion.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelVersion.Name = "labelVersion"; + this.labelVersion.ReadOnly = true; + // + // labelCopyright + // + resources.ApplyResources(this.labelCopyright, "labelCopyright"); + this.labelCopyright.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.ReadOnly = true; + // + // labelCompanyName + // + resources.ApplyResources(this.labelCompanyName, "labelCompanyName"); + this.labelCompanyName.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelCompanyName.Name = "labelCompanyName"; + this.labelCompanyName.ReadOnly = true; + // + // textBoxDescription + // + resources.ApplyResources(this.textBoxDescription, "textBoxDescription"); + this.textBoxDescription.BackColor = System.Drawing.SystemColors.Window; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + // + // linkLabelCodeplex + // + resources.ApplyResources(this.linkLabelCodeplex, "linkLabelCodeplex"); + this.linkLabelCodeplex.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.linkLabelCodeplex.Name = "linkLabelCodeplex"; + this.linkLabelCodeplex.TabStop = true; + this.linkLabelCodeplex.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelCodeplex_LinkClicked); + // + // labelEULA + // + resources.ApplyResources(this.labelEULA, "labelEULA"); + this.labelEULA.Name = "labelEULA"; + // + // labelAppName + // + resources.ApplyResources(this.labelAppName, "labelAppName"); + this.labelAppName.Name = "labelAppName"; + // + // labelAppVersion + // + resources.ApplyResources(this.labelAppVersion, "labelAppVersion"); + this.labelAppVersion.Name = "labelAppVersion"; + // + // AboutBox + // + this.AcceptButton = this.okButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.labelAppVersion); + this.Controls.Add(this.labelAppName); + this.Controls.Add(this.labelEULA); + this.Controls.Add(this.linkLabelCodeplex); + this.Controls.Add(this.okButton); + this.Controls.Add(this.labelProductName); + this.Controls.Add(this.labelVersion); + this.Controls.Add(this.labelCopyright); + this.Controls.Add(this.labelCompanyName); + this.Controls.Add(this.textBoxDescription); + this.Controls.Add(this.logoPictureBox); + this.MinimizeBox = false; + this.Name = "AboutBox"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Load += new System.EventHandler(this.AboutBox_Load); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.TextBox labelProductName; + private System.Windows.Forms.TextBox labelVersion; + private System.Windows.Forms.TextBox labelCopyright; + private System.Windows.Forms.TextBox labelCompanyName; + private System.Windows.Forms.RichTextBox textBoxDescription; + private System.Windows.Forms.LinkLabel linkLabelCodeplex; + private System.Windows.Forms.Label labelEULA; + private System.Windows.Forms.Label labelAppName; + private System.Windows.Forms.Label labelAppVersion; + + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs index c7968388..f28c5e4c 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs @@ -1,8 +1,8 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common; -using Project.IpTv.Common.Telemetry; +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; using System; using System.Collections.Generic; using System.ComponentModel; @@ -12,7 +12,7 @@ using System.Reflection; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Common.Forms +namespace IpTviewr.UiServices.Common.Forms { public partial class AboutBox : CommonBaseForm { diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx index 512d0e5c..f14a4f7f 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx @@ -490,6 +490,6 @@ AboutBox - Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs index f9fc5ad6..b9210b2d 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs @@ -1,50 +1,50 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public class AboutBoxApplicationData - { - public Image LargeIcon - { - get; - set; - } // LargeIcon - - public string Name - { - get; - set; - } // Name - - public string Version - { - get; - set; - } // Version - - public string Status - { - get; - set; - } // Status - - public string LicenseText - { - get; - set; - } // LicenseText - - public string LicenseTextRtf - { - get; - set; - } // LicenseTextRtf - } // class AboutBoxApplicationData -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Common.Forms +{ + public class AboutBoxApplicationData + { + public Image LargeIcon + { + get; + set; + } // LargeIcon + + public string Name + { + get; + set; + } // Name + + public string Version + { + get; + set; + } // Version + + public string Status + { + get; + set; + } // Status + + public string LicenseText + { + get; + set; + } // LicenseText + + public string LicenseTextRtf + { + get; + set; + } // LicenseTextRtf + } // class AboutBoxApplicationData +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs index 6eca6242..ec4bf756 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs @@ -1,120 +1,120 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Forms -{ - partial class BackgroundWorkerDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (worker != null) worker.Dispose(); - - if (disposing && (components != null)) - { - components.Dispose(); - } // if - base.Dispose(disposing); - } // Dispose - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackgroundWorkerDialog)); - this.pictureWaitIcon = new System.Windows.Forms.PictureBox(); - this.labelTaskDescription = new System.Windows.Forms.Label(); - this.progressBar = new System.Windows.Forms.ProgressBar(); - this.labelProgressText = new System.Windows.Forms.Label(); - this.buttonClose = new System.Windows.Forms.Button(); - this.buttonRequestCancel = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).BeginInit(); - this.SuspendLayout(); - // - // pictureWaitIcon - // - this.pictureWaitIcon.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.WaitClock_64x64; - resources.ApplyResources(this.pictureWaitIcon, "pictureWaitIcon"); - this.pictureWaitIcon.Name = "pictureWaitIcon"; - this.pictureWaitIcon.TabStop = false; - // - // labelTaskDescription - // - resources.ApplyResources(this.labelTaskDescription, "labelTaskDescription"); - this.labelTaskDescription.Name = "labelTaskDescription"; - // - // progressBar - // - resources.ApplyResources(this.progressBar, "progressBar"); - this.progressBar.Name = "progressBar"; - // - // labelProgressText - // - resources.ApplyResources(this.labelProgressText, "labelProgressText"); - this.labelProgressText.Name = "labelProgressText"; - // - // buttonClose - // - this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; - resources.ApplyResources(this.buttonClose, "buttonClose"); - this.buttonClose.Name = "buttonClose"; - this.buttonClose.UseVisualStyleBackColor = true; - this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); - // - // buttonRequestCancel - // - this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); - this.buttonRequestCancel.Name = "buttonRequestCancel"; - this.buttonRequestCancel.UseVisualStyleBackColor = true; - this.buttonRequestCancel.Click += new System.EventHandler(this.buttonRequestCancel_Click); - // - // BackgroundWorkerDialog - // - this.AcceptButton = this.buttonClose; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonRequestCancel; - this.Controls.Add(this.buttonClose); - this.Controls.Add(this.buttonRequestCancel); - this.Controls.Add(this.labelProgressText); - this.Controls.Add(this.progressBar); - this.Controls.Add(this.labelTaskDescription); - this.Controls.Add(this.pictureWaitIcon); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "BackgroundWorkerDialog"; - this.ShowInTaskbar = false; - this.TopMost = true; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BackgroundWorkerDialog_FormClosing); - this.Load += new System.EventHandler(this.BackgroundWorkerDialog_Load); - this.Shown += new System.EventHandler(this.BackgroundWorkerDialog_Shown); - ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureWaitIcon; - private System.Windows.Forms.Label labelTaskDescription; - private System.Windows.Forms.ProgressBar progressBar; - private System.Windows.Forms.Label labelProgressText; - private System.Windows.Forms.Button buttonClose; - private System.Windows.Forms.Button buttonRequestCancel; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class BackgroundWorkerDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (worker != null) worker.Dispose(); + + if (disposing && (components != null)) + { + components.Dispose(); + } // if + base.Dispose(disposing); + } // Dispose + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackgroundWorkerDialog)); + this.pictureWaitIcon = new System.Windows.Forms.PictureBox(); + this.labelTaskDescription = new System.Windows.Forms.Label(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.labelProgressText = new System.Windows.Forms.Label(); + this.buttonClose = new System.Windows.Forms.Button(); + this.buttonRequestCancel = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).BeginInit(); + this.SuspendLayout(); + // + // pictureWaitIcon + // + this.pictureWaitIcon.Image = global::IpTviewr.UiServices.Common.Properties.Resources.WaitClock_64x64; + resources.ApplyResources(this.pictureWaitIcon, "pictureWaitIcon"); + this.pictureWaitIcon.Name = "pictureWaitIcon"; + this.pictureWaitIcon.TabStop = false; + // + // labelTaskDescription + // + resources.ApplyResources(this.labelTaskDescription, "labelTaskDescription"); + this.labelTaskDescription.Name = "labelTaskDescription"; + // + // progressBar + // + resources.ApplyResources(this.progressBar, "progressBar"); + this.progressBar.Name = "progressBar"; + // + // labelProgressText + // + resources.ApplyResources(this.labelProgressText, "labelProgressText"); + this.labelProgressText.Name = "labelProgressText"; + // + // buttonClose + // + this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; + resources.ApplyResources(this.buttonClose, "buttonClose"); + this.buttonClose.Name = "buttonClose"; + this.buttonClose.UseVisualStyleBackColor = true; + this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); + // + // buttonRequestCancel + // + this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); + this.buttonRequestCancel.Name = "buttonRequestCancel"; + this.buttonRequestCancel.UseVisualStyleBackColor = true; + this.buttonRequestCancel.Click += new System.EventHandler(this.buttonRequestCancel_Click); + // + // BackgroundWorkerDialog + // + this.AcceptButton = this.buttonClose; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonRequestCancel; + this.Controls.Add(this.buttonClose); + this.Controls.Add(this.buttonRequestCancel); + this.Controls.Add(this.labelProgressText); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.labelTaskDescription); + this.Controls.Add(this.pictureWaitIcon); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "BackgroundWorkerDialog"; + this.ShowInTaskbar = false; + this.TopMost = true; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BackgroundWorkerDialog_FormClosing); + this.Load += new System.EventHandler(this.BackgroundWorkerDialog_Load); + this.Shown += new System.EventHandler(this.BackgroundWorkerDialog_Shown); + ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureWaitIcon; + private System.Windows.Forms.Label labelTaskDescription; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Label labelProgressText; + private System.Windows.Forms.Button buttonClose; + private System.Windows.Forms.Button buttonRequestCancel; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs index e853914c..d5887935 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs @@ -1,300 +1,300 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Project.IpTv.UiServices.Common.Properties; -using System.Threading; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public partial class BackgroundWorkerDialog : CommonBaseForm, IBackgroundWorkerDialog - { - private bool formCanClose; - private BackgroundWorker worker; - private DialogResult dialogResult; - - public static DialogResult RunWorkerAsync(IWin32Window owner, BackgroundWorkerOptions options) - { - using (var dialog = new BackgroundWorkerDialog()) - { - dialog.Options = options; - return dialog.ShowDialog(owner); - } // using - } // RunWorkerAsync - - public BackgroundWorkerDialog() - { - InitializeComponent(); - this.Icon = Resources.WaitClock_Icon; - } // constructor - - public BackgroundWorkerOptions Options - { - get; - set; - } // Options - - protected override void OnExceptionThrown(object sender, CommonBaseFormExceptionThrownEventArgs e) - { - if (Options != null) - { - Options.OutputException = e.Exception; - } // if - - dialogResult = DialogResult.Abort; - formCanClose = true; - this.Close(); - } // OnExceptionThrown - - private void BackgroundWorkerDialog_Load(object sender, EventArgs e) - { - if (Options == null) - { - HandleException(new ArgumentNullException()); - return; - } // if - SafeCall(BackgroundWorkerDialog_Load_Implementation, sender, e); - } // BackgroundWorkerDialog_Load - - private void BackgroundWorkerDialog_Shown(object sender, EventArgs e) - { - SafeCall(BackgroundWorkerDialog_Shown_Implementation, sender, e); - } // BackgroundWorkerDialog_Shown - - private void BackgroundWorkerDialog_FormClosing(object sender, FormClosingEventArgs e) - { - if (!formCanClose) - { - e.Cancel = true; - RequestCancelBackgroundTask(); - } - else - { - this.DialogResult = dialogResult; - } // if-else - } // BackgroundWorkerDialog_FormClosing - - private void buttonRequestCancel_Click(object sender, EventArgs e) - { - RequestCancelBackgroundTask(); - this.DialogResult = DialogResult.None; - } // buttonRequestCancel_Click - - private void buttonClose_Click(object sender, EventArgs e) - { - this.DialogResult = dialogResult; - this.Close(); - } // buttonClose_Click - - private void BackgroundWorkerDialog_Load_Implementation(object sender, EventArgs e) - { - if (Options.Caption != null) this.Text = Options.Caption; - labelTaskDescription.Text = Options.TaskDescription; - labelProgressText.Text = null; - progressBar.Style = ProgressBarStyle.Marquee; - progressBar.Enabled = Options.AllowProgressBar; - - buttonRequestCancel.Enabled = Options.AllowCancelButton; - - if (Options.BeforeTask != null) - { - Options.BeforeTask(Options, this); - } // if - } // BackgroundWorkerDialog_Load_Implementation - - private void BackgroundWorkerDialog_Shown_Implementation(object sender, EventArgs e) - { - worker = new BackgroundWorker(); - worker.WorkerReportsProgress = false; - worker.WorkerSupportsCancellation = true; - - worker.DoWork += Worker_DoWork; - worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - - worker.RunWorkerAsync(Thread.CurrentThread); - } // BackgroundWorkerDialog_Shown_Implementation - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - // set worker thread name (for debugging pourposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "BackgroundWorkerDialog: " + Options.TaskDescription; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - - if (Options.BackgroundBeforeTask != null) Options.BackgroundBeforeTask(Options, this); - if (Options.BackgroundTask != null) Options.BackgroundTask(Options, this); - if (Options.BackgroundAfterTask != null) Options.BackgroundAfterTask(Options, this); - } // Worker_DoWork - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - formCanClose = true; - - if (e.Cancelled) - { - labelProgressText.Text = (Options.TaskCancelledText != null)? Options.TaskCancelledText : Properties.BackgroundWorkerDialog.TaskCancelled; - dialogResult = DialogResult.Cancel; - } // if - - if (e.Error != null) - { - Options.OutputException = e.Error; - dialogResult = DialogResult.Abort; - } - else - { - dialogResult = DialogResult.OK; - if (Options.AfterTask != null) - { - SafeCall(Options.AfterTask, Options, this); - } // if - } // if-else - - if ((Options.AllowAutoClose) || (e.Error != null)) - { - this.Close(); - } - else - { - labelProgressText.Text = (Options.TaskCompletedText != null) ? Options.TaskCompletedText : Properties.BackgroundWorkerDialog.TaskCompleted; - buttonClose.Size = buttonRequestCancel.Size; - buttonClose.Location = buttonRequestCancel.Location; - buttonClose.Visible = true; - buttonRequestCancel.Visible = false; - if (progressBar.Style != ProgressBarStyle.Continuous) - { - progressBar.Style = ProgressBarStyle.Continuous; - progressBar.Value = progressBar.Maximum; - } // if - buttonClose.Focus(); - } // if-else - } // Worker_RunWorkerCompleted - - private void RequestCancelBackgroundTask() - { - if (worker == null) return; - - labelProgressText.Text = (Options.TaskCancellingText != null) ? Options.TaskCancellingText : Properties.BackgroundWorkerDialog.TaskCancelling; - buttonRequestCancel.Enabled = false; - - worker.CancelAsync(); - } // RequestCancelBackgroundTask - - #region IBackgroundWorkerDialog members - - IWin32Window IBackgroundWorkerDialog.ThisWindow - { - get { return this; } - } // IBackgroundWorkerDialog.ThisWindow - - Form IBackgroundWorkerDialog.OwnerForm - { - get { return this.ParentForm; } - } // IBackgroundWorkerDialog.OwnerForm - - void IBackgroundWorkerDialog.SetProgressText(string text) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgressText), text); - } - else - { - SetProgressText(text); - } // if-else - } // IBackgroundWorkerDialog.SetProgressText - - void IBackgroundWorkerDialog.SetProgressMinMax(int min, int max) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgressMinMax), min, max); - } - else - { - SetProgressMinMax(min, max); - } // if-else - } // IBackgroundWorkerDialog.SetProgressMinMax - - void IBackgroundWorkerDialog.SetProgress(int value) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgress), value); - } - else - { - SetProgress(value); - } // if-else - } // IBackgroundWorkerDialog.SetProgress - - void IBackgroundWorkerDialog.SetProgressUndefined() - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgressUndefined)); - } - else - { - SetProgressUndefined(); - } // if-else - } // IBackgroundWorkerDialog.SetProgressUndefined - - bool IBackgroundWorkerDialog.QueryCancel() - { - if (worker == null) return false; - return worker.CancellationPending; - } // IBackgroundWorkerDialog.QueryCancel - - #endregion - - #region IBackgroundWorkerDialog implementation - - private void SetProgressText(string text) - { - labelProgressText.Text = text; - } // SetProgressText - - private void SetProgressMinMax(int min, int max) - { - var value = progressBar.Value; - - progressBar.Value = progressBar.Maximum; - progressBar.Minimum = min; - - progressBar.Value = min; - progressBar.Maximum = max; - - progressBar.Style = ProgressBarStyle.Continuous; - progressBar.Value = Math.Max(value, min); - } // SetProgressMinMax - - private void SetProgress(int value) - { - value = Math.Max(value, progressBar.Minimum); - value = Math.Min(value, progressBar.Maximum); - progressBar.Value = value; - } // SetProgress - - private void SetProgressUndefined() - { - progressBar.Style = ProgressBarStyle.Marquee; - } // SetProgressUndefined - - #endregion - } // class BackgroundWorkerDialog -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Properties; +using System.Threading; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class BackgroundWorkerDialog : CommonBaseForm, IBackgroundWorkerDialog + { + private bool formCanClose; + private BackgroundWorker worker; + private DialogResult dialogResult; + + public static DialogResult RunWorkerAsync(IWin32Window owner, BackgroundWorkerOptions options) + { + using (var dialog = new BackgroundWorkerDialog()) + { + dialog.Options = options; + return dialog.ShowDialog(owner); + } // using + } // RunWorkerAsync + + public BackgroundWorkerDialog() + { + InitializeComponent(); + this.Icon = Resources.WaitClock_Icon; + } // constructor + + public BackgroundWorkerOptions Options + { + get; + set; + } // Options + + protected override void OnExceptionThrown(object sender, CommonBaseFormExceptionThrownEventArgs e) + { + if (Options != null) + { + Options.OutputException = e.Exception; + } // if + + dialogResult = DialogResult.Abort; + formCanClose = true; + this.Close(); + } // OnExceptionThrown + + private void BackgroundWorkerDialog_Load(object sender, EventArgs e) + { + if (Options == null) + { + HandleException(new ArgumentNullException()); + return; + } // if + SafeCall(BackgroundWorkerDialog_Load_Implementation, sender, e); + } // BackgroundWorkerDialog_Load + + private void BackgroundWorkerDialog_Shown(object sender, EventArgs e) + { + SafeCall(BackgroundWorkerDialog_Shown_Implementation, sender, e); + } // BackgroundWorkerDialog_Shown + + private void BackgroundWorkerDialog_FormClosing(object sender, FormClosingEventArgs e) + { + if (!formCanClose) + { + e.Cancel = true; + RequestCancelBackgroundTask(); + } + else + { + this.DialogResult = dialogResult; + } // if-else + } // BackgroundWorkerDialog_FormClosing + + private void buttonRequestCancel_Click(object sender, EventArgs e) + { + RequestCancelBackgroundTask(); + this.DialogResult = DialogResult.None; + } // buttonRequestCancel_Click + + private void buttonClose_Click(object sender, EventArgs e) + { + this.DialogResult = dialogResult; + this.Close(); + } // buttonClose_Click + + private void BackgroundWorkerDialog_Load_Implementation(object sender, EventArgs e) + { + if (Options.Caption != null) this.Text = Options.Caption; + labelTaskDescription.Text = Options.TaskDescription; + labelProgressText.Text = null; + progressBar.Style = ProgressBarStyle.Marquee; + progressBar.Enabled = Options.AllowProgressBar; + + buttonRequestCancel.Enabled = Options.AllowCancelButton; + + if (Options.BeforeTask != null) + { + Options.BeforeTask(Options, this); + } // if + } // BackgroundWorkerDialog_Load_Implementation + + private void BackgroundWorkerDialog_Shown_Implementation(object sender, EventArgs e) + { + worker = new BackgroundWorker(); + worker.WorkerReportsProgress = false; + worker.WorkerSupportsCancellation = true; + + worker.DoWork += Worker_DoWork; + worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + + worker.RunWorkerAsync(Thread.CurrentThread); + } // BackgroundWorkerDialog_Shown_Implementation + + void Worker_DoWork(object sender, DoWorkEventArgs e) + { + // set worker thread name (for debugging pourposes) + var currentThread = Thread.CurrentThread; + currentThread.Name = "BackgroundWorkerDialog: " + Options.TaskDescription; + + // inherit parent thead culture settings + var parentThread = e.Argument as Thread; + if (parentThread != null) + { + currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case + currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread + } // if + + if (Options.BackgroundBeforeTask != null) Options.BackgroundBeforeTask(Options, this); + if (Options.BackgroundTask != null) Options.BackgroundTask(Options, this); + if (Options.BackgroundAfterTask != null) Options.BackgroundAfterTask(Options, this); + } // Worker_DoWork + + void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + formCanClose = true; + + if (e.Cancelled) + { + labelProgressText.Text = (Options.TaskCancelledText != null)? Options.TaskCancelledText : Properties.BackgroundWorkerDialog.TaskCancelled; + dialogResult = DialogResult.Cancel; + } // if + + if (e.Error != null) + { + Options.OutputException = e.Error; + dialogResult = DialogResult.Abort; + } + else + { + dialogResult = DialogResult.OK; + if (Options.AfterTask != null) + { + SafeCall(Options.AfterTask, Options, this); + } // if + } // if-else + + if ((Options.AllowAutoClose) || (e.Error != null)) + { + this.Close(); + } + else + { + labelProgressText.Text = (Options.TaskCompletedText != null) ? Options.TaskCompletedText : Properties.BackgroundWorkerDialog.TaskCompleted; + buttonClose.Size = buttonRequestCancel.Size; + buttonClose.Location = buttonRequestCancel.Location; + buttonClose.Visible = true; + buttonRequestCancel.Visible = false; + if (progressBar.Style != ProgressBarStyle.Continuous) + { + progressBar.Style = ProgressBarStyle.Continuous; + progressBar.Value = progressBar.Maximum; + } // if + buttonClose.Focus(); + } // if-else + } // Worker_RunWorkerCompleted + + private void RequestCancelBackgroundTask() + { + if (worker == null) return; + + labelProgressText.Text = (Options.TaskCancellingText != null) ? Options.TaskCancellingText : Properties.BackgroundWorkerDialog.TaskCancelling; + buttonRequestCancel.Enabled = false; + + worker.CancelAsync(); + } // RequestCancelBackgroundTask + + #region IBackgroundWorkerDialog members + + IWin32Window IBackgroundWorkerDialog.ThisWindow + { + get { return this; } + } // IBackgroundWorkerDialog.ThisWindow + + Form IBackgroundWorkerDialog.OwnerForm + { + get { return this.ParentForm; } + } // IBackgroundWorkerDialog.OwnerForm + + void IBackgroundWorkerDialog.SetProgressText(string text) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new Action(SetProgressText), text); + } + else + { + SetProgressText(text); + } // if-else + } // IBackgroundWorkerDialog.SetProgressText + + void IBackgroundWorkerDialog.SetProgressMinMax(int min, int max) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new Action(SetProgressMinMax), min, max); + } + else + { + SetProgressMinMax(min, max); + } // if-else + } // IBackgroundWorkerDialog.SetProgressMinMax + + void IBackgroundWorkerDialog.SetProgress(int value) + { + if (this.InvokeRequired) + { + this.BeginInvoke(new Action(SetProgress), value); + } + else + { + SetProgress(value); + } // if-else + } // IBackgroundWorkerDialog.SetProgress + + void IBackgroundWorkerDialog.SetProgressUndefined() + { + if (this.InvokeRequired) + { + this.BeginInvoke(new Action(SetProgressUndefined)); + } + else + { + SetProgressUndefined(); + } // if-else + } // IBackgroundWorkerDialog.SetProgressUndefined + + bool IBackgroundWorkerDialog.QueryCancel() + { + if (worker == null) return false; + return worker.CancellationPending; + } // IBackgroundWorkerDialog.QueryCancel + + #endregion + + #region IBackgroundWorkerDialog implementation + + private void SetProgressText(string text) + { + labelProgressText.Text = text; + } // SetProgressText + + private void SetProgressMinMax(int min, int max) + { + var value = progressBar.Value; + + progressBar.Value = progressBar.Maximum; + progressBar.Minimum = min; + + progressBar.Value = min; + progressBar.Maximum = max; + + progressBar.Style = ProgressBarStyle.Continuous; + progressBar.Value = Math.Max(value, min); + } // SetProgressMinMax + + private void SetProgress(int value) + { + value = Math.Max(value, progressBar.Minimum); + value = Math.Min(value, progressBar.Maximum); + progressBar.Value = value; + } // SetProgress + + private void SetProgressUndefined() + { + progressBar.Style = ProgressBarStyle.Marquee; + } // SetProgressUndefined + + #endregion + } // class BackgroundWorkerDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx index 55c7bb70..58cf55b8 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx @@ -1,332 +1,332 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 12, 12 - - - 64, 64 - - - - CenterImage - - - - 0 - - - pictureWaitIcon - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - True - - - 82, 12 - - - 148, 13 - - - 1 - - - (Background task description) - - - labelTaskDescription - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - 82, 33 - - - 290, 23 - - - 2 - - - progressBar - - - System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - True - - - 82, 63 - - - 191, 13 - - - 3 - - - (Background task progress information) - - - labelProgressText - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAACOSURBVDhPpZLBCcAgDEUdwZncwm3cycF685r6DlLbJEXb - Dx8kJu9HMIjIL5vFHZvFHV8HR6212H10y+SyAyi1VkkpSc6ZYWBxCUAjAwwCAASQu1WAmc6dAtDcPd44 - ms10ZAHUul46UgBEwjzkpSMPcNvCS0cmAJE0tvDS0Rvg+XFUOlKArzaLOzaL65ZwAtqVazMG1dGuAAAA - AElFTkSuQmCC - - - - NoControl - - - 166, 82 - - - 100, 25 - - - 26 - - - &Close - - - MiddleRight - - - ImageBeforeText - - - False - - - buttonClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADrwAAA68AZW8ckkAAAEbSURBVDhPY/j//z9FGKsgKRjB - AIJv374ZAPF9IP4PxPPBgkgAKOaALI/NgPV70sP+L1Tj/X9761qQogCouMK7xw/XH2ss/n+wJAVuODYD - 5sMMWGYs8//Vjasg2xru79/xfo2DFopmEMBmgMD7Z0/Ob/S1BBsCokG2gtjomkEAwwAQQDcEl2YQwGWA - AdkGABUVPD1z/D2yF0CaQexrK+aDDCkAK4QCFANANjw7fwoceDDNIJeAxGGGgOSBfHDMgACKAa/v3ETR - /OHFs/dAxQYghSBDQC4AySOLoxpw6/p7kGaQIpBhQEUJIEUwADMEZDiQDYpeARQDQBo+vnwOkgThfqg+ - FAAUnw+VB+HzKAaQi7EKkoKxChKP/zMAAEaHdcnCgwx7AAAAAElFTkSuQmCC - - - - NoControl - - - 272, 82 - - - 100, 25 - - - 25 - - - &Cancel - - - MiddleRight - - - ImageBeforeText - - - buttonRequestCancel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - True - - - 6, 13 - - - 384, 115 - - - CenterParent - - - Please wait... - - - BackgroundWorkerDialog - - - Project.IpTv.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 12, 12 + + + 64, 64 + + + + CenterImage + + + + 0 + + + pictureWaitIcon + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + True + + + 82, 12 + + + 148, 13 + + + 1 + + + (Background task description) + + + labelTaskDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + 82, 33 + + + 290, 23 + + + 2 + + + progressBar + + + System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + 82, 63 + + + 191, 13 + + + 3 + + + (Background task progress information) + + + labelProgressText + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAACOSURBVDhPpZLBCcAgDEUdwZncwm3cycF685r6DlLbJEXb + Dx8kJu9HMIjIL5vFHZvFHV8HR6212H10y+SyAyi1VkkpSc6ZYWBxCUAjAwwCAASQu1WAmc6dAtDcPd44 + ms10ZAHUul46UgBEwjzkpSMPcNvCS0cmAJE0tvDS0Rvg+XFUOlKArzaLOzaL65ZwAtqVazMG1dGuAAAA + AElFTkSuQmCC + + + + NoControl + + + 166, 82 + + + 100, 25 + + + 26 + + + &Close + + + MiddleRight + + + ImageBeforeText + + + False + + + buttonClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADrwAAA68AZW8ckkAAAEbSURBVDhPY/j//z9FGKsgKRjB + AIJv374ZAPF9IP4PxPPBgkgAKOaALI/NgPV70sP+L1Tj/X9761qQogCouMK7xw/XH2ss/n+wJAVuODYD + 5sMMWGYs8//Vjasg2xru79/xfo2DFopmEMBmgMD7Z0/Ob/S1BBsCokG2gtjomkEAwwAQQDcEl2YQwGWA + AdkGABUVPD1z/D2yF0CaQexrK+aDDCkAK4QCFANANjw7fwoceDDNIJeAxGGGgOSBfHDMgACKAa/v3ETR + /OHFs/dAxQYghSBDQC4AySOLoxpw6/p7kGaQIpBhQEUJIEUwADMEZDiQDYpeARQDQBo+vnwOkgThfqg+ + FAAUnw+VB+HzKAaQi7EKkoKxChKP/zMAAEaHdcnCgwx7AAAAAElFTkSuQmCC + + + + NoControl + + + 272, 82 + + + 100, 25 + + + 25 + + + &Cancel + + + MiddleRight + + + ImageBeforeText + + + buttonRequestCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 13 + + + 384, 115 + + + CenterParent + + + Please wait... + + + BackgroundWorkerDialog + + + IpTviewr.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs index eda07708..b809b71a 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs @@ -1,109 +1,109 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public class BackgroundWorkerOptions - { - public string Caption - { - get; - set; - } // Caption - - public string TaskDescription - { - get; - set; - } // TaskDescription - - public bool AllowProgressBar - { - get; - set; - } // public bool AllowProgressBar - - public bool AllowCancelButton - { - get; - set; - } // AllowCancelButton - - public bool AllowAutoClose - { - get; - set; - } // AllowAutoClose - - public string TaskCancellingText - { - get; - set; - } // TaskCancellingText - - public string TaskCancelledText - { - get; - set; - } // TaskCancelledText - - public string TaskCompletedText - { - get; - set; - } // TaskCompletedText - - public Action BeforeTask - { - get; - set; - } // BeforeTask - - public Action BackgroundBeforeTask - { - get; - set; - } // BackgroundBeforeTask - - public Action BackgroundTask - { - get; - set; - } // BackgroundTask - - public Action BackgroundAfterTask - { - get; - set; - } // BackgroundAfterTask - - public Action AfterTask - { - get; - set; - } // AfterTask - - public object InputData - { - get; - set; - } // InputData - - public object OutputData - { - get; - set; - } // OputputData - - public Exception OutputException - { - get; - internal set; - } // OutputException - } // class BackgroundWorkerOptions -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Common.Forms +{ + public class BackgroundWorkerOptions + { + public string Caption + { + get; + set; + } // Caption + + public string TaskDescription + { + get; + set; + } // TaskDescription + + public bool AllowProgressBar + { + get; + set; + } // public bool AllowProgressBar + + public bool AllowCancelButton + { + get; + set; + } // AllowCancelButton + + public bool AllowAutoClose + { + get; + set; + } // AllowAutoClose + + public string TaskCancellingText + { + get; + set; + } // TaskCancellingText + + public string TaskCancelledText + { + get; + set; + } // TaskCancelledText + + public string TaskCompletedText + { + get; + set; + } // TaskCompletedText + + public Action BeforeTask + { + get; + set; + } // BeforeTask + + public Action BackgroundBeforeTask + { + get; + set; + } // BackgroundBeforeTask + + public Action BackgroundTask + { + get; + set; + } // BackgroundTask + + public Action BackgroundAfterTask + { + get; + set; + } // BackgroundAfterTask + + public Action AfterTask + { + get; + set; + } // AfterTask + + public object InputData + { + get; + set; + } // InputData + + public object OutputData + { + get; + set; + } // OputputData + + public Exception OutputException + { + get; + internal set; + } // OutputException + } // class BackgroundWorkerOptions +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs index bc8af676..cb034fd1 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs @@ -1,125 +1,125 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.SqlServer.MessageBox; -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public class CommonBaseForm : Form - { - #region Helper methods - - public event EventHandler ExceptionThrown; - - protected void HandleException(Exception ex) - { - OnExceptionThrown(this, new CommonBaseFormExceptionThrownEventArgs(ex)); - } // HandleException - - protected void HandleException(string message, Exception ex) - { - OnExceptionThrown(this, new CommonBaseFormExceptionThrownEventArgs(message, ex)); - } // HandleException - - /// - /// Handles a caught exception, by displaying an ExceptionMessageBox. Descendants are encouraged to provide their own implementation. - /// - /// Caught exception information - /// Descendants who override this method should not call base.HandleException - protected virtual void OnExceptionThrown(object sender, CommonBaseFormExceptionThrownEventArgs e) - { - var parent = ParentForm as CommonBaseForm; - if (parent != null) - { - parent.OnExceptionThrown(sender, e); - } // if - - if (ExceptionThrown != null) - { - ExceptionThrown(this, e); - } - else - { - BasicGoogleTelemetry.SendExtendedExceptionHit(e.Exception, true, e.Message, this.GetType().Name); - - var box = new ExceptionMessageBox() - { - Caption = Properties.CommonForm.UncaughtExceptionCaption, - Buttons = ExceptionMessageBoxButtons.OK, - Symbol = ExceptionMessageBoxSymbol.Stop, - }; - - if (e.Message == null) - { - box.Message = e.Exception; - } - else - { - box.Text = e.Message; - box.InnerException = e.Exception; - } // if-else - - box.Show(this); - } // if-else - } // OnExceptionThrown - - protected void SafeDispose(IDisposable disposable) - { - if (disposable == null) return; - disposable.Dispose(); - } // SafeDispose - - protected bool SafeCall(Action implementation) - { - try - { - implementation(); - - return true; - } - catch (Exception ex) - { - HandleException(ex); - return false; - } // try-catch - } // SafeCall - - protected bool SafeCall(Action implementation, T arg) - { - try - { - implementation(arg); - - return true; - } - catch (Exception ex) - { - HandleException(ex); - return false; - } // try-catch - } // SafeCall - - protected bool SafeCall(Action implementation, T1 arg1, T2 arg2) - { - try - { - implementation(arg1, arg2); - - return true; - } - catch (Exception ex) - { - HandleException(ex); - return false; - } // try-catch - } // SafeCall - - #endregion - } // class CommonBaseForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Microsoft.SqlServer.MessageBox; +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public class CommonBaseForm : Form + { + #region Helper methods + + public event EventHandler ExceptionThrown; + + protected void HandleException(Exception ex) + { + OnExceptionThrown(this, new CommonBaseFormExceptionThrownEventArgs(ex)); + } // HandleException + + protected void HandleException(string message, Exception ex) + { + OnExceptionThrown(this, new CommonBaseFormExceptionThrownEventArgs(message, ex)); + } // HandleException + + /// + /// Handles a caught exception, by displaying an ExceptionMessageBox. Descendants are encouraged to provide their own implementation. + /// + /// Caught exception information + /// Descendants who override this method should not call base.HandleException + protected virtual void OnExceptionThrown(object sender, CommonBaseFormExceptionThrownEventArgs e) + { + var parent = ParentForm as CommonBaseForm; + if (parent != null) + { + parent.OnExceptionThrown(sender, e); + } // if + + if (ExceptionThrown != null) + { + ExceptionThrown(this, e); + } + else + { + BasicGoogleTelemetry.SendExtendedExceptionHit(e.Exception, true, e.Message, this.GetType().Name); + + var box = new ExceptionMessageBox() + { + Caption = Properties.CommonForm.UncaughtExceptionCaption, + Buttons = ExceptionMessageBoxButtons.OK, + Symbol = ExceptionMessageBoxSymbol.Stop, + }; + + if (e.Message == null) + { + box.Message = e.Exception; + } + else + { + box.Text = e.Message; + box.InnerException = e.Exception; + } // if-else + + box.Show(this); + } // if-else + } // OnExceptionThrown + + protected void SafeDispose(IDisposable disposable) + { + if (disposable == null) return; + disposable.Dispose(); + } // SafeDispose + + protected bool SafeCall(Action implementation) + { + try + { + implementation(); + + return true; + } + catch (Exception ex) + { + HandleException(ex); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action implementation, T arg) + { + try + { + implementation(arg); + + return true; + } + catch (Exception ex) + { + HandleException(ex); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action implementation, T1 arg1, T2 arg2) + { + try + { + implementation(arg1, arg2); + + return true; + } + catch (Exception ex) + { + HandleException(ex); + return false; + } // try-catch + } // SafeCall + + #endregion + } // class CommonBaseForm +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseFormExceptionThrownEventArgs.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseFormExceptionThrownEventArgs.cs index 536ce9ab..14a440f4 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseFormExceptionThrownEventArgs.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseFormExceptionThrownEventArgs.cs @@ -1,34 +1,34 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public class CommonBaseFormExceptionThrownEventArgs : EventArgs - { - public CommonBaseFormExceptionThrownEventArgs(Exception exception) - { - Message = exception.Message; - Exception = exception; - } // constructor - - public CommonBaseFormExceptionThrownEventArgs(string message, Exception exception) - { - Message = message; - Exception = exception; - } // constructor - - public string Message - { - get; - private set; - } // Message - - public Exception Exception - { - get; - private set; - } // Exception - } // class CommonBaseFormExceptionThrownEventArgs -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Common.Forms +{ + public class CommonBaseFormExceptionThrownEventArgs : EventArgs + { + public CommonBaseFormExceptionThrownEventArgs(Exception exception) + { + Message = exception.Message; + Exception = exception; + } // constructor + + public CommonBaseFormExceptionThrownEventArgs(string message, Exception exception) + { + Message = message; + Exception = exception; + } // constructor + + public string Message + { + get; + private set; + } // Message + + public Exception Exception + { + get; + private set; + } // Exception + } // class CommonBaseFormExceptionThrownEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs index f67e39e6..616381b9 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs @@ -1,79 +1,79 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Forms -{ - partial class HelpDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HelpDialog)); - this.richTextHelp = new System.Windows.Forms.RichTextBox(); - this.buttonClose = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // richTextHelp - // - resources.ApplyResources(this.richTextHelp, "richTextHelp"); - this.richTextHelp.AutoWordSelection = true; - this.richTextHelp.BackColor = System.Drawing.SystemColors.Window; - this.richTextHelp.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.richTextHelp.Name = "richTextHelp"; - this.richTextHelp.ReadOnly = true; - this.richTextHelp.ShowSelectionMargin = true; - this.richTextHelp.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextHelp_LinkClicked); - // - // buttonClose - // - this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonClose.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.Action_Ok_16x16; - resources.ApplyResources(this.buttonClose, "buttonClose"); - this.buttonClose.Name = "buttonClose"; - this.buttonClose.UseVisualStyleBackColor = true; - // - // HelpDialog - // - this.AcceptButton = this.buttonClose; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonClose; - this.Controls.Add(this.buttonClose); - this.Controls.Add(this.richTextHelp); - this.MinimizeBox = false; - this.Name = "HelpDialog"; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.RichTextBox richTextHelp; - private System.Windows.Forms.Button buttonClose; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class HelpDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HelpDialog)); + this.richTextHelp = new System.Windows.Forms.RichTextBox(); + this.buttonClose = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // richTextHelp + // + resources.ApplyResources(this.richTextHelp, "richTextHelp"); + this.richTextHelp.AutoWordSelection = true; + this.richTextHelp.BackColor = System.Drawing.SystemColors.Window; + this.richTextHelp.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.richTextHelp.Name = "richTextHelp"; + this.richTextHelp.ReadOnly = true; + this.richTextHelp.ShowSelectionMargin = true; + this.richTextHelp.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextHelp_LinkClicked); + // + // buttonClose + // + this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonClose.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + resources.ApplyResources(this.buttonClose, "buttonClose"); + this.buttonClose.Name = "buttonClose"; + this.buttonClose.UseVisualStyleBackColor = true; + // + // HelpDialog + // + this.AcceptButton = this.buttonClose; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonClose; + this.Controls.Add(this.buttonClose); + this.Controls.Add(this.richTextHelp); + this.MinimizeBox = false; + this.Name = "HelpDialog"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextHelp; + private System.Windows.Forms.Button buttonClose; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs index d18e0c65..f3e87452 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs @@ -1,51 +1,51 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public partial class HelpDialog : Form - { - public static DialogResult ShowRtfHelp(IWin32Window owner, string rtfHelpText, string caption = null) - { - using (var dialog = new HelpDialog()) - { - BasicGoogleTelemetry.SendScreenHit(dialog, caption); - dialog.richTextHelp.Rtf = rtfHelpText; - if (caption != null) dialog.Text = caption; - return dialog.ShowDialog(owner); - } // using dialog - } // ShowRtfHelp - - public static DialogResult ShowPlainTextHelp(IWin32Window owner, string helpText, string caption = null) - { - using (var dialog = new HelpDialog()) - { - BasicGoogleTelemetry.SendScreenHit(dialog, caption); - dialog.richTextHelp.Text = helpText; - if (caption != null) dialog.Text = caption; - return dialog.ShowDialog(owner); - } // using dialog - } // ShowRtfHelp - - public HelpDialog() - { - InitializeComponent(); - } // constructor - - private void richTextHelp_LinkClicked(object sender, LinkClickedEventArgs e) - { - Launcher.OpenUrl(this, e.LinkText); - } // richTextHelp_LinkClicked - } // class HelpDialog -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class HelpDialog : Form + { + public static DialogResult ShowRtfHelp(IWin32Window owner, string rtfHelpText, string caption = null) + { + using (var dialog = new HelpDialog()) + { + BasicGoogleTelemetry.SendScreenHit(dialog, caption); + dialog.richTextHelp.Rtf = rtfHelpText; + if (caption != null) dialog.Text = caption; + return dialog.ShowDialog(owner); + } // using dialog + } // ShowRtfHelp + + public static DialogResult ShowPlainTextHelp(IWin32Window owner, string helpText, string caption = null) + { + using (var dialog = new HelpDialog()) + { + BasicGoogleTelemetry.SendScreenHit(dialog, caption); + dialog.richTextHelp.Text = helpText; + if (caption != null) dialog.Text = caption; + return dialog.ShowDialog(owner); + } // using dialog + } // ShowRtfHelp + + public HelpDialog() + { + InitializeComponent(); + } // constructor + + private void richTextHelp_LinkClicked(object sender, LinkClickedEventArgs e) + { + Launcher.OpenUrl(this, e.LinkText); + } // richTextHelp_LinkClicked + } // class HelpDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs index 33971916..b19272fc 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs @@ -1,27 +1,27 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public interface IBackgroundWorkerDialog - { - IWin32Window ThisWindow - { - get; - } // ThisWindow - - Form OwnerForm - { - get; - } // OwnerForm - - void SetProgressText(string text); - void SetProgressMinMax(int min, int max); - void SetProgress(int value); - void SetProgressUndefined(); - bool QueryCancel(); - } // interface IBackgroundWorkerDialog -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public interface IBackgroundWorkerDialog + { + IWin32Window ThisWindow + { + get; + } // ThisWindow + + Form OwnerForm + { + get; + } // OwnerForm + + void SetProgressText(string text); + void SetProgressMinMax(int min, int max); + void SetProgress(int value); + void SetProgressUndefined(); + bool QueryCancel(); + } // interface IBackgroundWorkerDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs index 9358d2d7..90ee514e 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs @@ -1,106 +1,106 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Forms -{ - partial class NotImplementedBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.labelNotImplemented = new System.Windows.Forms.Label(); - this.buttonOk = new System.Windows.Forms.Button(); - this.pictureIconNotImplemented = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).BeginInit(); - this.SuspendLayout(); - // - // labelNotImplemented - // - this.labelNotImplemented.AutoSize = true; - this.labelNotImplemented.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelNotImplemented.Location = new System.Drawing.Point(218, 25); - this.labelNotImplemented.Name = "labelNotImplemented"; - this.labelNotImplemented.Size = new System.Drawing.Size(239, 147); - this.labelNotImplemented.TabIndex = 1; - this.labelNotImplemented.Text = "We\'re sorry! Work in progress\r\n\r\n¡Lo sentimos! Trabajo en curso\r\n\r\nDésolé! Travau" + - "x en cours\r\n\r\nSiamo spiacenti! Lavori in corso"; - this.labelNotImplemented.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // buttonOk - // - this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonOk.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.Action_Ok_16x16; - this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonOk.Location = new System.Drawing.Point(372, 187); - this.buttonOk.Name = "buttonOk"; - this.buttonOk.Size = new System.Drawing.Size(100, 25); - this.buttonOk.TabIndex = 2; - this.buttonOk.Text = "&OK"; - this.buttonOk.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonOk.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - // - // pictureIconNotImplemented - // - this.pictureIconNotImplemented.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.NotImplemented_200x200; - this.pictureIconNotImplemented.Location = new System.Drawing.Point(12, 12); - this.pictureIconNotImplemented.Name = "pictureIconNotImplemented"; - this.pictureIconNotImplemented.Size = new System.Drawing.Size(200, 200); - this.pictureIconNotImplemented.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureIconNotImplemented.TabIndex = 0; - this.pictureIconNotImplemented.TabStop = false; - // - // NotImplementedBox - // - this.AcceptButton = this.buttonOk; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonOk; - this.ClientSize = new System.Drawing.Size(472, 212); - this.ControlBox = false; - this.Controls.Add(this.buttonOk); - this.Controls.Add(this.labelNotImplemented); - this.Controls.Add(this.pictureIconNotImplemented); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "NotImplementedBox"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureIconNotImplemented; - private System.Windows.Forms.Label labelNotImplemented; - private System.Windows.Forms.Button buttonOk; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class NotImplementedBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.labelNotImplemented = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.pictureIconNotImplemented = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).BeginInit(); + this.SuspendLayout(); + // + // labelNotImplemented + // + this.labelNotImplemented.AutoSize = true; + this.labelNotImplemented.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelNotImplemented.Location = new System.Drawing.Point(218, 25); + this.labelNotImplemented.Name = "labelNotImplemented"; + this.labelNotImplemented.Size = new System.Drawing.Size(239, 147); + this.labelNotImplemented.TabIndex = 1; + this.labelNotImplemented.Text = "We\'re sorry! Work in progress\r\n\r\n¡Lo sentimos! Trabajo en curso\r\n\r\nDésolé! Travau" + + "x en cours\r\n\r\nSiamo spiacenti! Lavori in corso"; + this.labelNotImplemented.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.buttonOk.Location = new System.Drawing.Point(372, 187); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 2; + this.buttonOk.Text = "&OK"; + this.buttonOk.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonOk.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + // + // pictureIconNotImplemented + // + this.pictureIconNotImplemented.Image = global::IpTviewr.UiServices.Common.Properties.Resources.NotImplemented_200x200; + this.pictureIconNotImplemented.Location = new System.Drawing.Point(12, 12); + this.pictureIconNotImplemented.Name = "pictureIconNotImplemented"; + this.pictureIconNotImplemented.Size = new System.Drawing.Size(200, 200); + this.pictureIconNotImplemented.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureIconNotImplemented.TabIndex = 0; + this.pictureIconNotImplemented.TabStop = false; + // + // NotImplementedBox + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonOk; + this.ClientSize = new System.Drawing.Size(472, 212); + this.ControlBox = false; + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.labelNotImplemented); + this.Controls.Add(this.pictureIconNotImplemented); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "NotImplementedBox"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureIconNotImplemented; + private System.Windows.Forms.Label labelNotImplemented; + private System.Windows.Forms.Button buttonOk; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs index ac074175..717a1c54 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs @@ -1,41 +1,41 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public partial class NotImplementedBox : Form - { - public NotImplementedBox() - { - InitializeComponent(); - } // constructor - - public static void ShowBox(IWin32Window owner, string context) - { - using (var box = new NotImplementedBox()) - { - if (context == null) - { - context = owner.GetType().Name; - } - else - { - string.Format("{0}/{1}", owner.GetType().Name, context); - } // if-else - - BasicGoogleTelemetry.SendScreenHit(box, context); - box.ShowDialog(owner); - } // using - } // ShowBox - } // class NotImplementedBox -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class NotImplementedBox : Form + { + public NotImplementedBox() + { + InitializeComponent(); + } // constructor + + public static void ShowBox(IWin32Window owner, string context) + { + using (var box = new NotImplementedBox()) + { + if (context == null) + { + context = owner.GetType().Name; + } + else + { + string.Format("{0}/{1}", owner.GetType().Name, context); + } // if-else + + BasicGoogleTelemetry.SendScreenHit(box, context); + box.ShowDialog(owner); + } // using + } // ShowBox + } // class NotImplementedBox +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs index 307fbab8..b3cdfb57 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs @@ -1,181 +1,181 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Forms -{ - partial class PropertiesDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.ColumnHeader Property; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertiesDialog)); - System.Windows.Forms.ColumnHeader Value; - this.labelDescription = new System.Windows.Forms.Label(); - this.contextMenuList = new System.Windows.Forms.ContextMenuStrip(this.components); - this.contextMenuListCopyValue = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuListCopyName = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuListCopyRow = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.contextMenuListCopyAll = new System.Windows.Forms.ToolStripMenuItem(); - this.buttonOk = new System.Windows.Forms.Button(); - this.pictureBoxItemIcon = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); - this.listViewProperties = new Project.IpTv.UiServices.Common.Controls.ListViewSortable(); - Property = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - Value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.contextMenuList.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).BeginInit(); - this.SuspendLayout(); - // - // Property - // - resources.ApplyResources(Property, "Property"); - // - // Value - // - resources.ApplyResources(Value, "Value"); - // - // labelDescription - // - resources.ApplyResources(this.labelDescription, "labelDescription"); - this.labelDescription.AutoEllipsis = true; - this.labelDescription.Name = "labelDescription"; - this.labelDescription.UseMnemonic = false; - // - // contextMenuList - // - this.contextMenuList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.contextMenuListCopyValue, - this.contextMenuListCopyName, - this.contextMenuListCopyRow, - this.toolStripSeparator1, - this.contextMenuListCopyAll}); - this.contextMenuList.Name = "contextMenu"; - resources.ApplyResources(this.contextMenuList, "contextMenuList"); - this.contextMenuList.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuList_Opening); - // - // contextMenuListCopyValue - // - this.contextMenuListCopyValue.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.Action_Copy_Clip_16x16; - this.contextMenuListCopyValue.Name = "contextMenuListCopyValue"; - resources.ApplyResources(this.contextMenuListCopyValue, "contextMenuListCopyValue"); - this.contextMenuListCopyValue.Click += new System.EventHandler(this.contextMenuListCopyValue_Click); - // - // contextMenuListCopyName - // - this.contextMenuListCopyName.Name = "contextMenuListCopyName"; - resources.ApplyResources(this.contextMenuListCopyName, "contextMenuListCopyName"); - this.contextMenuListCopyName.Click += new System.EventHandler(this.contextMenuListCopyName_Click); - // - // contextMenuListCopyRow - // - this.contextMenuListCopyRow.Name = "contextMenuListCopyRow"; - resources.ApplyResources(this.contextMenuListCopyRow, "contextMenuListCopyRow"); - this.contextMenuListCopyRow.Click += new System.EventHandler(this.contextMenuListCopyRow_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); - // - // contextMenuListCopyAll - // - this.contextMenuListCopyAll.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.Action_Copy_Table; - this.contextMenuListCopyAll.Name = "contextMenuListCopyAll"; - resources.ApplyResources(this.contextMenuListCopyAll, "contextMenuListCopyAll"); - this.contextMenuListCopyAll.Click += new System.EventHandler(this.contextMenuListCopyAll_Click); - // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonOk.Image = global::Project.IpTv.UiServices.Common.Properties.Resources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - // - // pictureBoxItemIcon - // - resources.ApplyResources(this.pictureBoxItemIcon, "pictureBoxItemIcon"); - this.pictureBoxItemIcon.Name = "pictureBoxItemIcon"; - this.pictureBoxItemIcon.TabStop = false; - // - // listViewProperties - // - resources.ApplyResources(this.listViewProperties, "listViewProperties"); - this.listViewProperties.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - Property, - Value}); - this.listViewProperties.ContextMenuStrip = this.contextMenuList; - this.listViewProperties.FullRowSelect = true; - this.listViewProperties.GridLines = true; - this.listViewProperties.HeaderCustomFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.listViewProperties.HeaderCustomForeColor = System.Drawing.Color.Empty; - this.listViewProperties.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.listViewProperties.HeaderUsesCustomFont = true; - this.listViewProperties.IsDoubleBuffered = true; - this.listViewProperties.MultiSelect = false; - this.listViewProperties.Name = "listViewProperties"; - this.listViewProperties.OwnerDraw = true; - this.listViewProperties.UseCompatibleStateImageBehavior = false; - this.listViewProperties.View = System.Windows.Forms.View.Details; - // - // PropertiesDialog - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonOk; - this.Controls.Add(this.pictureBoxItemIcon); - this.Controls.Add(this.buttonOk); - this.Controls.Add(this.labelDescription); - this.Controls.Add(this.listViewProperties); - this.MinimizeBox = false; - this.Name = "PropertiesDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Load += new System.EventHandler(this.PropertiesDialog_Load); - this.Shown += new System.EventHandler(this.PropertiesDialog_Shown); - this.contextMenuList.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private Project.IpTv.UiServices.Common.Controls.ListViewSortable listViewProperties; - private System.Windows.Forms.Label labelDescription; - private System.Windows.Forms.Button buttonOk; - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureBoxItemIcon; - private System.Windows.Forms.ContextMenuStrip contextMenuList; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyValue; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyName; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyRow; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyAll; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class PropertiesDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.ColumnHeader Property; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertiesDialog)); + System.Windows.Forms.ColumnHeader Value; + this.labelDescription = new System.Windows.Forms.Label(); + this.contextMenuList = new System.Windows.Forms.ContextMenuStrip(this.components); + this.contextMenuListCopyValue = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuListCopyName = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuListCopyRow = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.contextMenuListCopyAll = new System.Windows.Forms.ToolStripMenuItem(); + this.buttonOk = new System.Windows.Forms.Button(); + this.pictureBoxItemIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.listViewProperties = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); + Property = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + Value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuList.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).BeginInit(); + this.SuspendLayout(); + // + // Property + // + resources.ApplyResources(Property, "Property"); + // + // Value + // + resources.ApplyResources(Value, "Value"); + // + // labelDescription + // + resources.ApplyResources(this.labelDescription, "labelDescription"); + this.labelDescription.AutoEllipsis = true; + this.labelDescription.Name = "labelDescription"; + this.labelDescription.UseMnemonic = false; + // + // contextMenuList + // + this.contextMenuList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextMenuListCopyValue, + this.contextMenuListCopyName, + this.contextMenuListCopyRow, + this.toolStripSeparator1, + this.contextMenuListCopyAll}); + this.contextMenuList.Name = "contextMenu"; + resources.ApplyResources(this.contextMenuList, "contextMenuList"); + this.contextMenuList.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuList_Opening); + // + // contextMenuListCopyValue + // + this.contextMenuListCopyValue.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Copy_Clip_16x16; + this.contextMenuListCopyValue.Name = "contextMenuListCopyValue"; + resources.ApplyResources(this.contextMenuListCopyValue, "contextMenuListCopyValue"); + this.contextMenuListCopyValue.Click += new System.EventHandler(this.contextMenuListCopyValue_Click); + // + // contextMenuListCopyName + // + this.contextMenuListCopyName.Name = "contextMenuListCopyName"; + resources.ApplyResources(this.contextMenuListCopyName, "contextMenuListCopyName"); + this.contextMenuListCopyName.Click += new System.EventHandler(this.contextMenuListCopyName_Click); + // + // contextMenuListCopyRow + // + this.contextMenuListCopyRow.Name = "contextMenuListCopyRow"; + resources.ApplyResources(this.contextMenuListCopyRow, "contextMenuListCopyRow"); + this.contextMenuListCopyRow.Click += new System.EventHandler(this.contextMenuListCopyRow_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + // + // contextMenuListCopyAll + // + this.contextMenuListCopyAll.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Copy_Table; + this.contextMenuListCopyAll.Name = "contextMenuListCopyAll"; + resources.ApplyResources(this.contextMenuListCopyAll, "contextMenuListCopyAll"); + this.contextMenuListCopyAll.Click += new System.EventHandler(this.contextMenuListCopyAll_Click); + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // pictureBoxItemIcon + // + resources.ApplyResources(this.pictureBoxItemIcon, "pictureBoxItemIcon"); + this.pictureBoxItemIcon.Name = "pictureBoxItemIcon"; + this.pictureBoxItemIcon.TabStop = false; + // + // listViewProperties + // + resources.ApplyResources(this.listViewProperties, "listViewProperties"); + this.listViewProperties.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + Property, + Value}); + this.listViewProperties.ContextMenuStrip = this.contextMenuList; + this.listViewProperties.FullRowSelect = true; + this.listViewProperties.GridLines = true; + this.listViewProperties.HeaderCustomFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewProperties.HeaderCustomForeColor = System.Drawing.Color.Empty; + this.listViewProperties.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewProperties.HeaderUsesCustomFont = true; + this.listViewProperties.IsDoubleBuffered = true; + this.listViewProperties.MultiSelect = false; + this.listViewProperties.Name = "listViewProperties"; + this.listViewProperties.OwnerDraw = true; + this.listViewProperties.UseCompatibleStateImageBehavior = false; + this.listViewProperties.View = System.Windows.Forms.View.Details; + // + // PropertiesDialog + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonOk; + this.Controls.Add(this.pictureBoxItemIcon); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.labelDescription); + this.Controls.Add(this.listViewProperties); + this.MinimizeBox = false; + this.Name = "PropertiesDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Load += new System.EventHandler(this.PropertiesDialog_Load); + this.Shown += new System.EventHandler(this.PropertiesDialog_Shown); + this.contextMenuList.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private IpTviewr.UiServices.Common.Controls.ListViewSortable listViewProperties; + private System.Windows.Forms.Label labelDescription; + private System.Windows.Forms.Button buttonOk; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureBoxItemIcon; + private System.Windows.Forms.ContextMenuStrip contextMenuList; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyValue; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyName; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyRow; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyAll; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs index 6d30e832..428c58db 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs @@ -1,111 +1,111 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Property = System.Collections.Generic.KeyValuePair; - -namespace Project.IpTv.UiServices.Common.Forms -{ - public partial class PropertiesDialog : Form - { - public IEnumerable ItemProperties { get; set; } - public string Caption { get; set; } - public string Description { get; set; } - public Image ItemIcon { get; set; } - - public PropertiesDialog() - { - InitializeComponent(); - } // constructor - - private void PropertiesDialog_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this, Caption); - this.Text = Caption; - this.labelDescription.Text = (Description ?? Properties.PropertiesDialog.CaptionDefault); - this.pictureBoxItemIcon.Image = ItemIcon; - } // PropertiesDialog_Load - - private void PropertiesDialog_Shown(object sender, EventArgs e) - { - foreach (var property in ItemProperties) - { - AddProperty(property.Key, property.Value); - } // foreach - } // PropertiesDialog_Shown - - private void AddProperty(string name, string value) - { - ListViewItem item; - - item = listViewProperties.Items.Add(name ?? Properties.PropertiesDialog.NameNull); - item.UseItemStyleForSubItems = false; - if (value != null) - { - item.SubItems.Add(value); - } - else - { - item.SubItems.Add(Properties.PropertiesDialog.ValueNull); - item.SubItems[1].BackColor = Color.LightYellow; - } // if-else - } // AddProperty - - #region List context menu - - private void contextMenuList_Opening(object sender, CancelEventArgs e) - { - var selection = (listViewProperties.SelectedItems.Count > 0); - contextMenuListCopyValue.Enabled = selection; - contextMenuListCopyName.Enabled = selection; - contextMenuListCopyRow.Enabled = selection; - } // contextMenuList_Opening - - private void contextMenuListCopyValue_Click(object sender, EventArgs e) - { - var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; - if (selectedRow == null) return; - - Clipboard.SetText(selectedRow.SubItems[1].Text, TextDataFormat.UnicodeText); - } // contextMenuListCopyValue_Click - - private void contextMenuListCopyName_Click(object sender, EventArgs e) - { - var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; - if (selectedRow == null) return; - - Clipboard.SetText(selectedRow.SubItems[0].Text, TextDataFormat.UnicodeText); - } // contextMenuListCopyName_Click - - private void contextMenuListCopyRow_Click(object sender, EventArgs e) - { - var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; - if (selectedRow == null) return; - - Clipboard.SetText(string.Format("{0}\t{1}", selectedRow.SubItems[0].Text, selectedRow.SubItems[1].Text), TextDataFormat.UnicodeText); - } // contextMenuListCopyRow_Click - - private void contextMenuListCopyAll_Click(object sender, EventArgs e) - { - StringBuilder buffer; - - buffer = new StringBuilder(); - foreach (ListViewItem item in listViewProperties.Items) - { - buffer.AppendFormat("{0}\t{1}\r\n", item.SubItems[0].Text, item.SubItems[1].Text); - } // foreach item - - Clipboard.SetText(buffer.ToString(), TextDataFormat.UnicodeText); - } // contextMenuListCopyAll_Click - - #endregion - } // class PropertiesDlg -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Property = System.Collections.Generic.KeyValuePair; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class PropertiesDialog : Form + { + public IEnumerable ItemProperties { get; set; } + public string Caption { get; set; } + public string Description { get; set; } + public Image ItemIcon { get; set; } + + public PropertiesDialog() + { + InitializeComponent(); + } // constructor + + private void PropertiesDialog_Load(object sender, EventArgs e) + { + BasicGoogleTelemetry.SendScreenHit(this, Caption); + this.Text = Caption; + this.labelDescription.Text = (Description ?? Properties.PropertiesDialog.CaptionDefault); + this.pictureBoxItemIcon.Image = ItemIcon; + } // PropertiesDialog_Load + + private void PropertiesDialog_Shown(object sender, EventArgs e) + { + foreach (var property in ItemProperties) + { + AddProperty(property.Key, property.Value); + } // foreach + } // PropertiesDialog_Shown + + private void AddProperty(string name, string value) + { + ListViewItem item; + + item = listViewProperties.Items.Add(name ?? Properties.PropertiesDialog.NameNull); + item.UseItemStyleForSubItems = false; + if (value != null) + { + item.SubItems.Add(value); + } + else + { + item.SubItems.Add(Properties.PropertiesDialog.ValueNull); + item.SubItems[1].BackColor = Color.LightYellow; + } // if-else + } // AddProperty + + #region List context menu + + private void contextMenuList_Opening(object sender, CancelEventArgs e) + { + var selection = (listViewProperties.SelectedItems.Count > 0); + contextMenuListCopyValue.Enabled = selection; + contextMenuListCopyName.Enabled = selection; + contextMenuListCopyRow.Enabled = selection; + } // contextMenuList_Opening + + private void contextMenuListCopyValue_Click(object sender, EventArgs e) + { + var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (selectedRow == null) return; + + Clipboard.SetText(selectedRow.SubItems[1].Text, TextDataFormat.UnicodeText); + } // contextMenuListCopyValue_Click + + private void contextMenuListCopyName_Click(object sender, EventArgs e) + { + var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (selectedRow == null) return; + + Clipboard.SetText(selectedRow.SubItems[0].Text, TextDataFormat.UnicodeText); + } // contextMenuListCopyName_Click + + private void contextMenuListCopyRow_Click(object sender, EventArgs e) + { + var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (selectedRow == null) return; + + Clipboard.SetText(string.Format("{0}\t{1}", selectedRow.SubItems[0].Text, selectedRow.SubItems[1].Text), TextDataFormat.UnicodeText); + } // contextMenuListCopyRow_Click + + private void contextMenuListCopyAll_Click(object sender, EventArgs e) + { + StringBuilder buffer; + + buffer = new StringBuilder(); + foreach (ListViewItem item in listViewProperties.Items) + { + buffer.AppendFormat("{0}\t{1}\r\n", item.SubItems[0].Text, item.SubItems[1].Text); + } // foreach item + + Clipboard.SetText(buffer.ToString(), TextDataFormat.UnicodeText); + } // contextMenuListCopyAll_Click + + #endregion + } // class PropertiesDlg +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx index e82a733b..e07549c0 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx @@ -1,360 +1,360 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - Property - - - - 150 - - - False - - - Value - - - 275 - - - - Top, Left, Right - - - - Segoe UI Semibold, 10pt - - - NoControl - - - 82, 12 - - - 390, 64 - - - 0 - - - (Description) - - - MiddleLeft - - - labelDescription - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 17, 17 - - - 183, 22 - - - Copy &value - - - 183, 22 - - - Copy &property name - - - 183, 22 - - - Copy &row - - - 180, 6 - - - 183, 22 - - - Copy &all - - - 184, 98 - - - contextMenuList - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom, Right - - - NoControl - - - 372, 225 - - - 100, 25 - - - 2 - - - Ok - - - MiddleRight - - - ImageBeforeText - - - buttonOk - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 12, 12 - - - 64, 64 - - - 3 - - - pictureBoxItemIcon - - - Project.IpTv.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 1 - - - Top, Bottom, Left, Right - - - 12, 82 - - - 460, 137 - - - 1 - - - listViewProperties - - - Project.IpTv.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 4 - - - True - - - 6, 13 - - - 484, 262 - - - CenterParent - - - Properties - - - Property - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Value - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyValue - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyName - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyRow - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyAll - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PropertiesDialog - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Property + + + + 150 + + + False + + + Value + + + 275 + + + + Top, Left, Right + + + + Segoe UI Semibold, 10pt + + + NoControl + + + 82, 12 + + + 390, 64 + + + 0 + + + (Description) + + + MiddleLeft + + + labelDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 17, 17 + + + 183, 22 + + + Copy &value + + + 183, 22 + + + Copy &property name + + + 183, 22 + + + Copy &row + + + 180, 6 + + + 183, 22 + + + Copy &all + + + 184, 98 + + + contextMenuList + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom, Right + + + NoControl + + + 372, 225 + + + 100, 25 + + + 2 + + + Ok + + + MiddleRight + + + ImageBeforeText + + + buttonOk + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 12, 12 + + + 64, 64 + + + 3 + + + pictureBoxItemIcon + + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 1 + + + Top, Bottom, Left, Right + + + 12, 82 + + + 460, 137 + + + 1 + + + listViewProperties + + + IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 4 + + + True + + + 6, 13 + + + 484, 262 + + + CenterParent + + + Properties + + + Property + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Value + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyValue + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyName + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyRow + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyAll + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + PropertiesDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs index 4bee9520..2ac0ca79 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Common")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.Common")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("66bf1592-6924-40a4-ba53-6bf34692ff16")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Common")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Common")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("66bf1592-6924-40a4-ba53-6bf34692ff16")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs index 60f31c39..a5f2c89a 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs @@ -1,90 +1,90 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class BackgroundWorkerDialog { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal BackgroundWorkerDialog() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Common.Properties.BackgroundWorkerDialog", typeof(BackgroundWorkerDialog).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Task has been cancelled.. - /// - internal static string TaskCancelled { - get { - return ResourceManager.GetString("TaskCancelled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task is being cancelled.. - /// - internal static string TaskCancelling { - get { - return ResourceManager.GetString("TaskCancelling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task is completed.. - /// - internal static string TaskCompleted { - get { - return ResourceManager.GetString("TaskCompleted", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class BackgroundWorkerDialog { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal BackgroundWorkerDialog() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.BackgroundWorkerDialog", typeof(BackgroundWorkerDialog).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Task has been cancelled.. + /// + internal static string TaskCancelled { + get { + return ResourceManager.GetString("TaskCancelled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task is being cancelled.. + /// + internal static string TaskCancelling { + get { + return ResourceManager.GetString("TaskCancelling", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task is completed.. + /// + internal static string TaskCompleted { + get { + return ResourceManager.GetString("TaskCompleted", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs index 8b0a62e0..704ab534 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs @@ -1,72 +1,72 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonForm { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonForm() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Common.Properties.CommonForm", typeof(CommonForm).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Unexpected exception in program. - /// - internal static string UncaughtExceptionCaption { - get { - return ResourceManager.GetString("UncaughtExceptionCaption", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonForm { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonForm() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.CommonForm", typeof(CommonForm).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Unexpected exception in program. + /// + internal static string UncaughtExceptionCaption { + get { + return ResourceManager.GetString("UncaughtExceptionCaption", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs index d1121a99..1d63b62a 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs @@ -1,81 +1,81 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Filename { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Filename() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Common.Properties.Filename", typeof(Filename).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to The following characters are not allowed:. - /// - internal static string InputInvalidChar { - get { - return ResourceManager.GetString("InputInvalidChar", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid input: character not allowed. - /// - internal static string InputInvalidCharCaption { - get { - return ResourceManager.GetString("InputInvalidCharCaption", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Filename { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Filename() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.Filename", typeof(Filename).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The following characters are not allowed:. + /// + internal static string InputInvalidChar { + get { + return ResourceManager.GetString("InputInvalidChar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid input: character not allowed. + /// + internal static string InputInvalidCharCaption { + get { + return ResourceManager.GetString("InputInvalidCharCaption", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs index 22fd1db9..952c68f3 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs @@ -1,90 +1,90 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class PropertiesDialog { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal PropertiesDialog() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Common.Properties.PropertiesDialog", typeof(PropertiesDialog).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Properties of selected item. - /// - public static string CaptionDefault { - get { - return ResourceManager.GetString("CaptionDefault", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <unknown>. - /// - public static string NameNull { - get { - return ResourceManager.GetString("NameNull", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <not specified>. - /// - public static string ValueNull { - get { - return ResourceManager.GetString("ValueNull", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class PropertiesDialog { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal PropertiesDialog() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.PropertiesDialog", typeof(PropertiesDialog).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Properties of selected item. + /// + public static string CaptionDefault { + get { + return ResourceManager.GetString("CaptionDefault", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <unknown>. + /// + public static string NameNull { + get { + return ResourceManager.GetString("NameNull", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <not specified>. + /// + public static string ValueNull { + get { + return ResourceManager.GetString("ValueNull", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs index 35b181d4..09e210d2 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs @@ -1,143 +1,143 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Common.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Table { - get { - object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DefaultAbout { - get { - object obj = ResourceManager.GetObject("DefaultAbout", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DefaultSplash { - get { - object obj = ResourceManager.GetObject("DefaultSplash", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NotImplemented_200x200 { - get { - object obj = ResourceManager.GetObject("NotImplemented_200x200", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WaitClock_64x64 { - get { - object obj = ResourceManager.GetObject("WaitClock_64x64", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon WaitClock_Icon { - get { - object obj = ResourceManager.GetObject("WaitClock_Icon", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Table { + get { + object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DefaultAbout { + get { + object obj = ResourceManager.GetObject("DefaultAbout", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DefaultSplash { + get { + object obj = ResourceManager.GetObject("DefaultSplash", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NotImplemented_200x200 { + get { + object obj = ResourceManager.GetObject("NotImplemented_200x200", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap WaitClock_64x64 { + get { + object obj = ResourceManager.GetObject("WaitClock_64x64", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon WaitClock_Icon { + get { + object obj = ResourceManager.GetObject("WaitClock_Icon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs index f3099309..0e384ddb 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs @@ -1,99 +1,99 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class TimeSpanUpDown { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal TimeSpanUpDown() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Common.Properties.TimeSpanUpDown", typeof(TimeSpanUpDown).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to d. - /// - internal static string DaysShortLabel { - get { - return ResourceManager.GetString("DaysShortLabel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to h. - /// - internal static string HoursShortLabel { - get { - return ResourceManager.GetString("HoursShortLabel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to m. - /// - internal static string MinutesShortLabel { - get { - return ResourceManager.GetString("MinutesShortLabel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to s. - /// - internal static string SecondsShortLabel { - get { - return ResourceManager.GetString("SecondsShortLabel", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class TimeSpanUpDown { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal TimeSpanUpDown() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.TimeSpanUpDown", typeof(TimeSpanUpDown).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to d. + /// + internal static string DaysShortLabel { + get { + return ResourceManager.GetString("DaysShortLabel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to h. + /// + internal static string HoursShortLabel { + get { + return ResourceManager.GetString("HoursShortLabel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to m. + /// + internal static string MinutesShortLabel { + get { + return ResourceManager.GetString("MinutesShortLabel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to s. + /// + internal static string SecondsShortLabel { + get { + return ResourceManager.GetString("SecondsShortLabel", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs b/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs index 6a5c523a..05760f36 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs @@ -1,15 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Common.Start -{ - public interface ISplashScreenAwareForm : IDisposable - { - event EventHandler FormLoadCompleted; - } // ISplashScreenAwareForm -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Common.Start +{ + public interface ISplashScreenAwareForm : IDisposable + { + event EventHandler FormLoadCompleted; + } // ISplashScreenAwareForm +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs b/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs index 89a16cae..2998f052 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs @@ -1,311 +1,311 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Start -{ - public abstract class SplashApplicationContext : ApplicationContext - { - private delegate void Action(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6); - - private SplashScreen splashScreen; - private BackgroundWorker worker; - - /// Descendants MUST NOT perform any work on the constructor; instead all constructor-related initialization (if any) MUST BE done in InitializeContext - public SplashApplicationContext() - { - InitializeContext(); - SetThingsInMotion(); - } // constructor - - private void SetThingsInMotion() - { - splashScreen = new SplashScreen(); - splashScreen.Load += SplashScreen_Load; - splashScreen.Shown += SplashScreen_Shown; - splashScreen.FormClosing += SplashScreen_FormClosing; - splashScreen.Show(); - } // SetThingsInMotion - - private void EndSplashScreen(Form mainForm) - { - if (splashScreen == null) return; - - splashScreen.Close(); - splashScreen.Dispose(); - splashScreen = null; - - mainForm.Activate(); - } // EndSplashScreen - - #region Main form handling - - private void StartMainForm(Form mainForm) - { - var splashAware = mainForm as ISplashScreenAwareForm; - - // hook-up event to call EndSplashScreen - if (splashAware != null) - { - splashAware.FormLoadCompleted += MainForm_FormLoadCompleted; - } - else - { - mainForm.Shown += MainForm_Shown; - } // if-else - - // hook-up event to end the application context - mainForm.FormClosed += MainForm_FormClosed; - - // display the main form - mainForm.Show(); - } // StartMainForm - - void MainForm_FormLoadCompleted(object sender, EventArgs e) - { - EndSplashScreen(sender as Form); - } // MainForm_FormLoadCompleted - - void MainForm_Shown(object sender, EventArgs e) - { - EndSplashScreen(sender as Form); - } // MainForm_Shown - - void MainForm_FormClosed(object sender, FormClosedEventArgs e) - { - // end application context - ExitThread(); - } // MainForm_FormClosed - - #endregion - - #region SplashScreen event handling - - private void SplashScreen_Load(object sender, EventArgs e) - { - var backgroundImage = SetupSplashScreen(splashScreen.LabelProgress) ?? Properties.Resources.DefaultSplash; - splashScreen.BackgroundImage = backgroundImage; - splashScreen.Size = backgroundImage.Size; - } // SplashScreen_Load - - private void SplashScreen_Shown(object sender, EventArgs e) - { - worker = new BackgroundWorker(); - worker.WorkerReportsProgress = false; - worker.WorkerSupportsCancellation = true; - worker.DoWork += Worker_DoWork; - worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - worker.RunWorkerAsync(Thread.CurrentThread); - } // SplashScreen_Shown - - private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e) - { - e.Cancel = (worker != null); - } // SplashScreen_FormClosing - - #endregion - - #region Methods to be implemented/overriden by descendants - - protected virtual void InitializeContext() - { - // no op - } // InitializeContext - - protected virtual Image SetupSplashScreen(Label progressLabel) - { - return null; - } // SetupSplashScreen - - protected abstract object DoBackgroundWork(); - protected abstract bool BackgroundWorkCompleted(RunWorkerCompletedEventArgs result); - protected abstract void DoDisplayMessage(IWin32Window splashScreen, string caption, string message, MessageBoxIcon icon); - protected abstract void DoDisplayException(IWin32Window splashScreen, string caption, string message, MessageBoxIcon icon, Exception exception); - protected abstract Form GetMainForm(); - - #endregion - - #region Helper methods for background work - - protected void DisplayProgress(string progressMessage, bool async) - { - if (splashScreen == null) throw new InvalidOperationException(); - - if (splashScreen.InvokeRequired) - { - if (async) - { - splashScreen.BeginInvoke(new Action(DisplayProgress), progressMessage, async); - } - else - { - splashScreen.Invoke(new Action(DisplayProgress), progressMessage, async); - } // if - } - else - { - splashScreen.LabelProgress.Text = progressMessage; - splashScreen.LabelProgress.Refresh(); - } // if-else InvokeRequired - } // DisplayProgress - - protected void CallForegroundAction(Action action, bool async) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if (async) - { - splashScreen.BeginInvoke(new Action(CallForegroundAction), action, async); - } - else - { - splashScreen.Invoke(new Action(CallForegroundAction), action, async); - } // if-else - } - else - { - action(); - } // if-else InvokeRequired - } // CallForegroundAction - - protected void CallForegroundAction(Action action, object data, bool async) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if (async) - { - splashScreen.BeginInvoke(new Action, object, bool>(CallForegroundAction), action, data, async); - } - else - { - splashScreen.Invoke(new Action, object, bool>(CallForegroundAction), action, data, async); - } // if-else - } - else - { - action(data); - } // if-else InvokeRequired - } // CallForegroundAction - - protected object CallForegroundFunction(Func function, object data) - { - if (splashScreen.InvokeRequired) - { - return splashScreen.Invoke(new Func, object, object>(CallForegroundFunction), function, data); - } - else - { - return function(data); - } // if-else - } // CallForegroundFunctionCallback - - protected void DisplayMessage(string message, bool async) - { - DisplayMessage(null, message, MessageBoxIcon.Warning, async); - } // DisplayMessage - - protected void DisplayMessage(string caption, string message, MessageBoxIcon icon, bool async) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if (async) - { - splashScreen.BeginInvoke(new Action(DisplayMessage), caption, message, icon, async); - } - else - { - splashScreen.Invoke(new Action(DisplayMessage), caption, message, icon, async); - } // if-else - } - else - { - DoDisplayMessage(splashScreen, caption, message, icon); - } // if-else InvokeRequired - } // DisplayMessage - - protected void DisplayException(string message, bool async, bool isFatal, Exception exception) - { - DisplayException(null, message, MessageBoxIcon.Error, async, isFatal, exception); - } // DisplayException - - protected void DisplayException(string caption, string message, MessageBoxIcon icon, bool async, bool isFatal, Exception exception) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if ((!isFatal) || (async)) - { - splashScreen.BeginInvoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); - } - else - { - splashScreen.Invoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); - } // if-else - } - else - { - try - { - DoDisplayException(splashScreen, caption, message, icon, exception); - if ((isFatal) && (worker != null)) - { - worker.CancelAsync(); - } // if - } - catch - { - // ignore - } - } // if-else InvokeRequired - } // DisplayException - - #endregion - - #region BackgroundWorker implementation - - private void Worker_DoWork(object sender, DoWorkEventArgs e) - { - // set worker thread name (for debugging pourposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "SplashAplicationContext BackgroundWorker"; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - - e.Result = DoBackgroundWork(); - } // Worker_DoWork - - private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - Form mainForm = null; - - var isOk = BackgroundWorkCompleted(e); - worker.Dispose(); - worker = null; - - if ((!isOk) || (e.Cancelled) || (e.Error != null) || ((mainForm = GetMainForm()) == null)) - { - splashScreen.Close(); - ExitThread(); - - return; - } // if - - StartMainForm(mainForm); - } // Worker_RunWorkerCompleted - - #endregion - } // class SplashApplicationContext -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + public abstract class SplashApplicationContext : ApplicationContext + { + private delegate void Action(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6); + + private SplashScreen splashScreen; + private BackgroundWorker worker; + + /// Descendants MUST NOT perform any work on the constructor; instead all constructor-related initialization (if any) MUST BE done in InitializeContext + public SplashApplicationContext() + { + InitializeContext(); + SetThingsInMotion(); + } // constructor + + private void SetThingsInMotion() + { + splashScreen = new SplashScreen(); + splashScreen.Load += SplashScreen_Load; + splashScreen.Shown += SplashScreen_Shown; + splashScreen.FormClosing += SplashScreen_FormClosing; + splashScreen.Show(); + } // SetThingsInMotion + + private void EndSplashScreen(Form mainForm) + { + if (splashScreen == null) return; + + splashScreen.Close(); + splashScreen.Dispose(); + splashScreen = null; + + mainForm.Activate(); + } // EndSplashScreen + + #region Main form handling + + private void StartMainForm(Form mainForm) + { + var splashAware = mainForm as ISplashScreenAwareForm; + + // hook-up event to call EndSplashScreen + if (splashAware != null) + { + splashAware.FormLoadCompleted += MainForm_FormLoadCompleted; + } + else + { + mainForm.Shown += MainForm_Shown; + } // if-else + + // hook-up event to end the application context + mainForm.FormClosed += MainForm_FormClosed; + + // display the main form + mainForm.Show(); + } // StartMainForm + + void MainForm_FormLoadCompleted(object sender, EventArgs e) + { + EndSplashScreen(sender as Form); + } // MainForm_FormLoadCompleted + + void MainForm_Shown(object sender, EventArgs e) + { + EndSplashScreen(sender as Form); + } // MainForm_Shown + + void MainForm_FormClosed(object sender, FormClosedEventArgs e) + { + // end application context + ExitThread(); + } // MainForm_FormClosed + + #endregion + + #region SplashScreen event handling + + private void SplashScreen_Load(object sender, EventArgs e) + { + var backgroundImage = SetupSplashScreen(splashScreen.LabelProgress) ?? Properties.Resources.DefaultSplash; + splashScreen.BackgroundImage = backgroundImage; + splashScreen.Size = backgroundImage.Size; + } // SplashScreen_Load + + private void SplashScreen_Shown(object sender, EventArgs e) + { + worker = new BackgroundWorker(); + worker.WorkerReportsProgress = false; + worker.WorkerSupportsCancellation = true; + worker.DoWork += Worker_DoWork; + worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + worker.RunWorkerAsync(Thread.CurrentThread); + } // SplashScreen_Shown + + private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = (worker != null); + } // SplashScreen_FormClosing + + #endregion + + #region Methods to be implemented/overriden by descendants + + protected virtual void InitializeContext() + { + // no op + } // InitializeContext + + protected virtual Image SetupSplashScreen(Label progressLabel) + { + return null; + } // SetupSplashScreen + + protected abstract object DoBackgroundWork(); + protected abstract bool BackgroundWorkCompleted(RunWorkerCompletedEventArgs result); + protected abstract void DoDisplayMessage(IWin32Window splashScreen, string caption, string message, MessageBoxIcon icon); + protected abstract void DoDisplayException(IWin32Window splashScreen, string caption, string message, MessageBoxIcon icon, Exception exception); + protected abstract Form GetMainForm(); + + #endregion + + #region Helper methods for background work + + protected void DisplayProgress(string progressMessage, bool async) + { + if (splashScreen == null) throw new InvalidOperationException(); + + if (splashScreen.InvokeRequired) + { + if (async) + { + splashScreen.BeginInvoke(new Action(DisplayProgress), progressMessage, async); + } + else + { + splashScreen.Invoke(new Action(DisplayProgress), progressMessage, async); + } // if + } + else + { + splashScreen.LabelProgress.Text = progressMessage; + splashScreen.LabelProgress.Refresh(); + } // if-else InvokeRequired + } // DisplayProgress + + protected void CallForegroundAction(Action action, bool async) + { + if ((splashScreen != null) && (splashScreen.InvokeRequired)) + { + if (async) + { + splashScreen.BeginInvoke(new Action(CallForegroundAction), action, async); + } + else + { + splashScreen.Invoke(new Action(CallForegroundAction), action, async); + } // if-else + } + else + { + action(); + } // if-else InvokeRequired + } // CallForegroundAction + + protected void CallForegroundAction(Action action, object data, bool async) + { + if ((splashScreen != null) && (splashScreen.InvokeRequired)) + { + if (async) + { + splashScreen.BeginInvoke(new Action, object, bool>(CallForegroundAction), action, data, async); + } + else + { + splashScreen.Invoke(new Action, object, bool>(CallForegroundAction), action, data, async); + } // if-else + } + else + { + action(data); + } // if-else InvokeRequired + } // CallForegroundAction + + protected object CallForegroundFunction(Func function, object data) + { + if (splashScreen.InvokeRequired) + { + return splashScreen.Invoke(new Func, object, object>(CallForegroundFunction), function, data); + } + else + { + return function(data); + } // if-else + } // CallForegroundFunctionCallback + + protected void DisplayMessage(string message, bool async) + { + DisplayMessage(null, message, MessageBoxIcon.Warning, async); + } // DisplayMessage + + protected void DisplayMessage(string caption, string message, MessageBoxIcon icon, bool async) + { + if ((splashScreen != null) && (splashScreen.InvokeRequired)) + { + if (async) + { + splashScreen.BeginInvoke(new Action(DisplayMessage), caption, message, icon, async); + } + else + { + splashScreen.Invoke(new Action(DisplayMessage), caption, message, icon, async); + } // if-else + } + else + { + DoDisplayMessage(splashScreen, caption, message, icon); + } // if-else InvokeRequired + } // DisplayMessage + + protected void DisplayException(string message, bool async, bool isFatal, Exception exception) + { + DisplayException(null, message, MessageBoxIcon.Error, async, isFatal, exception); + } // DisplayException + + protected void DisplayException(string caption, string message, MessageBoxIcon icon, bool async, bool isFatal, Exception exception) + { + if ((splashScreen != null) && (splashScreen.InvokeRequired)) + { + if ((!isFatal) || (async)) + { + splashScreen.BeginInvoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); + } + else + { + splashScreen.Invoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); + } // if-else + } + else + { + try + { + DoDisplayException(splashScreen, caption, message, icon, exception); + if ((isFatal) && (worker != null)) + { + worker.CancelAsync(); + } // if + } + catch + { + // ignore + } + } // if-else InvokeRequired + } // DisplayException + + #endregion + + #region BackgroundWorker implementation + + private void Worker_DoWork(object sender, DoWorkEventArgs e) + { + // set worker thread name (for debugging pourposes) + var currentThread = Thread.CurrentThread; + currentThread.Name = "SplashAplicationContext BackgroundWorker"; + + // inherit parent thead culture settings + var parentThread = e.Argument as Thread; + if (parentThread != null) + { + currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case + currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread + } // if + + e.Result = DoBackgroundWork(); + } // Worker_DoWork + + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + Form mainForm = null; + + var isOk = BackgroundWorkCompleted(e); + worker.Dispose(); + worker = null; + + if ((!isOk) || (e.Cancelled) || (e.Error != null) || ((mainForm = GetMainForm()) == null)) + { + splashScreen.Close(); + ExitThread(); + + return; + } // if + + StartMainForm(mainForm); + } // Worker_RunWorkerCompleted + + #endregion + } // class SplashApplicationContext +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs index 7c340688..f8f1ff67 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs @@ -1,73 +1,73 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Common.Start -{ - partial class SplashScreen - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.LabelProgress = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // LabelProgress - // - this.LabelProgress.AutoEllipsis = true; - this.LabelProgress.Font = new System.Drawing.Font("Segoe UI Semibold", 10F, System.Drawing.FontStyle.Bold); - this.LabelProgress.Location = new System.Drawing.Point(40, 320); - this.LabelProgress.Name = "LabelProgress"; - this.LabelProgress.Size = new System.Drawing.Size(320, 50); - this.LabelProgress.TabIndex = 0; - this.LabelProgress.Text = "Loading..."; - this.LabelProgress.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // SplashScreen - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.BackColor = System.Drawing.SystemColors.ButtonFace; - this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.ClientSize = new System.Drawing.Size(400, 400); - this.Controls.Add(this.LabelProgress); - this.DoubleBuffered = true; - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SplashScreen"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "SplashScreen"; - this.ResumeLayout(false); - - } - - #endregion - - public System.Windows.Forms.Label LabelProgress; - } +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Common.Start +{ + partial class SplashScreen + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.LabelProgress = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // LabelProgress + // + this.LabelProgress.AutoEllipsis = true; + this.LabelProgress.Font = new System.Drawing.Font("Segoe UI Semibold", 10F, System.Drawing.FontStyle.Bold); + this.LabelProgress.Location = new System.Drawing.Point(40, 320); + this.LabelProgress.Name = "LabelProgress"; + this.LabelProgress.Size = new System.Drawing.Size(320, 50); + this.LabelProgress.TabIndex = 0; + this.LabelProgress.Text = "Loading..."; + this.LabelProgress.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // SplashScreen + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.SystemColors.ButtonFace; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.ClientSize = new System.Drawing.Size(400, 400); + this.Controls.Add(this.LabelProgress); + this.DoubleBuffered = true; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SplashScreen"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "SplashScreen"; + this.ResumeLayout(false); + + } + + #endregion + + public System.Windows.Forms.Label LabelProgress; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs b/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs index 78d72515..a1c9e8a2 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs @@ -1,23 +1,23 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Common.Start -{ - internal partial class SplashScreen : Form - { - public SplashScreen() - { - InitializeComponent(); - this.Text = Path.GetFileName(Application.ExecutablePath); - } // constructor - } // class SplashScreen -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + internal partial class SplashScreen : Form + { + public SplashScreen() + { + InitializeComponent(); + this.Text = Path.GetFileName(Application.ExecutablePath); + } // constructor + } // class SplashScreen +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj index 4a7ebfa4..0c967e43 100644 --- a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj +++ b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj @@ -1,255 +1,255 @@ - - - - - Debug - AnyCPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9} - Library - Properties - Project.IpTv.UiServices.Common - UiServices.Common - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - True - True - BackgroundWorkerDialog.resx - - - Component - - - - - Component - - - Component - - - Component - - - Component - - - UserControl - - - TimeSpanUpDown.cs - - - Form - - - AboutBox.cs - - - - Form - - - HelpDialog.cs - - - Form - - - NotImplementedBox.cs - - - Form - - - PropertiesDialog.cs - - - True - True - PropertiesDialog.resx - - - True - True - CommonForm.resx - - - Form - - - BackgroundWorkerDialog.cs - - - - Form - - - - - - True - True - Resources.resx - - - Filename.resx - True - True - - - TimeSpanUpDown.resx - True - True - - - - - Form - - - SplashScreen.cs - - - - - Resources\Action_Copy_Clip_16x16.png - - - Resources\Action_Copy_Table.png - - - Resources\Action_Ok_16x16.png - - - Resources\WaitClock_64x64.png - - - Resources\WaitClock_Icon.ico - - - - - - - - - - - ResXFileCodeGenerator - BackgroundWorkerDialog.Designer.cs - - - TimeSpanUpDown.cs - - - AboutBox.cs - - - AboutBox.cs - - - HelpDialog.cs - - - HelpDialog.cs - - - NotImplementedBox.cs - - - PropertiesDialog.cs - - - PropertiesDialog.cs - Designer - - - - PublicResXFileCodeGenerator - PropertiesDialog.Designer.cs - - - - ResXFileCodeGenerator - CommonForm.Designer.cs - - - BackgroundWorkerDialog.cs - - - BackgroundWorkerDialog.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - ResXFileCodeGenerator - Filename.Designer.cs - - - - ResXFileCodeGenerator - TimeSpanUpDown.Designer.cs - - - SplashScreen.cs - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - - + + + + + Debug + AnyCPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9} + Library + Properties + IpTviewr.UiServices.Common + UiServices.Common + v3.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + True + True + BackgroundWorkerDialog.resx + + + Component + + + + + Component + + + Component + + + Component + + + Component + + + UserControl + + + TimeSpanUpDown.cs + + + Form + + + AboutBox.cs + + + + Form + + + HelpDialog.cs + + + Form + + + NotImplementedBox.cs + + + Form + + + PropertiesDialog.cs + + + True + True + PropertiesDialog.resx + + + True + True + CommonForm.resx + + + Form + + + BackgroundWorkerDialog.cs + + + + Form + + + + + + True + True + Resources.resx + + + Filename.resx + True + True + + + TimeSpanUpDown.resx + True + True + + + + + Form + + + SplashScreen.cs + + + + + Resources\Action_Copy_Clip_16x16.png + + + Resources\Action_Copy_Table.png + + + Resources\Action_Ok_16x16.png + + + Resources\WaitClock_64x64.png + + + Resources\WaitClock_Icon.ico + + + + + + + + + + + ResXFileCodeGenerator + BackgroundWorkerDialog.Designer.cs + + + TimeSpanUpDown.cs + + + AboutBox.cs + + + AboutBox.cs + + + HelpDialog.cs + + + HelpDialog.cs + + + NotImplementedBox.cs + + + PropertiesDialog.cs + + + PropertiesDialog.cs + Designer + + + + PublicResXFileCodeGenerator + PropertiesDialog.Designer.cs + + + + ResXFileCodeGenerator + CommonForm.Designer.cs + + + BackgroundWorkerDialog.cs + + + BackgroundWorkerDialog.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + ResXFileCodeGenerator + Filename.Designer.cs + + + + ResXFileCodeGenerator + TimeSpanUpDown.Designer.cs + + + SplashScreen.cs + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs b/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs index 8e2de87b..049a8ef9 100644 --- a/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs +++ b/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs @@ -1,563 +1,563 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.Win32; -using Project.IpTv.Common.Serialization; -using Project.IpTv.UiServices.Configuration.Cache; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Properties; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; - -namespace Project.IpTv.UiServices.Configuration -{ - public class AppUiConfiguration - { - public const string IpTvProviderSettingsRegistrationGuid = "{1E8D4BC4-4D78-4B69-BB50-96BA921A7449}"; - - private string DefaultSaveLocation; - internal IDictionary ItemsRegistry; - internal IDictionary ItemsIndex; - internal IList Items; - - #region Static methods - - public static AppUiConfiguration Current - { - get; - private set; - } // Current - - public static AppUiConfiguration CreateForUserConfig(UserConfig userConfig) - { - AppUiConfiguration config; - - config = new AppUiConfiguration(); - config.User = userConfig; - - return config; - } // CreateForUserConfig - - public static InitializationResult Load(string overrideBasePath, Action displayProgress) - { - AppUiConfiguration config; - InitializationResult result; - - if (displayProgress != null) displayProgress(Properties.Texts.LoadProgress_Start); - config = new AppUiConfiguration(); - result = config.LoadBasicConfiguration(overrideBasePath); - if (result.IsError) return result; - - if (displayProgress != null) displayProgress(Properties.Texts.LoadProgress_UserConfig); - result = config.LoadUserConfiguration(); - if (result.IsError) return result; - - result = config.RegisterConfigurationItems(); - if (result.IsError) return result; - - result = config.ProcessXmlConfigurationItems(); - if (result.IsError) return result; - - if (displayProgress != null) displayProgress(Properties.Texts.LoadProgress_ContentProvider); - result = config.LoadIpTvProviderData(); - if (result.IsError) return result; - - Current = config; - - return InitializationResult.Ok; - } // Load - - public static AppUiConfiguration LoadRegistryAppConfiguration(out InitializationResult initializationResult) - { - AppUiConfiguration config; - - config = new AppUiConfiguration(); - - initializationResult = config.LoadRegistrySettings(null); - if (initializationResult.IsError) return null; - - return config; - } // LoadRegistryAppConfiguration - - public static T CloneSettings(IConfigurationItem settings) where T: class, IConfigurationItem - { - return XmlSerialization.CloneObject(settings) as T; - } // CloneSettings - - protected static IList GetUiCultures() - { - var culture = CultureInfo.CurrentUICulture; - var tempList = new List(); - - while (culture.Name != "") - { - tempList.Add(culture.Name.ToLowerInvariant()); - culture = culture.Parent; - } // while - tempList.Add(""); - - var cultureList = new List(tempList.Count); - cultureList.AddRange(tempList); - - return cultureList.AsReadOnly(); - } // GetUiCultures - - #endregion - - public AppUiConfiguration() - { - Folders = new AppUiConfigurationFolders(); - } // constructor - - public AppUiConfigurationFolders Folders - { - get; - protected set; - } // Folders - - public IList Cultures - { - get; - protected set; - } // Cultures - - public IDictionary DescriptionServiceTypes - { - get; - protected set; - } // FriendlyNamesServiceTypes - - public bool DisplayPreferredOrFirst - { - get; - protected set; - } // DisplayPreferredOrFirst - - public CacheManager Cache - { - get; - protected set; - } // Cache - - public ProviderLogoMappings ProviderLogoMappings - { - get; - protected set; - } // ProviderLogoMappings - - public ServiceLogoMappings ServiceLogoMappings - { - get; - protected set; - } // ServiceLogoMappings - - public UiContentProvider ContentProvider - { - get; - protected set; - } // ContentProvider - - public string AnalyticsClientId - { - get; - protected set; - } // AnalyticsClientId - - public UserConfig User - { - get; - protected set; - } // User - - public IConfigurationItem this[Guid guid] - { - get { return Items[ItemsIndex[guid]]; } // get - set { Items[ItemsIndex[guid]] = value; } // set - } // this[Guid] - - public IConfigurationItem this[int directIndex] - { - get { return Items[directIndex]; } // get - set { Items[directIndex] = value; } // set - } // this[int] - - public bool IsDirty - { - get; - set; - } // IsDirty - - /* - public string EpgDatabaseFile - { - get { return Path.Combine(Folders.Cache, "EPG.sdf"); } - } // EpgDatabaseFile - */ - - #region Public methods - - public void Save(string overrideSaveLocation = null) - { - User.Configuration = new XmlConfigurationItems(); - User.Configuration.XmlData = new List(Items.Count); - - // serialize configuration items - foreach (var pair in ItemsIndex) - { - User.Configuration.XmlData.Add(XmlConfigurationItems.GetXmlElement(pair.Key, Items[pair.Value])); - } // foreach - - // save registry - User.Configuration.Registry = new List(ItemsRegistry.Count); - foreach (var pair in ItemsRegistry) - { - User.Configuration.Registry.Add(pair.Value.GetType().AssemblyQualifiedName); - } // foreach - - var configFilename = overrideSaveLocation ?? DefaultSaveLocation; - XmlSerialization.Serialize(configFilename, Encoding.UTF8, User); - - // save memory - // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] - User.Configuration = null; - - IsDirty = false; - } // Save - - public void RegisterConfiguration(IConfigurationItemRegistration registration, IConfigurationItem configItem = null, bool createDefault = false) - { - if (ItemsRegistry == null) - { - ItemsRegistry = new Dictionary(); - ItemsIndex = new Dictionary(); - Items = new List(); - } // if - - ItemsRegistry.Add(registration.Id, registration); - var directIndex = Items.Count; - ItemsIndex[registration.Id] = directIndex; - Items.Add(configItem ?? (createDefault? registration.CreateDefault() : null)); - registration.DirectIndex = directIndex; - } // RegisterConfiguration - - #endregion - - #region Basic app configuration - - protected InitializationResult LoadBasicConfiguration(string overrideBasePath) - { - InitializationResult initResult; - - initResult = LoadRegistrySettings(overrideBasePath); - if (initResult.IsError) return initResult; - - // Cultures - Cultures = GetUiCultures(); - - // Record tasks - Folders.RecordTasks = Path.Combine(Folders.Base, Properties.InvariantTexts.FolderRecordTasks); - - // Cache - Folders.Cache = Path.Combine(Folders.Base, Properties.InvariantTexts.FolderCache); - - // Logos - Folders.Logos = new AppUiConfigurationFolders.FolderLogos(Path.Combine(Folders.Base, Properties.InvariantTexts.FolderLogosRoot)); - - var descriptionServiceType = new Dictionary(); - descriptionServiceType.Add("1", Properties.Texts.DvbServiceTypeDescription_01); // SD TV - descriptionServiceType.Add("2", Properties.Texts.DvbServiceTypeDescription_02); // Radio (MPEG-1) - descriptionServiceType.Add("3", Properties.Texts.DvbServiceTypeDescription_03); // Teletext - descriptionServiceType.Add("6", Properties.Texts.DvbServiceTypeDescription_06); // Mosaic - descriptionServiceType.Add("10", Properties.Texts.DvbServiceTypeDescription_10); // Radio (AAC) - descriptionServiceType.Add("11", Properties.Texts.DvbServiceTypeDescription_11); // Mosaic (AAC) - descriptionServiceType.Add("12", Properties.Texts.DvbServiceTypeDescription_12); // Data - descriptionServiceType.Add("16", Properties.Texts.DvbServiceTypeDescription_16); // DVB MHP - descriptionServiceType.Add("17", Properties.Texts.DvbServiceTypeDescription_17); // HD TV (MPEG-2) - descriptionServiceType.Add("22", Properties.Texts.DvbServiceTypeDescription_22); // SD TV (AVC) - descriptionServiceType.Add("25", Properties.Texts.DvbServiceTypeDescription_25); // "HD TV - DescriptionServiceTypes = descriptionServiceType; - - // TODO: load from user config - DisplayPreferredOrFirst = true; - - // Validate application configuration - initResult = Validate(); - if (!initResult.IsOk) return initResult; - - // Initialize managers and providers - if (!Directory.Exists(Folders.RecordTasks)) - { - Directory.CreateDirectory(Folders.RecordTasks); - } // if - - Cache = new CacheManager(Folders.Cache); - - ProviderLogoMappings = new ProviderLogoMappings(Folders.Logos.FileProviderMappings); - ServiceLogoMappings = new ServiceLogoMappings(Folders.Logos.FileServiceDomainMappings, Folders.Logos.FileServiceMappings); - - return InitializationResult.Ok; - } // LoadBasicConfiguration - - #endregion - - #region Registry settings - - protected InitializationResult LoadRegistrySettings(string overrideBasePath) - { - try - { - var result = LoadRegistrySettingsInternal(overrideBasePath); - if (result != null) - { - return new InitializationResult() - { - Caption = Texts.AppConfigRegistryCaption, - Message = string.Format(Texts.AppConfigRegistryText, result) - }; - } - else - { - return InitializationResult.Ok; - } // if-else - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = Texts.AppConfigRegistryCaption, - Message = string.Format(Texts.AppConfigRegistryText, ex.Message), - InnerException = ex - }; - } // try-catch - } // LoadRegistrySettings - - private string LoadRegistrySettingsInternal(string overrideBasePath) - { - string fullKeyPath; - - using (var hkcu = Registry.CurrentUser) - { - fullKeyPath = InvariantTexts.RegistryKey_Root; - using (var root = hkcu.OpenSubKey(InvariantTexts.RegistryKey_Root)) - { - if (root == null) return string.Format(Texts.AppConfigRegistryMissingKey, fullKeyPath); - - var isInstalled = root.GetValue(InvariantTexts.RegistryValue_Installed); - if (isInstalled == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Installed); - - var clientId = root.GetValue(InvariantTexts.RegistryValue_Analytics_ClientId) as string; - AnalyticsClientId = clientId; - if (string.IsNullOrEmpty(clientId)) - { - AnalyticsClientId = Guid.NewGuid().ToString("D").ToUpperInvariant(); - using (var writableRoot = hkcu.OpenSubKey(InvariantTexts.RegistryKey_Root, true)) - { - writableRoot.SetValue(InvariantTexts.RegistryValue_Analytics_ClientId, AnalyticsClientId); - } // using writableRoot - } // if - - var baseFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Base); - if (baseFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Base); - Folders.Base = overrideBasePath ?? baseFolder as string; - - var installFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Install); -#if (DEBUG == false) - if (installFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Install); -#endif - Folders.Install = installFolder as string; - } // using root - } // using hkcu - - return null; - } // LoadRegistrySettingsInternal - - #endregion - - protected InitializationResult Validate() - { - InitializationResult result; - - result = new InitializationResult(); - result.Caption = Properties.Texts.LoadConfigValidationCaption; - - if (!Directory.Exists(Folders.Base)) - { - result.Message = string.Format(Properties.Texts.AppConfigValidationBasePath, Folders.Base); - return result; - } // if - - if (!Directory.Exists(Folders.Logos.Root)) - { - result.Message = string.Format(Properties.Texts.AppConfigValidationLogosPath, Folders.Logos); - return result; - } // if - - result.IsOk = true; - return result; - } // Validate - - #region Content provider - - protected InitializationResult LoadIpTvProviderData() - { - var xmlPath = Path.Combine(Folders.Base, "movistartv-config.xml"); - - try - { - var ipTvProviderSettingsRegistrationGuid = new Guid(IpTvProviderSettingsRegistrationGuid); - var ipTvProviderSettings = this[ipTvProviderSettingsRegistrationGuid]; - - var result = ipTvProviderSettings.Initializate(); - if (!result.IsOk) return result; - - var xmlContentProvider = IpTvProviderData.Load(xmlPath); - - var validationResult = xmlContentProvider.Validate(); - if (validationResult != null) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadContentProviderDataValidationCaption, - Message = string.Format(Properties.Texts.LoadContentProviderDataValidation, xmlPath, validationResult), - }; - } // if - - ContentProvider = UiContentProvider.FromXmlConfiguration(xmlContentProvider, Cultures); - return InitializationResult.Ok; - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadContentProviderDataExceptionCaption, - Message = string.Format(Properties.Texts.LoadContentProviderDataValidation, xmlPath, Properties.Texts.LoadContentProviderDataValidationException), - InnerException = ex - }; - } // try-catch - } // LoadIpTvProviderData - - #endregion - - #region User configuration - - protected InitializationResult LoadUserConfiguration() - { - DefaultSaveLocation = Path.Combine(Folders.Base, "user-config.xml"); - - try - { - // load - User = XmlSerialization.Deserialize(DefaultSaveLocation, true); - - // validate - var validationError = User.Validate(); - if (validationError != null) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadUserConfigValidationCaption, - Message = string.Format(Properties.Texts.LoadConfigUserConfigValidation, DefaultSaveLocation, validationError), - }; - } // if - - return InitializationResult.Ok; - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadUserConfigExceptionCaption, - Message = string.Format(Properties.Texts.LoadConfigUserConfigValidation, DefaultSaveLocation, Properties.Texts.LoadConfigUserConfigValidationException), - InnerException = ex - }; - } // try-catch - } // LoadUserConfiguration - - private InitializationResult RegisterConfigurationItems() - { - try - { - var registerItems = User.Configuration.Registry; - ItemsRegistry = new Dictionary(registerItems.Count); - - foreach (var registerType in registerItems) - { - var type = Type.GetType(registerType); - var registration = (IConfigurationItemRegistration)Activator.CreateInstance(type); - if (registration == null) continue; - - ItemsRegistry.Add(registration.Id, registration); - } // foreach - } - catch (Exception ex) - { - return new InitializationResult(ex); - } // try-catch - - return InitializationResult.Ok; - } // RegisterConfigurationItems - - private InitializationResult ProcessXmlConfigurationItems() - { - try - { - ItemsIndex = new Dictionary(User.Configuration.XmlData.Count); - Items = new List(User.Configuration.XmlData.Count); - - foreach (var item in User.Configuration.XmlData) - { - var xAttr = item.Attributes["configurationId"]; - if ((xAttr == null) || (xAttr.Value == null)) continue; - var id = new Guid(xAttr.Value); - - IConfigurationItemRegistration registration; - if (!ItemsRegistry.TryGetValue(id, out registration)) continue; - - using (var reader = new XmlNodeReader(item)) - { - var configItem = (IConfigurationItem) XmlSerialization.Deserialize(reader, registration.ItemType); - - if (configItem.SupportsValidation) - { - var result = configItem.Validate(item.Name); - if (result != null) - { - return new InitializationResult(result); - } // if - } // if - - if (configItem.SupportsInitialization) - { - var result = configItem.Initializate(); - if (result.IsError) return result; - } // if - - var directIndex = Items.Count; - ItemsIndex[id] = directIndex; - Items.Add(configItem); - registration.DirectIndex = directIndex; - } // using reader - } // foreach - - // save memory - // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] - User.Configuration = null; - } - catch (Exception ex) - { - return new InitializationResult(ex); - } // try-catch - - return InitializationResult.Ok; - } // ProcessXmlConfigurationItems - - #endregion - } // class AppUiConfiguration -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using Microsoft.Win32; +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Configuration.Cache; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Properties; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; + +namespace IpTviewr.UiServices.Configuration +{ + public class AppUiConfiguration + { + public const string IpTvProviderSettingsRegistrationGuid = "{1E8D4BC4-4D78-4B69-BB50-96BA921A7449}"; + + private string DefaultSaveLocation; + internal IDictionary ItemsRegistry; + internal IDictionary ItemsIndex; + internal IList Items; + + #region Static methods + + public static AppUiConfiguration Current + { + get; + private set; + } // Current + + public static AppUiConfiguration CreateForUserConfig(UserConfig userConfig) + { + AppUiConfiguration config; + + config = new AppUiConfiguration(); + config.User = userConfig; + + return config; + } // CreateForUserConfig + + public static InitializationResult Load(string overrideBasePath, Action displayProgress) + { + AppUiConfiguration config; + InitializationResult result; + + if (displayProgress != null) displayProgress(Properties.Texts.LoadProgress_Start); + config = new AppUiConfiguration(); + result = config.LoadBasicConfiguration(overrideBasePath); + if (result.IsError) return result; + + if (displayProgress != null) displayProgress(Properties.Texts.LoadProgress_UserConfig); + result = config.LoadUserConfiguration(); + if (result.IsError) return result; + + result = config.RegisterConfigurationItems(); + if (result.IsError) return result; + + result = config.ProcessXmlConfigurationItems(); + if (result.IsError) return result; + + if (displayProgress != null) displayProgress(Properties.Texts.LoadProgress_ContentProvider); + result = config.LoadIpTvProviderData(); + if (result.IsError) return result; + + Current = config; + + return InitializationResult.Ok; + } // Load + + public static AppUiConfiguration LoadRegistryAppConfiguration(out InitializationResult initializationResult) + { + AppUiConfiguration config; + + config = new AppUiConfiguration(); + + initializationResult = config.LoadRegistrySettings(null); + if (initializationResult.IsError) return null; + + return config; + } // LoadRegistryAppConfiguration + + public static T CloneSettings(IConfigurationItem settings) where T: class, IConfigurationItem + { + return XmlSerialization.CloneObject(settings) as T; + } // CloneSettings + + protected static IList GetUiCultures() + { + var culture = CultureInfo.CurrentUICulture; + var tempList = new List(); + + while (culture.Name != "") + { + tempList.Add(culture.Name.ToLowerInvariant()); + culture = culture.Parent; + } // while + tempList.Add(""); + + var cultureList = new List(tempList.Count); + cultureList.AddRange(tempList); + + return cultureList.AsReadOnly(); + } // GetUiCultures + + #endregion + + public AppUiConfiguration() + { + Folders = new AppUiConfigurationFolders(); + } // constructor + + public AppUiConfigurationFolders Folders + { + get; + protected set; + } // Folders + + public IList Cultures + { + get; + protected set; + } // Cultures + + public IDictionary DescriptionServiceTypes + { + get; + protected set; + } // FriendlyNamesServiceTypes + + public bool DisplayPreferredOrFirst + { + get; + protected set; + } // DisplayPreferredOrFirst + + public CacheManager Cache + { + get; + protected set; + } // Cache + + public ProviderLogoMappings ProviderLogoMappings + { + get; + protected set; + } // ProviderLogoMappings + + public ServiceLogoMappings ServiceLogoMappings + { + get; + protected set; + } // ServiceLogoMappings + + public UiContentProvider ContentProvider + { + get; + protected set; + } // ContentProvider + + public string AnalyticsClientId + { + get; + protected set; + } // AnalyticsClientId + + public UserConfig User + { + get; + protected set; + } // User + + public IConfigurationItem this[Guid guid] + { + get { return Items[ItemsIndex[guid]]; } // get + set { Items[ItemsIndex[guid]] = value; } // set + } // this[Guid] + + public IConfigurationItem this[int directIndex] + { + get { return Items[directIndex]; } // get + set { Items[directIndex] = value; } // set + } // this[int] + + public bool IsDirty + { + get; + set; + } // IsDirty + + /* + public string EpgDatabaseFile + { + get { return Path.Combine(Folders.Cache, "EPG.sdf"); } + } // EpgDatabaseFile + */ + + #region Public methods + + public void Save(string overrideSaveLocation = null) + { + User.Configuration = new XmlConfigurationItems(); + User.Configuration.XmlData = new List(Items.Count); + + // serialize configuration items + foreach (var pair in ItemsIndex) + { + User.Configuration.XmlData.Add(XmlConfigurationItems.GetXmlElement(pair.Key, Items[pair.Value])); + } // foreach + + // save registry + User.Configuration.Registry = new List(ItemsRegistry.Count); + foreach (var pair in ItemsRegistry) + { + User.Configuration.Registry.Add(pair.Value.GetType().AssemblyQualifiedName); + } // foreach + + var configFilename = overrideSaveLocation ?? DefaultSaveLocation; + XmlSerialization.Serialize(configFilename, Encoding.UTF8, User); + + // save memory + // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] + User.Configuration = null; + + IsDirty = false; + } // Save + + public void RegisterConfiguration(IConfigurationItemRegistration registration, IConfigurationItem configItem = null, bool createDefault = false) + { + if (ItemsRegistry == null) + { + ItemsRegistry = new Dictionary(); + ItemsIndex = new Dictionary(); + Items = new List(); + } // if + + ItemsRegistry.Add(registration.Id, registration); + var directIndex = Items.Count; + ItemsIndex[registration.Id] = directIndex; + Items.Add(configItem ?? (createDefault? registration.CreateDefault() : null)); + registration.DirectIndex = directIndex; + } // RegisterConfiguration + + #endregion + + #region Basic app configuration + + protected InitializationResult LoadBasicConfiguration(string overrideBasePath) + { + InitializationResult initResult; + + initResult = LoadRegistrySettings(overrideBasePath); + if (initResult.IsError) return initResult; + + // Cultures + Cultures = GetUiCultures(); + + // Record tasks + Folders.RecordTasks = Path.Combine(Folders.Base, Properties.InvariantTexts.FolderRecordTasks); + + // Cache + Folders.Cache = Path.Combine(Folders.Base, Properties.InvariantTexts.FolderCache); + + // Logos + Folders.Logos = new AppUiConfigurationFolders.FolderLogos(Path.Combine(Folders.Base, Properties.InvariantTexts.FolderLogosRoot)); + + var descriptionServiceType = new Dictionary(); + descriptionServiceType.Add("1", Properties.Texts.DvbServiceTypeDescription_01); // SD TV + descriptionServiceType.Add("2", Properties.Texts.DvbServiceTypeDescription_02); // Radio (MPEG-1) + descriptionServiceType.Add("3", Properties.Texts.DvbServiceTypeDescription_03); // Teletext + descriptionServiceType.Add("6", Properties.Texts.DvbServiceTypeDescription_06); // Mosaic + descriptionServiceType.Add("10", Properties.Texts.DvbServiceTypeDescription_10); // Radio (AAC) + descriptionServiceType.Add("11", Properties.Texts.DvbServiceTypeDescription_11); // Mosaic (AAC) + descriptionServiceType.Add("12", Properties.Texts.DvbServiceTypeDescription_12); // Data + descriptionServiceType.Add("16", Properties.Texts.DvbServiceTypeDescription_16); // DVB MHP + descriptionServiceType.Add("17", Properties.Texts.DvbServiceTypeDescription_17); // HD TV (MPEG-2) + descriptionServiceType.Add("22", Properties.Texts.DvbServiceTypeDescription_22); // SD TV (AVC) + descriptionServiceType.Add("25", Properties.Texts.DvbServiceTypeDescription_25); // "HD TV + DescriptionServiceTypes = descriptionServiceType; + + // TODO: load from user config + DisplayPreferredOrFirst = true; + + // Validate application configuration + initResult = Validate(); + if (!initResult.IsOk) return initResult; + + // Initialize managers and providers + if (!Directory.Exists(Folders.RecordTasks)) + { + Directory.CreateDirectory(Folders.RecordTasks); + } // if + + Cache = new CacheManager(Folders.Cache); + + ProviderLogoMappings = new ProviderLogoMappings(Folders.Logos.FileProviderMappings); + ServiceLogoMappings = new ServiceLogoMappings(Folders.Logos.FileServiceDomainMappings, Folders.Logos.FileServiceMappings); + + return InitializationResult.Ok; + } // LoadBasicConfiguration + + #endregion + + #region Registry settings + + protected InitializationResult LoadRegistrySettings(string overrideBasePath) + { + try + { + var result = LoadRegistrySettingsInternal(overrideBasePath); + if (result != null) + { + return new InitializationResult() + { + Caption = Texts.AppConfigRegistryCaption, + Message = string.Format(Texts.AppConfigRegistryText, result) + }; + } + else + { + return InitializationResult.Ok; + } // if-else + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Texts.AppConfigRegistryCaption, + Message = string.Format(Texts.AppConfigRegistryText, ex.Message), + InnerException = ex + }; + } // try-catch + } // LoadRegistrySettings + + private string LoadRegistrySettingsInternal(string overrideBasePath) + { + string fullKeyPath; + + using (var hkcu = Registry.CurrentUser) + { + fullKeyPath = InvariantTexts.RegistryKey_Root; + using (var root = hkcu.OpenSubKey(InvariantTexts.RegistryKey_Root)) + { + if (root == null) return string.Format(Texts.AppConfigRegistryMissingKey, fullKeyPath); + + var isInstalled = root.GetValue(InvariantTexts.RegistryValue_Installed); + if (isInstalled == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Installed); + + var clientId = root.GetValue(InvariantTexts.RegistryValue_Analytics_ClientId) as string; + AnalyticsClientId = clientId; + if (string.IsNullOrEmpty(clientId)) + { + AnalyticsClientId = Guid.NewGuid().ToString("D").ToUpperInvariant(); + using (var writableRoot = hkcu.OpenSubKey(InvariantTexts.RegistryKey_Root, true)) + { + writableRoot.SetValue(InvariantTexts.RegistryValue_Analytics_ClientId, AnalyticsClientId); + } // using writableRoot + } // if + + var baseFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Base); + if (baseFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Base); + Folders.Base = overrideBasePath ?? baseFolder as string; + + var installFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Install); +#if (DEBUG == false) + if (installFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Install); +#endif + Folders.Install = installFolder as string; + } // using root + } // using hkcu + + return null; + } // LoadRegistrySettingsInternal + + #endregion + + protected InitializationResult Validate() + { + InitializationResult result; + + result = new InitializationResult(); + result.Caption = Properties.Texts.LoadConfigValidationCaption; + + if (!Directory.Exists(Folders.Base)) + { + result.Message = string.Format(Properties.Texts.AppConfigValidationBasePath, Folders.Base); + return result; + } // if + + if (!Directory.Exists(Folders.Logos.Root)) + { + result.Message = string.Format(Properties.Texts.AppConfigValidationLogosPath, Folders.Logos); + return result; + } // if + + result.IsOk = true; + return result; + } // Validate + + #region Content provider + + protected InitializationResult LoadIpTvProviderData() + { + var xmlPath = Path.Combine(Folders.Base, "movistartv-config.xml"); + + try + { + var ipTvProviderSettingsRegistrationGuid = new Guid(IpTvProviderSettingsRegistrationGuid); + var ipTvProviderSettings = this[ipTvProviderSettingsRegistrationGuid]; + + var result = ipTvProviderSettings.Initializate(); + if (!result.IsOk) return result; + + var xmlContentProvider = IpTvProviderData.Load(xmlPath); + + var validationResult = xmlContentProvider.Validate(); + if (validationResult != null) + { + return new InitializationResult() + { + Caption = Properties.Texts.LoadContentProviderDataValidationCaption, + Message = string.Format(Properties.Texts.LoadContentProviderDataValidation, xmlPath, validationResult), + }; + } // if + + ContentProvider = UiContentProvider.FromXmlConfiguration(xmlContentProvider, Cultures); + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Properties.Texts.LoadContentProviderDataExceptionCaption, + Message = string.Format(Properties.Texts.LoadContentProviderDataValidation, xmlPath, Properties.Texts.LoadContentProviderDataValidationException), + InnerException = ex + }; + } // try-catch + } // LoadIpTvProviderData + + #endregion + + #region User configuration + + protected InitializationResult LoadUserConfiguration() + { + DefaultSaveLocation = Path.Combine(Folders.Base, "user-config.xml"); + + try + { + // load + User = XmlSerialization.Deserialize(DefaultSaveLocation, true); + + // validate + var validationError = User.Validate(); + if (validationError != null) + { + return new InitializationResult() + { + Caption = Properties.Texts.LoadUserConfigValidationCaption, + Message = string.Format(Properties.Texts.LoadConfigUserConfigValidation, DefaultSaveLocation, validationError), + }; + } // if + + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Properties.Texts.LoadUserConfigExceptionCaption, + Message = string.Format(Properties.Texts.LoadConfigUserConfigValidation, DefaultSaveLocation, Properties.Texts.LoadConfigUserConfigValidationException), + InnerException = ex + }; + } // try-catch + } // LoadUserConfiguration + + private InitializationResult RegisterConfigurationItems() + { + try + { + var registerItems = User.Configuration.Registry; + ItemsRegistry = new Dictionary(registerItems.Count); + + foreach (var registerType in registerItems) + { + var type = Type.GetType(registerType); + var registration = (IConfigurationItemRegistration)Activator.CreateInstance(type); + if (registration == null) continue; + + ItemsRegistry.Add(registration.Id, registration); + } // foreach + } + catch (Exception ex) + { + return new InitializationResult(ex); + } // try-catch + + return InitializationResult.Ok; + } // RegisterConfigurationItems + + private InitializationResult ProcessXmlConfigurationItems() + { + try + { + ItemsIndex = new Dictionary(User.Configuration.XmlData.Count); + Items = new List(User.Configuration.XmlData.Count); + + foreach (var item in User.Configuration.XmlData) + { + var xAttr = item.Attributes["configurationId"]; + if ((xAttr == null) || (xAttr.Value == null)) continue; + var id = new Guid(xAttr.Value); + + IConfigurationItemRegistration registration; + if (!ItemsRegistry.TryGetValue(id, out registration)) continue; + + using (var reader = new XmlNodeReader(item)) + { + var configItem = (IConfigurationItem) XmlSerialization.Deserialize(reader, registration.ItemType); + + if (configItem.SupportsValidation) + { + var result = configItem.Validate(item.Name); + if (result != null) + { + return new InitializationResult(result); + } // if + } // if + + if (configItem.SupportsInitialization) + { + var result = configItem.Initializate(); + if (result.IsError) return result; + } // if + + var directIndex = Items.Count; + ItemsIndex[id] = directIndex; + Items.Add(configItem); + registration.DirectIndex = directIndex; + } // using reader + } // foreach + + // save memory + // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] + User.Configuration = null; + } + catch (Exception ex) + { + return new InitializationResult(ex); + } // try-catch + + return InitializationResult.Ok; + } // ProcessXmlConfigurationItems + + #endregion + } // class AppUiConfiguration +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs b/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs index 4e78e91c..b5da639a 100644 --- a/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs +++ b/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs @@ -1,49 +1,49 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public class AppUiConfigurationFolders - { - public class FolderLogos - { - public string Root { get; internal protected set; } - public string Providers { get; internal protected set; } - public string Services { get; internal protected set; } - - internal FolderLogos(string rootFolder) - { - Root = rootFolder; - Providers = Path.Combine(Root, Properties.InvariantTexts.FolderLogosProviders); - Services = Path.Combine(Root, Properties.InvariantTexts.FolderLogosServices); - } // constructor - - public string FileProviderMappings - { - get { return Path.Combine(Providers, Properties.InvariantTexts.FileLogoProviderMappings); } - } // FileProvidersMappings - - public string FileServiceDomainMappings - { - get { return Path.Combine(Services, Properties.InvariantTexts.FileLogoDomainMappings); } - } // FileServiceDomainMappings - - public string FileServiceMappings - { - get { return Path.Combine(Services, Properties.InvariantTexts.FileLogoServiceMappings); } - } // FileProvidersMappings - } // FolderLogos - - public string Install { get; internal protected set; } - public string Base { get; internal protected set; } - public string RecordTasks { get; internal protected set; } - public string Cache { get; internal protected set; } - public FolderLogos Logos { get; internal protected set; } - } // class AppUiConfigurationFolders -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public class AppUiConfigurationFolders + { + public class FolderLogos + { + public string Root { get; internal protected set; } + public string Providers { get; internal protected set; } + public string Services { get; internal protected set; } + + internal FolderLogos(string rootFolder) + { + Root = rootFolder; + Providers = Path.Combine(Root, Properties.InvariantTexts.FolderLogosProviders); + Services = Path.Combine(Root, Properties.InvariantTexts.FolderLogosServices); + } // constructor + + public string FileProviderMappings + { + get { return Path.Combine(Providers, Properties.InvariantTexts.FileLogoProviderMappings); } + } // FileProvidersMappings + + public string FileServiceDomainMappings + { + get { return Path.Combine(Services, Properties.InvariantTexts.FileLogoDomainMappings); } + } // FileServiceDomainMappings + + public string FileServiceMappings + { + get { return Path.Combine(Services, Properties.InvariantTexts.FileLogoServiceMappings); } + } // FileProvidersMappings + } // FolderLogos + + public string Install { get; internal protected set; } + public string Base { get; internal protected set; } + public string RecordTasks { get; internal protected set; } + public string Cache { get; internal protected set; } + public FolderLogos Logos { get; internal protected set; } + } // class AppUiConfigurationFolders +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs b/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs index 18c10398..026b336e 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs @@ -1,138 +1,138 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Cache -{ - public class CacheManager - { - private string BaseDirectory; - private char[] DocNameOffendingChars; - - public CacheManager(string baseDirectory) - { - BaseDirectory = baseDirectory; - if (!Directory.Exists(BaseDirectory)) - { - Directory.CreateDirectory(BaseDirectory); - } // if - - var invalidFileChars = Path.GetInvalidFileNameChars(); - DocNameOffendingChars = new char[invalidFileChars.Length + 2]; - DocNameOffendingChars[0] = '.'; - DocNameOffendingChars[1] = ' '; - Array.Copy(invalidFileChars, 0, DocNameOffendingChars, 2, invalidFileChars.Length); - } // constructor - - public void SaveXml(string documentType, string name, int version, T xmlTree) where T: class - { - var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); - XmlSerialization.Serialize(path, Encoding.UTF8, xmlTree); - } // SaveXml - - public T LoadXml(string documentType, string name) where T : class - { - try - { - var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); - if (!File.Exists(path)) - { - return null; - } // if - - return XmlSerialization.Deserialize(path, false); - } - catch - { - // supress exception; behave as if document is not in the cache - return null; - } // try-catch - } // LoadXml - - public CachedXmlDocument LoadXmlDocument(string documentType, string name) where T : class - { - try - { - var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); - if (!File.Exists(path)) - { - return null; - } // if - - var document = XmlSerialization.Deserialize(path, false); - if (document == null) return null; - - var dateC = File.GetCreationTime(path); - var dateW = File.GetLastWriteTime(path); - - return new CachedXmlDocument(document, documentType, name, new Version(), (dateC > dateW) ? dateC : dateW); - } - catch - { - // supress exception; behave as if document is not in the cache - return null; - } // try-catch - } // LoadXmlDocument - - /// - /// Builds a filename, replacing all filesystem invalid characters (including '.' and spaces) with the given character - /// - /// Optional. Must not contain invalid chars - /// Name of the file/document - /// File extension - /// (Optional) Character to mark a replaced, invalid character - /// A filesystem-safe filename - public string GetSafeDocumentName(string documentType, string documentName, string extension, char? replacingChar = '~') - { - StringBuilder buffer; - int startIndex, index; - - documentName = documentName.ToLowerInvariant(); - buffer = new StringBuilder(documentType.Length + 2 + documentName.Length * 2); - if (documentType != null) - { - buffer.Append('{'); - buffer.Append(documentType.ToLowerInvariant()); - buffer.Append("} "); - } // if - - // quick test: any offending char? - index = documentName.IndexOfAny(DocNameOffendingChars); - if (index < 0) - { - buffer.Append(documentName); - buffer.Append(extension); - return buffer.ToString(); - } // if - - startIndex = 0; - while (index >= 0) - { - if (index != startIndex) - { - buffer.Append(documentName.Substring(startIndex, (index - startIndex))); - if (replacingChar.HasValue) buffer.Append(replacingChar.Value); - } // if - - startIndex = index + 1; - index = (startIndex < documentName.Length) ? documentName.IndexOfAny(DocNameOffendingChars, startIndex) : -1; - } // while - - // add final text - if (startIndex < documentName.Length) - { - buffer.Append(documentName.Substring(startIndex, documentName.Length - startIndex)); - } // if - buffer.Append(extension); - - return buffer.ToString(); - } // GetSafeDocumentName - } // class CacheManager -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Cache +{ + public class CacheManager + { + private string BaseDirectory; + private char[] DocNameOffendingChars; + + public CacheManager(string baseDirectory) + { + BaseDirectory = baseDirectory; + if (!Directory.Exists(BaseDirectory)) + { + Directory.CreateDirectory(BaseDirectory); + } // if + + var invalidFileChars = Path.GetInvalidFileNameChars(); + DocNameOffendingChars = new char[invalidFileChars.Length + 2]; + DocNameOffendingChars[0] = '.'; + DocNameOffendingChars[1] = ' '; + Array.Copy(invalidFileChars, 0, DocNameOffendingChars, 2, invalidFileChars.Length); + } // constructor + + public void SaveXml(string documentType, string name, int version, T xmlTree) where T: class + { + var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); + XmlSerialization.Serialize(path, Encoding.UTF8, xmlTree); + } // SaveXml + + public T LoadXml(string documentType, string name) where T : class + { + try + { + var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); + if (!File.Exists(path)) + { + return null; + } // if + + return XmlSerialization.Deserialize(path, false); + } + catch + { + // supress exception; behave as if document is not in the cache + return null; + } // try-catch + } // LoadXml + + public CachedXmlDocument LoadXmlDocument(string documentType, string name) where T : class + { + try + { + var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); + if (!File.Exists(path)) + { + return null; + } // if + + var document = XmlSerialization.Deserialize(path, false); + if (document == null) return null; + + var dateC = File.GetCreationTime(path); + var dateW = File.GetLastWriteTime(path); + + return new CachedXmlDocument(document, documentType, name, new Version(), (dateC > dateW) ? dateC : dateW); + } + catch + { + // supress exception; behave as if document is not in the cache + return null; + } // try-catch + } // LoadXmlDocument + + /// + /// Builds a filename, replacing all filesystem invalid characters (including '.' and spaces) with the given character + /// + /// Optional. Must not contain invalid chars + /// Name of the file/document + /// File extension + /// (Optional) Character to mark a replaced, invalid character + /// A filesystem-safe filename + public string GetSafeDocumentName(string documentType, string documentName, string extension, char? replacingChar = '~') + { + StringBuilder buffer; + int startIndex, index; + + documentName = documentName.ToLowerInvariant(); + buffer = new StringBuilder(documentType.Length + 2 + documentName.Length * 2); + if (documentType != null) + { + buffer.Append('{'); + buffer.Append(documentType.ToLowerInvariant()); + buffer.Append("} "); + } // if + + // quick test: any offending char? + index = documentName.IndexOfAny(DocNameOffendingChars); + if (index < 0) + { + buffer.Append(documentName); + buffer.Append(extension); + return buffer.ToString(); + } // if + + startIndex = 0; + while (index >= 0) + { + if (index != startIndex) + { + buffer.Append(documentName.Substring(startIndex, (index - startIndex))); + if (replacingChar.HasValue) buffer.Append(replacingChar.Value); + } // if + + startIndex = index + 1; + index = (startIndex < documentName.Length) ? documentName.IndexOfAny(DocNameOffendingChars, startIndex) : -1; + } // while + + // add final text + if (startIndex < documentName.Length) + { + buffer.Append(documentName.Substring(startIndex, documentName.Length - startIndex)); + } // if + buffer.Append(extension); + + return buffer.ToString(); + } // GetSafeDocumentName + } // class CacheManager +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs b/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs index f6cdbce8..ea66b0d1 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs @@ -1,50 +1,50 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Cache -{ - public abstract class CachedItemBase - { - public CachedItemBase(string documentType, string name, Version version, DateTime date) - { - DocumentType = documentType; - Name = name; - Version = version; - Date = date; - } // constructor - - public string DocumentType - { - get; - private set; - } // DocType - - public string Name - { - get; - private set; - } // Name - - public Version Version - { - get; - private set; - } // Version - - public DateTime Date - { - get; - private set; - } // Date - - public TimeSpan Age - { - get { return DateTime.Now - Date; } - } // Age - } // CachedItemBase -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Cache +{ + public abstract class CachedItemBase + { + public CachedItemBase(string documentType, string name, Version version, DateTime date) + { + DocumentType = documentType; + Name = name; + Version = version; + Date = date; + } // constructor + + public string DocumentType + { + get; + private set; + } // DocType + + public string Name + { + get; + private set; + } // Name + + public Version Version + { + get; + private set; + } // Version + + public DateTime Date + { + get; + private set; + } // Date + + public TimeSpan Age + { + get { return DateTime.Now - Date; } + } // Age + } // CachedItemBase +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs b/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs index 04af9e07..4fe082e9 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs @@ -1,25 +1,25 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Cache -{ - public sealed class CachedXmlDocument : CachedItemBase - { - public CachedXmlDocument(T document, string documentType, string name, Version version, DateTime date) - : base(documentType, name, version, date) - { - Document = document; - } // constructor - - public T Document - { - get; - private set; - } // Document - } // CachedXmlDocument -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Cache +{ + public sealed class CachedXmlDocument : CachedItemBase + { + public CachedXmlDocument(T document, string documentType, string name, Version version, DateTime date) + : base(documentType, name, version, date) + { + Document = document; + } // constructor + + public T Document + { + get; + private set; + } // Document + } // CachedXmlDocument +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs index f4c8f138..0f7d9e76 100644 --- a/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs @@ -1,193 +1,193 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Configuration { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonUiResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonUiResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.CommonUiResources", typeof(CommonUiResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Add_16xM { - get { - object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_AttachFile_16x16 { - get { - object obj = ResourceManager.GetObject("Action_AttachFile_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Delete_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { - get { - object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { - get { - object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Properties_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Property_Add_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Property_Add_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Property_Edit_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Property_Edit_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Info_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Ok_SmallCircle_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Ok_SmallCircle_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Warning_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonUiResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonUiResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.CommonUiResources", typeof(CommonUiResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Add_16xM { + get { + object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_AttachFile_16x16 { + get { + object obj = ResourceManager.GetObject("Action_AttachFile_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Add_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Add_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Info_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Ok_SmallCircle_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Ok_SmallCircle_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Warning_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs index ceda3952..d9be4c04 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs @@ -1,124 +1,124 @@ -namespace Project.IpTv.UiServices.Configuration -{ - partial class ConfigurationForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationForm)); - this.buttonOk = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.panelConfigItemUi = new System.Windows.Forms.Panel(); - this.label1 = new System.Windows.Forms.Label(); - this.listViewConfigItems = new System.Windows.Forms.ListView(); - this.imageListConfigItems = new System.Windows.Forms.ImageList(this.components); - this.SuspendLayout(); - // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); - // - // buttonCancel - // - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // panelConfigItemUi - // - resources.ApplyResources(this.panelConfigItemUi, "panelConfigItemUi"); - this.panelConfigItemUi.Name = "panelConfigItemUi"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); - this.label1.Name = "label1"; - // - // listViewConfigItems - // - resources.ApplyResources(this.listViewConfigItems, "listViewConfigItems"); - this.listViewConfigItems.BackgroundImageTiled = true; - this.listViewConfigItems.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.listViewConfigItems.FullRowSelect = true; - this.listViewConfigItems.GridLines = true; - this.listViewConfigItems.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.listViewConfigItems.HideSelection = false; - this.listViewConfigItems.LargeImageList = this.imageListConfigItems; - this.listViewConfigItems.Name = "listViewConfigItems"; - this.listViewConfigItems.SmallImageList = this.imageListConfigItems; - this.listViewConfigItems.UseCompatibleStateImageBehavior = false; - this.listViewConfigItems.View = System.Windows.Forms.View.Tile; - this.listViewConfigItems.SelectedIndexChanged += new System.EventHandler(this.listViewConfigItems_SelectedIndexChanged); - // - // imageListConfigItems - // - this.imageListConfigItems.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; - resources.ApplyResources(this.imageListConfigItems, "imageListConfigItems"); - this.imageListConfigItems.TransparentColor = System.Drawing.Color.Transparent; - // - // ConfigurationForm - // - this.AcceptButton = this.buttonOk; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonCancel; - this.Controls.Add(this.listViewConfigItems); - this.Controls.Add(this.label1); - this.Controls.Add(this.panelConfigItemUi); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonOk); - this.MinimizeBox = false; - this.Name = "ConfigurationForm"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigurationForm_FormClosing); - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ConfigurationForm_FormClosed); - this.Load += new System.EventHandler(this.ConfigurationForm_Load); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Button buttonOk; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Panel panelConfigItemUi; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ListView listViewConfigItems; - private System.Windows.Forms.ImageList imageListConfigItems; - - } +namespace IpTviewr.UiServices.Configuration +{ + partial class ConfigurationForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigurationForm)); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.panelConfigItemUi = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.listViewConfigItems = new System.Windows.Forms.ListView(); + this.imageListConfigItems = new System.Windows.Forms.ImageList(this.components); + this.SuspendLayout(); + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // panelConfigItemUi + // + resources.ApplyResources(this.panelConfigItemUi, "panelConfigItemUi"); + this.panelConfigItemUi.Name = "panelConfigItemUi"; + // + // label1 + // + resources.ApplyResources(this.label1, "label1"); + this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); + this.label1.Name = "label1"; + // + // listViewConfigItems + // + resources.ApplyResources(this.listViewConfigItems, "listViewConfigItems"); + this.listViewConfigItems.BackgroundImageTiled = true; + this.listViewConfigItems.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.listViewConfigItems.FullRowSelect = true; + this.listViewConfigItems.GridLines = true; + this.listViewConfigItems.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewConfigItems.HideSelection = false; + this.listViewConfigItems.LargeImageList = this.imageListConfigItems; + this.listViewConfigItems.Name = "listViewConfigItems"; + this.listViewConfigItems.SmallImageList = this.imageListConfigItems; + this.listViewConfigItems.UseCompatibleStateImageBehavior = false; + this.listViewConfigItems.View = System.Windows.Forms.View.Tile; + this.listViewConfigItems.SelectedIndexChanged += new System.EventHandler(this.listViewConfigItems_SelectedIndexChanged); + // + // imageListConfigItems + // + this.imageListConfigItems.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + resources.ApplyResources(this.imageListConfigItems, "imageListConfigItems"); + this.imageListConfigItems.TransparentColor = System.Drawing.Color.Transparent; + // + // ConfigurationForm + // + this.AcceptButton = this.buttonOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.listViewConfigItems); + this.Controls.Add(this.label1); + this.Controls.Add(this.panelConfigItemUi); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.MinimizeBox = false; + this.Name = "ConfigurationForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConfigurationForm_FormClosing); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ConfigurationForm_FormClosed); + this.Load += new System.EventHandler(this.ConfigurationForm_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Panel panelConfigItemUi; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListView listViewConfigItems; + private System.Windows.Forms.ImageList imageListConfigItems; + + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs b/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs index 9278d184..322676eb 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs +++ b/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs @@ -1,245 +1,245 @@ -using Project.IpTv.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration -{ - public partial class ConfigurationForm : Form - { - private ListViewItem SelectedConfigurationListItem; - - private class ConfigurationItem - { - public IConfigurationItemRegistration Registration; - public IConfigurationItem ExistingData; - public IConfigurationItem NewData; - public IConfigurationItemEditor Editor; - } // ConfigurationItem - - public static DialogResult ShowConfigurationForm(IWin32Window owner, bool autoSave = true, IDictionary applyChanges = null) - { - DialogResult result; - bool changed; - - var q = from item in AppUiConfiguration.Current.ItemsRegistry - let registration = item.Value - where registration.HasEditor - orderby registration.EditorPriority - select new ConfigurationItem() - { - Registration = registration, - ExistingData = AppUiConfiguration.Current[registration.DirectIndex] - }; - var items = q.ToList(); - - using (var form = new ConfigurationForm()) - { - BasicGoogleTelemetry.SendScreenHit(form, "(default)"); - form.ConfigurationItems = items; - result = form.ShowDialog(owner); - if (result != DialogResult.OK) - { - return result; - } // if - } // using - - // save new settings - changed = false; - foreach (var item in items) - { - var newData = item.NewData; - if (newData == null) continue; - - changed = true; - AppUiConfiguration.Current[item.Registration.DirectIndex] = newData; - } // foreach - - // autosave if settings changed - if ((changed) && (autoSave)) - { - AppUiConfiguration.Current.Save(); - } // if - - // apply changes - if ((changed) && (applyChanges != null) && (applyChanges.Count > 0)) - { - Action applyChangesMethod; - - foreach (var item in items) - { - if (item.NewData == null) continue; - - if (applyChanges.TryGetValue(item.Registration.Id, out applyChangesMethod)) - { - applyChangesMethod(); - } // if - } // foreach - } // if - - return result; - } // ShowConfigurationForm - - public static T ShowConfigurationForm(IWin32Window owner, string settingsGuid, T overrideSettings) where T : class, IConfigurationItem - { - var registration = AppUiConfiguration.Current.ItemsRegistry[new Guid(settingsGuid)]; - var data = new ConfigurationItem() - { - Registration = registration, - ExistingData = overrideSettings ?? AppUiConfiguration.Current[registration.DirectIndex] - }; - var items = new List(1); - items.Add(data); - - using (var form = new ConfigurationForm()) - { - BasicGoogleTelemetry.SendScreenHit(form, data.Registration.ItemType.Name); - form.ConfigurationItems = items; - var dialogResult = form.ShowDialog(owner); - if (dialogResult != DialogResult.OK) - { - return null; - } - else - { - return (T)items[0].NewData; - } // if-else - } // using - } // ShowConfigurationForm - - public ConfigurationForm() - { - InitializeComponent(); - ConfigurationItems = new List(); - } // constructor - - public bool IsAppRestartNeeded - { - get; - private set; - } // IsAppRestartNeeded - - private IList ConfigurationItems - { - get; - set; - } // ConfigurationItems - - private void ConfigurationForm_Load(object sender, EventArgs e) - { - listViewConfigItems.TileSize = new Size(listViewConfigItems.Width -SystemInformation.VerticalScrollBarWidth - 2, listViewConfigItems.LargeImageList.ImageSize.Height + 6); - - foreach (var configItem in ConfigurationItems) - { - var registration = configItem.Registration; - - using (var img = registration.EditorImage) - { - listViewConfigItems.LargeImageList.Images.Add(img); - } // using - - configItem.Editor = registration.CreateEditor(AppUiConfiguration.CloneSettings(configItem.ExistingData)); - - var item = new ListViewItem(registration.EditorDisplayName); - item.ImageIndex = imageListConfigItems.Images.Count - 1; - item.Tag = configItem.Editor; - - listViewConfigItems.Items.Add(item); - } // foreach - - if (listViewConfigItems.Items.Count > 0) - { - listViewConfigItems.Items[0].Selected = true; - } // if - } // ConfigurationForm_Load - - private void ConfigurationForm_FormClosing(object sender, FormClosingEventArgs e) - { - bool cancelClose; - - if (DialogResult == DialogResult.OK) - { - foreach (var configItem in ConfigurationItems) - { - if (configItem.Editor == null) return; - - configItem.Editor.EditorClosing(out cancelClose); - if (cancelClose) - { - e.Cancel = true; - return; - } // if - } // foreach - } // if - } // ConfigurationForm_FormClosing - - private void ConfigurationForm_FormClosed(object sender, FormClosedEventArgs e) - { - foreach (var configItem in ConfigurationItems) - { - if (configItem.Editor == null) return; - - configItem.Editor.EditorClosed(DialogResult != DialogResult.OK); - } // foreach editorData - } // ConfigurationForm_FormClosed - - private void listViewConfigItems_SelectedIndexChanged(object sender, EventArgs e) - { - var newSelection = (listViewConfigItems.SelectedItems.Count > 0) ? listViewConfigItems.SelectedItems[0] : null; - if (newSelection == null) return; - - SelectedConfigurationListItem = newSelection; - var configItem = SelectedConfigurationListItem.Tag as IConfigurationItemEditor; - - panelConfigItemUi.Controls.Clear(); - var ui = configItem.UserInterfaceItem; - panelConfigItemUi.Controls.Add(ui); - ui.Dock = DockStyle.Fill; - } // listViewConfigItems_SelectedIndexChanged - - private void buttonOk_Click(object sender, EventArgs e) - { - buttonOk.DialogResult = DialogResult.None; - foreach (var configItem in ConfigurationItems) - { - if (configItem.Editor == null) continue; - - if (configItem.Editor.IsDataChanged) - { - if (configItem.Editor.SupportsWinFormsValidation) - { - if (!configItem.Editor.UserInterfaceItem.Validate(false)) return; - } - else - { - if (!configItem.Editor.Validate()) return; - } // if-else - } // if - } // foreach - - IsAppRestartNeeded = false; - foreach (var configItem in ConfigurationItems) - { - if (configItem.Editor == null) continue; - - if (configItem.Editor.IsDataChanged) - { - configItem.NewData = configItem.Editor.GetNewData(); - IsAppRestartNeeded |= configItem.Editor.IsAppRestartNeeded; - } // if - } // foreach - - if (IsAppRestartNeeded) - { - MessageBox.Show(this, Properties.SettingsTexts.ConfigFormAppRestartRequired, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); - } // if - - buttonOk.DialogResult = DialogResult.OK; - } // buttonOk_Click - } // class ConfigurationForm -} // namespace +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration +{ + public partial class ConfigurationForm : Form + { + private ListViewItem SelectedConfigurationListItem; + + private class ConfigurationItem + { + public IConfigurationItemRegistration Registration; + public IConfigurationItem ExistingData; + public IConfigurationItem NewData; + public IConfigurationItemEditor Editor; + } // ConfigurationItem + + public static DialogResult ShowConfigurationForm(IWin32Window owner, bool autoSave = true, IDictionary applyChanges = null) + { + DialogResult result; + bool changed; + + var q = from item in AppUiConfiguration.Current.ItemsRegistry + let registration = item.Value + where registration.HasEditor + orderby registration.EditorPriority + select new ConfigurationItem() + { + Registration = registration, + ExistingData = AppUiConfiguration.Current[registration.DirectIndex] + }; + var items = q.ToList(); + + using (var form = new ConfigurationForm()) + { + BasicGoogleTelemetry.SendScreenHit(form, "(default)"); + form.ConfigurationItems = items; + result = form.ShowDialog(owner); + if (result != DialogResult.OK) + { + return result; + } // if + } // using + + // save new settings + changed = false; + foreach (var item in items) + { + var newData = item.NewData; + if (newData == null) continue; + + changed = true; + AppUiConfiguration.Current[item.Registration.DirectIndex] = newData; + } // foreach + + // autosave if settings changed + if ((changed) && (autoSave)) + { + AppUiConfiguration.Current.Save(); + } // if + + // apply changes + if ((changed) && (applyChanges != null) && (applyChanges.Count > 0)) + { + Action applyChangesMethod; + + foreach (var item in items) + { + if (item.NewData == null) continue; + + if (applyChanges.TryGetValue(item.Registration.Id, out applyChangesMethod)) + { + applyChangesMethod(); + } // if + } // foreach + } // if + + return result; + } // ShowConfigurationForm + + public static T ShowConfigurationForm(IWin32Window owner, string settingsGuid, T overrideSettings) where T : class, IConfigurationItem + { + var registration = AppUiConfiguration.Current.ItemsRegistry[new Guid(settingsGuid)]; + var data = new ConfigurationItem() + { + Registration = registration, + ExistingData = overrideSettings ?? AppUiConfiguration.Current[registration.DirectIndex] + }; + var items = new List(1); + items.Add(data); + + using (var form = new ConfigurationForm()) + { + BasicGoogleTelemetry.SendScreenHit(form, data.Registration.ItemType.Name); + form.ConfigurationItems = items; + var dialogResult = form.ShowDialog(owner); + if (dialogResult != DialogResult.OK) + { + return null; + } + else + { + return (T)items[0].NewData; + } // if-else + } // using + } // ShowConfigurationForm + + public ConfigurationForm() + { + InitializeComponent(); + ConfigurationItems = new List(); + } // constructor + + public bool IsAppRestartNeeded + { + get; + private set; + } // IsAppRestartNeeded + + private IList ConfigurationItems + { + get; + set; + } // ConfigurationItems + + private void ConfigurationForm_Load(object sender, EventArgs e) + { + listViewConfigItems.TileSize = new Size(listViewConfigItems.Width -SystemInformation.VerticalScrollBarWidth - 2, listViewConfigItems.LargeImageList.ImageSize.Height + 6); + + foreach (var configItem in ConfigurationItems) + { + var registration = configItem.Registration; + + using (var img = registration.EditorImage) + { + listViewConfigItems.LargeImageList.Images.Add(img); + } // using + + configItem.Editor = registration.CreateEditor(AppUiConfiguration.CloneSettings(configItem.ExistingData)); + + var item = new ListViewItem(registration.EditorDisplayName); + item.ImageIndex = imageListConfigItems.Images.Count - 1; + item.Tag = configItem.Editor; + + listViewConfigItems.Items.Add(item); + } // foreach + + if (listViewConfigItems.Items.Count > 0) + { + listViewConfigItems.Items[0].Selected = true; + } // if + } // ConfigurationForm_Load + + private void ConfigurationForm_FormClosing(object sender, FormClosingEventArgs e) + { + bool cancelClose; + + if (DialogResult == DialogResult.OK) + { + foreach (var configItem in ConfigurationItems) + { + if (configItem.Editor == null) return; + + configItem.Editor.EditorClosing(out cancelClose); + if (cancelClose) + { + e.Cancel = true; + return; + } // if + } // foreach + } // if + } // ConfigurationForm_FormClosing + + private void ConfigurationForm_FormClosed(object sender, FormClosedEventArgs e) + { + foreach (var configItem in ConfigurationItems) + { + if (configItem.Editor == null) return; + + configItem.Editor.EditorClosed(DialogResult != DialogResult.OK); + } // foreach editorData + } // ConfigurationForm_FormClosed + + private void listViewConfigItems_SelectedIndexChanged(object sender, EventArgs e) + { + var newSelection = (listViewConfigItems.SelectedItems.Count > 0) ? listViewConfigItems.SelectedItems[0] : null; + if (newSelection == null) return; + + SelectedConfigurationListItem = newSelection; + var configItem = SelectedConfigurationListItem.Tag as IConfigurationItemEditor; + + panelConfigItemUi.Controls.Clear(); + var ui = configItem.UserInterfaceItem; + panelConfigItemUi.Controls.Add(ui); + ui.Dock = DockStyle.Fill; + } // listViewConfigItems_SelectedIndexChanged + + private void buttonOk_Click(object sender, EventArgs e) + { + buttonOk.DialogResult = DialogResult.None; + foreach (var configItem in ConfigurationItems) + { + if (configItem.Editor == null) continue; + + if (configItem.Editor.IsDataChanged) + { + if (configItem.Editor.SupportsWinFormsValidation) + { + if (!configItem.Editor.UserInterfaceItem.Validate(false)) return; + } + else + { + if (!configItem.Editor.Validate()) return; + } // if-else + } // if + } // foreach + + IsAppRestartNeeded = false; + foreach (var configItem in ConfigurationItems) + { + if (configItem.Editor == null) continue; + + if (configItem.Editor.IsDataChanged) + { + configItem.NewData = configItem.Editor.GetNewData(); + IsAppRestartNeeded |= configItem.Editor.IsAppRestartNeeded; + } // if + } // foreach + + if (IsAppRestartNeeded) + { + MessageBox.Show(this, Properties.SettingsTexts.ConfigFormAppRestartRequired, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } // if + + buttonOk.DialogResult = DialogResult.OK; + } // buttonOk_Click + } // class ConfigurationForm +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs index 0514c1e9..1673ae66 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs @@ -1,123 +1,123 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Configuration.Editors -{ - partial class ArgumentEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.ColumnHeader columnHeader1; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentEditor)); - System.Windows.Forms.ColumnHeader columnHeader2; - this.textBoxCommandLine = new System.Windows.Forms.TextBox(); - this.groupBoxParameters = new System.Windows.Forms.GroupBox(); - this.labelAddParam = new System.Windows.Forms.Label(); - this.buttonAddParam = new System.Windows.Forms.Button(); - this.listParameters = new System.Windows.Forms.ListView(); - columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.groupBoxParameters.SuspendLayout(); - this.SuspendLayout(); - // - // columnHeader1 - // - resources.ApplyResources(columnHeader1, "columnHeader1"); - // - // columnHeader2 - // - resources.ApplyResources(columnHeader2, "columnHeader2"); - // - // textBoxCommandLine - // - resources.ApplyResources(this.textBoxCommandLine, "textBoxCommandLine"); - this.textBoxCommandLine.Name = "textBoxCommandLine"; - this.textBoxCommandLine.TextChanged += new System.EventHandler(this.textBoxCommandLine_TextChanged); - // - // groupBoxParameters - // - resources.ApplyResources(this.groupBoxParameters, "groupBoxParameters"); - this.groupBoxParameters.Controls.Add(this.labelAddParam); - this.groupBoxParameters.Controls.Add(this.buttonAddParam); - this.groupBoxParameters.Controls.Add(this.listParameters); - this.groupBoxParameters.Name = "groupBoxParameters"; - this.groupBoxParameters.TabStop = false; - // - // labelAddParam - // - resources.ApplyResources(this.labelAddParam, "labelAddParam"); - this.labelAddParam.Name = "labelAddParam"; - // - // buttonAddParam - // - resources.ApplyResources(this.buttonAddParam, "buttonAddParam"); - this.buttonAddParam.Image = global::Project.IpTv.UiServices.Configuration.Properties.Resources.Action_AddVariable_16; - this.buttonAddParam.Name = "buttonAddParam"; - this.buttonAddParam.UseVisualStyleBackColor = true; - this.buttonAddParam.Click += new System.EventHandler(this.buttonAddParam_Click); - // - // listParameters - // - resources.ApplyResources(this.listParameters, "listParameters"); - this.listParameters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - columnHeader1, - columnHeader2}); - this.listParameters.FullRowSelect = true; - this.listParameters.GridLines = true; - this.listParameters.HideSelection = false; - this.listParameters.MultiSelect = false; - this.listParameters.Name = "listParameters"; - this.listParameters.ShowItemToolTips = true; - this.listParameters.UseCompatibleStateImageBehavior = false; - this.listParameters.View = System.Windows.Forms.View.Details; - this.listParameters.SelectedIndexChanged += new System.EventHandler(this.listParameters_SelectedIndexChanged); - this.listParameters.DoubleClick += new System.EventHandler(this.listParameters_DoubleClick); - // - // ArgumentEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxParameters); - this.Controls.Add(this.textBoxCommandLine); - this.Name = "ArgumentEditor"; - this.Load += new System.EventHandler(this.ParametersEditor_Load); - this.groupBoxParameters.ResumeLayout(false); - this.groupBoxParameters.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox textBoxCommandLine; - private System.Windows.Forms.GroupBox groupBoxParameters; - private System.Windows.Forms.Button buttonAddParam; - private System.Windows.Forms.Label labelAddParam; - private System.Windows.Forms.ListView listParameters; - } // class ArgumentEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Configuration.Editors +{ + partial class ArgumentEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ColumnHeader columnHeader1; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentEditor)); + System.Windows.Forms.ColumnHeader columnHeader2; + this.textBoxCommandLine = new System.Windows.Forms.TextBox(); + this.groupBoxParameters = new System.Windows.Forms.GroupBox(); + this.labelAddParam = new System.Windows.Forms.Label(); + this.buttonAddParam = new System.Windows.Forms.Button(); + this.listParameters = new System.Windows.Forms.ListView(); + columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBoxParameters.SuspendLayout(); + this.SuspendLayout(); + // + // columnHeader1 + // + resources.ApplyResources(columnHeader1, "columnHeader1"); + // + // columnHeader2 + // + resources.ApplyResources(columnHeader2, "columnHeader2"); + // + // textBoxCommandLine + // + resources.ApplyResources(this.textBoxCommandLine, "textBoxCommandLine"); + this.textBoxCommandLine.Name = "textBoxCommandLine"; + this.textBoxCommandLine.TextChanged += new System.EventHandler(this.textBoxCommandLine_TextChanged); + // + // groupBoxParameters + // + resources.ApplyResources(this.groupBoxParameters, "groupBoxParameters"); + this.groupBoxParameters.Controls.Add(this.labelAddParam); + this.groupBoxParameters.Controls.Add(this.buttonAddParam); + this.groupBoxParameters.Controls.Add(this.listParameters); + this.groupBoxParameters.Name = "groupBoxParameters"; + this.groupBoxParameters.TabStop = false; + // + // labelAddParam + // + resources.ApplyResources(this.labelAddParam, "labelAddParam"); + this.labelAddParam.Name = "labelAddParam"; + // + // buttonAddParam + // + resources.ApplyResources(this.buttonAddParam, "buttonAddParam"); + this.buttonAddParam.Image = global::IpTviewr.UiServices.Configuration.Properties.Resources.Action_AddVariable_16; + this.buttonAddParam.Name = "buttonAddParam"; + this.buttonAddParam.UseVisualStyleBackColor = true; + this.buttonAddParam.Click += new System.EventHandler(this.buttonAddParam_Click); + // + // listParameters + // + resources.ApplyResources(this.listParameters, "listParameters"); + this.listParameters.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeader1, + columnHeader2}); + this.listParameters.FullRowSelect = true; + this.listParameters.GridLines = true; + this.listParameters.HideSelection = false; + this.listParameters.MultiSelect = false; + this.listParameters.Name = "listParameters"; + this.listParameters.ShowItemToolTips = true; + this.listParameters.UseCompatibleStateImageBehavior = false; + this.listParameters.View = System.Windows.Forms.View.Details; + this.listParameters.SelectedIndexChanged += new System.EventHandler(this.listParameters_SelectedIndexChanged); + this.listParameters.DoubleClick += new System.EventHandler(this.listParameters_DoubleClick); + // + // ArgumentEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxParameters); + this.Controls.Add(this.textBoxCommandLine); + this.Name = "ArgumentEditor"; + this.Load += new System.EventHandler(this.ParametersEditor_Load); + this.groupBoxParameters.ResumeLayout(false); + this.groupBoxParameters.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxCommandLine; + private System.Windows.Forms.GroupBox groupBoxParameters; + private System.Windows.Forms.Button buttonAddParam; + private System.Windows.Forms.Label labelAddParam; + private System.Windows.Forms.ListView listParameters; + } // class ArgumentEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs index a03eb367..3dbbb982 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs @@ -1,114 +1,114 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration.Editors -{ - public partial class ArgumentEditor : UserControl - { - public ArgumentEditor() - { - InitializeComponent(); - } // constructor - - public event EventHandler CommandLineChanged; - - public string OpenBraceText - { - get; - set; - } // OpenBraceText - - public string CloseBraceText - { - get; - set; - } // CloseBraceText - - public string ParametersList - { - get; - set; - } // ParametersList - - public string CommandLine - { - get { return textBoxCommandLine.Text; } - set { textBoxCommandLine.Text = value; } - } // CommandLine - - private void ParametersEditor_Load(object sender, EventArgs e) - { - char[] dataSeparator = new char[] { '|' }; - - if (!string.IsNullOrEmpty(ParametersList)) - { - var lines = ParametersList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - - listParameters.BeginUpdate(); - foreach (var line in lines) - { - var data = line.Split(dataSeparator, StringSplitOptions.RemoveEmptyEntries); - if (data.Length > 0) - { - var item = listParameters.Items.Add(data[0]); - if (data.Length > 1) - { - item.SubItems.Add(data[1]); - } // if - } // if - } // foreach - listParameters.EndUpdate(); - - for (int index = 0; index < listParameters.Columns.Count; index++) - { - listParameters.Columns[index].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); - } // for - } // if - - buttonAddParam.Enabled = false; - textBoxCommandLine.SelectionStart = textBoxCommandLine.Text.Length; - textBoxCommandLine.SelectionLength = 0; - } // ParametersEditor_Load - - private void textBoxCommandLine_TextChanged(object sender, EventArgs e) - { - if (CommandLineChanged != null) - { - CommandLineChanged(this, EventArgs.Empty); - } // if - } // textBoxCommandLine_TextChanged - - private void listParameters_SelectedIndexChanged(object sender, EventArgs e) - { - buttonAddParam.Enabled = listParameters.SelectedIndices.Count > 0; - } // listParameters_SelectedIndexChanged - - private void buttonAddParam_Click(object sender, EventArgs e) - { - AddParameter(); - } // buttonAddParam_Click - - private void listParameters_DoubleClick(object sender, EventArgs e) - { - if (listParameters.SelectedIndices.Count > 0) - { - AddParameter(); - } // if - } // listParameters_DoubleClick - - private void AddParameter() - { - var parameter = string.Format("{0}{1}{2}", OpenBraceText, listParameters.SelectedItems[0].Text, CloseBraceText); - textBoxCommandLine.Paste(parameter); - } // AddParameter - } // class ArgumentEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Editors +{ + public partial class ArgumentEditor : UserControl + { + public ArgumentEditor() + { + InitializeComponent(); + } // constructor + + public event EventHandler CommandLineChanged; + + public string OpenBraceText + { + get; + set; + } // OpenBraceText + + public string CloseBraceText + { + get; + set; + } // CloseBraceText + + public string ParametersList + { + get; + set; + } // ParametersList + + public string CommandLine + { + get { return textBoxCommandLine.Text; } + set { textBoxCommandLine.Text = value; } + } // CommandLine + + private void ParametersEditor_Load(object sender, EventArgs e) + { + char[] dataSeparator = new char[] { '|' }; + + if (!string.IsNullOrEmpty(ParametersList)) + { + var lines = ParametersList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + listParameters.BeginUpdate(); + foreach (var line in lines) + { + var data = line.Split(dataSeparator, StringSplitOptions.RemoveEmptyEntries); + if (data.Length > 0) + { + var item = listParameters.Items.Add(data[0]); + if (data.Length > 1) + { + item.SubItems.Add(data[1]); + } // if + } // if + } // foreach + listParameters.EndUpdate(); + + for (int index = 0; index < listParameters.Columns.Count; index++) + { + listParameters.Columns[index].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); + } // for + } // if + + buttonAddParam.Enabled = false; + textBoxCommandLine.SelectionStart = textBoxCommandLine.Text.Length; + textBoxCommandLine.SelectionLength = 0; + } // ParametersEditor_Load + + private void textBoxCommandLine_TextChanged(object sender, EventArgs e) + { + if (CommandLineChanged != null) + { + CommandLineChanged(this, EventArgs.Empty); + } // if + } // textBoxCommandLine_TextChanged + + private void listParameters_SelectedIndexChanged(object sender, EventArgs e) + { + buttonAddParam.Enabled = listParameters.SelectedIndices.Count > 0; + } // listParameters_SelectedIndexChanged + + private void buttonAddParam_Click(object sender, EventArgs e) + { + AddParameter(); + } // buttonAddParam_Click + + private void listParameters_DoubleClick(object sender, EventArgs e) + { + if (listParameters.SelectedIndices.Count > 0) + { + AddParameter(); + } // if + } // listParameters_DoubleClick + + private void AddParameter() + { + var parameter = string.Format("{0}{1}{2}", OpenBraceText, listParameters.SelectedItems[0].Text, CloseBraceText); + textBoxCommandLine.Paste(parameter); + } // AddParameter + } // class ArgumentEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs index b134d40f..4acff48b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs @@ -1,87 +1,87 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Configuration.Editors -{ - partial class ArgumentEditorDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentEditorDialog)); - this.parameterEditor = new Project.IpTv.UiServices.Configuration.Editors.ArgumentEditor(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.buttonOk = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // parameterEditor - // - resources.ApplyResources(this.parameterEditor, "parameterEditor"); - this.parameterEditor.CloseBraceText = null; - this.parameterEditor.CommandLine = ""; - this.parameterEditor.Name = "parameterEditor"; - this.parameterEditor.OpenBraceText = null; - this.parameterEditor.ParametersList = null; - this.parameterEditor.CommandLineChanged += new System.EventHandler(this.parameterEditor_CommandLineChanged); - // - // buttonCancel - // - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - // - // ArgumentEditorDialog - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonOk); - this.Controls.Add(this.parameterEditor); - this.MinimizeBox = false; - this.Name = "ArgumentEditorDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.ResumeLayout(false); - - } - - #endregion - - private ArgumentEditor parameterEditor; - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Button buttonOk; - } // class ArgumentEditorDialog +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Configuration.Editors +{ + partial class ArgumentEditorDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentEditorDialog)); + this.parameterEditor = new IpTviewr.UiServices.Configuration.Editors.ArgumentEditor(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // parameterEditor + // + resources.ApplyResources(this.parameterEditor, "parameterEditor"); + this.parameterEditor.CloseBraceText = null; + this.parameterEditor.CommandLine = ""; + this.parameterEditor.Name = "parameterEditor"; + this.parameterEditor.OpenBraceText = null; + this.parameterEditor.ParametersList = null; + this.parameterEditor.CommandLineChanged += new System.EventHandler(this.parameterEditor_CommandLineChanged); + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // ArgumentEditorDialog + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.parameterEditor); + this.MinimizeBox = false; + this.Name = "ArgumentEditorDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.ResumeLayout(false); + + } + + #endregion + + private ArgumentEditor parameterEditor; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + } // class ArgumentEditorDialog } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs index 18d279cb..2e930583 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs @@ -1,66 +1,66 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration.Editors -{ - public partial class ArgumentEditorDialog : Form - { - public ArgumentEditorDialog() - { - InitializeComponent(); - } // constructor - - public bool IsDataChanged - { - get; - private set; - } // IsDataChanged - - public string Parameter - { - get - { - return parameterEditor.CommandLine; - } - set - { - parameterEditor.CommandLine = value; - buttonOk.Enabled = (parameterEditor.CommandLine != ""); - Text = buttonOk.Enabled ? Properties.SettingsTexts.ParameterEditCaption : Properties.SettingsTexts.ParameterNewCaption; - } - } // Parameter - - public string OpenBraceText - { - get { return parameterEditor.OpenBraceText; } - set { parameterEditor.OpenBraceText = value; } - } // OpenBraceText - - public string CloseBraceText - { - get { return parameterEditor.CloseBraceText; } - set { parameterEditor.CloseBraceText = value; } - } // CloseBraceText - - public string ParametersList - { - get { return parameterEditor.ParametersList; } - set { parameterEditor.ParametersList = value; } - } // ParametersList - - private void parameterEditor_CommandLineChanged(object sender, EventArgs e) - { - buttonOk.Enabled = (parameterEditor.CommandLine != ""); - IsDataChanged = true; - } // parameterEditor_CommandLineChanged - } // class ArgumentEditorDialog -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Editors +{ + public partial class ArgumentEditorDialog : Form + { + public ArgumentEditorDialog() + { + InitializeComponent(); + } // constructor + + public bool IsDataChanged + { + get; + private set; + } // IsDataChanged + + public string Parameter + { + get + { + return parameterEditor.CommandLine; + } + set + { + parameterEditor.CommandLine = value; + buttonOk.Enabled = (parameterEditor.CommandLine != ""); + Text = buttonOk.Enabled ? Properties.SettingsTexts.ParameterEditCaption : Properties.SettingsTexts.ParameterNewCaption; + } + } // Parameter + + public string OpenBraceText + { + get { return parameterEditor.OpenBraceText; } + set { parameterEditor.OpenBraceText = value; } + } // OpenBraceText + + public string CloseBraceText + { + get { return parameterEditor.CloseBraceText; } + set { parameterEditor.CloseBraceText = value; } + } // CloseBraceText + + public string ParametersList + { + get { return parameterEditor.ParametersList; } + set { parameterEditor.ParametersList = value; } + } // ParametersList + + private void parameterEditor_CommandLineChanged(object sender, EventArgs e) + { + buttonOk.Enabled = (parameterEditor.CommandLine != ""); + IsDataChanged = true; + } // parameterEditor_CommandLineChanged + } // class ArgumentEditorDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx index 54fe840e..f59443b0 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx @@ -1,243 +1,243 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Cancel - - - - 6, 13 - - - - NoControl - - - 100, 25 - - - ImageBeforeText - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 7 - - - Top, Bottom, Left, Right - - - Bottom, Right - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - ArgumentEditorDialog - - - NoControl - - - Bottom, Right - - - 8 - - - 12, 12 - - - ImageBeforeText - - - 0 - - - parameterEditor - - - 166, 275 - - - 384, 312 - - - buttonOk - - - CenterParent - - - buttonCancel - - - MiddleRight - - - 0 - - - $this - - - $this - - - MiddleRight - - - 360, 250 - - - 100, 25 - - - 272, 275 - - - 2 - - - &Ok - - - $this - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - (Caption) - - - Project.IpTv.UiServices.Configuration.Editors.ArgumentEditor, UiServices.Configuration, Version=1.5.35.0, Culture=neutral, PublicKeyToken=null - - - True - - - es - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Cancel + + + + 6, 13 + + + + NoControl + + + 100, 25 + + + ImageBeforeText + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 7 + + + Top, Bottom, Left, Right + + + Bottom, Right + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + ArgumentEditorDialog + + + NoControl + + + Bottom, Right + + + 8 + + + 12, 12 + + + ImageBeforeText + + + 0 + + + parameterEditor + + + 166, 275 + + + 384, 312 + + + buttonOk + + + CenterParent + + + buttonCancel + + + MiddleRight + + + 0 + + + $this + + + $this + + + MiddleRight + + + 360, 250 + + + 100, 25 + + + 272, 275 + + + 2 + + + &Ok + + + $this + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + (Caption) + + + IpTviewr.UiServices.Configuration.Editors.ArgumentEditor, UiServices.Configuration, Version=1.5.35.0, Culture=neutral, PublicKeyToken=null + + + True + + + es + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs index 7639e6d7..80103909 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs @@ -1,140 +1,140 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Configuration.Editors -{ - partial class ArgumentsEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentsEditor)); - this.groupBoxData = new System.Windows.Forms.GroupBox(); - this.buttonAdd = new System.Windows.Forms.Button(); - this.buttonMoveDown = new System.Windows.Forms.Button(); - this.buttonMoveUp = new System.Windows.Forms.Button(); - this.buttonRemove = new System.Windows.Forms.Button(); - this.listArguments = new System.Windows.Forms.ListBox(); - this.buttonEdit = new System.Windows.Forms.Button(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.groupBoxData.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxData - // - resources.ApplyResources(this.groupBoxData, "groupBoxData"); - this.groupBoxData.Controls.Add(this.buttonAdd); - this.groupBoxData.Controls.Add(this.buttonMoveDown); - this.groupBoxData.Controls.Add(this.buttonMoveUp); - this.groupBoxData.Controls.Add(this.buttonRemove); - this.groupBoxData.Controls.Add(this.listArguments); - this.groupBoxData.Controls.Add(this.buttonEdit); - this.groupBoxData.Name = "groupBoxData"; - this.groupBoxData.TabStop = false; - // - // buttonAdd - // - resources.ApplyResources(this.buttonAdd, "buttonAdd"); - this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonAdd.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Property_Add_16x16; - this.buttonAdd.Name = "buttonAdd"; - this.toolTip.SetToolTip(this.buttonAdd, resources.GetString("buttonAdd.ToolTip")); - this.buttonAdd.UseVisualStyleBackColor = true; - this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); - // - // buttonMoveDown - // - resources.ApplyResources(this.buttonMoveDown, "buttonMoveDown"); - this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonMoveDown.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_GoNextDown_16x16; - this.buttonMoveDown.Name = "buttonMoveDown"; - this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); - this.buttonMoveDown.UseVisualStyleBackColor = true; - this.buttonMoveDown.Click += new System.EventHandler(this.buttonMoveDown_Click); - // - // buttonMoveUp - // - resources.ApplyResources(this.buttonMoveUp, "buttonMoveUp"); - this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonMoveUp.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_GoPreviousUp_16x16; - this.buttonMoveUp.Name = "buttonMoveUp"; - this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); - this.buttonMoveUp.UseVisualStyleBackColor = true; - this.buttonMoveUp.Click += new System.EventHandler(this.buttonMoveUp_Click); - // - // buttonRemove - // - resources.ApplyResources(this.buttonRemove, "buttonRemove"); - this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonRemove.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Delete_16x16; - this.buttonRemove.Name = "buttonRemove"; - this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); - this.buttonRemove.UseVisualStyleBackColor = true; - this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); - // - // listArguments - // - resources.ApplyResources(this.listArguments, "listArguments"); - this.listArguments.FormattingEnabled = true; - this.listArguments.Name = "listArguments"; - this.listArguments.SelectedIndexChanged += new System.EventHandler(this.listArguments_SelectedIndexChanged); - this.listArguments.DoubleClick += new System.EventHandler(this.listArguments_DoubleClick); - // - // buttonEdit - // - resources.ApplyResources(this.buttonEdit, "buttonEdit"); - this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonEdit.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Property_Edit_16x16; - this.buttonEdit.Name = "buttonEdit"; - this.toolTip.SetToolTip(this.buttonEdit, resources.GetString("buttonEdit.ToolTip")); - this.buttonEdit.UseVisualStyleBackColor = true; - this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); - // - // ArgumentsEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxData); - this.Name = "ArgumentsEditor"; - this.Load += new System.EventHandler(this.ArgumentsEditor_Load); - this.groupBoxData.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxData; - private System.Windows.Forms.Button buttonAdd; - private System.Windows.Forms.Button buttonMoveDown; - private System.Windows.Forms.Button buttonMoveUp; - private System.Windows.Forms.Button buttonRemove; - private System.Windows.Forms.ListBox listArguments; - private System.Windows.Forms.Button buttonEdit; - private System.Windows.Forms.ToolTip toolTip; - } // class ArgumentsEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Configuration.Editors +{ + partial class ArgumentsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentsEditor)); + this.groupBoxData = new System.Windows.Forms.GroupBox(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.buttonMoveDown = new System.Windows.Forms.Button(); + this.buttonMoveUp = new System.Windows.Forms.Button(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.listArguments = new System.Windows.Forms.ListBox(); + this.buttonEdit = new System.Windows.Forms.Button(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + resources.ApplyResources(this.groupBoxData, "groupBoxData"); + this.groupBoxData.Controls.Add(this.buttonAdd); + this.groupBoxData.Controls.Add(this.buttonMoveDown); + this.groupBoxData.Controls.Add(this.buttonMoveUp); + this.groupBoxData.Controls.Add(this.buttonRemove); + this.groupBoxData.Controls.Add(this.listArguments); + this.groupBoxData.Controls.Add(this.buttonEdit); + this.groupBoxData.Name = "groupBoxData"; + this.groupBoxData.TabStop = false; + // + // buttonAdd + // + resources.ApplyResources(this.buttonAdd, "buttonAdd"); + this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonAdd.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Property_Add_16x16; + this.buttonAdd.Name = "buttonAdd"; + this.toolTip.SetToolTip(this.buttonAdd, resources.GetString("buttonAdd.ToolTip")); + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // buttonMoveDown + // + resources.ApplyResources(this.buttonMoveDown, "buttonMoveDown"); + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonMoveDown.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_GoNextDown_16x16; + this.buttonMoveDown.Name = "buttonMoveDown"; + this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); + this.buttonMoveDown.UseVisualStyleBackColor = true; + this.buttonMoveDown.Click += new System.EventHandler(this.buttonMoveDown_Click); + // + // buttonMoveUp + // + resources.ApplyResources(this.buttonMoveUp, "buttonMoveUp"); + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonMoveUp.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_GoPreviousUp_16x16; + this.buttonMoveUp.Name = "buttonMoveUp"; + this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); + this.buttonMoveUp.UseVisualStyleBackColor = true; + this.buttonMoveUp.Click += new System.EventHandler(this.buttonMoveUp_Click); + // + // buttonRemove + // + resources.ApplyResources(this.buttonRemove, "buttonRemove"); + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonRemove.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Delete_16x16; + this.buttonRemove.Name = "buttonRemove"; + this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // listArguments + // + resources.ApplyResources(this.listArguments, "listArguments"); + this.listArguments.FormattingEnabled = true; + this.listArguments.Name = "listArguments"; + this.listArguments.SelectedIndexChanged += new System.EventHandler(this.listArguments_SelectedIndexChanged); + this.listArguments.DoubleClick += new System.EventHandler(this.listArguments_DoubleClick); + // + // buttonEdit + // + resources.ApplyResources(this.buttonEdit, "buttonEdit"); + this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonEdit.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Property_Edit_16x16; + this.buttonEdit.Name = "buttonEdit"; + this.toolTip.SetToolTip(this.buttonEdit, resources.GetString("buttonEdit.ToolTip")); + this.buttonEdit.UseVisualStyleBackColor = true; + this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); + // + // ArgumentsEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxData); + this.Name = "ArgumentsEditor"; + this.Load += new System.EventHandler(this.ArgumentsEditor_Load); + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxData; + private System.Windows.Forms.Button buttonAdd; + private System.Windows.Forms.Button buttonMoveDown; + private System.Windows.Forms.Button buttonMoveUp; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.ListBox listArguments; + private System.Windows.Forms.Button buttonEdit; + private System.Windows.Forms.ToolTip toolTip; + } // class ArgumentsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs index 36893359..294ce50e 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs @@ -1,154 +1,154 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Project.IpTv.UiServices.Common.Controls; -using Project.IpTv.UiServices.Configuration.Settings.TvPlayers; - -namespace Project.IpTv.UiServices.Configuration.Editors -{ - public partial class ArgumentsEditor : UserControl - { - private ListItemsManager ItemsManager; - - public ArgumentsEditor() - { - InitializeComponent(); - } // constructor - - public string OpenBraceText - { - get; - set; - } // OpenBraceText - - public string CloseBraceText - { - get; - set; - } // CloseBraceText - - public string ParametersList - { - get; - set; - } // ParametersList - - public string[] Arguments - { - get - { - var arguments = new string[listArguments.Items.Count]; - for (int index = 0; index < arguments.Length; index++) - { - arguments[index] = listArguments.Items[index].ToString(); - } // for - - return arguments; - } - set - { - if (value != null) - { - listArguments.Items.AddRange(value); - } - else - { - listArguments.Items.Clear(); - } // if-else - } // set - } // Arguments - - public bool IsDataChanged - { - get; - private set; - } // IsDataChanged - - private void ArgumentsEditor_Load(object sender, EventArgs e) - { - ItemsManager = new ListItemsManager(listArguments, buttonRemove, buttonMoveUp, buttonMoveDown); - listArguments.DisplayMember = null; - listArguments.ValueMember = null; - buttonEdit.Enabled = false; - } // ArgumentsEditor_Load - - private void listArguments_SelectedIndexChanged(object sender, EventArgs e) - { - buttonEdit.Enabled = (listArguments.SelectedIndex >= 0); - } // listArguments_SelectedIndexChanged - - private void listArguments_DoubleClick(object sender, EventArgs e) - { - buttonEdit.PerformClick(); - } // listArguments_DoubleClick - - private void buttonEdit_Click(object sender, EventArgs e) - { - using (var dialog = GetArgumentEditorDialog()) - { - dialog.Parameter = listArguments.SelectedItem.ToString(); - if (dialog.ShowDialog(this) != DialogResult.OK) - { - return; - } // if - - var index = listArguments.SelectedIndex; - listArguments.Items[index] = dialog.Parameter; - IsDataChanged = true; - } // using - } // buttonEdit_Click - - private void buttonRemove_Click(object sender, EventArgs e) - { - ItemsManager.RemoveSelection(); - IsDataChanged = true; - } // buttonRemove_Click - - private void buttonAdd_Click(object sender, EventArgs e) - { - using (var dialog = GetArgumentEditorDialog()) - { - dialog.Parameter = null; - if (dialog.ShowDialog(this) != DialogResult.OK) - { - return; - } // if - - listArguments.SelectedIndex = listArguments.Items.Add(dialog.Parameter); - IsDataChanged = true; - } // using - } // buttonAdd_Click - - private void buttonMoveUp_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionUp(); - IsDataChanged = true; - } // buttonMoveUp_Click - - private void buttonMoveDown_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionDown(); - IsDataChanged = true; - } // buttonMoveDown_Click - - private ArgumentEditorDialog GetArgumentEditorDialog() - { - var dialog = new ArgumentEditorDialog() - { - OpenBraceText = this.OpenBraceText, - CloseBraceText = this.CloseBraceText, - ParametersList = this.ParametersList - }; - - return dialog; - } // GetArgumentEditorDialog - } // class ArgumentsEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Controls; +using IpTviewr.UiServices.Configuration.Settings.TvPlayers; + +namespace IpTviewr.UiServices.Configuration.Editors +{ + public partial class ArgumentsEditor : UserControl + { + private ListItemsManager ItemsManager; + + public ArgumentsEditor() + { + InitializeComponent(); + } // constructor + + public string OpenBraceText + { + get; + set; + } // OpenBraceText + + public string CloseBraceText + { + get; + set; + } // CloseBraceText + + public string ParametersList + { + get; + set; + } // ParametersList + + public string[] Arguments + { + get + { + var arguments = new string[listArguments.Items.Count]; + for (int index = 0; index < arguments.Length; index++) + { + arguments[index] = listArguments.Items[index].ToString(); + } // for + + return arguments; + } + set + { + if (value != null) + { + listArguments.Items.AddRange(value); + } + else + { + listArguments.Items.Clear(); + } // if-else + } // set + } // Arguments + + public bool IsDataChanged + { + get; + private set; + } // IsDataChanged + + private void ArgumentsEditor_Load(object sender, EventArgs e) + { + ItemsManager = new ListItemsManager(listArguments, buttonRemove, buttonMoveUp, buttonMoveDown); + listArguments.DisplayMember = null; + listArguments.ValueMember = null; + buttonEdit.Enabled = false; + } // ArgumentsEditor_Load + + private void listArguments_SelectedIndexChanged(object sender, EventArgs e) + { + buttonEdit.Enabled = (listArguments.SelectedIndex >= 0); + } // listArguments_SelectedIndexChanged + + private void listArguments_DoubleClick(object sender, EventArgs e) + { + buttonEdit.PerformClick(); + } // listArguments_DoubleClick + + private void buttonEdit_Click(object sender, EventArgs e) + { + using (var dialog = GetArgumentEditorDialog()) + { + dialog.Parameter = listArguments.SelectedItem.ToString(); + if (dialog.ShowDialog(this) != DialogResult.OK) + { + return; + } // if + + var index = listArguments.SelectedIndex; + listArguments.Items[index] = dialog.Parameter; + IsDataChanged = true; + } // using + } // buttonEdit_Click + + private void buttonRemove_Click(object sender, EventArgs e) + { + ItemsManager.RemoveSelection(); + IsDataChanged = true; + } // buttonRemove_Click + + private void buttonAdd_Click(object sender, EventArgs e) + { + using (var dialog = GetArgumentEditorDialog()) + { + dialog.Parameter = null; + if (dialog.ShowDialog(this) != DialogResult.OK) + { + return; + } // if + + listArguments.SelectedIndex = listArguments.Items.Add(dialog.Parameter); + IsDataChanged = true; + } // using + } // buttonAdd_Click + + private void buttonMoveUp_Click(object sender, EventArgs e) + { + ItemsManager.MoveSelectionUp(); + IsDataChanged = true; + } // buttonMoveUp_Click + + private void buttonMoveDown_Click(object sender, EventArgs e) + { + ItemsManager.MoveSelectionDown(); + IsDataChanged = true; + } // buttonMoveDown_Click + + private ArgumentEditorDialog GetArgumentEditorDialog() + { + var dialog = new ArgumentEditorDialog() + { + OpenBraceText = this.OpenBraceText, + CloseBraceText = this.CloseBraceText, + ParametersList = this.ParametersList + }; + + return dialog; + } // GetArgumentEditorDialog + } // class ArgumentsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs index 07050c51..84354370 100644 --- a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs +++ b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs @@ -1,17 +1,17 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - // interface for marking configuration items - public interface IConfigurationItem - { - bool SupportsInitialization { get; } - InitializationResult Initializate(); - - bool SupportsValidation { get; } - string Validate(string ownerTag); - } // interface IConfigurationItem -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + // interface for marking configuration items + public interface IConfigurationItem + { + bool SupportsInitialization { get; } + InitializationResult Initializate(); + + bool SupportsValidation { get; } + string Validate(string ownerTag); + } // interface IConfigurationItem +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs index d5e94cc4..5d24f4e5 100644 --- a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs @@ -1,38 +1,38 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration -{ - public interface IConfigurationItemEditor - { - UserControl UserInterfaceItem - { - get; - } // UserInterfaceItem - - bool SupportsWinFormsValidation - { - get; - } // SupportsWinFormsValidation - - bool IsDataChanged - { - get; - } // IsDataChanged - - bool IsAppRestartNeeded - { - get; - } // IsAppRestartNeeded - - bool Validate(); - IConfigurationItem GetNewData(); - - void EditorClosing(out bool cancelClose); - void EditorClosed(bool userCancel); - } // interface IConfigurationFormItem -} // namespace +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration +{ + public interface IConfigurationItemEditor + { + UserControl UserInterfaceItem + { + get; + } // UserInterfaceItem + + bool SupportsWinFormsValidation + { + get; + } // SupportsWinFormsValidation + + bool IsDataChanged + { + get; + } // IsDataChanged + + bool IsAppRestartNeeded + { + get; + } // IsAppRestartNeeded + + bool Validate(); + IConfigurationItem GetNewData(); + + void EditorClosing(out bool cancelClose); + void EditorClosed(bool userCancel); + } // interface IConfigurationFormItem +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs index f4ffd201..596679e0 100644 --- a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs +++ b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs @@ -1,56 +1,56 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public interface IConfigurationItemRegistration - { - Guid Id - { - get; - } // Id - - Type ItemType - { - get; - } // ItemType - - int DirectIndex - { - get; - set; - } // DirectIndex - - IConfigurationItem CreateDefault(); - - bool HasEditor - { - get; - } // HasEditor - - string EditorDisplayName - { - get; - } // EditorDisplayName - - string EditorDescription - { - get; - } // EditorDescription - - Image EditorImage - { - get; - } // EditorImage - - int EditorPriority - { - get; - } // EditorPriority - - IConfigurationItemEditor CreateEditor(IConfigurationItem data); - } // interface IConfigurationItemRegistration -} // namespace +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public interface IConfigurationItemRegistration + { + Guid Id + { + get; + } // Id + + Type ItemType + { + get; + } // ItemType + + int DirectIndex + { + get; + set; + } // DirectIndex + + IConfigurationItem CreateDefault(); + + bool HasEditor + { + get; + } // HasEditor + + string EditorDisplayName + { + get; + } // EditorDisplayName + + string EditorDescription + { + get; + } // EditorDescription + + Image EditorImage + { + get; + } // EditorImage + + int EditorPriority + { + get; + } // EditorPriority + + IConfigurationItemEditor CreateEditor(IConfigurationItem data); + } // interface IConfigurationItemRegistration +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs b/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs index 449259ed..cbb82d26 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs +++ b/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs @@ -1,18 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public interface ILocalizedObject - { - string CultureName - { - get; - } // CultureName - } // ILocalizedObject -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public interface ILocalizedObject + { + string CultureName + { + get; + } // CultureName + } // ILocalizedObject +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs b/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs index 3bd8c862..70e109f9 100644 --- a/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs +++ b/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs @@ -1,67 +1,67 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public class InitializationResult - { - private static InitializationResult OkSingleton = new InitializationResult() { IsOk = true }; - - /// - /// Gets an with IsOk set to and all remaining fields set to - /// - public static InitializationResult Ok - { - get { return OkSingleton; } - } // Ok - - public bool IsOk - { - get; - set; - } // IsOk - - public bool IsError - { - get { return !IsOk; } - } // IsError - - public string Caption - { - get; - set; - } // Caption - - public string Message - { - get; - set; - } // Message - - public Exception InnerException - { - get; - set; - } // InnerException - - public InitializationResult() - { - // no op - } // constructor - - public InitializationResult(string message) - { - Message = message; - } // InitializationResult - - public InitializationResult(Exception exception) - { - InnerException = exception; - } // InitializationResult - } // InitializationResult -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public class InitializationResult + { + private static InitializationResult OkSingleton = new InitializationResult() { IsOk = true }; + + /// + /// Gets an with IsOk set to and all remaining fields set to + /// + public static InitializationResult Ok + { + get { return OkSingleton; } + } // Ok + + public bool IsOk + { + get; + set; + } // IsOk + + public bool IsError + { + get { return !IsOk; } + } // IsError + + public string Caption + { + get; + set; + } // Caption + + public string Message + { + get; + set; + } // Message + + public Exception InnerException + { + get; + set; + } // InnerException + + public InitializationResult() + { + // no op + } // constructor + + public InitializationResult(string message) + { + Message = message; + } // InitializationResult + + public InitializationResult(Exception exception) + { + InnerException = exception; + } // InitializationResult + } // InitializationResult +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs b/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs index 006b3e6c..ff7451b1 100644 --- a/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs +++ b/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs @@ -1,47 +1,47 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration -{ - public abstract class LocalizedObject : ILocalizedObject - { - private string fieldCultureName; - - [XmlAttribute("culture")] - public string CultureName - { - get - { - return fieldCultureName; - } // get - set - { - fieldCultureName = (string.IsNullOrEmpty(value)) ? "" : value.ToLowerInvariant(); - } // - } // CultureName - - public static T FindMatchingCultureObject(IEnumerable collection, IEnumerable uiCultures) where T : ILocalizedObject - { - ILocalizedObject matching; - - matching = null; - var localizedCollection = (IEnumerable)collection; - foreach (var cultureName in uiCultures) - { - var q = from localized in localizedCollection - where localized.CultureName == cultureName - select localized; - matching = q.FirstOrDefault(); - if (matching != null) break; - } // foreach cultureName - - return (T)matching; - } // FindMatchingCultureObject - } // abstract class LocalizedObject -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration +{ + public abstract class LocalizedObject : ILocalizedObject + { + private string fieldCultureName; + + [XmlAttribute("culture")] + public string CultureName + { + get + { + return fieldCultureName; + } // get + set + { + fieldCultureName = (string.IsNullOrEmpty(value)) ? "" : value.ToLowerInvariant(); + } // + } // CultureName + + public static T FindMatchingCultureObject(IEnumerable collection, IEnumerable uiCultures) where T : ILocalizedObject + { + ILocalizedObject matching; + + matching = null; + var localizedCollection = (IEnumerable)collection; + foreach (var cultureName in uiCultures) + { + var q = from localized in localizedCollection + where localized.CultureName == cultureName + select localized; + matching = q.FirstOrDefault(); + if (matching != null) break; + } // foreach cultureName + + return (T)matching; + } // FindMatchingCultureObject + } // abstract class LocalizedObject +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs index d94510bf..1b7e14a8 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs @@ -1,202 +1,202 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.IO; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - public abstract class BaseLogo - { - public static Size LogoSizeToSize(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: return new Size(32, 32); - case LogoSize.Size48: return new Size(48, 48); - case LogoSize.Size64: return new Size(64,64); - case LogoSize.Size96: return new Size(96,96); - case LogoSize.Size128: return new Size(128, 128); - case LogoSize.Size256: return new Size(256, 256); - default: - throw new IndexOutOfRangeException(); - } // switch - } // LogoSizeToSize - - public static string LogoSizeToString(LogoSize logoSize, bool withSize) - { - string text; - - switch (logoSize) - { - case LogoSize.Size32: text = Properties.Texts.LogoSize32; break; - case LogoSize.Size48: text = Properties.Texts.LogoSize48; break; - case LogoSize.Size64: text = Properties.Texts.LogoSize64; break; - case LogoSize.Size96: text = Properties.Texts.LogoSize96; break; - case LogoSize.Size128: text = Properties.Texts.LogoSize128; break; - case LogoSize.Size256: text = Properties.Texts.LogoSize256; break; - default: - throw new IndexOutOfRangeException(); - } // switch - - if (withSize) - { - var size = LogoSizeToSize(logoSize); - return string.Format(Properties.Texts.LogoSizeWithSizeFormat, text, size.Width, size.Height); - } - else - { - return text; - } // if-else - } // LogoSizeToString - - public static List> GetListLogoSizes(bool withSize) - { - var result = new List>(6); - result.Add(new KeyValuePair(LogoSize.Size32, LogoSizeToString(LogoSize.Size32, withSize))); - result.Add(new KeyValuePair(LogoSize.Size48, LogoSizeToString(LogoSize.Size48, withSize))); - result.Add(new KeyValuePair(LogoSize.Size64, LogoSizeToString(LogoSize.Size64, withSize))); - result.Add(new KeyValuePair(LogoSize.Size96, LogoSizeToString(LogoSize.Size96, withSize))); - result.Add(new KeyValuePair(LogoSize.Size128, LogoSizeToString(LogoSize.Size128, withSize))); - result.Add(new KeyValuePair(LogoSize.Size256, LogoSizeToString(LogoSize.Size256, withSize))); - - return result; - } // GetListLogoSizes - - public string FilePrefix - { - get; - protected set; - } // FilePrefix - - public string PartialPath - { - get; - protected set; - } // PartialPath - - public string BasePath - { - get; - protected set; - } // BasePath - - public string Key - { - get; - protected set; - } // Key - - public Image GetImage(LogoSize logoSize, bool noExceptions) - { - if (!IsSizeAvailable(logoSize)) - { - throw new NotSupportedException(); - } // if - - var path = Path.Combine(BasePath, PartialPath); - var filename = Path.Combine(path, GetFilename(logoSize, ".png")); - try - { - return Image.FromFile(filename); - } - catch (FileNotFoundException ex) - { - if (noExceptions == false) - { - throw new FileNotFoundException(ImageNotFoundExceptionText, ex); - } // if - } - catch (OutOfMemoryException ex) - { - if (noExceptions == false) - { - throw new InvalidOperationException(string.Format(ImageLoadExceptionText, filename), ex); - } - } // try-catch - catch - { - if (noExceptions == false) throw; - } // catch - - return GetBrokenFile(logoSize); - } // GetImage - - public string GetLogoIconPath() - { - var path = Path.Combine(BasePath, PartialPath); - var filename = Path.Combine(path, FilePrefix + ".ico"); - - return File.Exists(filename) ? filename : null; - } // GetLogoIconPath - - public static Image GetBrokenFile(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: return Properties.Resources.BrokenFile_32; - case LogoSize.Size48: return Properties.Resources.BrokenFile_48; - case LogoSize.Size64: return Properties.Resources.BrokenFile_64; - case LogoSize.Size96: return Properties.Resources.BrokenFile_96; - case LogoSize.Size128: return Properties.Resources.BrokenFile_128; - case LogoSize.Size256: return Properties.Resources.BrokenFile_256; - } // switch - - return null; - } // GetBrokenFile - - protected virtual bool IsSizeAvailable(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: - case LogoSize.Size48: - case LogoSize.Size64: - case LogoSize.Size96: - case LogoSize.Size128: - case LogoSize.Size256: - return true; - default: - return false; - } // switch - } // IsSizeAvailable - - protected virtual string GetSizeSufix(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: return "@32"; - case LogoSize.Size48: return "@48"; - case LogoSize.Size64: return "@64"; - case LogoSize.Size96: return "@96"; - case LogoSize.Size128: return "@128"; - case LogoSize.Size256: return "@256"; - default: - throw new ArgumentOutOfRangeException("LogoSize logoSize"); - } // switch - } // GetSizeSufix - - protected string GetFilename(LogoSize size, string extension) - { - var buffer = new StringBuilder(); - buffer.Append(FilePrefix); - buffer.Append(GetSizeSufix(size)); - buffer.Append(extension); - return buffer.ToString(); - } // GetFilename - - protected abstract string ImageNotFoundExceptionText - { - get; - } // ImageNotFoundExceptionText - - protected abstract string ImageLoadExceptionText - { - get; - } // ImageLoadExceptionText - } // class BaseLogo -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.IO; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public abstract class BaseLogo + { + public static Size LogoSizeToSize(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: return new Size(32, 32); + case LogoSize.Size48: return new Size(48, 48); + case LogoSize.Size64: return new Size(64,64); + case LogoSize.Size96: return new Size(96,96); + case LogoSize.Size128: return new Size(128, 128); + case LogoSize.Size256: return new Size(256, 256); + default: + throw new IndexOutOfRangeException(); + } // switch + } // LogoSizeToSize + + public static string LogoSizeToString(LogoSize logoSize, bool withSize) + { + string text; + + switch (logoSize) + { + case LogoSize.Size32: text = Properties.Texts.LogoSize32; break; + case LogoSize.Size48: text = Properties.Texts.LogoSize48; break; + case LogoSize.Size64: text = Properties.Texts.LogoSize64; break; + case LogoSize.Size96: text = Properties.Texts.LogoSize96; break; + case LogoSize.Size128: text = Properties.Texts.LogoSize128; break; + case LogoSize.Size256: text = Properties.Texts.LogoSize256; break; + default: + throw new IndexOutOfRangeException(); + } // switch + + if (withSize) + { + var size = LogoSizeToSize(logoSize); + return string.Format(Properties.Texts.LogoSizeWithSizeFormat, text, size.Width, size.Height); + } + else + { + return text; + } // if-else + } // LogoSizeToString + + public static List> GetListLogoSizes(bool withSize) + { + var result = new List>(6); + result.Add(new KeyValuePair(LogoSize.Size32, LogoSizeToString(LogoSize.Size32, withSize))); + result.Add(new KeyValuePair(LogoSize.Size48, LogoSizeToString(LogoSize.Size48, withSize))); + result.Add(new KeyValuePair(LogoSize.Size64, LogoSizeToString(LogoSize.Size64, withSize))); + result.Add(new KeyValuePair(LogoSize.Size96, LogoSizeToString(LogoSize.Size96, withSize))); + result.Add(new KeyValuePair(LogoSize.Size128, LogoSizeToString(LogoSize.Size128, withSize))); + result.Add(new KeyValuePair(LogoSize.Size256, LogoSizeToString(LogoSize.Size256, withSize))); + + return result; + } // GetListLogoSizes + + public string FilePrefix + { + get; + protected set; + } // FilePrefix + + public string PartialPath + { + get; + protected set; + } // PartialPath + + public string BasePath + { + get; + protected set; + } // BasePath + + public string Key + { + get; + protected set; + } // Key + + public Image GetImage(LogoSize logoSize, bool noExceptions) + { + if (!IsSizeAvailable(logoSize)) + { + throw new NotSupportedException(); + } // if + + var path = Path.Combine(BasePath, PartialPath); + var filename = Path.Combine(path, GetFilename(logoSize, ".png")); + try + { + return Image.FromFile(filename); + } + catch (FileNotFoundException ex) + { + if (noExceptions == false) + { + throw new FileNotFoundException(ImageNotFoundExceptionText, ex); + } // if + } + catch (OutOfMemoryException ex) + { + if (noExceptions == false) + { + throw new InvalidOperationException(string.Format(ImageLoadExceptionText, filename), ex); + } + } // try-catch + catch + { + if (noExceptions == false) throw; + } // catch + + return GetBrokenFile(logoSize); + } // GetImage + + public string GetLogoIconPath() + { + var path = Path.Combine(BasePath, PartialPath); + var filename = Path.Combine(path, FilePrefix + ".ico"); + + return File.Exists(filename) ? filename : null; + } // GetLogoIconPath + + public static Image GetBrokenFile(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: return Properties.Resources.BrokenFile_32; + case LogoSize.Size48: return Properties.Resources.BrokenFile_48; + case LogoSize.Size64: return Properties.Resources.BrokenFile_64; + case LogoSize.Size96: return Properties.Resources.BrokenFile_96; + case LogoSize.Size128: return Properties.Resources.BrokenFile_128; + case LogoSize.Size256: return Properties.Resources.BrokenFile_256; + } // switch + + return null; + } // GetBrokenFile + + protected virtual bool IsSizeAvailable(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: + case LogoSize.Size48: + case LogoSize.Size64: + case LogoSize.Size96: + case LogoSize.Size128: + case LogoSize.Size256: + return true; + default: + return false; + } // switch + } // IsSizeAvailable + + protected virtual string GetSizeSufix(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: return "@32"; + case LogoSize.Size48: return "@48"; + case LogoSize.Size64: return "@64"; + case LogoSize.Size96: return "@96"; + case LogoSize.Size128: return "@128"; + case LogoSize.Size256: return "@256"; + default: + throw new ArgumentOutOfRangeException("LogoSize logoSize"); + } // switch + } // GetSizeSufix + + protected string GetFilename(LogoSize size, string extension) + { + var buffer = new StringBuilder(); + buffer.Append(FilePrefix); + buffer.Append(GetSizeSufix(size)); + buffer.Append(extension); + return buffer.ToString(); + } // GetFilename + + protected abstract string ImageNotFoundExceptionText + { + get; + } // ImageNotFoundExceptionText + + protected abstract string ImageLoadExceptionText + { + get; + } // ImageLoadExceptionText + } // class BaseLogo +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs index 53978f3f..fe8c9da9 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs @@ -1,32 +1,32 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - public enum LogoSize - { - [XmlEnum(Name="32x32")] - Size32, - - [XmlEnum(Name = "48x48")] - Size48, - - [XmlEnum(Name = "64x64")] - Size64, - - [XmlEnum(Name = "96x96")] - Size96, - - [XmlEnum(Name = "128x128")] - Size128, - - [XmlEnum(Name = "256x256")] - Size256, - } // enum LogoSize -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public enum LogoSize + { + [XmlEnum(Name="32x32")] + Size32, + + [XmlEnum(Name = "48x48")] + Size48, + + [XmlEnum(Name = "64x64")] + Size64, + + [XmlEnum(Name = "96x96")] + Size96, + + [XmlEnum(Name = "128x128")] + Size128, + + [XmlEnum(Name = "256x256")] + Size256, + } // enum LogoSize +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs index 0eec7934..ba250eb5 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs @@ -1,31 +1,31 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - public class ProviderLogo : BaseLogo - { - public ProviderLogo(string basePath, string partialPath, string filePrefix, string key) - { - BasePath = basePath; - PartialPath = partialPath; - FilePrefix = filePrefix; - Key = key; - } // constructor - - protected override string ImageNotFoundExceptionText - { - get { return Properties.Texts.ExceptionLogosProviderImageNotFound; } - } // ImageNotFoundExceptionText - - protected override string ImageLoadExceptionText - { - get { return Properties.Texts.ExceptionLogosProviderImageLoadError; } - } // ImageLoadExceptionText - } // class ProviderLogo -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public class ProviderLogo : BaseLogo + { + public ProviderLogo(string basePath, string partialPath, string filePrefix, string key) + { + BasePath = basePath; + PartialPath = partialPath; + FilePrefix = filePrefix; + Key = key; + } // constructor + + protected override string ImageNotFoundExceptionText + { + get { return Properties.Texts.ExceptionLogosProviderImageNotFound; } + } // ImageNotFoundExceptionText + + protected override string ImageLoadExceptionText + { + get { return Properties.Texts.ExceptionLogosProviderImageLoadError; } + } // ImageLoadExceptionText + } // class ProviderLogo +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs index 401ed3b6..9223f09c 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs @@ -1,84 +1,84 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Schema2014.Logos; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - public class ProviderLogoMappings - { - private IDictionary ProviderMappings; - - public string BasePathLogos - { - get; - private set; - } // BasePathLogos - - public ProviderLogoMappings(ProviderMappingsXml providerMappings) - { - Init(providerMappings); - } // constructor - - public ProviderLogoMappings(string providerMappingsXmlFilename) - { - var providerMappings = LogosCommon.ParseProviderMappingsXml(providerMappingsXmlFilename); - - Init(providerMappings); - } // constructor - - public static IDictionary BuildMapping(ProviderMappingsXml providerMappings) - { - Dictionary mappings; - int count; - - var q = from package in providerMappings.Packages - from mp in package.Mappings - select mp; - count = q.Count(); - - mappings = new Dictionary(count); - foreach (var mp in q) - { - try - { - mappings.Add(mp.DomainName.ToLowerInvariant(), mp.LogoFile); - } - catch (ArgumentException ex) // duplicated key (domain name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosProviderMappingsDuplicatedDomain, mp.DomainName), ex); - } // try-catch - } // foreach - - return mappings; - } // BuildMapping - - public ProviderLogo Get(string providerDomainName) - { - string logoFile; - - if (providerDomainName == null) providerDomainName = Properties.InvariantTexts.DefaultDomainNameProviderLogo; - providerDomainName = providerDomainName.ToLowerInvariant(); - - if (ProviderMappings.TryGetValue(providerDomainName, out logoFile)) - { - return new ProviderLogo(BasePathLogos, string.Empty, logoFile, providerDomainName); - } // if - - // get default logo - return Get(null); - } // Get - - private void Init(ProviderMappingsXml providerMappings) - { - ProviderMappings = BuildMapping(providerMappings); - BasePathLogos = providerMappings.BasePath; - } // Init - } // class ProviderLogoMappings -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Schema2014.Logos; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public class ProviderLogoMappings + { + private IDictionary ProviderMappings; + + public string BasePathLogos + { + get; + private set; + } // BasePathLogos + + public ProviderLogoMappings(ProviderMappingsXml providerMappings) + { + Init(providerMappings); + } // constructor + + public ProviderLogoMappings(string providerMappingsXmlFilename) + { + var providerMappings = LogosCommon.ParseProviderMappingsXml(providerMappingsXmlFilename); + + Init(providerMappings); + } // constructor + + public static IDictionary BuildMapping(ProviderMappingsXml providerMappings) + { + Dictionary mappings; + int count; + + var q = from package in providerMappings.Packages + from mp in package.Mappings + select mp; + count = q.Count(); + + mappings = new Dictionary(count); + foreach (var mp in q) + { + try + { + mappings.Add(mp.DomainName.ToLowerInvariant(), mp.LogoFile); + } + catch (ArgumentException ex) // duplicated key (domain name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosProviderMappingsDuplicatedDomain, mp.DomainName), ex); + } // try-catch + } // foreach + + return mappings; + } // BuildMapping + + public ProviderLogo Get(string providerDomainName) + { + string logoFile; + + if (providerDomainName == null) providerDomainName = Properties.InvariantTexts.DefaultDomainNameProviderLogo; + providerDomainName = providerDomainName.ToLowerInvariant(); + + if (ProviderMappings.TryGetValue(providerDomainName, out logoFile)) + { + return new ProviderLogo(BasePathLogos, string.Empty, logoFile, providerDomainName); + } // if + + // get default logo + return Get(null); + } // Get + + private void Init(ProviderMappingsXml providerMappings) + { + ProviderMappings = BuildMapping(providerMappings); + BasePathLogos = providerMappings.BasePath; + } // Init + } // class ProviderLogoMappings +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs index f9693158..38413a3b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs @@ -1,31 +1,31 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - public class ServiceLogo : BaseLogo - { - public ServiceLogo(string basePath, string partialPath, string filePrefix, string key) - { - BasePath = basePath; - PartialPath = partialPath; - FilePrefix = filePrefix; - Key = key; - } // constructor - - protected override string ImageNotFoundExceptionText - { - get { return Properties.Texts.ExceptionLogosServiceImageNotFound; } - } // ImageNotFoundExceptionText - - protected override string ImageLoadExceptionText - { - get { return Properties.Texts.ExceptionLogosServiceImageLoadError; } - } // ImageLoadExceptionText - } // class ServiceLogo -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public class ServiceLogo : BaseLogo + { + public ServiceLogo(string basePath, string partialPath, string filePrefix, string key) + { + BasePath = basePath; + PartialPath = partialPath; + FilePrefix = filePrefix; + Key = key; + } // constructor + + protected override string ImageNotFoundExceptionText + { + get { return Properties.Texts.ExceptionLogosServiceImageNotFound; } + } // ImageNotFoundExceptionText + + protected override string ImageLoadExceptionText + { + get { return Properties.Texts.ExceptionLogosServiceImageLoadError; } + } // ImageLoadExceptionText + } // class ServiceLogo +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs index 2876ec7d..bf26ad07 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs @@ -1,28 +1,28 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - partial class ServiceLogoMappings - { - public class ReplacementDomain - { - public bool IsMandatory - { - get; - internal set; - } // IsMandatory - - public string Replacement - { - get; - internal set; - } // Replacement - } // ReplacementDomain - } // partial class ServiceLogoMappings -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + partial class ServiceLogoMappings + { + public class ReplacementDomain + { + public bool IsMandatory + { + get; + internal set; + } // IsMandatory + + public string Replacement + { + get; + internal set; + } // Replacement + } // ReplacementDomain + } // partial class ServiceLogoMappings +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs index e56fb232..da36ade2 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs @@ -1,28 +1,28 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - partial class ServiceLogoMappings - { - public class ServiceDomainMapping - { - public string DomainRedirection - { - get; - internal set; - } // DomainRedirection - - public IDictionary Logos - { - get; - internal set; - } // Logos - } // class ServiceDomainMapping - } // partial class -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + partial class ServiceLogoMappings + { + public class ServiceDomainMapping + { + public string DomainRedirection + { + get; + internal set; + } // DomainRedirection + + public IDictionary Logos + { + get; + internal set; + } // Logos + } // class ServiceDomainMapping + } // partial class +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs index d3e57014..1758c04c 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs @@ -1,236 +1,236 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Schema2014.Logos; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Logos -{ - public partial class ServiceLogoMappings - { - private IDictionary DomainMappings; - private Dictionary ServiceMappings; - - public string BasePathLogos - { - get; - private set; - } // BasePathServiceLogos - - public ServiceLogoMappings(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings) - { - Init(domainMappings, serviceMappings); - } // constructor - - public ServiceLogoMappings(string domainMappingsXmlFilename, string serviceMappingsXmlFile) - { - var domainMappings = LogosCommon.ParseDomainMappingsXml(domainMappingsXmlFilename); - var serviceMappings = LogosCommon.ParseServiceMappingsXml(serviceMappingsXmlFile); - - Init(domainMappings, serviceMappings); - } // constructor - - public static Dictionary BuildMapping(DomainMappingsXml mapping) - { - Dictionary mappings; - int count; - - var q = from package in mapping.Packages - from mp in package.Mappings - select mp; - count = q.Count(); - - mappings = new Dictionary(count); - foreach (var mp in q) - { - try - { - mappings.Add(mp.DomainName.ToLowerInvariant(), new ReplacementDomain - { - IsMandatory = mp.Mandatory, - Replacement = mp.ReplacementDomain.ToLowerInvariant(), - }); - } - catch (ArgumentException ex) // duplicated key (domain name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosDomainMappingsDuplicatedDomain, mp.DomainName), ex); - } // try-catch - } // foreach - - return mappings; - } // BuildMapping - - public static Dictionary BuildMapping(ServiceMappingsXml mapping) - { - Dictionary mappings; - ServiceDomainMapping domainMappings; - int count; - - var qDomain = from package in mapping.Packages - from domain in package.Domains - select domain; - count = qDomain.Count(); - - mappings = new Dictionary(count); - foreach (var domain in qDomain) - { - domainMappings = new ServiceDomainMapping() - { - DomainRedirection = domain.RedirectDomainName, - Logos = new Dictionary(domain.Mappings.Length), - }; - try - { - mappings.Add(domain.DomainName.ToLowerInvariant(), domainMappings); - } - catch (ArgumentException ex) // duplicated key (domain name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedDomain, - domain.DomainName), ex); - } // try-catch - - foreach (var mp in domain.Mappings) - { - try - { - domainMappings.Logos.Add(mp.Name.ToLowerInvariant(), mp.Logo); - } - catch (ArgumentException ex) // duplicated key (domain service name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedService, - mp.Name, domain.DomainName), ex); - } // try-catch - } // foreach mp - } // foreach domain - - return mappings; - } // BuildMapping - - public ServiceLogo Get(string serviceDomainName, string providerDomain, string serviceName, string serviceTypeId) - { - ReplacementDomain replacement; - ServiceDomainMapping serviceLogos; - string logoFile; - string partialPath; - bool firstReplacementChance; - - if (providerDomain == null) throw new ArgumentNullException("providerDomain"); - if (serviceDomainName == null) serviceDomainName = providerDomain; - if (serviceName == null) serviceName = Properties.InvariantTexts.ServiceNameAny; - - serviceDomainName = serviceDomainName.ToLowerInvariant(); - serviceName = serviceName.ToLowerInvariant(); - - firstReplacementChance = true; - while (serviceDomainName != null) - { - // replace domain? - if (DomainMappings.TryGetValue(serviceDomainName, out replacement)) - { - if ((replacement.IsMandatory) || (!firstReplacementChance)) - { - serviceDomainName = replacement.Replacement; - firstReplacementChance = true; - continue; - } // if - } // if - if (!firstReplacementChance) - { - serviceDomainName = GetParentDomain(serviceDomainName); - continue; - } // if - - // locate service logo for given domain - if (!ServiceMappings.TryGetValue(serviceDomainName, out serviceLogos)) - { - firstReplacementChance = false; - continue; - } // if - - if (!serviceLogos.Logos.TryGetValue(serviceName, out logoFile)) - { - if (!serviceLogos.Logos.TryGetValue(Properties.InvariantTexts.ServiceNameAny, out logoFile)) - { - firstReplacementChance = false; - continue; - } // if - } // if - - partialPath = GetFolderForDomain((serviceLogos.DomainRedirection == null) ? serviceDomainName : serviceLogos.DomainRedirection); - - return GetLogo(partialPath, logoFile); - } // while - - // avoid infinite recursion if default domain name contains no logos or doesn't exists - if (providerDomain == Properties.InvariantTexts.DefaultDomainNameServiceLogo) - { - return GetLogo("unknown", "unknown"); - } // if - - // obtain default logo - return Get(null, Properties.InvariantTexts.DefaultDomainNameServiceLogo, serviceTypeId, serviceTypeId); - } // Get - - ServiceLogo GetLogo(string partialPath, string logoFile) - { - return new ServiceLogo(BasePathLogos, partialPath, logoFile, - string.Format(Properties.InvariantTexts.FormatServiceLogoKey, logoFile, partialPath)); - } // GetLogo - - public ServiceLogo FromServiceKey(string serviceKey) - { - int pos; - string service, domain; - - pos = serviceKey.IndexOf('@'); - if (pos < 1) throw new ArgumentException(); - if ((pos + 1) == serviceKey.Length) throw new ArgumentException(); - - service = serviceKey.Substring(0, pos); - domain = serviceKey.Substring(pos + 1); - - return Get(null, domain, service, null); - } // FromServiceKey - - private static string GetParentDomain(string domainName) - { - var parts = domainName.Split('.'); - if (parts.Length <= 2) return null; - - return string.Join(".", parts, 1, parts.Length - 1); - } // GetParentDomain - - private static string GetFolderForDomain(string domainName) - { - var parts = domainName.Split('.'); - - if (parts.Length <= 2) return domainName; - - var builder = new StringBuilder(); - builder.Append(parts[parts.Length - 2]); - builder.Append('.'); - builder.Append(parts[parts.Length - 1]); - for (int i = parts.Length - 3; i >= 0; i--) - { - builder.Append(Path.DirectorySeparatorChar); - builder.Append(parts[i]); - } // for - - return builder.ToString(); - } // GetFolderForDomain - - private void Init(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings) - { - DomainMappings = BuildMapping(domainMappings); - ServiceMappings = BuildMapping(serviceMappings); - BasePathLogos = serviceMappings.BasePath; - } // Init - } // class ServiceLogoMappings -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Schema2014.Logos; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public partial class ServiceLogoMappings + { + private IDictionary DomainMappings; + private Dictionary ServiceMappings; + + public string BasePathLogos + { + get; + private set; + } // BasePathServiceLogos + + public ServiceLogoMappings(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings) + { + Init(domainMappings, serviceMappings); + } // constructor + + public ServiceLogoMappings(string domainMappingsXmlFilename, string serviceMappingsXmlFile) + { + var domainMappings = LogosCommon.ParseDomainMappingsXml(domainMappingsXmlFilename); + var serviceMappings = LogosCommon.ParseServiceMappingsXml(serviceMappingsXmlFile); + + Init(domainMappings, serviceMappings); + } // constructor + + public static Dictionary BuildMapping(DomainMappingsXml mapping) + { + Dictionary mappings; + int count; + + var q = from package in mapping.Packages + from mp in package.Mappings + select mp; + count = q.Count(); + + mappings = new Dictionary(count); + foreach (var mp in q) + { + try + { + mappings.Add(mp.DomainName.ToLowerInvariant(), new ReplacementDomain + { + IsMandatory = mp.Mandatory, + Replacement = mp.ReplacementDomain.ToLowerInvariant(), + }); + } + catch (ArgumentException ex) // duplicated key (domain name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosDomainMappingsDuplicatedDomain, mp.DomainName), ex); + } // try-catch + } // foreach + + return mappings; + } // BuildMapping + + public static Dictionary BuildMapping(ServiceMappingsXml mapping) + { + Dictionary mappings; + ServiceDomainMapping domainMappings; + int count; + + var qDomain = from package in mapping.Packages + from domain in package.Domains + select domain; + count = qDomain.Count(); + + mappings = new Dictionary(count); + foreach (var domain in qDomain) + { + domainMappings = new ServiceDomainMapping() + { + DomainRedirection = domain.RedirectDomainName, + Logos = new Dictionary(domain.Mappings.Length), + }; + try + { + mappings.Add(domain.DomainName.ToLowerInvariant(), domainMappings); + } + catch (ArgumentException ex) // duplicated key (domain name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedDomain, + domain.DomainName), ex); + } // try-catch + + foreach (var mp in domain.Mappings) + { + try + { + domainMappings.Logos.Add(mp.Name.ToLowerInvariant(), mp.Logo); + } + catch (ArgumentException ex) // duplicated key (domain service name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedService, + mp.Name, domain.DomainName), ex); + } // try-catch + } // foreach mp + } // foreach domain + + return mappings; + } // BuildMapping + + public ServiceLogo Get(string serviceDomainName, string providerDomain, string serviceName, string serviceTypeId) + { + ReplacementDomain replacement; + ServiceDomainMapping serviceLogos; + string logoFile; + string partialPath; + bool firstReplacementChance; + + if (providerDomain == null) throw new ArgumentNullException("providerDomain"); + if (serviceDomainName == null) serviceDomainName = providerDomain; + if (serviceName == null) serviceName = Properties.InvariantTexts.ServiceNameAny; + + serviceDomainName = serviceDomainName.ToLowerInvariant(); + serviceName = serviceName.ToLowerInvariant(); + + firstReplacementChance = true; + while (serviceDomainName != null) + { + // replace domain? + if (DomainMappings.TryGetValue(serviceDomainName, out replacement)) + { + if ((replacement.IsMandatory) || (!firstReplacementChance)) + { + serviceDomainName = replacement.Replacement; + firstReplacementChance = true; + continue; + } // if + } // if + if (!firstReplacementChance) + { + serviceDomainName = GetParentDomain(serviceDomainName); + continue; + } // if + + // locate service logo for given domain + if (!ServiceMappings.TryGetValue(serviceDomainName, out serviceLogos)) + { + firstReplacementChance = false; + continue; + } // if + + if (!serviceLogos.Logos.TryGetValue(serviceName, out logoFile)) + { + if (!serviceLogos.Logos.TryGetValue(Properties.InvariantTexts.ServiceNameAny, out logoFile)) + { + firstReplacementChance = false; + continue; + } // if + } // if + + partialPath = GetFolderForDomain((serviceLogos.DomainRedirection == null) ? serviceDomainName : serviceLogos.DomainRedirection); + + return GetLogo(partialPath, logoFile); + } // while + + // avoid infinite recursion if default domain name contains no logos or doesn't exists + if (providerDomain == Properties.InvariantTexts.DefaultDomainNameServiceLogo) + { + return GetLogo("unknown", "unknown"); + } // if + + // obtain default logo + return Get(null, Properties.InvariantTexts.DefaultDomainNameServiceLogo, serviceTypeId, serviceTypeId); + } // Get + + ServiceLogo GetLogo(string partialPath, string logoFile) + { + return new ServiceLogo(BasePathLogos, partialPath, logoFile, + string.Format(Properties.InvariantTexts.FormatServiceLogoKey, logoFile, partialPath)); + } // GetLogo + + public ServiceLogo FromServiceKey(string serviceKey) + { + int pos; + string service, domain; + + pos = serviceKey.IndexOf('@'); + if (pos < 1) throw new ArgumentException(); + if ((pos + 1) == serviceKey.Length) throw new ArgumentException(); + + service = serviceKey.Substring(0, pos); + domain = serviceKey.Substring(pos + 1); + + return Get(null, domain, service, null); + } // FromServiceKey + + private static string GetParentDomain(string domainName) + { + var parts = domainName.Split('.'); + if (parts.Length <= 2) return null; + + return string.Join(".", parts, 1, parts.Length - 1); + } // GetParentDomain + + private static string GetFolderForDomain(string domainName) + { + var parts = domainName.Split('.'); + + if (parts.Length <= 2) return domainName; + + var builder = new StringBuilder(); + builder.Append(parts[parts.Length - 2]); + builder.Append('.'); + builder.Append(parts[parts.Length - 1]); + for (int i = parts.Length - 3; i >= 0; i--) + { + builder.Append(Path.DirectorySeparatorChar); + builder.Append(parts[i]); + } // for + + return builder.ToString(); + } // GetFolderForDomain + + private void Init(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings) + { + DomainMappings = BuildMapping(domainMappings); + ServiceMappings = BuildMapping(serviceMappings); + BasePathLogos = serviceMappings.BasePath; + } // Init + } // class ServiceLogoMappings +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs index 683b14a6..a477483d 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Configuration")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.Configuration")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3d30baba-6d2c-4b86-89f6-fdb6d01624b3")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Configuration")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Configuration")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d30baba-6d2c-4b86-89f6-fdb6d01624b3")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs index 0c468742..70996118 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Configuration.Properties { +namespace IpTviewr.UiServices.Configuration.Properties { using System; @@ -39,7 +39,7 @@ internal InvariantTexts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs index 024ce8c1..56f42f76 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs @@ -1,163 +1,163 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_AddVariable_16 { - get { - object obj = ResourceManager.GetObject("Action_AddVariable_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_128 { - get { - object obj = ResourceManager.GetObject("BrokenFile_128", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_16 { - get { - object obj = ResourceManager.GetObject("BrokenFile_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_256 { - get { - object obj = ResourceManager.GetObject("BrokenFile_256", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_32 { - get { - object obj = ResourceManager.GetObject("BrokenFile_32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_48 { - get { - object obj = ResourceManager.GetObject("BrokenFile_48", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_64 { - get { - object obj = ResourceManager.GetObject("BrokenFile_64", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_96 { - get { - object obj = ResourceManager.GetObject("BrokenFile_96", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NetworkSettings_32 { - get { - object obj = ResourceManager.GetObject("NetworkSettings_32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TvPlayersSettings_32 { - get { - object obj = ResourceManager.GetObject("TvPlayersSettings_32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_AddVariable_16 { + get { + object obj = ResourceManager.GetObject("Action_AddVariable_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_128 { + get { + object obj = ResourceManager.GetObject("BrokenFile_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_16 { + get { + object obj = ResourceManager.GetObject("BrokenFile_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_256 { + get { + object obj = ResourceManager.GetObject("BrokenFile_256", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_32 { + get { + object obj = ResourceManager.GetObject("BrokenFile_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_48 { + get { + object obj = ResourceManager.GetObject("BrokenFile_48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_64 { + get { + object obj = ResourceManager.GetObject("BrokenFile_64", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_96 { + get { + object obj = ResourceManager.GetObject("BrokenFile_96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NetworkSettings_32 { + get { + object obj = ResourceManager.GetObject("NetworkSettings_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TvPlayersSettings_32 { + get { + object obj = ResourceManager.GetObject("TvPlayersSettings_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs index 7de094ec..11628062 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs @@ -1,196 +1,196 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class SettingsTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal SettingsTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.Properties.SettingsTexts", typeof(SettingsTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Some of the changes you have made require you to restart the application before they can take effect. . - /// - internal static string ConfigFormAppRestartRequired { - get { - return ResourceManager.GetString("ConfigFormAppRestartRequired", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Network settings. - /// - internal static string NetworkDescription { - get { - return ResourceManager.GetString("NetworkDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Network. - /// - internal static string NetworkDisplayName { - get { - return ResourceManager.GetString("NetworkDisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The multicast proxy can not be blank.. - /// - internal static string NetworkMulticastProxyValidation { - get { - return ResourceManager.GetString("NetworkMulticastProxyValidation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to protocol|Name of the procotol, in lowercase (rpt or udp) - ///protocolU|Name of the protocol, in uppercase (RTP or UDP) - ///multicastAddress|Multicast IP address of TV channel - ///multicastPort|Multicast port of TV channel. - /// - internal static string NetworkUpdProxyParameters { - get { - return ResourceManager.GetString("NetworkUpdProxyParameters", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Network settings. - /// - internal static string NetworkValidationErrorCaption { - get { - return ResourceManager.GetString("NetworkValidationErrorCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Edit parameter. - /// - internal static string ParameterEditCaption { - get { - return ResourceManager.GetString("ParameterEditCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Add a new parameter. - /// - internal static string ParameterNewCaption { - get { - return ResourceManager.GetString("ParameterNewCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The list of arguments for executing the TV player is empty! - ///Do you wish to continue?. - /// - internal static string TvPlayerArgumentsListEmpty { - get { - return ResourceManager.GetString("TvPlayerArgumentsListEmpty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Do you want to remove the player '{0}'?. - /// - internal static string TvPlayerDelete { - get { - return ResourceManager.GetString("TvPlayerDelete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delete conformation. - /// - internal static string TvPlayerDeleteCaption { - get { - return ResourceManager.GetString("TvPlayerDeleteCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Channel.Url|IPTV channel URL - ///Channel.Name|Name of the channel - ///Channel.Description|Description of the channel - ///Channel.Icon.Path|Path to channel logo .ico file. - /// - internal static string TvPlayerParametersList { - get { - return ResourceManager.GetString("TvPlayerParametersList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TV players settings. - /// - internal static string TvPlayersDescription { - get { - return ResourceManager.GetString("TvPlayersDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TV players. - /// - internal static string TvPlayersDisplayName { - get { - return ResourceManager.GetString("TvPlayersDisplayName", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class SettingsTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal SettingsTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.SettingsTexts", typeof(SettingsTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Some of the changes you have made require you to restart the application before they can take effect. . + /// + internal static string ConfigFormAppRestartRequired { + get { + return ResourceManager.GetString("ConfigFormAppRestartRequired", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network settings. + /// + internal static string NetworkDescription { + get { + return ResourceManager.GetString("NetworkDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network. + /// + internal static string NetworkDisplayName { + get { + return ResourceManager.GetString("NetworkDisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The multicast proxy can not be blank.. + /// + internal static string NetworkMulticastProxyValidation { + get { + return ResourceManager.GetString("NetworkMulticastProxyValidation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to protocol|Name of the procotol, in lowercase (rpt or udp) + ///protocolU|Name of the protocol, in uppercase (RTP or UDP) + ///multicastAddress|Multicast IP address of TV channel + ///multicastPort|Multicast port of TV channel. + /// + internal static string NetworkUpdProxyParameters { + get { + return ResourceManager.GetString("NetworkUpdProxyParameters", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Network settings. + /// + internal static string NetworkValidationErrorCaption { + get { + return ResourceManager.GetString("NetworkValidationErrorCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Edit parameter. + /// + internal static string ParameterEditCaption { + get { + return ResourceManager.GetString("ParameterEditCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Add a new parameter. + /// + internal static string ParameterNewCaption { + get { + return ResourceManager.GetString("ParameterNewCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The list of arguments for executing the TV player is empty! + ///Do you wish to continue?. + /// + internal static string TvPlayerArgumentsListEmpty { + get { + return ResourceManager.GetString("TvPlayerArgumentsListEmpty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do you want to remove the player '{0}'?. + /// + internal static string TvPlayerDelete { + get { + return ResourceManager.GetString("TvPlayerDelete", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Delete conformation. + /// + internal static string TvPlayerDeleteCaption { + get { + return ResourceManager.GetString("TvPlayerDeleteCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Channel.Url|IPTV channel URL + ///Channel.Name|Name of the channel + ///Channel.Description|Description of the channel + ///Channel.Icon.Path|Path to channel logo .ico file. + /// + internal static string TvPlayerParametersList { + get { + return ResourceManager.GetString("TvPlayerParametersList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to TV players settings. + /// + internal static string TvPlayersDescription { + get { + return ResourceManager.GetString("TvPlayersDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to TV players. + /// + internal static string TvPlayersDisplayName { + get { + return ResourceManager.GetString("TvPlayersDisplayName", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs index b464ba9c..48ca5b66 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs @@ -1,594 +1,594 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Configuration.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Application not correctly installed. - /// - internal static string AppConfigRegistryCaption { - get { - return ResourceManager.GetString("AppConfigRegistryCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to find or open 'HKCU\{0}'.. - /// - internal static string AppConfigRegistryMissingKey { - get { - return ResourceManager.GetString("AppConfigRegistryMissingKey", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The value '{1}' is missing under 'HKCU\{0}'.. - /// - internal static string AppConfigRegistryMissingValue { - get { - return ResourceManager.GetString("AppConfigRegistryMissingValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There is a problem accessing the application configuration from the Windows Registry: - ///{0} - /// - ///Please install the application using the official installer or repair the installation.. - /// - internal static string AppConfigRegistryText { - get { - return ResourceManager.GetString("AppConfigRegistryText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to find the 'base' folder at '{0}'.. - /// - internal static string AppConfigValidationBasePath { - get { - return ResourceManager.GetString("AppConfigValidationBasePath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to locate the 'logos' folder at '{0}'.. - /// - internal static string AppConfigValidationLogosPath { - get { - return ResourceManager.GetString("AppConfigValidationLogosPath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to SD TV. - /// - internal static string DvbServiceTypeDescription_01 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_01", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Radio (MPEG-1). - /// - internal static string DvbServiceTypeDescription_02 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_02", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Teletext. - /// - internal static string DvbServiceTypeDescription_03 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_03", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mosaic. - /// - internal static string DvbServiceTypeDescription_06 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_06", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Radio (HD). - /// - internal static string DvbServiceTypeDescription_10 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_10", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mosaic (HD). - /// - internal static string DvbServiceTypeDescription_11 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_11", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Data. - /// - internal static string DvbServiceTypeDescription_12 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_12", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to DVB MHP. - /// - internal static string DvbServiceTypeDescription_16 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_16", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to HD TV (MPEG-2). - /// - internal static string DvbServiceTypeDescription_17 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_17", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to SD TV (AVC). - /// - internal static string DvbServiceTypeDescription_22 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_22", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to HD TV. - /// - internal static string DvbServiceTypeDescription_25 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_25", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/domain-mappings.xml'. - /// - internal static string ExceptionLogosDomainMappingsDuplicatedDomain { - get { - return ResourceManager.GetString("ExceptionLogosDomainMappingsDuplicatedDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load provider logo file\r\n{0}. - /// - internal static string ExceptionLogosProviderImageLoadError { - get { - return ResourceManager.GetString("ExceptionLogosProviderImageLoadError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Provider logo file not found. - /// - internal static string ExceptionLogosProviderImageNotFound { - get { - return ResourceManager.GetString("ExceptionLogosProviderImageNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/providers/provider-mappings.xml'. - /// - internal static string ExceptionLogosProviderMappingsDuplicatedDomain { - get { - return ResourceManager.GetString("ExceptionLogosProviderMappingsDuplicatedDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load service logo file\r\n{0}. - /// - internal static string ExceptionLogosServiceImageLoadError { - get { - return ResourceManager.GetString("ExceptionLogosServiceImageLoadError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Service logo file not found. - /// - internal static string ExceptionLogosServiceImageNotFound { - get { - return ResourceManager.GetString("ExceptionLogosServiceImageNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/service-mappings.xml'. - /// - internal static string ExceptionLogosServiceMappingsDuplicatedDomain { - get { - return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated service name '{0}' in 'logos/services/service-mappings.xml' for domain '{1}'. - /// - internal static string ExceptionLogosServiceMappingsDuplicatedService { - get { - return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedService", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The user configuration file '{0}' is invalid or has severe errors. - ///{1} - /// - ///Please verify the XML syntax of the file and correct the detected errors.. - /// - internal static string LoadConfigUserConfigValidation { - get { - return ResourceManager.GetString("LoadConfigUserConfigValidation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to See exception details (below) for detailed error information.. - /// - internal static string LoadConfigUserConfigValidationException { - get { - return ResourceManager.GetString("LoadConfigUserConfigValidationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Application configuration verification failure. - /// - internal static string LoadConfigValidationCaption { - get { - return ResourceManager.GetString("LoadConfigValidationCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load the content provider data. - /// - internal static string LoadContentProviderDataExceptionCaption { - get { - return ResourceManager.GetString("LoadContentProviderDataExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The content provider information file '{0}' is invalid or has severe errors. - ///{1} - /// - ///Please verify the XML syntax of the file and correct the detected errors.. - /// - internal static string LoadContentProviderDataValidation { - get { - return ResourceManager.GetString("LoadContentProviderDataValidation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Content provider data verification failure. - /// - internal static string LoadContentProviderDataValidationCaption { - get { - return ResourceManager.GetString("LoadContentProviderDataValidationCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to See exception details (below) for detailed error information.. - /// - internal static string LoadContentProviderDataValidationException { - get { - return ResourceManager.GetString("LoadContentProviderDataValidationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading content provider data.... - /// - internal static string LoadProgress_ContentProvider { - get { - return ResourceManager.GetString("LoadProgress_ContentProvider", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading application configuration.... - /// - internal static string LoadProgress_Start { - get { - return ResourceManager.GetString("LoadProgress_Start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading user configuration and preferences.... - /// - internal static string LoadProgress_UserConfig { - get { - return ResourceManager.GetString("LoadProgress_UserConfig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load the user configuration. - /// - internal static string LoadUserConfigExceptionCaption { - get { - return ResourceManager.GetString("LoadUserConfigExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User configuration verification failure. - /// - internal static string LoadUserConfigValidationCaption { - get { - return ResourceManager.GetString("LoadUserConfigValidationCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Larger. - /// - internal static string LogoSize128 { - get { - return ResourceManager.GetString("LogoSize128", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Huge. - /// - internal static string LogoSize256 { - get { - return ResourceManager.GetString("LogoSize256", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Small. - /// - internal static string LogoSize32 { - get { - return ResourceManager.GetString("LogoSize32", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Regular. - /// - internal static string LogoSize48 { - get { - return ResourceManager.GetString("LogoSize48", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Medium. - /// - internal static string LogoSize64 { - get { - return ResourceManager.GetString("LogoSize64", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Large. - /// - internal static string LogoSize96 { - get { - return ResourceManager.GetString("LogoSize96", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} ({1}x{2}). - /// - internal static string LogoSizeWithSizeFormat { - get { - return ResourceManager.GetString("LogoSizeWithSizeFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to '{0}' TV player can not be found at '{1}'.. - /// - internal static string PlayerConfigValidationPathNotFound { - get { - return ResourceManager.GetString("PlayerConfigValidationPathNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} recorder can not be found at '{1}'. - /// - internal static string RecorderConfigValidationPathNotFound { - get { - return ResourceManager.GetString("RecorderConfigValidationPathNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The <{1}> path value '{0}' has to be either an absolute volume path (like 'C:\folder') or an UNC (like '\\server\share').. - /// - internal static string RecordSaveLocationValidationAbsolutePath { - get { - return ResourceManager.GetString("RecordSaveLocationValidationAbsolutePath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The <{1}> Task Scheduler folder value '{0}' must start with '\' and must not end with '\'. - /// - internal static string RecordTaskSchedulerFolderValidationPath { - get { - return ResourceManager.GetString("RecordTaskSchedulerFolderValidationPath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to At least one <{0}> tag has to be specified at <{1}> tag.. - /// - internal static string UserConfigValidationAtLeastOne { - get { - return ResourceManager.GetString("UserConfigValidationAtLeastOne", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated <{1}> item in <{0}> list. '{2}' value is '{3}'. - /// - internal static string UserConfigValidationDuplicatedEntry { - get { - return ResourceManager.GetString("UserConfigValidationDuplicatedEntry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IP address. - /// - internal static string UserConfigValidationIpAddress { - get { - return ResourceManager.GetString("UserConfigValidationIpAddress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IP port number. - /// - internal static string UserConfigValidationIpPort { - get { - return ResourceManager.GetString("UserConfigValidationIpPort", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing or empty.. - /// - internal static string UserConfigValidationMissingEmpty { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmpty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Attribute '{0}' is missing or empty at <{1}> tag.. - /// - internal static string UserConfigValidationMissingEmptyAttribute { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmptyAttribute", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag.. - /// - internal static string UserConfigValidationMissingEmptyOwner { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmptyOwner", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag. Value of '{2}' is '{3}'.. - /// - internal static string UserConfigValidationMissingEmptyValue { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmptyValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing under <{1}> tag.. - /// - internal static string UserConfigValidationMissingTag { - get { - return ResourceManager.GetString("UserConfigValidationMissingTag", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Value '{2}' specified at <{0}> tag is not a valid {1}.. - /// - internal static string UserConfigValidationValueType { - get { - return ResourceManager.GetString("UserConfigValidationValueType", resourceCulture); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Application not correctly installed. + /// + internal static string AppConfigRegistryCaption { + get { + return ResourceManager.GetString("AppConfigRegistryCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to find or open 'HKCU\{0}'.. + /// + internal static string AppConfigRegistryMissingKey { + get { + return ResourceManager.GetString("AppConfigRegistryMissingKey", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The value '{1}' is missing under 'HKCU\{0}'.. + /// + internal static string AppConfigRegistryMissingValue { + get { + return ResourceManager.GetString("AppConfigRegistryMissingValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There is a problem accessing the application configuration from the Windows Registry: + ///{0} + /// + ///Please install the application using the official installer or repair the installation.. + /// + internal static string AppConfigRegistryText { + get { + return ResourceManager.GetString("AppConfigRegistryText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to find the 'base' folder at '{0}'.. + /// + internal static string AppConfigValidationBasePath { + get { + return ResourceManager.GetString("AppConfigValidationBasePath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to locate the 'logos' folder at '{0}'.. + /// + internal static string AppConfigValidationLogosPath { + get { + return ResourceManager.GetString("AppConfigValidationLogosPath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SD TV. + /// + internal static string DvbServiceTypeDescription_01 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_01", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Radio (MPEG-1). + /// + internal static string DvbServiceTypeDescription_02 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_02", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Teletext. + /// + internal static string DvbServiceTypeDescription_03 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_03", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mosaic. + /// + internal static string DvbServiceTypeDescription_06 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_06", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Radio (HD). + /// + internal static string DvbServiceTypeDescription_10 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_10", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mosaic (HD). + /// + internal static string DvbServiceTypeDescription_11 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_11", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data. + /// + internal static string DvbServiceTypeDescription_12 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_12", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DVB MHP. + /// + internal static string DvbServiceTypeDescription_16 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_16", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to HD TV (MPEG-2). + /// + internal static string DvbServiceTypeDescription_17 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_17", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SD TV (AVC). + /// + internal static string DvbServiceTypeDescription_22 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_22", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to HD TV. + /// + internal static string DvbServiceTypeDescription_25 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_25", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/domain-mappings.xml'. + /// + internal static string ExceptionLogosDomainMappingsDuplicatedDomain { + get { + return ResourceManager.GetString("ExceptionLogosDomainMappingsDuplicatedDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load provider logo file\r\n{0}. + /// + internal static string ExceptionLogosProviderImageLoadError { + get { + return ResourceManager.GetString("ExceptionLogosProviderImageLoadError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provider logo file not found. + /// + internal static string ExceptionLogosProviderImageNotFound { + get { + return ResourceManager.GetString("ExceptionLogosProviderImageNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/providers/provider-mappings.xml'. + /// + internal static string ExceptionLogosProviderMappingsDuplicatedDomain { + get { + return ResourceManager.GetString("ExceptionLogosProviderMappingsDuplicatedDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load service logo file\r\n{0}. + /// + internal static string ExceptionLogosServiceImageLoadError { + get { + return ResourceManager.GetString("ExceptionLogosServiceImageLoadError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Service logo file not found. + /// + internal static string ExceptionLogosServiceImageNotFound { + get { + return ResourceManager.GetString("ExceptionLogosServiceImageNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/service-mappings.xml'. + /// + internal static string ExceptionLogosServiceMappingsDuplicatedDomain { + get { + return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated service name '{0}' in 'logos/services/service-mappings.xml' for domain '{1}'. + /// + internal static string ExceptionLogosServiceMappingsDuplicatedService { + get { + return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedService", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The user configuration file '{0}' is invalid or has severe errors. + ///{1} + /// + ///Please verify the XML syntax of the file and correct the detected errors.. + /// + internal static string LoadConfigUserConfigValidation { + get { + return ResourceManager.GetString("LoadConfigUserConfigValidation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to See exception details (below) for detailed error information.. + /// + internal static string LoadConfigUserConfigValidationException { + get { + return ResourceManager.GetString("LoadConfigUserConfigValidationException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application configuration verification failure. + /// + internal static string LoadConfigValidationCaption { + get { + return ResourceManager.GetString("LoadConfigValidationCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load the content provider data. + /// + internal static string LoadContentProviderDataExceptionCaption { + get { + return ResourceManager.GetString("LoadContentProviderDataExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The content provider information file '{0}' is invalid or has severe errors. + ///{1} + /// + ///Please verify the XML syntax of the file and correct the detected errors.. + /// + internal static string LoadContentProviderDataValidation { + get { + return ResourceManager.GetString("LoadContentProviderDataValidation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Content provider data verification failure. + /// + internal static string LoadContentProviderDataValidationCaption { + get { + return ResourceManager.GetString("LoadContentProviderDataValidationCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to See exception details (below) for detailed error information.. + /// + internal static string LoadContentProviderDataValidationException { + get { + return ResourceManager.GetString("LoadContentProviderDataValidationException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading content provider data.... + /// + internal static string LoadProgress_ContentProvider { + get { + return ResourceManager.GetString("LoadProgress_ContentProvider", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading application configuration.... + /// + internal static string LoadProgress_Start { + get { + return ResourceManager.GetString("LoadProgress_Start", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading user configuration and preferences.... + /// + internal static string LoadProgress_UserConfig { + get { + return ResourceManager.GetString("LoadProgress_UserConfig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load the user configuration. + /// + internal static string LoadUserConfigExceptionCaption { + get { + return ResourceManager.GetString("LoadUserConfigExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to User configuration verification failure. + /// + internal static string LoadUserConfigValidationCaption { + get { + return ResourceManager.GetString("LoadUserConfigValidationCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Larger. + /// + internal static string LogoSize128 { + get { + return ResourceManager.GetString("LogoSize128", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Huge. + /// + internal static string LogoSize256 { + get { + return ResourceManager.GetString("LogoSize256", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Small. + /// + internal static string LogoSize32 { + get { + return ResourceManager.GetString("LogoSize32", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Regular. + /// + internal static string LogoSize48 { + get { + return ResourceManager.GetString("LogoSize48", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Medium. + /// + internal static string LogoSize64 { + get { + return ResourceManager.GetString("LogoSize64", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Large. + /// + internal static string LogoSize96 { + get { + return ResourceManager.GetString("LogoSize96", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} ({1}x{2}). + /// + internal static string LogoSizeWithSizeFormat { + get { + return ResourceManager.GetString("LogoSizeWithSizeFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to '{0}' TV player can not be found at '{1}'.. + /// + internal static string PlayerConfigValidationPathNotFound { + get { + return ResourceManager.GetString("PlayerConfigValidationPathNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} recorder can not be found at '{1}'. + /// + internal static string RecorderConfigValidationPathNotFound { + get { + return ResourceManager.GetString("RecorderConfigValidationPathNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The <{1}> path value '{0}' has to be either an absolute volume path (like 'C:\folder') or an UNC (like '\\server\share').. + /// + internal static string RecordSaveLocationValidationAbsolutePath { + get { + return ResourceManager.GetString("RecordSaveLocationValidationAbsolutePath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The <{1}> Task Scheduler folder value '{0}' must start with '\' and must not end with '\'. + /// + internal static string RecordTaskSchedulerFolderValidationPath { + get { + return ResourceManager.GetString("RecordTaskSchedulerFolderValidationPath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to At least one <{0}> tag has to be specified at <{1}> tag.. + /// + internal static string UserConfigValidationAtLeastOne { + get { + return ResourceManager.GetString("UserConfigValidationAtLeastOne", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated <{1}> item in <{0}> list. '{2}' value is '{3}'. + /// + internal static string UserConfigValidationDuplicatedEntry { + get { + return ResourceManager.GetString("UserConfigValidationDuplicatedEntry", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IP address. + /// + internal static string UserConfigValidationIpAddress { + get { + return ResourceManager.GetString("UserConfigValidationIpAddress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IP port number. + /// + internal static string UserConfigValidationIpPort { + get { + return ResourceManager.GetString("UserConfigValidationIpPort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing or empty.. + /// + internal static string UserConfigValidationMissingEmpty { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmpty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Attribute '{0}' is missing or empty at <{1}> tag.. + /// + internal static string UserConfigValidationMissingEmptyAttribute { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmptyAttribute", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag.. + /// + internal static string UserConfigValidationMissingEmptyOwner { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmptyOwner", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag. Value of '{2}' is '{3}'.. + /// + internal static string UserConfigValidationMissingEmptyValue { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmptyValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing under <{1}> tag.. + /// + internal static string UserConfigValidationMissingTag { + get { + return ResourceManager.GetString("UserConfigValidationMissingTag", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Value '{2}' specified at <{0}> tag is not a valid {1}.. + /// + internal static string UserConfigValidationValueType { + get { + return ResourceManager.GetString("UserConfigValidationValueType", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs index 89ef9f78..fb1b71b6 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs @@ -1,45 +1,45 @@ -// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName = "TelemetryConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class TelemetryConfiguration - { - public TelemetryConfiguration() - { - } // constructor - - public TelemetryConfiguration(bool enabled, bool usage, bool exceptions) - { - Enabled = enabled; - Usage = usage; - Exceptions = exceptions; - } // AnalyticsConfig - - public bool Enabled - { - get; - set; - } // Enabled - - public bool Usage - { - get; - set; - } // Usage - - public bool Exceptions - { - get; - set; - } // Exceptions - } // class AnalyticsConfig -} // namespace +// Copyright (C) 2015, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType(TypeName = "TelemetryConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class TelemetryConfiguration + { + public TelemetryConfiguration() + { + } // constructor + + public TelemetryConfiguration(bool enabled, bool usage, bool exceptions) + { + Enabled = enabled; + Usage = usage; + Exceptions = exceptions; + } // AnalyticsConfig + + public bool Enabled + { + get; + set; + } // Enabled + + public bool Usage + { + get; + set; + } // Usage + + public bool Exceptions + { + get; + set; + } // Exceptions + } // class AnalyticsConfig +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs index aeec6e14..1540f535 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs @@ -1,96 +1,96 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - public class ConfigCommon - { - public const string ConfigXmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration"; - - internal static string Normalize(string value) - { - if (value == null) return null; - return value.Trim(); - } // Normalize - - internal static string ValidateArray(T[] array, string arrayElementTag, string arrayTag, string ownerTag) - { - if (array == null) - { - return ConfigCommon.ErrorMissingTag(arrayTag, ownerTag); - } // if - if (array.Length < 1) - { - return ConfigCommon.ErrorAtLeastOne(arrayElementTag, arrayTag); - } // if - - return null; - } // ValidateArray - - internal static string ErrorMissingTag(string tagName, string ownerTag) - { - return string.Format(Properties.Texts.UserConfigValidationMissingTag, tagName, ownerTag); - } // ErrorMissingTag - - internal static string ErrorMissingEmptyAttribute(string attrName, string ownerTag) - { - return string.Format(Properties.Texts.UserConfigValidationMissingEmptyAttribute, attrName, ownerTag); - } // ErrorMissingEmptyAttribute - - internal static string ErrorMissingEmpty(string tagName) - { - return string.Format(Properties.Texts.UserConfigValidationMissingEmpty, tagName); - } // ErrorMissingEmpty - - internal static string ErrorMissingEmpty(string tagName, string ownerTag) - { - return string.Format(Properties.Texts.UserConfigValidationMissingEmptyOwner, tagName, ownerTag); - } // ErrorMissingEmpty - - internal static string ErrorMissingEmpty(string tagName, string ownerTag, string idField, string idFieldValue) - { - return string.Format(Properties.Texts.UserConfigValidationMissingEmptyValue, tagName, ownerTag, idField, idFieldValue); - } // ErrorMissingEmpty - - internal static string ErrorAtLeastOne(string tagName, string ownerTag) - { - return string.Format(Properties.Texts.UserConfigValidationAtLeastOne, tagName, ownerTag); - } // ErrorAtLeastOne - - internal static string ErrorValueType(string tagName, string type, string value) - { - return string.Format(Properties.Texts.UserConfigValidationValueType, tagName, type, value); - } // ErrorValueType - - internal static string ErrorDuplicatedEntry(string arrayTag, string arrayElementTag, string idField, string idFieldValue) - { - return string.Format(Properties.Texts.UserConfigValidationDuplicatedEntry, arrayTag, arrayElementTag, idField, idFieldValue); - throw new NotImplementedException(); - } // ErrorDuplicatedEntry - - internal static bool IsAbsoluteWindowsPath(string path) - { - // An absolute path must be either like C:\ or an UNC like \\server\dir - - if (path.Length < 3) return false; - if (path[1] == ':') - { - var drive = path.Substring(0, 1).ToLowerInvariant()[0]; - if ((drive < 'a') || (drive > 'z')) return false; - if (path[2] != '\\') return false; - - return true; - } // if - - if (!path.StartsWith(@"\\")) return false; - if (path.Length < 5) return false; // minimal UNC is \\S\F - - return true; - } // IsAbsolutePath - } // class ConfigCommon -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + public class ConfigCommon + { + public const string ConfigXmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration"; + + internal static string Normalize(string value) + { + if (value == null) return null; + return value.Trim(); + } // Normalize + + internal static string ValidateArray(T[] array, string arrayElementTag, string arrayTag, string ownerTag) + { + if (array == null) + { + return ConfigCommon.ErrorMissingTag(arrayTag, ownerTag); + } // if + if (array.Length < 1) + { + return ConfigCommon.ErrorAtLeastOne(arrayElementTag, arrayTag); + } // if + + return null; + } // ValidateArray + + internal static string ErrorMissingTag(string tagName, string ownerTag) + { + return string.Format(Properties.Texts.UserConfigValidationMissingTag, tagName, ownerTag); + } // ErrorMissingTag + + internal static string ErrorMissingEmptyAttribute(string attrName, string ownerTag) + { + return string.Format(Properties.Texts.UserConfigValidationMissingEmptyAttribute, attrName, ownerTag); + } // ErrorMissingEmptyAttribute + + internal static string ErrorMissingEmpty(string tagName) + { + return string.Format(Properties.Texts.UserConfigValidationMissingEmpty, tagName); + } // ErrorMissingEmpty + + internal static string ErrorMissingEmpty(string tagName, string ownerTag) + { + return string.Format(Properties.Texts.UserConfigValidationMissingEmptyOwner, tagName, ownerTag); + } // ErrorMissingEmpty + + internal static string ErrorMissingEmpty(string tagName, string ownerTag, string idField, string idFieldValue) + { + return string.Format(Properties.Texts.UserConfigValidationMissingEmptyValue, tagName, ownerTag, idField, idFieldValue); + } // ErrorMissingEmpty + + internal static string ErrorAtLeastOne(string tagName, string ownerTag) + { + return string.Format(Properties.Texts.UserConfigValidationAtLeastOne, tagName, ownerTag); + } // ErrorAtLeastOne + + internal static string ErrorValueType(string tagName, string type, string value) + { + return string.Format(Properties.Texts.UserConfigValidationValueType, tagName, type, value); + } // ErrorValueType + + internal static string ErrorDuplicatedEntry(string arrayTag, string arrayElementTag, string idField, string idFieldValue) + { + return string.Format(Properties.Texts.UserConfigValidationDuplicatedEntry, arrayTag, arrayElementTag, idField, idFieldValue); + throw new NotImplementedException(); + } // ErrorDuplicatedEntry + + internal static bool IsAbsoluteWindowsPath(string path) + { + // An absolute path must be either like C:\ or an UNC like \\server\dir + + if (path.Length < 3) return false; + if (path[1] == ':') + { + var drive = path.Substring(0, 1).ToLowerInvariant()[0]; + if ((drive < 'a') || (drive > 'z')) return false; + if (path[2] != '\\') return false; + + return true; + } // if + + if (!path.StartsWith(@"\\")) return false; + if (path.Length < 5) return false; // minimal UNC is \\S\F + + return true; + } // IsAbsolutePath + } // class ConfigCommon +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs index 4beffdca..06f886f3 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs @@ -1,56 +1,56 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName="RecordConfig", Namespace=ConfigCommon.ConfigXmlNamespace)] - public class RecordConfig - { - [XmlArray(ElementName="SaveLocations", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem(ElementName="Location")] - public RecordSaveLocation[] SaveLocations - { - get; - set; - } // SaveLocations - - [XmlArray("TaskSchedulerFolders", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem(ElementName="Folder")] - public RecordTaskSchedulerFolder[] TaskSchedulerFolders - { - get; - set; - } // TaskSchedulerFolders - - [XmlArray("Recorders", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem("Recorder")] - public RecorderConfig[] Recorders - { - get; - set; - } // Recorders - - public string Validate(string ownerTag) - { - string validationError; - - validationError = RecordSaveLocation.ValidateArray(SaveLocations, "Location", "SaveLocations", ownerTag); - if (validationError != null) return validationError; - - validationError = RecordTaskSchedulerFolder.ValidateArray(TaskSchedulerFolders, "Folder", "TaskSchedulerFolders", ownerTag); - if (validationError != null) return validationError; - - validationError = RecorderConfig.ValidateArray(Recorders, "Recorder", "Recorders", ownerTag); - if (validationError != null) return validationError; - - return null; - } // Validate - } // class RecordConfig -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType(TypeName="RecordConfig", Namespace=ConfigCommon.ConfigXmlNamespace)] + public class RecordConfig + { + [XmlArray(ElementName="SaveLocations", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem(ElementName="Location")] + public RecordSaveLocation[] SaveLocations + { + get; + set; + } // SaveLocations + + [XmlArray("TaskSchedulerFolders", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem(ElementName="Folder")] + public RecordTaskSchedulerFolder[] TaskSchedulerFolders + { + get; + set; + } // TaskSchedulerFolders + + [XmlArray("Recorders", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem("Recorder")] + public RecorderConfig[] Recorders + { + get; + set; + } // Recorders + + public string Validate(string ownerTag) + { + string validationError; + + validationError = RecordSaveLocation.ValidateArray(SaveLocations, "Location", "SaveLocations", ownerTag); + if (validationError != null) return validationError; + + validationError = RecordTaskSchedulerFolder.ValidateArray(TaskSchedulerFolders, "Folder", "TaskSchedulerFolders", ownerTag); + if (validationError != null) return validationError; + + validationError = RecorderConfig.ValidateArray(Recorders, "Recorder", "Recorders", ownerTag); + if (validationError != null) return validationError; + + return null; + } // Validate + } // class RecordConfig +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs index 07af1576..970f4b30 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs @@ -1,82 +1,82 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType("SaveLocation", Namespace=ConfigCommon.ConfigXmlNamespace)] - public sealed class RecordSaveLocation : StringPair - { - public RecordSaveLocation() - : base() - { - // no op - } // constructor - - public RecordSaveLocation(string name, string path) - { - Name = name; - Path = path; - } // constructor - - [XmlAttribute("name")] - public string Name - { - get { return Item1; } - set { Item1 = ConfigCommon.Normalize(value); } - } // Name - - [XmlText()] - public string Path - { - get { return Item2; } - set { Item2 = ConfigCommon.Normalize(value); } - } // Value - - public string Validate(string ownerTag) - { - /* - if (string.IsNullOrEmpty(Name)) - { - return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); - } // if - */ - if (string.IsNullOrEmpty(Path)) - { - return ConfigCommon.ErrorMissingEmpty(ownerTag); - } // if - if (!ConfigCommon.IsAbsoluteWindowsPath(Path)) - { - return string.Format(Properties.Texts.RecordSaveLocationValidationAbsolutePath, Path, ownerTag); - } // if - - return null; - } // Validate - - public static string ValidateArray(RecordSaveLocation[] locations, string arrayElementTag, string arrayTag, string ownerTag) - { - var validationError = ConfigCommon.ValidateArray(locations, arrayElementTag, arrayTag, ownerTag); - if (validationError != null) return validationError; - - var set = new HashSet(); - foreach (var location in locations) - { - validationError = location.Validate(arrayElementTag); - if (validationError != null) return validationError; - - if (!set.Add(location.Name)) - { - return ConfigCommon.ErrorDuplicatedEntry(arrayTag, arrayElementTag, "name", location.Name ?? "(empty or null)"); - } // if - } // foreach - - return null; - } // ValidateArray - } // class RecordSaveLocation -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType("SaveLocation", Namespace=ConfigCommon.ConfigXmlNamespace)] + public sealed class RecordSaveLocation : StringPair + { + public RecordSaveLocation() + : base() + { + // no op + } // constructor + + public RecordSaveLocation(string name, string path) + { + Name = name; + Path = path; + } // constructor + + [XmlAttribute("name")] + public string Name + { + get { return Item1; } + set { Item1 = ConfigCommon.Normalize(value); } + } // Name + + [XmlText()] + public string Path + { + get { return Item2; } + set { Item2 = ConfigCommon.Normalize(value); } + } // Value + + public string Validate(string ownerTag) + { + /* + if (string.IsNullOrEmpty(Name)) + { + return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); + } // if + */ + if (string.IsNullOrEmpty(Path)) + { + return ConfigCommon.ErrorMissingEmpty(ownerTag); + } // if + if (!ConfigCommon.IsAbsoluteWindowsPath(Path)) + { + return string.Format(Properties.Texts.RecordSaveLocationValidationAbsolutePath, Path, ownerTag); + } // if + + return null; + } // Validate + + public static string ValidateArray(RecordSaveLocation[] locations, string arrayElementTag, string arrayTag, string ownerTag) + { + var validationError = ConfigCommon.ValidateArray(locations, arrayElementTag, arrayTag, ownerTag); + if (validationError != null) return validationError; + + var set = new HashSet(); + foreach (var location in locations) + { + validationError = location.Validate(arrayElementTag); + if (validationError != null) return validationError; + + if (!set.Add(location.Name)) + { + return ConfigCommon.ErrorDuplicatedEntry(arrayTag, arrayElementTag, "name", location.Name ?? "(empty or null)"); + } // if + } // foreach + + return null; + } // ValidateArray + } // class RecordSaveLocation +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs index caa56f20..a902e1e6 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs @@ -1,79 +1,79 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName = "RecordTaskSchedulerFolder", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class RecordTaskSchedulerFolder : StringPair - { - public RecordTaskSchedulerFolder() - : base() - { - // no op - } // constructor - - public RecordTaskSchedulerFolder(string name, string path) - { - Name = name; - Path = path; - } // constructor - - [XmlAttribute("displayName")] - public string Name - { - get { return Item1; } - set { Item1 = ConfigCommon.Normalize(value); } - } // Name - - [XmlText()] - public string Path - { - get { return Item2; } - set { Item2 = ConfigCommon.Normalize(value); } - } // Value - - public string Validate(string ownerTag) - { - if (string.IsNullOrEmpty(Name)) - { - return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); - } // if - if (string.IsNullOrEmpty(Path)) - { - return ConfigCommon.ErrorMissingEmpty(ownerTag); - } // if - if ((!Path.StartsWith("\\")) || (Path.EndsWith("\\"))) - { - return string.Format(Properties.Texts.RecordTaskSchedulerFolderValidationPath, Path, ownerTag); - } // if - - return null; - } // Validate - - public static string ValidateArray(RecordTaskSchedulerFolder[] folders, string arrayElementTag, string arrayTag, string ownerTag) - { - if ((folders == null) || (folders.Length < 1)) return null; - - var set = new HashSet(); - foreach (var folder in folders) - { - var validationError = folder.Validate(arrayElementTag); - if (validationError != null) return validationError; - - if (!set.Add(folder.Name)) - { - return ConfigCommon.ErrorDuplicatedEntry(arrayTag, arrayElementTag, "name", folder.Name); - } // if - } // foreach - - return null; - } // ValidateArray - } // class RecordTaskSchedulerFolder -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType(TypeName = "RecordTaskSchedulerFolder", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class RecordTaskSchedulerFolder : StringPair + { + public RecordTaskSchedulerFolder() + : base() + { + // no op + } // constructor + + public RecordTaskSchedulerFolder(string name, string path) + { + Name = name; + Path = path; + } // constructor + + [XmlAttribute("displayName")] + public string Name + { + get { return Item1; } + set { Item1 = ConfigCommon.Normalize(value); } + } // Name + + [XmlText()] + public string Path + { + get { return Item2; } + set { Item2 = ConfigCommon.Normalize(value); } + } // Value + + public string Validate(string ownerTag) + { + if (string.IsNullOrEmpty(Name)) + { + return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); + } // if + if (string.IsNullOrEmpty(Path)) + { + return ConfigCommon.ErrorMissingEmpty(ownerTag); + } // if + if ((!Path.StartsWith("\\")) || (Path.EndsWith("\\"))) + { + return string.Format(Properties.Texts.RecordTaskSchedulerFolderValidationPath, Path, ownerTag); + } // if + + return null; + } // Validate + + public static string ValidateArray(RecordTaskSchedulerFolder[] folders, string arrayElementTag, string arrayTag, string ownerTag) + { + if ((folders == null) || (folders.Length < 1)) return null; + + var set = new HashSet(); + foreach (var folder in folders) + { + var validationError = folder.Validate(arrayElementTag); + if (validationError != null) return validationError; + + if (!set.Add(folder.Name)) + { + return ConfigCommon.ErrorDuplicatedEntry(arrayTag, arrayElementTag, "name", folder.Name); + } // if + } // foreach + + return null; + } // ValidateArray + } // class RecordTaskSchedulerFolder +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs index eef658be..2b64fe10 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs @@ -1,87 +1,87 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName = "RecorderConfig", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class RecorderConfig - { - [XmlAttribute("name")] - public string Name - { - get; - set; - } // Name - - public string Path - { - get; - set; - } // Path - - [XmlArray("Arguments", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem("Arg")] - public string[] Arguments - { - get; - set; - } // Parameters - - public string Validate(string ownerTag) - { - if (string.IsNullOrEmpty(Name)) - { - return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); - } // if - if (string.IsNullOrEmpty(Path)) - { - return ConfigCommon.ErrorMissingEmpty(ownerTag); - } // if - if (!System.IO.File.Exists(Path)) - { - return string.Format(Properties.Texts.RecorderConfigValidationPathNotFound, Name, Path); - } // if - - var validationError = ConfigCommon.ValidateArray(Arguments, "Argument", "Arguments", ownerTag); - if (validationError != null) return validationError; - - for (int index = 0; index < Arguments.Length; index++) - { - Arguments[index] = ConfigCommon.Normalize(Arguments[index]); - if (string.IsNullOrEmpty(Arguments[index])) - { - ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); ; - } // if - } // for - - return null; - } // Validate - - public static string ValidateArray(RecorderConfig[] recorders, string arrayElementTag, string arrayTag, string ownerTag) - { - var validationError = ConfigCommon.ValidateArray(recorders, arrayElementTag, arrayTag, ownerTag); - if (validationError != null) return validationError; - - var set = new HashSet(); - foreach (var recorder in recorders) - { - validationError = recorder.Validate(arrayElementTag); - if (validationError != null) return validationError; - - if (!set.Add(recorder.Name)) - { - return ConfigCommon.ErrorDuplicatedEntry(arrayTag, arrayElementTag, "name", recorder.Name); - } // if - } // foreach - - return null; - } // ValidateArray - } // class RecorderConfig -} //namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType(TypeName = "RecorderConfig", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class RecorderConfig + { + [XmlAttribute("name")] + public string Name + { + get; + set; + } // Name + + public string Path + { + get; + set; + } // Path + + [XmlArray("Arguments", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem("Arg")] + public string[] Arguments + { + get; + set; + } // Parameters + + public string Validate(string ownerTag) + { + if (string.IsNullOrEmpty(Name)) + { + return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); + } // if + if (string.IsNullOrEmpty(Path)) + { + return ConfigCommon.ErrorMissingEmpty(ownerTag); + } // if + if (!System.IO.File.Exists(Path)) + { + return string.Format(Properties.Texts.RecorderConfigValidationPathNotFound, Name, Path); + } // if + + var validationError = ConfigCommon.ValidateArray(Arguments, "Argument", "Arguments", ownerTag); + if (validationError != null) return validationError; + + for (int index = 0; index < Arguments.Length; index++) + { + Arguments[index] = ConfigCommon.Normalize(Arguments[index]); + if (string.IsNullOrEmpty(Arguments[index])) + { + ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); ; + } // if + } // for + + return null; + } // Validate + + public static string ValidateArray(RecorderConfig[] recorders, string arrayElementTag, string arrayTag, string ownerTag) + { + var validationError = ConfigCommon.ValidateArray(recorders, arrayElementTag, arrayTag, ownerTag); + if (validationError != null) return validationError; + + var set = new HashSet(); + foreach (var recorder in recorders) + { + validationError = recorder.Validate(arrayElementTag); + if (validationError != null) return validationError; + + if (!set.Add(recorder.Name)) + { + return ConfigCommon.ErrorDuplicatedEntry(arrayTag, arrayElementTag, "name", recorder.Name); + } // if + } // foreach + + return null; + } // ValidateArray + } // class RecorderConfig +} //namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs index 6aad2bc4..f5eb9807 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs @@ -1,90 +1,90 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlRoot(ElementName = "UserConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class UserConfig - { - private string[] preferredLanguagesList; - - [XmlElement("Telemetry")] - public TelemetryConfiguration Telemetry - { - get; - set; - } // Telemetry - - [XmlElement("PreferredLanguages")] - public string PreferredLanguages - { - get; - set; - } // PreferredLanguages - - [XmlElement("Record")] - public RecordConfig Record - { - get; - set; - } // Record - - /* - [XmlElement("EPG")] - public EpgConfig Epg - { - get; - set; - } // Epg - */ - - public bool ChannelNumberStandardDefinitionPriority - { - get; - set; - } // ChannelNumberStandardDefinitionPriority - - [XmlElement("Configuration")] - public XmlConfigurationItems Configuration - { - get; - set; - } // Configuration - - [XmlIgnore] - public string[] PreferredLanguagesList - { - get - { - if (preferredLanguagesList == null) - { - preferredLanguagesList = PreferredLanguages.Split(',', ';'); - } // if - - return preferredLanguagesList; - } // get - } // PreferredLanguagesList - - internal string Validate() - { - string validationError; - string ownerTag = "UserConfiguration"; - - if (Record == null) return ConfigCommon.ErrorMissingTag("Record", ownerTag); - validationError = Record.Validate("Record"); - if (validationError != null) return validationError; - - return null; - } // Validate - } // UserConfig -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlRoot(ElementName = "UserConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class UserConfig + { + private string[] preferredLanguagesList; + + [XmlElement("Telemetry")] + public TelemetryConfiguration Telemetry + { + get; + set; + } // Telemetry + + [XmlElement("PreferredLanguages")] + public string PreferredLanguages + { + get; + set; + } // PreferredLanguages + + [XmlElement("Record")] + public RecordConfig Record + { + get; + set; + } // Record + + /* + [XmlElement("EPG")] + public EpgConfig Epg + { + get; + set; + } // Epg + */ + + public bool ChannelNumberStandardDefinitionPriority + { + get; + set; + } // ChannelNumberStandardDefinitionPriority + + [XmlElement("Configuration")] + public XmlConfigurationItems Configuration + { + get; + set; + } // Configuration + + [XmlIgnore] + public string[] PreferredLanguagesList + { + get + { + if (preferredLanguagesList == null) + { + preferredLanguagesList = PreferredLanguages.Split(',', ';'); + } // if + + return preferredLanguagesList; + } // get + } // PreferredLanguagesList + + internal string Validate() + { + string validationError; + string ownerTag = "UserConfiguration"; + + if (Record == null) return ConfigCommon.ErrorMissingTag("Record", ownerTag); + validationError = Record.Validate("Record"); + if (validationError != null) return validationError; + + return null; + } // Validate + } // UserConfig +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs index 41ff2be0..1c61a157 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs @@ -1,83 +1,83 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(TypeName="Bootstrap", Namespace=SerializationCommon.XmlNamespace)] - public class BootstrapData - { - public BootstrapMethod Method - { - get; - set; - } // Method - - public string MulticastAddress - { - get; - set; - } // MulticastAddress - - public int MulticastPort - { - get; - set; - } // MulticastPort - - // The following properties are reserved for future use - // For now, we only support MANUAL MULTICAST bootstrapping - - [XmlElement("DiscoveryURL")] - public string DiscoveryUrl - { - get; - set; - } // DiscoveryUrl - - [XmlElement("CustomService-TCP")] - public string CustomServiceTcp - { - get; - set; - } // CustomServiceTcp - - [XmlElement("CustomService-UDP")] - public string CustomServiceUdp - { - get; - set; - } // CustomServiceUdp - - // TODO: Implement - public string Validate(string ownerTag) - { - // Code from UserConfig; moved here; pending implementation - - /* - RootMulticastAddress = ConfigCommon.Normalize(RootMulticastAddress); - if (string.IsNullOrEmpty(RootMulticastAddress)) - { - return ConfigCommon.ErrorMissingEmpty("RootMulticastAddress", ownerTag); - } // if - if (!IPAddress.TryParse(RootMulticastAddress, out dummyIp)) - { - return ConfigCommon.ErrorValueType("RootMulticastAddress", Properties.Texts.UserConfigValidationIpAddress, RootMulticastAddress); - } // if - - if ((RootMulticastPort <= 0) || (RootMulticastPort > 65535)) - { - return ConfigCommon.ErrorValueType("RootMulticastPort", Properties.Texts.UserConfigValidationIpPort, RootMulticastPort.ToString()); - } // if - */ - - return null; - } // Validate - } // class BootstrapData -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(TypeName="Bootstrap", Namespace=SerializationCommon.XmlNamespace)] + public class BootstrapData + { + public BootstrapMethod Method + { + get; + set; + } // Method + + public string MulticastAddress + { + get; + set; + } // MulticastAddress + + public int MulticastPort + { + get; + set; + } // MulticastPort + + // The following properties are reserved for future use + // For now, we only support MANUAL MULTICAST bootstrapping + + [XmlElement("DiscoveryURL")] + public string DiscoveryUrl + { + get; + set; + } // DiscoveryUrl + + [XmlElement("CustomService-TCP")] + public string CustomServiceTcp + { + get; + set; + } // CustomServiceTcp + + [XmlElement("CustomService-UDP")] + public string CustomServiceUdp + { + get; + set; + } // CustomServiceUdp + + // TODO: Implement + public string Validate(string ownerTag) + { + // Code from UserConfig; moved here; pending implementation + + /* + RootMulticastAddress = ConfigCommon.Normalize(RootMulticastAddress); + if (string.IsNullOrEmpty(RootMulticastAddress)) + { + return ConfigCommon.ErrorMissingEmpty("RootMulticastAddress", ownerTag); + } // if + if (!IPAddress.TryParse(RootMulticastAddress, out dummyIp)) + { + return ConfigCommon.ErrorValueType("RootMulticastAddress", Properties.Texts.UserConfigValidationIpAddress, RootMulticastAddress); + } // if + + if ((RootMulticastPort <= 0) || (RootMulticastPort > 65535)) + { + return ConfigCommon.ErrorValueType("RootMulticastPort", Properties.Texts.UserConfigValidationIpPort, RootMulticastPort.ToString()); + } // if + */ + + return null; + } // Validate + } // class BootstrapData +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs index 17273193..63e34aeb 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs @@ -1,36 +1,36 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - /// - /// WARNING: Only 'Manual' is supported right now - /// - /// For now, we only support MANUAL bootstrapping - public enum BootstrapMethod - { - [XmlEnum("automatic")] - Auto, - - [XmlEnum("IANA")] - Iana, - - [XmlEnum("DVB-Service-DNS")] - DvbServiceDns, - - [XmlEnum("service-DNS-domain")] - ServiceDnsDomain, - - [XmlEnum("service-names")] - ServiceNames, - - [XmlEnum("manual")] - Manual - } // enum BootstrapMethod -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + /// + /// WARNING: Only 'Manual' is supported right now + /// + /// For now, we only support MANUAL bootstrapping + public enum BootstrapMethod + { + [XmlEnum("automatic")] + Auto, + + [XmlEnum("IANA")] + Iana, + + [XmlEnum("DVB-Service-DNS")] + DvbServiceDns, + + [XmlEnum("service-DNS-domain")] + ServiceDnsDomain, + + [XmlEnum("service-names")] + ServiceNames, + + [XmlEnum("manual")] + Manual + } // enum BootstrapMethod +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs index 430db883..966fe398 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs @@ -1,22 +1,22 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - public class FriendlyNames - { - [XmlElement("ServiceProviders")] - public SpFriendlyNames[] Providers - { - get; - set; - } // Providers - } // class FriendlyNames -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + public class FriendlyNames + { + [XmlElement("ServiceProviders")] + public SpFriendlyNames[] Providers + { + get; + set; + } // Providers + } // class FriendlyNames +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs index 8f720950..74e8d943 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs @@ -1,36 +1,36 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] - public class Identification - { - [XmlAttribute("id")] - public string Id - { - get; - set; - } // Id - - [XmlElement("Localized")] - public LocalizedIdentification[] Localized - { - get; - set; - } // Localized - - public string LogosPackageName - { - get; - set; - } // LogosPackageName - } // class ContentProviderIdentification -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] + public class Identification + { + [XmlAttribute("id")] + public string Id + { + get; + set; + } // Id + + [XmlElement("Localized")] + public LocalizedIdentification[] Localized + { + get; + set; + } // Localized + + public string LogosPackageName + { + get; + set; + } // LogosPackageName + } // class ContentProviderIdentification +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs index 98a57908..cdd31864 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs @@ -1,49 +1,49 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlRoot(ElementName = "IpTvProvider", Namespace = SerializationCommon.XmlNamespace)] - public class IpTvProviderData - { - public Identification Identification - { - get; - set; - } // Identification - - public BootstrapData Bootstrap - { - get; - set; - } // Bootstrap - - [XmlElement("FriendlyNames")] - public FriendlyNames FriendlyNames - { - get; - set; - } // FriendlyNames - - public static IpTvProviderData Load(string xmlPath) - { - return XmlSerialization.Deserialize(xmlPath,true); - } // Load - - public string Validate() - { - // TODO: validate content provider data - // The implementation of this method is not top-priority, as the xml is (for now) a 'private' file - - return null; - } // Validate - } // class IpTvProviderData -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Serialization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlRoot(ElementName = "IpTvProvider", Namespace = SerializationCommon.XmlNamespace)] + public class IpTvProviderData + { + public Identification Identification + { + get; + set; + } // Identification + + public BootstrapData Bootstrap + { + get; + set; + } // Bootstrap + + [XmlElement("FriendlyNames")] + public FriendlyNames FriendlyNames + { + get; + set; + } // FriendlyNames + + public static IpTvProviderData Load(string xmlPath) + { + return XmlSerialization.Deserialize(xmlPath,true); + } // Load + + public string Validate() + { + // TODO: validate content provider data + // The implementation of this method is not top-priority, as the xml is (for now) a 'private' file + + return null; + } // Validate + } // class IpTvProviderData +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs index 92b4483a..c748e19d 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs @@ -1,18 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [XmlType(Namespace=SerializationCommon.XmlNamespace)] - public class LocalizedIdentification : LocalizedObject - { - public string Name; - public string Description; - } // class LocalizedIdentification -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [XmlType(Namespace=SerializationCommon.XmlNamespace)] + public class LocalizedIdentification : LocalizedObject + { + public string Name; + public string Description; + } // class LocalizedIdentification +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs index 52de3394..2ec69b49 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs @@ -1,15 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - public class SerializationCommon - { - public const string XmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration:ContentProvider"; - } // class CommonSerialization -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + public class SerializationCommon + { + public const string XmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration:ContentProvider"; + } // class CommonSerialization +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs index 1f433b70..ce3f4c3e 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] - public class SpFriendlyName - { - [XmlAttribute("domainName")] - public string Domain - { - get; - set; - } // Domain - - [XmlText] - public string Name - { - get; - set; - } // Name - } // class SpFriendlyName -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] + public class SpFriendlyName + { + [XmlAttribute("domainName")] + public string Domain + { + get; + set; + } // Domain + + [XmlText] + public string Name + { + get; + set; + } // Name + } // class SpFriendlyName +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs index bf3e3005..c09c8ad3 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs @@ -1,30 +1,30 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(TypeName="SP-FriendlyNames", Namespace=SerializationCommon.XmlNamespace)] - public class SpFriendlyNames : ILocalizedObject - { - [XmlAttribute("culture")] - public string CultureName - { - get; - set; - } // CultureName - - [XmlElement("Provider")] - public SpFriendlyName[] Names - { - get; - set; - } // Names - } // class ServiceProviderFriendlyName -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(TypeName="SP-FriendlyNames", Namespace=SerializationCommon.XmlNamespace)] + public class SpFriendlyNames : ILocalizedObject + { + [XmlAttribute("culture")] + public string CultureName + { + get; + set; + } // CultureName + + [XmlElement("Provider")] + public SpFriendlyName[] Names + { + get; + set; + } // Names + } // class ServiceProviderFriendlyName +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs index 76b521bc..e31f3486 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs @@ -1,85 +1,85 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Logos -{ - [Serializable] - [XmlRoot(ElementName = "Logos-Domains", Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class DomainMappingsXml - { - [XmlElement("Package")] - public DomainPackage[] Packages - { - get; - set; - } // Packages - - [XmlIgnore] - public string BasePath - { - get; - set; - } // BasePath - } // class DomainPackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class DomainPackage - { - [XmlAttribute("name")] - public string PackageName - { - get; - set; - } // PackageName - - [XmlElement("Mapping")] - public DomainMapping[] Mappings - { - get; - set; - } // Domains - - public override string ToString() - { - return string.Format("Domain package: {0}", PackageName); - } // ToString - } // DomainPackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class DomainMapping - { - [XmlAttribute("domainName")] - public string DomainName - { - get; - set; - } // Id - - [XmlAttribute("mandatory")] - [DefaultValue(true)] - public bool Mandatory - { - get; - set; - } // Mandatory - - [XmlText] - public string ReplacementDomain - { - get; - set; - } // ReplacementDomain - - public override string ToString() - { - return string.Format("Domain mapping: {0}=>{1}", DomainName, ReplacementDomain); - } // ToString - } // class DomainMapping -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [Serializable] + [XmlRoot(ElementName = "Logos-Domains", Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class DomainMappingsXml + { + [XmlElement("Package")] + public DomainPackage[] Packages + { + get; + set; + } // Packages + + [XmlIgnore] + public string BasePath + { + get; + set; + } // BasePath + } // class DomainPackage + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class DomainPackage + { + [XmlAttribute("name")] + public string PackageName + { + get; + set; + } // PackageName + + [XmlElement("Mapping")] + public DomainMapping[] Mappings + { + get; + set; + } // Domains + + public override string ToString() + { + return string.Format("Domain package: {0}", PackageName); + } // ToString + } // DomainPackage + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class DomainMapping + { + [XmlAttribute("domainName")] + public string DomainName + { + get; + set; + } // Id + + [XmlAttribute("mandatory")] + [DefaultValue(true)] + public bool Mandatory + { + get; + set; + } // Mandatory + + [XmlText] + public string ReplacementDomain + { + get; + set; + } // ReplacementDomain + + public override string ToString() + { + return string.Format("Domain mapping: {0}=>{1}", DomainName, ReplacementDomain); + } // ToString + } // class DomainMapping +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs index 2408cc58..43997585 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs @@ -1,43 +1,43 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Logos -{ - public class LogosCommon - { - public const string LogoMappingsXmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration:Mappings"; - - public static ServiceMappingsXml ParseServiceMappingsXml(string filename) - { - var xmlMappings = XmlSerialization.Deserialize(filename, true); - xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); - - return xmlMappings; - } // ParseServiceMappingsXml - - public static DomainMappingsXml ParseDomainMappingsXml(string filename) - { - var xmlMappings = XmlSerialization.Deserialize(filename, true); - xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); - - return xmlMappings; - } // ParseDomainMappingsXml - - public static ProviderMappingsXml ParseProviderMappingsXml(string filename) - { - var xmlMappings = XmlSerialization.Deserialize(filename, true); - xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); - - return xmlMappings; - } // ParseProviderMappingsXml - } // class Common -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + public class LogosCommon + { + public const string LogoMappingsXmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration:Mappings"; + + public static ServiceMappingsXml ParseServiceMappingsXml(string filename) + { + var xmlMappings = XmlSerialization.Deserialize(filename, true); + xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); + + return xmlMappings; + } // ParseServiceMappingsXml + + public static DomainMappingsXml ParseDomainMappingsXml(string filename) + { + var xmlMappings = XmlSerialization.Deserialize(filename, true); + xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); + + return xmlMappings; + } // ParseDomainMappingsXml + + public static ProviderMappingsXml ParseProviderMappingsXml(string filename) + { + var xmlMappings = XmlSerialization.Deserialize(filename, true); + xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); + + return xmlMappings; + } // ParseProviderMappingsXml + } // class Common +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs index e5e64dd2..90996af4 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs @@ -1,84 +1,84 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Logos -{ - [Serializable] - [XmlRoot(ElementName = "Logos-Providers", Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ProviderMappingsXml - { - [XmlElement("Package")] - public ProviderPackage[] Packages - { - get; - set; - } // Packages - - [XmlIgnore] - public string BasePath - { - get; - set; - } // BasePath - } // class ProviderMappingsXml - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ProviderPackage - { - [XmlAttribute("name")] - public string PackageName - { - get; - set; - } // PackageName - - [XmlElement("Mapping")] - public ProviderMapping[] Mappings - { - get; - set; - } // Mappings - - public override string ToString() - { - return string.Format("Provider package: {0}", PackageName); - } // ToString - } // DomainPackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ProviderMapping - { - [XmlAttribute("domainName")] - public string DomainName - { - get; - set; - } // Id - - [XmlAttribute("annotation")] - public string Annotation - { - get; - set; - } // Annotation - - [XmlAttribute("logo")] - public string LogoFile - { - get; - set; - } // LogoFile - - public override string ToString() - { - return string.Format("Provider mapping: {0}=>{1}", DomainName, LogoFile); - } // ToString - } // class ProviderMapping -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [Serializable] + [XmlRoot(ElementName = "Logos-Providers", Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ProviderMappingsXml + { + [XmlElement("Package")] + public ProviderPackage[] Packages + { + get; + set; + } // Packages + + [XmlIgnore] + public string BasePath + { + get; + set; + } // BasePath + } // class ProviderMappingsXml + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ProviderPackage + { + [XmlAttribute("name")] + public string PackageName + { + get; + set; + } // PackageName + + [XmlElement("Mapping")] + public ProviderMapping[] Mappings + { + get; + set; + } // Mappings + + public override string ToString() + { + return string.Format("Provider package: {0}", PackageName); + } // ToString + } // DomainPackage + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ProviderMapping + { + [XmlAttribute("domainName")] + public string DomainName + { + get; + set; + } // Id + + [XmlAttribute("annotation")] + public string Annotation + { + get; + set; + } // Annotation + + [XmlAttribute("logo")] + public string LogoFile + { + get; + set; + } // LogoFile + + public override string ToString() + { + return string.Format("Provider mapping: {0}=>{1}", DomainName, LogoFile); + } // ToString + } // class ProviderMapping +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs index 9542da5a..3d9b90ec 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs @@ -1,116 +1,116 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Schema2014.Logos -{ - [Serializable] - [XmlRoot(ElementName= "Logos-Services", Namespace=LogosCommon.LogoMappingsXmlNamespace)] - public class ServiceMappingsXml - { - [XmlElement("Package")] - public ServicePackage[] Packages - { - get; - set; - } // Packages - - [XmlIgnore] - public string BasePath - { - get; - set; - } // BasePath - } // class ServiceMappingsXml - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ServicePackage - { - [XmlAttribute("name")] - public string PackageName - { - get; - set; - } // PackageName - - [XmlElement("Domain")] - public ServiceDomains[] Domains - { - get; - set; - } // Domains - - public override string ToString() - { - return string.Format("Service package: {0}", PackageName); - } // ToString - } // ServicePackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ServiceDomains - { - [XmlAttribute("name")] - public string DomainName - { - get; - set; - } // DomainName - - [XmlAttribute("redirectDomain")] - public string RedirectDomainName - { - get; - set; - } // RedirectDomainName - - [XmlElement("Mapping")] - public ServiceMapping[] Mappings - { - get; - set; - } // Mappings - - public override string ToString() - { - return string.Format("Service domain: {0}", DomainName); - } // ToString - } // class ServiceDomains - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ServiceMapping - { - [XmlAttribute("serviceName")] - public string Name - { - get; - set; - } // Name - - [XmlAttribute("logo")] - public string Logo - { - get; - set; - } // Logo - -#if DEBUG - [XmlAttribute("remarks")] - public string Remarks - { - get; - set; - } // Remarks -#endif - - public override string ToString() - { - return string.Format("Service mapping: {0}=>{1}", Name, Logo); - } // ToString - } // class ServiceMapping -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [Serializable] + [XmlRoot(ElementName= "Logos-Services", Namespace=LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceMappingsXml + { + [XmlElement("Package")] + public ServicePackage[] Packages + { + get; + set; + } // Packages + + [XmlIgnore] + public string BasePath + { + get; + set; + } // BasePath + } // class ServiceMappingsXml + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ServicePackage + { + [XmlAttribute("name")] + public string PackageName + { + get; + set; + } // PackageName + + [XmlElement("Domain")] + public ServiceDomains[] Domains + { + get; + set; + } // Domains + + public override string ToString() + { + return string.Format("Service package: {0}", PackageName); + } // ToString + } // ServicePackage + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceDomains + { + [XmlAttribute("name")] + public string DomainName + { + get; + set; + } // DomainName + + [XmlAttribute("redirectDomain")] + public string RedirectDomainName + { + get; + set; + } // RedirectDomainName + + [XmlElement("Mapping")] + public ServiceMapping[] Mappings + { + get; + set; + } // Mappings + + public override string ToString() + { + return string.Format("Service domain: {0}", DomainName); + } // ToString + } // class ServiceDomains + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceMapping + { + [XmlAttribute("serviceName")] + public string Name + { + get; + set; + } // Name + + [XmlAttribute("logo")] + public string Logo + { + get; + set; + } // Logo + +#if DEBUG + [XmlAttribute("remarks")] + public string Remarks + { + get; + set; + } // Remarks +#endif + + public override string ToString() + { + return string.Format("Service mapping: {0}=>{1}", Name, Logo); + } // ToString + } // class ServiceMapping +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs index de4387f1..1c498106 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs @@ -1,105 +1,105 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Configuration.Settings.Network.Editors -{ - partial class NetworkSettingsEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NetworkSettingsEditor)); - this.groupBoxMulticastProxy = new System.Windows.Forms.GroupBox(); - this.labelWarning = new System.Windows.Forms.Label(); - this.checkBoxEnableMulticastProxy = new System.Windows.Forms.CheckBox(); - this.parametersEditorMulticastProxy = new Project.IpTv.UiServices.Configuration.Editors.ArgumentEditor(); - this.pictureIconWarning = new System.Windows.Forms.PictureBox(); - this.groupBoxMulticastProxy.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconWarning)).BeginInit(); - this.SuspendLayout(); - // - // groupBoxMulticastProxy - // - resources.ApplyResources(this.groupBoxMulticastProxy, "groupBoxMulticastProxy"); - this.groupBoxMulticastProxy.Controls.Add(this.labelWarning); - this.groupBoxMulticastProxy.Controls.Add(this.pictureIconWarning); - this.groupBoxMulticastProxy.Controls.Add(this.parametersEditorMulticastProxy); - this.groupBoxMulticastProxy.Controls.Add(this.checkBoxEnableMulticastProxy); - this.groupBoxMulticastProxy.Name = "groupBoxMulticastProxy"; - this.groupBoxMulticastProxy.TabStop = false; - // - // labelWarning - // - resources.ApplyResources(this.labelWarning, "labelWarning"); - this.labelWarning.Name = "labelWarning"; - // - // checkBoxEnableMulticastProxy - // - resources.ApplyResources(this.checkBoxEnableMulticastProxy, "checkBoxEnableMulticastProxy"); - this.checkBoxEnableMulticastProxy.Name = "checkBoxEnableMulticastProxy"; - this.checkBoxEnableMulticastProxy.UseVisualStyleBackColor = true; - this.checkBoxEnableMulticastProxy.CheckedChanged += new System.EventHandler(this.checkBoxEnableMulticastProxy_CheckedChanged); - // - // parametersEditorMulticastProxy - // - resources.ApplyResources(this.parametersEditorMulticastProxy, "parametersEditorMulticastProxy"); - this.parametersEditorMulticastProxy.CloseBraceText = null; - this.parametersEditorMulticastProxy.CommandLine = ""; - this.parametersEditorMulticastProxy.Name = "parametersEditorMulticastProxy"; - this.parametersEditorMulticastProxy.OpenBraceText = null; - this.parametersEditorMulticastProxy.ParametersList = null; - this.parametersEditorMulticastProxy.CommandLineChanged += new System.EventHandler(this.parametersEditorMulticastProxy_CommandLineChanged); - // - // pictureIconWarning - // - resources.ApplyResources(this.pictureIconWarning, "pictureIconWarning"); - this.pictureIconWarning.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Status_Warning_16x16; - this.pictureIconWarning.Name = "pictureIconWarning"; - this.pictureIconWarning.TabStop = false; - // - // NetworkSettingsEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxMulticastProxy); - this.Name = "NetworkSettingsEditor"; - this.Load += new System.EventHandler(this.NetworkSettingsEditor_Load); - this.groupBoxMulticastProxy.ResumeLayout(false); - this.groupBoxMulticastProxy.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconWarning)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxMulticastProxy; - private System.Windows.Forms.CheckBox checkBoxEnableMulticastProxy; - private Configuration.Editors.ArgumentEditor parametersEditorMulticastProxy; - private System.Windows.Forms.PictureBox pictureIconWarning; - private System.Windows.Forms.Label labelWarning; - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Configuration.Settings.Network.Editors +{ + partial class NetworkSettingsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NetworkSettingsEditor)); + this.groupBoxMulticastProxy = new System.Windows.Forms.GroupBox(); + this.labelWarning = new System.Windows.Forms.Label(); + this.checkBoxEnableMulticastProxy = new System.Windows.Forms.CheckBox(); + this.parametersEditorMulticastProxy = new IpTviewr.UiServices.Configuration.Editors.ArgumentEditor(); + this.pictureIconWarning = new System.Windows.Forms.PictureBox(); + this.groupBoxMulticastProxy.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconWarning)).BeginInit(); + this.SuspendLayout(); + // + // groupBoxMulticastProxy + // + resources.ApplyResources(this.groupBoxMulticastProxy, "groupBoxMulticastProxy"); + this.groupBoxMulticastProxy.Controls.Add(this.labelWarning); + this.groupBoxMulticastProxy.Controls.Add(this.pictureIconWarning); + this.groupBoxMulticastProxy.Controls.Add(this.parametersEditorMulticastProxy); + this.groupBoxMulticastProxy.Controls.Add(this.checkBoxEnableMulticastProxy); + this.groupBoxMulticastProxy.Name = "groupBoxMulticastProxy"; + this.groupBoxMulticastProxy.TabStop = false; + // + // labelWarning + // + resources.ApplyResources(this.labelWarning, "labelWarning"); + this.labelWarning.Name = "labelWarning"; + // + // checkBoxEnableMulticastProxy + // + resources.ApplyResources(this.checkBoxEnableMulticastProxy, "checkBoxEnableMulticastProxy"); + this.checkBoxEnableMulticastProxy.Name = "checkBoxEnableMulticastProxy"; + this.checkBoxEnableMulticastProxy.UseVisualStyleBackColor = true; + this.checkBoxEnableMulticastProxy.CheckedChanged += new System.EventHandler(this.checkBoxEnableMulticastProxy_CheckedChanged); + // + // parametersEditorMulticastProxy + // + resources.ApplyResources(this.parametersEditorMulticastProxy, "parametersEditorMulticastProxy"); + this.parametersEditorMulticastProxy.CloseBraceText = null; + this.parametersEditorMulticastProxy.CommandLine = ""; + this.parametersEditorMulticastProxy.Name = "parametersEditorMulticastProxy"; + this.parametersEditorMulticastProxy.OpenBraceText = null; + this.parametersEditorMulticastProxy.ParametersList = null; + this.parametersEditorMulticastProxy.CommandLineChanged += new System.EventHandler(this.parametersEditorMulticastProxy_CommandLineChanged); + // + // pictureIconWarning + // + resources.ApplyResources(this.pictureIconWarning, "pictureIconWarning"); + this.pictureIconWarning.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Status_Warning_16x16; + this.pictureIconWarning.Name = "pictureIconWarning"; + this.pictureIconWarning.TabStop = false; + // + // NetworkSettingsEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxMulticastProxy); + this.Name = "NetworkSettingsEditor"; + this.Load += new System.EventHandler(this.NetworkSettingsEditor_Load); + this.groupBoxMulticastProxy.ResumeLayout(false); + this.groupBoxMulticastProxy.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconWarning)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxMulticastProxy; + private System.Windows.Forms.CheckBox checkBoxEnableMulticastProxy; + private Configuration.Editors.ArgumentEditor parametersEditorMulticastProxy; + private System.Windows.Forms.PictureBox pictureIconWarning; + private System.Windows.Forms.Label labelWarning; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs index 52885ff2..f6a2c4ef 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs @@ -1,113 +1,113 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration.Settings.Network.Editors -{ - public partial class NetworkSettingsEditor : UserControl, IConfigurationItemEditor - { - private int ManualUpdateLock; - - public NetworkSettingsEditor() - { - InitializeComponent(); - - parametersEditorMulticastProxy.ParametersList = Properties.SettingsTexts.NetworkUpdProxyParameters; - } // constructor - - public NetworkSettings Settings - { - get; - set; - } // Settings - - #region IConfigurationItemEditor implementation - - UserControl IConfigurationItemEditor.UserInterfaceItem - { - get { return this; } - } // IConfigurationItemEditor.UserInterfaceItem - - bool IConfigurationItemEditor.SupportsWinFormsValidation - { - get { return false; } - } // IConfigurationItemEditor.SupportsWinFormsValidation - - public bool IsDataChanged - { - get; - protected set; - } // IsDataChanged - - public bool IsAppRestartNeeded - { - get { return false; } - } // IsAppRestartNeeded - - bool IConfigurationItemEditor.Validate() - { - if ((checkBoxEnableMulticastProxy.Enabled) && (parametersEditorMulticastProxy.CommandLine == "")) - { - MessageBox.Show(this, Properties.SettingsTexts.NetworkMulticastProxyValidation, Properties.SettingsTexts.NetworkValidationErrorCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - return false; - } // if - - return true; - } // IConfigurationItemEditor.Validate - - IConfigurationItem IConfigurationItemEditor.GetNewData() - { - Settings.MulticastProxy.IsEnabled = checkBoxEnableMulticastProxy.Checked; - Settings.MulticastProxy.ProxyConfiguration = parametersEditorMulticastProxy.CommandLine; - - return Settings; - } // IConfigurationItemEditor.GetNewData - - void IConfigurationItemEditor.EditorClosing(out bool cancelClose) - { - cancelClose = false; - } // IConfigurationItemEditor.EditorClosing - - void IConfigurationItemEditor.EditorClosed(bool userCancel) - { - // no op - } // IConfigurationItemEditor.EditorClosed - - #endregion - - private void NetworkSettingsEditor_Load(object sender, EventArgs e) - { - ManualUpdateLock++; - checkBoxEnableMulticastProxy.Checked = Settings.MulticastProxy.IsEnabled; - parametersEditorMulticastProxy.Enabled = checkBoxEnableMulticastProxy.Checked; - parametersEditorMulticastProxy.OpenBraceText = MulticastProxy.ParameterOpenBrace; - parametersEditorMulticastProxy.CloseBraceText = MulticastProxy.ParameterCloseBrace; - parametersEditorMulticastProxy.CommandLine = Settings.MulticastProxy.ProxyConfiguration; - parametersEditorMulticastProxy.ParametersList = Properties.SettingsTexts.NetworkUpdProxyParameters; - ManualUpdateLock--; - } // NetworkSettingsEditor_Load - - private void checkBoxEnableMulticastProxy_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - parametersEditorMulticastProxy.Enabled = checkBoxEnableMulticastProxy.Checked; - IsDataChanged = true; - } // checkBoxEnableMulticastProxy_CheckedChanged - - private void parametersEditorMulticastProxy_CommandLineChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - IsDataChanged = true; - } // parametersEditorMulticastProxy_CommandLineChanged - } // class NetworkSettingsEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Settings.Network.Editors +{ + public partial class NetworkSettingsEditor : UserControl, IConfigurationItemEditor + { + private int ManualUpdateLock; + + public NetworkSettingsEditor() + { + InitializeComponent(); + + parametersEditorMulticastProxy.ParametersList = Properties.SettingsTexts.NetworkUpdProxyParameters; + } // constructor + + public NetworkSettings Settings + { + get; + set; + } // Settings + + #region IConfigurationItemEditor implementation + + UserControl IConfigurationItemEditor.UserInterfaceItem + { + get { return this; } + } // IConfigurationItemEditor.UserInterfaceItem + + bool IConfigurationItemEditor.SupportsWinFormsValidation + { + get { return false; } + } // IConfigurationItemEditor.SupportsWinFormsValidation + + public bool IsDataChanged + { + get; + protected set; + } // IsDataChanged + + public bool IsAppRestartNeeded + { + get { return false; } + } // IsAppRestartNeeded + + bool IConfigurationItemEditor.Validate() + { + if ((checkBoxEnableMulticastProxy.Enabled) && (parametersEditorMulticastProxy.CommandLine == "")) + { + MessageBox.Show(this, Properties.SettingsTexts.NetworkMulticastProxyValidation, Properties.SettingsTexts.NetworkValidationErrorCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } // if + + return true; + } // IConfigurationItemEditor.Validate + + IConfigurationItem IConfigurationItemEditor.GetNewData() + { + Settings.MulticastProxy.IsEnabled = checkBoxEnableMulticastProxy.Checked; + Settings.MulticastProxy.ProxyConfiguration = parametersEditorMulticastProxy.CommandLine; + + return Settings; + } // IConfigurationItemEditor.GetNewData + + void IConfigurationItemEditor.EditorClosing(out bool cancelClose) + { + cancelClose = false; + } // IConfigurationItemEditor.EditorClosing + + void IConfigurationItemEditor.EditorClosed(bool userCancel) + { + // no op + } // IConfigurationItemEditor.EditorClosed + + #endregion + + private void NetworkSettingsEditor_Load(object sender, EventArgs e) + { + ManualUpdateLock++; + checkBoxEnableMulticastProxy.Checked = Settings.MulticastProxy.IsEnabled; + parametersEditorMulticastProxy.Enabled = checkBoxEnableMulticastProxy.Checked; + parametersEditorMulticastProxy.OpenBraceText = MulticastProxy.ParameterOpenBrace; + parametersEditorMulticastProxy.CloseBraceText = MulticastProxy.ParameterCloseBrace; + parametersEditorMulticastProxy.CommandLine = Settings.MulticastProxy.ProxyConfiguration; + parametersEditorMulticastProxy.ParametersList = Properties.SettingsTexts.NetworkUpdProxyParameters; + ManualUpdateLock--; + } // NetworkSettingsEditor_Load + + private void checkBoxEnableMulticastProxy_CheckedChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + parametersEditorMulticastProxy.Enabled = checkBoxEnableMulticastProxy.Checked; + IsDataChanged = true; + } // checkBoxEnableMulticastProxy_CheckedChanged + + private void parametersEditorMulticastProxy_CommandLineChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + IsDataChanged = true; + } // parametersEditorMulticastProxy_CommandLineChanged + } // class NetworkSettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx index 4617f4ab..0a6f2fa8 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx @@ -1,270 +1,270 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - - Bottom, Left - - - labelWarning - - - - 0 - - - ¡Warning! Existing scheduled recordings will not use the new proxy settings. It's necessary to manually edit them. - - - Multicast proxy - - - Project.IpTv.UiServices.Configuration.Editors.ParametersEditor, UiServices.Configuration, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null - - - pictureIconWarning - - - - 441, 200 - - - 16, 16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 311, 17 - - - True - - - Top, Bottom, Left, Right - - - 464, 282 - - - groupBoxMulticastProxy - - - groupBoxMulticastProxy - - - parametersEditorMulticastProxy - - - groupBoxMulticastProxy - - - 419, 32 - - - 2 - - - Top, Bottom, Left, Right - - - 2 - - - 17, 248 - - - Use a multicast proxy for RTP or UDP multicast TV channels - - - CenterImage - - - 0 - - - checkBoxEnableMulticastProxy - - - 3 - - - 39, 248 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NetworkSettingsEditor - - - 3 - - - groupBoxMulticastProxy - - - groupBoxMulticastProxy - - - 6, 19 - - - 1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - Bottom, Left - - - 17, 42 - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6, 13 - - - 470, 320 - - - $this - - - 3, 3 - - - True - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + + Bottom, Left + + + labelWarning + + + + 0 + + + ¡Warning! Existing scheduled recordings will not use the new proxy settings. It's necessary to manually edit them. + + + Multicast proxy + + + IpTviewr.UiServices.Configuration.Editors.ParametersEditor, UiServices.Configuration, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + + pictureIconWarning + + + + 441, 200 + + + 16, 16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 311, 17 + + + True + + + Top, Bottom, Left, Right + + + 464, 282 + + + groupBoxMulticastProxy + + + groupBoxMulticastProxy + + + parametersEditorMulticastProxy + + + groupBoxMulticastProxy + + + 419, 32 + + + 2 + + + Top, Bottom, Left, Right + + + 2 + + + 17, 248 + + + Use a multicast proxy for RTP or UDP multicast TV channels + + + CenterImage + + + 0 + + + checkBoxEnableMulticastProxy + + + 3 + + + 39, 248 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NetworkSettingsEditor + + + 3 + + + groupBoxMulticastProxy + + + groupBoxMulticastProxy + + + 6, 19 + + + 1 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + Bottom, Left + + + 17, 42 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 13 + + + 470, 320 + + + $this + + + 3, 3 + + + True + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs index 84a5c963..d434d30b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs @@ -1,67 +1,67 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Settings.Network -{ - [Serializable] - public class MulticastProxy - { - public const string ParameterOpenBrace = "{param:"; - public const string ParameterCloseBrace = "}"; - - public static MulticastProxy GetDefaultSettings() - { - var result = new MulticastProxy() - { - IsEnabled = false, - ProxyConfiguration = "http://proxy-host:8888/{param:protocol}/{param:multicastAddress}:{param:multicastPort}" - }; - - return result; - } // GetDefaultSettings - - public bool IsEnabled - { - get; - set; - } // IsEnabled - - public string ProxyConfiguration - { - get; - set; - } // ProxyConfiguration - - public string GetProxiedLocationUrl(string protocol, string address, ushort port) - { - if (!IsEnabled) - { - return string.Format("{0}://@{1}:{2}", protocol, address, port); - } // if - - var paramKeys = new string[] - { - "protocol", - "protocolU", - "multicastAddress", - "multicastPort" - }; - var paramValues = new string[] - { - protocol, - protocol.ToUpperInvariant(), - address, - port.ToString() - }; - var parameters = ArgumentsManager.CreateParameters(paramKeys, paramValues, false); - - return ArgumentsManager.ExpandArgument(ProxyConfiguration, parameters, ParameterOpenBrace, ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); - } // GetProxiedLocationUrl - } // class MulticastProxy -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Settings.Network +{ + [Serializable] + public class MulticastProxy + { + public const string ParameterOpenBrace = "{param:"; + public const string ParameterCloseBrace = "}"; + + public static MulticastProxy GetDefaultSettings() + { + var result = new MulticastProxy() + { + IsEnabled = false, + ProxyConfiguration = "http://proxy-host:8888/{param:protocol}/{param:multicastAddress}:{param:multicastPort}" + }; + + return result; + } // GetDefaultSettings + + public bool IsEnabled + { + get; + set; + } // IsEnabled + + public string ProxyConfiguration + { + get; + set; + } // ProxyConfiguration + + public string GetProxiedLocationUrl(string protocol, string address, ushort port) + { + if (!IsEnabled) + { + return string.Format("{0}://@{1}:{2}", protocol, address, port); + } // if + + var paramKeys = new string[] + { + "protocol", + "protocolU", + "multicastAddress", + "multicastPort" + }; + var paramValues = new string[] + { + protocol, + protocol.ToUpperInvariant(), + address, + port.ToString() + }; + var parameters = ArgumentsManager.CreateParameters(paramKeys, paramValues, false); + + return ArgumentsManager.ExpandArgument(ProxyConfiguration, parameters, ParameterOpenBrace, ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); + } // GetProxiedLocationUrl + } // class MulticastProxy +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs index 96b2f866..0195108e 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs @@ -1,57 +1,57 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Settings.Network -{ - [Serializable] - [XmlRoot("Network", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class NetworkSettings : IConfigurationItem - { - public static NetworkSettings GetDefaultSettings() - { - var result = new NetworkSettings() - { - MulticastProxy = MulticastProxy.GetDefaultSettings() - }; - - return result; - } // GetDefaultSettings - - public MulticastProxy MulticastProxy - { - get; - set; - } // MulticastProxy - - #region IConfigurationItem implementation - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // IConfigurationItem.SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return false; } - } // IConfigurationItem.CanValidate - - InitializationResult IConfigurationItem.Initializate() - { - throw new NotSupportedException(); - } // IConfigurationItem.Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - throw new NotSupportedException(); - } // IConfigurationItem.Validate - - #endregion - } // class NetworkSettings -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Settings.Network +{ + [Serializable] + [XmlRoot("Network", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class NetworkSettings : IConfigurationItem + { + public static NetworkSettings GetDefaultSettings() + { + var result = new NetworkSettings() + { + MulticastProxy = MulticastProxy.GetDefaultSettings() + }; + + return result; + } // GetDefaultSettings + + public MulticastProxy MulticastProxy + { + get; + set; + } // MulticastProxy + + #region IConfigurationItem implementation + + bool IConfigurationItem.SupportsInitialization + { + get { return false; } + } // IConfigurationItem.SupportsInitialization + + bool IConfigurationItem.SupportsValidation + { + get { return false; } + } // IConfigurationItem.CanValidate + + InitializationResult IConfigurationItem.Initializate() + { + throw new NotSupportedException(); + } // IConfigurationItem.Initializate + + string IConfigurationItem.Validate(string ownerTag) + { + throw new NotSupportedException(); + } // IConfigurationItem.Validate + + #endregion + } // class NetworkSettings +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs index 74e717bf..6f51e2c3 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs @@ -1,79 +1,79 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Settings.Network -{ - public class NetworkSettingsRegistration : IConfigurationItemRegistration - { - public const string ConfigurationGuid = "{BA2C8A80-A12A-48A2-91DE-1615D5CBA791}"; - private static int MyDirectIndex; - - public static NetworkSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as NetworkSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - public Guid Id - { - get { return new Guid(ConfigurationGuid); } - } // Id - - public bool HasEditor - { - get { return true; } - } // HasEditor - - public Type ItemType - { - get { return typeof(NetworkSettings); } - } // GetItemType - - public IConfigurationItem CreateDefault() - { - return NetworkSettings.GetDefaultSettings(); - } // CreateDefault - - public string EditorDisplayName - { - get { return Properties.SettingsTexts.NetworkDisplayName; } - } // EditorDisplayName - - public string EditorDescription - { - get { return Properties.SettingsTexts.NetworkDescription; } - } // EditorDescription - - public Image EditorImage - { - get { return Properties.Resources.NetworkSettings_32; } - } // EditorImage - - public int EditorPriority - { - get { return 9000; } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - var editor = new Editors.NetworkSettingsEditor() - { - Settings = data as NetworkSettings - }; - - return editor; - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - } // class NetworkSettingsRegistration -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Settings.Network +{ + public class NetworkSettingsRegistration : IConfigurationItemRegistration + { + public const string ConfigurationGuid = "{BA2C8A80-A12A-48A2-91DE-1615D5CBA791}"; + private static int MyDirectIndex; + + public static NetworkSettings Settings + { + get { return AppUiConfiguration.Current[MyDirectIndex] as NetworkSettings; } + set { AppUiConfiguration.Current[MyDirectIndex] = value; } + } // Settings + + public Guid Id + { + get { return new Guid(ConfigurationGuid); } + } // Id + + public bool HasEditor + { + get { return true; } + } // HasEditor + + public Type ItemType + { + get { return typeof(NetworkSettings); } + } // GetItemType + + public IConfigurationItem CreateDefault() + { + return NetworkSettings.GetDefaultSettings(); + } // CreateDefault + + public string EditorDisplayName + { + get { return Properties.SettingsTexts.NetworkDisplayName; } + } // EditorDisplayName + + public string EditorDescription + { + get { return Properties.SettingsTexts.NetworkDescription; } + } // EditorDescription + + public Image EditorImage + { + get { return Properties.Resources.NetworkSettings_32; } + } // EditorImage + + public int EditorPriority + { + get { return 9000; } + } // EditorPriority + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + var editor = new Editors.NetworkSettingsEditor() + { + Settings = data as NetworkSettings + }; + + return editor; + } // CreateEditor + + public int DirectIndex + { + get { return MyDirectIndex; } + set { MyDirectIndex = value; } + } // DirectIndex + } // class NetworkSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs index 297714d9..fc3dbd9b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs @@ -1,134 +1,134 @@ -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers.Editors -{ - partial class TvPlayerEditorDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvPlayerEditorDialog)); - this.textPlayerName = new System.Windows.Forms.TextBox(); - this.textPlayerPath = new System.Windows.Forms.TextBox(); - this.buttonOk = new System.Windows.Forms.Button(); - this.buttonCancel = new System.Windows.Forms.Button(); - this.buttonSelectPlayer = new System.Windows.Forms.Button(); - this.picturePlayerIcon = new System.Windows.Forms.PictureBox(); - this.selectPlayerDialog = new System.Windows.Forms.OpenFileDialog(); - this.argumentsEditor = new Project.IpTv.UiServices.Configuration.Editors.ArgumentsEditor(); - ((System.ComponentModel.ISupportInitialize)(this.picturePlayerIcon)).BeginInit(); - this.SuspendLayout(); - // - // textPlayerName - // - resources.ApplyResources(this.textPlayerName, "textPlayerName"); - this.textPlayerName.Name = "textPlayerName"; - this.textPlayerName.TextChanged += new System.EventHandler(this.textPlayerName_TextChanged); - // - // textPlayerPath - // - resources.ApplyResources(this.textPlayerPath, "textPlayerPath"); - this.textPlayerPath.Name = "textPlayerPath"; - this.textPlayerPath.ReadOnly = true; - // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); - // - // buttonCancel - // - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // buttonSelectPlayer - // - resources.ApplyResources(this.buttonSelectPlayer, "buttonSelectPlayer"); - this.buttonSelectPlayer.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_AttachFile_16x16; - this.buttonSelectPlayer.Name = "buttonSelectPlayer"; - this.buttonSelectPlayer.UseVisualStyleBackColor = true; - this.buttonSelectPlayer.Click += new System.EventHandler(this.buttonSelectPlayer_Click); - // - // picturePlayerIcon - // - resources.ApplyResources(this.picturePlayerIcon, "picturePlayerIcon"); - this.picturePlayerIcon.Name = "picturePlayerIcon"; - this.picturePlayerIcon.TabStop = false; - // - // selectPlayerDialog - // - this.selectPlayerDialog.DefaultExt = "exe"; - this.selectPlayerDialog.RestoreDirectory = true; - this.selectPlayerDialog.SupportMultiDottedExtensions = true; - // - // argumentsEditor - // - resources.ApplyResources(this.argumentsEditor, "argumentsEditor"); - this.argumentsEditor.Arguments = null; - this.argumentsEditor.Name = "argumentsEditor"; - // - // TvPlayerEditorDialog - // - this.AcceptButton = this.buttonOk; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonCancel; - this.Controls.Add(this.argumentsEditor); - this.Controls.Add(this.buttonSelectPlayer); - this.Controls.Add(this.textPlayerPath); - this.Controls.Add(this.textPlayerName); - this.Controls.Add(this.picturePlayerIcon); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonOk); - this.MinimizeBox = false; - this.Name = "TvPlayerEditorDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.Load += new System.EventHandler(this.TvPlayerEditorDialog_Load); - this.Shown += new System.EventHandler(this.TvPlayerEditorDialog_Shown); - ((System.ComponentModel.ISupportInitialize)(this.picturePlayerIcon)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Button buttonOk; - private System.Windows.Forms.PictureBox picturePlayerIcon; - private System.Windows.Forms.TextBox textPlayerName; - private System.Windows.Forms.TextBox textPlayerPath; - private System.Windows.Forms.Button buttonSelectPlayer; - private Configuration.Editors.ArgumentsEditor argumentsEditor; - private System.Windows.Forms.OpenFileDialog selectPlayerDialog; - } +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors +{ + partial class TvPlayerEditorDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvPlayerEditorDialog)); + this.textPlayerName = new System.Windows.Forms.TextBox(); + this.textPlayerPath = new System.Windows.Forms.TextBox(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonSelectPlayer = new System.Windows.Forms.Button(); + this.picturePlayerIcon = new System.Windows.Forms.PictureBox(); + this.selectPlayerDialog = new System.Windows.Forms.OpenFileDialog(); + this.argumentsEditor = new IpTviewr.UiServices.Configuration.Editors.ArgumentsEditor(); + ((System.ComponentModel.ISupportInitialize)(this.picturePlayerIcon)).BeginInit(); + this.SuspendLayout(); + // + // textPlayerName + // + resources.ApplyResources(this.textPlayerName, "textPlayerName"); + this.textPlayerName.Name = "textPlayerName"; + this.textPlayerName.TextChanged += new System.EventHandler(this.textPlayerName_TextChanged); + // + // textPlayerPath + // + resources.ApplyResources(this.textPlayerPath, "textPlayerPath"); + this.textPlayerPath.Name = "textPlayerPath"; + this.textPlayerPath.ReadOnly = true; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonSelectPlayer + // + resources.ApplyResources(this.buttonSelectPlayer, "buttonSelectPlayer"); + this.buttonSelectPlayer.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_AttachFile_16x16; + this.buttonSelectPlayer.Name = "buttonSelectPlayer"; + this.buttonSelectPlayer.UseVisualStyleBackColor = true; + this.buttonSelectPlayer.Click += new System.EventHandler(this.buttonSelectPlayer_Click); + // + // picturePlayerIcon + // + resources.ApplyResources(this.picturePlayerIcon, "picturePlayerIcon"); + this.picturePlayerIcon.Name = "picturePlayerIcon"; + this.picturePlayerIcon.TabStop = false; + // + // selectPlayerDialog + // + this.selectPlayerDialog.DefaultExt = "exe"; + this.selectPlayerDialog.RestoreDirectory = true; + this.selectPlayerDialog.SupportMultiDottedExtensions = true; + // + // argumentsEditor + // + resources.ApplyResources(this.argumentsEditor, "argumentsEditor"); + this.argumentsEditor.Arguments = null; + this.argumentsEditor.Name = "argumentsEditor"; + // + // TvPlayerEditorDialog + // + this.AcceptButton = this.buttonOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.argumentsEditor); + this.Controls.Add(this.buttonSelectPlayer); + this.Controls.Add(this.textPlayerPath); + this.Controls.Add(this.textPlayerName); + this.Controls.Add(this.picturePlayerIcon); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.MinimizeBox = false; + this.Name = "TvPlayerEditorDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Load += new System.EventHandler(this.TvPlayerEditorDialog_Load); + this.Shown += new System.EventHandler(this.TvPlayerEditorDialog_Shown); + ((System.ComponentModel.ISupportInitialize)(this.picturePlayerIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.PictureBox picturePlayerIcon; + private System.Windows.Forms.TextBox textPlayerName; + private System.Windows.Forms.TextBox textPlayerPath; + private System.Windows.Forms.Button buttonSelectPlayer; + private Configuration.Editors.ArgumentsEditor argumentsEditor; + private System.Windows.Forms.OpenFileDialog selectPlayerDialog; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs index 04dfd1f4..20086639 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs @@ -1,158 +1,158 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers.Editors -{ - public partial class TvPlayerEditorDialog : Form - { - public TvPlayerEditorDialog() - { - InitializeComponent(); - } // constructor - - public TvPlayer Player - { - get; - set; - } // Player - - public bool IsDataChanged - { - get; - set; - } // IsDataChanged - - private void TvPlayerEditorDialog_Load(object sender, EventArgs e) - { - if (Player != null) - { - textPlayerName.Text = Player.Name; - textPlayerPath.Text = Player.Path; - argumentsEditor.Arguments = Player.Arguments; - } - else - { - argumentsEditor.Arguments = new string[] - { - "{param:Channel.Url}" - }; - } // if-else - - argumentsEditor.OpenBraceText = TvPlayer.ParameterOpenBrace; - argumentsEditor.CloseBraceText = TvPlayer.ParameterCloseBrace; - argumentsEditor.ParametersList = Properties.SettingsTexts.TvPlayerParametersList; - } // TvPlayerEditorDialog_Load - - private void TvPlayerEditorDialog_Shown(object sender, EventArgs e) - { - if (Player == null) - { - buttonSelectPlayer.PerformClick(); - } - else - { - SetPlayerIcon(); - } // if-else - } // TvPlayerEditorDialog_Shown - - private void buttonSelectPlayer_Click(object sender, EventArgs e) - { - if (Player == null) - { - selectPlayerDialog.InitialDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); - } - else - { - selectPlayerDialog.InitialDirectory = Path.GetDirectoryName(textPlayerPath.Text); - selectPlayerDialog.FileName = textPlayerPath.Text; - } // if-else - - if (selectPlayerDialog.ShowDialog(this) != DialogResult.OK) - { - if (Player == null) - { - Close(); - } // if - return; - } // if - - if (Player == null) - { - Player = new TvPlayer(); - Player.Id = Guid.NewGuid(); - Player.Arguments = argumentsEditor.Arguments; - } // if - - IsDataChanged = true; - if (textPlayerPath.Text != selectPlayerDialog.FileName) - { - textPlayerName.Text = GetPlayerName(selectPlayerDialog.FileName); - } // if - textPlayerPath.Text = selectPlayerDialog.FileName; - SetPlayerIcon(); - } // buttonSelectPlayer_Click - - private void textPlayerName_TextChanged(object sender, EventArgs e) - { - IsDataChanged = true; - } // textPlayerName_TextChanged - - private void buttonOk_Click(object sender, EventArgs e) - { - Player.Name = textPlayerName.Text; - Player.Path = textPlayerPath.Text; - if (argumentsEditor.IsDataChanged) - { - Player.Arguments = argumentsEditor.Arguments; - } // if - - if (Player.Arguments.Length == 0) - { - if (MessageBox.Show(this, - Properties.SettingsTexts.TvPlayerArgumentsListEmpty, - this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, - MessageBoxDefaultButton.Button2) != DialogResult.Yes) - { - buttonOk.DialogResult = DialogResult.None; - DialogResult = DialogResult.None; - return; - } // if - } // if - - buttonOk.DialogResult = DialogResult.OK; - DialogResult = DialogResult.OK; - } // buttonOk_Click - - private void SetPlayerIcon() - { - var settings = TvPlayersSettingsRegistration.Settings; - var icon = settings.GetPlayerIcon(textPlayerPath.Text); - { - picturePlayerIcon.Image = icon; - } // using - } // SetPlayerIcon - - private string GetPlayerName(string playerPath) - { - try - { - var info = System.Diagnostics.FileVersionInfo.GetVersionInfo(playerPath); - return info.FileDescription; - } - catch - { - return Path.GetFileNameWithoutExtension(playerPath); - } // try-catch - } // GetPlayerName - } // class TvPlayerEditorDialog -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors +{ + public partial class TvPlayerEditorDialog : Form + { + public TvPlayerEditorDialog() + { + InitializeComponent(); + } // constructor + + public TvPlayer Player + { + get; + set; + } // Player + + public bool IsDataChanged + { + get; + set; + } // IsDataChanged + + private void TvPlayerEditorDialog_Load(object sender, EventArgs e) + { + if (Player != null) + { + textPlayerName.Text = Player.Name; + textPlayerPath.Text = Player.Path; + argumentsEditor.Arguments = Player.Arguments; + } + else + { + argumentsEditor.Arguments = new string[] + { + "{param:Channel.Url}" + }; + } // if-else + + argumentsEditor.OpenBraceText = TvPlayer.ParameterOpenBrace; + argumentsEditor.CloseBraceText = TvPlayer.ParameterCloseBrace; + argumentsEditor.ParametersList = Properties.SettingsTexts.TvPlayerParametersList; + } // TvPlayerEditorDialog_Load + + private void TvPlayerEditorDialog_Shown(object sender, EventArgs e) + { + if (Player == null) + { + buttonSelectPlayer.PerformClick(); + } + else + { + SetPlayerIcon(); + } // if-else + } // TvPlayerEditorDialog_Shown + + private void buttonSelectPlayer_Click(object sender, EventArgs e) + { + if (Player == null) + { + selectPlayerDialog.InitialDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); + } + else + { + selectPlayerDialog.InitialDirectory = Path.GetDirectoryName(textPlayerPath.Text); + selectPlayerDialog.FileName = textPlayerPath.Text; + } // if-else + + if (selectPlayerDialog.ShowDialog(this) != DialogResult.OK) + { + if (Player == null) + { + Close(); + } // if + return; + } // if + + if (Player == null) + { + Player = new TvPlayer(); + Player.Id = Guid.NewGuid(); + Player.Arguments = argumentsEditor.Arguments; + } // if + + IsDataChanged = true; + if (textPlayerPath.Text != selectPlayerDialog.FileName) + { + textPlayerName.Text = GetPlayerName(selectPlayerDialog.FileName); + } // if + textPlayerPath.Text = selectPlayerDialog.FileName; + SetPlayerIcon(); + } // buttonSelectPlayer_Click + + private void textPlayerName_TextChanged(object sender, EventArgs e) + { + IsDataChanged = true; + } // textPlayerName_TextChanged + + private void buttonOk_Click(object sender, EventArgs e) + { + Player.Name = textPlayerName.Text; + Player.Path = textPlayerPath.Text; + if (argumentsEditor.IsDataChanged) + { + Player.Arguments = argumentsEditor.Arguments; + } // if + + if (Player.Arguments.Length == 0) + { + if (MessageBox.Show(this, + Properties.SettingsTexts.TvPlayerArgumentsListEmpty, + this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, + MessageBoxDefaultButton.Button2) != DialogResult.Yes) + { + buttonOk.DialogResult = DialogResult.None; + DialogResult = DialogResult.None; + return; + } // if + } // if + + buttonOk.DialogResult = DialogResult.OK; + DialogResult = DialogResult.OK; + } // buttonOk_Click + + private void SetPlayerIcon() + { + var settings = TvPlayersSettingsRegistration.Settings; + var icon = settings.GetPlayerIcon(textPlayerPath.Text); + { + picturePlayerIcon.Image = icon; + } // using + } // SetPlayerIcon + + private string GetPlayerName(string playerPath) + { + try + { + var info = System.Diagnostics.FileVersionInfo.GetVersionInfo(playerPath); + return info.FileDescription; + } + catch + { + return Path.GetFileNameWithoutExtension(playerPath); + } // try-catch + } // GetPlayerName + } // class TvPlayerEditorDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx index 77b50f58..430c7096 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx @@ -1,360 +1,360 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Left, Right - - - - 50, 12 - - - 392, 20 - - - - 8 - - - textPlayerName - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Top, Left, Right - - - 50, 38 - - - 286, 20 - - - 9 - - - textPlayerPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Bottom, Right - - - NoControl - - - 236, 245 - - - 100, 25 - - - 5 - - - &Ok - - - MiddleRight - - - ImageBeforeText - - - buttonOk - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - - Bottom, Right - - - NoControl - - - 342, 245 - - - 100, 25 - - - 6 - - - &Cancel - - - MiddleRight - - - ImageBeforeText - - - buttonCancel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - Top, Right - - - NoControl - - - 342, 35 - - - 100, 25 - - - 10 - - - &Select... - - - MiddleRight - - - ImageBeforeText - - - buttonSelectPlayer - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - NoControl - - - 12, 19 - - - 32, 32 - - - CenterImage - - - 7 - - - picturePlayerIcon - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - 17, 17 - - - Top, Bottom, Left, Right - - - 12, 64 - - - 430, 175 - - - 11 - - - argumentsEditor - - - Project.IpTv.UiServices.Configuration.Editors.ArgumentsEditor, UiServices.Configuration, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 0 - - - True - - - 6, 13 - - - 454, 282 - - - CenterParent - - - Properties of the TV player - - - selectPlayerDialog - - - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - TvPlayerEditorDialog - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Left, Right + + + + 50, 12 + + + 392, 20 + + + + 8 + + + textPlayerName + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Top, Left, Right + + + 50, 38 + + + 286, 20 + + + 9 + + + textPlayerPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Bottom, Right + + + NoControl + + + 236, 245 + + + 100, 25 + + + 5 + + + &Ok + + + MiddleRight + + + ImageBeforeText + + + buttonOk + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + Bottom, Right + + + NoControl + + + 342, 245 + + + 100, 25 + + + 6 + + + &Cancel + + + MiddleRight + + + ImageBeforeText + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Top, Right + + + NoControl + + + 342, 35 + + + 100, 25 + + + 10 + + + &Select... + + + MiddleRight + + + ImageBeforeText + + + buttonSelectPlayer + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + NoControl + + + 12, 19 + + + 32, 32 + + + CenterImage + + + 7 + + + picturePlayerIcon + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + 17, 17 + + + Top, Bottom, Left, Right + + + 12, 64 + + + 430, 175 + + + 11 + + + argumentsEditor + + + IpTviewr.UiServices.Configuration.Editors.ArgumentsEditor, UiServices.Configuration, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 0 + + + True + + + 6, 13 + + + 454, 282 + + + CenterParent + + + Properties of the TV player + + + selectPlayerDialog + + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + TvPlayerEditorDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs index a57941a8..806f3bb7 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs @@ -1,191 +1,191 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers.Editors -{ - partial class TvPlayersSettingsEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.ColumnHeader columnHeader1; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvPlayersSettingsEditor)); - this.groupDefaultPlayer = new System.Windows.Forms.GroupBox(); - this.labelDefaultPlayer = new System.Windows.Forms.Label(); - this.groupPlayers = new System.Windows.Forms.GroupBox(); - this.buttonAdd = new System.Windows.Forms.Button(); - this.buttonSetDefault = new System.Windows.Forms.Button(); - this.buttonDelete = new System.Windows.Forms.Button(); - this.buttonEdit = new System.Windows.Forms.Button(); - this.listViewPlayers = new System.Windows.Forms.ListView(); - this.groupOptions = new System.Windows.Forms.GroupBox(); - this.labelInfo = new System.Windows.Forms.Label(); - this.pictureIconInfo = new System.Windows.Forms.PictureBox(); - this.checkBoxShortcut = new System.Windows.Forms.CheckBox(); - columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.groupDefaultPlayer.SuspendLayout(); - this.groupPlayers.SuspendLayout(); - this.groupOptions.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).BeginInit(); - this.SuspendLayout(); - // - // groupDefaultPlayer - // - resources.ApplyResources(this.groupDefaultPlayer, "groupDefaultPlayer"); - this.groupDefaultPlayer.Controls.Add(this.labelDefaultPlayer); - this.groupDefaultPlayer.Name = "groupDefaultPlayer"; - this.groupDefaultPlayer.TabStop = false; - // - // labelDefaultPlayer - // - resources.ApplyResources(this.labelDefaultPlayer, "labelDefaultPlayer"); - this.labelDefaultPlayer.AutoEllipsis = true; - this.labelDefaultPlayer.Name = "labelDefaultPlayer"; - // - // groupPlayers - // - resources.ApplyResources(this.groupPlayers, "groupPlayers"); - this.groupPlayers.Controls.Add(this.buttonAdd); - this.groupPlayers.Controls.Add(this.buttonSetDefault); - this.groupPlayers.Controls.Add(this.buttonDelete); - this.groupPlayers.Controls.Add(this.buttonEdit); - this.groupPlayers.Controls.Add(this.listViewPlayers); - this.groupPlayers.Name = "groupPlayers"; - this.groupPlayers.TabStop = false; - // - // buttonAdd - // - resources.ApplyResources(this.buttonAdd, "buttonAdd"); - this.buttonAdd.CausesValidation = false; - this.buttonAdd.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Add_16xM; - this.buttonAdd.Name = "buttonAdd"; - this.buttonAdd.UseVisualStyleBackColor = true; - this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); - // - // buttonSetDefault - // - resources.ApplyResources(this.buttonSetDefault, "buttonSetDefault"); - this.buttonSetDefault.CausesValidation = false; - this.buttonSetDefault.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Status_Ok_SmallCircle_16x16; - this.buttonSetDefault.Name = "buttonSetDefault"; - this.buttonSetDefault.UseVisualStyleBackColor = true; - this.buttonSetDefault.Click += new System.EventHandler(this.buttonSetDefault_Click); - // - // buttonDelete - // - resources.ApplyResources(this.buttonDelete, "buttonDelete"); - this.buttonDelete.CausesValidation = false; - this.buttonDelete.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Delete_16x16; - this.buttonDelete.Name = "buttonDelete"; - this.buttonDelete.UseVisualStyleBackColor = true; - this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click); - // - // buttonEdit - // - resources.ApplyResources(this.buttonEdit, "buttonEdit"); - this.buttonEdit.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Properties_16x16; - this.buttonEdit.Name = "buttonEdit"; - this.buttonEdit.UseVisualStyleBackColor = true; - this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); - // - // listViewPlayers - // - resources.ApplyResources(this.listViewPlayers, "listViewPlayers"); - this.listViewPlayers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - columnHeader1}); - this.listViewPlayers.FullRowSelect = true; - this.listViewPlayers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.listViewPlayers.HideSelection = false; - this.listViewPlayers.MultiSelect = false; - this.listViewPlayers.Name = "listViewPlayers"; - this.listViewPlayers.ShowItemToolTips = true; - this.listViewPlayers.UseCompatibleStateImageBehavior = false; - this.listViewPlayers.View = System.Windows.Forms.View.Tile; - this.listViewPlayers.SelectedIndexChanged += new System.EventHandler(this.listViewPlayers_SelectedIndexChanged); - this.listViewPlayers.DoubleClick += new System.EventHandler(this.listViewPlayers_DoubleClick); - // - // groupOptions - // - resources.ApplyResources(this.groupOptions, "groupOptions"); - this.groupOptions.Controls.Add(this.labelInfo); - this.groupOptions.Controls.Add(this.pictureIconInfo); - this.groupOptions.Controls.Add(this.checkBoxShortcut); - this.groupOptions.Name = "groupOptions"; - this.groupOptions.TabStop = false; - // - // labelInfo - // - resources.ApplyResources(this.labelInfo, "labelInfo"); - this.labelInfo.Name = "labelInfo"; - // - // pictureIconInfo - // - this.pictureIconInfo.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Status_Info_16x16; - resources.ApplyResources(this.pictureIconInfo, "pictureIconInfo"); - this.pictureIconInfo.Name = "pictureIconInfo"; - this.pictureIconInfo.TabStop = false; - // - // checkBoxShortcut - // - resources.ApplyResources(this.checkBoxShortcut, "checkBoxShortcut"); - this.checkBoxShortcut.Name = "checkBoxShortcut"; - this.checkBoxShortcut.UseVisualStyleBackColor = true; - this.checkBoxShortcut.CheckedChanged += new System.EventHandler(this.checkBoxShortcut_CheckedChanged); - // - // TvPlayersSettingsEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupOptions); - this.Controls.Add(this.groupPlayers); - this.Controls.Add(this.groupDefaultPlayer); - this.Name = "TvPlayersSettingsEditor"; - this.Load += new System.EventHandler(this.TvPlayersSettingsEditor_Load); - this.groupDefaultPlayer.ResumeLayout(false); - this.groupPlayers.ResumeLayout(false); - this.groupOptions.ResumeLayout(false); - this.groupOptions.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupDefaultPlayer; - private System.Windows.Forms.Label labelDefaultPlayer; - private System.Windows.Forms.GroupBox groupPlayers; - private System.Windows.Forms.GroupBox groupOptions; - private System.Windows.Forms.CheckBox checkBoxShortcut; - private System.Windows.Forms.Label labelInfo; - private System.Windows.Forms.PictureBox pictureIconInfo; - private System.Windows.Forms.ListView listViewPlayers; - private System.Windows.Forms.Button buttonSetDefault; - private System.Windows.Forms.Button buttonDelete; - private System.Windows.Forms.Button buttonEdit; - private System.Windows.Forms.Button buttonAdd; - } // class TvPlayersSettingsEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors +{ + partial class TvPlayersSettingsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ColumnHeader columnHeader1; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvPlayersSettingsEditor)); + this.groupDefaultPlayer = new System.Windows.Forms.GroupBox(); + this.labelDefaultPlayer = new System.Windows.Forms.Label(); + this.groupPlayers = new System.Windows.Forms.GroupBox(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.buttonSetDefault = new System.Windows.Forms.Button(); + this.buttonDelete = new System.Windows.Forms.Button(); + this.buttonEdit = new System.Windows.Forms.Button(); + this.listViewPlayers = new System.Windows.Forms.ListView(); + this.groupOptions = new System.Windows.Forms.GroupBox(); + this.labelInfo = new System.Windows.Forms.Label(); + this.pictureIconInfo = new System.Windows.Forms.PictureBox(); + this.checkBoxShortcut = new System.Windows.Forms.CheckBox(); + columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupDefaultPlayer.SuspendLayout(); + this.groupPlayers.SuspendLayout(); + this.groupOptions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).BeginInit(); + this.SuspendLayout(); + // + // groupDefaultPlayer + // + resources.ApplyResources(this.groupDefaultPlayer, "groupDefaultPlayer"); + this.groupDefaultPlayer.Controls.Add(this.labelDefaultPlayer); + this.groupDefaultPlayer.Name = "groupDefaultPlayer"; + this.groupDefaultPlayer.TabStop = false; + // + // labelDefaultPlayer + // + resources.ApplyResources(this.labelDefaultPlayer, "labelDefaultPlayer"); + this.labelDefaultPlayer.AutoEllipsis = true; + this.labelDefaultPlayer.Name = "labelDefaultPlayer"; + // + // groupPlayers + // + resources.ApplyResources(this.groupPlayers, "groupPlayers"); + this.groupPlayers.Controls.Add(this.buttonAdd); + this.groupPlayers.Controls.Add(this.buttonSetDefault); + this.groupPlayers.Controls.Add(this.buttonDelete); + this.groupPlayers.Controls.Add(this.buttonEdit); + this.groupPlayers.Controls.Add(this.listViewPlayers); + this.groupPlayers.Name = "groupPlayers"; + this.groupPlayers.TabStop = false; + // + // buttonAdd + // + resources.ApplyResources(this.buttonAdd, "buttonAdd"); + this.buttonAdd.CausesValidation = false; + this.buttonAdd.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Add_16xM; + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // buttonSetDefault + // + resources.ApplyResources(this.buttonSetDefault, "buttonSetDefault"); + this.buttonSetDefault.CausesValidation = false; + this.buttonSetDefault.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Status_Ok_SmallCircle_16x16; + this.buttonSetDefault.Name = "buttonSetDefault"; + this.buttonSetDefault.UseVisualStyleBackColor = true; + this.buttonSetDefault.Click += new System.EventHandler(this.buttonSetDefault_Click); + // + // buttonDelete + // + resources.ApplyResources(this.buttonDelete, "buttonDelete"); + this.buttonDelete.CausesValidation = false; + this.buttonDelete.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Delete_16x16; + this.buttonDelete.Name = "buttonDelete"; + this.buttonDelete.UseVisualStyleBackColor = true; + this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click); + // + // buttonEdit + // + resources.ApplyResources(this.buttonEdit, "buttonEdit"); + this.buttonEdit.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Properties_16x16; + this.buttonEdit.Name = "buttonEdit"; + this.buttonEdit.UseVisualStyleBackColor = true; + this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); + // + // listViewPlayers + // + resources.ApplyResources(this.listViewPlayers, "listViewPlayers"); + this.listViewPlayers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeader1}); + this.listViewPlayers.FullRowSelect = true; + this.listViewPlayers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewPlayers.HideSelection = false; + this.listViewPlayers.MultiSelect = false; + this.listViewPlayers.Name = "listViewPlayers"; + this.listViewPlayers.ShowItemToolTips = true; + this.listViewPlayers.UseCompatibleStateImageBehavior = false; + this.listViewPlayers.View = System.Windows.Forms.View.Tile; + this.listViewPlayers.SelectedIndexChanged += new System.EventHandler(this.listViewPlayers_SelectedIndexChanged); + this.listViewPlayers.DoubleClick += new System.EventHandler(this.listViewPlayers_DoubleClick); + // + // groupOptions + // + resources.ApplyResources(this.groupOptions, "groupOptions"); + this.groupOptions.Controls.Add(this.labelInfo); + this.groupOptions.Controls.Add(this.pictureIconInfo); + this.groupOptions.Controls.Add(this.checkBoxShortcut); + this.groupOptions.Name = "groupOptions"; + this.groupOptions.TabStop = false; + // + // labelInfo + // + resources.ApplyResources(this.labelInfo, "labelInfo"); + this.labelInfo.Name = "labelInfo"; + // + // pictureIconInfo + // + this.pictureIconInfo.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Status_Info_16x16; + resources.ApplyResources(this.pictureIconInfo, "pictureIconInfo"); + this.pictureIconInfo.Name = "pictureIconInfo"; + this.pictureIconInfo.TabStop = false; + // + // checkBoxShortcut + // + resources.ApplyResources(this.checkBoxShortcut, "checkBoxShortcut"); + this.checkBoxShortcut.Name = "checkBoxShortcut"; + this.checkBoxShortcut.UseVisualStyleBackColor = true; + this.checkBoxShortcut.CheckedChanged += new System.EventHandler(this.checkBoxShortcut_CheckedChanged); + // + // TvPlayersSettingsEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupOptions); + this.Controls.Add(this.groupPlayers); + this.Controls.Add(this.groupDefaultPlayer); + this.Name = "TvPlayersSettingsEditor"; + this.Load += new System.EventHandler(this.TvPlayersSettingsEditor_Load); + this.groupDefaultPlayer.ResumeLayout(false); + this.groupPlayers.ResumeLayout(false); + this.groupOptions.ResumeLayout(false); + this.groupOptions.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupDefaultPlayer; + private System.Windows.Forms.Label labelDefaultPlayer; + private System.Windows.Forms.GroupBox groupPlayers; + private System.Windows.Forms.GroupBox groupOptions; + private System.Windows.Forms.CheckBox checkBoxShortcut; + private System.Windows.Forms.Label labelInfo; + private System.Windows.Forms.PictureBox pictureIconInfo; + private System.Windows.Forms.ListView listViewPlayers; + private System.Windows.Forms.Button buttonSetDefault; + private System.Windows.Forms.Button buttonDelete; + private System.Windows.Forms.Button buttonEdit; + private System.Windows.Forms.Button buttonAdd; + } // class TvPlayersSettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs index fe314879..7ef10e58 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs @@ -1,235 +1,235 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers.Editors -{ - public partial class TvPlayersSettingsEditor : UserControl, IConfigurationItemEditor - { - private int ManualUpdateLock; - private List Players; - - public TvPlayersSettingsEditor() - { - InitializeComponent(); - } // constructor - - public TvPlayersSettings Settings - { - get; - set; - } // Settings - - #region IConfigurationItemEditor implementation - - UserControl IConfigurationItemEditor.UserInterfaceItem - { - get { return this; } - } // IConfigurationItemEditor.UserInterfaceItem - - bool IConfigurationItemEditor.SupportsWinFormsValidation - { - get { return false; } - } // IConfigurationItemEditor.SupportsWinFormsValidation - - public bool IsDataChanged - { - get; - protected set; - } // IsDataChanged - - public bool IsAppRestartNeeded - { - get { return false; } - } // IsAppRestartNeeded - - bool IConfigurationItemEditor.Validate() - { - return true; - } // IConfigurationItemEditor.Validate - - IConfigurationItem IConfigurationItemEditor.GetNewData() - { - Settings.Players = Players.ToArray(); - - return Settings; - } // IConfigurationItemEditor.GetNewData - - void IConfigurationItemEditor.EditorClosing(out bool cancelClose) - { - cancelClose = false; - } // IConfigurationItemEditor.EditorClosing - - void IConfigurationItemEditor.EditorClosed(bool userCancel) - { - // no op - } // IConfigurationItemEditor.EditorClosed - - #endregion - - private void TvPlayersSettingsEditor_Load(object sender, EventArgs e) - { - listViewPlayers.SmallImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; - listViewPlayers.LargeImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; - - buttonEdit.Enabled = false; - buttonDelete.Enabled = false; - buttonSetDefault.Enabled = false; - - var tilesPerRow = 2; - listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6) / tilesPerRow, - Settings.PlayerIcons.ImageSize.Height + 4); - - ManualUpdateLock++; - labelDefaultPlayer.Text = Settings.GetDefaultPlayer().Name; - checkBoxShortcut.Checked = !Settings.DirectLaunch; - ManualUpdateLock--; - - Players = new List(Settings.Players); - FillList(false, true); - } // TvPlayersSettingsEditor_Load - - private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) - { - var player = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; - - buttonEdit.Enabled = player != null; - buttonDelete.Enabled = player != null; - buttonSetDefault.Enabled = player != null; - - if (player == null) return; - - buttonDelete.Enabled = player.Id != Settings.DefaultPlayerId; - buttonSetDefault.Enabled = player.Id != Settings.DefaultPlayerId; - } // listViewPlayers_SelectedIndexChanged - - private void listViewPlayers_DoubleClick(object sender, EventArgs e) - { - buttonEdit.PerformClick(); - } // listViewPlayers_DoubleClick - - private void buttonEdit_Click(object sender, EventArgs e) - { - var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; - if (item == null) return; - - var player = (TvPlayer)item.Tag; - using (var editor = new TvPlayerEditorDialog()) - { - editor.Player = player; - editor.ShowDialog(this); - if (editor.IsDataChanged) - { - FillList(true, false); - IsDataChanged = true; - } // if - } // using - } // buttonEdit_Click - - private void buttonDelete_Click(object sender, EventArgs e) - { - var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; - if (item == null) return; - - var player = (TvPlayer)item.Tag; - - if (MessageBox.Show(this, - string.Format(Properties.SettingsTexts.TvPlayerDelete, player.Name), - Properties.SettingsTexts.TvPlayerDeleteCaption, - MessageBoxButtons.YesNo, MessageBoxIcon.Question, - MessageBoxDefaultButton.Button2) != DialogResult.Yes) return; - - item.Selected = false; - Players.Remove(player); - IsDataChanged = true; - FillList(false, false); - } // buttonDelete_Click - - private void buttonSetDefault_Click(object sender, EventArgs e) - { - var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; - if (item == null) return; - - var player = (TvPlayer)item.Tag; - Settings.DefaultPlayerId = player.Id; - IsDataChanged = true; - labelDefaultPlayer.Text = player.Name; - - // update list - FillList(true, true); - } // buttonSetDefault_Click - - private void buttonAdd_Click(object sender, EventArgs e) - { - using (var editor = new TvPlayerEditorDialog()) - { - editor.ShowDialog(this); - if (editor.IsDataChanged) - { - Players.Add(editor.Player); - FillList(false, false); - listViewPlayers.Items[listViewPlayers.Items.Count - 1].Selected = true; - } // if - } // using - } // buttonAdd_Click - - private void checkBoxShortcut_CheckedChanged(object sender, EventArgs e) - { - Settings.DirectLaunch = !checkBoxShortcut.Checked; - IsDataChanged = true; - } // checkBoxShortcut_CheckedChanged - - private void FillList(bool keepSelection, bool selectDefault) - { - FillList(listViewPlayers, Players, Settings.DefaultPlayerId, keepSelection, selectDefault); - } // FillList - - internal static void FillList(ListView list, IList players, Guid defaultPlayerId, bool keepSelection, bool selectDefault) - { - ListViewItem[] items; - int index; - int selectedIndex; - - selectedIndex = (list.SelectedItems.Count > 0) ? list.SelectedItems[0].Index : -1; - - items = new ListViewItem[players.Count]; - index = 0; - foreach (var player in players) - { - items[index++] = GetTvPlayerListItem(player, defaultPlayerId, list.Font, selectDefault); - } // foreach - - list.Items.Clear(); - list.Items.AddRange(items); - if ((selectedIndex >= 0) && (keepSelection)) - { - list.Items[selectedIndex].Selected = true; - } // if - } // FillList - - private static ListViewItem GetTvPlayerListItem(TvPlayer player, Guid defaultPlayerId, Font listFont, bool selectDefault) - { - var item = new ListViewItem(player.Name); - item.Tag = player; - item.ImageKey = TvPlayersSettingsRegistration.Settings.GetPlayerIconKey(player.Path); - if (player.Id == defaultPlayerId) - { - item.Font = new Font(listFont, FontStyle.Bold); - if (selectDefault) - { - item.Selected = true; - } // if - } // if - - return item; - } // GetTvPlayerListItem - } // class TvPlayersSettingsEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors +{ + public partial class TvPlayersSettingsEditor : UserControl, IConfigurationItemEditor + { + private int ManualUpdateLock; + private List Players; + + public TvPlayersSettingsEditor() + { + InitializeComponent(); + } // constructor + + public TvPlayersSettings Settings + { + get; + set; + } // Settings + + #region IConfigurationItemEditor implementation + + UserControl IConfigurationItemEditor.UserInterfaceItem + { + get { return this; } + } // IConfigurationItemEditor.UserInterfaceItem + + bool IConfigurationItemEditor.SupportsWinFormsValidation + { + get { return false; } + } // IConfigurationItemEditor.SupportsWinFormsValidation + + public bool IsDataChanged + { + get; + protected set; + } // IsDataChanged + + public bool IsAppRestartNeeded + { + get { return false; } + } // IsAppRestartNeeded + + bool IConfigurationItemEditor.Validate() + { + return true; + } // IConfigurationItemEditor.Validate + + IConfigurationItem IConfigurationItemEditor.GetNewData() + { + Settings.Players = Players.ToArray(); + + return Settings; + } // IConfigurationItemEditor.GetNewData + + void IConfigurationItemEditor.EditorClosing(out bool cancelClose) + { + cancelClose = false; + } // IConfigurationItemEditor.EditorClosing + + void IConfigurationItemEditor.EditorClosed(bool userCancel) + { + // no op + } // IConfigurationItemEditor.EditorClosed + + #endregion + + private void TvPlayersSettingsEditor_Load(object sender, EventArgs e) + { + listViewPlayers.SmallImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; + listViewPlayers.LargeImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; + + buttonEdit.Enabled = false; + buttonDelete.Enabled = false; + buttonSetDefault.Enabled = false; + + var tilesPerRow = 2; + listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6) / tilesPerRow, + Settings.PlayerIcons.ImageSize.Height + 4); + + ManualUpdateLock++; + labelDefaultPlayer.Text = Settings.GetDefaultPlayer().Name; + checkBoxShortcut.Checked = !Settings.DirectLaunch; + ManualUpdateLock--; + + Players = new List(Settings.Players); + FillList(false, true); + } // TvPlayersSettingsEditor_Load + + private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) + { + var player = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; + + buttonEdit.Enabled = player != null; + buttonDelete.Enabled = player != null; + buttonSetDefault.Enabled = player != null; + + if (player == null) return; + + buttonDelete.Enabled = player.Id != Settings.DefaultPlayerId; + buttonSetDefault.Enabled = player.Id != Settings.DefaultPlayerId; + } // listViewPlayers_SelectedIndexChanged + + private void listViewPlayers_DoubleClick(object sender, EventArgs e) + { + buttonEdit.PerformClick(); + } // listViewPlayers_DoubleClick + + private void buttonEdit_Click(object sender, EventArgs e) + { + var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; + if (item == null) return; + + var player = (TvPlayer)item.Tag; + using (var editor = new TvPlayerEditorDialog()) + { + editor.Player = player; + editor.ShowDialog(this); + if (editor.IsDataChanged) + { + FillList(true, false); + IsDataChanged = true; + } // if + } // using + } // buttonEdit_Click + + private void buttonDelete_Click(object sender, EventArgs e) + { + var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; + if (item == null) return; + + var player = (TvPlayer)item.Tag; + + if (MessageBox.Show(this, + string.Format(Properties.SettingsTexts.TvPlayerDelete, player.Name), + Properties.SettingsTexts.TvPlayerDeleteCaption, + MessageBoxButtons.YesNo, MessageBoxIcon.Question, + MessageBoxDefaultButton.Button2) != DialogResult.Yes) return; + + item.Selected = false; + Players.Remove(player); + IsDataChanged = true; + FillList(false, false); + } // buttonDelete_Click + + private void buttonSetDefault_Click(object sender, EventArgs e) + { + var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; + if (item == null) return; + + var player = (TvPlayer)item.Tag; + Settings.DefaultPlayerId = player.Id; + IsDataChanged = true; + labelDefaultPlayer.Text = player.Name; + + // update list + FillList(true, true); + } // buttonSetDefault_Click + + private void buttonAdd_Click(object sender, EventArgs e) + { + using (var editor = new TvPlayerEditorDialog()) + { + editor.ShowDialog(this); + if (editor.IsDataChanged) + { + Players.Add(editor.Player); + FillList(false, false); + listViewPlayers.Items[listViewPlayers.Items.Count - 1].Selected = true; + } // if + } // using + } // buttonAdd_Click + + private void checkBoxShortcut_CheckedChanged(object sender, EventArgs e) + { + Settings.DirectLaunch = !checkBoxShortcut.Checked; + IsDataChanged = true; + } // checkBoxShortcut_CheckedChanged + + private void FillList(bool keepSelection, bool selectDefault) + { + FillList(listViewPlayers, Players, Settings.DefaultPlayerId, keepSelection, selectDefault); + } // FillList + + internal static void FillList(ListView list, IList players, Guid defaultPlayerId, bool keepSelection, bool selectDefault) + { + ListViewItem[] items; + int index; + int selectedIndex; + + selectedIndex = (list.SelectedItems.Count > 0) ? list.SelectedItems[0].Index : -1; + + items = new ListViewItem[players.Count]; + index = 0; + foreach (var player in players) + { + items[index++] = GetTvPlayerListItem(player, defaultPlayerId, list.Font, selectDefault); + } // foreach + + list.Items.Clear(); + list.Items.AddRange(items); + if ((selectedIndex >= 0) && (keepSelection)) + { + list.Items[selectedIndex].Selected = true; + } // if + } // FillList + + private static ListViewItem GetTvPlayerListItem(TvPlayer player, Guid defaultPlayerId, Font listFont, bool selectDefault) + { + var item = new ListViewItem(player.Name); + item.Tag = player; + item.ImageKey = TvPlayersSettingsRegistration.Settings.GetPlayerIconKey(player.Path); + if (player.Id == defaultPlayerId) + { + item.Font = new Font(listFont, FontStyle.Bold); + if (selectDefault) + { + item.Selected = true; + } // if + } // if + + return item; + } // GetTvPlayerListItem + } // class TvPlayersSettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs index 93067f82..3bffe085 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs @@ -1,101 +1,101 @@ -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers -{ - partial class SelectTvPlayerDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.ColumnHeader columnHeader1; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectTvPlayerDialog)); - this.buttonCancel = new System.Windows.Forms.Button(); - this.buttonOk = new System.Windows.Forms.Button(); - this.listViewPlayers = new System.Windows.Forms.ListView(); - columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.SuspendLayout(); - // - // columnHeader1 - // - resources.ApplyResources(columnHeader1, "columnHeader1"); - // - // buttonCancel - // - resources.ApplyResources(this.buttonCancel, "buttonCancel"); - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - // - // listViewPlayers - // - resources.ApplyResources(this.listViewPlayers, "listViewPlayers"); - this.listViewPlayers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - columnHeader1}); - this.listViewPlayers.FullRowSelect = true; - this.listViewPlayers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.listViewPlayers.HideSelection = false; - this.listViewPlayers.MultiSelect = false; - this.listViewPlayers.Name = "listViewPlayers"; - this.listViewPlayers.ShowItemToolTips = true; - this.listViewPlayers.UseCompatibleStateImageBehavior = false; - this.listViewPlayers.View = System.Windows.Forms.View.Tile; - this.listViewPlayers.SelectedIndexChanged += new System.EventHandler(this.listViewPlayers_SelectedIndexChanged); - this.listViewPlayers.DoubleClick += new System.EventHandler(this.listViewPlayers_DoubleClick); - // - // SelectTvPlayerDialog - // - this.AcceptButton = this.buttonOk; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonCancel; - this.Controls.Add(this.listViewPlayers); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonOk); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SelectTvPlayerDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.Load += new System.EventHandler(this.SelectTvPlayerDialog_Load); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Button buttonCancel; - private System.Windows.Forms.Button buttonOk; - private System.Windows.Forms.ListView listViewPlayers; - } +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + partial class SelectTvPlayerDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ColumnHeader columnHeader1; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectTvPlayerDialog)); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.listViewPlayers = new System.Windows.Forms.ListView(); + columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.SuspendLayout(); + // + // columnHeader1 + // + resources.ApplyResources(columnHeader1, "columnHeader1"); + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Cancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // listViewPlayers + // + resources.ApplyResources(this.listViewPlayers, "listViewPlayers"); + this.listViewPlayers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeader1}); + this.listViewPlayers.FullRowSelect = true; + this.listViewPlayers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewPlayers.HideSelection = false; + this.listViewPlayers.MultiSelect = false; + this.listViewPlayers.Name = "listViewPlayers"; + this.listViewPlayers.ShowItemToolTips = true; + this.listViewPlayers.UseCompatibleStateImageBehavior = false; + this.listViewPlayers.View = System.Windows.Forms.View.Tile; + this.listViewPlayers.SelectedIndexChanged += new System.EventHandler(this.listViewPlayers_SelectedIndexChanged); + this.listViewPlayers.DoubleClick += new System.EventHandler(this.listViewPlayers_DoubleClick); + // + // SelectTvPlayerDialog + // + this.AcceptButton = this.buttonOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.listViewPlayers); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SelectTvPlayerDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Load += new System.EventHandler(this.SelectTvPlayerDialog_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.ListView listViewPlayers; + } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs index de572382..924ba650 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs @@ -1,54 +1,54 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Settings.TvPlayers.Editors; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers -{ - public partial class SelectTvPlayerDialog : Form - { - public SelectTvPlayerDialog() - { - InitializeComponent(); - } // constructor - - public TvPlayer SelectedPlayer - { - get; - private set; - } // SelectedPlayer - - private void SelectTvPlayerDialog_Load(object sender, EventArgs e) - { - var settings = TvPlayersSettingsRegistration.Settings; - - buttonOk.Enabled = false; - - listViewPlayers.SmallImageList = settings.PlayerIcons; - listViewPlayers.LargeImageList = settings.PlayerIcons; - listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6), - settings.PlayerIcons.ImageSize.Height + 4); - - TvPlayersSettingsEditor.FillList(listViewPlayers, new List(settings.Players), settings.DefaultPlayerId, false, true); - } // SelectTvPlayerDialog_Load - - private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) - { - SelectedPlayer = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; - buttonOk.Enabled = (SelectedPlayer != null); - } // listViewPlayers_SelectedIndexChanged - - private void listViewPlayers_DoubleClick(object sender, EventArgs e) - { - buttonOk.PerformClick(); - } // listViewPlayers_DoubleClick - } // class SelectTvPlayerDialog -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + public partial class SelectTvPlayerDialog : Form + { + public SelectTvPlayerDialog() + { + InitializeComponent(); + } // constructor + + public TvPlayer SelectedPlayer + { + get; + private set; + } // SelectedPlayer + + private void SelectTvPlayerDialog_Load(object sender, EventArgs e) + { + var settings = TvPlayersSettingsRegistration.Settings; + + buttonOk.Enabled = false; + + listViewPlayers.SmallImageList = settings.PlayerIcons; + listViewPlayers.LargeImageList = settings.PlayerIcons; + listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6), + settings.PlayerIcons.ImageSize.Height + 4); + + TvPlayersSettingsEditor.FillList(listViewPlayers, new List(settings.Players), settings.DefaultPlayerId, false, true); + } // SelectTvPlayerDialog_Load + + private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedPlayer = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; + buttonOk.Enabled = (SelectedPlayer != null); + } // listViewPlayers_SelectedIndexChanged + + private void listViewPlayers_DoubleClick(object sender, EventArgs e) + { + buttonOk.PerformClick(); + } // listViewPlayers_DoubleClick + } // class SelectTvPlayerDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs index 506c1288..ca4a9914 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs @@ -1,94 +1,94 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers -{ - [Serializable] - public class TvPlayer - { - public const string ParameterOpenBrace = "{param:"; - public const string ParameterCloseBrace = "}"; - - [XmlAttribute("name")] - public string Name - { - get; - set; - } // Name - - [XmlAttribute("id")] - public Guid Id - { - get; - set; - } // Id - - public string Path - { - get; - set; - } // Path - - [XmlArray("Arguments", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem("Arg")] - public string[] Arguments - { - get; - set; - } // Parameters - - internal string Validate(string ownerTag) - { - Name = ConfigCommon.Normalize(Name); - if (string.IsNullOrEmpty(Name)) - { - return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); - } // if - - Path = ConfigCommon.Normalize(Path); - if (string.IsNullOrEmpty(Path)) - { - return ConfigCommon.ErrorMissingEmpty("Path", ownerTag, "name", Name); - } // if - if (!System.IO.File.Exists(Path)) - { - return string.Format(Properties.Texts.PlayerConfigValidationPathNotFound, Name, Path); - } // if - - var validationError = ConfigCommon.ValidateArray(Arguments, "Argument", "Arguments", ownerTag); - if (validationError != null) return validationError; - - for (int index = 0; index < Arguments.Length; index++) - { - Arguments[index] = ConfigCommon.Normalize(Arguments[index]); - if (string.IsNullOrEmpty(Arguments[index])) - { - ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); ; - } // if - } // for - - return null; - } // Validate - - internal static string ValidateArray(TvPlayer[] players, string arrayElementTag, string arrayTag, string ownerTag) - { - var validationError = ConfigCommon.ValidateArray(players, arrayElementTag, arrayTag, ownerTag); - if (validationError != null) return validationError; - - foreach (var player in players) - { - validationError = player.Validate(arrayElementTag); - if (validationError != null) return validationError; - } // foreach - - return null; - } // ValidateArray - } // class TvPlayer -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + [Serializable] + public class TvPlayer + { + public const string ParameterOpenBrace = "{param:"; + public const string ParameterCloseBrace = "}"; + + [XmlAttribute("name")] + public string Name + { + get; + set; + } // Name + + [XmlAttribute("id")] + public Guid Id + { + get; + set; + } // Id + + public string Path + { + get; + set; + } // Path + + [XmlArray("Arguments", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem("Arg")] + public string[] Arguments + { + get; + set; + } // Parameters + + internal string Validate(string ownerTag) + { + Name = ConfigCommon.Normalize(Name); + if (string.IsNullOrEmpty(Name)) + { + return ConfigCommon.ErrorMissingEmptyAttribute("name", ownerTag); + } // if + + Path = ConfigCommon.Normalize(Path); + if (string.IsNullOrEmpty(Path)) + { + return ConfigCommon.ErrorMissingEmpty("Path", ownerTag, "name", Name); + } // if + if (!System.IO.File.Exists(Path)) + { + return string.Format(Properties.Texts.PlayerConfigValidationPathNotFound, Name, Path); + } // if + + var validationError = ConfigCommon.ValidateArray(Arguments, "Argument", "Arguments", ownerTag); + if (validationError != null) return validationError; + + for (int index = 0; index < Arguments.Length; index++) + { + Arguments[index] = ConfigCommon.Normalize(Arguments[index]); + if (string.IsNullOrEmpty(Arguments[index])) + { + ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); ; + } // if + } // for + + return null; + } // Validate + + internal static string ValidateArray(TvPlayer[] players, string arrayElementTag, string arrayTag, string ownerTag) + { + var validationError = ConfigCommon.ValidateArray(players, arrayElementTag, arrayTag, ownerTag); + if (validationError != null) return validationError; + + foreach (var player in players) + { + validationError = player.Validate(arrayElementTag); + if (validationError != null) return validationError; + } // foreach + + return null; + } // ValidateArray + } // class TvPlayer +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs index db54690a..7f16a3ce 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs @@ -1,126 +1,126 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers -{ - [XmlRoot("TvPlayers", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class TvPlayersSettings : IConfigurationItem - { - private TvPlayer DefaultPlayer; - private Guid DefaultPlayerGuid; - - public TvPlayersSettings() - { - PlayerIcons = new ImageList(); - PlayerIcons.ImageSize = new Size(32, 32); - PlayerIcons.ColorDepth = ColorDepth.Depth32Bit; - } // constructor - - public Guid DefaultPlayerId - { - get - { - return DefaultPlayerGuid; - } // get - set - { - DefaultPlayerGuid = value; - DefaultPlayer = null; - } // set - } // DefaultPlayerId - - public bool DirectLaunch - { - get; - set; - } // DirectLaunch - - [XmlArray("Players", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem("Player")] - public TvPlayer[] Players - { - get; - set; - } // Players - - public TvPlayer GetDefaultPlayer() - { - if (DefaultPlayer == null) - { - foreach (var player in Players) - { - if (player.Id == DefaultPlayerGuid) - { - DefaultPlayer = player; - break; - } // if - } // foreach - } // if - - return DefaultPlayer; - } // GetDefaultPlayer - - [XmlIgnore] - public ImageList PlayerIcons - { - get; - private set; - } // PlayerIcons - - public string GetPlayerIconKey(string playerPath) - { - var key = playerPath.ToLower(); - if (!PlayerIcons.Images.ContainsKey(key)) - { - var icon = Icon.ExtractAssociatedIcon(playerPath); - PlayerIcons.Images.Add(key, icon); - } // if - - return key; - } // GetPlayerIconKey - - public Image GetPlayerIcon(string playerPath) - { - var key = GetPlayerIconKey(playerPath); - return PlayerIcons.Images[key]; - } // GetPlayerIcon - - #region IConfigurationItem implementation - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // IConfigurationItem.SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return true; } - } // IConfigurationItem.CanValidate - - InitializationResult IConfigurationItem.Initializate() - { - throw new NotSupportedException(); - } // IConfigurationItem.Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - string validationError; - - validationError = TvPlayer.ValidateArray(Players, "Player", "Players", ownerTag); - if (validationError != null) return validationError; - - return null; - } // IConfigurationItem.Validate - - #endregion - } // class TvPlayersSettings -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + [XmlRoot("TvPlayers", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class TvPlayersSettings : IConfigurationItem + { + private TvPlayer DefaultPlayer; + private Guid DefaultPlayerGuid; + + public TvPlayersSettings() + { + PlayerIcons = new ImageList(); + PlayerIcons.ImageSize = new Size(32, 32); + PlayerIcons.ColorDepth = ColorDepth.Depth32Bit; + } // constructor + + public Guid DefaultPlayerId + { + get + { + return DefaultPlayerGuid; + } // get + set + { + DefaultPlayerGuid = value; + DefaultPlayer = null; + } // set + } // DefaultPlayerId + + public bool DirectLaunch + { + get; + set; + } // DirectLaunch + + [XmlArray("Players", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem("Player")] + public TvPlayer[] Players + { + get; + set; + } // Players + + public TvPlayer GetDefaultPlayer() + { + if (DefaultPlayer == null) + { + foreach (var player in Players) + { + if (player.Id == DefaultPlayerGuid) + { + DefaultPlayer = player; + break; + } // if + } // foreach + } // if + + return DefaultPlayer; + } // GetDefaultPlayer + + [XmlIgnore] + public ImageList PlayerIcons + { + get; + private set; + } // PlayerIcons + + public string GetPlayerIconKey(string playerPath) + { + var key = playerPath.ToLower(); + if (!PlayerIcons.Images.ContainsKey(key)) + { + var icon = Icon.ExtractAssociatedIcon(playerPath); + PlayerIcons.Images.Add(key, icon); + } // if + + return key; + } // GetPlayerIconKey + + public Image GetPlayerIcon(string playerPath) + { + var key = GetPlayerIconKey(playerPath); + return PlayerIcons.Images[key]; + } // GetPlayerIcon + + #region IConfigurationItem implementation + + bool IConfigurationItem.SupportsInitialization + { + get { return false; } + } // IConfigurationItem.SupportsInitialization + + bool IConfigurationItem.SupportsValidation + { + get { return true; } + } // IConfigurationItem.CanValidate + + InitializationResult IConfigurationItem.Initializate() + { + throw new NotSupportedException(); + } // IConfigurationItem.Initializate + + string IConfigurationItem.Validate(string ownerTag) + { + string validationError; + + validationError = TvPlayer.ValidateArray(Players, "Player", "Players", ownerTag); + if (validationError != null) return validationError; + + return null; + } // IConfigurationItem.Validate + + #endregion + } // class TvPlayersSettings +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs index 42895773..8ee093ce 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs @@ -1,79 +1,79 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration.Settings.TvPlayers -{ - public class TvPlayersSettingsRegistration : IConfigurationItemRegistration - { - public const string ConfigurationGuid = "{AE75DE5D-11A9-4B0F-9EFB-242E70C022C9}"; - private static int MyDirectIndex; - - public static TvPlayersSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as TvPlayersSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - public Guid Id - { - get { return new Guid(ConfigurationGuid); } - } // Id - - public bool HasEditor - { - get { return true; } - } // HasEditor - - public Type ItemType - { - get { return typeof(TvPlayersSettings); } - } // GetItemType - - public IConfigurationItem CreateDefault() - { - return null; - } // CreateDefault - - public string EditorDisplayName - { - get { return Properties.SettingsTexts.TvPlayersDisplayName; } - } // EditorDisplayName - - public string EditorDescription - { - get { return Properties.SettingsTexts.TvPlayersDescription; } - } // EditorDescription - - public Image EditorImage - { - get { return Properties.Resources.TvPlayersSettings_32; } - } // EditorImage - - public int EditorPriority - { - get { return 250; } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - var editor = new Editors.TvPlayersSettingsEditor() - { - Settings = data as TvPlayersSettings - }; - - return editor; - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - } // class TvPlayersSettingsRegistration -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + public class TvPlayersSettingsRegistration : IConfigurationItemRegistration + { + public const string ConfigurationGuid = "{AE75DE5D-11A9-4B0F-9EFB-242E70C022C9}"; + private static int MyDirectIndex; + + public static TvPlayersSettings Settings + { + get { return AppUiConfiguration.Current[MyDirectIndex] as TvPlayersSettings; } + set { AppUiConfiguration.Current[MyDirectIndex] = value; } + } // Settings + + public Guid Id + { + get { return new Guid(ConfigurationGuid); } + } // Id + + public bool HasEditor + { + get { return true; } + } // HasEditor + + public Type ItemType + { + get { return typeof(TvPlayersSettings); } + } // GetItemType + + public IConfigurationItem CreateDefault() + { + return null; + } // CreateDefault + + public string EditorDisplayName + { + get { return Properties.SettingsTexts.TvPlayersDisplayName; } + } // EditorDisplayName + + public string EditorDescription + { + get { return Properties.SettingsTexts.TvPlayersDescription; } + } // EditorDescription + + public Image EditorImage + { + get { return Properties.Resources.TvPlayersSettings_32; } + } // EditorImage + + public int EditorPriority + { + get { return 250; } + } // EditorPriority + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + var editor = new Editors.TvPlayersSettingsEditor() + { + Settings = data as TvPlayersSettings + }; + + return editor; + } // CreateEditor + + public int DirectIndex + { + get { return MyDirectIndex; } + set { MyDirectIndex = value; } + } // DirectIndex + } // class TvPlayersSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/StringPair.cs b/1.5 'Kruger 60'/UiServices.Config/StringPair.cs index e97135c8..d3048cd8 100644 --- a/1.5 'Kruger 60'/UiServices.Config/StringPair.cs +++ b/1.5 'Kruger 60'/UiServices.Config/StringPair.cs @@ -1,130 +1,130 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.UiServices.Configuration -{ - [Serializable] - public class StringPair - { - private int? hashCode; - private string item1, item2; - - public StringPair() - { - // no op - } // constructor - - public StringPair(string item1, string item2) - { - this.item1 = item1; - this.item2 = item2; - } // constructor - - [XmlIgnore] - public string Item1 - { - get - { - return item1; - } // get - set - { - item1 = value; - CalcHashCode(); - } // set - } // Item1 - - [XmlIgnore] - public string Item2 - { - get - { - return item2; - } // get - set - { - item2 = value; - CalcHashCode(); - } // set - } // Item2 - - public string this[int index] - { - get - { - switch (index) - { - case 0: return Item1; - case 1: return Item2; - default: - throw new ArgumentOutOfRangeException(); - } // switch - } // get - set - { - switch (index) - { - case 0: Item1 = value; break; - case 1: Item2 = value; break; - default: - throw new ArgumentOutOfRangeException(); - } // switch - } // set - } // this[int] - - public void SetPair(string item1, string item2) - { - this.item1 = item1; - this.item2 = item2; - CalcHashCode(); - } // SetPair - - public override int GetHashCode() - { - if (!hashCode.HasValue) - { - CalcHashCode(); - } // if - - return hashCode.Value; - } // GetHashCode - - public override string ToString() - { - return string.Format("<{0}, {1}>", Item1, Item2); - } // ToString - - public override bool Equals(object obj) - { - var pair = obj as StringPair; - - if (object.ReferenceEquals(this, obj)) return true; - if (pair == null) return false; - - return ((pair.Item1 == Item1) && (pair.Item2 == Item2)); - } // Equals - - public static bool operator == (StringPair a, StringPair b) - { - if ((a == null) || (b == null)) return false; - return ((a.Item1 == b.Item1) && (a.Item2 == b.Item2)); - } // operator == - - public static bool operator !=(StringPair a, StringPair b) - { - if ((a == null) || (b == null)) return true; - return ((a.Item1 != b.Item1) || (a.Item2 != b.Item2)); - } // operator != - - private void CalcHashCode() - { - hashCode = ToString().GetHashCode(); - } // CalcHashCode - } // StringPair -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration +{ + [Serializable] + public class StringPair + { + private int? hashCode; + private string item1, item2; + + public StringPair() + { + // no op + } // constructor + + public StringPair(string item1, string item2) + { + this.item1 = item1; + this.item2 = item2; + } // constructor + + [XmlIgnore] + public string Item1 + { + get + { + return item1; + } // get + set + { + item1 = value; + CalcHashCode(); + } // set + } // Item1 + + [XmlIgnore] + public string Item2 + { + get + { + return item2; + } // get + set + { + item2 = value; + CalcHashCode(); + } // set + } // Item2 + + public string this[int index] + { + get + { + switch (index) + { + case 0: return Item1; + case 1: return Item2; + default: + throw new ArgumentOutOfRangeException(); + } // switch + } // get + set + { + switch (index) + { + case 0: Item1 = value; break; + case 1: Item2 = value; break; + default: + throw new ArgumentOutOfRangeException(); + } // switch + } // set + } // this[int] + + public void SetPair(string item1, string item2) + { + this.item1 = item1; + this.item2 = item2; + CalcHashCode(); + } // SetPair + + public override int GetHashCode() + { + if (!hashCode.HasValue) + { + CalcHashCode(); + } // if + + return hashCode.Value; + } // GetHashCode + + public override string ToString() + { + return string.Format("<{0}, {1}>", Item1, Item2); + } // ToString + + public override bool Equals(object obj) + { + var pair = obj as StringPair; + + if (object.ReferenceEquals(this, obj)) return true; + if (pair == null) return false; + + return ((pair.Item1 == Item1) && (pair.Item2 == Item2)); + } // Equals + + public static bool operator == (StringPair a, StringPair b) + { + if ((a == null) || (b == null)) return false; + return ((a.Item1 == b.Item1) && (a.Item2 == b.Item2)); + } // operator == + + public static bool operator !=(StringPair a, StringPair b) + { + if ((a == null) || (b == null)) return true; + return ((a.Item1 != b.Item1) || (a.Item2 != b.Item2)); + } // operator != + + private void CalcHashCode() + { + hashCode = ToString().GetHashCode(); + } // CalcHashCode + } // StringPair +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs b/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs index dcc751d1..2c9e9695 100644 --- a/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs +++ b/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs @@ -1,46 +1,46 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public class UiContentProvider - { - public UiContentProviderIdentification Identification - { - get; - protected set; - } // Identification - - public UiContentProviderFriendlyNames FriendlyNames - { - get; - protected set; - } // FriendlyNames - - public BootstrapData Bootstrap - { - get; - protected set; - } // Bootstrap - - public static UiContentProvider FromXmlConfiguration(IpTvProviderData contentProvider, IEnumerable uiCultures) - { - if (contentProvider == null) throw new ArgumentNullException(); - if (uiCultures == null) throw new ArgumentNullException(); - - var result = new UiContentProvider(); - - result.Identification = UiContentProviderIdentification.FromXmlConfiguration(contentProvider.Identification, uiCultures); - result.FriendlyNames = UiContentProviderFriendlyNames.FromXmlConfiguration(contentProvider.FriendlyNames, uiCultures); - result.Bootstrap = contentProvider.Bootstrap; - - return result; - } // FromXmlConfiguration - } // class UiContentProvider -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public class UiContentProvider + { + public UiContentProviderIdentification Identification + { + get; + protected set; + } // Identification + + public UiContentProviderFriendlyNames FriendlyNames + { + get; + protected set; + } // FriendlyNames + + public BootstrapData Bootstrap + { + get; + protected set; + } // Bootstrap + + public static UiContentProvider FromXmlConfiguration(IpTvProviderData contentProvider, IEnumerable uiCultures) + { + if (contentProvider == null) throw new ArgumentNullException(); + if (uiCultures == null) throw new ArgumentNullException(); + + var result = new UiContentProvider(); + + result.Identification = UiContentProviderIdentification.FromXmlConfiguration(contentProvider.Identification, uiCultures); + result.FriendlyNames = UiContentProviderFriendlyNames.FromXmlConfiguration(contentProvider.FriendlyNames, uiCultures); + result.Bootstrap = contentProvider.Bootstrap; + + return result; + } // FromXmlConfiguration + } // class UiContentProvider +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs b/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs index 656453a6..9f7ca4b2 100644 --- a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs +++ b/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs @@ -1,54 +1,54 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public class UiContentProviderFriendlyNames - { - public IDictionary ServiceProvider - { - get; - protected set; - } // ServiceProvider - - public static UiContentProviderFriendlyNames FromXmlConfiguration(FriendlyNames friendlyNames, IEnumerable uiCultures) - { - if (friendlyNames == null) throw new ArgumentNullException(); - if (uiCultures == null) throw new ArgumentNullException(); - - var result = new UiContentProviderFriendlyNames(); - - result.ServiceProvider = FromSpFriendlyNames(friendlyNames.Providers, uiCultures); - - return result; - } // FromXmlConfiguration - - private static IDictionary FromSpFriendlyNames(SpFriendlyNames[] spNames, IEnumerable uiCultures) - { - if ((spNames == null) || (spNames.Length == 0)) - { - return new Dictionary(); - } // if - - // get list of localized names; if no culture was matched, get the first item of the array (we asume it's the default culture) - var matching = LocalizedObject.FindMatchingCultureObject(spNames, uiCultures); - var localizedNames = (matching != null) ? matching.Names : spNames[0].Names; - - // populate dictionary - var result = new Dictionary(localizedNames.Length, StringComparer.InvariantCultureIgnoreCase); - foreach (var serviceProvider in localizedNames) - { - result.Add(serviceProvider.Domain, serviceProvider.Name); - } // foreach - - return result; - } // LoadServiceProvider - } // class UiContentProviderFriendlyNames -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public class UiContentProviderFriendlyNames + { + public IDictionary ServiceProvider + { + get; + protected set; + } // ServiceProvider + + public static UiContentProviderFriendlyNames FromXmlConfiguration(FriendlyNames friendlyNames, IEnumerable uiCultures) + { + if (friendlyNames == null) throw new ArgumentNullException(); + if (uiCultures == null) throw new ArgumentNullException(); + + var result = new UiContentProviderFriendlyNames(); + + result.ServiceProvider = FromSpFriendlyNames(friendlyNames.Providers, uiCultures); + + return result; + } // FromXmlConfiguration + + private static IDictionary FromSpFriendlyNames(SpFriendlyNames[] spNames, IEnumerable uiCultures) + { + if ((spNames == null) || (spNames.Length == 0)) + { + return new Dictionary(); + } // if + + // get list of localized names; if no culture was matched, get the first item of the array (we asume it's the default culture) + var matching = LocalizedObject.FindMatchingCultureObject(spNames, uiCultures); + var localizedNames = (matching != null) ? matching.Names : spNames[0].Names; + + // populate dictionary + var result = new Dictionary(localizedNames.Length, StringComparer.InvariantCultureIgnoreCase); + foreach (var serviceProvider in localizedNames) + { + result.Add(serviceProvider.Domain, serviceProvider.Name); + } // foreach + + return result; + } // LoadServiceProvider + } // class UiContentProviderFriendlyNames +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs b/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs index d40c3992..7830f74c 100644 --- a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs +++ b/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs @@ -1,62 +1,62 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public class UiContentProviderIdentification - { - public string Id - { - get; - protected set; - } // Id - - public string DisplayName - { - get; - protected set; - } // DisplayName - - public string DisplayDescription - { - get; - protected set; - } // DisplayDescription - - public string LogosPackage - { - get; - protected set; - } // LogosPackage - - public static UiContentProviderIdentification FromXmlConfiguration(Identification identification, IEnumerable uiCultures) - { - if (identification == null) throw new ArgumentNullException(); - if (uiCultures == null) throw new ArgumentNullException(); - - var result = new UiContentProviderIdentification(); - - // id - result.Id = identification.Id; - - // identification - var matching = LocalizedObject.FindMatchingCultureObject(identification.Localized, uiCultures); - var localized = (matching != null) ? matching : identification.Localized[0]; - - result.DisplayName = localized.Name; - result.DisplayDescription = localized.Description; - - // packages names - result.LogosPackage = identification.LogosPackageName; - - return result; - } // FromXmlConfiguration - } // class UiContentProviderIdentification -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public class UiContentProviderIdentification + { + public string Id + { + get; + protected set; + } // Id + + public string DisplayName + { + get; + protected set; + } // DisplayName + + public string DisplayDescription + { + get; + protected set; + } // DisplayDescription + + public string LogosPackage + { + get; + protected set; + } // LogosPackage + + public static UiContentProviderIdentification FromXmlConfiguration(Identification identification, IEnumerable uiCultures) + { + if (identification == null) throw new ArgumentNullException(); + if (uiCultures == null) throw new ArgumentNullException(); + + var result = new UiContentProviderIdentification(); + + // id + result.Id = identification.Id; + + // identification + var matching = LocalizedObject.FindMatchingCultureObject(identification.Localized, uiCultures); + var localized = (matching != null) ? matching : identification.Localized[0]; + + result.DisplayName = localized.Name; + result.DisplayDescription = localized.Description; + + // packages names + result.LogosPackage = identification.LogosPackageName; + + return result; + } // FromXmlConfiguration + } // class UiContentProviderIdentification +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj b/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj index 23c04e6e..4e5efcb0 100644 --- a/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj +++ b/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj @@ -1,337 +1,337 @@ - - - - - Debug - AnyCPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75} - Library - Properties - Project.IpTv.UiServices.Configuration - UiServices.Configuration - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - True - True - CommonUiResources.resx - - - Form - - - ConfigurationForm.cs - - - UserControl - - - ArgumentsEditor.cs - - - UserControl - - - ArgumentEditor.cs - - - Form - - - ArgumentEditorDialog.cs - - - - - - - - - - True - True - InvariantTexts.resx - - - True - True - Resources.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Texts.resx - - - True - True - SettingsTexts.resx - - - UserControl - - - NetworkSettingsEditor.cs - - - - - - Form - - - TvPlayerEditorDialog.cs - - - UserControl - - - TvPlayersSettingsEditor.cs - - - Form - - - SelectTvPlayerDialog.cs - - - - - - - - - - - - - - ResXFileCodeGenerator - Designer - CommonUiResources.Designer.cs - - - ConfigurationForm.cs - - - ConfigurationForm.cs - - - ArgumentsEditor.cs - - - ArgumentsEditor.cs - - - ArgumentEditor.cs - - - ArgumentEditor.cs - - - ArgumentEditorDialog.cs - - - ArgumentEditorDialog.cs - - - ResXFileCodeGenerator - InvariantTexts.Designer.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - - - Designer - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - ResXFileCodeGenerator - SettingsTexts.Designer.cs - - - NetworkSettingsEditor.cs - - - NetworkSettingsEditor.cs - - - TvPlayerEditorDialog.cs - - - TvPlayerEditorDialog.cs - - - TvPlayersSettingsEditor.cs - - - TvPlayersSettingsEditor.cs - - - SelectTvPlayerDialog.cs - - - SelectTvPlayerDialog.cs - - - - - - - - - - - - - - - - - - - - - - - Resources\Action_Add_16xM.png - - - Resources\Action_AttachFile_16x16.png - - - Resources\Action_Cancel_16x16.png - - - Resources\Action_Delete_16x16.png - - - Resources\Action_GoNextDown_16x16.png - - - Resources\Action_GoPreviousUp_16x16.png - - - Resources\Action_Ok_16x16.png - - - Resources\Action_Properties_16x16.png - - - Resources\Action_Property_Add_16x16.png - - - Resources\Action_Property_Edit_16x16.png - - - Resources\Status_Info_16x16.png - - - Resources\Status_Ok_SmallCircle_16x16.png - - - Resources\Status_Warning_16x16.png - - - - - - - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} - UiServices.Common - - - - - + + + + + Debug + AnyCPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75} + Library + Properties + IpTviewr.UiServices.Configuration + UiServices.Configuration + v3.5 + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + True + True + CommonUiResources.resx + + + Form + + + ConfigurationForm.cs + + + UserControl + + + ArgumentsEditor.cs + + + UserControl + + + ArgumentEditor.cs + + + Form + + + ArgumentEditorDialog.cs + + + + + + + + + + True + True + InvariantTexts.resx + + + True + True + Resources.resx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Texts.resx + + + True + True + SettingsTexts.resx + + + UserControl + + + NetworkSettingsEditor.cs + + + + + + Form + + + TvPlayerEditorDialog.cs + + + UserControl + + + TvPlayersSettingsEditor.cs + + + Form + + + SelectTvPlayerDialog.cs + + + + + + + + + + + + + + ResXFileCodeGenerator + Designer + CommonUiResources.Designer.cs + + + ConfigurationForm.cs + + + ConfigurationForm.cs + + + ArgumentsEditor.cs + + + ArgumentsEditor.cs + + + ArgumentEditor.cs + + + ArgumentEditor.cs + + + ArgumentEditorDialog.cs + + + ArgumentEditorDialog.cs + + + ResXFileCodeGenerator + InvariantTexts.Designer.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + Designer + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + ResXFileCodeGenerator + SettingsTexts.Designer.cs + + + NetworkSettingsEditor.cs + + + NetworkSettingsEditor.cs + + + TvPlayerEditorDialog.cs + + + TvPlayerEditorDialog.cs + + + TvPlayersSettingsEditor.cs + + + TvPlayersSettingsEditor.cs + + + SelectTvPlayerDialog.cs + + + SelectTvPlayerDialog.cs + + + + + + + + + + + + + + + + + + + + + + + Resources\Action_Add_16xM.png + + + Resources\Action_AttachFile_16x16.png + + + Resources\Action_Cancel_16x16.png + + + Resources\Action_Delete_16x16.png + + + Resources\Action_GoNextDown_16x16.png + + + Resources\Action_GoPreviousUp_16x16.png + + + Resources\Action_Ok_16x16.png + + + Resources\Action_Properties_16x16.png + + + Resources\Action_Property_Add_16x16.png + + + Resources\Action_Property_Edit_16x16.png + + + Resources\Status_Info_16x16.png + + + Resources\Status_Ok_SmallCircle_16x16.png + + + Resources\Status_Warning_16x16.png + + + + + + + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs b/1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs index 33bffb29..7c54e4a7 100644 --- a/1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs +++ b/1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs @@ -1,101 +1,101 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -// This file contains code (c) Microsoft Corporation, licensed under Microsoft Public License -// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL. -// Original source code: http://1code.codeplex.com/SourceControl/changeset/view/39074#842775 - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; - -namespace Project.IpTv.UiServices.Configuration -{ - public static class WindowsBitness - { - public static bool Is32BitWindows() - { - if (IntPtr.Size == 8) - { - // 64-bit programs run only on Win64 - return false; - } - else - { - // 32-bit programs run on both 32-bit and 64-bit Windows - // Detect whether the current process is a 32-bit process - // running on a 64-bit system - return !SafeIsWow64Process(); - } // if-else - } // Is32BitWindows - - /// - /// The function determines whether the current operating system is a - /// 64-bit operating system. - /// - /// - /// The function returns true if the operating system is 64-bit; - /// otherwise, it returns false. - /// - public static bool Is64BitWindows() - { - if (IntPtr.Size == 8) - { - // 64-bit programs run only on Win64 - return true; - } - else - { - // 32-bit programs run on both 32-bit and 64-bit Windows - // Detect whether the current process is a 32-bit process - // running on a 64-bit system. - return SafeIsWow64Process(); - } // if-else - } // Is64BitWindows - - /// - /// The function determins whether a method exists in the export - /// table of a certain module. - /// - /// The name of the module - /// The name of the method - /// - /// The function returns true if the method specified by methodName - /// exists in the export table of the module specified by moduleName. - /// - private static bool DoesWin32MethodExist(string moduleName, string methodName) - { - IntPtr moduleHandle = GetModuleHandle(moduleName); - if (moduleHandle == IntPtr.Zero) - { - return false; - } - return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero); - } // DoesWin32MethodExist - - private static bool SafeIsWow64Process() - { - bool flag; - - if (!DoesWin32MethodExist("kernel32.dll", "IsWow64Process")) return false; - IsWow64Process(GetCurrentProcess(), out flag); - - return flag; - } // SafeIsWow64Process - - [DllImport("kernel32.dll")] - private static extern IntPtr GetCurrentProcess(); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - private static extern IntPtr GetModuleHandle(string moduleName); - - [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] - private static extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPStr)]string procName); - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process); - } // WindowsBitness -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +// This file contains code (c) Microsoft Corporation, licensed under Microsoft Public License +// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL. +// Original source code: http://1code.codeplex.com/SourceControl/changeset/view/39074#842775 + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace IpTviewr.UiServices.Configuration +{ + public static class WindowsBitness + { + public static bool Is32BitWindows() + { + if (IntPtr.Size == 8) + { + // 64-bit programs run only on Win64 + return false; + } + else + { + // 32-bit programs run on both 32-bit and 64-bit Windows + // Detect whether the current process is a 32-bit process + // running on a 64-bit system + return !SafeIsWow64Process(); + } // if-else + } // Is32BitWindows + + /// + /// The function determines whether the current operating system is a + /// 64-bit operating system. + /// + /// + /// The function returns true if the operating system is 64-bit; + /// otherwise, it returns false. + /// + public static bool Is64BitWindows() + { + if (IntPtr.Size == 8) + { + // 64-bit programs run only on Win64 + return true; + } + else + { + // 32-bit programs run on both 32-bit and 64-bit Windows + // Detect whether the current process is a 32-bit process + // running on a 64-bit system. + return SafeIsWow64Process(); + } // if-else + } // Is64BitWindows + + /// + /// The function determins whether a method exists in the export + /// table of a certain module. + /// + /// The name of the module + /// The name of the method + /// + /// The function returns true if the method specified by methodName + /// exists in the export table of the module specified by moduleName. + /// + private static bool DoesWin32MethodExist(string moduleName, string methodName) + { + IntPtr moduleHandle = GetModuleHandle(moduleName); + if (moduleHandle == IntPtr.Zero) + { + return false; + } + return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero); + } // DoesWin32MethodExist + + private static bool SafeIsWow64Process() + { + bool flag; + + if (!DoesWin32MethodExist("kernel32.dll", "IsWow64Process")) return false; + IsWow64Process(GetCurrentProcess(), out flag); + + return flag; + } // SafeIsWow64Process + + [DllImport("kernel32.dll")] + private static extern IntPtr GetCurrentProcess(); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr GetModuleHandle(string moduleName); + + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPStr)]string procName); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process); + } // WindowsBitness +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs b/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs index dd097a7b..d2d122e7 100644 --- a/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs +++ b/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs @@ -1,48 +1,48 @@ -using Project.IpTv.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; -using System.Xml.XPath; - -namespace Project.IpTv.UiServices.Configuration -{ - [Serializable] - public class XmlConfigurationItems - { - public static XmlElement GetXmlElement(Guid id, IConfigurationItem item) - { - XmlDocument xDoc = new XmlDocument(); - XPathNavigator xNavigator = xDoc.CreateNavigator(); - using (XmlWriter writer = xNavigator.AppendChild()) - { - XmlSerializer ser = new XmlSerializer(item.GetType()); - ser.Serialize(writer, (object)item); - } // using - - var xAttr = xDoc.CreateAttribute("configurationId"); - xAttr.Value = id.ToString(); - xDoc.DocumentElement.Attributes.Append(xAttr); - - return xDoc.DocumentElement; - } // GetXmlElement - - [XmlArray("Registry")] - [XmlArrayItem("Type")] - public List Registry - { - get; - set; - } // Registry - - [XmlAnyElement] - public List XmlData - { - get; - set; - } // XmlData - } // class XmlConfigurationItems -} // namespace +using IpTviewr.Common.Serialization; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; +using System.Xml.XPath; + +namespace IpTviewr.UiServices.Configuration +{ + [Serializable] + public class XmlConfigurationItems + { + public static XmlElement GetXmlElement(Guid id, IConfigurationItem item) + { + XmlDocument xDoc = new XmlDocument(); + XPathNavigator xNavigator = xDoc.CreateNavigator(); + using (XmlWriter writer = xNavigator.AppendChild()) + { + XmlSerializer ser = new XmlSerializer(item.GetType()); + ser.Serialize(writer, (object)item); + } // using + + var xAttr = xDoc.CreateAttribute("configurationId"); + xAttr.Value = id.ToString(); + xDoc.DocumentElement.Attributes.Append(xAttr); + + return xDoc.DocumentElement; + } // GetXmlElement + + [XmlArray("Registry")] + [XmlArrayItem("Type")] + public List Registry + { + get; + set; + } // Registry + + [XmlAnyElement] + public List XmlData + { + get; + set; + } // XmlData + } // class XmlConfigurationItems +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs index 755ccaf6..8955c7fd 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs @@ -1,17 +1,17 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal interface ISettingsEditor - { - void SetContainer(ISettingsEditorContainer container); - - bool IsDataChanged - { - get; - } // IsDataChanged - } // internal interface ISettingsEditor -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal interface ISettingsEditor + { + void SetContainer(ISettingsEditorContainer container); + + bool IsDataChanged + { + get; + } // IsDataChanged + } // internal interface ISettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs index fe5e2d58..7be02436 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs @@ -1,12 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal interface ISettingsEditorContainer - { - void SetDataChanged(); - } // internal interface ISettingsEditorContainer -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal interface ISettingsEditorContainer + { + void SetDataChanged(); + } // internal interface ISettingsEditorContainer +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs index 1bb784a5..e0dc0d4a 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs @@ -1,36 +1,36 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal interface ISettingsEditorModeColumns : ISettingsEditor - { - List> ColumnsList - { - set; - } // ColumnsList - - List> ColumnsNoneList - { - set; - } // ColumnsNoneList - - IList Columns - { - set; - } // Columns - - List SelectedColumns - { - get; - } // SelectedColumns - - Control GetUnderlyingControl(); - } // internal interface ISettingsEditorModeColumns -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal interface ISettingsEditorModeColumns : ISettingsEditor + { + List> ColumnsList + { + set; + } // ColumnsList + + List> ColumnsNoneList + { + set; + } // ColumnsNoneList + + IList Columns + { + set; + } // Columns + + List SelectedColumns + { + get; + } // SelectedColumns + + Control GetUnderlyingControl(); + } // internal interface ISettingsEditorModeColumns +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs index 42057552..9f1608c9 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs @@ -1,41 +1,41 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal class SettingsEditorBaseUserControl : UserControl, ISettingsEditor - { - private ISettingsEditorContainer EditorContainer - { - get; - set; - } // EditorContainer - - #region ISettingsEditor implementation - - public void SetContainer(ISettingsEditorContainer container) - { - EditorContainer = container; - } // SetContainer - - public bool IsDataChanged - { - get; - private set; - } // IsDataChanged - - #endregion - - protected void SetDataChanged() - { - IsDataChanged = true; - if (EditorContainer != null) - { - EditorContainer.SetDataChanged(); - } // if - } // SetDataChanged - } // internal class SettingsEditorBaseUserControl -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal class SettingsEditorBaseUserControl : UserControl, ISettingsEditor + { + private ISettingsEditorContainer EditorContainer + { + get; + set; + } // EditorContainer + + #region ISettingsEditor implementation + + public void SetContainer(ISettingsEditorContainer container) + { + EditorContainer = container; + } // SetContainer + + public bool IsDataChanged + { + get; + private set; + } // IsDataChanged + + #endregion + + protected void SetDataChanged() + { + IsDataChanged = true; + if (EditorContainer != null) + { + EditorContainer.SetDataChanged(); + } // if + } // SetDataChanged + } // internal class SettingsEditorBaseUserControl +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs index 8dcfdbbf..cd3aeb7a 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs @@ -1,43 +1,43 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal class SettingsEditorModeBaseColumn : SettingsEditorBaseUserControl, ISettingsEditorModeColumns - { - #region ISettingsEditorModeColumns implementation - - public List> ColumnsList - { - protected get; - set; - } // Columns - - public List> ColumnsNoneList - { - protected get; - set; - } // Columns - - public IList Columns - { - protected get; - set; - } // Columns - - public virtual List SelectedColumns - { - get { throw new NotImplementedException(); } - } // SelectedColumns - - public Control GetUnderlyingControl() - { - return this; - } // GetUnderlyingControl - - #endregion - } // SettingsEditorModeBaseColumn -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal class SettingsEditorModeBaseColumn : SettingsEditorBaseUserControl, ISettingsEditorModeColumns + { + #region ISettingsEditorModeColumns implementation + + public List> ColumnsList + { + protected get; + set; + } // Columns + + public List> ColumnsNoneList + { + protected get; + set; + } // Columns + + public IList Columns + { + protected get; + set; + } // Columns + + public virtual List SelectedColumns + { + get { throw new NotImplementedException(); } + } // SelectedColumns + + public Control GetUnderlyingControl() + { + return this; + } // GetUnderlyingControl + + #endregion + } // SettingsEditorModeBaseColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs index 6d373f61..180979f3 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs @@ -1,138 +1,138 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - partial class SettingsEditorModeMultiColumn - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorModeMultiColumn)); - this.groupBoxData = new System.Windows.Forms.GroupBox(); - this.buttonMoveDown = new System.Windows.Forms.Button(); - this.buttonMoveUp = new System.Windows.Forms.Button(); - this.buttonRemove = new System.Windows.Forms.Button(); - this.listSelectedColumns = new System.Windows.Forms.ListBox(); - this.buttonAddColumn = new System.Windows.Forms.Button(); - this.comboColumns = new System.Windows.Forms.ComboBox(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.groupBoxData.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxData - // - resources.ApplyResources(this.groupBoxData, "groupBoxData"); - this.groupBoxData.Controls.Add(this.buttonMoveDown); - this.groupBoxData.Controls.Add(this.buttonMoveUp); - this.groupBoxData.Controls.Add(this.buttonRemove); - this.groupBoxData.Controls.Add(this.listSelectedColumns); - this.groupBoxData.Controls.Add(this.buttonAddColumn); - this.groupBoxData.Controls.Add(this.comboColumns); - this.groupBoxData.Name = "groupBoxData"; - this.groupBoxData.TabStop = false; - // - // buttonMoveDown - // - this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - resources.ApplyResources(this.buttonMoveDown, "buttonMoveDown"); - this.buttonMoveDown.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_GoNextDown_16x16; - this.buttonMoveDown.Name = "buttonMoveDown"; - this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); - this.buttonMoveDown.UseVisualStyleBackColor = true; - this.buttonMoveDown.Click += new System.EventHandler(this.buttonMoveDown_Click); - // - // buttonMoveUp - // - this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - resources.ApplyResources(this.buttonMoveUp, "buttonMoveUp"); - this.buttonMoveUp.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_GoPreviousUp_16x16; - this.buttonMoveUp.Name = "buttonMoveUp"; - this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); - this.buttonMoveUp.UseVisualStyleBackColor = true; - this.buttonMoveUp.Click += new System.EventHandler(this.buttonMoveUp_Click); - // - // buttonRemove - // - this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - resources.ApplyResources(this.buttonRemove, "buttonRemove"); - this.buttonRemove.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_Delete_16x16; - this.buttonRemove.Name = "buttonRemove"; - this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); - this.buttonRemove.UseVisualStyleBackColor = true; - this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); - // - // listSelectedColumns - // - this.listSelectedColumns.FormattingEnabled = true; - resources.ApplyResources(this.listSelectedColumns, "listSelectedColumns"); - this.listSelectedColumns.Name = "listSelectedColumns"; - // - // buttonAddColumn - // - this.buttonAddColumn.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - resources.ApplyResources(this.buttonAddColumn, "buttonAddColumn"); - this.buttonAddColumn.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_Add_16xM; - this.buttonAddColumn.Name = "buttonAddColumn"; - this.toolTip.SetToolTip(this.buttonAddColumn, resources.GetString("buttonAddColumn.ToolTip")); - this.buttonAddColumn.UseVisualStyleBackColor = true; - this.buttonAddColumn.Click += new System.EventHandler(this.buttonAddColumn_Click); - // - // comboColumns - // - this.comboColumns.DisplayMember = "Value"; - this.comboColumns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboColumns.DropDownWidth = 250; - this.comboColumns.FormattingEnabled = true; - resources.ApplyResources(this.comboColumns, "comboColumns"); - this.comboColumns.Name = "comboColumns"; - this.comboColumns.ValueMember = "Key"; - // - // SettingsEditorModeMultiColumn - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxData); - this.Name = "SettingsEditorModeMultiColumn"; - this.Load += new System.EventHandler(this.SettingsEditorModeMultiColumn_Load); - this.groupBoxData.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxData; - private System.Windows.Forms.ComboBox comboColumns; - private System.Windows.Forms.Button buttonRemove; - private System.Windows.Forms.ListBox listSelectedColumns; - private System.Windows.Forms.Button buttonAddColumn; - private System.Windows.Forms.Button buttonMoveDown; - private System.Windows.Forms.Button buttonMoveUp; - private System.Windows.Forms.ToolTip toolTip; - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + partial class SettingsEditorModeMultiColumn + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorModeMultiColumn)); + this.groupBoxData = new System.Windows.Forms.GroupBox(); + this.buttonMoveDown = new System.Windows.Forms.Button(); + this.buttonMoveUp = new System.Windows.Forms.Button(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.listSelectedColumns = new System.Windows.Forms.ListBox(); + this.buttonAddColumn = new System.Windows.Forms.Button(); + this.comboColumns = new System.Windows.Forms.ComboBox(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + resources.ApplyResources(this.groupBoxData, "groupBoxData"); + this.groupBoxData.Controls.Add(this.buttonMoveDown); + this.groupBoxData.Controls.Add(this.buttonMoveUp); + this.groupBoxData.Controls.Add(this.buttonRemove); + this.groupBoxData.Controls.Add(this.listSelectedColumns); + this.groupBoxData.Controls.Add(this.buttonAddColumn); + this.groupBoxData.Controls.Add(this.comboColumns); + this.groupBoxData.Name = "groupBoxData"; + this.groupBoxData.TabStop = false; + // + // buttonMoveDown + // + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + resources.ApplyResources(this.buttonMoveDown, "buttonMoveDown"); + this.buttonMoveDown.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_GoNextDown_16x16; + this.buttonMoveDown.Name = "buttonMoveDown"; + this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); + this.buttonMoveDown.UseVisualStyleBackColor = true; + this.buttonMoveDown.Click += new System.EventHandler(this.buttonMoveDown_Click); + // + // buttonMoveUp + // + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + resources.ApplyResources(this.buttonMoveUp, "buttonMoveUp"); + this.buttonMoveUp.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_GoPreviousUp_16x16; + this.buttonMoveUp.Name = "buttonMoveUp"; + this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); + this.buttonMoveUp.UseVisualStyleBackColor = true; + this.buttonMoveUp.Click += new System.EventHandler(this.buttonMoveUp_Click); + // + // buttonRemove + // + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + resources.ApplyResources(this.buttonRemove, "buttonRemove"); + this.buttonRemove.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_Delete_16x16; + this.buttonRemove.Name = "buttonRemove"; + this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // listSelectedColumns + // + this.listSelectedColumns.FormattingEnabled = true; + resources.ApplyResources(this.listSelectedColumns, "listSelectedColumns"); + this.listSelectedColumns.Name = "listSelectedColumns"; + // + // buttonAddColumn + // + this.buttonAddColumn.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + resources.ApplyResources(this.buttonAddColumn, "buttonAddColumn"); + this.buttonAddColumn.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_Add_16xM; + this.buttonAddColumn.Name = "buttonAddColumn"; + this.toolTip.SetToolTip(this.buttonAddColumn, resources.GetString("buttonAddColumn.ToolTip")); + this.buttonAddColumn.UseVisualStyleBackColor = true; + this.buttonAddColumn.Click += new System.EventHandler(this.buttonAddColumn_Click); + // + // comboColumns + // + this.comboColumns.DisplayMember = "Value"; + this.comboColumns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboColumns.DropDownWidth = 250; + this.comboColumns.FormattingEnabled = true; + resources.ApplyResources(this.comboColumns, "comboColumns"); + this.comboColumns.Name = "comboColumns"; + this.comboColumns.ValueMember = "Key"; + // + // SettingsEditorModeMultiColumn + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxData); + this.Name = "SettingsEditorModeMultiColumn"; + this.Load += new System.EventHandler(this.SettingsEditorModeMultiColumn_Load); + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxData; + private System.Windows.Forms.ComboBox comboColumns; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.ListBox listSelectedColumns; + private System.Windows.Forms.Button buttonAddColumn; + private System.Windows.Forms.Button buttonMoveDown; + private System.Windows.Forms.Button buttonMoveUp; + private System.Windows.Forms.ToolTip toolTip; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs index 671b17ea..f6d185ea 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs @@ -1,65 +1,65 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Project.IpTv.UiServices.Common.Controls; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorModeMultiColumn : SettingsEditorModeBaseColumn - { - private ListItemsManager ItemsManager; - - public SettingsEditorModeMultiColumn() - { - InitializeComponent(); - } // constructor - - public override List SelectedColumns - { - get { return ItemsManager.GetListValues(); } - } // SelectedColumns - - private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) - { - ItemsManager = new ListItemsManager(listSelectedColumns, buttonRemove, buttonMoveUp, buttonMoveDown); - - comboColumns.DataSource = ColumnsList.AsReadOnly(); - buttonAddColumn.Enabled = (comboColumns.Items.Count > 0); - - ItemsManager.SetValueDictionary(ColumnsList, null); - ItemsManager.Add(Columns); - } // SettingsEditorModeMultiColumn_Load - - private void buttonAddColumn_Click(object sender, EventArgs e) - { - ItemsManager.Add((UiBroadcastListColumn)comboColumns.SelectedValue); - SetDataChanged(); - } // buttonAddColumn_Click - - private void buttonRemove_Click(object sender, EventArgs e) - { - ItemsManager.RemoveSelection(); - SetDataChanged(); - } // buttonRemove_Click - - private void buttonMoveUp_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionUp(); - SetDataChanged(); - } // buttonMoveUp_Click - - private void buttonMoveDown_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionDown(); - SetDataChanged(); - } // buttonMoveDown_Click - } // class SettingsEditorModeMultiColumn -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Controls; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorModeMultiColumn : SettingsEditorModeBaseColumn + { + private ListItemsManager ItemsManager; + + public SettingsEditorModeMultiColumn() + { + InitializeComponent(); + } // constructor + + public override List SelectedColumns + { + get { return ItemsManager.GetListValues(); } + } // SelectedColumns + + private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) + { + ItemsManager = new ListItemsManager(listSelectedColumns, buttonRemove, buttonMoveUp, buttonMoveDown); + + comboColumns.DataSource = ColumnsList.AsReadOnly(); + buttonAddColumn.Enabled = (comboColumns.Items.Count > 0); + + ItemsManager.SetValueDictionary(ColumnsList, null); + ItemsManager.Add(Columns); + } // SettingsEditorModeMultiColumn_Load + + private void buttonAddColumn_Click(object sender, EventArgs e) + { + ItemsManager.Add((UiBroadcastListColumn)comboColumns.SelectedValue); + SetDataChanged(); + } // buttonAddColumn_Click + + private void buttonRemove_Click(object sender, EventArgs e) + { + ItemsManager.RemoveSelection(); + SetDataChanged(); + } // buttonRemove_Click + + private void buttonMoveUp_Click(object sender, EventArgs e) + { + ItemsManager.MoveSelectionUp(); + SetDataChanged(); + } // buttonMoveUp_Click + + private void buttonMoveDown_Click(object sender, EventArgs e) + { + ItemsManager.MoveSelectionDown(); + SetDataChanged(); + } // buttonMoveDown_Click + } // class SettingsEditorModeMultiColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx index 714c6553..02c1712c 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx @@ -1,342 +1,342 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Bottom, Left - - - Flat - - - NoControl - - - - 184, 144 - - - 25, 25 - - - - 5 - - - 17, 17 - - - Move the selected column one place down - - - buttonMoveDown - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 0 - - - Flat - - - NoControl - - - 184, 116 - - - 3, 3, 3, 0 - - - 25, 25 - - - 4 - - - Move the selected column one place up - - - buttonMoveUp - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 1 - - - Flat - - - NoControl - - - 184, 46 - - - 25, 25 - - - 3 - - - Remove selected column from the list - - - buttonRemove - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 2 - - - False - - - 6, 46 - - - 172, 123 - - - 2 - - - listSelectedColumns - - - System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 3 - - - Flat - - - NoControl - - - 184, 16 - - - 25, 25 - - - 1 - - - Add the column at the end of the list - - - buttonAddColumn - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 4 - - - 6, 19 - - - 172, 21 - - - 0 - - - comboColumns - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 5 - - - 0, 0 - - - 215, 175 - - - 0 - - - Columns to display - - - groupBoxData - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 215, 175 - - - toolTip - - - System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SettingsEditorModeMultiColumn - - - Project.IpTv.UiServices.Discovery.BroadcastList.Editors.SettingsEditorModeBaseColumn, UiServices.Discovery, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Bottom, Left + + + Flat + + + NoControl + + + + 184, 144 + + + 25, 25 + + + + 5 + + + 17, 17 + + + Move the selected column one place down + + + buttonMoveDown + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 0 + + + Flat + + + NoControl + + + 184, 116 + + + 3, 3, 3, 0 + + + 25, 25 + + + 4 + + + Move the selected column one place up + + + buttonMoveUp + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 1 + + + Flat + + + NoControl + + + 184, 46 + + + 25, 25 + + + 3 + + + Remove selected column from the list + + + buttonRemove + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 2 + + + False + + + 6, 46 + + + 172, 123 + + + 2 + + + listSelectedColumns + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 3 + + + Flat + + + NoControl + + + 184, 16 + + + 25, 25 + + + 1 + + + Add the column at the end of the list + + + buttonAddColumn + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 4 + + + 6, 19 + + + 172, 21 + + + 0 + + + comboColumns + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 5 + + + 0, 0 + + + 215, 175 + + + 0 + + + Columns to display + + + groupBoxData + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 215, 175 + + + toolTip + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SettingsEditorModeMultiColumn + + + IpTviewr.UiServices.Discovery.BroadcastList.Editors.SettingsEditorModeBaseColumn, UiServices.Discovery, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs index 4531d945..bd205f1a 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs @@ -1,75 +1,75 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - partial class SettingsEditorModeSingleColumn - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorModeSingleColumn)); - this.groupBoxData = new System.Windows.Forms.GroupBox(); - this.comboColumns = new System.Windows.Forms.ComboBox(); - this.groupBoxData.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxData - // - resources.ApplyResources(this.groupBoxData, "groupBoxData"); - this.groupBoxData.Controls.Add(this.comboColumns); - this.groupBoxData.Name = "groupBoxData"; - this.groupBoxData.TabStop = false; - // - // comboColumns - // - this.comboColumns.DisplayMember = "Value"; - this.comboColumns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboColumns.DropDownWidth = 250; - this.comboColumns.FormattingEnabled = true; - resources.ApplyResources(this.comboColumns, "comboColumns"); - this.comboColumns.Name = "comboColumns"; - this.comboColumns.ValueMember = "Key"; - this.comboColumns.SelectedIndexChanged += new System.EventHandler(this.comboColumns_SelectedIndexChanged); - // - // SettingsEditorModeSingleColumn - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxData); - this.Name = "SettingsEditorModeSingleColumn"; - this.Load += new System.EventHandler(this.SettingsEditorModeMultiColumn_Load); - this.groupBoxData.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxData; - private System.Windows.Forms.ComboBox comboColumns; - } -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + partial class SettingsEditorModeSingleColumn + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorModeSingleColumn)); + this.groupBoxData = new System.Windows.Forms.GroupBox(); + this.comboColumns = new System.Windows.Forms.ComboBox(); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + resources.ApplyResources(this.groupBoxData, "groupBoxData"); + this.groupBoxData.Controls.Add(this.comboColumns); + this.groupBoxData.Name = "groupBoxData"; + this.groupBoxData.TabStop = false; + // + // comboColumns + // + this.comboColumns.DisplayMember = "Value"; + this.comboColumns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboColumns.DropDownWidth = 250; + this.comboColumns.FormattingEnabled = true; + resources.ApplyResources(this.comboColumns, "comboColumns"); + this.comboColumns.Name = "comboColumns"; + this.comboColumns.ValueMember = "Key"; + this.comboColumns.SelectedIndexChanged += new System.EventHandler(this.comboColumns_SelectedIndexChanged); + // + // SettingsEditorModeSingleColumn + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxData); + this.Name = "SettingsEditorModeSingleColumn"; + this.Load += new System.EventHandler(this.SettingsEditorModeMultiColumn_Load); + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxData; + private System.Windows.Forms.ComboBox comboColumns; + } +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs index 5eaee434..7b68ca10 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs @@ -1,50 +1,50 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorModeSingleColumn : SettingsEditorModeBaseColumn - { - private int ManualUpdateLock; - - public SettingsEditorModeSingleColumn() - { - InitializeComponent(); - } // constructor - - public override List SelectedColumns - { - get - { - var result = new List(1); - result.Add((UiBroadcastListColumn)comboColumns.SelectedValue); - - return result; - } // get - } // SelectedColumns - - private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) - { - ManualUpdateLock++; - comboColumns.DataSource = ColumnsList.AsReadOnly(); - comboColumns.SelectedValue = Columns[0]; - ManualUpdateLock--; - } // SettingsEditorModeMultiColumn_Load - - private void comboColumns_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - SetDataChanged(); - } // comboColumns_SelectedIndexChanged - } // class SettingsEditorModeSingleColumn -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorModeSingleColumn : SettingsEditorModeBaseColumn + { + private int ManualUpdateLock; + + public SettingsEditorModeSingleColumn() + { + InitializeComponent(); + } // constructor + + public override List SelectedColumns + { + get + { + var result = new List(1); + result.Add((UiBroadcastListColumn)comboColumns.SelectedValue); + + return result; + } // get + } // SelectedColumns + + private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) + { + ManualUpdateLock++; + comboColumns.DataSource = ColumnsList.AsReadOnly(); + comboColumns.SelectedValue = Columns[0]; + ManualUpdateLock--; + } // SettingsEditorModeMultiColumn_Load + + private void comboColumns_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + SetDataChanged(); + } // comboColumns_SelectedIndexChanged + } // class SettingsEditorModeSingleColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs index 1180ad4d..7cab45a8 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs @@ -1,103 +1,103 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - partial class SettingsEditorModeTripleColumn - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorModeTripleColumn)); - this.groupBoxData = new System.Windows.Forms.GroupBox(); - this.comboThirdColumn = new System.Windows.Forms.ComboBox(); - this.comboSecondColumn = new System.Windows.Forms.ComboBox(); - this.comboFirstColumn = new System.Windows.Forms.ComboBox(); - this.groupBoxData.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxData - // - resources.ApplyResources(this.groupBoxData, "groupBoxData"); - this.groupBoxData.Controls.Add(this.comboThirdColumn); - this.groupBoxData.Controls.Add(this.comboSecondColumn); - this.groupBoxData.Controls.Add(this.comboFirstColumn); - this.groupBoxData.Name = "groupBoxData"; - this.groupBoxData.TabStop = false; - // - // comboThirdColumn - // - resources.ApplyResources(this.comboThirdColumn, "comboThirdColumn"); - this.comboThirdColumn.DisplayMember = "Value"; - this.comboThirdColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboThirdColumn.DropDownWidth = 250; - this.comboThirdColumn.FormattingEnabled = true; - this.comboThirdColumn.Name = "comboThirdColumn"; - this.comboThirdColumn.ValueMember = "Key"; - this.comboThirdColumn.SelectedIndexChanged += new System.EventHandler(this.comboThirdColumn_SelectedIndexChanged); - // - // comboSecondColumn - // - resources.ApplyResources(this.comboSecondColumn, "comboSecondColumn"); - this.comboSecondColumn.DisplayMember = "Value"; - this.comboSecondColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboSecondColumn.DropDownWidth = 250; - this.comboSecondColumn.FormattingEnabled = true; - this.comboSecondColumn.Name = "comboSecondColumn"; - this.comboSecondColumn.ValueMember = "Key"; - this.comboSecondColumn.SelectedIndexChanged += new System.EventHandler(this.comboSecondColumn_SelectedIndexChanged); - // - // comboFirstColumn - // - resources.ApplyResources(this.comboFirstColumn, "comboFirstColumn"); - this.comboFirstColumn.DisplayMember = "Value"; - this.comboFirstColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboFirstColumn.DropDownWidth = 250; - this.comboFirstColumn.FormattingEnabled = true; - this.comboFirstColumn.Name = "comboFirstColumn"; - this.comboFirstColumn.ValueMember = "Key"; - this.comboFirstColumn.SelectedIndexChanged += new System.EventHandler(this.comboFirstColumn_SelectedIndexChanged); - // - // SettingsEditorModeTripleColumn - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxData); - this.Name = "SettingsEditorModeTripleColumn"; - this.Load += new System.EventHandler(this.SettingsEditorModeTripleColumn_Load); - this.groupBoxData.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxData; - private System.Windows.Forms.ComboBox comboThirdColumn; - private System.Windows.Forms.ComboBox comboSecondColumn; - private System.Windows.Forms.ComboBox comboFirstColumn; - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + partial class SettingsEditorModeTripleColumn + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorModeTripleColumn)); + this.groupBoxData = new System.Windows.Forms.GroupBox(); + this.comboThirdColumn = new System.Windows.Forms.ComboBox(); + this.comboSecondColumn = new System.Windows.Forms.ComboBox(); + this.comboFirstColumn = new System.Windows.Forms.ComboBox(); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + resources.ApplyResources(this.groupBoxData, "groupBoxData"); + this.groupBoxData.Controls.Add(this.comboThirdColumn); + this.groupBoxData.Controls.Add(this.comboSecondColumn); + this.groupBoxData.Controls.Add(this.comboFirstColumn); + this.groupBoxData.Name = "groupBoxData"; + this.groupBoxData.TabStop = false; + // + // comboThirdColumn + // + resources.ApplyResources(this.comboThirdColumn, "comboThirdColumn"); + this.comboThirdColumn.DisplayMember = "Value"; + this.comboThirdColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboThirdColumn.DropDownWidth = 250; + this.comboThirdColumn.FormattingEnabled = true; + this.comboThirdColumn.Name = "comboThirdColumn"; + this.comboThirdColumn.ValueMember = "Key"; + this.comboThirdColumn.SelectedIndexChanged += new System.EventHandler(this.comboThirdColumn_SelectedIndexChanged); + // + // comboSecondColumn + // + resources.ApplyResources(this.comboSecondColumn, "comboSecondColumn"); + this.comboSecondColumn.DisplayMember = "Value"; + this.comboSecondColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboSecondColumn.DropDownWidth = 250; + this.comboSecondColumn.FormattingEnabled = true; + this.comboSecondColumn.Name = "comboSecondColumn"; + this.comboSecondColumn.ValueMember = "Key"; + this.comboSecondColumn.SelectedIndexChanged += new System.EventHandler(this.comboSecondColumn_SelectedIndexChanged); + // + // comboFirstColumn + // + resources.ApplyResources(this.comboFirstColumn, "comboFirstColumn"); + this.comboFirstColumn.DisplayMember = "Value"; + this.comboFirstColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboFirstColumn.DropDownWidth = 250; + this.comboFirstColumn.FormattingEnabled = true; + this.comboFirstColumn.Name = "comboFirstColumn"; + this.comboFirstColumn.ValueMember = "Key"; + this.comboFirstColumn.SelectedIndexChanged += new System.EventHandler(this.comboFirstColumn_SelectedIndexChanged); + // + // SettingsEditorModeTripleColumn + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxData); + this.Name = "SettingsEditorModeTripleColumn"; + this.Load += new System.EventHandler(this.SettingsEditorModeTripleColumn_Load); + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxData; + private System.Windows.Forms.ComboBox comboThirdColumn; + private System.Windows.Forms.ComboBox comboSecondColumn; + private System.Windows.Forms.ComboBox comboFirstColumn; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs index b6ee5be8..5288e240 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs @@ -1,108 +1,108 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorModeTripleColumn : SettingsEditorModeBaseColumn - { - private int ManualUpdateLock; - - public SettingsEditorModeTripleColumn() - { - InitializeComponent(); - } // constructor - - public override List SelectedColumns - { - get - { - var result = new List(Columns.Count); - - var column = (UiBroadcastListColumn)comboFirstColumn.SelectedValue; - result.Add(column); - - column = (UiBroadcastListColumn)comboSecondColumn.SelectedValue; - if (column != UiBroadcastListColumn.None) - { - result.Add(column); - - column = (UiBroadcastListColumn)comboThirdColumn.SelectedValue; - if (column != UiBroadcastListColumn.None) - { - result.Add(column); - } // - } // if - - return result; - } // get - } // - - private void SettingsEditorModeTripleColumn_Load(object sender, EventArgs e) - { - ManualUpdateLock++; - comboFirstColumn.DataSource = ColumnsList.AsReadOnly(); - comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); - comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); - - switch (Columns.Count) - { - case 0: - comboFirstColumn.SelectedValue = UiBroadcastListColumn.NumberAndName; - comboSecondColumn.SelectedValue = UiBroadcastListColumn.None; - comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; - break; - case 1: - comboFirstColumn.SelectedValue = Columns[0]; - comboSecondColumn.SelectedValue = UiBroadcastListColumn.None; - comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; - break; - case 2: - comboFirstColumn.SelectedValue = Columns[0]; - comboSecondColumn.SelectedValue = Columns[1]; - comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; - break; - default: - comboFirstColumn.SelectedValue = Columns[0]; - comboSecondColumn.SelectedValue = Columns[1]; - comboThirdColumn.SelectedValue = Columns[2]; - break; - } // switch - ManualUpdateLock--; - } // SettingsEditorModeTripleColumn_Load - - private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - SetDataChanged(); - } // comboFirstColumn_SelectedIndexChanged - - private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - comboThirdColumn.Enabled = ((UiBroadcastListColumn)comboSecondColumn.SelectedValue) != UiBroadcastListColumn.None; - if (!comboThirdColumn.Enabled) - { - comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; - } // if - SetDataChanged(); - } // comboSecondColumn_SelectedIndexChanged - - private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - SetDataChanged(); - } // comboThirdColumn_SelectedIndexChanged - } // class SettingsEditorModeTripleColumn -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorModeTripleColumn : SettingsEditorModeBaseColumn + { + private int ManualUpdateLock; + + public SettingsEditorModeTripleColumn() + { + InitializeComponent(); + } // constructor + + public override List SelectedColumns + { + get + { + var result = new List(Columns.Count); + + var column = (UiBroadcastListColumn)comboFirstColumn.SelectedValue; + result.Add(column); + + column = (UiBroadcastListColumn)comboSecondColumn.SelectedValue; + if (column != UiBroadcastListColumn.None) + { + result.Add(column); + + column = (UiBroadcastListColumn)comboThirdColumn.SelectedValue; + if (column != UiBroadcastListColumn.None) + { + result.Add(column); + } // + } // if + + return result; + } // get + } // + + private void SettingsEditorModeTripleColumn_Load(object sender, EventArgs e) + { + ManualUpdateLock++; + comboFirstColumn.DataSource = ColumnsList.AsReadOnly(); + comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); + comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); + + switch (Columns.Count) + { + case 0: + comboFirstColumn.SelectedValue = UiBroadcastListColumn.NumberAndName; + comboSecondColumn.SelectedValue = UiBroadcastListColumn.None; + comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; + break; + case 1: + comboFirstColumn.SelectedValue = Columns[0]; + comboSecondColumn.SelectedValue = UiBroadcastListColumn.None; + comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; + break; + case 2: + comboFirstColumn.SelectedValue = Columns[0]; + comboSecondColumn.SelectedValue = Columns[1]; + comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; + break; + default: + comboFirstColumn.SelectedValue = Columns[0]; + comboSecondColumn.SelectedValue = Columns[1]; + comboThirdColumn.SelectedValue = Columns[2]; + break; + } // switch + ManualUpdateLock--; + } // SettingsEditorModeTripleColumn_Load + + private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + SetDataChanged(); + } // comboFirstColumn_SelectedIndexChanged + + private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + comboThirdColumn.Enabled = ((UiBroadcastListColumn)comboSecondColumn.SelectedValue) != UiBroadcastListColumn.None; + if (!comboThirdColumn.Enabled) + { + comboThirdColumn.SelectedValue = UiBroadcastListColumn.None; + } // if + SetDataChanged(); + } // comboSecondColumn_SelectedIndexChanged + + private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + SetDataChanged(); + } // comboThirdColumn_SelectedIndexChanged + } // class SettingsEditorModeTripleColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs index 44b38ba7..1696ca8b 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs @@ -1,153 +1,153 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - partial class SettingsEditorSorting - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorSorting)); - this.groupSortBy = new System.Windows.Forms.GroupBox(); - this.checkGlobalSorting = new System.Windows.Forms.CheckBox(); - this.buttonThirdDirection = new System.Windows.Forms.Button(); - this.comboThirdColumn = new System.Windows.Forms.ComboBox(); - this.buttonSecondDirection = new System.Windows.Forms.Button(); - this.comboSecondColumn = new System.Windows.Forms.ComboBox(); - this.buttonFirstDirection = new System.Windows.Forms.Button(); - this.comboFirstColumn = new System.Windows.Forms.ComboBox(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.groupSortBy.SuspendLayout(); - this.SuspendLayout(); - // - // groupSortBy - // - this.groupSortBy.Controls.Add(this.checkGlobalSorting); - this.groupSortBy.Controls.Add(this.buttonThirdDirection); - this.groupSortBy.Controls.Add(this.comboThirdColumn); - this.groupSortBy.Controls.Add(this.buttonSecondDirection); - this.groupSortBy.Controls.Add(this.comboSecondColumn); - this.groupSortBy.Controls.Add(this.buttonFirstDirection); - this.groupSortBy.Controls.Add(this.comboFirstColumn); - resources.ApplyResources(this.groupSortBy, "groupSortBy"); - this.groupSortBy.Name = "groupSortBy"; - this.groupSortBy.TabStop = false; - // - // checkGlobalSorting - // - resources.ApplyResources(this.checkGlobalSorting, "checkGlobalSorting"); - this.checkGlobalSorting.Name = "checkGlobalSorting"; - this.checkGlobalSorting.UseVisualStyleBackColor = true; - this.checkGlobalSorting.CheckedChanged += new System.EventHandler(this.checkGlobalSorting_CheckedChanged); - // - // buttonThirdDirection - // - resources.ApplyResources(this.buttonThirdDirection, "buttonThirdDirection"); - this.buttonThirdDirection.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonThirdDirection.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_SortAscending_16x16; - this.buttonThirdDirection.Name = "buttonThirdDirection"; - this.buttonThirdDirection.UseVisualStyleBackColor = true; - this.buttonThirdDirection.Click += new System.EventHandler(this.buttonThirdDirection_Click); - // - // comboThirdColumn - // - resources.ApplyResources(this.comboThirdColumn, "comboThirdColumn"); - this.comboThirdColumn.DisplayMember = "Value"; - this.comboThirdColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboThirdColumn.DropDownWidth = 250; - this.comboThirdColumn.FormattingEnabled = true; - this.comboThirdColumn.Name = "comboThirdColumn"; - this.comboThirdColumn.ValueMember = "Key"; - this.comboThirdColumn.SelectedIndexChanged += new System.EventHandler(this.comboThirdColumn_SelectedIndexChanged); - // - // buttonSecondDirection - // - resources.ApplyResources(this.buttonSecondDirection, "buttonSecondDirection"); - this.buttonSecondDirection.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonSecondDirection.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_SortAscending_16x16; - this.buttonSecondDirection.Name = "buttonSecondDirection"; - this.buttonSecondDirection.UseVisualStyleBackColor = true; - this.buttonSecondDirection.Click += new System.EventHandler(this.buttonSecondDirection_Click); - // - // comboSecondColumn - // - resources.ApplyResources(this.comboSecondColumn, "comboSecondColumn"); - this.comboSecondColumn.DisplayMember = "Value"; - this.comboSecondColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboSecondColumn.DropDownWidth = 250; - this.comboSecondColumn.FormattingEnabled = true; - this.comboSecondColumn.Name = "comboSecondColumn"; - this.comboSecondColumn.ValueMember = "Key"; - this.comboSecondColumn.SelectedIndexChanged += new System.EventHandler(this.comboSecondColumn_SelectedIndexChanged); - // - // buttonFirstDirection - // - resources.ApplyResources(this.buttonFirstDirection, "buttonFirstDirection"); - this.buttonFirstDirection.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonFirstDirection.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_SortAscending_16x16; - this.buttonFirstDirection.Name = "buttonFirstDirection"; - this.buttonFirstDirection.UseVisualStyleBackColor = true; - this.buttonFirstDirection.Click += new System.EventHandler(this.buttonFirstDirection_Click); - // - // comboFirstColumn - // - resources.ApplyResources(this.comboFirstColumn, "comboFirstColumn"); - this.comboFirstColumn.DisplayMember = "Value"; - this.comboFirstColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboFirstColumn.DropDownWidth = 250; - this.comboFirstColumn.FormattingEnabled = true; - this.comboFirstColumn.Name = "comboFirstColumn"; - this.comboFirstColumn.ValueMember = "Key"; - this.comboFirstColumn.SelectedIndexChanged += new System.EventHandler(this.comboFirstColumn_SelectedIndexChanged); - // - // SettingsEditorSorting - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupSortBy); - this.Name = "SettingsEditorSorting"; - this.Load += new System.EventHandler(this.SettingsEditorSorting_Load); - this.groupSortBy.ResumeLayout(false); - this.groupSortBy.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupSortBy; - private System.Windows.Forms.Button buttonThirdDirection; - private System.Windows.Forms.ComboBox comboThirdColumn; - private System.Windows.Forms.Button buttonSecondDirection; - private System.Windows.Forms.ComboBox comboSecondColumn; - private System.Windows.Forms.Button buttonFirstDirection; - private System.Windows.Forms.ComboBox comboFirstColumn; - private System.Windows.Forms.CheckBox checkGlobalSorting; - private System.Windows.Forms.ToolTip toolTip; - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + partial class SettingsEditorSorting + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsEditorSorting)); + this.groupSortBy = new System.Windows.Forms.GroupBox(); + this.checkGlobalSorting = new System.Windows.Forms.CheckBox(); + this.buttonThirdDirection = new System.Windows.Forms.Button(); + this.comboThirdColumn = new System.Windows.Forms.ComboBox(); + this.buttonSecondDirection = new System.Windows.Forms.Button(); + this.comboSecondColumn = new System.Windows.Forms.ComboBox(); + this.buttonFirstDirection = new System.Windows.Forms.Button(); + this.comboFirstColumn = new System.Windows.Forms.ComboBox(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.groupSortBy.SuspendLayout(); + this.SuspendLayout(); + // + // groupSortBy + // + this.groupSortBy.Controls.Add(this.checkGlobalSorting); + this.groupSortBy.Controls.Add(this.buttonThirdDirection); + this.groupSortBy.Controls.Add(this.comboThirdColumn); + this.groupSortBy.Controls.Add(this.buttonSecondDirection); + this.groupSortBy.Controls.Add(this.comboSecondColumn); + this.groupSortBy.Controls.Add(this.buttonFirstDirection); + this.groupSortBy.Controls.Add(this.comboFirstColumn); + resources.ApplyResources(this.groupSortBy, "groupSortBy"); + this.groupSortBy.Name = "groupSortBy"; + this.groupSortBy.TabStop = false; + // + // checkGlobalSorting + // + resources.ApplyResources(this.checkGlobalSorting, "checkGlobalSorting"); + this.checkGlobalSorting.Name = "checkGlobalSorting"; + this.checkGlobalSorting.UseVisualStyleBackColor = true; + this.checkGlobalSorting.CheckedChanged += new System.EventHandler(this.checkGlobalSorting_CheckedChanged); + // + // buttonThirdDirection + // + resources.ApplyResources(this.buttonThirdDirection, "buttonThirdDirection"); + this.buttonThirdDirection.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonThirdDirection.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_SortAscending_16x16; + this.buttonThirdDirection.Name = "buttonThirdDirection"; + this.buttonThirdDirection.UseVisualStyleBackColor = true; + this.buttonThirdDirection.Click += new System.EventHandler(this.buttonThirdDirection_Click); + // + // comboThirdColumn + // + resources.ApplyResources(this.comboThirdColumn, "comboThirdColumn"); + this.comboThirdColumn.DisplayMember = "Value"; + this.comboThirdColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboThirdColumn.DropDownWidth = 250; + this.comboThirdColumn.FormattingEnabled = true; + this.comboThirdColumn.Name = "comboThirdColumn"; + this.comboThirdColumn.ValueMember = "Key"; + this.comboThirdColumn.SelectedIndexChanged += new System.EventHandler(this.comboThirdColumn_SelectedIndexChanged); + // + // buttonSecondDirection + // + resources.ApplyResources(this.buttonSecondDirection, "buttonSecondDirection"); + this.buttonSecondDirection.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonSecondDirection.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_SortAscending_16x16; + this.buttonSecondDirection.Name = "buttonSecondDirection"; + this.buttonSecondDirection.UseVisualStyleBackColor = true; + this.buttonSecondDirection.Click += new System.EventHandler(this.buttonSecondDirection_Click); + // + // comboSecondColumn + // + resources.ApplyResources(this.comboSecondColumn, "comboSecondColumn"); + this.comboSecondColumn.DisplayMember = "Value"; + this.comboSecondColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboSecondColumn.DropDownWidth = 250; + this.comboSecondColumn.FormattingEnabled = true; + this.comboSecondColumn.Name = "comboSecondColumn"; + this.comboSecondColumn.ValueMember = "Key"; + this.comboSecondColumn.SelectedIndexChanged += new System.EventHandler(this.comboSecondColumn_SelectedIndexChanged); + // + // buttonFirstDirection + // + resources.ApplyResources(this.buttonFirstDirection, "buttonFirstDirection"); + this.buttonFirstDirection.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonFirstDirection.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_SortAscending_16x16; + this.buttonFirstDirection.Name = "buttonFirstDirection"; + this.buttonFirstDirection.UseVisualStyleBackColor = true; + this.buttonFirstDirection.Click += new System.EventHandler(this.buttonFirstDirection_Click); + // + // comboFirstColumn + // + resources.ApplyResources(this.comboFirstColumn, "comboFirstColumn"); + this.comboFirstColumn.DisplayMember = "Value"; + this.comboFirstColumn.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboFirstColumn.DropDownWidth = 250; + this.comboFirstColumn.FormattingEnabled = true; + this.comboFirstColumn.Name = "comboFirstColumn"; + this.comboFirstColumn.ValueMember = "Key"; + this.comboFirstColumn.SelectedIndexChanged += new System.EventHandler(this.comboFirstColumn_SelectedIndexChanged); + // + // SettingsEditorSorting + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupSortBy); + this.Name = "SettingsEditorSorting"; + this.Load += new System.EventHandler(this.SettingsEditorSorting_Load); + this.groupSortBy.ResumeLayout(false); + this.groupSortBy.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupSortBy; + private System.Windows.Forms.Button buttonThirdDirection; + private System.Windows.Forms.ComboBox comboThirdColumn; + private System.Windows.Forms.Button buttonSecondDirection; + private System.Windows.Forms.ComboBox comboSecondColumn; + private System.Windows.Forms.Button buttonFirstDirection; + private System.Windows.Forms.ComboBox comboFirstColumn; + private System.Windows.Forms.CheckBox checkGlobalSorting; + private System.Windows.Forms.ToolTip toolTip; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs index 2d2e8695..542bf6bd 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs @@ -1,207 +1,207 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorSorting : SettingsEditorBaseUserControl - { - private UiBroadcastListSortColumn[] SortColumns; - private int ManualUpdateLock; - - public event EventHandler UseGlobalSortChanged; - - public SettingsEditorSorting() - { - InitializeComponent(); - } // constructor - - public List> ColumnsNoneList - { - private get; - set; - } // Columns - - public IList Sort - { - private get; - set; - } // Sort - - public bool UseGlobalSort - { - get; - set; - } // UseGlobalSort - - public bool ShowUseGlobalSort - { - get; - set; - } // ShowUseGlobalSort - - public List SelectedSort - { - get - { - var result = new List(SortColumns.Length); - for (int index = 0; index < SortColumns.Length; index++) - { - var sortColumn = SortColumns[index]; - result.Add(sortColumn); - if (sortColumn.Column == UiBroadcastListColumn.None) break; - } // for index - - return result; - } // get - } // SelectedSort - - private void SettingsEditorSorting_Load(object sender, EventArgs e) - { - if (DesignMode) - { - ColumnsNoneList = UiBroadcastListManager.GetSortedColumnNames(true); - Sort = new List(); - } // if - - SortColumns = new UiBroadcastListSortColumn[3]; - for (int index = 0; index < Math.Min(3, Sort.Count); index++) - { - SortColumns[index] = Sort[index]; - } // for - for (int index = Sort.Count; index < 3; index++) - { - SortColumns[index] = new UiBroadcastListSortColumn(UiBroadcastListColumn.None, false); - } // for - if (Sort.Count == 0) - { - SortColumns[0] = new UiBroadcastListSortColumn(UiBroadcastListColumn.Number, false); - } // if - - ManualUpdateLock++; - comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); - comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); - comboFirstColumn.DataSource = ColumnsNoneList.AsReadOnly(); - - comboThirdColumn.SelectedValue = SortColumns[2].Column; - comboSecondColumn.SelectedValue = SortColumns[1].Column; - comboFirstColumn.SelectedValue = SortColumns[0].Column; - - SetButtonDirectionStatus(buttonFirstDirection, 0, SortColumns[0].IsAscending); - SetButtonDirectionStatus(buttonSecondDirection, 1, SortColumns[1].IsAscending); - SetButtonDirectionStatus(buttonThirdDirection, 2, SortColumns[2].IsAscending); - - checkGlobalSorting.Visible = ShowUseGlobalSort; - checkGlobalSorting.Checked = UseGlobalSort; - EnableCombos(); - - ManualUpdateLock--; - } // SettingsEditorSorting_Load - - private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var value = (UiBroadcastListColumn)comboFirstColumn.SelectedValue; - SortColumns[0].Column = value; - var enabled = (value != UiBroadcastListColumn.None); - buttonFirstDirection.Enabled = enabled; - - comboSecondColumn.Enabled = enabled; - comboSecondColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); - SetButtonDirectionStatus(buttonSecondDirection, 1, SortColumns[0].IsAscending); - - comboSecondColumn_SelectedIndexChanged(sender, e); - } // comboFirstColumn_SelectedIndexChanged - - private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var value = (UiBroadcastListColumn)comboSecondColumn.SelectedValue; - SortColumns[1].Column = value; - var enabled = (value != UiBroadcastListColumn.None); - buttonSecondDirection.Enabled = enabled; - SetButtonDirectionStatus(buttonThirdDirection, 2, SortColumns[1].IsAscending); - - comboThirdColumn.Enabled = enabled; - comboThirdColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); - - comboThirdColumn_SelectedIndexChanged(sender, e); - } // comboSecondColumn_SelectedIndexChanged - - private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var value = (UiBroadcastListColumn)comboThirdColumn.SelectedValue; - SortColumns[2].Column = value; - var enabled = (value != UiBroadcastListColumn.None); - buttonThirdDirection.Enabled = enabled; - - SetDataChanged(); - } // comboThirdColumn_SelectedIndexChanged - - private void buttonFirstDirection_Click(object sender, EventArgs e) - { - ToggleDirectionStatus(buttonFirstDirection, 0); - } // buttonFirstDirection_Click - - private void buttonSecondDirection_Click(object sender, EventArgs e) - { - ToggleDirectionStatus(buttonSecondDirection, 1); - } // buttonSecondDirection_Click - - private void buttonThirdDirection_Click(object sender, EventArgs e) - { - ToggleDirectionStatus(buttonThirdDirection, 2); - } // buttonThirdDirection_Click - - private void ToggleDirectionStatus(Button button, int index) - { - SetButtonDirectionStatus(button, index, !SortColumns[index].IsAscending); - SetDataChanged(); - } // ToggleDirectionStatus - - private void SetButtonDirectionStatus(Button button, int index, bool isAscending) - { - SortColumns[index].IsAscending = isAscending; - button.Image = isAscending ? Properties.Resources.Action_SortAscending_16x16 : Properties.Resources.Action_SortDescending_16x16; - toolTip.SetToolTip(button, isAscending ? Properties.SettingsEditor.SortAscendingTooltip : Properties.SettingsEditor.SortDescendingTooltip); - } // // SetButtonDirectionStatus - - private void checkGlobalSorting_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - UseGlobalSort = checkGlobalSorting.Checked; - EnableCombos(); - SetDataChanged(); - - if (UseGlobalSortChanged != null) - { - UseGlobalSortChanged(this, EventArgs.Empty); - } // if - } // checkGlobalSorting_CheckedChanged - - private void EnableCombos() - { - if (!ShowUseGlobalSort) return; - - comboFirstColumn.Enabled = UseGlobalSort; - comboSecondColumn.Enabled = UseGlobalSort; - comboThirdColumn.Enabled = UseGlobalSort; - buttonFirstDirection.Enabled = UseGlobalSort; - buttonSecondDirection.Enabled = UseGlobalSort; - buttonThirdDirection.Enabled = UseGlobalSort; - } // EnableCombos - } // class SettingsEditorSorting -}// namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorSorting : SettingsEditorBaseUserControl + { + private UiBroadcastListSortColumn[] SortColumns; + private int ManualUpdateLock; + + public event EventHandler UseGlobalSortChanged; + + public SettingsEditorSorting() + { + InitializeComponent(); + } // constructor + + public List> ColumnsNoneList + { + private get; + set; + } // Columns + + public IList Sort + { + private get; + set; + } // Sort + + public bool UseGlobalSort + { + get; + set; + } // UseGlobalSort + + public bool ShowUseGlobalSort + { + get; + set; + } // ShowUseGlobalSort + + public List SelectedSort + { + get + { + var result = new List(SortColumns.Length); + for (int index = 0; index < SortColumns.Length; index++) + { + var sortColumn = SortColumns[index]; + result.Add(sortColumn); + if (sortColumn.Column == UiBroadcastListColumn.None) break; + } // for index + + return result; + } // get + } // SelectedSort + + private void SettingsEditorSorting_Load(object sender, EventArgs e) + { + if (DesignMode) + { + ColumnsNoneList = UiBroadcastListManager.GetSortedColumnNames(true); + Sort = new List(); + } // if + + SortColumns = new UiBroadcastListSortColumn[3]; + for (int index = 0; index < Math.Min(3, Sort.Count); index++) + { + SortColumns[index] = Sort[index]; + } // for + for (int index = Sort.Count; index < 3; index++) + { + SortColumns[index] = new UiBroadcastListSortColumn(UiBroadcastListColumn.None, false); + } // for + if (Sort.Count == 0) + { + SortColumns[0] = new UiBroadcastListSortColumn(UiBroadcastListColumn.Number, false); + } // if + + ManualUpdateLock++; + comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); + comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); + comboFirstColumn.DataSource = ColumnsNoneList.AsReadOnly(); + + comboThirdColumn.SelectedValue = SortColumns[2].Column; + comboSecondColumn.SelectedValue = SortColumns[1].Column; + comboFirstColumn.SelectedValue = SortColumns[0].Column; + + SetButtonDirectionStatus(buttonFirstDirection, 0, SortColumns[0].IsAscending); + SetButtonDirectionStatus(buttonSecondDirection, 1, SortColumns[1].IsAscending); + SetButtonDirectionStatus(buttonThirdDirection, 2, SortColumns[2].IsAscending); + + checkGlobalSorting.Visible = ShowUseGlobalSort; + checkGlobalSorting.Checked = UseGlobalSort; + EnableCombos(); + + ManualUpdateLock--; + } // SettingsEditorSorting_Load + + private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + var value = (UiBroadcastListColumn)comboFirstColumn.SelectedValue; + SortColumns[0].Column = value; + var enabled = (value != UiBroadcastListColumn.None); + buttonFirstDirection.Enabled = enabled; + + comboSecondColumn.Enabled = enabled; + comboSecondColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); + SetButtonDirectionStatus(buttonSecondDirection, 1, SortColumns[0].IsAscending); + + comboSecondColumn_SelectedIndexChanged(sender, e); + } // comboFirstColumn_SelectedIndexChanged + + private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + var value = (UiBroadcastListColumn)comboSecondColumn.SelectedValue; + SortColumns[1].Column = value; + var enabled = (value != UiBroadcastListColumn.None); + buttonSecondDirection.Enabled = enabled; + SetButtonDirectionStatus(buttonThirdDirection, 2, SortColumns[1].IsAscending); + + comboThirdColumn.Enabled = enabled; + comboThirdColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); + + comboThirdColumn_SelectedIndexChanged(sender, e); + } // comboSecondColumn_SelectedIndexChanged + + private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + var value = (UiBroadcastListColumn)comboThirdColumn.SelectedValue; + SortColumns[2].Column = value; + var enabled = (value != UiBroadcastListColumn.None); + buttonThirdDirection.Enabled = enabled; + + SetDataChanged(); + } // comboThirdColumn_SelectedIndexChanged + + private void buttonFirstDirection_Click(object sender, EventArgs e) + { + ToggleDirectionStatus(buttonFirstDirection, 0); + } // buttonFirstDirection_Click + + private void buttonSecondDirection_Click(object sender, EventArgs e) + { + ToggleDirectionStatus(buttonSecondDirection, 1); + } // buttonSecondDirection_Click + + private void buttonThirdDirection_Click(object sender, EventArgs e) + { + ToggleDirectionStatus(buttonThirdDirection, 2); + } // buttonThirdDirection_Click + + private void ToggleDirectionStatus(Button button, int index) + { + SetButtonDirectionStatus(button, index, !SortColumns[index].IsAscending); + SetDataChanged(); + } // ToggleDirectionStatus + + private void SetButtonDirectionStatus(Button button, int index, bool isAscending) + { + SortColumns[index].IsAscending = isAscending; + button.Image = isAscending ? Properties.Resources.Action_SortAscending_16x16 : Properties.Resources.Action_SortDescending_16x16; + toolTip.SetToolTip(button, isAscending ? Properties.SettingsEditor.SortAscendingTooltip : Properties.SettingsEditor.SortDescendingTooltip); + } // // SetButtonDirectionStatus + + private void checkGlobalSorting_CheckedChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + UseGlobalSort = checkGlobalSorting.Checked; + EnableCombos(); + SetDataChanged(); + + if (UseGlobalSortChanged != null) + { + UseGlobalSortChanged(this, EventArgs.Empty); + } // if + } // checkGlobalSorting_CheckedChanged + + private void EnableCombos() + { + if (!ShowUseGlobalSort) return; + + comboFirstColumn.Enabled = UseGlobalSort; + comboSecondColumn.Enabled = UseGlobalSort; + comboThirdColumn.Enabled = UseGlobalSort; + buttonFirstDirection.Enabled = UseGlobalSort; + buttonSecondDirection.Enabled = UseGlobalSort; + buttonThirdDirection.Enabled = UseGlobalSort; + } // EnableCombos + } // class SettingsEditorSorting +}// namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx index a6eeeb87..ff2d8cef 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx @@ -1,369 +1,369 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - - True - - - - NoControl - - - - 6, 100 - - - 182, 17 - - - 12 - - - Override the sorting of each view - - - checkGlobalSorting - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 0 - - - Top, Right - - - Flat - - - NoControl - - - 192, 70 - - - 25, 25 - - - 11 - - - buttonThirdDirection - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 1 - - - Top, Left, Right - - - 6, 73 - - - 180, 21 - - - 10 - - - comboThirdColumn - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 2 - - - Top, Right - - - Flat - - - NoControl - - - 192, 43 - - - 25, 25 - - - 9 - - - buttonSecondDirection - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 3 - - - Top, Left, Right - - - 6, 46 - - - 180, 21 - - - 8 - - - comboSecondColumn - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 4 - - - Top, Right - - - Flat - - - NoControl - - - 192, 16 - - - 25, 25 - - - 7 - - - buttonFirstDirection - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 5 - - - Top, Left, Right - - - 6, 19 - - - 180, 21 - - - 6 - - - comboFirstColumn - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupSortBy - - - 6 - - - Fill - - - 0, 0 - - - 225, 130 - - - 10 - - - Sort list by - - - groupSortBy - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 17, 17 - - - True - - - 6, 13 - - - 225, 130 - - - toolTip - - - System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - SettingsEditorSorting - - - Project.IpTv.UiServices.Discovery.BroadcastList.Editors.SettingsEditorBaseUserControl, UiServices.Discovery, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + + True + + + + NoControl + + + + 6, 100 + + + 182, 17 + + + 12 + + + Override the sorting of each view + + + checkGlobalSorting + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 0 + + + Top, Right + + + Flat + + + NoControl + + + 192, 70 + + + 25, 25 + + + 11 + + + buttonThirdDirection + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 1 + + + Top, Left, Right + + + 6, 73 + + + 180, 21 + + + 10 + + + comboThirdColumn + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 2 + + + Top, Right + + + Flat + + + NoControl + + + 192, 43 + + + 25, 25 + + + 9 + + + buttonSecondDirection + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 3 + + + Top, Left, Right + + + 6, 46 + + + 180, 21 + + + 8 + + + comboSecondColumn + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 4 + + + Top, Right + + + Flat + + + NoControl + + + 192, 16 + + + 25, 25 + + + 7 + + + buttonFirstDirection + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 5 + + + Top, Left, Right + + + 6, 19 + + + 180, 21 + + + 6 + + + comboFirstColumn + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupSortBy + + + 6 + + + Fill + + + 0, 0 + + + 225, 130 + + + 10 + + + Sort list by + + + groupSortBy + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 17, 17 + + + True + + + 6, 13 + + + 225, 130 + + + toolTip + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + SettingsEditorSorting + + + IpTviewr.UiServices.Discovery.BroadcastList.Editors.SettingsEditorBaseUserControl, UiServices.Discovery, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs index 65b3fb12..0e1db263 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs @@ -1,300 +1,300 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - partial class UiBroadcastListSettingsEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UiBroadcastListSettingsEditor)); - this.tabControlSettings = new System.Windows.Forms.TabControl(); - this.tabPageGeneral = new System.Windows.Forms.TabPage(); - this.panelGlobalSorting = new System.Windows.Forms.Panel(); - this.groupGeneralMoreOptions = new System.Windows.Forms.GroupBox(); - this.checkShowOutOfPackage = new System.Windows.Forms.CheckBox(); - this.checkShowHidden = new System.Windows.Forms.CheckBox(); - this.checkShowInactive = new System.Windows.Forms.CheckBox(); - this.groupViewMode = new System.Windows.Forms.GroupBox(); - this.toolStripListMode = new System.Windows.Forms.ToolStrip(); - this.toolButtonDetails = new System.Windows.Forms.ToolStripButton(); - this.toolButtonLarge = new System.Windows.Forms.ToolStripButton(); - this.toolButtonSmall = new System.Windows.Forms.ToolStripButton(); - this.toolButtonList = new System.Windows.Forms.ToolStripButton(); - this.toolButtonTile = new System.Windows.Forms.ToolStripButton(); - this.tabPageViewSettings = new System.Windows.Forms.TabPage(); - this.panelModeSorting = new System.Windows.Forms.Panel(); - this.groupViewMoreOptions = new System.Windows.Forms.GroupBox(); - this.checkShowGridlines = new System.Windows.Forms.CheckBox(); - this.comboLogoSize = new System.Windows.Forms.ComboBox(); - this.labelLogoSize = new System.Windows.Forms.Label(); - this.panelModeColumns = new System.Windows.Forms.Panel(); - this.labelMode = new System.Windows.Forms.Label(); - this.comboMode = new System.Windows.Forms.ComboBox(); - this.tabControlSettings.SuspendLayout(); - this.tabPageGeneral.SuspendLayout(); - this.groupGeneralMoreOptions.SuspendLayout(); - this.groupViewMode.SuspendLayout(); - this.toolStripListMode.SuspendLayout(); - this.tabPageViewSettings.SuspendLayout(); - this.groupViewMoreOptions.SuspendLayout(); - this.SuspendLayout(); - // - // tabControlSettings - // - resources.ApplyResources(this.tabControlSettings, "tabControlSettings"); - this.tabControlSettings.Controls.Add(this.tabPageGeneral); - this.tabControlSettings.Controls.Add(this.tabPageViewSettings); - this.tabControlSettings.Name = "tabControlSettings"; - this.tabControlSettings.SelectedIndex = 0; - // - // tabPageGeneral - // - resources.ApplyResources(this.tabPageGeneral, "tabPageGeneral"); - this.tabPageGeneral.BackColor = System.Drawing.SystemColors.Control; - this.tabPageGeneral.Controls.Add(this.panelGlobalSorting); - this.tabPageGeneral.Controls.Add(this.groupGeneralMoreOptions); - this.tabPageGeneral.Controls.Add(this.groupViewMode); - this.tabPageGeneral.Name = "tabPageGeneral"; - // - // panelGlobalSorting - // - resources.ApplyResources(this.panelGlobalSorting, "panelGlobalSorting"); - this.panelGlobalSorting.Name = "panelGlobalSorting"; - // - // groupGeneralMoreOptions - // - resources.ApplyResources(this.groupGeneralMoreOptions, "groupGeneralMoreOptions"); - this.groupGeneralMoreOptions.Controls.Add(this.checkShowOutOfPackage); - this.groupGeneralMoreOptions.Controls.Add(this.checkShowHidden); - this.groupGeneralMoreOptions.Controls.Add(this.checkShowInactive); - this.groupGeneralMoreOptions.Name = "groupGeneralMoreOptions"; - this.groupGeneralMoreOptions.TabStop = false; - // - // checkShowOutOfPackage - // - resources.ApplyResources(this.checkShowOutOfPackage, "checkShowOutOfPackage"); - this.checkShowOutOfPackage.Name = "checkShowOutOfPackage"; - this.checkShowOutOfPackage.UseVisualStyleBackColor = true; - this.checkShowOutOfPackage.CheckedChanged += new System.EventHandler(this.checkShowOutOfPackage_CheckedChanged); - // - // checkShowHidden - // - resources.ApplyResources(this.checkShowHidden, "checkShowHidden"); - this.checkShowHidden.Name = "checkShowHidden"; - this.checkShowHidden.UseVisualStyleBackColor = true; - this.checkShowHidden.CheckedChanged += new System.EventHandler(this.checkShowHidden_CheckedChanged); - // - // checkShowInactive - // - resources.ApplyResources(this.checkShowInactive, "checkShowInactive"); - this.checkShowInactive.Name = "checkShowInactive"; - this.checkShowInactive.UseVisualStyleBackColor = true; - this.checkShowInactive.CheckedChanged += new System.EventHandler(this.checkShowInactive_CheckedChanged); - // - // groupViewMode - // - resources.ApplyResources(this.groupViewMode, "groupViewMode"); - this.groupViewMode.Controls.Add(this.toolStripListMode); - this.groupViewMode.Name = "groupViewMode"; - this.groupViewMode.TabStop = false; - // - // toolStripListMode - // - resources.ApplyResources(this.toolStripListMode, "toolStripListMode"); - this.toolStripListMode.BackColor = System.Drawing.SystemColors.Window; - this.toolStripListMode.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; - this.toolStripListMode.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolButtonDetails, - this.toolButtonLarge, - this.toolButtonSmall, - this.toolButtonList, - this.toolButtonTile}); - this.toolStripListMode.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow; - this.toolStripListMode.Name = "toolStripListMode"; - // - // toolButtonDetails - // - resources.ApplyResources(this.toolButtonDetails, "toolButtonDetails"); - this.toolButtonDetails.BackColor = System.Drawing.SystemColors.Window; - this.toolButtonDetails.ForeColor = System.Drawing.SystemColors.ControlText; - this.toolButtonDetails.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.ListView_Details_16x16; - this.toolButtonDetails.Name = "toolButtonDetails"; - this.toolButtonDetails.Click += new System.EventHandler(this.toolButtonDetails_Click); - // - // toolButtonLarge - // - resources.ApplyResources(this.toolButtonLarge, "toolButtonLarge"); - this.toolButtonLarge.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.ListView_MediumIcons_16x16; - this.toolButtonLarge.Name = "toolButtonLarge"; - this.toolButtonLarge.Click += new System.EventHandler(this.toolButtonLarge_Click); - // - // toolButtonSmall - // - resources.ApplyResources(this.toolButtonSmall, "toolButtonSmall"); - this.toolButtonSmall.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.ListView_SmallIcons_16x16; - this.toolButtonSmall.Name = "toolButtonSmall"; - this.toolButtonSmall.Click += new System.EventHandler(this.toolButtonSmall_Click); - // - // toolButtonList - // - resources.ApplyResources(this.toolButtonList, "toolButtonList"); - this.toolButtonList.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.ListView_List_16x16; - this.toolButtonList.Name = "toolButtonList"; - this.toolButtonList.Click += new System.EventHandler(this.toolButtonList_Click); - // - // toolButtonTile - // - resources.ApplyResources(this.toolButtonTile, "toolButtonTile"); - this.toolButtonTile.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.ListView_Tiles_16x16; - this.toolButtonTile.Name = "toolButtonTile"; - this.toolButtonTile.Click += new System.EventHandler(this.toolButtonTile_Click); - // - // tabPageViewSettings - // - resources.ApplyResources(this.tabPageViewSettings, "tabPageViewSettings"); - this.tabPageViewSettings.Controls.Add(this.panelModeSorting); - this.tabPageViewSettings.Controls.Add(this.groupViewMoreOptions); - this.tabPageViewSettings.Controls.Add(this.panelModeColumns); - this.tabPageViewSettings.Controls.Add(this.labelMode); - this.tabPageViewSettings.Controls.Add(this.comboMode); - this.tabPageViewSettings.Name = "tabPageViewSettings"; - // - // panelModeSorting - // - resources.ApplyResources(this.panelModeSorting, "panelModeSorting"); - this.panelModeSorting.Name = "panelModeSorting"; - // - // groupViewMoreOptions - // - resources.ApplyResources(this.groupViewMoreOptions, "groupViewMoreOptions"); - this.groupViewMoreOptions.Controls.Add(this.checkShowGridlines); - this.groupViewMoreOptions.Controls.Add(this.comboLogoSize); - this.groupViewMoreOptions.Controls.Add(this.labelLogoSize); - this.groupViewMoreOptions.Name = "groupViewMoreOptions"; - this.groupViewMoreOptions.TabStop = false; - // - // checkShowGridlines - // - resources.ApplyResources(this.checkShowGridlines, "checkShowGridlines"); - this.checkShowGridlines.Name = "checkShowGridlines"; - this.checkShowGridlines.UseVisualStyleBackColor = true; - this.checkShowGridlines.CheckedChanged += new System.EventHandler(this.checkShowGridlines_CheckedChanged); - // - // comboLogoSize - // - resources.ApplyResources(this.comboLogoSize, "comboLogoSize"); - this.comboLogoSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboLogoSize.FormattingEnabled = true; - this.comboLogoSize.Items.AddRange(new object[] { - resources.GetString("comboLogoSize.Items"), - resources.GetString("comboLogoSize.Items1"), - resources.GetString("comboLogoSize.Items2"), - resources.GetString("comboLogoSize.Items3"), - resources.GetString("comboLogoSize.Items4"), - resources.GetString("comboLogoSize.Items5")}); - this.comboLogoSize.Name = "comboLogoSize"; - this.comboLogoSize.SelectedIndexChanged += new System.EventHandler(this.comboLogoSize_SelectedIndexChanged); - // - // labelLogoSize - // - resources.ApplyResources(this.labelLogoSize, "labelLogoSize"); - this.labelLogoSize.Name = "labelLogoSize"; - // - // panelModeColumns - // - resources.ApplyResources(this.panelModeColumns, "panelModeColumns"); - this.panelModeColumns.Name = "panelModeColumns"; - // - // labelMode - // - resources.ApplyResources(this.labelMode, "labelMode"); - this.labelMode.Name = "labelMode"; - // - // comboMode - // - resources.ApplyResources(this.comboMode, "comboMode"); - this.comboMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboMode.FormattingEnabled = true; - this.comboMode.Items.AddRange(new object[] { - resources.GetString("comboMode.Items"), - resources.GetString("comboMode.Items1"), - resources.GetString("comboMode.Items2"), - resources.GetString("comboMode.Items3"), - resources.GetString("comboMode.Items4")}); - this.comboMode.Name = "comboMode"; - this.comboMode.SelectedIndexChanged += new System.EventHandler(this.comboMode_SelectedIndexChanged); - // - // UiBroadcastListSettingsEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.tabControlSettings); - this.Name = "UiBroadcastListSettingsEditor"; - this.Load += new System.EventHandler(this.UiBroadcastListSettingsEditor_Load); - this.tabControlSettings.ResumeLayout(false); - this.tabPageGeneral.ResumeLayout(false); - this.groupGeneralMoreOptions.ResumeLayout(false); - this.groupGeneralMoreOptions.PerformLayout(); - this.groupViewMode.ResumeLayout(false); - this.toolStripListMode.ResumeLayout(false); - this.toolStripListMode.PerformLayout(); - this.tabPageViewSettings.ResumeLayout(false); - this.tabPageViewSettings.PerformLayout(); - this.groupViewMoreOptions.ResumeLayout(false); - this.groupViewMoreOptions.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl tabControlSettings; - private System.Windows.Forms.TabPage tabPageGeneral; - private System.Windows.Forms.TabPage tabPageViewSettings; - private System.Windows.Forms.GroupBox groupViewMode; - private System.Windows.Forms.Label labelMode; - private System.Windows.Forms.ComboBox comboMode; - private System.Windows.Forms.GroupBox groupGeneralMoreOptions; - private System.Windows.Forms.GroupBox groupViewMoreOptions; - private System.Windows.Forms.Panel panelModeColumns; - private System.Windows.Forms.Panel panelModeSorting; - private System.Windows.Forms.ToolStrip toolStripListMode; - private System.Windows.Forms.ToolStripButton toolButtonDetails; - private System.Windows.Forms.ToolStripButton toolButtonLarge; - private System.Windows.Forms.ToolStripButton toolButtonSmall; - private System.Windows.Forms.ToolStripButton toolButtonList; - private System.Windows.Forms.ToolStripButton toolButtonTile; - private System.Windows.Forms.CheckBox checkShowHidden; - private System.Windows.Forms.CheckBox checkShowInactive; - private System.Windows.Forms.CheckBox checkShowOutOfPackage; - private System.Windows.Forms.ComboBox comboLogoSize; - private System.Windows.Forms.Label labelLogoSize; - private System.Windows.Forms.CheckBox checkShowGridlines; - private System.Windows.Forms.Panel panelGlobalSorting; - } -} +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + partial class UiBroadcastListSettingsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UiBroadcastListSettingsEditor)); + this.tabControlSettings = new System.Windows.Forms.TabControl(); + this.tabPageGeneral = new System.Windows.Forms.TabPage(); + this.panelGlobalSorting = new System.Windows.Forms.Panel(); + this.groupGeneralMoreOptions = new System.Windows.Forms.GroupBox(); + this.checkShowOutOfPackage = new System.Windows.Forms.CheckBox(); + this.checkShowHidden = new System.Windows.Forms.CheckBox(); + this.checkShowInactive = new System.Windows.Forms.CheckBox(); + this.groupViewMode = new System.Windows.Forms.GroupBox(); + this.toolStripListMode = new System.Windows.Forms.ToolStrip(); + this.toolButtonDetails = new System.Windows.Forms.ToolStripButton(); + this.toolButtonLarge = new System.Windows.Forms.ToolStripButton(); + this.toolButtonSmall = new System.Windows.Forms.ToolStripButton(); + this.toolButtonList = new System.Windows.Forms.ToolStripButton(); + this.toolButtonTile = new System.Windows.Forms.ToolStripButton(); + this.tabPageViewSettings = new System.Windows.Forms.TabPage(); + this.panelModeSorting = new System.Windows.Forms.Panel(); + this.groupViewMoreOptions = new System.Windows.Forms.GroupBox(); + this.checkShowGridlines = new System.Windows.Forms.CheckBox(); + this.comboLogoSize = new System.Windows.Forms.ComboBox(); + this.labelLogoSize = new System.Windows.Forms.Label(); + this.panelModeColumns = new System.Windows.Forms.Panel(); + this.labelMode = new System.Windows.Forms.Label(); + this.comboMode = new System.Windows.Forms.ComboBox(); + this.tabControlSettings.SuspendLayout(); + this.tabPageGeneral.SuspendLayout(); + this.groupGeneralMoreOptions.SuspendLayout(); + this.groupViewMode.SuspendLayout(); + this.toolStripListMode.SuspendLayout(); + this.tabPageViewSettings.SuspendLayout(); + this.groupViewMoreOptions.SuspendLayout(); + this.SuspendLayout(); + // + // tabControlSettings + // + resources.ApplyResources(this.tabControlSettings, "tabControlSettings"); + this.tabControlSettings.Controls.Add(this.tabPageGeneral); + this.tabControlSettings.Controls.Add(this.tabPageViewSettings); + this.tabControlSettings.Name = "tabControlSettings"; + this.tabControlSettings.SelectedIndex = 0; + // + // tabPageGeneral + // + resources.ApplyResources(this.tabPageGeneral, "tabPageGeneral"); + this.tabPageGeneral.BackColor = System.Drawing.SystemColors.Control; + this.tabPageGeneral.Controls.Add(this.panelGlobalSorting); + this.tabPageGeneral.Controls.Add(this.groupGeneralMoreOptions); + this.tabPageGeneral.Controls.Add(this.groupViewMode); + this.tabPageGeneral.Name = "tabPageGeneral"; + // + // panelGlobalSorting + // + resources.ApplyResources(this.panelGlobalSorting, "panelGlobalSorting"); + this.panelGlobalSorting.Name = "panelGlobalSorting"; + // + // groupGeneralMoreOptions + // + resources.ApplyResources(this.groupGeneralMoreOptions, "groupGeneralMoreOptions"); + this.groupGeneralMoreOptions.Controls.Add(this.checkShowOutOfPackage); + this.groupGeneralMoreOptions.Controls.Add(this.checkShowHidden); + this.groupGeneralMoreOptions.Controls.Add(this.checkShowInactive); + this.groupGeneralMoreOptions.Name = "groupGeneralMoreOptions"; + this.groupGeneralMoreOptions.TabStop = false; + // + // checkShowOutOfPackage + // + resources.ApplyResources(this.checkShowOutOfPackage, "checkShowOutOfPackage"); + this.checkShowOutOfPackage.Name = "checkShowOutOfPackage"; + this.checkShowOutOfPackage.UseVisualStyleBackColor = true; + this.checkShowOutOfPackage.CheckedChanged += new System.EventHandler(this.checkShowOutOfPackage_CheckedChanged); + // + // checkShowHidden + // + resources.ApplyResources(this.checkShowHidden, "checkShowHidden"); + this.checkShowHidden.Name = "checkShowHidden"; + this.checkShowHidden.UseVisualStyleBackColor = true; + this.checkShowHidden.CheckedChanged += new System.EventHandler(this.checkShowHidden_CheckedChanged); + // + // checkShowInactive + // + resources.ApplyResources(this.checkShowInactive, "checkShowInactive"); + this.checkShowInactive.Name = "checkShowInactive"; + this.checkShowInactive.UseVisualStyleBackColor = true; + this.checkShowInactive.CheckedChanged += new System.EventHandler(this.checkShowInactive_CheckedChanged); + // + // groupViewMode + // + resources.ApplyResources(this.groupViewMode, "groupViewMode"); + this.groupViewMode.Controls.Add(this.toolStripListMode); + this.groupViewMode.Name = "groupViewMode"; + this.groupViewMode.TabStop = false; + // + // toolStripListMode + // + resources.ApplyResources(this.toolStripListMode, "toolStripListMode"); + this.toolStripListMode.BackColor = System.Drawing.SystemColors.Window; + this.toolStripListMode.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStripListMode.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolButtonDetails, + this.toolButtonLarge, + this.toolButtonSmall, + this.toolButtonList, + this.toolButtonTile}); + this.toolStripListMode.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow; + this.toolStripListMode.Name = "toolStripListMode"; + // + // toolButtonDetails + // + resources.ApplyResources(this.toolButtonDetails, "toolButtonDetails"); + this.toolButtonDetails.BackColor = System.Drawing.SystemColors.Window; + this.toolButtonDetails.ForeColor = System.Drawing.SystemColors.ControlText; + this.toolButtonDetails.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_Details_16x16; + this.toolButtonDetails.Name = "toolButtonDetails"; + this.toolButtonDetails.Click += new System.EventHandler(this.toolButtonDetails_Click); + // + // toolButtonLarge + // + resources.ApplyResources(this.toolButtonLarge, "toolButtonLarge"); + this.toolButtonLarge.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_MediumIcons_16x16; + this.toolButtonLarge.Name = "toolButtonLarge"; + this.toolButtonLarge.Click += new System.EventHandler(this.toolButtonLarge_Click); + // + // toolButtonSmall + // + resources.ApplyResources(this.toolButtonSmall, "toolButtonSmall"); + this.toolButtonSmall.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_SmallIcons_16x16; + this.toolButtonSmall.Name = "toolButtonSmall"; + this.toolButtonSmall.Click += new System.EventHandler(this.toolButtonSmall_Click); + // + // toolButtonList + // + resources.ApplyResources(this.toolButtonList, "toolButtonList"); + this.toolButtonList.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_List_16x16; + this.toolButtonList.Name = "toolButtonList"; + this.toolButtonList.Click += new System.EventHandler(this.toolButtonList_Click); + // + // toolButtonTile + // + resources.ApplyResources(this.toolButtonTile, "toolButtonTile"); + this.toolButtonTile.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_Tiles_16x16; + this.toolButtonTile.Name = "toolButtonTile"; + this.toolButtonTile.Click += new System.EventHandler(this.toolButtonTile_Click); + // + // tabPageViewSettings + // + resources.ApplyResources(this.tabPageViewSettings, "tabPageViewSettings"); + this.tabPageViewSettings.Controls.Add(this.panelModeSorting); + this.tabPageViewSettings.Controls.Add(this.groupViewMoreOptions); + this.tabPageViewSettings.Controls.Add(this.panelModeColumns); + this.tabPageViewSettings.Controls.Add(this.labelMode); + this.tabPageViewSettings.Controls.Add(this.comboMode); + this.tabPageViewSettings.Name = "tabPageViewSettings"; + // + // panelModeSorting + // + resources.ApplyResources(this.panelModeSorting, "panelModeSorting"); + this.panelModeSorting.Name = "panelModeSorting"; + // + // groupViewMoreOptions + // + resources.ApplyResources(this.groupViewMoreOptions, "groupViewMoreOptions"); + this.groupViewMoreOptions.Controls.Add(this.checkShowGridlines); + this.groupViewMoreOptions.Controls.Add(this.comboLogoSize); + this.groupViewMoreOptions.Controls.Add(this.labelLogoSize); + this.groupViewMoreOptions.Name = "groupViewMoreOptions"; + this.groupViewMoreOptions.TabStop = false; + // + // checkShowGridlines + // + resources.ApplyResources(this.checkShowGridlines, "checkShowGridlines"); + this.checkShowGridlines.Name = "checkShowGridlines"; + this.checkShowGridlines.UseVisualStyleBackColor = true; + this.checkShowGridlines.CheckedChanged += new System.EventHandler(this.checkShowGridlines_CheckedChanged); + // + // comboLogoSize + // + resources.ApplyResources(this.comboLogoSize, "comboLogoSize"); + this.comboLogoSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboLogoSize.FormattingEnabled = true; + this.comboLogoSize.Items.AddRange(new object[] { + resources.GetString("comboLogoSize.Items"), + resources.GetString("comboLogoSize.Items1"), + resources.GetString("comboLogoSize.Items2"), + resources.GetString("comboLogoSize.Items3"), + resources.GetString("comboLogoSize.Items4"), + resources.GetString("comboLogoSize.Items5")}); + this.comboLogoSize.Name = "comboLogoSize"; + this.comboLogoSize.SelectedIndexChanged += new System.EventHandler(this.comboLogoSize_SelectedIndexChanged); + // + // labelLogoSize + // + resources.ApplyResources(this.labelLogoSize, "labelLogoSize"); + this.labelLogoSize.Name = "labelLogoSize"; + // + // panelModeColumns + // + resources.ApplyResources(this.panelModeColumns, "panelModeColumns"); + this.panelModeColumns.Name = "panelModeColumns"; + // + // labelMode + // + resources.ApplyResources(this.labelMode, "labelMode"); + this.labelMode.Name = "labelMode"; + // + // comboMode + // + resources.ApplyResources(this.comboMode, "comboMode"); + this.comboMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboMode.FormattingEnabled = true; + this.comboMode.Items.AddRange(new object[] { + resources.GetString("comboMode.Items"), + resources.GetString("comboMode.Items1"), + resources.GetString("comboMode.Items2"), + resources.GetString("comboMode.Items3"), + resources.GetString("comboMode.Items4")}); + this.comboMode.Name = "comboMode"; + this.comboMode.SelectedIndexChanged += new System.EventHandler(this.comboMode_SelectedIndexChanged); + // + // UiBroadcastListSettingsEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tabControlSettings); + this.Name = "UiBroadcastListSettingsEditor"; + this.Load += new System.EventHandler(this.UiBroadcastListSettingsEditor_Load); + this.tabControlSettings.ResumeLayout(false); + this.tabPageGeneral.ResumeLayout(false); + this.groupGeneralMoreOptions.ResumeLayout(false); + this.groupGeneralMoreOptions.PerformLayout(); + this.groupViewMode.ResumeLayout(false); + this.toolStripListMode.ResumeLayout(false); + this.toolStripListMode.PerformLayout(); + this.tabPageViewSettings.ResumeLayout(false); + this.tabPageViewSettings.PerformLayout(); + this.groupViewMoreOptions.ResumeLayout(false); + this.groupViewMoreOptions.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControlSettings; + private System.Windows.Forms.TabPage tabPageGeneral; + private System.Windows.Forms.TabPage tabPageViewSettings; + private System.Windows.Forms.GroupBox groupViewMode; + private System.Windows.Forms.Label labelMode; + private System.Windows.Forms.ComboBox comboMode; + private System.Windows.Forms.GroupBox groupGeneralMoreOptions; + private System.Windows.Forms.GroupBox groupViewMoreOptions; + private System.Windows.Forms.Panel panelModeColumns; + private System.Windows.Forms.Panel panelModeSorting; + private System.Windows.Forms.ToolStrip toolStripListMode; + private System.Windows.Forms.ToolStripButton toolButtonDetails; + private System.Windows.Forms.ToolStripButton toolButtonLarge; + private System.Windows.Forms.ToolStripButton toolButtonSmall; + private System.Windows.Forms.ToolStripButton toolButtonList; + private System.Windows.Forms.ToolStripButton toolButtonTile; + private System.Windows.Forms.CheckBox checkShowHidden; + private System.Windows.Forms.CheckBox checkShowInactive; + private System.Windows.Forms.CheckBox checkShowOutOfPackage; + private System.Windows.Forms.ComboBox comboLogoSize; + private System.Windows.Forms.Label labelLogoSize; + private System.Windows.Forms.CheckBox checkShowGridlines; + private System.Windows.Forms.Panel panelGlobalSorting; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs index 0cd7f3a1..8e6d876c 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs @@ -1,386 +1,386 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; - -namespace Project.IpTv.UiServices.Discovery.BroadcastList.Editors -{ - public partial class UiBroadcastListSettingsEditor : UserControl, IConfigurationItemEditor, ISettingsEditorContainer - { - private int ManualUpdateLock; - private ToolStripButton[] ListModeItems; - private ISettingsEditorModeColumns[] EditorModeColumns; - private SettingsEditorSorting EditorGlobalSorting; - private SettingsEditorSorting[] EditorModeSorting; - - public UiBroadcastListSettingsEditor() - { - InitializeComponent(); - } // constructor - - public UiBroadcastListSettings Settings - { - get; - set; - } // Settings - - #region IConfigurationItemEditor implementation - - UserControl IConfigurationItemEditor.UserInterfaceItem - { - get { return this; } - } // IConfigurationItemEditor.UserInterfaceItem - - bool IConfigurationItemEditor.SupportsWinFormsValidation - { - get { return false; } - } // IConfigurationItemEditor.SupportsWinFormsValidation - - public bool IsDataChanged - { - get; - protected set; - } // IsDataChanged - - public bool IsAppRestartNeeded - { - get { return false; } - } // IsAppRestartNeeded - - bool IConfigurationItemEditor.Validate() - { - return true; - } // IConfigurationItemEditor.Validate - - IConfigurationItem IConfigurationItemEditor.GetNewData() - { - SaveGeneralTab(); - SaveModeSettingsTab(); - - return Settings; - } // IConfigurationItemEditor.GetNewData - - void IConfigurationItemEditor.EditorClosing(out bool cancelClose) - { - cancelClose = false; - } // IConfigurationItemEditor.EditorClosing - - void IConfigurationItemEditor.EditorClosed(bool userCancel) - { - // no op - } // IConfigurationItemEditor.EditorClosed - - #endregion - - #region ISettingsEditorContainer implementation - - void ISettingsEditorContainer.SetDataChanged() - { - IsDataChanged = true; - } // SetDataChanged - - protected void SetDataChanged() - { - IsDataChanged = true; - } // SetDataChanged - - #endregion - - private void UiBroadcastListSettingsEditor_Load(object sender, EventArgs e) - { - var sortedColumns = UiBroadcastListManager.GetSortedColumnNames(); - var sortedColumnsNone = UiBroadcastListManager.GetSortedColumnNames(true); - - // General tab - LoadGeneralTab(sortedColumnsNone); - - // Mode settings tab - LoadModeSettingsTab(sortedColumns, sortedColumnsNone); - } // UiBroadcastListSettingsEditor_Load - - #region General tab load/save - - private void LoadGeneralTab(List> sortedColumnsNone) - { - ListModeItems = new ToolStripButton[5]; - ListModeItems[0] = toolButtonDetails; - ListModeItems[1] = toolButtonLarge; - ListModeItems[2] = toolButtonSmall; - ListModeItems[3] = toolButtonList; - ListModeItems[4] = toolButtonTile; - ListModeItems[0].Tag = View.Details; - ListModeItems[1].Tag = View.LargeIcon; - ListModeItems[2].Tag = View.SmallIcon; - ListModeItems[3].Tag = View.List; - ListModeItems[4].Tag = View.Tile; - - ManualUpdateLock++; - - checkShowInactive.Checked = Settings.ShowInactiveServices; - checkShowHidden.Checked = Settings.ShowHiddenServices; - checkShowOutOfPackage.Checked = Settings.ShowOutOfPackage; - - EditorGlobalSorting = new SettingsEditorSorting(); - EditorGlobalSorting.ColumnsNoneList = sortedColumnsNone; - EditorGlobalSorting.Sort = Settings.GlobalSortColumns; - EditorGlobalSorting.SetContainer(this); - EditorGlobalSorting.Dock = DockStyle.Fill; - EditorGlobalSorting.UseGlobalSort = Settings.UseGlobalSortColumns; - EditorGlobalSorting.ShowUseGlobalSort = true; - EditorGlobalSorting.UseGlobalSortChanged += EditorGlobalSorting_UseGlobalSortChanged; - panelGlobalSorting.Controls.Add(EditorGlobalSorting); - - ManualUpdateLock--; - } // LoadGeneralTab - - private void SaveGeneralTab() - { - if (EditorGlobalSorting.IsDataChanged) - { - Settings.GlobalSortColumns = EditorGlobalSorting.SelectedSort; - Settings.UseGlobalSortColumns = EditorGlobalSorting.UseGlobalSort; - } // if - } // SaveGeneralTab - - #endregion - - #region General tab event handlers - - private void toolButtonDetails_Click(object sender, EventArgs e) - { - SetListMode(View.Details); - SetDataChanged(); - } // toolButtonDetails_Click - - private void toolButtonLarge_Click(object sender, EventArgs e) - { - SetListMode(View.LargeIcon); - SetDataChanged(); - } // toolButtonLarge_Click - - private void toolButtonSmall_Click(object sender, EventArgs e) - { - SetListMode(View.SmallIcon); - SetDataChanged(); - } // toolButtonSmall_Click - - private void toolButtonList_Click(object sender, EventArgs e) - { - SetListMode(View.List); - SetDataChanged(); - } // toolButtonList_Click - - private void toolButtonTile_Click(object sender, EventArgs e) - { - SetListMode(View.Tile); - SetDataChanged(); - } // toolButtonTile_Click - - private void SetListMode(View mode) - { - Settings.CurrentMode = mode; - foreach (var control in ListModeItems) - { - if (mode == (View)control.Tag) - { - control.BackColor = SystemColors.Highlight; - control.ForeColor = SystemColors.HighlightText; - } - else - { - control.BackColor = toolStripListMode.BackColor; - control.ForeColor = toolStripListMode.ForeColor; - } // if-else - } // foreach control - - comboMode.SelectedIndex = ViewToIndex(mode); - } // SetListMode - - private void checkShowInactive_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowInactiveServices = checkShowInactive.Checked; - SetDataChanged(); - } - - private void checkShowHidden_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowHiddenServices = checkShowHidden.Checked; - SetDataChanged(); - } // checkShowHidden_CheckedChanged - - private void checkShowOutOfPackage_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowOutOfPackage = checkShowOutOfPackage.Checked; - SetDataChanged(); - } // checkShowOutOfPackage_CheckedChanged - - private void EditorGlobalSorting_UseGlobalSortChanged(object sender, EventArgs e) - { - foreach (var editor in EditorModeSorting) - { - editor.Enabled = !EditorGlobalSorting.UseGlobalSort; - } // foreach editor - } // EditorGlobalSorting_UseGlobalSortChanged - - #endregion - - #region Mode settings tab load/save - - private void LoadModeSettingsTab(List> sortedColumns, List> sortedColumnsNone) - { - EditorModeColumns = new ISettingsEditorModeColumns[5]; - EditorModeColumns[0] = new SettingsEditorModeMultiColumn(); - EditorModeColumns[1] = new SettingsEditorModeSingleColumn(); - EditorModeColumns[2] = new SettingsEditorModeSingleColumn(); - EditorModeColumns[3] = new SettingsEditorModeSingleColumn(); - EditorModeColumns[4] = new SettingsEditorModeTripleColumn(); - - EditorModeSorting = new SettingsEditorSorting[5]; - EditorModeSorting[0] = new SettingsEditorSorting(); - EditorModeSorting[1] = new SettingsEditorSorting(); - EditorModeSorting[2] = new SettingsEditorSorting(); - EditorModeSorting[3] = new SettingsEditorSorting(); - EditorModeSorting[4] = new SettingsEditorSorting(); - - for (int index = 0; index < EditorModeColumns.Length; index++) - { - var editor = EditorModeColumns[index]; - var view = IndexToView(index); - editor.SetContainer(this); - editor.ColumnsList = sortedColumns; - editor.ColumnsNoneList = sortedColumnsNone; - editor.Columns = Settings[view].Columns; - } // for - - for (int index = 0; index < EditorModeSorting.Length; index++) - { - var editor = EditorModeSorting[index]; - var view = IndexToView(index); - editor.SetContainer(this); - editor.ColumnsNoneList = sortedColumnsNone; - editor.Sort = Settings[view].Sort; - editor.Enabled = !Settings.UseGlobalSortColumns; - } // for - - ManualUpdateLock++; - - comboLogoSize.ValueMember = "Key"; - comboLogoSize.DisplayMember = "Value"; - comboLogoSize.DataSource = BaseLogo.GetListLogoSizes(true).AsReadOnly(); - - checkShowGridlines.Checked = Settings.ShowGridlines; - - ManualUpdateLock--; - - SetListMode(Settings.CurrentMode); - } // private LoadModeSettingsTab - - private void SaveModeSettingsTab() - { - for (int index = 0; index < EditorModeColumns.Length; index++) - { - var editor = EditorModeColumns[index]; - if (!editor.IsDataChanged) continue; - - var view = IndexToView(index); - Settings[view].Columns = editor.SelectedColumns; - } // for - - for (int index = 0; index < EditorModeSorting.Length; index++) - { - var editor = EditorModeSorting[index]; - if (!editor.IsDataChanged) continue; - - var view = IndexToView(index); - Settings[view].Sort = editor.SelectedSort; - } // for - } // SaveGeneralTab - - private int ViewToIndex(View view) - { - switch (view) - { - case View.Details: return 0; - case View.LargeIcon: return 1; - case View.SmallIcon: return 2; - case View.List: return 3; - case View.Tile: return 4; - default: - throw new IndexOutOfRangeException(); - } // switch - } // ViewToIndex - - private View IndexToView(int index) - { - switch (index) - { - case 0: return View.Details; - case 1: return View.LargeIcon; - case 2: return View.SmallIcon; - case 3: return View.List; - case 4: return View.Tile; - default: - throw new IndexOutOfRangeException(); - } // switch - } // IndexToView - - #endregion - - #region Mode settings tab event handlers - - private void comboMode_SelectedIndexChanged(object sender, EventArgs e) - { - ManualUpdateLock++; - - var index = comboMode.SelectedIndex; - - panelModeColumns.Controls.Clear(); - panelModeColumns.Controls.Add(EditorModeColumns[index].GetUnderlyingControl()); - panelModeColumns.Controls[0].Dock = DockStyle.Fill; - - panelModeSorting.Controls.Clear(); - panelModeSorting.Controls.Add(EditorModeSorting[index]); - panelModeSorting.Controls[0].Dock = DockStyle.Fill; - - var view = IndexToView(comboMode.SelectedIndex); - comboLogoSize.SelectedValue = Settings[view].LogoSize; - checkShowGridlines.Visible = (view == View.Details); - - ManualUpdateLock--; - } // comboMode_SelectedIndexChanged - - private void comboLogoSize_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var view = IndexToView(comboMode.SelectedIndex); - Settings[view].LogoSize = (LogoSize) comboLogoSize.SelectedValue; - SetDataChanged(); - } // comboLogoSize_SelectedIndexChanged - - private void checkShowGridlines_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowGridlines = checkShowGridlines.Checked; - SetDataChanged(); - } // checkShowGridlines_CheckedChanged - - #endregion - } // class UiBroadcastListSettingsEditor -} // namespace +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + public partial class UiBroadcastListSettingsEditor : UserControl, IConfigurationItemEditor, ISettingsEditorContainer + { + private int ManualUpdateLock; + private ToolStripButton[] ListModeItems; + private ISettingsEditorModeColumns[] EditorModeColumns; + private SettingsEditorSorting EditorGlobalSorting; + private SettingsEditorSorting[] EditorModeSorting; + + public UiBroadcastListSettingsEditor() + { + InitializeComponent(); + } // constructor + + public UiBroadcastListSettings Settings + { + get; + set; + } // Settings + + #region IConfigurationItemEditor implementation + + UserControl IConfigurationItemEditor.UserInterfaceItem + { + get { return this; } + } // IConfigurationItemEditor.UserInterfaceItem + + bool IConfigurationItemEditor.SupportsWinFormsValidation + { + get { return false; } + } // IConfigurationItemEditor.SupportsWinFormsValidation + + public bool IsDataChanged + { + get; + protected set; + } // IsDataChanged + + public bool IsAppRestartNeeded + { + get { return false; } + } // IsAppRestartNeeded + + bool IConfigurationItemEditor.Validate() + { + return true; + } // IConfigurationItemEditor.Validate + + IConfigurationItem IConfigurationItemEditor.GetNewData() + { + SaveGeneralTab(); + SaveModeSettingsTab(); + + return Settings; + } // IConfigurationItemEditor.GetNewData + + void IConfigurationItemEditor.EditorClosing(out bool cancelClose) + { + cancelClose = false; + } // IConfigurationItemEditor.EditorClosing + + void IConfigurationItemEditor.EditorClosed(bool userCancel) + { + // no op + } // IConfigurationItemEditor.EditorClosed + + #endregion + + #region ISettingsEditorContainer implementation + + void ISettingsEditorContainer.SetDataChanged() + { + IsDataChanged = true; + } // SetDataChanged + + protected void SetDataChanged() + { + IsDataChanged = true; + } // SetDataChanged + + #endregion + + private void UiBroadcastListSettingsEditor_Load(object sender, EventArgs e) + { + var sortedColumns = UiBroadcastListManager.GetSortedColumnNames(); + var sortedColumnsNone = UiBroadcastListManager.GetSortedColumnNames(true); + + // General tab + LoadGeneralTab(sortedColumnsNone); + + // Mode settings tab + LoadModeSettingsTab(sortedColumns, sortedColumnsNone); + } // UiBroadcastListSettingsEditor_Load + + #region General tab load/save + + private void LoadGeneralTab(List> sortedColumnsNone) + { + ListModeItems = new ToolStripButton[5]; + ListModeItems[0] = toolButtonDetails; + ListModeItems[1] = toolButtonLarge; + ListModeItems[2] = toolButtonSmall; + ListModeItems[3] = toolButtonList; + ListModeItems[4] = toolButtonTile; + ListModeItems[0].Tag = View.Details; + ListModeItems[1].Tag = View.LargeIcon; + ListModeItems[2].Tag = View.SmallIcon; + ListModeItems[3].Tag = View.List; + ListModeItems[4].Tag = View.Tile; + + ManualUpdateLock++; + + checkShowInactive.Checked = Settings.ShowInactiveServices; + checkShowHidden.Checked = Settings.ShowHiddenServices; + checkShowOutOfPackage.Checked = Settings.ShowOutOfPackage; + + EditorGlobalSorting = new SettingsEditorSorting(); + EditorGlobalSorting.ColumnsNoneList = sortedColumnsNone; + EditorGlobalSorting.Sort = Settings.GlobalSortColumns; + EditorGlobalSorting.SetContainer(this); + EditorGlobalSorting.Dock = DockStyle.Fill; + EditorGlobalSorting.UseGlobalSort = Settings.UseGlobalSortColumns; + EditorGlobalSorting.ShowUseGlobalSort = true; + EditorGlobalSorting.UseGlobalSortChanged += EditorGlobalSorting_UseGlobalSortChanged; + panelGlobalSorting.Controls.Add(EditorGlobalSorting); + + ManualUpdateLock--; + } // LoadGeneralTab + + private void SaveGeneralTab() + { + if (EditorGlobalSorting.IsDataChanged) + { + Settings.GlobalSortColumns = EditorGlobalSorting.SelectedSort; + Settings.UseGlobalSortColumns = EditorGlobalSorting.UseGlobalSort; + } // if + } // SaveGeneralTab + + #endregion + + #region General tab event handlers + + private void toolButtonDetails_Click(object sender, EventArgs e) + { + SetListMode(View.Details); + SetDataChanged(); + } // toolButtonDetails_Click + + private void toolButtonLarge_Click(object sender, EventArgs e) + { + SetListMode(View.LargeIcon); + SetDataChanged(); + } // toolButtonLarge_Click + + private void toolButtonSmall_Click(object sender, EventArgs e) + { + SetListMode(View.SmallIcon); + SetDataChanged(); + } // toolButtonSmall_Click + + private void toolButtonList_Click(object sender, EventArgs e) + { + SetListMode(View.List); + SetDataChanged(); + } // toolButtonList_Click + + private void toolButtonTile_Click(object sender, EventArgs e) + { + SetListMode(View.Tile); + SetDataChanged(); + } // toolButtonTile_Click + + private void SetListMode(View mode) + { + Settings.CurrentMode = mode; + foreach (var control in ListModeItems) + { + if (mode == (View)control.Tag) + { + control.BackColor = SystemColors.Highlight; + control.ForeColor = SystemColors.HighlightText; + } + else + { + control.BackColor = toolStripListMode.BackColor; + control.ForeColor = toolStripListMode.ForeColor; + } // if-else + } // foreach control + + comboMode.SelectedIndex = ViewToIndex(mode); + } // SetListMode + + private void checkShowInactive_CheckedChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + Settings.ShowInactiveServices = checkShowInactive.Checked; + SetDataChanged(); + } + + private void checkShowHidden_CheckedChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + Settings.ShowHiddenServices = checkShowHidden.Checked; + SetDataChanged(); + } // checkShowHidden_CheckedChanged + + private void checkShowOutOfPackage_CheckedChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + Settings.ShowOutOfPackage = checkShowOutOfPackage.Checked; + SetDataChanged(); + } // checkShowOutOfPackage_CheckedChanged + + private void EditorGlobalSorting_UseGlobalSortChanged(object sender, EventArgs e) + { + foreach (var editor in EditorModeSorting) + { + editor.Enabled = !EditorGlobalSorting.UseGlobalSort; + } // foreach editor + } // EditorGlobalSorting_UseGlobalSortChanged + + #endregion + + #region Mode settings tab load/save + + private void LoadModeSettingsTab(List> sortedColumns, List> sortedColumnsNone) + { + EditorModeColumns = new ISettingsEditorModeColumns[5]; + EditorModeColumns[0] = new SettingsEditorModeMultiColumn(); + EditorModeColumns[1] = new SettingsEditorModeSingleColumn(); + EditorModeColumns[2] = new SettingsEditorModeSingleColumn(); + EditorModeColumns[3] = new SettingsEditorModeSingleColumn(); + EditorModeColumns[4] = new SettingsEditorModeTripleColumn(); + + EditorModeSorting = new SettingsEditorSorting[5]; + EditorModeSorting[0] = new SettingsEditorSorting(); + EditorModeSorting[1] = new SettingsEditorSorting(); + EditorModeSorting[2] = new SettingsEditorSorting(); + EditorModeSorting[3] = new SettingsEditorSorting(); + EditorModeSorting[4] = new SettingsEditorSorting(); + + for (int index = 0; index < EditorModeColumns.Length; index++) + { + var editor = EditorModeColumns[index]; + var view = IndexToView(index); + editor.SetContainer(this); + editor.ColumnsList = sortedColumns; + editor.ColumnsNoneList = sortedColumnsNone; + editor.Columns = Settings[view].Columns; + } // for + + for (int index = 0; index < EditorModeSorting.Length; index++) + { + var editor = EditorModeSorting[index]; + var view = IndexToView(index); + editor.SetContainer(this); + editor.ColumnsNoneList = sortedColumnsNone; + editor.Sort = Settings[view].Sort; + editor.Enabled = !Settings.UseGlobalSortColumns; + } // for + + ManualUpdateLock++; + + comboLogoSize.ValueMember = "Key"; + comboLogoSize.DisplayMember = "Value"; + comboLogoSize.DataSource = BaseLogo.GetListLogoSizes(true).AsReadOnly(); + + checkShowGridlines.Checked = Settings.ShowGridlines; + + ManualUpdateLock--; + + SetListMode(Settings.CurrentMode); + } // private LoadModeSettingsTab + + private void SaveModeSettingsTab() + { + for (int index = 0; index < EditorModeColumns.Length; index++) + { + var editor = EditorModeColumns[index]; + if (!editor.IsDataChanged) continue; + + var view = IndexToView(index); + Settings[view].Columns = editor.SelectedColumns; + } // for + + for (int index = 0; index < EditorModeSorting.Length; index++) + { + var editor = EditorModeSorting[index]; + if (!editor.IsDataChanged) continue; + + var view = IndexToView(index); + Settings[view].Sort = editor.SelectedSort; + } // for + } // SaveGeneralTab + + private int ViewToIndex(View view) + { + switch (view) + { + case View.Details: return 0; + case View.LargeIcon: return 1; + case View.SmallIcon: return 2; + case View.List: return 3; + case View.Tile: return 4; + default: + throw new IndexOutOfRangeException(); + } // switch + } // ViewToIndex + + private View IndexToView(int index) + { + switch (index) + { + case 0: return View.Details; + case 1: return View.LargeIcon; + case 2: return View.SmallIcon; + case 3: return View.List; + case 4: return View.Tile; + default: + throw new IndexOutOfRangeException(); + } // switch + } // IndexToView + + #endregion + + #region Mode settings tab event handlers + + private void comboMode_SelectedIndexChanged(object sender, EventArgs e) + { + ManualUpdateLock++; + + var index = comboMode.SelectedIndex; + + panelModeColumns.Controls.Clear(); + panelModeColumns.Controls.Add(EditorModeColumns[index].GetUnderlyingControl()); + panelModeColumns.Controls[0].Dock = DockStyle.Fill; + + panelModeSorting.Controls.Clear(); + panelModeSorting.Controls.Add(EditorModeSorting[index]); + panelModeSorting.Controls[0].Dock = DockStyle.Fill; + + var view = IndexToView(comboMode.SelectedIndex); + comboLogoSize.SelectedValue = Settings[view].LogoSize; + checkShowGridlines.Visible = (view == View.Details); + + ManualUpdateLock--; + } // comboMode_SelectedIndexChanged + + private void comboLogoSize_SelectedIndexChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + var view = IndexToView(comboMode.SelectedIndex); + Settings[view].LogoSize = (LogoSize) comboLogoSize.SelectedValue; + SetDataChanged(); + } // comboLogoSize_SelectedIndexChanged + + private void checkShowGridlines_CheckedChanged(object sender, EventArgs e) + { + if (ManualUpdateLock > 0) return; + + Settings.ShowGridlines = checkShowGridlines.Checked; + SetDataChanged(); + } // checkShowGridlines_CheckedChanged + + #endregion + } // class UiBroadcastListSettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs index d6a38f00..2a7e95e3 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { public class ListSelectionChangedEventArgs: EventArgs { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs index dd881977..3916d342 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { public class ListStatusChangedEventArgs: EventArgs { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs index 83b23dee..0ff8cdb3 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { public class ServiceSortComparer: IComparer { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs index f8872558..3eda05ab 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { public enum UiBroadcastListColumn { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs index 58ccea12..7802242c 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs @@ -6,14 +6,14 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.UiServices.Common.Properties; +using IpTviewr.UiServices.Common.Properties; using System.Drawing; -using Project.IpTv.UiServices.Common.Controls; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.Common.Serialization; +using IpTviewr.UiServices.Common.Controls; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration; +using IpTviewr.Common.Serialization; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { public class UiBroadcastListManager: IDisposable { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs index 27efc782..31f385c9 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs @@ -1,8 +1,8 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Serialization; -using Project.IpTv.UiServices.Configuration.Logos; +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Configuration.Logos; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +10,7 @@ using System.Windows.Forms; using System.Xml.Serialization; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { [Serializable] public class UiBroadcastListModeSettings diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs index 7fdbbaad..fab71cd2 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs @@ -1,9 +1,9 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Serialization; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; using System; using System.Collections.Generic; using System.ComponentModel; @@ -13,7 +13,7 @@ using System.Windows.Forms; using System.Xml.Serialization; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { [Serializable] [XmlRoot("UiBroadcastList", Namespace=ConfigCommon.ConfigXmlNamespace)] diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs index d67a4799..4bea043c 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs @@ -1,11 +1,11 @@ -using Project.IpTv.UiServices.Configuration; +using IpTviewr.UiServices.Configuration; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { public class UiBroadcastListSettingsRegistration: IConfigurationItemRegistration { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs index 2f9e7b97..d8bd4637 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs @@ -8,7 +8,7 @@ using System.Text; using System.Xml.Serialization; -namespace Project.IpTv.UiServices.Discovery.BroadcastList +namespace IpTviewr.UiServices.Discovery.BroadcastList { [Serializable] public struct UiBroadcastListSortColumn diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs index ed90a7b9..ff9c3c08 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("UI Services: Discovery")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.Discovery")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Discovery")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] [assembly: AssemblyCulture("")] diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs index 3288a67e..206afe18 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Discovery.Properties { +namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -39,7 +39,7 @@ internal InvariantTexts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Discovery.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs index b6cd4fef..d5a64a2f 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Discovery.Properties { +namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -39,7 +39,7 @@ internal ListViewManager() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Discovery.Properties.ListViewManager", typeof(ListViewManager).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.ListViewManager", typeof(ListViewManager).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs index d966b91a..8e8c4cae 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Discovery.Properties { +namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Discovery.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs index 764a9c45..bc1b2700 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Discovery.Properties { +namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -39,7 +39,7 @@ internal SettingsEditor() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Discovery.Properties.SettingsEditor", typeof(SettingsEditor).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.SettingsEditor", typeof(SettingsEditor).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs index ac9e7255..dea93fe5 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Discovery.Properties { +namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -39,7 +39,7 @@ internal Texts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Discovery.Properties.Texts", typeof(Texts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.Texts", typeof(Texts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs b/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs index a4a991e5..66b4eab9 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { internal class SerializationCommon { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs index 02edec1f..2aa92513 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs @@ -8,7 +8,7 @@ using System.Text; using System.Xml.Serialization; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { [Serializable] [XmlRoot(ElementName="UI-BroadcastDiscovery", Namespace=SerializationCommon.XmlNamespace)] diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs index fdbfa541..c8d67109 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs @@ -1,10 +1,10 @@ using Etsi.Ts102034.v010501.XmlSerialization; using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; -using Project.IpTv.Common; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Cache; -using Project.IpTv.UiServices.DvbStpClient; +using IpTviewr.Common; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Cache; +using IpTviewr.UiServices.DvbStpClient; using System; using System.Collections.Generic; using System.Linq; @@ -12,7 +12,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { public class UiBroadcastDiscoveryDownloader { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs index e10ff5fc..a9445238 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { public class UiBroadcastDiscoveryMergeResult { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs index e9e60077..34ef7587 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { partial class UiBroadcastDiscoveryMergeResultDetailsDialog { @@ -70,14 +70,14 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonClose, "buttonClose"); this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonClose.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_Ok_16x16; + this.buttonClose.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_Ok_16x16; this.buttonClose.Name = "buttonClose"; this.buttonClose.UseVisualStyleBackColor = true; // // buttonCopy // resources.ApplyResources(this.buttonCopy, "buttonCopy"); - this.buttonCopy.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_Copy_Clip_16x16; + this.buttonCopy.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_Copy_Clip_16x16; this.buttonCopy.Name = "buttonCopy"; this.buttonCopy.UseVisualStyleBackColor = true; this.buttonCopy.Click += new System.EventHandler(this.buttonCopy_Click); diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs index a3157dc4..75ed0637 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs @@ -10,7 +10,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { public partial class UiBroadcastDiscoveryMergeResultDetailsDialog : Form { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs index 41a7da84..552fcf5f 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { partial class UiBroadcastDiscoveryMergeResultDialog { @@ -112,7 +112,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonClose, "buttonClose"); this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonClose.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Action_Ok_16x16; + this.buttonClose.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_Ok_16x16; this.buttonClose.Name = "buttonClose"; this.buttonClose.UseVisualStyleBackColor = true; // @@ -120,14 +120,14 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonDetails, "buttonDetails"); this.buttonDetails.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonDetails.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.ListView_Details_16x16; + this.buttonDetails.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_Details_16x16; this.buttonDetails.Name = "buttonDetails"; this.buttonDetails.UseVisualStyleBackColor = true; this.buttonDetails.Click += new System.EventHandler(this.buttonDetails_Click); // // pictureIconSuccess // - this.pictureIconSuccess.Image = global::Project.IpTv.UiServices.Discovery.Properties.Resources.Status_Success_24x24; + this.pictureIconSuccess.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Status_Success_24x24; resources.ApplyResources(this.pictureIconSuccess, "pictureIconSuccess"); this.pictureIconSuccess.Name = "pictureIconSuccess"; this.pictureIconSuccess.TabStop = false; diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs index 9d307a8f..2351cd73 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs @@ -10,7 +10,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { public partial class UiBroadcastDiscoveryMergeResultDialog : Form { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs index ef0a9975..b03e08a2 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs @@ -4,11 +4,11 @@ using Etsi.Ts102034.v010501.XmlSerialization; using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; using Etsi.Ts102034.v010501.XmlSerialization.Common; -using Project.IpTv.Common; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Schema2014; -using Project.IpTv.UiServices.Configuration.Settings.Network; +using IpTviewr.Common; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Schema2014; +using IpTviewr.UiServices.Configuration.Settings.Network; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,7 +17,7 @@ using System.Xml.Serialization; using Property = System.Collections.Generic.KeyValuePair; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { [Serializable] [XmlType(TypeName="UI-BroadcastService", Namespace=SerializationCommon.XmlNamespace)] diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs index 7b6243ac..d93e1fe2 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs @@ -8,7 +8,7 @@ using System.Text; using System.Xml.Serialization; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { [Serializable] [XmlRoot(ElementName = "UI-BroadcastDiscovery", Namespace = SerializationCommon.XmlNamespace)] diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs index 35b7fc80..58a6718c 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs @@ -4,9 +4,9 @@ using Etsi.Ts102034.v010501.XmlSerialization; using Etsi.Ts102034.v010501.XmlSerialization.Common; using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Schema2014; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Schema2014; using System; using System.Collections.Generic; using System.Linq; @@ -15,7 +15,7 @@ using System.Xml.Serialization; using Property = System.Collections.Generic.KeyValuePair; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { public class UiServiceProvider { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj b/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj index 7e8ddb3d..324413f1 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj @@ -7,7 +7,7 @@ {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C} Library Properties - Project.IpTv.UiServices.Discovery + IpTviewr.UiServices.Discovery UiServices.Discovery v3.5 512 diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs index f2fa9dc5..f9e2deb9 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { public class UiServicesLogicalNumbers { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs b/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs index e5927654..09770450 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs @@ -8,7 +8,7 @@ using System.Text; using Property = System.Collections.Generic.KeyValuePair; -namespace Project.IpTv.UiServices.Discovery +namespace IpTviewr.UiServices.Discovery { internal class Utils { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs index dbef5cce..e8ca26a4 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { partial class DvbStpEnhancedDownloadDialog { @@ -46,8 +46,8 @@ private void InitializeComponent() this.labelEllapsedTime = new System.Windows.Forms.Label(); this.timerEllapsed = new System.Windows.Forms.Timer(this.components); this.buttonRequestCancel = new System.Windows.Forms.Button(); - this.pictureDownloadIcon = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); - this.listViewPayloads = new Project.IpTv.UiServices.Common.Controls.ListViewSortable(); + this.pictureDownloadIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.listViewPayloads = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.imageListPayloadStatus = new System.Windows.Forms.ImageList(this.components); columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -122,7 +122,7 @@ private void InitializeComponent() // buttonRequestCancel // this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonRequestCancel.Image = global::Project.IpTv.UiServices.DvbStpClient.Properties.Resources.Action_Cancel_Red_16x16; + this.buttonRequestCancel.Image = global::IpTviewr.UiServices.DvbStpClient.Properties.Resources.Action_Cancel_Red_16x16; resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); this.buttonRequestCancel.Name = "buttonRequestCancel"; this.buttonRequestCancel.UseVisualStyleBackColor = true; @@ -130,7 +130,7 @@ private void InitializeComponent() // // pictureDownloadIcon // - this.pictureDownloadIcon.Image = global::Project.IpTv.UiServices.DvbStpClient.Properties.Resources.DvbStpDownload_128x128; + this.pictureDownloadIcon.Image = global::IpTviewr.UiServices.DvbStpClient.Properties.Resources.DvbStpDownload_128x128; resources.ApplyResources(this.pictureDownloadIcon, "pictureDownloadIcon"); this.pictureDownloadIcon.Name = "pictureDownloadIcon"; this.pictureDownloadIcon.TabStop = false; @@ -206,10 +206,10 @@ private void InitializeComponent() private System.Windows.Forms.Label labelDataReception; private System.Windows.Forms.Button buttonRequestCancel; private System.Windows.Forms.Timer timerClose; - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureDownloadIcon; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureDownloadIcon; private System.Windows.Forms.Label labelEllapsedTime; private System.Windows.Forms.Timer timerEllapsed; - private Project.IpTv.UiServices.Common.Controls.ListViewSortable listViewPayloads; + private IpTviewr.UiServices.Common.Controls.ListViewSortable listViewPayloads; private System.Windows.Forms.ImageList imageListPayloadStatus; } // class DvbStpEnhancedDownloadDialog } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs index d700187b..3f900679 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs @@ -1,8 +1,8 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; -using Project.IpTv.DvbStp.Client; +using IpTviewr.Common.Telemetry; +using IpTviewr.DvbStp.Client; using System; using System.Collections.Generic; using System.ComponentModel; @@ -15,7 +15,7 @@ using System.Threading; using System.Windows.Forms; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public partial class DvbStpEnhancedDownloadDialog : Form { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx index 9015a2d2..ca2d0c01 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx @@ -412,7 +412,7 @@ pictureDownloadIcon - Project.IpTv.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null $this @@ -506,7 +506,7 @@ listViewPayloads - Project.IpTv.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null $this diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs index 83991f0a..b498bbba 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { partial class DvbStpSimpleDownloadDialog { @@ -44,7 +44,7 @@ private void InitializeComponent() this.labelEllapsedTime = new System.Windows.Forms.Label(); this.timerEllapsed = new System.Windows.Forms.Timer(this.components); this.buttonRequestCancel = new System.Windows.Forms.Button(); - this.pictureDownloadIcon = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); + this.pictureDownloadIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); ((System.ComponentModel.ISupportInitialize)(this.pictureDownloadIcon)).BeginInit(); this.SuspendLayout(); // @@ -106,7 +106,7 @@ private void InitializeComponent() // buttonRequestCancel // this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonRequestCancel.Image = global::Project.IpTv.UiServices.DvbStpClient.Properties.Resources.Action_Cancel_Red_16x16; + this.buttonRequestCancel.Image = global::IpTviewr.UiServices.DvbStpClient.Properties.Resources.Action_Cancel_Red_16x16; resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); this.buttonRequestCancel.Name = "buttonRequestCancel"; this.buttonRequestCancel.UseVisualStyleBackColor = true; @@ -114,7 +114,7 @@ private void InitializeComponent() // // pictureDownloadIcon // - this.pictureDownloadIcon.Image = global::Project.IpTv.UiServices.DvbStpClient.Properties.Resources.DvbStpDownload_128x128; + this.pictureDownloadIcon.Image = global::IpTviewr.UiServices.DvbStpClient.Properties.Resources.DvbStpDownload_128x128; resources.ApplyResources(this.pictureDownloadIcon, "pictureDownloadIcon"); this.pictureDownloadIcon.Name = "pictureDownloadIcon"; this.pictureDownloadIcon.TabStop = false; @@ -161,7 +161,7 @@ private void InitializeComponent() private System.Windows.Forms.Label labelDataReception; private System.Windows.Forms.Button buttonRequestCancel; private System.Windows.Forms.Timer timerClose; - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureDownloadIcon; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureDownloadIcon; private System.Windows.Forms.Label labelEllapsedTime; private System.Windows.Forms.Timer timerEllapsed; } diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs index 111009fd..604cb269 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs @@ -1,8 +1,8 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; -using Project.IpTv.DvbStp.Client; +using IpTviewr.Common.Telemetry; +using IpTviewr.DvbStp.Client; using System; using System.Collections.Generic; using System.ComponentModel; @@ -15,7 +15,7 @@ using System.Threading; using System.Windows.Forms; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public partial class DvbStpSimpleDownloadDialog : Form { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx index 19a9dc4f..961aa2aa 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx @@ -406,7 +406,7 @@ pictureDownloadIcon - Project.IpTv.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null $this diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs index fd25a33c..855feba5 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("UiServices.DvbStpClient")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.DvbStpClient")] +[assembly: AssemblyDescription("IpTviewr.UiServices.DvbStpClient")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] [assembly: AssemblyCulture("")] diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs index 612105bc..d56a41e5 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.DvbStpClient.Properties { +namespace IpTviewr.UiServices.DvbStpClient.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.DvbStpClient.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.DvbStpClient.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs index e9322ee1..026437f4 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.DvbStpClient.Properties { +namespace IpTviewr.UiServices.DvbStpClient.Properties { using System; @@ -39,7 +39,7 @@ internal Texts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.DvbStpClient.Properties.Texts", typeof(Texts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.DvbStpClient.Properties.Texts", typeof(Texts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs index e0359847..2c7a7764 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs @@ -5,7 +5,7 @@ using System.Net; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public abstract class UiDvbStpBaseDownloadRequest { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs index 8c4feb8c..873b504d 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs @@ -1,11 +1,11 @@ -using Project.IpTv.Common.Serialization; +using IpTviewr.Common.Serialization; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public abstract class UiDvbStpBaseDownloadResponse { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs index 64f1b47e..c75be355 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs @@ -1,6 +1,6 @@ using Microsoft.SqlServer.MessageBox; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Common.Forms; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Forms; using System; using System.Collections.Generic; using System.Linq; @@ -8,7 +8,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public abstract class UiDvbStpBaseDownloader { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs index 01ee1099..7d5430e5 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs @@ -1,13 +1,13 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.DvbStp.Client; +using IpTviewr.DvbStp.Client; using System; using System.Collections.Generic; using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public class UiDvbStpClientSegmentInfo: DvbStpClientSegmentInfo { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs index 847cde19..73df9752 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public class UiDvbStpEnhancedDownloadRequest : UiDvbStpBaseDownloadRequest { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs index 057d477a..f8257481 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public class UiDvbStpEnhancedDownloadResponse : UiDvbStpBaseDownloadResponse { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs index 57368df6..27a4ecc4 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs @@ -2,14 +2,14 @@ // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using Microsoft.SqlServer.MessageBox; -using Project.IpTv.UiServices.DvbStpClient.Properties; +using IpTviewr.UiServices.DvbStpClient.Properties; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public sealed class UiDvbStpEnhancedDownloader : UiDvbStpBaseDownloader { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs index 79e1b847..57a95628 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs @@ -8,7 +8,7 @@ using System.Net; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public class UiDvbStpSimpleDownloadRequest: UiDvbStpBaseDownloadRequest { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs index 98d47362..cce647e0 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public class UiDvbStpSimpleDownloadResponse : UiDvbStpBaseDownloadResponse { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs index f41160f4..c86c9457 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs @@ -2,14 +2,14 @@ // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using Microsoft.SqlServer.MessageBox; -using Project.IpTv.UiServices.DvbStpClient.Properties; +using IpTviewr.UiServices.DvbStpClient.Properties; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.DvbStpClient +namespace IpTviewr.UiServices.DvbStpClient { public sealed class UiDvbStpSimpleDownloader : UiDvbStpBaseDownloader { diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj index 65200feb..08fa0712 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj @@ -7,7 +7,7 @@ {BA481E42-F570-4D2C-94D4-21C4CCE27762} Library Properties - Project.IpTv.UiServices.DvbStpClient + IpTviewr.UiServices.DvbStpClient UiServices.DvbStpClient v3.5 512 diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs index 272c0c2e..33a13960 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Forms +namespace IpTviewr.UiServices.Forms { partial class MulticastScannerDialog { @@ -45,8 +45,8 @@ private void InitializeComponent() this.listViewStats = new System.Windows.Forms.ListView(); this.labelEllapsedTime = new System.Windows.Forms.Label(); this.timerEllapsed = new System.Windows.Forms.Timer(this.components); - this.pictureBoxServiceLogo = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); - this.pictureBoxIcon = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); + this.pictureBoxServiceLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.pictureBoxIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); this.buttonClose = new System.Windows.Forms.Button(); columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -95,7 +95,7 @@ private void InitializeComponent() // buttonRequestCancel // this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonRequestCancel.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Cancel_16x16; + this.buttonRequestCancel.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Cancel_16x16; resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); this.buttonRequestCancel.Name = "buttonRequestCancel"; this.buttonRequestCancel.UseVisualStyleBackColor = true; @@ -141,7 +141,7 @@ private void InitializeComponent() // // pictureBoxIcon // - this.pictureBoxIcon.Image = global::Project.IpTv.UiServices.Forms.Properties.Resources.ScanTv_128x128; + this.pictureBoxIcon.Image = global::IpTviewr.UiServices.Forms.Properties.Resources.ScanTv_128x128; resources.ApplyResources(this.pictureBoxIcon, "pictureBoxIcon"); this.pictureBoxIcon.Name = "pictureBoxIcon"; this.pictureBoxIcon.TabStop = false; @@ -149,7 +149,7 @@ private void InitializeComponent() // buttonClose // this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonClose.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Ok_16x16; + this.buttonClose.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Ok_16x16; resources.ApplyResources(this.buttonClose, "buttonClose"); this.buttonClose.Name = "buttonClose"; this.buttonClose.UseVisualStyleBackColor = true; @@ -192,13 +192,13 @@ private void InitializeComponent() #endregion - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureBoxIcon; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureBoxIcon; private System.Windows.Forms.Label labelScanning; private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Label labelProgressPercentage; private System.Windows.Forms.Label labelServiceUrl; private System.Windows.Forms.Label labelServiceName; - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureBoxServiceLogo; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureBoxServiceLogo; private System.Windows.Forms.Button buttonRequestCancel; private System.Windows.Forms.Label labelCaption; private System.Windows.Forms.ListView listViewStats; diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs index c267f099..7c6e618f 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs @@ -1,11 +1,11 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Forms.Properties; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Forms.Properties; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,7 +17,7 @@ using System.Threading; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Forms +namespace IpTviewr.UiServices.Forms { //CA1301 Avoid duplicate accelerators Define unique accelerators for the following controls in 'MulticastScannerDialog' that all currently use &C as an accelerator: MulticastScannerDialog.buttonRequestCancel, MulticastScannerDialog.buttonClose. ChannelList MulticastScannerDialog.cs 23 //This is OK. Both buttons are never active at the same time; in fact, one replaces the other when scan is completed (or cancelled) diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.resx b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.resx index f329af79..a36310e4 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.resx @@ -403,7 +403,7 @@ pictureBoxServiceLogo - Project.IpTv.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null $this @@ -430,7 +430,7 @@ pictureBoxIcon - Project.IpTv.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null $this @@ -508,6 +508,6 @@ MulticastScannerDialog - Project.IpTv.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs index eb6c5458..d253cd46 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Forms +namespace IpTviewr.UiServices.Forms { partial class MulticastScannerOptionsDialog { @@ -42,7 +42,7 @@ private void InitializeComponent() this.radioScanAll = new System.Windows.Forms.RadioButton(); this.labelInfo = new System.Windows.Forms.Label(); this.buttonRequestCancel = new System.Windows.Forms.Button(); - this.pictureIcon = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); + this.pictureIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); ((System.ComponentModel.ISupportInitialize)(this.numericTimeout)).BeginInit(); this.groupScanWhat.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureIcon)).BeginInit(); @@ -88,7 +88,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonStart, "buttonStart"); this.buttonStart.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonStart.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Run_16x16; + this.buttonStart.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Run_16x16; this.buttonStart.Name = "buttonStart"; this.buttonStart.UseVisualStyleBackColor = true; this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); @@ -131,13 +131,13 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonRequestCancel.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Cancel_16x16; + this.buttonRequestCancel.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Cancel_16x16; this.buttonRequestCancel.Name = "buttonRequestCancel"; this.buttonRequestCancel.UseVisualStyleBackColor = true; // // pictureIcon // - this.pictureIcon.Image = global::Project.IpTv.UiServices.Forms.Properties.Resources.ScanTv_128x128; + this.pictureIcon.Image = global::IpTviewr.UiServices.Forms.Properties.Resources.ScanTv_128x128; resources.ApplyResources(this.pictureIcon, "pictureIcon"); this.pictureIcon.Name = "pictureIcon"; this.pictureIcon.TabStop = false; @@ -174,7 +174,7 @@ private void InitializeComponent() #endregion - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureIcon; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureIcon; private System.Windows.Forms.Label labelCaption; private System.Windows.Forms.Label labelScanTimeout; private System.Windows.Forms.NumericUpDown numericTimeout; diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs index 422c84d3..fd4feb23 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs @@ -1,11 +1,11 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; +using IpTviewr.Common.Telemetry; using System; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Forms +namespace IpTviewr.UiServices.Forms { public partial class MulticastScannerOptionsDialog : Form { diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx index 07ecfe9d..8ebf0fc5 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx @@ -439,7 +439,7 @@ pictureIcon - Project.IpTv.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null $this diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs index 905d4eab..2bbcacd6 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ // set of attributes. Change these attribute parameters to modify the information // associated with an assembly. [assembly: AssemblyTitle("UI Services: Forms")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.Forms")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Forms")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] [assembly: AssemblyCulture("")] diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs index 28b6f671..39bd5bc0 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Forms.Properties { +namespace IpTviewr.UiServices.Forms.Properties { using System; @@ -39,7 +39,7 @@ internal CommonUiResources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Forms.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs index efea7eec..c1b1cf9e 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Forms.Properties { +namespace IpTviewr.UiServices.Forms.Properties { using System; @@ -39,7 +39,7 @@ internal DiscoveryTexts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Forms.Properties.DiscoveryTexts", typeof(DiscoveryTexts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.DiscoveryTexts", typeof(DiscoveryTexts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs index 43a3b6bb..35371023 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Forms.Properties { +namespace IpTviewr.UiServices.Forms.Properties { using System; @@ -39,7 +39,7 @@ internal MulticastScanner() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Forms.Properties.MulticastScanner", typeof(MulticastScanner).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.MulticastScanner", typeof(MulticastScanner).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs index 4bd65ac2..7575fc74 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Forms.Properties { +namespace IpTviewr.UiServices.Forms.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Forms.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs index 6053cce2..8895b850 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Forms +namespace IpTviewr.UiServices.Forms { partial class SelectProviderDialog { @@ -79,7 +79,7 @@ private void InitializeComponent() // buttonProviderDetails // resources.ApplyResources(this.buttonProviderDetails, "buttonProviderDetails"); - this.buttonProviderDetails.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Properties_16x16; + this.buttonProviderDetails.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Properties_16x16; this.buttonProviderDetails.Name = "buttonProviderDetails"; this.buttonProviderDetails.UseVisualStyleBackColor = true; this.buttonProviderDetails.Click += new System.EventHandler(this.buttonProviderDetails_Click); @@ -87,7 +87,7 @@ private void InitializeComponent() // buttonRefreshServiceProviderList // resources.ApplyResources(this.buttonRefreshServiceProviderList, "buttonRefreshServiceProviderList"); - this.buttonRefreshServiceProviderList.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Refresh_Blue_16x16; + this.buttonRefreshServiceProviderList.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Refresh_Blue_16x16; this.buttonRefreshServiceProviderList.Name = "buttonRefreshServiceProviderList"; this.buttonRefreshServiceProviderList.UseVisualStyleBackColor = true; this.buttonRefreshServiceProviderList.Click += new System.EventHandler(this.buttonRefreshServiceProviderList_Click); @@ -96,7 +96,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // @@ -104,7 +104,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonCancel, "buttonCancel"); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.UiServices.Forms.Properties.CommonUiResources.Action_Cancel_16x16; + this.buttonCancel.Image = global::IpTviewr.UiServices.Forms.Properties.CommonUiResources.Action_Cancel_16x16; this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.UseVisualStyleBackColor = true; // diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs index 25099cbf..9b194152 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs @@ -3,13 +3,13 @@ using Etsi.Ts102034.v010501.XmlSerialization; using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.DvbStpClient; -using Project.IpTv.UiServices.Forms; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.DvbStpClient; +using IpTviewr.UiServices.Forms; using System; using System.Collections.Generic; using System.ComponentModel; @@ -20,7 +20,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Forms +namespace IpTviewr.UiServices.Forms { public partial class SelectProviderDialog : CommonBaseForm { diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx index 3817bec0..81b2a251 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx @@ -340,6 +340,6 @@ SelectProviderDialog - Project.IpTv.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj b/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj index 54f0941d..e73c3b60 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj +++ b/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj @@ -7,7 +7,7 @@ {90F750B3-64DB-493F-96A6-E68DE5EA60A1} Library Properties - Project.IpTv.UiServices.Forms + IpTviewr.UiServices.Forms UiServices.Forms v3.5 512 diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs index 5310bc67..9d08c182 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs @@ -1,14 +1,14 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Services.Record.Serialization; +using IpTviewr.Services.Record.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { internal interface IRecordingScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs index 74ebb114..02a14a3c 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingDailyScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs index f1affa06..382b8020 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs @@ -9,9 +9,9 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; +using IpTviewr.Services.Record.Serialization; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { internal partial class RecordingDailyScheduleFragment : UserControl, IRecordingScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs index df99eeae..eb599760 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingDuration { @@ -38,7 +38,7 @@ private void InitializeComponent() this.dateTimeEndDate = new System.Windows.Forms.DateTimePicker(); this.radioEndDateTime = new System.Windows.Forms.RadioButton(); this.radioTimeSpan = new System.Windows.Forms.RadioButton(); - this.timeSpanLength = new Project.IpTv.UiServices.Common.Controls.TimeSpanUpDown(); + this.timeSpanLength = new IpTviewr.UiServices.Common.Controls.TimeSpanUpDown(); this.SuspendLayout(); // // comboQuickSetting @@ -129,6 +129,6 @@ private void InitializeComponent() private System.Windows.Forms.DateTimePicker dateTimeEndDate; private System.Windows.Forms.RadioButton radioEndDateTime; private System.Windows.Forms.RadioButton radioTimeSpan; - private Project.IpTv.UiServices.Common.Controls.TimeSpanUpDown timeSpanLength; + private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanLength; } } diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs index bd2eec63..316bb0a2 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs @@ -9,10 +9,10 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; -using Project.IpTv.UiServices.Record.Properties; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Record.Properties; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { public partial class RecordingDuration : UserControl { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx index edb95f7d..f47ba01b 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx @@ -286,7 +286,7 @@ timeSpanLength - Project.IpTv.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.0.1000.200, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.0.1000.200, Culture=neutral, PublicKeyToken=null $this diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs index c37e369f..bbee1d52 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingMonthlyScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs index 3a20d357..a5e4bee8 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs @@ -9,9 +9,9 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; +using IpTviewr.Services.Record.Serialization; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { internal partial class RecordingMonthlyScheduleFragment : UserControl, IRecordingScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs index 9ddb2d7d..2536cb55 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingOneTimeScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs index d8fb03aa..ad49cd98 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs @@ -9,9 +9,9 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; +using IpTviewr.Services.Record.Serialization; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { internal partial class RecordingOneTimeScheduleFragment : UserControl, IRecordingScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs index b61e3763..2a861b8f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingRightNowScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs index 13ebfd8d..48180884 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs @@ -9,9 +9,9 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; +using IpTviewr.Services.Record.Serialization; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { internal partial class RecordingRightNowScheduleFragment : UserControl, IRecordingScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs index 9000c10a..a8d5a341 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingSchedule { @@ -40,11 +40,11 @@ private void InitializeComponent() this.radioOneTime = new System.Windows.Forms.RadioButton(); this.radioRightNow = new System.Windows.Forms.RadioButton(); this.panelPlaceholder = new System.Windows.Forms.Panel(); - this.fragmentDaily = new Project.IpTv.UiServices.Record.Controls.RecordingDailyScheduleFragment(); - this.fragmentOneTime = new Project.IpTv.UiServices.Record.Controls.RecordingOneTimeScheduleFragment(); - this.fragmentMonthly = new Project.IpTv.UiServices.Record.Controls.RecordingMonthlyScheduleFragment(); - this.fragmentRightNow = new Project.IpTv.UiServices.Record.Controls.RecordingRightNowScheduleFragment(); - this.fragmentWeekly = new Project.IpTv.UiServices.Record.Controls.RecordingWeeklyScheduleFragment(); + this.fragmentDaily = new IpTviewr.UiServices.Record.Controls.RecordingDailyScheduleFragment(); + this.fragmentOneTime = new IpTviewr.UiServices.Record.Controls.RecordingOneTimeScheduleFragment(); + this.fragmentMonthly = new IpTviewr.UiServices.Record.Controls.RecordingMonthlyScheduleFragment(); + this.fragmentRightNow = new IpTviewr.UiServices.Record.Controls.RecordingRightNowScheduleFragment(); + this.fragmentWeekly = new IpTviewr.UiServices.Record.Controls.RecordingWeeklyScheduleFragment(); this.SuspendLayout(); // // dateTimeStartTime diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs index 0e41bbfb..36a82e12 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs @@ -9,9 +9,9 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; +using IpTviewr.Services.Record.Serialization; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { public partial class RecordingSchedule : UserControl { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx index 79ef0a74..be12265f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx @@ -349,7 +349,7 @@ fragmentDaily - Project.IpTv.UiServices.Controls.RecordingDailyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.RecordingDailyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null $this @@ -370,7 +370,7 @@ fragmentOneTime - Project.IpTv.UiServices.Controls.RecordingOneTimeScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.RecordingOneTimeScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null $this @@ -394,7 +394,7 @@ fragmentMonthly - Project.IpTv.UiServices.Controls.RecordingMonthlyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.RecordingMonthlyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null $this @@ -415,7 +415,7 @@ fragmentRightNow - Project.IpTv.UiServices.Controls.RecordingRightNowScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.RecordingRightNowScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null $this @@ -436,7 +436,7 @@ fragmentWeekly - Project.IpTv.UiServices.Controls.RecordingWeeklyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.RecordingWeeklyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null $this diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs index e99ee0cd..cb338c9f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { partial class RecordingWeeklyScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs index 25d62203..1b5ae5b3 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs @@ -9,10 +9,10 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record.Serialization; -using Project.IpTv.UiServices.Record.Properties; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Record.Properties; -namespace Project.IpTv.UiServices.Record.Controls +namespace IpTviewr.UiServices.Record.Controls { internal partial class RecordingWeeklyScheduleFragment : UserControl, IRecordingScheduleFragment { diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs index 6853290d..f4231ace 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ // set of attributes. Change these attribute parameters to modify the information // associated with an assembly. [assembly: AssemblyTitle("UI Services: Record")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.Record")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Record")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] [assembly: AssemblyCulture("")] diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs index 3c8a2a9f..63eb1b3e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Record.Properties { +namespace IpTviewr.UiServices.Record.Properties { using System; @@ -39,7 +39,7 @@ internal ControlTexts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Record.Properties.ControlTexts", typeof(ControlTexts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Record.Properties.ControlTexts", typeof(ControlTexts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs index f0a934b4..67b70480 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Record.Properties { +namespace IpTviewr.UiServices.Record.Properties { using System; @@ -39,7 +39,7 @@ internal RecordChannel() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Record.Properties.RecordChannel", typeof(RecordChannel).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Record.Properties.RecordChannel", typeof(RecordChannel).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs index 2a315623..020e413b 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Record.Properties { +namespace IpTviewr.UiServices.Record.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Record.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Record.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs index c4311505..7d987d28 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.Record.Properties { +namespace IpTviewr.UiServices.Record.Properties { using System; @@ -39,7 +39,7 @@ internal TasksTexts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.Record.Properties.TasksTexts", typeof(TasksTexts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Record.Properties.TasksTexts", typeof(TasksTexts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs index 270b574e..5ca3dd5d 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record +namespace IpTviewr.UiServices.Record { partial class RecordChannelDialog { @@ -46,9 +46,9 @@ private void InitializeComponent() this.labelStartMarginSufix = new System.Windows.Forms.Label(); this.numericStartMargin = new System.Windows.Forms.NumericUpDown(); this.checkBoxStartMargin = new System.Windows.Forms.CheckBox(); - this.recordingSchedule = new Project.IpTv.UiServices.Record.Controls.RecordingSchedule(); + this.recordingSchedule = new IpTviewr.UiServices.Record.Controls.RecordingSchedule(); this.tabPageLength = new System.Windows.Forms.TabPage(); - this.recordingTime = new Project.IpTv.UiServices.Record.Controls.RecordingDuration(); + this.recordingTime = new IpTviewr.UiServices.Record.Controls.RecordingDuration(); this.labelEndMarginSufix = new System.Windows.Forms.Label(); this.numericEndMargin = new System.Windows.Forms.NumericUpDown(); this.checkBoxEndMargin = new System.Windows.Forms.CheckBox(); @@ -58,18 +58,18 @@ private void InitializeComponent() this.labelTaskDescription = new System.Windows.Forms.Label(); this.checkAddTaskPrefix = new System.Windows.Forms.CheckBox(); this.labelTaskName = new System.Windows.Forms.Label(); - this.textTaskName = new Project.IpTv.UiServices.Common.Controls.FilenameTextBox(); + this.textTaskName = new IpTviewr.UiServices.Common.Controls.FilenameTextBox(); this.tabPageSave = new System.Windows.Forms.TabPage(); - this.listViewLocations = new Project.IpTv.UiServices.Common.Controls.ListViewSortable(); + this.listViewLocations = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.imageListLocations = new System.Windows.Forms.ImageList(this.components); this.buttonSelectFolder = new System.Windows.Forms.Button(); this.comboFileExtension = new System.Windows.Forms.ComboBox(); - this.textFilename = new Project.IpTv.UiServices.Common.Controls.FilenameTextBox(); + this.textFilename = new IpTviewr.UiServices.Common.Controls.FilenameTextBox(); this.labelFilename = new System.Windows.Forms.Label(); this.labelSaveLocation = new System.Windows.Forms.Label(); this.tabPageAdvanced = new System.Windows.Forms.TabPage(); - this.timeSpanSchedulerDeleteTaskAfter = new Project.IpTv.UiServices.Common.Controls.TimeSpanUpDown(); - this.timeSpanSchedulerRetry = new Project.IpTv.UiServices.Common.Controls.TimeSpanUpDown(); + this.timeSpanSchedulerDeleteTaskAfter = new IpTviewr.UiServices.Common.Controls.TimeSpanUpDown(); + this.timeSpanSchedulerRetry = new IpTviewr.UiServices.Common.Controls.TimeSpanUpDown(); this.comboSchedulerAlreadyRunning = new System.Windows.Forms.ComboBox(); this.labelSchedulerConcurrent = new System.Windows.Forms.Label(); this.checkSchedulerDeleteTask = new System.Windows.Forms.CheckBox(); @@ -80,8 +80,8 @@ private void InitializeComponent() this.comboSchedulerFolder = new System.Windows.Forms.ComboBox(); this.labelSchedulerFolder = new System.Windows.Forms.Label(); this.labelChannelNumber = new System.Windows.Forms.Label(); - this.pictureChannelLogo = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); - this.selectFolder = new Project.IpTv.UiServices.Common.Controls.SelectFolderDialog(); + this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); ColumnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); ColumnLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.tabProperties.SuspendLayout(); @@ -121,7 +121,7 @@ private void InitializeComponent() // buttonOk // resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.Image = global::Project.IpTv.UiServices.Record.Properties.Resources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); @@ -131,7 +131,7 @@ private void InitializeComponent() resources.ApplyResources(this.buttonCancel, "buttonCancel"); this.buttonCancel.CausesValidation = false; this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Image = global::Project.IpTv.UiServices.Record.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Cancel_16x16; this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.UseVisualStyleBackColor = true; // @@ -197,8 +197,8 @@ private void InitializeComponent() // resources.ApplyResources(this.recordingSchedule, "recordingSchedule"); this.recordingSchedule.Name = "recordingSchedule"; - this.recordingSchedule.ScheduleKindChanged += new System.EventHandler(this.recordingSchedule_ScheduleKindChanged); - this.recordingSchedule.DateTimeChanged += new System.EventHandler(this.recordingSchedule_DateTimeChanged); + this.recordingSchedule.ScheduleKindChanged += new System.EventHandler(this.recordingSchedule_ScheduleKindChanged); + this.recordingSchedule.DateTimeChanged += new System.EventHandler(this.recordingSchedule_DateTimeChanged); // // tabPageLength // @@ -534,7 +534,7 @@ private void InitializeComponent() #endregion - private Project.IpTv.UiServices.Common.Controls.PictureBoxEx pictureChannelLogo; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureChannelLogo; private System.Windows.Forms.Label labelChannelName; private System.Windows.Forms.Label labelChannelDescription; private System.Windows.Forms.Button buttonOk; @@ -544,12 +544,12 @@ private void InitializeComponent() private System.Windows.Forms.Label labelStartMarginSufix; private System.Windows.Forms.NumericUpDown numericStartMargin; private System.Windows.Forms.CheckBox checkBoxStartMargin; - private Project.IpTv.UiServices.Record.Controls.RecordingSchedule recordingSchedule; + private IpTviewr.UiServices.Record.Controls.RecordingSchedule recordingSchedule; private System.Windows.Forms.TabPage tabPageLength; private System.Windows.Forms.Label labelEndMarginSufix; private System.Windows.Forms.NumericUpDown numericEndMargin; private System.Windows.Forms.CheckBox checkBoxEndMargin; - private Project.IpTv.UiServices.Record.Controls.RecordingDuration recordingTime; + private IpTviewr.UiServices.Record.Controls.RecordingDuration recordingTime; private System.Windows.Forms.Label labelChannelNumber; private System.Windows.Forms.TabPage tabPageDescription; private System.Windows.Forms.TabPage tabPageAdvanced; @@ -557,15 +557,15 @@ private void InitializeComponent() private System.Windows.Forms.TextBox textTaskDescription; private System.Windows.Forms.Label labelTaskDescription; private System.Windows.Forms.CheckBox checkAddTaskPrefix; - private Project.IpTv.UiServices.Common.Controls.FilenameTextBox textTaskName; + private IpTviewr.UiServices.Common.Controls.FilenameTextBox textTaskName; private System.Windows.Forms.Label labelTaskName; private System.Windows.Forms.TabPage tabPageSave; private System.Windows.Forms.Label labelFilename; private System.Windows.Forms.Label labelSaveLocation; private System.Windows.Forms.ComboBox comboFileExtension; - private Project.IpTv.UiServices.Common.Controls.FilenameTextBox textFilename; + private IpTviewr.UiServices.Common.Controls.FilenameTextBox textFilename; private System.Windows.Forms.Button buttonSelectFolder; - private Project.IpTv.UiServices.Common.Controls.ListViewSortable listViewLocations; + private IpTviewr.UiServices.Common.Controls.ListViewSortable listViewLocations; private System.Windows.Forms.ComboBox comboSchedulerFolder; private System.Windows.Forms.Label labelSchedulerFolder; private System.Windows.Forms.ComboBox comboSchedulerAlreadyRunning; @@ -578,8 +578,8 @@ private void InitializeComponent() private System.Windows.Forms.ImageList imageListLocations; private System.Windows.Forms.DateTimePicker dateTimeExpiryDate; private System.Windows.Forms.CheckBox checkBoxExpiryDate; - private Project.IpTv.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerRetry; - private Project.IpTv.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerDeleteTaskAfter; - private Project.IpTv.UiServices.Common.Controls.SelectFolderDialog selectFolder; + private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerRetry; + private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerDeleteTaskAfter; + private IpTviewr.UiServices.Common.Controls.SelectFolderDialog selectFolder; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index d71e4572..ab538d4f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -1,13 +1,13 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Services.Record.Serialization; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Configuration.Schema2014.Config; -using Project.IpTv.UiServices.Record.Controls; +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Record.Controls; using System; using System.Collections.Generic; using System.ComponentModel; @@ -15,7 +15,7 @@ using System.Linq; using System.Windows.Forms; -namespace Project.IpTv.UiServices.Record +namespace IpTviewr.UiServices.Record { public partial class RecordChannelDialog : CommonBaseForm { diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx index 6f3bc15d..2ada54f7 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx @@ -427,7 +427,7 @@ recordingSchedule - Project.IpTv.UiServices.Record.Controls.RecordingSchedule, UiServices.Record, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingSchedule, UiServices.Record, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageSchedule @@ -475,7 +475,7 @@ recordingTime - Project.IpTv.UiServices.Record.Controls.RecordingDuration, UiServices.Record, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingDuration, UiServices.Record, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageLength @@ -760,7 +760,7 @@ textTaskName - Project.IpTv.UiServices.Controls.FilenameTextBox, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.FilenameTextBox, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageDescription @@ -866,7 +866,7 @@ listViewLocations - Project.IpTv.UiServices.Controls.ListViewSortable, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.ListViewSortable, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageSave @@ -962,7 +962,7 @@ textFilename - Project.IpTv.UiServices.Controls.FilenameTextBox, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.FilenameTextBox, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageSave @@ -1067,7 +1067,7 @@ timeSpanSchedulerDeleteTaskAfter - Project.IpTv.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageAdvanced @@ -1088,7 +1088,7 @@ timeSpanSchedulerRetry - Project.IpTv.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null tabPageAdvanced @@ -1451,7 +1451,7 @@ pictureChannelLogo - Project.IpTv.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null $this @@ -1499,12 +1499,12 @@ selectFolder - Project.IpTv.UiServices.Controls.SelectFolderDialog, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.SelectFolderDialog, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null RecordChannelDialog - Project.IpTv.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs index 30e84ba8..f9e51230 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs @@ -1,7 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.Record +namespace IpTviewr.UiServices.Record { partial class RecordTasksDialog { @@ -33,7 +33,7 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordTasksDialog)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.listViewTasks = new Project.IpTv.UiServices.Common.Controls.ListViewSortable(); + this.listViewTasks = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.columnTaskChannel = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnTaskName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnTaskSchedule = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -114,7 +114,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.Record.Properties.Resources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // @@ -122,7 +122,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonViewRecordings, "buttonViewRecordings"); this.buttonViewRecordings.CausesValidation = false; - this.buttonViewRecordings.Image = global::Project.IpTv.UiServices.Record.Properties.Resources.Action_Play_LG_16x16; + this.buttonViewRecordings.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Play_LG_16x16; this.buttonViewRecordings.Name = "buttonViewRecordings"; this.buttonViewRecordings.UseVisualStyleBackColor = true; this.buttonViewRecordings.Click += new System.EventHandler(this.buttonViewRecordings_Click); @@ -131,7 +131,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonDeleteTasks, "buttonDeleteTasks"); this.buttonDeleteTasks.CausesValidation = false; - this.buttonDeleteTasks.Image = global::Project.IpTv.UiServices.Record.Properties.Resources.Action_Delete_16x16; + this.buttonDeleteTasks.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Delete_16x16; this.buttonDeleteTasks.Name = "buttonDeleteTasks"; this.buttonDeleteTasks.UseVisualStyleBackColor = true; this.buttonDeleteTasks.Click += new System.EventHandler(this.buttonDeleteTasks_Click); @@ -139,7 +139,7 @@ private void InitializeComponent() // buttonEditTask // resources.ApplyResources(this.buttonEditTask, "buttonEditTask"); - this.buttonEditTask.Image = global::Project.IpTv.UiServices.Record.Properties.Resources.Action_EditTask_16x16; + this.buttonEditTask.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_EditTask_16x16; this.buttonEditTask.Name = "buttonEditTask"; this.buttonEditTask.UseVisualStyleBackColor = true; this.buttonEditTask.Click += new System.EventHandler(this.buttonEditTask_Click); @@ -170,7 +170,7 @@ private void InitializeComponent() #endregion private System.Windows.Forms.SplitContainer splitContainer1; - private global::Project.IpTv.UiServices.Common.Controls.ListViewSortable listViewTasks; + private global::IpTviewr.UiServices.Common.Controls.ListViewSortable listViewTasks; private System.Windows.Forms.ColumnHeader columnTaskName; private System.Windows.Forms.ColumnHeader columnTaskChannel; private System.Windows.Forms.TextBox textBoxTaskDetails; diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs index 863a75d5..875afee4 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs @@ -10,13 +10,13 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.Record; -using Project.IpTv.Services.Record.Serialization; -using Project.IpTv.UiServices.Record.Properties; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.Common.Telemetry; +using IpTviewr.Services.Record; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Record.Properties; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.Common.Telemetry; -namespace Project.IpTv.UiServices.Record +namespace IpTviewr.UiServices.Record { public partial class RecordTasksDialog : CommonBaseForm { @@ -210,17 +210,17 @@ private void HandleListViewTasksSelectedIndexChanged() private void buttonEditTask_Click_Implementation(object sender, EventArgs e) { - Project.IpTv.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonEditTask"); + IpTviewr.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonEditTask"); } // buttonEditTask_Click_Implementation private void buttonDeleteTasks_Click_Implementation(object sender, EventArgs e) { - Project.IpTv.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonDeleteTasks"); + IpTviewr.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonDeleteTasks"); } // buttonDeleteTasks_Click_Implementation private void buttonViewRecordings_Click_Implementation(object sender, EventArgs e) { - Project.IpTv.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonViewRecordings"); + IpTviewr.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonViewRecordings"); } // buttonViewRecordings_Click_Implementation #endregion diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.resx b/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.resx index 3d0b193f..f5538237 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.resx @@ -236,7 +236,7 @@ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Project.IpTv.UiServices.Controls.ListViewSortable, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.ListViewSortable, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null @@ -360,7 +360,7 @@ System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Project.IpTv.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 diff --git a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj index abfdf8ad..9cc5a9f5 100644 --- a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj +++ b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj @@ -7,7 +7,7 @@ {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743} Library Properties - Project.IpTv.UiServices.Record + IpTviewr.UiServices.Record UiServices.Record v3.5 512 From 5336e771d35c136412af3e79e1bad93574a112bd Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Fri, 26 Aug 2016 01:18:16 +0200 Subject: [PATCH 03/76] Targetting .Net 4.5.2 --- .../ChannelList/ChannelList.csproj | 6 +- 1.5 'Kruger 60'/ChannelList/app.config | 14 +- .../Core.IpTvProvider.csproj | 6 +- .../DvbStpClient/DvbStpClient.csproj | 7 +- .../Etsi.Ts102034/Etsi.Ts102034.csproj | 335 +++++++++--------- .../FirstTimeConfig/FirstTimeConfig.csproj | 8 +- .../Properties/Settings.Designer.cs | 4 +- 1.5 'Kruger 60'/FirstTimeConfig/app.config | 3 + .../InternalTools/ChannelLogos/App.config | 2 +- .../ChannelLogos/ChannelLogos.csproj | 4 +- .../ConsoleExperiments.csproj | 178 +++++----- .../ConsoleExperiments/app.config | 3 + .../EpgDownloader/EpgDownloader.csproj | 206 +++++------ .../Properties/Resources.Designer.cs | 4 +- .../Properties/Settings.Designer.cs | 4 +- .../InternalTools/EpgDownloader/app.config | 3 + .../InternalTools/GuiTools/GuiTools.csproj | 294 +++++++-------- .../InternalTools/GuiTools/app.config | 3 + .../IpTv.MovistarPlus.csproj | 6 +- .../IpTvRecorderLauncher.csproj | 8 +- .../Properties/Resources.Designer.cs | 2 +- .../Properties/SerializationTexts.Designer.cs | 2 +- .../Properties/Texts.Designer.cs | 2 +- .../IpTvRecorderLauncher/app.config | 3 + 1.5 'Kruger 60'/Logos/Logos.csproj | 7 +- .../Project.Common/Project.Common.csproj | 7 +- .../Properties/FormatStringTexts.Designer.cs | 2 +- .../Properties/Resources.Designer.cs | 2 +- .../Project.Native/Project.Native.csproj | 6 +- .../Properties/Texts.Designer.cs | 2 +- .../Services.Record.Serialization.csproj | 7 +- .../Properties/Resources.Designer.cs | 2 +- .../Properties/Texts.Designer.cs | 2 +- .../Services.Record/Services.Record.csproj | 7 +- .../Services.SqlServerCE.csproj | 7 +- 1.5 'Kruger 60'/Setup/MainSetup/Product.wxs | 8 +- .../Setup/MainSetup/texts_en-US.wxl | 2 +- .../Setup/MainSetup/texts_es-ES.wxl | 2 +- .../UiServices.Common.csproj | 7 +- .../UiServices.Config.csproj | 7 +- .../UiServices.Discovery.csproj | 7 +- .../UiServices.DvbStpClient.csproj | 4 +- .../Properties/MulticastScanner.Designer.cs | 2 +- .../UiServices.Forms/UiServices.Forms.csproj | 7 +- .../Properties/ControlTexts.Designer.cs | 2 +- .../Properties/RecordChannel.Designer.cs | 2 +- .../Properties/TasksTexts.Designer.cs | 2 +- .../UiServices.Record.csproj | 7 +- 48 files changed, 648 insertions(+), 569 deletions(-) create mode 100644 1.5 'Kruger 60'/FirstTimeConfig/app.config create mode 100644 1.5 'Kruger 60'/InternalTools/ConsoleExperiments/app.config create mode 100644 1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config create mode 100644 1.5 'Kruger 60'/InternalTools/GuiTools/app.config create mode 100644 1.5 'Kruger 60'/IpTvRecorderLauncher/app.config diff --git a/1.5 'Kruger 60'/ChannelList/ChannelList.csproj b/1.5 'Kruger 60'/ChannelList/ChannelList.csproj index 8be65b5d..1e7bef6a 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelList.csproj +++ b/1.5 'Kruger 60'/ChannelList/ChannelList.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties IpTviewr.ChannelList ChannelList - v3.5 + v4.5.2 512 @@ -44,6 +44,7 @@ 4 + false AnyCPU @@ -53,6 +54,7 @@ TRACE prompt 4 + false Resources\IPTV.ico diff --git a/1.5 'Kruger 60'/ChannelList/app.config b/1.5 'Kruger 60'/ChannelList/app.config index a1c395b5..3d5dc143 100644 --- a/1.5 'Kruger 60'/ChannelList/app.config +++ b/1.5 'Kruger 60'/ChannelList/app.config @@ -1,21 +1,21 @@ - + - -
+ +
- + - + - + - \ No newline at end of file + diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj index 5031c2f8..e153ef51 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties IpTviewr.Core.IpTvProvider Core.IpTvProvider - v3.5 + v4.5.2 512 SAK SAK @@ -25,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -33,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj b/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj index f249e297..1394f7ce 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.DvbStp.Client DvbStpClient - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj b/1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj index 06b4fb89..3874a2f3 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj +++ b/1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj @@ -1,167 +1,170 @@ - - - - - Debug - AnyCPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40} - Library - Properties - Etsi.Ts102034 - Etsi.Ts102034 - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - Designer - - - Designer - - - Designer - - - - - + + + + + Debug + AnyCPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40} + Library + Properties + Etsi.Ts102034 + Etsi.Ts102034 + v4.5.2 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + Designer + + + Designer + + + Designer + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj index 4b1453d9..9d44ccac 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.Tools.FirstTimeConfig FirstTimeConfig - v3.5 + v4.5.2 512 SAK SAK SAK SAK + x86 @@ -25,6 +26,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -34,6 +36,7 @@ TRACE prompt 4 + false Resources\first-time-config.ico @@ -141,6 +144,7 @@ Resources\GoogleTelemetry_es.rtf + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs index c36071d9..46efd369 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ namespace IpTviewr.Tools.FirstTimeConfig.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/1.5 'Kruger 60'/FirstTimeConfig/app.config b/1.5 'Kruger 60'/FirstTimeConfig/app.config new file mode 100644 index 00000000..ff995010 --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/app.config @@ -0,0 +1,3 @@ + + + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config b/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config index 343984d0..8d9f9536 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config @@ -2,5 +2,5 @@ - + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj index 91717c15..f54d215a 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.Internal.Tools.ChannelLogos ChannelLogos - v3.5 + v4.5.2 512 true @@ -24,6 +24,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -33,6 +34,7 @@ TRACE prompt 4 + false Resources\IPTViewr_Tool.ico diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj index fef70f35..511f809b 100644 --- a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj @@ -1,87 +1,93 @@ - - - - - Debug - AnyCPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B} - Exe - Properties - Project.DvbIpTv.Internal.Tools.ConsoleExperiments - ConsoleExperiments - v3.5 - 512 - SAK - SAK - SAK - SAK - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\..\Third-party\Json70r1\Bin\Net35\Newtonsoft.Json.dll - - - - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - {e1748f45-dd50-4479-96f6-f7eba6f3e28b} - IpTv.MovistarPlus - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - - - - - - - + + + + + Debug + AnyCPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B} + Exe + Properties + Project.DvbIpTv.Internal.Tools.ConsoleExperiments + ConsoleExperiments + v4.5.2 + 512 + SAK + SAK + SAK + SAK + + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + False + ..\..\Third-party\Json70r1\Bin\Net35\Newtonsoft.Json.dll + + + + + False + ..\..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + {e1748f45-dd50-4479-96f6-f7eba6f3e28b} + IpTv.MovistarPlus + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + Project.Common + + + {3a053f34-4edf-4071-b966-923255a0ae14} + Services.SqlServerCE + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/app.config b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/app.config new file mode 100644 index 00000000..ff995010 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/app.config @@ -0,0 +1,3 @@ + + + diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj index 26953e76..d3d12b9e 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj @@ -1,102 +1,106 @@ - - - - - Debug - AnyCPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25} - WinExe - Properties - Project.DvbIpTv.Services.EPG.EpgDownloader - EpgDownloader - v3.5 - 512 - SAK - SAK - SAK - SAK - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - Resources\EpgDownload.ico - - - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - Form - - - EpgDownloadForm.cs - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - + + + + + Debug + AnyCPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25} + WinExe + Properties + Project.DvbIpTv.Services.EPG.EpgDownloader + EpgDownloader + v4.5.2 + 512 + SAK + SAK + SAK + SAK + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + Resources\EpgDownload.ico + + + + False + ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + Form + + + EpgDownloadForm.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs index 2cead694..598379b1 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace IpTviewr.Services.EPG.EpgDownloader.Properties { +namespace Project.DvbIpTv.Services.EPG.EpgDownloader.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.EPG.EpgDownloader.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.DvbIpTv.Services.EPG.EpgDownloader.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs index 0560f57e..cc947eb8 100644 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs @@ -8,11 +8,11 @@ // //------------------------------------------------------------------------------ -namespace IpTviewr.Services.EPG.EpgDownloader.Properties { +namespace Project.DvbIpTv.Services.EPG.EpgDownloader.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config b/1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config new file mode 100644 index 00000000..ff995010 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config @@ -0,0 +1,3 @@ + + + diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj index 5bec1c94..138ba543 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj @@ -1,148 +1,148 @@ - - - - - Debug - AnyCPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC} - WinExe - Properties - Project.DvbIpTv.Internal.Tools.GuiTools - GuiTools - v3.5 - 512 - SAK - SAK - SAK - SAK - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - Resources\GuiTools.ico - - - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - Form - - - OpchExplorerForm.cs - - - Form - - - LaunchForm.cs - - - Form - - - MulticastStreamExplorerForm.cs - - - - - - Form - - - SimpleDvbStpDownloadForm.cs - - - OpchExplorerForm.cs - - - LaunchForm.cs - - - MulticastStreamExplorerForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - SimpleDvbStpDownloadForm.cs - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - {ba481e42-f570-4d2c-94d4-21c4cce27762} - UiServices.DvbStpClient - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC} + WinExe + Properties + Project.DvbIpTv.Internal.Tools.GuiTools + GuiTools + v3.5 + 512 + SAK + SAK + SAK + SAK + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Resources\GuiTools.ico + + + + False + ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + Form + + + OpchExplorerForm.cs + + + Form + + + LaunchForm.cs + + + Form + + + MulticastStreamExplorerForm.cs + + + + + + Form + + + SimpleDvbStpDownloadForm.cs + + + OpchExplorerForm.cs + + + LaunchForm.cs + + + MulticastStreamExplorerForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SimpleDvbStpDownloadForm.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {ba481e42-f570-4d2c-94d4-21c4cce27762} + UiServices.DvbStpClient + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/app.config b/1.5 'Kruger 60'/InternalTools/GuiTools/app.config new file mode 100644 index 00000000..ff995010 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/app.config @@ -0,0 +1,3 @@ + + + diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj index 326ba171..0e5740f0 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj +++ b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties IpTviewr.MovistarPlus IpTv.MovistarPlus - v3.5 + v4.5.2 512 SAK SAK @@ -25,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -33,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj b/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj index 0dba536e..b5099d7f 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.RecorderLauncher IpTvRecorderLauncher - v3.5 + v4.5.2 512 SAK SAK SAK SAK + AnyCPU @@ -25,6 +26,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -34,6 +36,7 @@ TRACE prompt 4 + false Resources\recorder.ico @@ -97,6 +100,7 @@ + diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs index afce6087..81dc80e7b 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs index 1d69179b..25431038 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs index ac9d78c9..890fb32e 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config b/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config new file mode 100644 index 00000000..ff995010 --- /dev/null +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config @@ -0,0 +1,3 @@ + + + diff --git a/1.5 'Kruger 60'/Logos/Logos.csproj b/1.5 'Kruger 60'/Logos/Logos.csproj index 8be8bc5c..ced610e2 100644 --- a/1.5 'Kruger 60'/Logos/Logos.csproj +++ b/1.5 'Kruger 60'/Logos/Logos.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties Logos Logos - v3.5 + v4.5.2 512 SAK SAK SAK SAK + AnyCPU @@ -25,6 +26,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -34,6 +36,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj index 6e500f3c..f8485b6a 100644 --- a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj +++ b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.Common Project.Common - v3.5 + v4.5.2 512 SAK SAK SAK SAK + AnyCPU @@ -25,6 +26,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -34,6 +36,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs index 424b78da..7bc60ff1 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs +++ b/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs index 16685d62..83f8d364 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/Project.Native/Project.Native.csproj b/1.5 'Kruger 60'/Project.Native/Project.Native.csproj index b8bdc133..c12ebb45 100644 --- a/1.5 'Kruger 60'/Project.Native/Project.Native.csproj +++ b/1.5 'Kruger 60'/Project.Native/Project.Native.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties IpTviewr.Native Project.Native - v3.5 + v4.5.2 512 SAK SAK @@ -25,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -33,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs index 7b96219b..2c9825fa 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj index 091541d6..60da51cf 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.Services.Record.Serialization Services.Record.Serialization - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs index 4e192405..81af78b4 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs index f7f46b09..f3f50122 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/Services.Record/Services.Record.csproj b/1.5 'Kruger 60'/Services.Record/Services.Record.csproj index 758db769..584d11db 100644 --- a/1.5 'Kruger 60'/Services.Record/Services.Record.csproj +++ b/1.5 'Kruger 60'/Services.Record/Services.Record.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.Services.Record Services.Record - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj b/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj index 4f845c01..2c174022 100644 --- a/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj +++ b/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.Services.SqlServerCE Services.SqlServerCE - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs index cdd0a435..d8ffc2c3 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs +++ b/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs @@ -6,14 +6,14 @@ All rights reserved, except those granted by the governing license of this softw - - - + + - + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl b/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl index 5c56e41a..7ee97688 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl +++ b/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl @@ -7,7 +7,7 @@ All rights reserved, except those granted by the governing license of this softw 1033 ENU A new version of [ProductName] is already installed. - This application requires .NET Framework 3.5 SP1. Please install the .NET Framework then run this installer again. You can find help at http://movistartv.codeplex.com/documentation + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again IPTViewr for movistar+ 1.5 “Kruger 60” Beta 1 IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Beta 1 Launch “First-time Configuration Wizard” diff --git a/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl b/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl index 1fce4b62..d24a434e 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl +++ b/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl @@ -7,7 +7,7 @@ All rights reserved, except those granted by the governing license of this softw 3082 ESN Ya está instalada una nueva versión de [ProductName]. - Esta aplicación requiere .NET Framework 3.5 SP1. Por favor, instale el .NET Framework y ejecute el instalador de nuevo. Puede encontrar ayuda al respecto en http://movistartv.codeplex.com/documentation. + Esta aplicación requiere .NET Framework 4.5.2 o superior. Por favor, instale el .NET Framework y ejecute el instalador de nuevo. IPTViewr para movistar+ 1.5 “Kruger 60” beta 1 Decodificador virtual IPTV para movistar+ 1.5 “Kruger 60” beta 1 Ejecutar “Asistente de configuración inicial” diff --git a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj index 0c967e43..bd993f9c 100644 --- a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj +++ b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.UiServices.Common UiServices.Common - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj b/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj index 4e5efcb0..965df98c 100644 --- a/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj +++ b/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.UiServices.Configuration UiServices.Configuration - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj b/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj index 324413f1..c1c976ee 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.UiServices.Discovery UiServices.Discovery - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj index 08fa0712..5db7e88a 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.DvbStpClient UiServices.DvbStpClient - v3.5 + v4.5.2 512 SAK SAK diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs index 35371023..1aa35383 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj b/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj index e73c3b60..6cf9de5c 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj +++ b/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.UiServices.Forms UiServices.Forms - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs index 63eb1b3e..5677c852 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs index 67b70480..3752aed8 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs index 7d987d28..4dd4566e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj index 9cc5a9f5..f194879a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj +++ b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj @@ -1,5 +1,5 @@  - + Debug @@ -9,12 +9,13 @@ Properties IpTviewr.UiServices.Record UiServices.Record - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false From 135da56fabff1235c190acf367fdaabef1bd0c48 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Fri, 26 Aug 2016 01:19:22 +0200 Subject: [PATCH 04/76] Root namespace change --- 1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj | 10 +++++++--- .../GuiTools/Properties/Settings.Designer.cs | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj index 138ba543..b8396973 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj @@ -1,5 +1,5 @@  - + Debug @@ -7,14 +7,15 @@ {9D077B2F-1E74-4031-B28D-3F6F97829BEC} WinExe Properties - Project.DvbIpTv.Internal.Tools.GuiTools + IpTviewr.Internal.Tools.GuiTools GuiTools - v3.5 + v4.5.2 512 SAK SAK SAK SAK + x86 @@ -25,6 +26,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -34,6 +36,7 @@ TRACE prompt 4 + false Resources\GuiTools.ico @@ -106,6 +109,7 @@ SimpleDvbStpDownloadForm.cs + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs index 2cb35d8e..19c2a46e 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace IpTviewr.Internal.Tools.GuiTools.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); From 3ed2d554a91efcad0a64c7a6935d85787876b186 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 27 Aug 2016 16:04:00 +0200 Subject: [PATCH 05/76] Internal tool enhancements: GuiTools Added DbvStpStreamExplorerForm Added list of datagrams and status bar to MulticastStreamExplorerForm Added status bar to OpchExplorerForm Bug correction in DvbStpExplorer: incorrect run received bytes Bug correction in DvbStpClient::VersionStorage: discard data after segment is complete Event args classes for DvbStpClient::DvbStpExplorer are now 'hosted' in the class and have been renamed --- .../DvbStpClient/DvbStpExplorer.cs | 24 +- .../DvbStpClient/DvbStpExplorerEventArgs.cs | 153 +++--- 1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs | 5 + .../DvbStpClient/VersionStorage.cs | 6 +- .../DvbStpStreamExplorerForm .Designer.cs | 440 ++++++++++++++++++ .../GuiTools/DvbStpStreamExplorerForm .cs | 333 +++++++++++++ .../GuiTools/DvbStpStreamExplorerForm .resx | 129 +++++ .../InternalTools/GuiTools/GuiTools.csproj | 17 + .../GuiTools/LaunchForm.Designer.cs | 44 +- .../InternalTools/GuiTools/LaunchForm.cs | 1 + .../InternalTools/GuiTools/LaunchForm.resx | 238 +++++----- .../MulticastStreamExplorerForm.Designer.cs | 162 ++++--- .../GuiTools/MulticastStreamExplorerForm.cs | 63 ++- .../GuiTools/MulticastStreamExplorerForm.resx | 247 +++++----- .../GuiTools/OpchExplorerForm.Designer.cs | 163 +++---- .../GuiTools/OpchExplorerForm.cs | 46 +- .../GuiTools/OpchExplorerForm.resx | 277 +++++------ .../GuiTools/Properties/Resources.Designer.cs | 9 + .../GuiTools/Properties/Resources.resx | 274 +++++------ .../SimpleDvbStpDownloadForm.Designer.cs | 37 +- .../GuiTools/SimpleDvbStpDownloadForm.cs | 52 ++- .../GuiTools/SimpleDvbStpDownloadForm.resx | 271 ++++++----- .../UiDvbStpBaseDownloadRequest.cs | 3 +- 23 files changed, 2068 insertions(+), 926 deletions(-) create mode 100644 1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs create mode 100644 1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs create mode 100644 1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .resx diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs index ec86a61d..75138555 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs @@ -11,13 +11,14 @@ namespace IpTviewr.DvbStp.Client { public partial class DvbStpExplorer : DvbStpBaseClient { - public event EventHandler SectionReceived; - public event EventHandler UnexpectedHeaderVersionReceived; - public event EventHandler RunEnded; + public event EventHandler SectionReceived; + public event EventHandler UnexpectedHeaderVersionReceived; + public event EventHandler RunEnded; private short StartSectionNumber; private int ReceivedPayloadBytes; private DvbStpHeader LastHeader; + private IList ReceivedHeaders; protected bool EndLoop { @@ -42,7 +43,6 @@ public void ExploreMulticastStream() StartSectionNumber = -1; while (!(CancelRequested || EndLoop)) { - if (Header != null) LastHeader = Header.Clone(); Receive(true); if (StartSectionNumber == -1) @@ -61,8 +61,6 @@ public void ExploreMulticastStream() OnSectionReceived(); } // if-else - ReceivedPayloadBytes += Header.PayloadSize; - if ((Header.PayloadId != LastHeader.PayloadId) || (Header.SegmentId != LastHeader.SegmentId) || (Header.SegmentVersion != LastHeader.SegmentVersion) || @@ -71,6 +69,10 @@ public void ExploreMulticastStream() OnRunEnded(); InitRun(); } // if + + ReceivedPayloadBytes += Header.PayloadSize; + ReceivedHeaders.Add(Header.Clone()); + LastHeader = Header.Clone(); } // while if (!CancelRequested) @@ -93,14 +95,16 @@ protected override void ProcessReceivedData() private void InitRun() { StartSectionNumber = Header.SectionNumber; + ReceivedHeaders = new List(Header.LastSectionNumber + 1); ReceivedPayloadBytes = 0; } // InitRun private void OnSectionReceived() { - if (SectionReceived == null) return; + var sectionReceived = SectionReceived; + if (sectionReceived == null) return; - var args = new DvbStpExplorerSectionReceivedEventArgs(); + var args = new SectionReceivedEventArgs(); args.Header = Header.Clone(); args.BytesReceived = ReceivedBytes; @@ -124,7 +128,7 @@ private void OnUnexpectedHeaderVersionReceived() { if (UnexpectedHeaderVersionReceived == null) return; - var args = new DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs(); + var args = new UnexpectedHeaderVersionReceivedEventArgs(); args.HeaderVersion = Header.Version; args.DatagramData = new byte[ReceivedBytes]; @@ -142,7 +146,7 @@ private void OnRunEnded() { if (RunEnded == null) return; - var args = new DvbStpExplorerRunEndedEventArgs() + var args = new RunEndedEventArgs() { PayloadId = LastHeader.PayloadId, ReceivedPayloadBytes = ReceivedPayloadBytes, diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs index 22d1fc32..fcdf44d8 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs @@ -9,96 +9,99 @@ namespace IpTviewr.DvbStp.Client { - public class DvbStpExplorerSectionReceivedEventArgs : CancelEventArgs + public partial class DvbStpExplorer { - public DvbStpHeader Header + public class SectionReceivedEventArgs : CancelEventArgs { - get; - internal set; - } // Header + public DvbStpHeader Header + { + get; + internal set; + } // Header - public int BytesReceived - { - get; - internal set; - } // BytesReceived + public int BytesReceived + { + get; + internal set; + } // BytesReceived - public byte[] PrivateHeader - { - get; - internal set; - } // PrivateHeader + public byte[] PrivateHeader + { + get; + internal set; + } // PrivateHeader - public byte[] Payload - { - get; - internal set; - } // Payload - } // class DvbStpExplorerSectionReceivedEventArgs + public byte[] Payload + { + get; + internal set; + } // Payload + } // class SectionReceivedEventArgs - public class DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs : CancelEventArgs - { - public byte HeaderVersion + public class UnexpectedHeaderVersionReceivedEventArgs : CancelEventArgs { - get; - internal set; - } // headerVersion + public byte HeaderVersion + { + get; + internal set; + } // headerVersion - public byte[] DatagramData - { - get; - internal set; - } // DatagramData - } // class DvbStpExplorerUnexpectedHeaderVersionReceivedEventArgs + public byte[] DatagramData + { + get; + internal set; + } // DatagramData + } // class UnexpectedHeaderVersionReceivedEventArgs - public class DvbStpExplorerRunEndedEventArgs : CancelEventArgs - { - public byte PayloadId + public class RunEndedEventArgs : CancelEventArgs { - get; - internal set; - } // PayloadId + public byte PayloadId + { + get; + internal set; + } // PayloadId - public short SegmentId - { - get; - internal set; - } // SegmentId + public short SegmentId + { + get; + internal set; + } // SegmentId - public byte SegmentVersion - { - get; - internal set; - } // SegmentVersion + public byte SegmentVersion + { + get; + internal set; + } // SegmentVersion - public short LastSectionNumber - { - get; - internal set; - } // LastSectionNumber + public short LastSectionNumber + { + get; + internal set; + } // LastSectionNumber - public short StartSectionNumber - { - get; - internal set; - } // StartSectionNumber + public short StartSectionNumber + { + get; + internal set; + } // StartSectionNumber - public short EndSectionNumber - { - get; - internal set; - } // EndSectionNumber + public short EndSectionNumber + { + get; + internal set; + } // EndSectionNumber - public int TotalSegmentSize - { - get; - internal set; - } // TotalSegmentSize + public int TotalSegmentSize + { + get; + internal set; + } // TotalSegmentSize - public int ReceivedPayloadBytes - { - get; - internal set; - } // ReceivedPayloadBytes - } // class DvbStpExplorerRunEndedEventArgs + public int ReceivedPayloadBytes + { + get; + internal set; + } // ReceivedPayloadBytes + } // class RunEndedEventArgs + } // partial class DvbStpExplorer } // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs index 20f07742..2847c864 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs +++ b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs @@ -47,5 +47,10 @@ public DvbStpHeader Clone() { return MemberwiseClone() as DvbStpHeader; } // Clone + + public override string ToString() + { + return string.Format("p{0:X2}s{1:X4}v{2:X2}-{3}", PayloadId, SegmentId, SegmentVersion, SectionNumber); + } // ToString } // class DvbStpHeader } // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs b/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs index b90cd994..d5bf5d3d 100644 --- a/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs +++ b/1.5 'Kruger 60'/DvbStpClient/VersionStorage.cs @@ -82,6 +82,9 @@ public bool AddSection(DvbStpHeader header, byte[] data, bool isRawData) if (assembler.IsSegmentComplete) { OnSegmentReceived(assembler); + // discard data + assembler = null; + Versions.Remove(header.SegmentVersion); } // if } // if @@ -117,9 +120,6 @@ private void OnSegmentReceived(SegmentAssembler assembler) var args = new PayloadStorage.SegmentPayloadReceivedEventArgs(assembler); SegmentPayloadReceived(this, args); } // if - - // discard data - assembler.Reset(); } // OnSegmentReceived } // VersionStorage } // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs new file mode 100644 index 00000000..10c58ccd --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs @@ -0,0 +1,440 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class DvbStpStreamExplorerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ColumnHeader columnHeaderSegmentIdentity; + System.Windows.Forms.ColumnHeader columnHeaderRunIdentity; + this.buttonStart = new System.Windows.Forms.Button(); + this.buttonStop = new System.Windows.Forms.Button(); + this.textPort = new System.Windows.Forms.TextBox(); + this.labelPort = new System.Windows.Forms.Label(); + this.textIpAddress = new System.Windows.Forms.TextBox(); + this.labelIpAddress = new System.Windows.Forms.Label(); + this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); + this.labelBaseDumpFolder = new System.Windows.Forms.Label(); + this.checkDumpSections = new System.Windows.Forms.CheckBox(); + this.listViewSections = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); + this.columnHeaderDatagramSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHasCRC = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderSectionNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderLastSectionNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderSegmentSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStripMain = new System.Windows.Forms.StatusStrip(); + this.statusLabelReceiving = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelDataReception = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelDatagramCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelByteCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.splitSectionsRuns = new System.Windows.Forms.SplitContainer(); + this.listViewRuns = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); + this.columnHeaderRunStart = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderRunEnd = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderRunLast = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderRunReceived = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderRunSegmentSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderRunTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.checkDumpSegments = new System.Windows.Forms.CheckBox(); + columnHeaderSegmentIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderRunIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStripMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitSectionsRuns)).BeginInit(); + this.splitSectionsRuns.Panel1.SuspendLayout(); + this.splitSectionsRuns.Panel2.SuspendLayout(); + this.splitSectionsRuns.SuspendLayout(); + this.SuspendLayout(); + // + // columnHeaderSegmentIdentity + // + columnHeaderSegmentIdentity.Text = "Segment id"; + columnHeaderSegmentIdentity.Width = 90; + // + // columnHeaderRunIdentity + // + columnHeaderRunIdentity.Text = "Run segment"; + columnHeaderRunIdentity.Width = 100; + // + // buttonStart + // + this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStart.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Play_LG_16x16; + this.buttonStart.Location = new System.Drawing.Point(466, 12); + this.buttonStart.Name = "buttonStart"; + this.buttonStart.Size = new System.Drawing.Size(100, 25); + this.buttonStart.TabIndex = 0; + this.buttonStart.Text = "Start"; + this.buttonStart.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStart.UseVisualStyleBackColor = true; + this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); + // + // buttonStop + // + this.buttonStop.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStop.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Cancel_Red_16x16; + this.buttonStop.Location = new System.Drawing.Point(572, 12); + this.buttonStop.Name = "buttonStop"; + this.buttonStop.Size = new System.Drawing.Size(100, 25); + this.buttonStop.TabIndex = 1; + this.buttonStop.Text = "Stop"; + this.buttonStop.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStop.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStop.UseVisualStyleBackColor = true; + this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); + // + // textPort + // + this.textPort.Location = new System.Drawing.Point(213, 15); + this.textPort.Name = "textPort"; + this.textPort.Size = new System.Drawing.Size(50, 20); + this.textPort.TabIndex = 10; + this.textPort.Text = "3937"; + // + // labelPort + // + this.labelPort.AutoSize = true; + this.labelPort.Location = new System.Drawing.Point(181, 18); + this.labelPort.Name = "labelPort"; + this.labelPort.Size = new System.Drawing.Size(26, 13); + this.labelPort.TabIndex = 9; + this.labelPort.Text = "Port"; + // + // textIpAddress + // + this.textIpAddress.Location = new System.Drawing.Point(75, 15); + this.textIpAddress.Name = "textIpAddress"; + this.textIpAddress.Size = new System.Drawing.Size(100, 20); + this.textIpAddress.TabIndex = 8; + this.textIpAddress.Text = "239.0.2.129"; + // + // labelIpAddress + // + this.labelIpAddress.AutoSize = true; + this.labelIpAddress.Location = new System.Drawing.Point(12, 18); + this.labelIpAddress.Name = "labelIpAddress"; + this.labelIpAddress.Size = new System.Drawing.Size(57, 13); + this.labelIpAddress.TabIndex = 7; + this.labelIpAddress.Text = "IP address"; + // + // textBaseDumpFolder + // + this.textBaseDumpFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBaseDumpFolder.Location = new System.Drawing.Point(375, 43); + this.textBaseDumpFolder.Name = "textBaseDumpFolder"; + this.textBaseDumpFolder.Size = new System.Drawing.Size(297, 20); + this.textBaseDumpFolder.TabIndex = 5; + // + // labelBaseDumpFolder + // + this.labelBaseDumpFolder.AutoSize = true; + this.labelBaseDumpFolder.Location = new System.Drawing.Point(262, 46); + this.labelBaseDumpFolder.Name = "labelBaseDumpFolder"; + this.labelBaseDumpFolder.Size = new System.Drawing.Size(107, 13); + this.labelBaseDumpFolder.TabIndex = 4; + this.labelBaseDumpFolder.Text = "Base folder for dump:"; + // + // checkDumpSections + // + this.checkDumpSections.AutoSize = true; + this.checkDumpSections.Location = new System.Drawing.Point(120, 45); + this.checkDumpSections.Name = "checkDumpSections"; + this.checkDumpSections.Size = new System.Drawing.Size(96, 17); + this.checkDumpSections.TabIndex = 3; + this.checkDumpSections.Text = "Dump sections"; + this.checkDumpSections.UseVisualStyleBackColor = true; + this.checkDumpSections.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); + // + // listViewSections + // + this.listViewSections.AllowColumnReorder = true; + this.listViewSections.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeaderSegmentIdentity, + this.columnHeaderDatagramSize, + this.columnHasCRC, + this.columnHeaderSize, + this.columnHeaderSectionNumber, + this.columnHeaderLastSectionNumber, + this.columnHeaderSegmentSize, + this.columnHeaderTime}); + this.listViewSections.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewSections.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewSections.FullRowSelect = true; + this.listViewSections.GridLines = true; + this.listViewSections.HeaderCustomFont = null; + this.listViewSections.HeaderCustomForeColor = System.Drawing.Color.Empty; + this.listViewSections.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewSections.IsDoubleBuffered = true; + this.listViewSections.Location = new System.Drawing.Point(0, 0); + this.listViewSections.MultiSelect = false; + this.listViewSections.Name = "listViewSections"; + this.listViewSections.SelfSorting = false; + this.listViewSections.Size = new System.Drawing.Size(660, 186); + this.listViewSections.TabIndex = 0; + this.listViewSections.UseCompatibleStateImageBehavior = false; + this.listViewSections.View = System.Windows.Forms.View.Details; + // + // columnHeaderDatagramSize + // + this.columnHeaderDatagramSize.Text = "Datagram"; + this.columnHeaderDatagramSize.Width = 70; + // + // columnHasCRC + // + this.columnHasCRC.Text = "CRC"; + this.columnHasCRC.Width = 40; + // + // columnHeaderSize + // + this.columnHeaderSize.Text = "Size"; + this.columnHeaderSize.Width = 70; + // + // columnHeaderSectionNumber + // + this.columnHeaderSectionNumber.Text = "Section"; + this.columnHeaderSectionNumber.Width = 70; + // + // columnHeaderLastSectionNumber + // + this.columnHeaderLastSectionNumber.Text = "Last"; + this.columnHeaderLastSectionNumber.Width = 70; + // + // columnHeaderSegmentSize + // + this.columnHeaderSegmentSize.Text = "Segment"; + this.columnHeaderSegmentSize.Width = 70; + // + // columnHeaderTime + // + this.columnHeaderTime.Text = "Time"; + this.columnHeaderTime.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnHeaderTime.Width = 130; + // + // statusStripMain + // + this.statusStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.statusLabelReceiving, + this.statusLabelDataReception, + this.statusLabelDatagramCount, + this.statusLabelByteCount}); + this.statusStripMain.Location = new System.Drawing.Point(0, 390); + this.statusStripMain.Name = "statusStripMain"; + this.statusStripMain.Size = new System.Drawing.Size(684, 22); + this.statusStripMain.TabIndex = 6; + this.statusStripMain.Text = "statusStrip1"; + // + // statusLabelReceiving + // + this.statusLabelReceiving.AutoSize = false; + this.statusLabelReceiving.Name = "statusLabelReceiving"; + this.statusLabelReceiving.Size = new System.Drawing.Size(175, 17); + this.statusLabelReceiving.Text = "Data reception is in progress"; + // + // statusLabelDataReception + // + this.statusLabelDataReception.AutoSize = false; + this.statusLabelDataReception.Font = new System.Drawing.Font("Wingdings", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2))); + this.statusLabelDataReception.Name = "statusLabelDataReception"; + this.statusLabelDataReception.Size = new System.Drawing.Size(125, 17); + this.statusLabelDataReception.Text = "lll"; + // + // statusLabelDatagramCount + // + this.statusLabelDatagramCount.AutoSize = false; + this.statusLabelDatagramCount.Name = "statusLabelDatagramCount"; + this.statusLabelDatagramCount.Size = new System.Drawing.Size(175, 17); + this.statusLabelDatagramCount.Text = "Datagram count"; + this.statusLabelDatagramCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // statusLabelByteCount + // + this.statusLabelByteCount.AutoSize = false; + this.statusLabelByteCount.Name = "statusLabelByteCount"; + this.statusLabelByteCount.Size = new System.Drawing.Size(175, 17); + this.statusLabelByteCount.Text = "Total received bytes"; + this.statusLabelByteCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // splitSectionsRuns + // + this.splitSectionsRuns.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitSectionsRuns.Location = new System.Drawing.Point(12, 69); + this.splitSectionsRuns.Name = "splitSectionsRuns"; + this.splitSectionsRuns.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitSectionsRuns.Panel1 + // + this.splitSectionsRuns.Panel1.Controls.Add(this.listViewSections); + // + // splitSectionsRuns.Panel2 + // + this.splitSectionsRuns.Panel2.Controls.Add(this.listViewRuns); + this.splitSectionsRuns.Size = new System.Drawing.Size(660, 318); + this.splitSectionsRuns.SplitterDistance = 186; + this.splitSectionsRuns.TabIndex = 11; + // + // listViewRuns + // + this.listViewRuns.AllowColumnReorder = true; + this.listViewRuns.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeaderRunIdentity, + this.columnHeaderRunStart, + this.columnHeaderRunEnd, + this.columnHeaderRunLast, + this.columnHeaderRunReceived, + this.columnHeaderRunSegmentSize, + this.columnHeaderRunTime}); + this.listViewRuns.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewRuns.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewRuns.FullRowSelect = true; + this.listViewRuns.GridLines = true; + this.listViewRuns.HeaderCustomFont = null; + this.listViewRuns.HeaderCustomForeColor = System.Drawing.Color.Empty; + this.listViewRuns.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewRuns.HeaderUsesCustomTextAlignment = true; + this.listViewRuns.IsDoubleBuffered = true; + this.listViewRuns.Location = new System.Drawing.Point(0, 0); + this.listViewRuns.MultiSelect = false; + this.listViewRuns.Name = "listViewRuns"; + this.listViewRuns.SelfSorting = false; + this.listViewRuns.Size = new System.Drawing.Size(660, 128); + this.listViewRuns.TabIndex = 0; + this.listViewRuns.UseCompatibleStateImageBehavior = false; + this.listViewRuns.View = System.Windows.Forms.View.Details; + // + // columnHeaderRunStart + // + this.columnHeaderRunStart.Text = "Start"; + // + // columnHeaderRunEnd + // + this.columnHeaderRunEnd.Text = "End"; + // + // columnHeaderRunLast + // + this.columnHeaderRunLast.Text = "Last"; + // + // columnHeaderRunReceived + // + this.columnHeaderRunReceived.Text = "Received"; + this.columnHeaderRunReceived.Width = 80; + // + // columnHeaderRunSegmentSize + // + this.columnHeaderRunSegmentSize.Text = "Size"; + this.columnHeaderRunSegmentSize.Width = 80; + // + // columnHeaderRunTime + // + this.columnHeaderRunTime.Text = "Time"; + this.columnHeaderRunTime.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnHeaderRunTime.Width = 130; + // + // checkDumpSegments + // + this.checkDumpSegments.AutoSize = true; + this.checkDumpSegments.Location = new System.Drawing.Point(12, 45); + this.checkDumpSegments.Name = "checkDumpSegments"; + this.checkDumpSegments.Size = new System.Drawing.Size(102, 17); + this.checkDumpSegments.TabIndex = 2; + this.checkDumpSegments.Text = "Dump segments"; + this.checkDumpSegments.UseVisualStyleBackColor = true; + this.checkDumpSegments.CheckedChanged += new System.EventHandler(this.checkDumpSegments_CheckedChanged); + // + // DvbStpStreamExplorerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.checkDumpSegments); + this.Controls.Add(this.splitSectionsRuns); + this.Controls.Add(this.statusStripMain); + this.Controls.Add(this.textBaseDumpFolder); + this.Controls.Add(this.labelBaseDumpFolder); + this.Controls.Add(this.checkDumpSections); + this.Controls.Add(this.textPort); + this.Controls.Add(this.labelPort); + this.Controls.Add(this.textIpAddress); + this.Controls.Add(this.labelIpAddress); + this.Controls.Add(this.buttonStop); + this.Controls.Add(this.buttonStart); + this.Name = "DvbStpStreamExplorerForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Text = "DVB-STP Stream Explorer - GuiTools"; + this.Load += new System.EventHandler(this.DvbStpStreamExplorerForm_Load); + this.statusStripMain.ResumeLayout(false); + this.statusStripMain.PerformLayout(); + this.splitSectionsRuns.Panel1.ResumeLayout(false); + this.splitSectionsRuns.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitSectionsRuns)).EndInit(); + this.splitSectionsRuns.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonStart; + private System.Windows.Forms.Button buttonStop; + private System.Windows.Forms.TextBox textPort; + private System.Windows.Forms.Label labelPort; + private System.Windows.Forms.TextBox textIpAddress; + private System.Windows.Forms.Label labelIpAddress; + private System.Windows.Forms.TextBox textBaseDumpFolder; + private System.Windows.Forms.Label labelBaseDumpFolder; + private System.Windows.Forms.CheckBox checkDumpSections; + private global::IpTviewr.UiServices.Common.Controls.ListViewSortable listViewSections; + private System.Windows.Forms.StatusStrip statusStripMain; + private System.Windows.Forms.ToolStripStatusLabel statusLabelReceiving; + private System.Windows.Forms.ToolStripStatusLabel statusLabelDataReception; + private System.Windows.Forms.ToolStripStatusLabel statusLabelDatagramCount; + private System.Windows.Forms.ToolStripStatusLabel statusLabelByteCount; + private System.Windows.Forms.ColumnHeader columnHeaderSize; + private System.Windows.Forms.ColumnHeader columnHeaderLastSectionNumber; + private System.Windows.Forms.ColumnHeader columnHeaderSectionNumber; + private System.Windows.Forms.ColumnHeader columnHeaderSegmentSize; + private System.Windows.Forms.ColumnHeader columnHeaderTime; + private System.Windows.Forms.SplitContainer splitSectionsRuns; + private UiServices.Common.Controls.ListViewSortable listViewRuns; + private System.Windows.Forms.ColumnHeader columnHeaderRunStart; + private System.Windows.Forms.ColumnHeader columnHeaderRunEnd; + private System.Windows.Forms.ColumnHeader columnHeaderRunLast; + private System.Windows.Forms.ColumnHeader columnHeaderRunReceived; + private System.Windows.Forms.ColumnHeader columnHeaderRunTime; + private System.Windows.Forms.ColumnHeader columnHeaderRunSegmentSize; + private System.Windows.Forms.CheckBox checkDumpSegments; + private System.Windows.Forms.ColumnHeader columnHeaderDatagramSize; + private System.Windows.Forms.ColumnHeader columnHasCRC; + } +} \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs new file mode 100644 index 00000000..578e8723 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs @@ -0,0 +1,333 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.DvbStp.Client; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class DvbStpStreamExplorerForm : Form + { + private BackgroundWorker Worker; + private DvbStpExplorer Explorer; + private PayloadStorage Storage; + private IPAddress MulticastIpAddress; + private int MulticastPort; + private int DatagramCount; + private long DatagramByteCount; + private string DumpFolderSections; + private string DumpFolderSegments; + private DateTime StartTime; + + public DvbStpStreamExplorerForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.GuiTools; + } // constructor + + #region Form events + + private void DvbStpStreamExplorerForm_Load(object sender, EventArgs e) + { + var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + var folder = string.Format(Properties.Resources.DefaultDumpFolder, appExe, Application.ProductVersion); + var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); + textBaseDumpFolder.Text = baseFolder; + + EnableDumpFolder(); + + statusLabelDataReception.Text = null; + statusLabelReceiving.Text = null; + statusLabelDatagramCount.Text = null; + statusLabelByteCount.Text = null; + + buttonStop.Enabled = false; + } // MulticastStreamExplorerForm_Load + + private void checkDumpSegments_CheckedChanged(object sender, EventArgs e) + { + EnableDumpFolder(); + } // checkDumpSegments_CheckedChanged + + private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) + { + EnableDumpFolder(); + } // checkDumpPayloads_CheckedChanged + + private void buttonStart_Click(object sender, EventArgs e) + { + string context = null; + + try + { + context = "IP Address"; + var input = textIpAddress.Text.Trim(); + MulticastIpAddress = IPAddress.Parse(input); + + context = "Port"; + MulticastPort = Program.ParseNumber(textPort.Text); + + context = "Dump folder: segments"; + if (checkDumpSegments.Checked) + { + DumpFolderSegments = Path.Combine(textBaseDumpFolder.Text, string.Format("DvbStpStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); + Directory.CreateDirectory(DumpFolderSegments); + } + else + { + DumpFolderSegments = null; + } // if-else + + context = "Dump folder: sections"; + if (checkDumpSections.Checked) + { + DumpFolderSections = Path.Combine(textBaseDumpFolder.Text, string.Format("DvbStpStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}\\sections", MulticastIpAddress, MulticastPort, DateTime.Now)); + Directory.CreateDirectory(DumpFolderSections); + } + else + { + DumpFolderSections = null; + } // if-else + } + catch (Exception ex) + { + MyApplication.HandleException(this, context, ex); + return; + } // try-catch + + buttonStart.Enabled = false; + buttonStop.Enabled = true; + + DatagramCount = 0; + DatagramByteCount = 0; + checkDumpSections.Enabled = false; + + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + listViewSections.Items.Clear(); + listViewRuns.Items.Clear(); + + Explorer = new DvbStpExplorer(MulticastIpAddress, MulticastPort); + statusLabelReceiving.Text = "Trying to connect..."; + + Worker = new BackgroundWorker() + { + WorkerReportsProgress = true, + WorkerSupportsCancellation = true + }; + Worker.DoWork += Worker_DoWork; + Worker.ProgressChanged += Worker_ProgressChanged; + Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + Worker.RunWorkerAsync(); + } // buttonStart_Click + + private void buttonStop_Click(object sender, EventArgs e) + { + buttonStop.Enabled = false; + buttonStop.Text = "Cancelling"; + buttonStop.Image = Properties.Resources.Status_Wait_16x16; + Explorer.CancelRequest(); + } // buttonStop_Click + + #endregion + + #region Form events implementation + + private void EnableDumpFolder() + { + labelBaseDumpFolder.Enabled = checkDumpSegments.Checked || checkDumpSections.Checked; + textBaseDumpFolder.Enabled = checkDumpSegments.Checked || checkDumpSections.Checked; + } // EnableDumpFolder + + #endregion + + #region Worker events + + void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + buttonStart.Enabled = true; + buttonStop.Text = "Stop"; + buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; + statusLabelDataReception.Text = null; + statusLabelReceiving.Text = null; + checkDumpSections.Enabled = true; + + Worker.Dispose(); + Worker = null; + } // Worker_RunWorkerCompleted + + void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + switch (e.ProgressPercentage) + { + case 1: + var section = e.UserState as DvbStpExplorer.SectionReceivedEventArgs; + if (section == null) return; + ProgressSectionReceived(section); + break; + + case 2: + var run = e.UserState as DvbStpExplorer.RunEndedEventArgs; + if (run == null) return; + ProgressRunEnded(run); + break; + + case 3: + var segment = e.UserState as PayloadStorage.SegmentPayloadReceivedEventArgs; + if (segment == null) return; + ProgressSegmentReceived(segment); + break; + } // switch + } // Worker_ProgressChanged + + private void ProgressSectionReceived(DvbStpExplorer.SectionReceivedEventArgs section) + { + if (statusLabelDataReception.Text == null) + { + statusLabelReceiving.Text = "Receiving data"; + } // if + + DatagramCount++; + DatagramByteCount += section.BytesReceived; + + int length = (DatagramCount % 10) + 1; + statusLabelDataReception.Text = new string('l', length); + + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + + var itemData = new string[] + { + string.Format("p{0:X2}s{1:X4}v{2:X2}", section.Header.PayloadId, section.Header.SegmentId, section.Header.SegmentVersion), + string.Format("{0,7:N0}", section.BytesReceived), + string.Format(section.Header.HasCRC? "yes" : "no"), + string.Format("{0,7:N0}", section.Payload.Length), + string.Format("{0,7:N0}", section.Header.SectionNumber), + string.Format("{0,7:N0}", section.Header.LastSectionNumber), + string.Format("{0,7:N0}", section.Header.TotalSegmentSize), + (DateTime.Now - StartTime).ToString(), + }; + var item = new ListViewItem(itemData); + listViewSections.Items.Add(item); + item.EnsureVisible(); + + if (DumpFolderSections != null) + { + var path = Path.Combine(DumpFolderSections, string.Format("p{0:X2}s{1:X4}v{2:X2}-{3:00000}.bin", + section.Header.PayloadId, section.Header.SegmentId, section.Header.SegmentVersion, + section.Header.SectionNumber)); + File.WriteAllBytes(path, section.Payload); + } // if + } // ProgressSectionReceived + + private void ProgressRunEnded(DvbStpExplorer.RunEndedEventArgs run) + { + var itemData = new string[] + { + string.Format("p{0:X2}s{1:X4}v{2:X2}", run.PayloadId, run.SegmentId, run.SegmentVersion), + string.Format("{0,6:N0}", run.StartSectionNumber), + string.Format("{0,6:N0}", run.EndSectionNumber), + string.Format("{0,6:N0}", run.LastSectionNumber), + string.Format("{0,6:N0}", run.ReceivedPayloadBytes), + string.Format("{0,6:N0}", run.TotalSegmentSize), + (DateTime.Now - StartTime).ToString(), + }; + var item = new ListViewItem(itemData); + listViewRuns.Items.Add(item); + item.EnsureVisible(); + } // ProgressRunEnded + + private void ProgressSegmentReceived(PayloadStorage.SegmentPayloadReceivedEventArgs segment) + { + var itemData = new string[] + { + string.Format(segment.SegmentIdentity.ToString()), + string.Format("-"), + string.Format("-"), + string.Format("{0,6:N0}", segment.SectionCount), + string.Format("{0,6:N0}", segment.Payload.Length), + string.Format("-"), + (DateTime.Now - StartTime).ToString(), + }; + var item = new ListViewItem(itemData); + item.BackColor = SystemColors.Control; + item.ForeColor = SystemColors.ControlText; + listViewRuns.Items.Add(item); + item.EnsureVisible(); + + var path = Path.Combine(DumpFolderSegments, string.Format("{0}-{1}.xml", segment.SegmentIdentity, listViewRuns.Items.Count - 1)); + File.WriteAllBytes(path, segment.Payload); + } // ProgressSegmentReceived + + #endregion + + #region Worker implementation + + void Worker_DoWork(object sender, DoWorkEventArgs e) + { + StartTime = DateTime.Now; + try + { + if (DumpFolderSegments != null) + { + Storage = new PayloadStorage(true); + Storage.SegmentPayloadReceived += Storage_SegmentPayloadReceived; + } // if + Explorer.SectionReceived += Explorer_SectionReceived; + Explorer.RunEnded += Explorer_RunEnded; + Explorer.ExploreMulticastStream(); + } + finally + { + if (Explorer != null)Explorer.Close(); + if (Storage != null) Storage = null; + } // finally + } // Worker_DoWork + + private void Explorer_SectionReceived(object sender, DvbStpExplorer.SectionReceivedEventArgs e) + { + if (Storage != null) Storage.AddSection(e.Header, e.Payload, false); + Worker.ReportProgress(1, e); + } // Explorer_SectionReceived + + private void Explorer_RunEnded(object sender, DvbStpExplorer.RunEndedEventArgs e) + { + Worker.ReportProgress(2, e); + } // Explorer_RunEnded + + private void Storage_SegmentPayloadReceived(object sender, PayloadStorage.SegmentPayloadReceivedEventArgs e) + { + Worker.ReportProgress(3, e); + } // Storage_SegmentPayloadReceived + + #endregion + + #region Aux functions + + private string GetFirstBytes(byte[] data, int count) + { + if (count > data.Length) count = data.Length; + + StringBuilder buffer = new StringBuilder(count); + for (int index = 0; index < count; index++) + { + var b = data[index]; + buffer.Append((b <32 )? '·' : (char) b); + } // for index + + return buffer.ToString(); + } // GetFirstBytes + + #endregion + } // class MulticastStreamExplorerForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .resx b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .resx new file mode 100644 index 00000000..f07620dc --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + 17, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj index b8396973..99799d71 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj @@ -60,6 +60,12 @@ Properties\AssemblySolutionInfo.cs + + Form + + + DvbStpStreamExplorerForm .cs + Form @@ -87,6 +93,9 @@ SimpleDvbStpDownloadForm.cs + + DvbStpStreamExplorerForm .cs + OpchExplorerForm.cs @@ -124,6 +133,14 @@ + + {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + DvbStpClient + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + {ba481e42-f570-4d2c-94d4-21c4cce27762} UiServices.DvbStpClient diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs index 3f0b44dd..48fe8cd8 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs @@ -32,15 +32,17 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.groupBoxTools = new System.Windows.Forms.GroupBox(); + this.radioDvbStpExplorer = new System.Windows.Forms.RadioButton(); + this.radioOpchExplorer = new System.Windows.Forms.RadioButton(); this.radioMulticastExplorer = new System.Windows.Forms.RadioButton(); this.radioSimpleDownload = new System.Windows.Forms.RadioButton(); this.buttonExecute = new System.Windows.Forms.Button(); - this.radioOpchExplorer = new System.Windows.Forms.RadioButton(); this.groupBoxTools.SuspendLayout(); this.SuspendLayout(); // // groupBoxTools // + this.groupBoxTools.Controls.Add(this.radioDvbStpExplorer); this.groupBoxTools.Controls.Add(this.radioOpchExplorer); this.groupBoxTools.Controls.Add(this.radioMulticastExplorer); this.groupBoxTools.Controls.Add(this.radioSimpleDownload); @@ -51,13 +53,35 @@ private void InitializeComponent() this.groupBoxTools.TabStop = false; this.groupBoxTools.Text = "Select tool"; // + // radioDvbStpExplorer + // + this.radioDvbStpExplorer.AutoSize = true; + this.radioDvbStpExplorer.Location = new System.Drawing.Point(6, 43); + this.radioDvbStpExplorer.Name = "radioDvbStpExplorer"; + this.radioDvbStpExplorer.Size = new System.Drawing.Size(148, 17); + this.radioDvbStpExplorer.TabIndex = 1; + this.radioDvbStpExplorer.TabStop = true; + this.radioDvbStpExplorer.Text = "DVB-STP Stream Explorer"; + this.radioDvbStpExplorer.UseVisualStyleBackColor = true; + // + // radioOpchExplorer + // + this.radioOpchExplorer.AutoSize = true; + this.radioOpchExplorer.Location = new System.Drawing.Point(6, 89); + this.radioOpchExplorer.Name = "radioOpchExplorer"; + this.radioOpchExplorer.Size = new System.Drawing.Size(132, 17); + this.radioOpchExplorer.TabIndex = 3; + this.radioOpchExplorer.TabStop = true; + this.radioOpchExplorer.Text = "OPCH Stream Explorer"; + this.radioOpchExplorer.UseVisualStyleBackColor = true; + // // radioMulticastExplorer // this.radioMulticastExplorer.AutoSize = true; - this.radioMulticastExplorer.Location = new System.Drawing.Point(6, 42); + this.radioMulticastExplorer.Location = new System.Drawing.Point(6, 66); this.radioMulticastExplorer.Name = "radioMulticastExplorer"; this.radioMulticastExplorer.Size = new System.Drawing.Size(144, 17); - this.radioMulticastExplorer.TabIndex = 1; + this.radioMulticastExplorer.TabIndex = 2; this.radioMulticastExplorer.TabStop = true; this.radioMulticastExplorer.Text = "Multicast Stream Explorer"; this.radioMulticastExplorer.UseVisualStyleBackColor = true; @@ -83,17 +107,6 @@ private void InitializeComponent() this.buttonExecute.UseVisualStyleBackColor = true; this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click); // - // radioOpchExplorer - // - this.radioOpchExplorer.AutoSize = true; - this.radioOpchExplorer.Location = new System.Drawing.Point(6, 65); - this.radioOpchExplorer.Name = "radioOpchExplorer"; - this.radioOpchExplorer.Size = new System.Drawing.Size(132, 17); - this.radioOpchExplorer.TabIndex = 2; - this.radioOpchExplorer.TabStop = true; - this.radioOpchExplorer.Text = "OPCH Stream Explorer"; - this.radioOpchExplorer.UseVisualStyleBackColor = true; - // // LaunchForm // this.AcceptButton = this.buttonExecute; @@ -104,7 +117,7 @@ private void InitializeComponent() this.Controls.Add(this.groupBoxTools); this.Name = "LaunchForm"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "LaunchForm"; + this.Text = "Select tool - GuiTools"; this.groupBoxTools.ResumeLayout(false); this.groupBoxTools.PerformLayout(); this.ResumeLayout(false); @@ -118,5 +131,6 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton radioSimpleDownload; private System.Windows.Forms.RadioButton radioMulticastExplorer; private System.Windows.Forms.RadioButton radioOpchExplorer; + private System.Windows.Forms.RadioButton radioDvbStpExplorer; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs index e68a3666..4eff949f 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs @@ -25,6 +25,7 @@ private void buttonExecute_Click(object sender, EventArgs e) Form form = null; if (radioSimpleDownload.Checked) form = new SimpleDvbStpDownloadForm(); + else if (radioDvbStpExplorer.Checked) form = new DvbStpStreamExplorerForm(); else if (radioMulticastExplorer.Checked) form = new MulticastStreamExplorerForm(); else if (radioOpchExplorer.Checked) form = new OpchExplorerForm(); diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.resx index 5ea0895e..1af7de15 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.resx +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs index c3b499bd..ce79ad4c 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs @@ -31,6 +31,8 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + System.Windows.Forms.ColumnHeader columnHeaderSize; + System.Windows.Forms.ColumnHeader columnHeaderTime; this.buttonStart = new System.Windows.Forms.Button(); this.buttonStop = new System.Windows.Forms.Button(); this.textPort = new System.Windows.Forms.TextBox(); @@ -40,12 +42,29 @@ private void InitializeComponent() this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); this.labelBaseDumpFolder = new System.Windows.Forms.Label(); this.checkDumpDatagrams = new System.Windows.Forms.CheckBox(); - this.labelDataReception = new System.Windows.Forms.Label(); - this.labelReceiving = new System.Windows.Forms.Label(); - this.labelDatagramCount = new System.Windows.Forms.Label(); - this.labelByteCount = new System.Windows.Forms.Label(); + this.listViewDatagrams = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); + this.columnHeaderFirstBytes = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStripMain = new System.Windows.Forms.StatusStrip(); + this.statusLabelReceiving = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelDataReception = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelDatagramCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelByteCount = new System.Windows.Forms.ToolStripStatusLabel(); + columnHeaderSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStripMain.SuspendLayout(); this.SuspendLayout(); // + // columnHeaderSize + // + columnHeaderSize.Text = "Size"; + columnHeaderSize.Width = 75; + // + // columnHeaderTime + // + columnHeaderTime.Text = "Time"; + columnHeaderTime.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + columnHeaderTime.Width = 125; + // // buttonStart // this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -137,57 +156,87 @@ private void InitializeComponent() this.checkDumpDatagrams.UseVisualStyleBackColor = true; this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); // - // labelDataReception - // - this.labelDataReception.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDataReception.Font = new System.Drawing.Font("Wingdings", 9F); - this.labelDataReception.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDataReception.Location = new System.Drawing.Point(12, 390); - this.labelDataReception.Name = "labelDataReception"; - this.labelDataReception.Size = new System.Drawing.Size(100, 13); - this.labelDataReception.TabIndex = 24; - this.labelDataReception.Text = "l"; - this.labelDataReception.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // labelReceiving - // - this.labelReceiving.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelReceiving.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelReceiving.Location = new System.Drawing.Point(118, 390); - this.labelReceiving.Name = "labelReceiving"; - this.labelReceiving.Size = new System.Drawing.Size(175, 13); - this.labelReceiving.TabIndex = 23; - this.labelReceiving.Text = "Data reception is in progress"; - // - // labelDatagramCount - // - this.labelDatagramCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDatagramCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDatagramCount.Location = new System.Drawing.Point(299, 390); - this.labelDatagramCount.Name = "labelDatagramCount"; - this.labelDatagramCount.Size = new System.Drawing.Size(175, 13); - this.labelDatagramCount.TabIndex = 25; - this.labelDatagramCount.Text = "(Count)"; - // - // labelByteCount - // - this.labelByteCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelByteCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelByteCount.Location = new System.Drawing.Point(480, 390); - this.labelByteCount.Name = "labelByteCount"; - this.labelByteCount.Size = new System.Drawing.Size(175, 13); - this.labelByteCount.TabIndex = 26; - this.labelByteCount.Text = "(Byte count)"; + // listViewDatagrams + // + this.listViewDatagrams.AllowColumnReorder = true; + this.listViewDatagrams.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewDatagrams.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + columnHeaderSize, + columnHeaderTime, + this.columnHeaderFirstBytes}); + this.listViewDatagrams.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewDatagrams.FullRowSelect = true; + this.listViewDatagrams.GridLines = true; + this.listViewDatagrams.HeaderCustomFont = null; + this.listViewDatagrams.HeaderCustomForeColor = System.Drawing.Color.Empty; + this.listViewDatagrams.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewDatagrams.IsDoubleBuffered = true; + this.listViewDatagrams.Location = new System.Drawing.Point(12, 69); + this.listViewDatagrams.MultiSelect = false; + this.listViewDatagrams.Name = "listViewDatagrams"; + this.listViewDatagrams.Size = new System.Drawing.Size(660, 318); + this.listViewDatagrams.TabIndex = 34; + this.listViewDatagrams.UseCompatibleStateImageBehavior = false; + this.listViewDatagrams.View = System.Windows.Forms.View.Details; + // + // columnHeaderFirstBytes + // + this.columnHeaderFirstBytes.Text = "First 64 bytes of data"; + this.columnHeaderFirstBytes.Width = 425; + // + // statusStripMain + // + this.statusStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.statusLabelReceiving, + this.statusLabelDataReception, + this.statusLabelDatagramCount, + this.statusLabelByteCount}); + this.statusStripMain.Location = new System.Drawing.Point(0, 390); + this.statusStripMain.Name = "statusStripMain"; + this.statusStripMain.Size = new System.Drawing.Size(684, 22); + this.statusStripMain.TabIndex = 35; + this.statusStripMain.Text = "statusStrip1"; + // + // statusLabelReceiving + // + this.statusLabelReceiving.AutoSize = false; + this.statusLabelReceiving.Name = "statusLabelReceiving"; + this.statusLabelReceiving.Size = new System.Drawing.Size(175, 17); + this.statusLabelReceiving.Text = "Data reception is in progress"; + // + // statusLabelDataReception + // + this.statusLabelDataReception.AutoSize = false; + this.statusLabelDataReception.Font = new System.Drawing.Font("Wingdings", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2))); + this.statusLabelDataReception.Name = "statusLabelDataReception"; + this.statusLabelDataReception.Size = new System.Drawing.Size(125, 17); + this.statusLabelDataReception.Text = "lll"; + // + // statusLabelDatagramCount + // + this.statusLabelDatagramCount.AutoSize = false; + this.statusLabelDatagramCount.Name = "statusLabelDatagramCount"; + this.statusLabelDatagramCount.Size = new System.Drawing.Size(175, 17); + this.statusLabelDatagramCount.Text = "Datagram count"; + this.statusLabelDatagramCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // statusLabelByteCount + // + this.statusLabelByteCount.AutoSize = false; + this.statusLabelByteCount.Name = "statusLabelByteCount"; + this.statusLabelByteCount.Size = new System.Drawing.Size(175, 17); + this.statusLabelByteCount.Text = "Total received bytes"; + this.statusLabelByteCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // MulticastStreamExplorerForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(684, 412); - this.Controls.Add(this.labelByteCount); - this.Controls.Add(this.labelDatagramCount); - this.Controls.Add(this.labelDataReception); - this.Controls.Add(this.labelReceiving); + this.Controls.Add(this.statusStripMain); + this.Controls.Add(this.listViewDatagrams); this.Controls.Add(this.textBaseDumpFolder); this.Controls.Add(this.labelBaseDumpFolder); this.Controls.Add(this.checkDumpDatagrams); @@ -199,8 +248,10 @@ private void InitializeComponent() this.Controls.Add(this.buttonStart); this.Name = "MulticastStreamExplorerForm"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "Multicast Stream Explorer"; + this.Text = "Multicast Stream Explorer - GuiTools"; this.Load += new System.EventHandler(this.MulticastStreamExplorerForm_Load); + this.statusStripMain.ResumeLayout(false); + this.statusStripMain.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -217,9 +268,12 @@ private void InitializeComponent() private System.Windows.Forms.TextBox textBaseDumpFolder; private System.Windows.Forms.Label labelBaseDumpFolder; private System.Windows.Forms.CheckBox checkDumpDatagrams; - private System.Windows.Forms.Label labelDataReception; - private System.Windows.Forms.Label labelReceiving; - private System.Windows.Forms.Label labelDatagramCount; - private System.Windows.Forms.Label labelByteCount; + private global::IpTviewr.UiServices.Common.Controls.ListViewSortable listViewDatagrams; + private System.Windows.Forms.ColumnHeader columnHeaderFirstBytes; + private System.Windows.Forms.StatusStrip statusStripMain; + private System.Windows.Forms.ToolStripStatusLabel statusLabelReceiving; + private System.Windows.Forms.ToolStripStatusLabel statusLabelDataReception; + private System.Windows.Forms.ToolStripStatusLabel statusLabelDatagramCount; + private System.Windows.Forms.ToolStripStatusLabel statusLabelByteCount; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs index b9bd021f..6a77d105 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs @@ -23,6 +23,7 @@ public partial class MulticastStreamExplorerForm : Form private int DatagramCount; private long DatagramByteCount; private string DumpFolder; + private DateTime StartTime; public MulticastStreamExplorerForm() { @@ -33,15 +34,14 @@ public MulticastStreamExplorerForm() private void MulticastStreamExplorerForm_Load(object sender, EventArgs e) { var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); - var folder = string.Format("IPTV\\{0} {1}\\Data", appExe, Application.ProductVersion); + var folder = string.Format(Properties.Resources.DefaultDumpFolder, appExe, Application.ProductVersion); var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); textBaseDumpFolder.Text = baseFolder; - checkDumpDatagrams.Checked = true; - labelDataReception.Visible = false; - labelReceiving.Visible = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; + statusLabelDataReception.Text = null; + statusLabelReceiving.Text = null; + statusLabelDatagramCount.Text = null; + statusLabelByteCount.Text = null; buttonStop.Enabled = false; } // MulticastStreamExplorerForm_Load @@ -82,12 +82,16 @@ private void buttonStart_Click(object sender, EventArgs e) return; } // try-catch + buttonStart.Enabled = false; + buttonStop.Enabled = true; + DatagramCount = 0; DatagramByteCount = 0; - buttonStop.Enabled = true; checkDumpDatagrams.Enabled = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; + + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + listViewDatagrams.Items.Clear(); Worker = new BackgroundWorker() { @@ -110,10 +114,11 @@ private void buttonStop_Click(object sender, EventArgs e) void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { + buttonStart.Enabled = true; buttonStop.Text = "Stop"; buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; - labelDataReception.Visible = false; - labelReceiving.Visible = false; + statusLabelDataReception.Text = null; + statusLabelReceiving.Text = null; Worker.Dispose(); Worker = null; @@ -123,8 +128,17 @@ void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { var data = e.UserState as byte[]; - labelDataReception.Visible = true; - labelReceiving.Visible = true; + if (statusLabelDataReception.Text == null) + { + statusLabelDataReception.Text = "l"; + statusLabelReceiving.Text = "Receiving data"; + } // if + + var item = new ListViewItem(string.Format("{0,7:N0}", data.Length)); + item.SubItems.Add((DateTime.Now - StartTime).ToString()); + item.SubItems.Add(GetFirstBytes(data, 64)); + listViewDatagrams.Items.Add(item); + item.EnsureVisible(); if (DumpFolder != null) { @@ -136,10 +150,10 @@ void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) DatagramByteCount += data.Length; int length = (DatagramCount % 10) + 1; - labelDataReception.Text = new string(labelDataReception.Text[0], length); + statusLabelDataReception.Text = new string('l', length); - labelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); - labelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); } // Worker_ProgressChanged void Worker_DoWork(object sender, DoWorkEventArgs e) @@ -147,12 +161,15 @@ void Worker_DoWork(object sender, DoWorkEventArgs e) UdpClient client; IPEndPoint endPoint; + StartTime = DateTime.Now; client = null; try { client = new UdpClient(MulticastPort); client.JoinMulticastGroup(MulticastIpAddress); + statusLabelReceiving.Text = "Trying to connect..."; + endPoint = null; while (!Worker.CancellationPending) { @@ -169,5 +186,19 @@ void Worker_DoWork(object sender, DoWorkEventArgs e) } // if } // finally } // Worker_DoWork + + private string GetFirstBytes(byte[] data, int count) + { + if (count > data.Length) count = data.Length; + + StringBuilder buffer = new StringBuilder(count); + for (int index = 0; index < count; index++) + { + var b = data[index]; + buffer.Append((b <32 )? '·' : (char) b); + } // for index + + return buffer.ToString(); + } // GetFirstBytes } // class MulticastStreamExplorerForm } // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.resx index 5ea0895e..e94ab85f 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.resx +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.resx @@ -1,120 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + 17, 17 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs index 6726ed57..41381358 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs @@ -46,19 +46,51 @@ private void InitializeComponent() this.textBaseDumpFolder = new System.Windows.Forms.TextBox(); this.labelBaseDumpFolder = new System.Windows.Forms.Label(); this.checkDumpDatagrams = new System.Windows.Forms.CheckBox(); - this.labelDataReception = new System.Windows.Forms.Label(); - this.labelReceiving = new System.Windows.Forms.Label(); - this.labelDatagramCount = new System.Windows.Forms.Label(); - this.labelByteCount = new System.Windows.Forms.Label(); - this.listViewFiles = new System.Windows.Forms.ListView(); + this.listViewFiles = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); + this.statusStripMain = new System.Windows.Forms.StatusStrip(); + this.statusLabelReceiving = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelDataReception = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelDatagramCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabelByteCount = new System.Windows.Forms.ToolStripStatusLabel(); columnHeaderFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderFragment = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderSuffix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderCount = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderPrefix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.statusStripMain.SuspendLayout(); this.SuspendLayout(); // + // columnHeaderFilename + // + columnHeaderFilename.Text = "Filename"; + columnHeaderFilename.Width = 150; + // + // columnHeaderFragment + // + columnHeaderFragment.Text = "Fragment"; + columnHeaderFragment.Width = 75; + // + // columnHeaderSize + // + columnHeaderSize.Text = "Size"; + columnHeaderSize.Width = 75; + // + // columnHeaderSuffix + // + columnHeaderSuffix.Text = "Suffix"; + columnHeaderSuffix.Width = 100; + // + // columnHeaderCount + // + columnHeaderCount.Text = "Count"; + columnHeaderCount.Width = 75; + // + // columnHeaderPrefix + // + columnHeaderPrefix.Text = "Prefix"; + columnHeaderPrefix.Width = 100; + // // buttonStart // this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -150,48 +182,6 @@ private void InitializeComponent() this.checkDumpDatagrams.UseVisualStyleBackColor = true; this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); // - // labelDataReception - // - this.labelDataReception.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDataReception.Font = new System.Drawing.Font("Wingdings", 9F); - this.labelDataReception.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDataReception.Location = new System.Drawing.Point(12, 390); - this.labelDataReception.Name = "labelDataReception"; - this.labelDataReception.Size = new System.Drawing.Size(100, 13); - this.labelDataReception.TabIndex = 24; - this.labelDataReception.Text = "l"; - this.labelDataReception.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // labelReceiving - // - this.labelReceiving.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelReceiving.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelReceiving.Location = new System.Drawing.Point(118, 390); - this.labelReceiving.Name = "labelReceiving"; - this.labelReceiving.Size = new System.Drawing.Size(175, 13); - this.labelReceiving.TabIndex = 23; - this.labelReceiving.Text = "Data reception is in progress"; - // - // labelDatagramCount - // - this.labelDatagramCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelDatagramCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelDatagramCount.Location = new System.Drawing.Point(299, 390); - this.labelDatagramCount.Name = "labelDatagramCount"; - this.labelDatagramCount.Size = new System.Drawing.Size(175, 13); - this.labelDatagramCount.TabIndex = 25; - this.labelDatagramCount.Text = "(Count)"; - // - // labelByteCount - // - this.labelByteCount.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.labelByteCount.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelByteCount.Location = new System.Drawing.Point(480, 390); - this.labelByteCount.Name = "labelByteCount"; - this.labelByteCount.Size = new System.Drawing.Size(175, 13); - this.labelByteCount.TabIndex = 26; - this.labelByteCount.Text = "(Byte count)"; - // // listViewFiles // this.listViewFiles.AllowColumnReorder = true; @@ -207,7 +197,10 @@ private void InitializeComponent() columnHeaderSuffix}); this.listViewFiles.FullRowSelect = true; this.listViewFiles.GridLines = true; + this.listViewFiles.HeaderCustomFont = null; + this.listViewFiles.HeaderCustomForeColor = System.Drawing.Color.Empty; this.listViewFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewFiles.IsDoubleBuffered = true; this.listViewFiles.Location = new System.Drawing.Point(12, 69); this.listViewFiles.MultiSelect = false; this.listViewFiles.Name = "listViewFiles"; @@ -216,46 +209,57 @@ private void InitializeComponent() this.listViewFiles.UseCompatibleStateImageBehavior = false; this.listViewFiles.View = System.Windows.Forms.View.Details; // - // columnHeaderFilename + // statusStripMain // - columnHeaderFilename.Text = "Filename"; - columnHeaderFilename.Width = 150; + this.statusStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.statusLabelReceiving, + this.statusLabelDataReception, + this.statusLabelDatagramCount, + this.statusLabelByteCount}); + this.statusStripMain.Location = new System.Drawing.Point(0, 390); + this.statusStripMain.Name = "statusStripMain"; + this.statusStripMain.Size = new System.Drawing.Size(684, 22); + this.statusStripMain.TabIndex = 36; + this.statusStripMain.Text = "statusStrip1"; // - // columnHeaderFragment + // statusLabelReceiving // - columnHeaderFragment.Text = "Fragment"; - columnHeaderFragment.Width = 75; + this.statusLabelReceiving.AutoSize = false; + this.statusLabelReceiving.Name = "statusLabelReceiving"; + this.statusLabelReceiving.Size = new System.Drawing.Size(175, 17); + this.statusLabelReceiving.Text = "Data reception is in progress"; // - // columnHeaderSize + // statusLabelDataReception // - columnHeaderSize.Text = "Size"; - columnHeaderSize.Width = 75; - // - // columnHeaderSuffix - // - columnHeaderSuffix.Text = "Suffix"; - columnHeaderSuffix.Width = 100; + this.statusLabelDataReception.AutoSize = false; + this.statusLabelDataReception.Font = new System.Drawing.Font("Wingdings", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2))); + this.statusLabelDataReception.Name = "statusLabelDataReception"; + this.statusLabelDataReception.Size = new System.Drawing.Size(125, 17); + this.statusLabelDataReception.Text = "lll"; // - // columnHeaderCount + // statusLabelDatagramCount // - columnHeaderCount.Text = "Count"; - columnHeaderCount.Width = 75; + this.statusLabelDatagramCount.AutoSize = false; + this.statusLabelDatagramCount.Name = "statusLabelDatagramCount"; + this.statusLabelDatagramCount.Size = new System.Drawing.Size(175, 17); + this.statusLabelDatagramCount.Text = "Datagram count"; + this.statusLabelDatagramCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // - // columnHeaderPrefix + // statusLabelByteCount // - columnHeaderPrefix.Text = "Prefix"; - columnHeaderPrefix.Width = 100; + this.statusLabelByteCount.AutoSize = false; + this.statusLabelByteCount.Name = "statusLabelByteCount"; + this.statusLabelByteCount.Size = new System.Drawing.Size(175, 17); + this.statusLabelByteCount.Text = "Total received bytes"; + this.statusLabelByteCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // OpchExplorerForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.statusStripMain); this.Controls.Add(this.listViewFiles); - this.Controls.Add(this.labelByteCount); - this.Controls.Add(this.labelDatagramCount); - this.Controls.Add(this.labelDataReception); - this.Controls.Add(this.labelReceiving); this.Controls.Add(this.textBaseDumpFolder); this.Controls.Add(this.labelBaseDumpFolder); this.Controls.Add(this.checkDumpDatagrams); @@ -267,8 +271,10 @@ private void InitializeComponent() this.Controls.Add(this.buttonStart); this.Name = "OpchExplorerForm"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "OPCH Stream Explorer"; - this.Load += new System.EventHandler(this.MulticastStreamExplorerForm_Load); + this.Text = "OPCH Stream Explorer - GuiTools"; + this.Load += new System.EventHandler(this.OpchExplorerForm_Load); + this.statusStripMain.ResumeLayout(false); + this.statusStripMain.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -285,10 +291,11 @@ private void InitializeComponent() private System.Windows.Forms.TextBox textBaseDumpFolder; private System.Windows.Forms.Label labelBaseDumpFolder; private System.Windows.Forms.CheckBox checkDumpDatagrams; - private System.Windows.Forms.Label labelDataReception; - private System.Windows.Forms.Label labelReceiving; - private System.Windows.Forms.Label labelDatagramCount; - private System.Windows.Forms.Label labelByteCount; - private System.Windows.Forms.ListView listViewFiles; + private global::IpTviewr.UiServices.Common.Controls.ListViewSortable listViewFiles; + private System.Windows.Forms.StatusStrip statusStripMain; + private System.Windows.Forms.ToolStripStatusLabel statusLabelReceiving; + private System.Windows.Forms.ToolStripStatusLabel statusLabelDataReception; + private System.Windows.Forms.ToolStripStatusLabel statusLabelDatagramCount; + private System.Windows.Forms.ToolStripStatusLabel statusLabelByteCount; } // class OpchExplorerForm } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs index a9722940..6e368c7a 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs @@ -30,21 +30,20 @@ public OpchExplorerForm() this.Icon = Properties.Resources.GuiTools; } // constructor - private void MulticastStreamExplorerForm_Load(object sender, EventArgs e) + private void OpchExplorerForm_Load(object sender, EventArgs e) { var appExe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); - var folder = string.Format("IPTV\\{0} {1}\\Data", appExe, Application.ProductVersion); + var folder = string.Format(Properties.Resources.DefaultDumpFolder, appExe, Application.ProductVersion); var baseFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), folder); textBaseDumpFolder.Text = baseFolder; - checkDumpDatagrams.Checked = true; - labelDataReception.Visible = false; - labelReceiving.Visible = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; + statusLabelDataReception.Text = null; + statusLabelReceiving.Text = null; + statusLabelDatagramCount.Text = null; + statusLabelByteCount.Text = null; buttonStop.Enabled = false; - } // MulticastStreamExplorerForm_Load + } // OpchExplorerForm_Load private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) { @@ -82,13 +81,15 @@ private void buttonStart_Click(object sender, EventArgs e) return; } // try-catch - DatagramCount = 0; - DatagramByteCount = 0; buttonStart.Enabled = false; buttonStop.Enabled = true; + + DatagramCount = 0; + DatagramByteCount = 0; checkDumpDatagrams.Enabled = false; - labelDatagramCount.Text = null; - labelByteCount.Text = null; + + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); listViewFiles.Items.Clear(); Worker = new BackgroundWorker() @@ -115,8 +116,8 @@ void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) buttonStart.Enabled = true; buttonStop.Text = "Stop"; buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; - labelDataReception.Visible = false; - labelReceiving.Visible = false; + statusLabelDataReception.Text = null; + statusLabelReceiving.Text = null; Worker.Dispose(); Worker = null; @@ -128,15 +129,18 @@ void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) var file = Encoding.UTF8.GetString(data, 12, 32); var l = data.Length; + if (statusLabelDataReception.Text == null) + { + statusLabelDataReception.Text = "l"; + statusLabelReceiving.Text = "Receiving data"; + } // if + var index = file.IndexOf('\0'); if (index > 0) { file = file.Substring(0, index); } // if - labelDataReception.Visible = true; - labelReceiving.Visible = true; - if (DumpFolder != null) { var path = Path.Combine(DumpFolder, string.Format("{4} ~ 0x{0:X2}{1:X2}{2:X2}{3:X2}.bin", data[4], data[5], data[6], data[7], file)); @@ -163,10 +167,10 @@ void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) DatagramByteCount += data.Length; int length = (DatagramCount % 10) + 1; - labelDataReception.Text = new string(labelDataReception.Text[0], length); + statusLabelDataReception.Text = new string('l', length); - labelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); - labelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); } // Worker_ProgressChanged void Worker_DoWork(object sender, DoWorkEventArgs e) @@ -180,6 +184,8 @@ void Worker_DoWork(object sender, DoWorkEventArgs e) client = new UdpClient(MulticastPort); client.JoinMulticastGroup(MulticastIpAddress); + statusLabelReceiving.Text = "Trying to connect..."; + endPoint = null; while (!Worker.CancellationPending) { diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx index 3d78014a..9d193487 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx @@ -1,138 +1,141 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - False - - - False - - - False - - - False - - - False - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + False + + + False + + + False + + + False + + + 17, 17 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs index b53ae70f..971aef0e 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs @@ -80,6 +80,15 @@ internal static System.Drawing.Bitmap Action_Play_LG_16x16 { } } + /// + /// Looks up a localized string similar to IPTViewr\{0} {1}\Data. + /// + internal static string DefaultDumpFolder { + get { + return ResourceManager.GetString("DefaultDumpFolder", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.resx index 7731386a..543ab427 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.resx +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.resx @@ -1,137 +1,139 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - An error has occurred while processing your request - - - - ..\Resources\GuiTools.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - - ..\Resources\Status_Wait_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Action_Cancel_Red_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Action_Play_LG_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + An error has occurred while processing your request + + + + ..\Resources\GuiTools.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Status_Wait_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Cancel_Red_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Play_LG_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + IPTViewr\{0} {1}\Data + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs index 5d753691..c62c00ea 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs @@ -42,6 +42,8 @@ private void InitializeComponent() this.labelPort = new System.Windows.Forms.Label(); this.textIpAddress = new System.Windows.Forms.TextBox(); this.labelIpAddress = new System.Windows.Forms.Label(); + this.radioFormatXml = new System.Windows.Forms.RadioButton(); + this.radioFormatBinary = new System.Windows.Forms.RadioButton(); this.SuspendLayout(); // // textSegmentId @@ -86,11 +88,11 @@ private void InitializeComponent() this.textBoxResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxResult.Location = new System.Drawing.Point(13, 43); + this.textBoxResult.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxResult.Location = new System.Drawing.Point(13, 64); this.textBoxResult.Multiline = true; this.textBoxResult.Name = "textBoxResult"; - this.textBoxResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBoxResult.Size = new System.Drawing.Size(659, 357); + this.textBoxResult.Size = new System.Drawing.Size(659, 336); this.textBoxResult.TabIndex = 23; // // buttonDownload @@ -141,11 +143,35 @@ private void InitializeComponent() this.labelIpAddress.TabIndex = 12; this.labelIpAddress.Text = "IP address"; // + // radioFormatXml + // + this.radioFormatXml.AutoSize = true; + this.radioFormatXml.Checked = true; + this.radioFormatXml.Location = new System.Drawing.Point(310, 41); + this.radioFormatXml.Name = "radioFormatXml"; + this.radioFormatXml.Size = new System.Drawing.Size(149, 17); + this.radioFormatXml.TabIndex = 24; + this.radioFormatXml.TabStop = true; + this.radioFormatXml.Text = "Format as UTF-8 XML text"; + this.radioFormatXml.UseVisualStyleBackColor = true; + // + // radioFormatBinary + // + this.radioFormatBinary.AutoSize = true; + this.radioFormatBinary.Location = new System.Drawing.Point(491, 41); + this.radioFormatBinary.Name = "radioFormatBinary"; + this.radioFormatBinary.Size = new System.Drawing.Size(126, 17); + this.radioFormatBinary.TabIndex = 25; + this.radioFormatBinary.Text = "Format as binary data"; + this.radioFormatBinary.UseVisualStyleBackColor = true; + // // SimpleDvbStpDownloadForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.radioFormatBinary); + this.Controls.Add(this.radioFormatXml); this.Controls.Add(this.textSegmentId); this.Controls.Add(this.labelSegmentID); this.Controls.Add(this.textPayloadId); @@ -158,7 +184,7 @@ private void InitializeComponent() this.Controls.Add(this.labelIpAddress); this.Name = "SimpleDvbStpDownloadForm"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Text = "Simple DVB-STP Payload downloader"; + this.Text = "Simple DVB-STP Payload downloader - GuiTools"; this.ResumeLayout(false); this.PerformLayout(); @@ -176,6 +202,7 @@ private void InitializeComponent() private System.Windows.Forms.Label labelPort; private System.Windows.Forms.TextBox textIpAddress; private System.Windows.Forms.Label labelIpAddress; - + private System.Windows.Forms.RadioButton radioFormatXml; + private System.Windows.Forms.RadioButton radioFormatBinary; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs index 0f910355..6c4214cc 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs @@ -8,10 +8,12 @@ using System.Data; using System.Drawing; using System.Globalization; +using System.IO; using System.Linq; using System.Net; using System.Text; using System.Windows.Forms; +using System.Xml; namespace IpTviewr.Internal.Tools.GuiTools { @@ -60,7 +62,17 @@ private void buttonDownload_Click(object sender, EventArgs e) context = "After download"; if (downloader.IsOk) { - textBoxResult.Text = Encoding.UTF8.GetString(downloader.Response.PayloadData); + if (radioFormatBinary.Checked) + { + textBoxResult.ScrollBars = ScrollBars.Vertical; + textBoxResult.WordWrap = true; + } + else + { + textBoxResult.ScrollBars = ScrollBars.Both; + textBoxResult.WordWrap = false; + } // if-else + textBoxResult.Text = GetPayloadText(downloader.Response.PayloadData); } // if } catch (Exception ex) @@ -68,5 +80,43 @@ private void buttonDownload_Click(object sender, EventArgs e) MyApplication.HandleException(this, context, ex); } // try-catch } // buttonDownload_Click + + private string GetPayloadText(byte[] data) + { + if (radioFormatBinary.Checked) + { + var count = data.Length; + var buffer = new StringBuilder(count); + for (int index = 0; index < count; index++) + { + var b = data[index]; + buffer.Append((b < 32) ? '·' : (char)b); + } // for index + + return buffer.ToString(); + } + else + { + using (var input = new MemoryStream(data, false)) + { + var xmlDoc = new XmlDocument(); + xmlDoc.Load(input); + + var buffer = new StringBuilder(); + var settings = new XmlWriterSettings() + { + Indent = true, + WriteEndDocumentOnClose = true, + }; // settings + using (var writer = XmlWriter.Create(buffer, settings)) + { + xmlDoc.Save(writer); + } // using writer + + return buffer.ToString(); + } // using input + + } // if-else + } // GetPayloadText } // class SimpleDvbStpDownloadForm } // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.resx index f04ac047..b6dbc98e 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.resx +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.resx @@ -1,137 +1,136 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAd0SU1FB98I - GBEuJKCBFFEAAAAXdEVYdFNvZnR3YXJlAEdMRFBORyB2ZXIgMy40cYWk4QAAAAh0cE5HR0xEMwAAAABK - gCkfAAACA0lEQVQ4T2MAAXHr0Br90mXXNFP6Noma+aazcPFLgCVIAMy8ivrBRtVrXzguePDftHnHKznP - 9E5GZlYuqDxxgJmdW1a3YO5V+zk3/zvMvfXfoGj+CXYBMUWoNHGAlUdQ2ax5+2uHOdf/u658+t+yZdM1 - FjYOAag0cUDKKrDAdfnj/67L7v/33fXtv0F6xyKoFHGAhZ1L0H7K8Vdem9/+99/z9X/Q/i//eCSV9KHS - xAGD7L4lQUf//g8+8vu/25n//2UC81uhUsQBefvg2Kjz//97Hfn33/Tw///adasPQ6VwA0kDB2spE1cX - aWNnZ52w/PLQU//+W+z5899wBxBPPftURMPcQVjdzFJEx9aWg19EDKoNAdQDMhsjgM4NP/3/f+Sp//+d - 9/3+b7D563+9Ne/+ay95/l97zoP/qlPu/Ndv3v+ZV0zOCKoNFZjm9y+MuvL/f+CRP/9Nt3z9r7vq7X/N - hU/+K0+98V+m+9J/1Zajf/hl1f2gyjEBMxMzh2Prqh0+x/7/11n5+r/Ggkf/lSdf/y/dce6/SuvJf2I6 - dtlQpbgBFw+fqEX/wSsaS1//V5p09b9M2+n/Sh3n/8vYhnVAlRAG3MKSStpdx19JdVz4L9dx8b+CZ8Z8 - RgYGJqg0cUBExdBOq+PUN+WY1v3MjIw8UGHSgICkoikrK5sUlIsGGBgAKGPMOR3cOykAAAAASUVORK5C - YII= - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAd0SU1FB98I + GBEuJKCBFFEAAAAXdEVYdFNvZnR3YXJlAEdMRFBORyB2ZXIgMy40cYWk4QAAAgNJREFUOE9jAAFx69Aa + /dJl1zRT+jaJmvmms3DxS4AlSADMvIr6wUbVa184Lnjw37R5xys5z/RORmZWLqg8cYCZnVtWt2DuVfs5 + N/87zL3136Bo/gl2ATFFqDRxgJVHUNmseftrhznX/7uufPrfsmXTNRY2DgGoNHFAyiqwwHX54/+uy+7/ + 99317b9BesciqBRxgIWdS9B+yvFXXpvf/vff8/V/0P4v/3gklfSh0sQBg+y+JUFH//4PPvL7v9uZ//9l + AvNboVLEAXn74Nio8///ex3599/08P//2nWrD0OlcANJAwdrKRNXF2ljZ2edsPzy0FP//lvs+fPfcAcQ + Tz37VETD3EFY3cxSRMfWloNfRAyqDQHUAzIbI4DODT/9/3/kqf//nff9/m+w+et/vTXv/msvef5fe86D + /6pT7vzXb97/mVdMzgiqDRWY5vcvjLry/3/gkT//Tbd8/a+76u1/zYVP/itPvfFfpvvSf9WWo3/4ZdX9 + oMoxATMTM4dj66odPsf+/9dZ+fq/xoJH/5UnX/8v3XHuv0rryX9iOnbZUKW4ARcPn6hF/8ErGktf/1ea + dPW/TNvp/0od5//L2IZ1QJUQBtzCkkraXcdfSXVc+C/XcfG/gmfGfEYGBiaoNHFARMXQTqvj1DflmNb9 + zIyMPFBh0oCApKIpKyubFJSLBhgYAChjzDkd3DspAAAAAElFTkSuQmCC + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs index 2c7a7764..0d268025 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs +++ b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs @@ -11,8 +11,7 @@ public abstract class UiDvbStpBaseDownloadRequest { public UiDvbStpBaseDownloadRequest() { - // TODO: get default values from app configuration - ReceiveDatagramTimeout = 7500; + ReceiveDatagramTimeout = 10000; NoDataTimeout = 45000; DialogCloseDelay = 500; } // constructor From 6caca291e361ddd45189685e6dde030459c2755a Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 00:12:47 +0200 Subject: [PATCH 06/76] Fixed interop assembly not being generated Interop assembly for COM NetFwTypeLib (Windows Firewall) --- 1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj index 9d44ccac..d18842bf 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj @@ -226,7 +226,7 @@ 0 tlbimp False - True + False From 7fa7e09e34e26f55baa2f5019823b0cbec650cae Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 00:13:29 +0200 Subject: [PATCH 07/76] Changed signature --- .../Project.Common/Serialization/XmlSerialization.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs b/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs index 567eb2e7..d73e6bae 100644 --- a/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs +++ b/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs @@ -86,11 +86,11 @@ public static object Deserialize(Stream input, Type type, bool trimExtraWhitespa { using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) { - return Deserialize(reader, type, trimExtraWhitespace, namespaceReplacer); + return Deserialize(reader, type); } // using reader } // Deserialize - public static object Deserialize(XmlReader reader, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) + public static object Deserialize(XmlReader reader, Type type) { var serializer = new XmlSerializer(type); return serializer.Deserialize(reader); From 690fd268bfc5675e7d301e2d871e8a70fdb27884 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 00:24:16 +0200 Subject: [PATCH 08/76] Domain names must be lowercase --- 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs index b03e08a2..29071e5e 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs @@ -43,7 +43,9 @@ public UiBroadcastService() public static string GetKey(TextualIdentifier serviceIdentifier, string defaultDomainName) { - return string.Format(Properties.InvariantTexts.FormatServiceProviderKey, serviceIdentifier.ServiceName, serviceIdentifier.DomainName?? defaultDomainName); + var domain = serviceIdentifier.DomainName ?? defaultDomainName; + + return string.Format(Properties.InvariantTexts.FormatServiceProviderKey, serviceIdentifier.ServiceName.ToLowerInvariant(), domain.ToLowerInvariant()); } // CreateKey public UiBroadcastService(IpService service, string providerDomainName) @@ -51,7 +53,7 @@ public UiBroadcastService(IpService service, string providerDomainName) if (service == null) throw new ArgumentNullException("IpService service"); Data = service; - DomainName = Data.TextualIdentifier.DomainName ?? providerDomainName; + DomainName = (Data.TextualIdentifier.DomainName ?? providerDomainName).ToLowerInvariant(); Key = GetKey(service.TextualIdentifier, providerDomainName); } // constructor From 8492b5407e504af43da08af47c07f508be227c96 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 00:39:27 +0200 Subject: [PATCH 09/76] Solved time formatting error --- .../InternalTools/GuiTools/DvbStpStreamExplorerForm .cs | 4 ++-- .../InternalTools/GuiTools/MulticastStreamExplorerForm.cs | 2 +- 1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs index 578e8723..0bfb0113 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs @@ -80,7 +80,7 @@ private void buttonStart_Click(object sender, EventArgs e) context = "Dump folder: segments"; if (checkDumpSegments.Checked) { - DumpFolderSegments = Path.Combine(textBaseDumpFolder.Text, string.Format("DvbStpStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); + DumpFolderSegments = Path.Combine(textBaseDumpFolder.Text, string.Format("DvbStpStream\\{0}~{1}\\{2:yyyy-MM-dd HH-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); Directory.CreateDirectory(DumpFolderSegments); } else @@ -91,7 +91,7 @@ private void buttonStart_Click(object sender, EventArgs e) context = "Dump folder: sections"; if (checkDumpSections.Checked) { - DumpFolderSections = Path.Combine(textBaseDumpFolder.Text, string.Format("DvbStpStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}\\sections", MulticastIpAddress, MulticastPort, DateTime.Now)); + DumpFolderSections = Path.Combine(textBaseDumpFolder.Text, string.Format("DvbStpStream\\{0}~{1}\\{2:yyyy-MM-dd HH-mm-ss}\\sections", MulticastIpAddress, MulticastPort, DateTime.Now)); Directory.CreateDirectory(DumpFolderSections); } else diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs index 6a77d105..80cbd261 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs @@ -68,7 +68,7 @@ private void buttonStart_Click(object sender, EventArgs e) context = "Dump folder"; if (checkDumpDatagrams.Checked) { - DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("MulticastStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); + DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("MulticastStream\\{0}~{1}\\{2:yyyy-MM-dd HH-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); Directory.CreateDirectory(DumpFolder); } else diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs index 6e368c7a..7914781c 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs @@ -67,7 +67,7 @@ private void buttonStart_Click(object sender, EventArgs e) context = "Dump folder"; if (checkDumpDatagrams.Checked) { - DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("OpchStream\\{0}~{1}\\{2:yyyy-MM-dd hh-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); + DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("OpchStream\\{0}~{1}\\{2:yyyy-MM-dd HH-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); Directory.CreateDirectory(DumpFolder); } else From fb3d91433fbb7d4e21faad817b0d319204237737 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 00:40:39 +0200 Subject: [PATCH 10/76] Added Services.EPG.Serialization Code obtained from old, unreferenced project Services.EPG --- 1.5 'Kruger 60'/MovistarTV.sln | 1114 +++++++++-------- .../Services.EPG.Serialization/License.txt | 43 + .../Properties/AssemblyInfo.cs | 30 + .../Properties/AssemblySolutionInfo.cs | 20 + .../Services.EPG.Serialization.csproj | 71 ++ .../TvAnytime/Common.cs | 28 +- .../TvAnytime/ExtendedPurchaseItem.cs | 20 + .../TvAnytime/Mpeg7Name.cs | 78 +- .../TvAnytime/NamespaceUnification.cs | 30 + .../TvAnytime/TvaBoolean.cs | 74 +- .../TvAnytime/TvaInstanceDescription.cs | 80 +- .../TvAnytime/TvaMain.cs | 51 +- .../TvAnytime/TvaName.cs | 80 +- .../TvAnytime/TvaParentalGuidance.cs | 56 +- .../TvAnytime/TvaProgram.cs | 54 +- .../TvAnytime/TvaProgramDescription.cs | 54 +- .../TvAnytime/TvaProgramLocationTable.cs | 54 +- .../TvAnytime/TvaSchedule.cs | 82 +- .../TvAnytime/TvaScheduleEvent.cs | 302 ++--- 19 files changed, 1273 insertions(+), 1048 deletions(-) create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/License.txt create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblyInfo.cs create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblySolutionInfo.cs create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/Common.cs (64%) create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/ExtendedPurchaseItem.cs rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/Mpeg7Name.cs (86%) create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/NamespaceUnification.cs rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaBoolean.cs (89%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaInstanceDescription.cs (87%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaMain.cs (58%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaName.cs (86%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaParentalGuidance.cs (86%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaProgram.cs (85%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaProgramDescription.cs (86%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaProgramLocationTable.cs (85%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaSchedule.cs (87%) rename 1.5 'Kruger 60'/{Services.EPG => Services.EPG.Serialization}/TvAnytime/TvaScheduleEvent.cs (94%) diff --git a/1.5 'Kruger 60'/MovistarTV.sln b/1.5 'Kruger 60'/MovistarTV.sln index 124a135d..a3f0facf 100644 --- a/1.5 'Kruger 60'/MovistarTV.sln +++ b/1.5 'Kruger 60'/MovistarTV.sln @@ -1,547 +1,567 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelList", "ChannelList\ChannelList.csproj", "{3FB48C93-85EC-4894-8FE7-E035DDC0618C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvbStpClient", "DvbStpClient\DvbStpClient.csproj", "{8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Config", "UiServices.Config\UiServices.Config.csproj", "{A722DE9D-AE51-479C-825F-A19F4C69BD75}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Discovery", "UiServices.Discovery\UiServices.Discovery.csproj", "{7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTvRecorderLauncher", "IpTvRecorderLauncher\IpTvRecorderLauncher.csproj", "{DDA7264E-C003-4E3A-B657-27EE2543F101}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstTimeConfig", "FirstTimeConfig\FirstTimeConfig.csproj", "{6B23C0BE-C1CE-457A-B701-55870E355560}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{227520B6-B11F-45B8-84B2-8FDF27A2492C}" - ProjectSection(SolutionItems) = preProject - AssemblySolutionInfo.cs = AssemblySolutionInfo.cs - ..\LICENSE = ..\LICENSE - ..\LICENSE_ES = ..\LICENSE_ES - movistartv-config.xml = movistartv-config.xml - ..\README.md = ..\README.md - solution-license.rtf = solution-license.rtf - solution-license.txt = solution-license.txt - solution-license_es.rtf = solution-license_es.rtf - solution-license_es.txt = solution-license_es.txt - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Forms", "UiServices.Forms\UiServices.Forms.csproj", "{90F750B3-64DB-493F-96A6-E68DE5EA60A1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Setup", "Setup", "{B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MainSetup", "Setup\MainSetup\MainSetup.wixproj", "{F3FC11C7-8850-4874-9CF3-8BA4DE43959A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Logos", "Logos\Logos.csproj", "{65DD367D-A89D-4F89-9231-2009EF0B31AF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record.Serialization", "Services.Record.Serialization\Services.Record.Serialization.csproj", "{074C14ED-C574-46D2-B9DC-C1B5F65D9A69}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.DvbStpClient", "UiServices.DvbStpClient\UiServices.DvbStpClient.csproj", "{BA481E42-F570-4D2C-94D4-21C4CCE27762}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record", "Services.Record\Services.Record.csproj", "{A4172CDD-C8FD-4C91-9AAF-54A948F26273}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Record", "UiServices.Record\UiServices.Record.csproj", "{971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DB", "DB", "{21AADDF8-BB39-4D0F-A6EF-EFD64AB3BC16}" - ProjectSection(SolutionItems) = preProject - DB\EPG.sdf = DB\EPG.sdf - DB\RecordTasks.sdf = DB\RecordTasks.sdf - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InternalTools", "InternalTools", "{C1DAEFDD-689E-4324-A05D-66FA30B574B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleExperiments", "InternalTools\ConsoleExperiments\ConsoleExperiments.csproj", "{0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project.Common", "Project.Common\Project.Common.csproj", "{8DA15060-5A78-4F89-A9F1-7AA56B0D622C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.SqlServerCE", "Services.SqlServerCE\Services.SqlServerCE.csproj", "{3A053F34-4EDF-4071-B966-923255A0AE14}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common.UI", "Common.UI", "{1A7A0EC8-D85A-4674-8DF7-89FF64D0A158}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{4B6AC9D7-14AF-4C52-9154-59F4B4A3EC0E}" - ProjectSection(SolutionItems) = preProject - Common.UI\Resources\Action_Add_16xL.png = Common.UI\Resources\Action_Add_16xL.png - Common.UI\Resources\Action_Add_16xM.png = Common.UI\Resources\Action_Add_16xM.png - Common.UI\Resources\Action_Add_16xS.png = Common.UI\Resources\Action_Add_16xS.png - Common.UI\Resources\Action_AttachFile_16x16.png = Common.UI\Resources\Action_AttachFile_16x16.png - Common.UI\Resources\Action_Back_16x16.png = Common.UI\Resources\Action_Back_16x16.png - Common.UI\Resources\Action_Cancel_16x16.png = Common.UI\Resources\Action_Cancel_16x16.png - Common.UI\Resources\Action_Cancel_Red_16x16.png = Common.UI\Resources\Action_Cancel_Red_16x16.png - Common.UI\Resources\Action_Close_16x16.png = Common.UI\Resources\Action_Close_16x16.png - Common.UI\Resources\Action_Copy_Clip_16x16.png = Common.UI\Resources\Action_Copy_Clip_16x16.png - Common.UI\Resources\Action_Copy_Table.png = Common.UI\Resources\Action_Copy_Table.png - Common.UI\Resources\Action_Delete_16x16.png = Common.UI\Resources\Action_Delete_16x16.png - Common.UI\Resources\Action_Edit_16x16.png = Common.UI\Resources\Action_Edit_16x16.png - Common.UI\Resources\Action_EditTask_16x16.png = Common.UI\Resources\Action_EditTask_16x16.png - Common.UI\Resources\Action_Export_Data.png = Common.UI\Resources\Action_Export_Data.png - Common.UI\Resources\Action_Export_List_16x16.png = Common.UI\Resources\Action_Export_List_16x16.png - Common.UI\Resources\Action_Favorites_16x16.png = Common.UI\Resources\Action_Favorites_16x16.png - Common.UI\Resources\Action_Forward_16x16.png = Common.UI\Resources\Action_Forward_16x16.png - Common.UI\Resources\Action_FullView_16x16.png = Common.UI\Resources\Action_FullView_16x16.png - Common.UI\Resources\Action_Go_16x16.png = Common.UI\Resources\Action_Go_16x16.png - Common.UI\Resources\Action_GoNextDown_16x16.png = Common.UI\Resources\Action_GoNextDown_16x16.png - Common.UI\Resources\Action_GoPreviousUp_16x16.png = Common.UI\Resources\Action_GoPreviousUp_16x16.png - Common.UI\Resources\Action_History_MD_16x16.png = Common.UI\Resources\Action_History_MD_16x16.png - Common.UI\Resources\Action_Hyperlink_16x16.png = Common.UI\Resources\Action_Hyperlink_16x16.png - Common.UI\Resources\Action_Import_16x16.png = Common.UI\Resources\Action_Import_16x16.png - Common.UI\Resources\Action_Link_16x16.png = Common.UI\Resources\Action_Link_16x16.png - Common.UI\Resources\Action_NextRecord_16x16.png = Common.UI\Resources\Action_NextRecord_16x16.png - Common.UI\Resources\Action_Ok_16x16.png = Common.UI\Resources\Action_Ok_16x16.png - Common.UI\Resources\Action_Play_LG_16x16.png = Common.UI\Resources\Action_Play_LG_16x16.png - Common.UI\Resources\Action_PreviousRecord_16x16.png = Common.UI\Resources\Action_PreviousRecord_16x16.png - Common.UI\Resources\Action_Properties_16x16.png = Common.UI\Resources\Action_Properties_16x16.png - Common.UI\Resources\Action_Property_Add_16x16.png = Common.UI\Resources\Action_Property_Add_16x16.png - Common.UI\Resources\Action_Property_Edit_16x16.png = Common.UI\Resources\Action_Property_Edit_16x16.png - Common.UI\Resources\Action_Record_16x16.png = Common.UI\Resources\Action_Record_16x16.png - Common.UI\Resources\Action_Refresh_Blue_16x16.png = Common.UI\Resources\Action_Refresh_Blue_16x16.png - Common.UI\Resources\Action_Repair_16x16.png = Common.UI\Resources\Action_Repair_16x16.png - Common.UI\Resources\Action_ReportError_16x16.png = Common.UI\Resources\Action_ReportError_16x16.png - Common.UI\Resources\Action_Run_16x16.png = Common.UI\Resources\Action_Run_16x16.png - Common.UI\Resources\Action_Save_16x16.png = Common.UI\Resources\Action_Save_16x16.png - Common.UI\Resources\Action_Settings_16x16.png = Common.UI\Resources\Action_Settings_16x16.png - Common.UI\Resources\Action_SortAscending_16x16.png = Common.UI\Resources\Action_SortAscending_16x16.png - Common.UI\Resources\Action_SortDescending_16x16.png = Common.UI\Resources\Action_SortDescending_16x16.png - Common.UI\Resources\ListView_Content.ico = Common.UI\Resources\ListView_Content.ico - Common.UI\Resources\ListView_Details.ico = Common.UI\Resources\ListView_Details.ico - Common.UI\Resources\ListView_Details_16x16.png = Common.UI\Resources\ListView_Details_16x16.png - Common.UI\Resources\ListView_Details_24x24.png = Common.UI\Resources\ListView_Details_24x24.png - Common.UI\Resources\ListView_ExtraLargeIcons.ico = Common.UI\Resources\ListView_ExtraLargeIcons.ico - Common.UI\Resources\ListView_LargeIcons.ico = Common.UI\Resources\ListView_LargeIcons.ico - Common.UI\Resources\ListView_List.ico = Common.UI\Resources\ListView_List.ico - Common.UI\Resources\ListView_List_16x16.png = Common.UI\Resources\ListView_List_16x16.png - Common.UI\Resources\ListView_List_24x24.png = Common.UI\Resources\ListView_List_24x24.png - Common.UI\Resources\ListView_MediumIcons.ico = Common.UI\Resources\ListView_MediumIcons.ico - Common.UI\Resources\ListView_MediumIcons_16x16.png = Common.UI\Resources\ListView_MediumIcons_16x16.png - Common.UI\Resources\ListView_MediumIcons_24x24.png = Common.UI\Resources\ListView_MediumIcons_24x24.png - Common.UI\Resources\ListView_SmallIcons.ico = Common.UI\Resources\ListView_SmallIcons.ico - Common.UI\Resources\ListView_SmallIcons_16x16.png = Common.UI\Resources\ListView_SmallIcons_16x16.png - Common.UI\Resources\ListView_SmallIcons_24x24.png = Common.UI\Resources\ListView_SmallIcons_24x24.png - Common.UI\Resources\ListView_Tiles.ico = Common.UI\Resources\ListView_Tiles.ico - Common.UI\Resources\ListView_Tiles_16x16.png = Common.UI\Resources\ListView_Tiles_16x16.png - Common.UI\Resources\ListView_Tiles_24x24.png = Common.UI\Resources\ListView_Tiles_24x24.png - Common.UI\Resources\Status_Download_Blue_16x16.png = Common.UI\Resources\Status_Download_Blue_16x16.png - Common.UI\Resources\Status_Error_24x24.png = Common.UI\Resources\Status_Error_24x24.png - Common.UI\Resources\Status_Info_16x16.png = Common.UI\Resources\Status_Info_16x16.png - Common.UI\Resources\Status_Info_24x24.png = Common.UI\Resources\Status_Info_24x24.png - Common.UI\Resources\Status_Ok_Blue_16x16.png = Common.UI\Resources\Status_Ok_Blue_16x16.png - Common.UI\Resources\Status_Ok_Circle_16x16.png = Common.UI\Resources\Status_Ok_Circle_16x16.png - Common.UI\Resources\Status_Ok_Green_16x16.png = Common.UI\Resources\Status_Ok_Green_16x16.png - Common.UI\Resources\Status_Ok_SmallCircle_16x16.png = Common.UI\Resources\Status_Ok_SmallCircle_16x16.png - Common.UI\Resources\Status_Pause_16x16.png = Common.UI\Resources\Status_Pause_16x16.png - Common.UI\Resources\Status_Pause_Small_16x16.png = Common.UI\Resources\Status_Pause_Small_16x16.png - Common.UI\Resources\Status_Pending_16x16.png = Common.UI\Resources\Status_Pending_16x16.png - Common.UI\Resources\Status_Run_16x16.png = Common.UI\Resources\Status_Run_16x16.png - Common.UI\Resources\Status_Run_Small_16x16.png = Common.UI\Resources\Status_Run_Small_16x16.png - Common.UI\Resources\Status_Success_24x24.png = Common.UI\Resources\Status_Success_24x24.png - Common.UI\Resources\Status_Unknown_16x616.png = Common.UI\Resources\Status_Unknown_16x616.png - Common.UI\Resources\Status_Wait_16x16.png = Common.UI\Resources\Status_Wait_16x16.png - Common.UI\Resources\Status_Warning_16x16.png = Common.UI\Resources\Status_Warning_16x16.png - Common.UI\Resources\Status_Warning_24x24.png = Common.UI\Resources\Status_Warning_24x24.png - Common.UI\Resources\Status_Warning_48x48.png = Common.UI\Resources\Status_Warning_48x48.png - Common.UI\Resources\WaitClock_128x128.png = Common.UI\Resources\WaitClock_128x128.png - Common.UI\Resources\WaitClock_16x16.png = Common.UI\Resources\WaitClock_16x16.png - Common.UI\Resources\WaitClock_24x24.png = Common.UI\Resources\WaitClock_24x24.png - Common.UI\Resources\WaitClock_256x256.png = Common.UI\Resources\WaitClock_256x256.png - Common.UI\Resources\WaitClock_32x32.png = Common.UI\Resources\WaitClock_32x32.png - Common.UI\Resources\WaitClock_48x48.png = Common.UI\Resources\WaitClock_48x48.png - Common.UI\Resources\WaitClock_64x64.png = Common.UI\Resources\WaitClock_64x64.png - Common.UI\Resources\WaitClock_96x96.png = Common.UI\Resources\WaitClock_96x96.png - Common.UI\Resources\WaitClock_Icon.ico = Common.UI\Resources\WaitClock_Icon.ico - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Common", "UiServices.Common\UiServices.Common.csproj", "{76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etsi.Ts102034", "Etsi.Ts102034\Etsi.Ts102034.csproj", "{B91C438D-0333-4D06-86CD-74CE82DF6F40}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpgDownloader", "InternalTools\EpgDownloader\EpgDownloader.csproj", "{BE376EFA-C7CC-44DB-B41E-506DBCB66A25}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GuiTools", "InternalTools\GuiTools\GuiTools.csproj", "{9D077B2F-1E74-4031-B28D-3F6F97829BEC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.IpTvProvider", "Core.IpTvProvider\Core.IpTvProvider.csproj", "{36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTv.MovistarPlus", "IpTv.MovistarPlus\IpTv.MovistarPlus.csproj", "{E1748F45-DD50-4479-96F6-F7EBA6F3E28B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project.Native", "Project.Native\Project.Native.csproj", "{8986CD52-0C65-42D6-9C47-20FF47CF87BB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelLogos", "InternalTools\ChannelLogos\ChannelLogos.csproj", "{A51CC220-48C4-46F6-BF5D-3178CC317426}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x86 = Debug|x86 - Release + Setup|Any CPU = Release + Setup|Any CPU - Release + Setup|Mixed Platforms = Release + Setup|Mixed Platforms - Release + Setup|x86 = Release + Setup|x86 - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|x86.ActiveCfg = Debug|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Any CPU.Build.0 = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|x86.ActiveCfg = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|x86.ActiveCfg = Debug|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Any CPU.Build.0 = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|x86.ActiveCfg = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|x86.ActiveCfg = Debug|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Any CPU.Build.0 = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|x86.ActiveCfg = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|x86.ActiveCfg = Debug|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Any CPU.Build.0 = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|x86.ActiveCfg = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|x86.ActiveCfg = Debug|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Any CPU.Build.0 = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|x86.ActiveCfg = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|x86.ActiveCfg = Debug|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Any CPU.Build.0 = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|x86.ActiveCfg = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Any CPU.Build.0 = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|x86.ActiveCfg = Release|Any CPU - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|Any CPU.ActiveCfg = Debug|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|x86.ActiveCfg = Debug|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|x86.Build.0 = Debug|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Any CPU.ActiveCfg = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Mixed Platforms.ActiveCfg = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Mixed Platforms.Build.0 = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|x86.ActiveCfg = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|x86.Build.0 = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|Any CPU.ActiveCfg = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|x86.ActiveCfg = Release|x86 - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|x86.Build.0 = Release|x86 - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|x86.ActiveCfg = Debug|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Any CPU.Build.0 = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|x86.ActiveCfg = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|x86.ActiveCfg = Debug|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Any CPU.Build.0 = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|x86.ActiveCfg = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|x86.ActiveCfg = Debug|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Any CPU.Build.0 = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|x86.ActiveCfg = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|x86.ActiveCfg = Debug|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Any CPU.Build.0 = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|x86.ActiveCfg = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Any CPU.Build.0 = Debug|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|x86.ActiveCfg = Debug|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Any CPU.ActiveCfg = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Any CPU.Build.0 = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|x86.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.Build.0 = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|x86.ActiveCfg = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|x86.ActiveCfg = Debug|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Any CPU.Build.0 = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|x86.ActiveCfg = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Any CPU.Build.0 = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|x86.ActiveCfg = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|x86.ActiveCfg = Debug|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Any CPU.Build.0 = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|x86.ActiveCfg = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|x86.ActiveCfg = Debug|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Any CPU.Build.0 = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|x86.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|x86.ActiveCfg = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Any CPU.Build.0 = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|x86.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.Build.0 = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|x86.ActiveCfg = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|x86.ActiveCfg = Debug|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Any CPU.Build.0 = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|x86.ActiveCfg = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|x86.ActiveCfg = Debug|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Any CPU.Build.0 = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|x86.ActiveCfg = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|x86.ActiveCfg = Debug|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Any CPU.Build.0 = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|x86.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|x86.ActiveCfg = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|x86.Build.0 = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|x86.Build.0 = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.Build.0 = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|x86.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F3FC11C7-8850-4874-9CF3-8BA4DE43959A} = {B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB} - {21AADDF8-BB39-4D0F-A6EF-EFD64AB3BC16} = {227520B6-B11F-45B8-84B2-8FDF27A2492C} - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} - {1A7A0EC8-D85A-4674-8DF7-89FF64D0A158} = {227520B6-B11F-45B8-84B2-8FDF27A2492C} - {4B6AC9D7-14AF-4C52-9154-59F4B4A3EC0E} = {1A7A0EC8-D85A-4674-8DF7-89FF64D0A158} - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} - {9D077B2F-1E74-4031-B28D-3F6F97829BEC} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} - {A51CC220-48C4-46F6-BF5D-3178CC317426} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelList", "ChannelList\ChannelList.csproj", "{3FB48C93-85EC-4894-8FE7-E035DDC0618C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvbStpClient", "DvbStpClient\DvbStpClient.csproj", "{8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Config", "UiServices.Config\UiServices.Config.csproj", "{A722DE9D-AE51-479C-825F-A19F4C69BD75}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Discovery", "UiServices.Discovery\UiServices.Discovery.csproj", "{7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTvRecorderLauncher", "IpTvRecorderLauncher\IpTvRecorderLauncher.csproj", "{DDA7264E-C003-4E3A-B657-27EE2543F101}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirstTimeConfig", "FirstTimeConfig\FirstTimeConfig.csproj", "{6B23C0BE-C1CE-457A-B701-55870E355560}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{227520B6-B11F-45B8-84B2-8FDF27A2492C}" + ProjectSection(SolutionItems) = preProject + AssemblySolutionInfo.cs = AssemblySolutionInfo.cs + ..\LICENSE = ..\LICENSE + ..\LICENSE_ES = ..\LICENSE_ES + movistartv-config.xml = movistartv-config.xml + ..\README.md = ..\README.md + solution-license.rtf = solution-license.rtf + solution-license.txt = solution-license.txt + solution-license_es.rtf = solution-license_es.rtf + solution-license_es.txt = solution-license_es.txt + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Forms", "UiServices.Forms\UiServices.Forms.csproj", "{90F750B3-64DB-493F-96A6-E68DE5EA60A1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Setup", "Setup", "{B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MainSetup", "Setup\MainSetup\MainSetup.wixproj", "{F3FC11C7-8850-4874-9CF3-8BA4DE43959A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Logos", "Logos\Logos.csproj", "{65DD367D-A89D-4F89-9231-2009EF0B31AF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record.Serialization", "Services.Record.Serialization\Services.Record.Serialization.csproj", "{074C14ED-C574-46D2-B9DC-C1B5F65D9A69}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.DvbStpClient", "UiServices.DvbStpClient\UiServices.DvbStpClient.csproj", "{BA481E42-F570-4D2C-94D4-21C4CCE27762}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record", "Services.Record\Services.Record.csproj", "{A4172CDD-C8FD-4C91-9AAF-54A948F26273}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Record", "UiServices.Record\UiServices.Record.csproj", "{971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DB", "DB", "{21AADDF8-BB39-4D0F-A6EF-EFD64AB3BC16}" + ProjectSection(SolutionItems) = preProject + DB\EPG.sdf = DB\EPG.sdf + DB\RecordTasks.sdf = DB\RecordTasks.sdf + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InternalTools", "InternalTools", "{C1DAEFDD-689E-4324-A05D-66FA30B574B5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleExperiments", "InternalTools\ConsoleExperiments\ConsoleExperiments.csproj", "{0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project.Common", "Project.Common\Project.Common.csproj", "{8DA15060-5A78-4F89-A9F1-7AA56B0D622C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.SqlServerCE", "Services.SqlServerCE\Services.SqlServerCE.csproj", "{3A053F34-4EDF-4071-B966-923255A0AE14}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common.UI", "Common.UI", "{1A7A0EC8-D85A-4674-8DF7-89FF64D0A158}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{4B6AC9D7-14AF-4C52-9154-59F4B4A3EC0E}" + ProjectSection(SolutionItems) = preProject + Common.UI\Resources\Action_Add_16xL.png = Common.UI\Resources\Action_Add_16xL.png + Common.UI\Resources\Action_Add_16xM.png = Common.UI\Resources\Action_Add_16xM.png + Common.UI\Resources\Action_Add_16xS.png = Common.UI\Resources\Action_Add_16xS.png + Common.UI\Resources\Action_AttachFile_16x16.png = Common.UI\Resources\Action_AttachFile_16x16.png + Common.UI\Resources\Action_Back_16x16.png = Common.UI\Resources\Action_Back_16x16.png + Common.UI\Resources\Action_Cancel_16x16.png = Common.UI\Resources\Action_Cancel_16x16.png + Common.UI\Resources\Action_Cancel_Red_16x16.png = Common.UI\Resources\Action_Cancel_Red_16x16.png + Common.UI\Resources\Action_Close_16x16.png = Common.UI\Resources\Action_Close_16x16.png + Common.UI\Resources\Action_Copy_Clip_16x16.png = Common.UI\Resources\Action_Copy_Clip_16x16.png + Common.UI\Resources\Action_Copy_Table.png = Common.UI\Resources\Action_Copy_Table.png + Common.UI\Resources\Action_Delete_16x16.png = Common.UI\Resources\Action_Delete_16x16.png + Common.UI\Resources\Action_Edit_16x16.png = Common.UI\Resources\Action_Edit_16x16.png + Common.UI\Resources\Action_EditTask_16x16.png = Common.UI\Resources\Action_EditTask_16x16.png + Common.UI\Resources\Action_Export_Data.png = Common.UI\Resources\Action_Export_Data.png + Common.UI\Resources\Action_Export_List_16x16.png = Common.UI\Resources\Action_Export_List_16x16.png + Common.UI\Resources\Action_Favorites_16x16.png = Common.UI\Resources\Action_Favorites_16x16.png + Common.UI\Resources\Action_Forward_16x16.png = Common.UI\Resources\Action_Forward_16x16.png + Common.UI\Resources\Action_FullView_16x16.png = Common.UI\Resources\Action_FullView_16x16.png + Common.UI\Resources\Action_Go_16x16.png = Common.UI\Resources\Action_Go_16x16.png + Common.UI\Resources\Action_GoNextDown_16x16.png = Common.UI\Resources\Action_GoNextDown_16x16.png + Common.UI\Resources\Action_GoPreviousUp_16x16.png = Common.UI\Resources\Action_GoPreviousUp_16x16.png + Common.UI\Resources\Action_History_MD_16x16.png = Common.UI\Resources\Action_History_MD_16x16.png + Common.UI\Resources\Action_Hyperlink_16x16.png = Common.UI\Resources\Action_Hyperlink_16x16.png + Common.UI\Resources\Action_Import_16x16.png = Common.UI\Resources\Action_Import_16x16.png + Common.UI\Resources\Action_Link_16x16.png = Common.UI\Resources\Action_Link_16x16.png + Common.UI\Resources\Action_NextRecord_16x16.png = Common.UI\Resources\Action_NextRecord_16x16.png + Common.UI\Resources\Action_Ok_16x16.png = Common.UI\Resources\Action_Ok_16x16.png + Common.UI\Resources\Action_Play_LG_16x16.png = Common.UI\Resources\Action_Play_LG_16x16.png + Common.UI\Resources\Action_PreviousRecord_16x16.png = Common.UI\Resources\Action_PreviousRecord_16x16.png + Common.UI\Resources\Action_Properties_16x16.png = Common.UI\Resources\Action_Properties_16x16.png + Common.UI\Resources\Action_Property_Add_16x16.png = Common.UI\Resources\Action_Property_Add_16x16.png + Common.UI\Resources\Action_Property_Edit_16x16.png = Common.UI\Resources\Action_Property_Edit_16x16.png + Common.UI\Resources\Action_Record_16x16.png = Common.UI\Resources\Action_Record_16x16.png + Common.UI\Resources\Action_Refresh_Blue_16x16.png = Common.UI\Resources\Action_Refresh_Blue_16x16.png + Common.UI\Resources\Action_Repair_16x16.png = Common.UI\Resources\Action_Repair_16x16.png + Common.UI\Resources\Action_ReportError_16x16.png = Common.UI\Resources\Action_ReportError_16x16.png + Common.UI\Resources\Action_Run_16x16.png = Common.UI\Resources\Action_Run_16x16.png + Common.UI\Resources\Action_Save_16x16.png = Common.UI\Resources\Action_Save_16x16.png + Common.UI\Resources\Action_Settings_16x16.png = Common.UI\Resources\Action_Settings_16x16.png + Common.UI\Resources\Action_SortAscending_16x16.png = Common.UI\Resources\Action_SortAscending_16x16.png + Common.UI\Resources\Action_SortDescending_16x16.png = Common.UI\Resources\Action_SortDescending_16x16.png + Common.UI\Resources\ListView_Content.ico = Common.UI\Resources\ListView_Content.ico + Common.UI\Resources\ListView_Details.ico = Common.UI\Resources\ListView_Details.ico + Common.UI\Resources\ListView_Details_16x16.png = Common.UI\Resources\ListView_Details_16x16.png + Common.UI\Resources\ListView_Details_24x24.png = Common.UI\Resources\ListView_Details_24x24.png + Common.UI\Resources\ListView_ExtraLargeIcons.ico = Common.UI\Resources\ListView_ExtraLargeIcons.ico + Common.UI\Resources\ListView_LargeIcons.ico = Common.UI\Resources\ListView_LargeIcons.ico + Common.UI\Resources\ListView_List.ico = Common.UI\Resources\ListView_List.ico + Common.UI\Resources\ListView_List_16x16.png = Common.UI\Resources\ListView_List_16x16.png + Common.UI\Resources\ListView_List_24x24.png = Common.UI\Resources\ListView_List_24x24.png + Common.UI\Resources\ListView_MediumIcons.ico = Common.UI\Resources\ListView_MediumIcons.ico + Common.UI\Resources\ListView_MediumIcons_16x16.png = Common.UI\Resources\ListView_MediumIcons_16x16.png + Common.UI\Resources\ListView_MediumIcons_24x24.png = Common.UI\Resources\ListView_MediumIcons_24x24.png + Common.UI\Resources\ListView_SmallIcons.ico = Common.UI\Resources\ListView_SmallIcons.ico + Common.UI\Resources\ListView_SmallIcons_16x16.png = Common.UI\Resources\ListView_SmallIcons_16x16.png + Common.UI\Resources\ListView_SmallIcons_24x24.png = Common.UI\Resources\ListView_SmallIcons_24x24.png + Common.UI\Resources\ListView_Tiles.ico = Common.UI\Resources\ListView_Tiles.ico + Common.UI\Resources\ListView_Tiles_16x16.png = Common.UI\Resources\ListView_Tiles_16x16.png + Common.UI\Resources\ListView_Tiles_24x24.png = Common.UI\Resources\ListView_Tiles_24x24.png + Common.UI\Resources\Status_Download_Blue_16x16.png = Common.UI\Resources\Status_Download_Blue_16x16.png + Common.UI\Resources\Status_Error_24x24.png = Common.UI\Resources\Status_Error_24x24.png + Common.UI\Resources\Status_Info_16x16.png = Common.UI\Resources\Status_Info_16x16.png + Common.UI\Resources\Status_Info_24x24.png = Common.UI\Resources\Status_Info_24x24.png + Common.UI\Resources\Status_Ok_Blue_16x16.png = Common.UI\Resources\Status_Ok_Blue_16x16.png + Common.UI\Resources\Status_Ok_Circle_16x16.png = Common.UI\Resources\Status_Ok_Circle_16x16.png + Common.UI\Resources\Status_Ok_Green_16x16.png = Common.UI\Resources\Status_Ok_Green_16x16.png + Common.UI\Resources\Status_Ok_SmallCircle_16x16.png = Common.UI\Resources\Status_Ok_SmallCircle_16x16.png + Common.UI\Resources\Status_Pause_16x16.png = Common.UI\Resources\Status_Pause_16x16.png + Common.UI\Resources\Status_Pause_Small_16x16.png = Common.UI\Resources\Status_Pause_Small_16x16.png + Common.UI\Resources\Status_Pending_16x16.png = Common.UI\Resources\Status_Pending_16x16.png + Common.UI\Resources\Status_Run_16x16.png = Common.UI\Resources\Status_Run_16x16.png + Common.UI\Resources\Status_Run_Small_16x16.png = Common.UI\Resources\Status_Run_Small_16x16.png + Common.UI\Resources\Status_Success_24x24.png = Common.UI\Resources\Status_Success_24x24.png + Common.UI\Resources\Status_Unknown_16x616.png = Common.UI\Resources\Status_Unknown_16x616.png + Common.UI\Resources\Status_Wait_16x16.png = Common.UI\Resources\Status_Wait_16x16.png + Common.UI\Resources\Status_Warning_16x16.png = Common.UI\Resources\Status_Warning_16x16.png + Common.UI\Resources\Status_Warning_24x24.png = Common.UI\Resources\Status_Warning_24x24.png + Common.UI\Resources\Status_Warning_48x48.png = Common.UI\Resources\Status_Warning_48x48.png + Common.UI\Resources\WaitClock_128x128.png = Common.UI\Resources\WaitClock_128x128.png + Common.UI\Resources\WaitClock_16x16.png = Common.UI\Resources\WaitClock_16x16.png + Common.UI\Resources\WaitClock_24x24.png = Common.UI\Resources\WaitClock_24x24.png + Common.UI\Resources\WaitClock_256x256.png = Common.UI\Resources\WaitClock_256x256.png + Common.UI\Resources\WaitClock_32x32.png = Common.UI\Resources\WaitClock_32x32.png + Common.UI\Resources\WaitClock_48x48.png = Common.UI\Resources\WaitClock_48x48.png + Common.UI\Resources\WaitClock_64x64.png = Common.UI\Resources\WaitClock_64x64.png + Common.UI\Resources\WaitClock_96x96.png = Common.UI\Resources\WaitClock_96x96.png + Common.UI\Resources\WaitClock_Icon.ico = Common.UI\Resources\WaitClock_Icon.ico + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Common", "UiServices.Common\UiServices.Common.csproj", "{76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etsi.Ts102034", "Etsi.Ts102034\Etsi.Ts102034.csproj", "{B91C438D-0333-4D06-86CD-74CE82DF6F40}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpgDownloader", "InternalTools\EpgDownloader\EpgDownloader.csproj", "{BE376EFA-C7CC-44DB-B41E-506DBCB66A25}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GuiTools", "InternalTools\GuiTools\GuiTools.csproj", "{9D077B2F-1E74-4031-B28D-3F6F97829BEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.IpTvProvider", "Core.IpTvProvider\Core.IpTvProvider.csproj", "{36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTv.MovistarPlus", "IpTv.MovistarPlus\IpTv.MovistarPlus.csproj", "{E1748F45-DD50-4479-96F6-F7EBA6F3E28B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project.Native", "Project.Native\Project.Native.csproj", "{8986CD52-0C65-42D6-9C47-20FF47CF87BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelLogos", "InternalTools\ChannelLogos\ChannelLogos.csproj", "{A51CC220-48C4-46F6-BF5D-3178CC317426}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.EPG.Serialization", "Services.EPG.Serialization\Services.EPG.Serialization.csproj", "{5A171DBB-855C-452B-93C6-229C7AA6C7A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release + Setup|Any CPU = Release + Setup|Any CPU + Release + Setup|Mixed Platforms = Release + Setup|Mixed Platforms + Release + Setup|x86 = Release + Setup|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|x86.ActiveCfg = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Any CPU.Build.0 = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|x86.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|x86.ActiveCfg = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Any CPU.Build.0 = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|x86.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|x86.ActiveCfg = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Any CPU.Build.0 = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|x86.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|x86.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|x86.ActiveCfg = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Any CPU.Build.0 = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|x86.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Any CPU.Build.0 = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|x86.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|x86.ActiveCfg = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Any CPU.Build.0 = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|x86.ActiveCfg = Release|Any CPU + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|x86.ActiveCfg = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|x86.Build.0 = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Any CPU.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Mixed Platforms.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Mixed Platforms.Build.0 = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|x86.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|x86.Build.0 = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|Any CPU.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|x86.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|x86.Build.0 = Release|x86 + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|x86.ActiveCfg = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Any CPU.Build.0 = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|x86.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|x86.ActiveCfg = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Any CPU.Build.0 = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|x86.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|x86.ActiveCfg = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Any CPU.Build.0 = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|x86.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|x86.ActiveCfg = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Any CPU.Build.0 = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|x86.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Any CPU.Build.0 = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|x86.ActiveCfg = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Any CPU.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Any CPU.Build.0 = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|x86.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|x86.ActiveCfg = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.Build.0 = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|x86.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|x86.ActiveCfg = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Any CPU.Build.0 = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|x86.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Any CPU.Build.0 = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|x86.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|x86.ActiveCfg = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Any CPU.Build.0 = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|x86.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|x86.ActiveCfg = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Any CPU.Build.0 = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|x86.ActiveCfg = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|x86.ActiveCfg = Debug|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Any CPU.Build.0 = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|x86.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|x86.ActiveCfg = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.Build.0 = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|x86.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|x86.ActiveCfg = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Any CPU.Build.0 = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|x86.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|x86.ActiveCfg = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Any CPU.Build.0 = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|x86.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|x86.ActiveCfg = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Any CPU.Build.0 = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|x86.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|x86.ActiveCfg = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|x86.Build.0 = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|x86.Build.0 = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.Build.0 = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|x86.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|x86.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|x86.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|x86.Build.0 = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release + Setup|x86.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Any CPU.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|x86.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A} = {B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB} + {21AADDF8-BB39-4D0F-A6EF-EFD64AB3BC16} = {227520B6-B11F-45B8-84B2-8FDF27A2492C} + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} + {1A7A0EC8-D85A-4674-8DF7-89FF64D0A158} = {227520B6-B11F-45B8-84B2-8FDF27A2492C} + {4B6AC9D7-14AF-4C52-9154-59F4B4A3EC0E} = {1A7A0EC8-D85A-4674-8DF7-89FF64D0A158} + {BE376EFA-C7CC-44DB-B41E-506DBCB66A25} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} + {9D077B2F-1E74-4031-B28D-3F6F97829BEC} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} + {A51CC220-48C4-46F6-BF5D-3178CC317426} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} + EndGlobalSection +EndGlobal diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/License.txt b/1.5 'Kruger 60'/Services.EPG.Serialization/License.txt new file mode 100644 index 00000000..c9479ece --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/License.txt @@ -0,0 +1,43 @@ +Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors + +This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". +All other rights are reserved by the author(s) of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +***************************************************************************** +** Microsoft Reciprocal License (Ms-RL) ** +***************************************************************************** + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. +A "contribution" is the original software, or any additions or changes to the software. +A "contributor" is any person that distributes its contribution under this license. +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. +(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +***************************************************************************** +** EXCEPTIONS ** +***************************************************************************** + +There are no exceptions diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..07b9fc25 --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.EPG.Serialization")] +[assembly: AssemblyDescription("IpTviewr services: EPG serialization")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5a171dbb-855c-452b-93c6-229c7aa6c7a6")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblySolutionInfo.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblySolutionInfo.cs new file mode 100644 index 00000000..c38297d5 --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/Properties/AssemblySolutionInfo.cs @@ -0,0 +1,20 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyFileVersion(SolutionVersion.AssemblyFileVersion)] +[assembly: AssemblyInformationalVersion(SolutionVersion.AssemblyInformationalVersion)] +[assembly: AssemblyProduct(SolutionVersion.AssemblyProduct)] +[assembly: AssemblyCompany("movistartv.codeplex.com")] + +internal static class SolutionVersion +{ + public const string DefaultAssemblyVersion = "1.5.1010.0"; + public const string AssemblyFileVersion = "1.5.1010.0"; + public const string AssemblyInformationalVersion = "1.5.1010.0"; + public const string AssemblyProduct = "IPTViewr: virtual decoder for movistar+" + " (v" + ProductVersion + ")"; + public const string ProductVersion = "1.5 \"Kruger 60\" Beta 1"; + public const string DefaultCopyright = "Copyright (C) 2014-2016, AlphaCentaury and contributors"; +} // class SolutionVersion \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj b/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj new file mode 100644 index 00000000..74925ddd --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj @@ -0,0 +1,71 @@ + + + + + Debug + AnyCPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6} + Library + Properties + IpTviewr.Services.EPG.Serialization + Services.EPG.Serialization + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/Common.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs similarity index 64% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/Common.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs index 7ccb3b3b..4e6c34dc 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/Common.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs @@ -1,16 +1,12 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - internal class Common - { - public const string DefaultXmlNamespace = "urn:tva:metadata:2007"; - public const string Mpeg7XmlNamespace = "urn:tva:mpeg7:2005"; - } // Common -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + internal class Common + { + public const string DefaultXmlNamespace = "urn:tva:metadata:2007"; + public const string Mpeg7XmlNamespace = "urn:tva:mpeg7:2005"; + public const string TvaExtendedNamespace = "urn:tva:metadata:extended:2007"; + } // Common +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/ExtendedPurchaseItem.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/ExtendedPurchaseItem.cs new file mode 100644 index 00000000..36992580 --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/ExtendedPurchaseItem.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [XmlType(TypeName= "ExtendedPurchaseItemType", Namespace = Common.TvaExtendedNamespace)] + public class ExtendedPurchaseItem: TvaMain + { + [XmlElement("ProgramDescription", Namespace = Common.DefaultXmlNamespace)] + public TvaProgramDescription ProgramDescription + { + get; + set; + } // ProgramDescription + } // ExtendedPurchaseItem +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/Mpeg7Name.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Mpeg7Name.cs similarity index 86% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/Mpeg7Name.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Mpeg7Name.cs index e4c59331..214e2d3e 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/Mpeg7Name.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Mpeg7Name.cs @@ -1,39 +1,39 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace=Common.Mpeg7XmlNamespace)] - public class Mpeg7Name - { - [XmlAttribute("href")] - public string HRef - { - get; - set; - } // HRef - - [XmlElement("Name")] - public string Name - { - get; - set; - } // Name - - public override string ToString() - { - return Name; - } // ToString - } // class Mpeg7ActionType -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace=Common.Mpeg7XmlNamespace)] + public class Mpeg7Name + { + [XmlAttribute("href")] + public string HRef + { + get; + set; + } // HRef + + [XmlElement("Name")] + public string Name + { + get; + set; + } // Name + + public override string ToString() + { + return Name; + } // ToString + } // class Mpeg7ActionType +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/NamespaceUnification.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/NamespaceUnification.cs new file mode 100644 index 00000000..b02d81a5 --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/NamespaceUnification.cs @@ -0,0 +1,30 @@ +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + /// + /// This class is intended to help in "unifying" the different TVAMain namespaces. + /// This allows to parse all XML documents from different version using the same + /// XML .Net objects, regardless of document version. This is possible as newer + /// versions are expected to be 100% backwards-compatible (at XML schema level, + /// but not at code level). + /// + public static class NamespaceUnification + { + /// + /// + /// + /// Original XML document namespace, possibly obsolete or not up-to-date + /// Equivalent up-to-date namespace + public static string Replacer(string ns) + { + switch (ns) + { + case "urn:tva:metadata:2005": return Common.DefaultXmlNamespace; + default: + return ns; + } // switch + } // Replacer + } // NamespaceUnification +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaBoolean.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaBoolean.cs similarity index 89% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaBoolean.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaBoolean.cs index 60de6e19..192cd787 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaBoolean.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaBoolean.cs @@ -1,37 +1,37 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = Common.DefaultXmlNamespace)] - public class TvaBoolean - { - /// XmlValue member is used for XML serialization - [XmlIgnore] - public bool? Value - { - get; - set; - } // Value - - [XmlAttribute("value")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlValue - { - get { return (Value.HasValue) ? XmlConvert.ToString(Value.Value) : null; } - set { Value = (value != null) ? XmlConvert.ToBoolean(value) : (bool?)null; } - } // XmlValue - } // class TVABoolean -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = Common.DefaultXmlNamespace)] + public class TvaBoolean + { + /// XmlValue member is used for XML serialization + [XmlIgnore] + public bool? Value + { + get; + set; + } // Value + + [XmlAttribute("value")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlValue + { + get { return (Value.HasValue) ? XmlConvert.ToString(Value.Value) : null; } + set { Value = (value != null) ? XmlConvert.ToBoolean(value) : (bool?)null; } + } // XmlValue + } // class TVABoolean +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaInstanceDescription.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaInstanceDescription.cs similarity index 87% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaInstanceDescription.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaInstanceDescription.cs index 4be59881..a179e211 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaInstanceDescription.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaInstanceDescription.cs @@ -1,40 +1,40 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "InstanceDescription", Namespace = Common.DefaultXmlNamespace)] - public class TvaInstanceDescription - { - public string Title - { - get; - set; - } // Title - - [XmlElement("Genre")] - public TvaName Genre - { - get; - set; - } // Genre - - [XmlElement("ParentalGuidance")] - public TvaParentalGuidance ParentalGuidance - { - get; - set; - } // ParentalGuidance - } // class TVAInstanceDescription -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "InstanceDescription", Namespace = Common.DefaultXmlNamespace)] + public class TvaInstanceDescription + { + public string Title + { + get; + set; + } // Title + + [XmlElement("Genre")] + public TvaName Genre + { + get; + set; + } // Genre + + [XmlElement("ParentalGuidance")] + public TvaParentalGuidance ParentalGuidance + { + get; + set; + } // ParentalGuidance + } // class TVAInstanceDescription +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaMain.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaMain.cs similarity index 58% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaMain.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaMain.cs index dde43b81..9b2c204b 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaMain.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaMain.cs @@ -1,28 +1,23 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName="TVAMain", Namespace = Common.DefaultXmlNamespace)] - [XmlRoot(ElementName = "TVAMain", Namespace = Common.DefaultXmlNamespace, IsNullable = false)] - public class TvaMain - { - [XmlElement("ProgramDescription")] - public TvaProgramDescription ProgramDescription - { - get; - set; - } // ProgramDescription - } // class TVAMain -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "TVAMain", Namespace = Common.DefaultXmlNamespace)] + [XmlRoot(ElementName = "TVAMain", Namespace = Common.DefaultXmlNamespace, IsNullable = false)] + [XmlInclude(typeof(ExtendedPurchaseItem))] + public class TvaMain + { + } // class TvaMain +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaName.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaName.cs similarity index 86% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaName.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaName.cs index b82548fe..bd44da27 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaName.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaName.cs @@ -1,40 +1,40 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = Common.DefaultXmlNamespace)] - public class TvaName - { - [XmlAttribute("href")] - public string HRef - { - get; - set; - } // HRef - - [XmlElement("Name")] - public string Name - { - get; - set; - } // Name - - public override string ToString() - { - return Name; - } // ToString - } // class TVAName -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = Common.DefaultXmlNamespace)] + public class TvaName + { + [XmlAttribute("href")] + public string HRef + { + get; + set; + } // HRef + + [XmlElement("Name")] + public string Name + { + get; + set; + } // Name + + public override string ToString() + { + return Name; + } // ToString + } // class TVAName +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaParentalGuidance.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaParentalGuidance.cs similarity index 86% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaParentalGuidance.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaParentalGuidance.cs index fb00d77b..5ec3111f 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaParentalGuidance.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaParentalGuidance.cs @@ -1,28 +1,28 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ParentalGuidance", Namespace = Common.DefaultXmlNamespace)] - public class TvaParentalGuidance - { - [XmlElement("ParentalRating", Namespace = Common.Mpeg7XmlNamespace)] - public Mpeg7Name ParentalRating - { - get; - set; - } // ParentalRating - } // class TVAParentalGuidance -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "ParentalGuidance", Namespace = Common.DefaultXmlNamespace)] + public class TvaParentalGuidance + { + [XmlElement("ParentalRating", Namespace = Common.Mpeg7XmlNamespace)] + public Mpeg7Name ParentalRating + { + get; + set; + } // ParentalRating + } // class TVAParentalGuidance +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgram.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgram.cs similarity index 85% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgram.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgram.cs index d33a3d74..1cf6e444 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgram.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgram.cs @@ -1,27 +1,27 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "Program", Namespace = Common.DefaultXmlNamespace)] - public class TvaProgram - { - [XmlAttribute("crid", Namespace = Common.DefaultXmlNamespace)] - public string CRID - { - get; - set; - } // CRID - } // class TVAProgram -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "Program", Namespace = Common.DefaultXmlNamespace)] + public class TvaProgram + { + [XmlAttribute("crid", Namespace = Common.DefaultXmlNamespace)] + public string CRID + { + get; + set; + } // CRID + } // class TVAProgram +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgramDescription.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgramDescription.cs similarity index 86% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgramDescription.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgramDescription.cs index ad541ddd..1316c415 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgramDescription.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgramDescription.cs @@ -1,27 +1,27 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ProgramDescription", Namespace = Common.DefaultXmlNamespace)] - public class TvaProgramDescription - { - [XmlElement("ProgramLocationTable")] - public TvaProgramLocationTable LocationTable - { - get; - set; - } // ProgramLocationTable - } // class TVAProgramDescription -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "ProgramDescription", Namespace = Common.DefaultXmlNamespace)] + public class TvaProgramDescription + { + [XmlElement("ProgramLocationTable")] + public TvaProgramLocationTable LocationTable + { + get; + set; + } // ProgramLocationTable + } // class TVAProgramDescription +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgramLocationTable.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgramLocationTable.cs similarity index 85% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgramLocationTable.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgramLocationTable.cs index 6bd7af43..b1ae5981 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaProgramLocationTable.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaProgramLocationTable.cs @@ -1,27 +1,27 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ProgramLocationTable", Namespace = Common.DefaultXmlNamespace)] - public class TvaProgramLocationTable - { - [XmlElement("Schedule")] - public TvaSchedule Schedule - { - get; - set; - } // Schedule - } // class TVAProgramLocationTable -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "ProgramLocationTable", Namespace = Common.DefaultXmlNamespace)] + public class TvaProgramLocationTable + { + [XmlElement("Schedule")] + public TvaSchedule Schedule + { + get; + set; + } // Schedule + } // class TVAProgramLocationTable +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaSchedule.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaSchedule.cs similarity index 87% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaSchedule.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaSchedule.cs index a67d007c..cdf14295 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaSchedule.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaSchedule.cs @@ -1,41 +1,41 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "Schedule", Namespace = Common.DefaultXmlNamespace)] - public class TvaSchedule - { - [XmlAttribute("Version")] - public string Version - { - get; - set; - } // Version - - [XmlAttribute("serviceIDRef")] - public string ServiceIdRef - { - get; - set; - } // ServiceIdRef - - [XmlElement("ScheduleEvent")] - public TvaScheduleEvent[] Events - { - get; - set; - } // Events - } // class TVASchedule -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "Schedule", Namespace = Common.DefaultXmlNamespace)] + public class TvaSchedule + { + [XmlAttribute("Version")] + public string Version + { + get; + set; + } // Version + + [XmlAttribute("serviceIDRef")] + public string ServiceIdRef + { + get; + set; + } // ServiceIdRef + + [XmlElement("ScheduleEvent")] + public TvaScheduleEvent[] Events + { + get; + set; + } // Events + } // class TVASchedule +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaScheduleEvent.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs similarity index 94% rename from 1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaScheduleEvent.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs index 6b94005b..95f257e0 100644 --- a/1.5 'Kruger 60'/Services.EPG/TvAnytime/TvaScheduleEvent.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs @@ -1,151 +1,151 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ScheduleEvent", Namespace = Common.DefaultXmlNamespace)] - public class TvaScheduleEvent - { - [XmlElement("Program")] - public TvaProgram Program - { - get; - set; - } // Program - - [XmlElement("InstanceDescription")] - public TvaInstanceDescription Description - { - get; - set; - } // Description - - /// XmlPublishedStartTime member is used for XML serialization - [XmlIgnore] - public DateTime? PublishedStartTime - { - get; - set; - } // PublishedStartTime - - /// XmlPublishedDuration member is used for XML serialization - [XmlIgnore] - public TimeSpan PublishedDuration - { - get; - set; - } // PublishedDuration - - public TvaBoolean ImmediateViewing - { - get; - set; - } // ImmediateViewing - - public string NetworkRecordOperator - { - get; - set; - } // NetworkRecordOperator - - [XmlElement("UserActionList")] - public Mpeg7Name[] UserActionList - { - get; - set; - } // UserActionList - - /// XmlEventStartTime member is used for XML serialization - [XmlIgnore] - public DateTime? StartTime - { - get; - set; - } // EventStartTime - - /// XmlEventDuration member is used for XML serialization - [XmlIgnore] - public TimeSpan Duration - { - get; - set; - } // EventDuration - - [XmlElement("PublishedStartTime")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlPublishedStartTime - { - get - { - return (PublishedStartTime == null) ? null : XmlConvert.ToString(PublishedStartTime.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - PublishedStartTime = null; - } - else - { - PublishedStartTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - } // if-else - } // set - } // XmlPublishedStartTime - - [XmlElement("PublishedDuration")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlPublishedDuration - { - get { return SoapDuration.ToString(PublishedDuration); } - set { PublishedDuration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlPublishedDuration - - [XmlElement("EventStartTime")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlEventStartTime - { - get - { - return (StartTime == null) ? null : XmlConvert.ToString(StartTime.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - StartTime = null; - } - else - { - StartTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - } // if-else - } // set - } // XmlPublishedStartTime - - [XmlElement("EventDuration")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlEventDuration - { - get { return SoapDuration.ToString(Duration); } - set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlPublishedDuration - - public XmlNode[] OutOfSchemaItems - { - get; - set; - } // OutOfSchemaItems - } // class TVAScheduleEvent -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization.TvAnytime +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(TypeName = "ScheduleEvent", Namespace = Common.DefaultXmlNamespace)] + public class TvaScheduleEvent + { + [XmlElement("Program")] + public TvaProgram Program + { + get; + set; + } // Program + + [XmlElement("InstanceDescription")] + public TvaInstanceDescription Description + { + get; + set; + } // Description + + /// XmlPublishedStartTime member is used for XML serialization + [XmlIgnore] + public DateTime? PublishedStartTime + { + get; + set; + } // PublishedStartTime + + /// XmlPublishedDuration member is used for XML serialization + [XmlIgnore] + public TimeSpan PublishedDuration + { + get; + set; + } // PublishedDuration + + public TvaBoolean ImmediateViewing + { + get; + set; + } // ImmediateViewing + + public string NetworkRecordOperator + { + get; + set; + } // NetworkRecordOperator + + [XmlElement("UserActionList")] + public Mpeg7Name[] UserActionList + { + get; + set; + } // UserActionList + + /// XmlEventStartTime member is used for XML serialization + [XmlIgnore] + public DateTime? StartTime + { + get; + set; + } // EventStartTime + + /// XmlEventDuration member is used for XML serialization + [XmlIgnore] + public TimeSpan Duration + { + get; + set; + } // EventDuration + + [XmlElement("PublishedStartTime")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlPublishedStartTime + { + get + { + return (PublishedStartTime == null) ? null : XmlConvert.ToString(PublishedStartTime.Value, XmlDateTimeSerializationMode.RoundtripKind); + } // get + set + { + if (string.IsNullOrEmpty(value)) + { + PublishedStartTime = null; + } + else + { + PublishedStartTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + } // if-else + } // set + } // XmlPublishedStartTime + + [XmlElement("PublishedDuration")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlPublishedDuration + { + get { return SoapDuration.ToString(PublishedDuration); } + set { PublishedDuration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + } // XmlPublishedDuration + + [XmlElement("EventStartTime")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlEventStartTime + { + get + { + return (StartTime == null) ? null : XmlConvert.ToString(StartTime.Value, XmlDateTimeSerializationMode.RoundtripKind); + } // get + set + { + if (string.IsNullOrEmpty(value)) + { + StartTime = null; + } + else + { + StartTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + } // if-else + } // set + } // XmlPublishedStartTime + + [XmlElement("EventDuration")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlEventDuration + { + get { return SoapDuration.ToString(Duration); } + set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + } // XmlPublishedDuration + + public XmlNode[] OutOfSchemaItems + { + get; + set; + } // OutOfSchemaItems + } // class TVAScheduleEvent +} // namespace From 613f05b69f4c3a38dcc9ecf3dd2554ea7b7a0649 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 01:17:09 +0200 Subject: [PATCH 11/76] Updated XML namespaces --- 1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs | 2 +- 1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs index faabeed1..e8911e6b 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs @@ -15,7 +15,7 @@ namespace IpTviewr.Services.Record.Serialization [XmlRoot(ElementName = "RecordTask", Namespace = RecordTask.XmlNamespace)] public class RecordTask { - public const string XmlNamespace = "urn:Project-DvbIpTV:2014:RecordTask"; + public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2014:RecordTask"; public RecordTask() { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs b/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs index 66b4eab9..fd195b1e 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs +++ b/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs @@ -10,6 +10,6 @@ namespace IpTviewr.UiServices.Discovery { internal class SerializationCommon { - public const string XmlNamespace = "urn:Project-DvbIpTV:2014:UiServices.Discovery"; + public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2014:UiServices.Discovery"; } // class SerializationCommon } // namespace From a81c7e73fe6e0ec083432e529cb52db76483db47 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 03:16:04 +0200 Subject: [PATCH 12/76] Services.EPG.Serialization improvements Added EPG* classes to simplify access to TvaEPG deserialized data Deleted old, unreferenced Services.EPG project --- .../Services.EPG.Serialization/Common.cs | 10 + .../EpgCodedValue.cs} | 118 +++--- .../EpgProgram.cs} | 239 ++++++------ .../EpgProgramExtended.cs} | 209 +++++----- .../Services.EPG.Serialization/EpgService.cs | 147 +++++++ .../Services.EPG.Serialization.csproj | 5 + .../TvAnytime/Common.cs | 2 +- .../TvAnytime/TvaScheduleEvent.cs | 6 +- 1.5 'Kruger 60'/Services.EPG/Common.cs | 15 - 1.5 'Kruger 60'/Services.EPG/EpgService.cs | 92 ----- .../Services.EPG/EpgServiceEvent.cs | 28 -- 1.5 'Kruger 60'/Services.EPG/License.txt | 43 --- .../Services.EPG/Properties/AssemblyInfo.cs | 30 -- .../Services.EPG/Serialization/EpgDbQuery.cs | 363 ------------------ .../Serialization/EpgDbSerialization.cs | 231 ----------- .../Services.EPG/Services.EPG.csproj | 96 ----- 16 files changed, 452 insertions(+), 1182 deletions(-) create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/Common.cs rename 1.5 'Kruger 60'/{Services.EPG/EpgValue.cs => Services.EPG.Serialization/EpgCodedValue.cs} (71%) rename 1.5 'Kruger 60'/{Services.EPG/EpgEvent.cs => Services.EPG.Serialization/EpgProgram.cs} (64%) rename 1.5 'Kruger 60'/{Services.EPG/ExtendedEpgEvent.cs => Services.EPG.Serialization/EpgProgramExtended.cs} (73%) create mode 100644 1.5 'Kruger 60'/Services.EPG.Serialization/EpgService.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/Common.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/EpgService.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/EpgServiceEvent.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/License.txt delete mode 100644 1.5 'Kruger 60'/Services.EPG/Properties/AssemblyInfo.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbQuery.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbSerialization.cs delete mode 100644 1.5 'Kruger 60'/Services.EPG/Services.EPG.csproj diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/Common.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/Common.cs new file mode 100644 index 00000000..32f866af --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/Common.cs @@ -0,0 +1,10 @@ +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.Services.EPG.Serialization +{ + internal class Common + { + public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2016:EPG"; + } // class Common +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/EpgValue.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgCodedValue.cs similarity index 71% rename from 1.5 'Kruger 60'/Services.EPG/EpgValue.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/EpgCodedValue.cs index 1229a9a0..13e032e5 100644 --- a/1.5 'Kruger 60'/Services.EPG/EpgValue.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgCodedValue.cs @@ -1,59 +1,59 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = Common.XmlNamespace)] - public class EpgValue - { - public string Code - { - get; - set; - } // Code - - public string Description - { - get; - set; - } // Description - - public static EpgValue ToValue(TvAnytime.TvaName name) - { - if (name == null) return null; - - return new EpgValue() - { - Code = name.HRef, - Description = name.Name - }; - } // ToValue - - public static EpgValue ToValue(TvAnytime.Mpeg7Name name) - { - if (name == null) return null; - - return new EpgValue() - { - Code = name.HRef, - Description = name.Name - }; - } // ToValue - - public override string ToString() - { - return Description; - } // ToString - } // class EpgValue -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = Common.XmlNamespace)] + public class EpgCodedValue + { + public string Code + { + get; + set; + } // Code + + public string Description + { + get; + set; + } // Description + + public static EpgCodedValue ToCodedValue(TvAnytime.TvaName name) + { + if (name == null) return null; + + return new EpgCodedValue() + { + Code = name.HRef, + Description = name.Name + }; + } // ToCodedValue + + public static EpgCodedValue ToCodedValue(TvAnytime.Mpeg7Name name) + { + if (name == null) return null; + + return new EpgCodedValue() + { + Code = name.HRef, + Description = name.Name + }; + } // ToCodedValue + + public override string ToString() + { + return Description; + } // ToString + } // class EpgCode +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/EpgEvent.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgProgram.cs similarity index 64% rename from 1.5 'Kruger 60'/Services.EPG/EpgEvent.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/EpgProgram.cs index 2a6a7851..435882eb 100644 --- a/1.5 'Kruger 60'/Services.EPG/EpgEvent.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgProgram.cs @@ -1,122 +1,117 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG -{ - [Serializable()] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName = "Item", Namespace = Common.XmlNamespace)] - public class EpgEvent - { - [XmlIgnore] - public int DbId - { - get; - set; - } // DbId - - [XmlAttribute("crid")] - public string CRID - { - get; - set; - } // CRID - - [XmlElement("Title")] - public string Title - { - get; - set; - } // Tile - - [XmlElement("Genre")] - public EpgValue Genre - { - get; - set; - } // Genre - - [XmlElement("ParentalRating")] - public EpgValue ParentalRating - { - get; - set; - } // ParentalRating - - [XmlElement("StartTime")] - public DateTime StartTime - { - get; - set; - } // StartTime - - [XmlIgnore] - public DateTime LocalStartTime - { - get { return StartTime.ToLocalTime(); } - } // LocalStartTime - - [XmlIgnore] - public DateTime EndTime - { - get { return StartTime + Duration; } - } // EndTime - - [XmlIgnore] - public DateTime LocalEndTime - { - get { return EndTime.ToLocalTime(); } - } // LocalEndTime - - [XmlIgnore] - public TimeSpan Duration - { - get; - set; - } // Duration - - [XmlElement("Duration")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlDuration - { - get { return SoapDuration.ToString(Duration); } - set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlDuration - - public static EpgEvent FromItem(TvAnytime.TvaScheduleEvent item) - { - if (item == null) return null; - if (item.StartTime == null) return null; - - var result = new EpgEvent() - { - CRID = item.Program.CRID, - Duration = item.Duration, - StartTime = item.StartTime.Value - }; - - if (item.Description == null) return result; - - result.Title = item.Description.Title; - result.Genre = EpgValue.ToValue(item.Description.Genre); - result.ParentalRating = (item.Description.ParentalGuidance != null)? EpgValue.ToValue(item.Description.ParentalGuidance.ParentalRating) : null; - - return result; - } // FromItem - - public override string ToString() - { - return Title; - } // ToString - } // EPGEvent -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization +{ + [Serializable()] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "Program", Namespace = Common.XmlNamespace)] + public class EpgProgram + { + [XmlAttribute("crid")] + public string CRID + { + get; + set; + } // CRID + + [XmlElement("Title")] + public string Title + { + get; + set; + } // Tile + + [XmlElement("Genre")] + public EpgCodedValue Genre + { + get; + set; + } // Genre + + [XmlElement("ParentalRating")] + public EpgCodedValue ParentalRating + { + get; + set; + } // ParentalRating + + [XmlElement("StartTime")] + public DateTime UtcStartTime + { + get; + set; + } // UtcStartTime + + [XmlIgnore] + public DateTime LocalStartTime + { + get { return UtcStartTime.ToLocalTime(); } + } // LocalStartTime + + [XmlIgnore] + public DateTime UtcEndTime + { + get { return UtcStartTime + Duration; } + } // UtcEndTime + + [XmlIgnore] + public DateTime LocalEndTime + { + get { return UtcEndTime.ToLocalTime(); } + } // LocalEndTime + + [XmlIgnore] + public TimeSpan Duration + { + get; + set; + } // Duration + + [XmlElement("Duration")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlDuration + { + get { return SoapDuration.ToString(Duration); } + set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + } // XmlDuration + + public static EpgProgram FromScheduleEvent(TvAnytime.TvaScheduleEvent item) + { + if (item == null) return null; + + var utcStartTime = item.StartTime ?? item.PublishedStartTime; + if (utcStartTime == null) return null; + + var result = new EpgProgram() + { + CRID = item.Program.CRID, + Duration = (item.Duration.TotalSeconds > 0) ? item.Duration : item.PublishedDuration, + UtcStartTime = utcStartTime.Value + }; + + if (item.Description == null) return result; + + result.Title = item.Description.Title; + result.Genre = EpgCodedValue.ToCodedValue(item.Description.Genre); + result.ParentalRating = (item.Description.ParentalGuidance != null)? EpgCodedValue.ToCodedValue(item.Description.ParentalGuidance.ParentalRating) : null; + + return result; + } // FromScheduleEvent + + public override string ToString() + { + return Title; + } // ToString + } // EPGEvent +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/ExtendedEpgEvent.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgProgramExtended.cs similarity index 73% rename from 1.5 'Kruger 60'/Services.EPG/ExtendedEpgEvent.cs rename to 1.5 'Kruger 60'/Services.EPG.Serialization/EpgProgramExtended.cs index 3e579b34..7cbce719 100644 --- a/1.5 'Kruger 60'/Services.EPG/ExtendedEpgEvent.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgProgramExtended.cs @@ -1,100 +1,109 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.EPG -{ - public class ExtendedEpgEvent - { - public string UrlThumbnail - { - get; - set; - } // UrlThumbnail - - public string Title - { - get; - set; - } // Title - - public string OriginalTitle - { - get; - set; - } // OriginalTitle - - public string Genre - { - get; - set; - } // Genre - - public string SubGenre - { - get; - set; - } // SubGenre - - public string Synopsis - { - get; - set; - } // Synopsis - - public string[] Directors - { - get; - set; - } // Directors - - public string[] Actors - { - get; - set; - } // Actores - - public string[] Producers - { - get; - set; - } // Producers - - public string[] ScriptWriters - { - get; - set; - } // ScriptWriters - - public string[] Country - { - get; - set; - } // Country - - public string[] ProductionDate - { - get; - set; - } // ProductionDate - - public int RecordMarginBefore - { - get; - set; - } // RecordMarginBefore - - public int RecordMarginAfter - { - get; - set; - } // RecordMarginAfter - - public IDictionary ProviderProperties - { - get; - set; - } // ProviderProperties - } // class ExtendedEpgEvent -} // namespace +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Services.EPG.Serialization +{ + public class EpgProgramExtended + { + public EpgProgram Program + { + get; + set; + } // Program + + public string UrlThumbnail + { + get; + set; + } // UrlThumbnail + + public string Title + { + get; + set; + } // Title + + public string OriginalTitle + { + get; + set; + } // OriginalTitle + + public string Genre + { + get; + set; + } // Genre + + public string SubGenre + { + get; + set; + } // SubGenre + + public string Synopsis + { + get; + set; + } // Synopsis + + public string[] Directors + { + get; + set; + } // Directors + + public string[] Actors + { + get; + set; + } // Actores + + public string[] Producers + { + get; + set; + } // Producers + + public string[] ScriptWriters + { + get; + set; + } // ScriptWriters + + public string[] Country + { + get; + set; + } // Country + + public string[] ProductionDate + { + get; + set; + } // ProductionDate + + public int RecordMarginBefore + { + get; + set; + } // RecordMarginBefore + + public int RecordMarginAfter + { + get; + set; + } // RecordMarginAfter + + public IDictionary AdditionalProperties + { + get; + set; + } // AdditionalProperties + } // class EpgProgramExtended +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/EpgService.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgService.cs new file mode 100644 index 00000000..506897db --- /dev/null +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/EpgService.cs @@ -0,0 +1,147 @@ +// Copyright (C) 2015-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EPG.Serialization +{ + [Serializable()] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "Service", Namespace = Common.XmlNamespace)] + public class EpgService + { + private string fieldServiceIdReference; + + [XmlAttribute("version")] + public int Version + { + get; + set; + } // Version + + [XmlAttribute("serviceIdRef")] + public string ServiceIdReference + { + get + { + return fieldServiceIdReference; + } // get + set + { + fieldServiceIdReference = value; + + var parts = value.Split('.'); + if (parts.Length < 3) throw new ArgumentOutOfRangeException(); + + ServiceNameReference = parts[0]; + ServiceDomainReference = string.Join(".", parts, 1, parts.Length - 1); + } // set + } // ServiceIdReference + + [XmlIgnore] + public string ServiceNameReference + { + get; + protected set; + } // ServiceNameReference + + [XmlIgnore] + public string ServiceDomainReference + { + get; + protected set; + } // ServiceDomainReference + + [XmlIgnore] + public LinkedList Programs + { + get; + protected set; + } // Events + + [XmlArray("Programs")] + [XmlElement("Program")] + public EpgProgram[] XmlPrograms + { + get + { + var programs = new EpgProgram[Programs.Count]; + + var index = 0; + foreach (var program in programs) + { + programs[index++] = program; + } // foreach + + return programs; + } // get + set + { + Programs = new LinkedList(value); + } // set + } // XmlEvents + + public LinkedListNode GetCurrentProgram() + { + return GetUtcProgram(DateTime.UtcNow); + } // GetCurrent + + public LinkedListNode GetProgram(DateTime time) + { + return GetUtcProgram(time.ToUniversalTime()); + } // GetProgram + + public LinkedListNode GetUtcProgram(DateTime utcTime) + { + var node = Programs?.First; + while (node != null) + { + if ((utcTime >= node.Value.UtcStartTime) && (utcTime < node.Value.UtcEndTime)) + { + return node; + } // if + node = node.Next; + } // while + return node; + } // GetUtcProgram + + public static EpgService FromSchedule(TvAnytime.TvaSchedule schedule) + { + if (schedule == null) return null; + + var result = new EpgService() + { + Version = TryParseInt(schedule.Version, -1), + ServiceIdReference = schedule.ServiceIdRef + }; + + if (schedule.Events == null) + { + return result; + } // if + + var programs = from item in schedule.Events + let program = EpgProgram.FromScheduleEvent(item) + select program; + result.Programs = new LinkedList(programs); + + return result; + } // FromSchedule + + public static int TryParseInt(string s, int errValue) + { + int result; + + if (int.TryParse(s, out result)) return result; + + return errValue; + } // TryParseInt + } // class EpgService +} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj b/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj index 74925ddd..affa545a 100644 --- a/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/Services.EPG.Serialization.csproj @@ -40,6 +40,11 @@ + + + + + diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs index 4e6c34dc..9e8c3525 100644 --- a/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/Common.cs @@ -8,5 +8,5 @@ internal class Common public const string DefaultXmlNamespace = "urn:tva:metadata:2007"; public const string Mpeg7XmlNamespace = "urn:tva:mpeg7:2005"; public const string TvaExtendedNamespace = "urn:tva:metadata:extended:2007"; - } // Common + } // class Common } // namespace diff --git a/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs index 95f257e0..93bf55d3 100644 --- a/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs +++ b/1.5 'Kruger 60'/Services.EPG.Serialization/TvAnytime/TvaScheduleEvent.cs @@ -100,7 +100,8 @@ public string XmlPublishedStartTime } else { - PublishedStartTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + var time = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + PublishedStartTime = DateTime.SpecifyKind(time, DateTimeKind.Utc); } // if-else } // set } // XmlPublishedStartTime @@ -129,7 +130,8 @@ public string XmlEventStartTime } else { - StartTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + var time = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + StartTime = DateTime.SpecifyKind(time, DateTimeKind.Utc); } // if-else } // set } // XmlPublishedStartTime diff --git a/1.5 'Kruger 60'/Services.EPG/Common.cs b/1.5 'Kruger 60'/Services.EPG/Common.cs deleted file mode 100644 index fbf637e3..00000000 --- a/1.5 'Kruger 60'/Services.EPG/Common.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.EPG -{ - internal class Common - { - public const string XmlNamespace = "urn:Project-DvbIpTV:2015:EPG"; - } // Common -} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/EpgService.cs b/1.5 'Kruger 60'/Services.EPG/EpgService.cs deleted file mode 100644 index d4ee03ea..00000000 --- a/1.5 'Kruger 60'/Services.EPG/EpgService.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG -{ - [Serializable()] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName = "Item", Namespace = Common.XmlNamespace)] - public class EpgService - { - [XmlIgnore] - public int ServiceDatabaseId - { - get; - set; - } // ServiceDatabaseId - - [XmlAttribute("version")] - public int Version - { - get; - set; - } // Version - - [XmlAttribute("serviceId")] - public string ServiceId - { - get; - set; - } // ServiceId - - [XmlIgnore] - public string ServiceDisplayName - { - get; - set; - } // ServiceDisplayName - - [XmlArray("Events")] - [XmlElement("Event")] - public EpgEvent[] Events - { - get; - set; - } // Events - - public static EpgService FromItem(TvAnytime.TvaSchedule schedule) - { - if (schedule == null) return null; - - var result = new EpgService() - { - Version = TryParseInt( schedule.Version, -1), - ServiceId = schedule.ServiceIdRef - }; - - if (schedule.Events == null) - { - result.Events = new EpgEvent[0]; - - return result; - } // if - - var events = new EpgEvent[schedule.Events.Length]; - for (int index = 0; index < events.Length; index++) - { - events[index] = EpgEvent.FromItem(schedule.Events[index]); - } // for - result.Events = events; - - return result; - } // FromItem - - public static int TryParseInt(string s, int errValue) - { - int result; - - if (int.TryParse(s, out result)) return result; - - return errValue; - } // TryParseInt - } // class EpgService -} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/EpgServiceEvent.cs b/1.5 'Kruger 60'/Services.EPG/EpgServiceEvent.cs deleted file mode 100644 index 0587095a..00000000 --- a/1.5 'Kruger 60'/Services.EPG/EpgServiceEvent.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace Project.IpTv.Services.EPG -{ - public class EpgServiceEvent - { - public string FullServiceName - { - get; - set; - } // FullServiceName - - public EpgEvent EpgEvent - { - get; - set; - } // EpgEvent - } // class EpgServiceEvent -} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/License.txt b/1.5 'Kruger 60'/Services.EPG/License.txt deleted file mode 100644 index 8475e840..00000000 --- a/1.5 'Kruger 60'/Services.EPG/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Services.EPG/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.EPG/Properties/AssemblyInfo.cs deleted file mode 100644 index 1f5ab6ac..00000000 --- a/1.5 'Kruger 60'/Services.EPG/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.EPG")] -[assembly: AssemblyDescription("Project.IpTv.Services.EPG")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7a18b9e7-d82b-4b01-bbbd-11d8df18e620")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbQuery.cs b/1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbQuery.cs deleted file mode 100644 index 30920e46..00000000 --- a/1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbQuery.cs +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Services.SqlServerCE; -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlServerCe; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.EPG.Serialization -{ - public static class EpgDbQuery - { - public enum SingleEventOffset - { - Before = -1, - Now = 0, - After = 1, - } // enum SingleEventOffset - - #region ServiceDbId - - public static int GetDatabaseId(this EpgService epgService, string dbFile) - { - if (epgService.ServiceDatabaseId > 0) return epgService.ServiceDatabaseId; - - using (var cn = DbServices.GetConnection(dbFile)) - { - var id = GetDatabaseIdForServiceId(epgService.ServiceId, cn); - cn.Close(); - epgService.ServiceDatabaseId = id; - - return id; - } // using cn - } // GetDatabaseId - - public static int GetDatabaseId(this EpgService epgService, SqlCeConnection cn) - { - if (epgService.ServiceDatabaseId > 0) return epgService.ServiceDatabaseId; - - var id = GetDatabaseIdForServiceId(epgService.ServiceId, cn); - epgService.ServiceDatabaseId = id; - - return id; - } // GetDatabaseId - - public static int GetDatabaseIdForServiceId(string serviceId, SqlCeConnection cn) - { - bool added; - - added = false; - while (true) - { - // find - var id = FindDatabaseIdForServiceId(serviceId, cn); - if (id > 0) return id; - if (added) throw new DataException(); // should never happen! - - // add - using (var cmd = new SqlCeCommand()) - { - cmd.Connection = cn; - cmd.CommandType = CommandType.Text; - cmd.CommandText = "INSERT INTO [ServiceId] (ServiceId) VALUES (?)"; - cmd.Parameters.Add("@ServiceId", SqlDbType.NVarChar, 256).Value = serviceId; - cmd.ExecuteNonQuery(); - } // using cmd - } // while - } // GetDatabaseIdForServiceId - - #endregion - - public static EpgEvent GetSingleEvent(SqlCeConnection cn, int serviceDbId, SingleEventOffset offset, DateTime? now = null) - { - using (var cmd = GetSingleEventCommand(serviceDbId, offset, now ?? DateTime.Now)) - { - cmd.Connection = cn; - using (var reader = cmd.ExecuteReader()) - { - if (!reader.Read()) return null; - - return DbServices.LoadData(reader, 0, 1); - } // using reader - } // using cmd - } // GetSingleEvent - - public static EpgEvent[] GetBeforeNowAndThenEvents(SqlCeConnection cn, int serviceDbId, DateTime? now = null) - { - EpgEvent epgNowEvent, epgBeforeEvent, epgAfterEvent; - - var start = now ?? DateTime.Now; - epgNowEvent = EpgDbQuery.GetSingleEvent(cn, serviceDbId, EpgDbQuery.SingleEventOffset.Now, start); - epgBeforeEvent = null; - epgAfterEvent = null; - - if (epgNowEvent != null) - { - if (epgNowEvent.EndTime < start) - { - epgBeforeEvent = epgNowEvent; - epgNowEvent = null; - } - else - { - epgBeforeEvent = EpgDbQuery.GetSingleEvent(cn, serviceDbId, EpgDbQuery.SingleEventOffset.Before, epgNowEvent.StartTime); - epgAfterEvent = EpgDbQuery.GetSingleEvent(cn, serviceDbId, EpgDbQuery.SingleEventOffset.After, epgNowEvent.EndTime); - } // if-else - } // if - - if (epgAfterEvent == null) - { - epgAfterEvent = EpgDbQuery.GetSingleEvent(cn, serviceDbId, EpgDbQuery.SingleEventOffset.After, start); - } // if - - if ((epgBeforeEvent == null) && (epgNowEvent == null) && (epgAfterEvent == null)) - { - return null; - } // if - - return new EpgEvent[] - { - epgBeforeEvent, epgNowEvent, epgAfterEvent - }; - } // GetBeforeNowAndThenEvents - - public static IList GetDateRange(SqlCeConnection cn, int serviceDbId, DateTime? start = null, DateTime? end = null, int? top = null) - { - List epgEvents = new List(); - - using (var cmd = GetFromDateRangeCommand(serviceDbId, start, end, top)) - { - cmd.Connection = cn; - using (var reader = cmd.ExecuteReader()) - { - while (reader.Read()) - { - var epgEvent = DbServices.LoadData(reader, 0, 1); - epgEvents.Add(epgEvent); - } // while - } // using reader - } // using cmd - - return epgEvents; - } // GetDateRange - - public static IList GetAllServicesNowEvent(string dbFile, DateTime now) - { - using (var cn = DbServices.GetConnection(dbFile)) - { - return GetAllServicesNowEvent(cn, now); - } // using - } // GetAllServicesNowEvent - - public static IList GetAllServicesNowEvent(SqlCeConnection cn, DateTime now) - { - List epgEvents = new List(); - - using (var cmd = GetAllServicesNowEventCommand(now)) - { - cmd.Connection = cn; - using (var reader = cmd.ExecuteReader()) - { - while (reader.Read()) - { - var epgEvent = DbServices.LoadData(reader, 0, 1, LoadEpgServiceEvent); - epgEvents.Add(epgEvent); - } // while - } // using reader - } // using cmd - - return epgEvents; - } // GetAllServicesNowEvent - - #region - - #endregion - - #region Auxiliary methods: ServiceDbId - - private static int FindDatabaseIdForServiceId(string serviceId, SqlCeConnection cn) - { - using (var cmd = new SqlCeCommand()) - { - cmd.Connection = cn; - cmd.CommandType = CommandType.Text; - cmd.CommandText = "SELECT [DbId] FROM [ServiceId] WHERE (ServiceId = ?)"; - cmd.Parameters.Add("@ServiceId", SqlDbType.NVarChar, 256).Value = serviceId; - - var result = cmd.ExecuteScalar(); - if (!(result is int)) return 0; - return (int)result; - } // using cmd - } // FindDatabaseIdForServiceId - - #endregion - - #region Auxiliary methods - - private static SqlCeCommand GetSingleEventCommand(int serviceDbId, SingleEventOffset offset, DateTime start) - { - var cmd = new SqlCeCommand(); - cmd.CommandType = System.Data.CommandType.Text; - - var cmdText = new StringBuilder(); - cmdText.Append("SELECT TOP 1 XmlEpgData, XmlEpgDataAlt " + - "FROM Events "); - - start = start.ToUniversalTime(); - switch (offset) - { - case SingleEventOffset.Before: - cmdText.Append("WHERE ((StartTime < ?) AND (ServiceDbId = ?)) " + - "ORDER BY StartTime DESC"); - break; - case SingleEventOffset.Now: - cmdText.Append("WHERE ((StartTime <= ?) AND (ServiceDbId = ?) AND (EndTime > ?))"); - break; - case SingleEventOffset.After: - cmdText.Append("WHERE ((StartTime >= ?) AND (ServiceDbId = ?)) " + - "ORDER BY StartTime ASC"); - break; - default: - throw new IndexOutOfRangeException(); - } // switch - cmd.CommandText = cmdText.ToString(); - - cmd.Parameters.Add("@StartTime", System.Data.SqlDbType.DateTime).Value = start; - cmd.Parameters.Add("@ServiceDbId", System.Data.SqlDbType.Int).Value = serviceDbId; - cmd.Parameters.Add("@EndTime", System.Data.SqlDbType.DateTime).Value = start; - - return cmd; - } // GetSingleEventCommand - - private static SqlCeCommand GetFromDateRangeCommand(int serviceDbId, DateTime? start, DateTime? end, int? top) - { - var cmd = new SqlCeCommand(); - cmd.CommandType = System.Data.CommandType.Text; - - var cmdText = new StringBuilder(); - if ((top.HasValue) && (top.Value > 0)) - { - cmdText.AppendFormat("SELECT TOP {0} ", top.Value); - } - else - { - cmdText.Append("SELECT "); - } - cmdText.Append("XmlEpgData, XmlEpgDataAlt " + "FROM Events "); - - if (start == null) - { - if (end == null) - { - cmdText.Append("WHERE (ServiceDbId = ?)"); - } - else - { - cmdText.Append("WHERE ((StartTime < ?) AND (ServiceDbId = ?)) "); - } // if-else - } - else if (end == null) - { - cmdText.Append("WHERE ((StartTime >= ?) AND (ServiceDbId = ?)) "); - } - else - { - cmdText.Append("WHERE ((StartTime >= ?) AND (StartTime < ?) AND (ServiceDbId = ?)) "); - } // if-else - - cmdText.Append("ORDER BY StartTime ASC"); - cmd.CommandText = cmdText.ToString(); - - if (start != null) cmd.Parameters.Add("@StartTime", System.Data.SqlDbType.DateTime).Value = start.Value.ToUniversalTime(); - if (end != null) cmd.Parameters.Add("@StartTime2", System.Data.SqlDbType.DateTime).Value = end.Value.ToUniversalTime(); - cmd.Parameters.Add("@ServiceDbId", System.Data.SqlDbType.Int).Value = serviceDbId; - - return cmd; - } // GetFromDateRangeCommand - - private static SqlCeCommand GetAllServicesNowEventCommand(DateTime now) - { - var cmd = new SqlCeCommand(); - cmd.CommandType = System.Data.CommandType.Text; - - var cmdText = new StringBuilder(); - cmdText.Append("SELECT Events.XmlEpgData AS XmlEpgData, Events.XmlEpgDataAlt AS XmlEpgDataAlt, ServiceId.ServiceId AS ServiceId " + - "FROM Events INNER JOIN ServiceId ON Events.ServiceDbId = ServiceId.DbId "); - - now = now.ToUniversalTime(); - cmdText.Append("WHERE ((StartTime <= ?) AND (EndTime > ?))"); - cmd.CommandText = cmdText.ToString(); - - cmd.Parameters.Add("@StartTime", System.Data.SqlDbType.DateTime).Value = now; - cmd.Parameters.Add("@EndTime", System.Data.SqlDbType.DateTime).Value = now; - - return cmd; - } // GetAllServicesNowEventCommand - - private static EpgServiceEvent LoadEpgServiceEvent(EpgEvent data, SqlCeDataReader reader) - { - var result = new EpgServiceEvent() - { - FullServiceName = reader.GetString(2), - EpgEvent = data - }; - - return result; - } // LoadEpgServiceEvent - - #endregion - - public class EpgStatus - { - public bool IsUpdating; - public bool IsUpdated; - public bool IsNew; - public bool IsError; - public DateTime Time; - } // class EpgStatus - - public static EpgStatus GetStatus(string dbFile) - { - using (var cmd = new SqlCeCommand()) - { - cmd.CommandType = CommandType.Text; - cmd.CommandText = "SELECT TOP 1 [Status], [Timestamp] FROM [Status] ORDER BY [Timestamp] DESC"; - using (var reader = DbServices.ExecuteReader(dbFile, cmd, CommandBehavior.SingleResult | CommandBehavior.SingleRow)) - { - if (reader.Read()) - { - var status = new EpgStatus() - { - Time = reader.GetDateTime(1) - }; - switch (reader.GetInt32(0)) - { - case -1: - status.IsError = true; break; - case 1: - status.IsUpdated = true; break; - default: - status.IsUpdated = true; break; - } // switch - - return status; - } - else - { - return new EpgStatus() - { - IsNew = true - }; - } // if-else - } // using reader - } // using cmd - - - throw new NotImplementedException(); - } // GetStatus - } // static class EpgDbQuery -} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbSerialization.cs b/1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbSerialization.cs deleted file mode 100644 index d6606405..00000000 --- a/1.5 'Kruger 60'/Services.EPG/Serialization/EpgDbSerialization.cs +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common.Serialization; -using Project.IpTv.Services.SqlServerCE; -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlServerCe; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Services.EPG.Serialization -{ - public static class EpgDbSerialization - { - #region Load methods - - public static IList GetServiceEvents(string dbFile, string serviceId, string altServiceId, DateTime? start = null, DateTime? end = null) - { - using (var cn = DbServices.GetConnection(dbFile)) - { - var result = GetServiceEvents(cn, serviceId, altServiceId, start, end); - cn.Close(); - - return result; - } // using cn - } // GetServiceEvents - - public static IList GetServiceEvents(SqlCeConnection cn, string serviceId, string altServiceId, DateTime? start = null, DateTime? end = null) - { - var serviceDatabaseId = EpgDbQuery.GetDatabaseIdForServiceId(serviceId, cn); - var result = EpgDbQuery.GetDateRange(cn, serviceDatabaseId, start, end); - if (result.Count != 0) - { - return result; - } // if - - // try alternative service - if (altServiceId != null) - { - var altServiceDatabaseId = EpgDbQuery.GetDatabaseIdForServiceId(altServiceId, cn); - result = EpgDbQuery.GetDateRange(cn, altServiceDatabaseId, start, end); - } // if - - return result; - } // GetServiceEvents - - #endregion - - #region Save methods - - public static void Save(this EpgService epgService, string dbFile) - { - using (var cn = DbServices.GetConnection(dbFile)) - { - epgService.Save(cn); - cn.Close(); - } // using cn - } // Save - - public static void Save(this EpgService epgService, SqlCeConnection cn) - { - SqlCeTransaction trans; - - if ((epgService.Events == null) || (epgService.Events.Length == 0)) return; - - trans = null; - try - { - trans = cn.BeginTransaction(); - - epgService.GetDatabaseId(cn); - - using (var cmd = GetDbSaveCommand()) - { - cmd.Connection = cn; - SetDbSaveCommandData(cmd, epgService.ServiceDatabaseId, epgService.Version); - foreach (var epgEvent in epgService.Events) - { - SetDbSaveCommandData(cmd, epgEvent); - DbServices.Save((SqlCeConnection)null, cmd, "@XmlEpgData", "@XmlEpgDataAlt", epgEvent, false); - } // foreach - } // using - - trans.Commit(); - trans = null; // avoid auto rollback - } - finally - { - // auto rollback if an exception is thrown - if (trans != null) trans.Rollback(); - } // finally - } // Save - - public static void Save(this EpgEvent epgEvent, string dbFile, int serviceDbId, int version) - { - var saveCmd = GetDbSaveCommand(epgEvent, serviceDbId, version); - DbServices.Save(dbFile, saveCmd, "@XmlEpgData", epgEvent); - } // Save - - public static void Save(this EpgEvent epgEvent, SqlCeConnection cn, int serviceDbId, int version) - { - var saveCmd = GetDbSaveCommand(epgEvent, serviceDbId, version); - DbServices.Save(cn, saveCmd, "@XmlEpgData", epgEvent); - } // Save - - #endregion - - #region Delete methods - - public static int DeleteAllEvents(string dbFile) - { - var cmd = GetDeleteEventsCommand(); - return DbServices.Execute(dbFile, cmd); - } // DeleteAllEvents - - public static int DeleteAllEvents(string dbFile, DateTime? fromDate, DateTime? toDate) - { - var cmd = GetDeleteEventsCommand(null, fromDate, toDate); - return DbServices.Execute(dbFile, cmd); - } // DeleteAllEvents - - public static int DeleteAllEvents(SqlCeConnection cn, int serviceDbId) - { - return DeleteEvents(cn, serviceDbId); - } // DeleteAllEvents - - public static int DeleteEvents(string dbFile, int serviceDbId, DateTime? fromDate, DateTime? toDate) - { - var cmd = GetDeleteEventsCommand(serviceDbId, fromDate, toDate); - return DbServices.Execute(dbFile, cmd); - } // DeleteEvents - - public static int DeleteEvents(SqlCeConnection cn, int serviceDbId, DateTime? fromDate = null, DateTime? toDate = null) - { - var cmd = GetDeleteEventsCommand(serviceDbId, fromDate, toDate); - return DbServices.Execute(cn, cmd); - } // DeleteEvents - - #endregion - - #region Auxiliary methods - - private static SqlCeCommand GetDbSaveCommand() - { - var cmd = new SqlCeCommand(); - cmd.CommandType = CommandType.Text; - cmd.CommandText = "INSERT INTO [Events] (ServiceDbId, Version, StartTime, EndTime, DurationSeconds, XmlEpgData) VALUES (?, ?, ?, ?, ?, ?)"; - cmd.Parameters.Add("@ServiceDbId", SqlDbType.Int); - cmd.Parameters.Add("@Version", SqlDbType.Int); - cmd.Parameters.Add("@StartTime", SqlDbType.DateTime); - cmd.Parameters.Add("@EndTime", SqlDbType.DateTime); - cmd.Parameters.Add("@DurationSeconds", SqlDbType.Int); - cmd.Parameters.Add("@XmlEpgData", SqlDbType.VarBinary, 4000); - cmd.Parameters.Add("@XmlEpgDataAlt", SqlDbType.Image); - - return cmd; - } // GetDbSaveCommand - - private static SqlCeCommand GetDbSaveCommand(EpgEvent epgEvent, int serviceDbId, int version) - { - var cmd = GetDbSaveCommand(); - SetDbSaveCommandData(cmd, serviceDbId, version); - SetDbSaveCommandData(cmd, epgEvent); - - return cmd; - } // GetDbLoadCommand - - private static void SetDbSaveCommandData(SqlCeCommand cmd, int serviceDbId, int version) - { - cmd.Parameters["@ServiceDbId"].Value = serviceDbId; - cmd.Parameters["@Version"].Value = version; - } // SetDbSaveCommandData - - private static void SetDbSaveCommandData(SqlCeCommand cmd, EpgEvent epgEvent) - { - cmd.Parameters["@StartTime"].Value = epgEvent.StartTime.ToUniversalTime(); - cmd.Parameters["@EndTime"].Value = epgEvent.EndTime.ToUniversalTime(); - cmd.Parameters["@DurationSeconds"].Value = epgEvent.Duration.TotalSeconds; - } // SetDbSaveCommandData - - private static SqlCeCommand GetDeleteEventsCommand(int? serviceDbId = null, DateTime? fromDate = null, DateTime? toDate = null) - { - var cmd = new SqlCeCommand(); - cmd.CommandType = CommandType.Text; - if (serviceDbId != null) cmd.Parameters.Add("@ServiceDbId", SqlDbType.Int).Value = serviceDbId.Value; - - var cmdText = new StringBuilder(); - cmdText.Append("DELETE FROM [Events] WHERE "); - - if (serviceDbId != null) - { - cmdText.Append("(([ServiceDbId] = ?)"); - } - else - { - cmdText.Append("((1 = 1)"); - } // if-else - - if (fromDate == null) - { - if (toDate == null) - { - cmdText.Append(")"); - } - else - { - cmdText.Append(" AND ([EndTime] < ?))"); - cmd.Parameters.Add("@EndTime", SqlDbType.DateTime).Value = toDate.Value.ToUniversalTime(); - } // if-else - } - else if (toDate == null) - { - cmdText.Append(" AND ([StartTime] >= ?))"); - cmd.Parameters.Add("@StartTime", SqlDbType.DateTime).Value = fromDate.Value.ToUniversalTime(); - } - else - { - cmdText.Append(" AND ([StartTime] >= ?) AND ([EndTime] < ?))"); - cmd.Parameters.Add("@StartTime", SqlDbType.DateTime).Value = fromDate.Value.ToUniversalTime(); - cmd.Parameters.Add("@EndTime", SqlDbType.DateTime).Value = toDate.Value.ToUniversalTime(); - } // if-else - - cmd.CommandText = cmdText.ToString(); - return cmd; - } // GetDeleteEventsCommand - - #endregion - } // static class EpgDbSerialization -} // namespace diff --git a/1.5 'Kruger 60'/Services.EPG/Services.EPG.csproj b/1.5 'Kruger 60'/Services.EPG/Services.EPG.csproj deleted file mode 100644 index 3d3c8b3a..00000000 --- a/1.5 'Kruger 60'/Services.EPG/Services.EPG.csproj +++ /dev/null @@ -1,96 +0,0 @@ - - - - - Debug - AnyCPU - {ED5C1CF5-0975-4995-8933-9A7DF39FD739} - Library - Properties - Project.IpTv.Services.EPG - Services.EPG - v3.5 - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - - - - - - - - - \ No newline at end of file From a7f7086529353cd87f5565a2caf509b0c926a1ee Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 03:17:38 +0200 Subject: [PATCH 13/76] Internal tool enhancements: ConsoleExperiments Added an experiment to process raw EPG data dumpbed by GuiTools.DvbStpStreamExplorer --- .../ConsoleExperiments.csproj | 20 +- .../ConsoleExperiments/Experiment.cs | 30 +++ .../ConsoleExperiments/ProcessRawEpgData.cs | 239 ++++++++++++++++++ .../ConsoleExperiments/Program.cs | 41 +-- 4 files changed, 293 insertions(+), 37 deletions(-) create mode 100644 1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Experiment.cs create mode 100644 1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ProcessRawEpgData.cs diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj index 511f809b..4b5e5226 100644 --- a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj @@ -7,7 +7,7 @@ {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B} Exe Properties - Project.DvbIpTv.Internal.Tools.ConsoleExperiments + IpTviewr.Internal.Tools.ConsoleExperiments ConsoleExperiments v4.5.2 512 @@ -59,10 +59,16 @@ Properties\AssemblySolutionInfo.cs + + + + {b91c438d-0333-4d06-86cd-74ce82df6f40} + Etsi.Ts102034 + {e1748f45-dd50-4479-96f6-f7eba6f3e28b} IpTv.MovistarPlus @@ -71,10 +77,22 @@ {8da15060-5a78-4f89-a9f1-7aa56b0d622c} Project.Common + + {5a171dbb-855c-452b-93c6-229c7aa6c7a6} + Services.EPG.Serialization + {3a053f34-4edf-4071-b966-923255a0ae14} Services.SqlServerCE + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Experiment.cs b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Experiment.cs new file mode 100644 index 00000000..65851d0b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Experiment.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IpTviewr.Internal.Tools.ConsoleExperiments +{ + internal abstract class Experiment + { + public int Execute(string[] args) + { + Console.WriteLine(ExperimentName); + Console.WriteLine(SolutionVersion.DefaultCopyright); + Console.WriteLine(); + + return Run(args); + } // Execute + + public virtual string ExperimentName + { + get + { + return GetType().Name; + } // get + } // ExperimentName + + protected abstract int Run(string[] args); + } // abstract class Experiment +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ProcessRawEpgData.cs b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ProcessRawEpgData.cs new file mode 100644 index 00000000..a11627d5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ProcessRawEpgData.cs @@ -0,0 +1,239 @@ +using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; +using IpTviewr.Common.Serialization; +using IpTviewr.Services.EPG.Serialization; +using IpTviewr.Services.EPG.Serialization.TvAnytime; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Discovery; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IpTviewr.Internal.Tools.ConsoleExperiments +{ + internal sealed class ProcessRawEpgData: Experiment + { + private string SourcePath; + private IDictionary ParentalGuidanceCodes; + private UiServiceProvider ServiceProvider; + private UiBroadcastDiscovery BroadcastDiscovery; + private Dictionary EpgServices; + + protected override int Run(string[] args) + { + while (true) + { + Console.Write("Path to raw data: "); + + SourcePath = Console.ReadLine().Trim(); + if (Directory.Exists(SourcePath)) + { + break; + } // if + + Console.WriteLine("Path not found"); + continue; + } // while + + if (!Init()) return -1; + + foreach (var xmlFile in Directory.EnumerateFiles(SourcePath, "*.xml", SearchOption.TopDirectoryOnly)) + { + ProcessFile(xmlFile); + } // foreach + + DumpEpg(); + DumpGuidanceCodes(); + + End(); + + return 0; + } // Run + + private bool Init() + { + // load configuration + var result = AppUiConfiguration.Load(null, Console.WriteLine); + if (result.IsError) + { + Console.WriteLine(result.Message); + return false; + } // if + + // get channels + Console.WriteLine("Loading broadcast services"); + var providers = AppUiConfiguration.Current.Cache.LoadXml("ProviderDiscovery", AppUiConfiguration.Current.ContentProvider.Bootstrap.MulticastAddress); + ServiceProvider = UiProviderDiscovery.GetUiServiceProviderFromKey(providers, "dem_19.imagenio.es"); + + var downloader = new UiBroadcastDiscoveryDownloader(); + BroadcastDiscovery = downloader.Download(null, ServiceProvider, null, true); + + ParentalGuidanceCodes = new Dictionary(); + EpgServices = new Dictionary(); + + return true; + } // Init + + private void End() + { + ParentalGuidanceCodes = null; + ServiceProvider = null; + BroadcastDiscovery = null; + } // End + + private void DumpEpg() + { + var filename = "EPG.csv"; + using (var outputEpg = new StreamWriter(Path.Combine(SourcePath, filename), false, Encoding.UTF8, short.MaxValue)) + { + outputEpg.WriteLine("Number;Channel;Start;Duration;Name;CRID;Service"); + + foreach (var service in EpgServices.Values) + { + var uiService = GetService(service); + foreach (var program in service.Programs) + { + outputEpg.Write("\""); + outputEpg.Write(uiService?.DisplayLogicalNumber); + outputEpg.Write("\";\""); + outputEpg.Write(uiService?.DisplayName); + outputEpg.Write("\";\""); + outputEpg.Write("{0:yyyy-MM-dd HH-mm-ss}", program.LocalStartTime); + outputEpg.Write("\";\""); + outputEpg.Write("{0}", program.Duration); + outputEpg.Write("\";\""); + outputEpg.Write(program.Title?.Replace("\"", "\"\"")); + outputEpg.Write("\";\""); + outputEpg.WriteLine(program.CRID); + outputEpg.Write("\";\""); + outputEpg.Write(service.ServiceIdReference); + outputEpg.WriteLine("\""); + } // foreach program + } // foreach service + } // using outputEpg + + filename = "EPGCurrent.csv"; + using (var outputEpg = new StreamWriter(Path.Combine(SourcePath, filename), false, Encoding.UTF8, short.MaxValue)) + { + outputEpg.WriteLine("Number;Channel;Start;Duration;Name;CRID;Service"); + foreach (var service in EpgServices.Values) + { + var uiService = GetService(service); + var program = service.GetCurrentProgram()?.Value; + + outputEpg.Write("\""); + outputEpg.Write(uiService?.DisplayLogicalNumber); + outputEpg.Write("\";\""); + outputEpg.Write(uiService?.DisplayName); + outputEpg.Write("\";\""); + outputEpg.Write((program != null)? "{0:yyyy-MM-dd HH-mm-ss}" : "-", program?.LocalStartTime); + outputEpg.Write("\";\""); + outputEpg.Write("{0}", program?.Duration); + outputEpg.Write("\";\""); + outputEpg.Write(program?.Title?.Replace("\"", "\"\"")); + outputEpg.Write("\";\""); + outputEpg.WriteLine(program?.CRID); + outputEpg.Write("\";\""); + outputEpg.Write(service.ServiceIdReference); + outputEpg.WriteLine("\""); + } // foreach service + } // using outputEpg + } // DumpEpg + + private void DumpGuidanceCodes() + { + var filename = "ParentalGuidanceCodes.csv"; + using (var output = new StreamWriter(Path.Combine(SourcePath, filename), false, Encoding.UTF8, short.MaxValue)) + { + output.WriteLine("\"Code\";\"Description\""); + foreach (var entry in ParentalGuidanceCodes) + { + var code = entry.Key.Replace("\"", "\"\""); + var description = entry.Value.Replace("\"", "\"\""); + output.Write(code); + output.Write(';'); + output.WriteLine(description); + } // foreach + } // using output + } // DumpGuidanceCodes + + private void ProcessFile(string xmlFile) + { + ExtendedPurchaseItem item; + var filename = Path.GetFileName(xmlFile); + + try + { + item = XmlSerialization.Deserialize(xmlFile, trimExtraWhitespace: true, namespaceReplacer: NamespaceUnification.Replacer) as ExtendedPurchaseItem; + } + catch(Exception ex) + { + Console.WriteLine("Unable to read {0}: {1}", filename, ex.Message); + return; + } // try-catch + + try + { + var schedule = item.ProgramDescription.LocationTable.Schedule; + var epgService = EpgService.FromSchedule(schedule); + if (epgService.Programs == null) + { + var service = GetService(epgService); + Console.WriteLine("> {0} {1} ({2}) has no events", service?.DisplayLogicalNumber, service?.DisplayName, schedule.ServiceIdRef); + return; + } // if + + EpgServices[schedule.ServiceIdRef] = epgService; + + foreach (var scheduleEvent in schedule.Events) + { + ProcessEvent(scheduleEvent, schedule.ServiceIdRef); + } // foreach offering + } + catch(Exception ex) + { + Console.WriteLine("Exception in file {0}: {1}", filename, ex.Message); + return; + } // try-catch + } // ProcessFile + + private void ProcessEvent(TvaScheduleEvent scheduleEvent, string serviceIdRef) + { + ProcessParentalGuidance(scheduleEvent?.Description?.ParentalGuidance); + } // ProcessEvent + + private void ProcessParentalGuidance(TvaParentalGuidance guidance) + { + string description; + + var rating = guidance?.ParentalRating; + var href = rating?.HRef; + var name = rating?.Name; + if ((href == null) || (name == null)) return; + + if (!ParentalGuidanceCodes.TryGetValue(href, out description)) + { + ParentalGuidanceCodes.Add(href, name); + } + else + { + if (description != name) + { + Console.WriteLine("Duplicated rating {0}: {1}", href, name); + } // if + } // if + } // ProcessParentalGuidance + + private UiBroadcastService GetService(EpgService service) + { + var identifier = new Etsi.Ts102034.v010501.XmlSerialization.Common.TextualIdentifier() + { + ServiceName = service.ServiceNameReference, + }; + + return BroadcastDiscovery.TryGetService(UiBroadcastService.GetKey(identifier, ServiceProvider.DomainName)); + } // GetService + } // class ProcessRawEpgData +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs index 7102704e..d3fb3cbb 100644 --- a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/Program.cs @@ -25,46 +25,15 @@ namespace IpTviewr.Internal.Tools.ConsoleExperiments { class Program { - static void Main(string[] args) + static int Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - //EpgInfoDownload.Experiment(); - //EpgInfoDownload.GetJsonSchema(); - //EpgInfoDownload.ExploreJsonValues(); - //EpgInfoDownload.DisplayJsonData(); - - return; - - DateTime start; - DateTime end; - DateTime now; - - start = new DateTime(2015, 03, 05, 20, 35, 0); - now = new DateTime(2015, 03, 06, 7, 20, 0); - end = new DateTime(2015, 03, 07, 10, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - - start = new DateTime(2015, 03, 05, 20, 35, 0); - now = new DateTime(2015, 03, 06, 7, 20, 0); - end = new DateTime(2015, 03, 06, 10, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - - start = new DateTime(2015, 03, 06, 7, 35, 0); - now = new DateTime(2015, 03, 06, 17, 20, 0); - end = new DateTime(2015, 03, 07, 10, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - - start = new DateTime(2015, 03, 06, 7, 35, 0); - now = new DateTime(2015, 03, 06, 17, 20, 0); - end = new DateTime(2015, 03, 06, 22, 15, 0); - - Console.WriteLine("{0} {1} => {2}", start, end, FormatString.DateTimeFromToMinutes(start, end, now)); - } + Experiment experiment; + experiment = new ProcessRawEpgData(); + return experiment.Execute(args); + } // Main } // class Program } // namespace \ No newline at end of file From bcc65181a07b8ead666ecec299ad631539caedde Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 28 Aug 2016 03:58:43 +0200 Subject: [PATCH 14/76] Restored project UiServices.EPG Lots of code edits to make it compile. Most of the functionality either won't work or, worse, throw an exception --- 1.5 'Kruger 60'/MovistarTV.sln | 20 +++ .../CommonUiResources.Designer.cs | 4 +- .../EpgBasicGridDialog.Designer.cs | 22 +-- .../UiServices.EPG/EpgBasicGridDialog.cs | 97 ++++++------ .../UiServices.EPG/EpgBasicGridDialog.resx | 20 +-- .../EpgChannelPrograms.Designer.cs | 26 +-- .../UiServices.EPG/EpgChannelPrograms.cs | 59 +++---- .../EpgEventMiniBar.Designer.cs | 16 +- .../UiServices.EPG/EpgEventMiniBar.cs | 54 ++++--- .../EpgExtendedInfoDialog.Designer.cs | 22 +-- .../UiServices.EPG/EpgExtendedInfoDialog.cs | 67 +++++--- .../UiServices.EPG/EpgMiniBar.Designer.cs | 16 +- 1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.cs | 149 +++++++++--------- .../UiServices.EPG/EpgMiniBar.resx | 2 +- .../UiServices.EPG/EpgMiniBarEventArgs.cs | 4 +- .../EpgNowThenDialog.Designer.cs | 42 ++--- .../UiServices.EPG/EpgNowThenDialog.cs | 29 ++-- .../UiServices.EPG/EpgNowThenDialog.es.resx | 6 +- .../UiServices.EPG/EpgNowThenDialog.resx | 102 ++++++------ .../UiServices.EPG/EpgProgressBarFixed.cs | 4 +- .../UiServices.EPG/Properties/AssemblyInfo.cs | 4 +- .../Properties/EpgRtf.Designer.cs | 4 +- .../Properties/Resources.Designer.cs | 4 +- .../Properties/Texts.Designer.cs | 4 +- .../UiServices.EPG/UiServices.EPG.csproj | 46 +++--- 25 files changed, 435 insertions(+), 388 deletions(-) diff --git a/1.5 'Kruger 60'/MovistarTV.sln b/1.5 'Kruger 60'/MovistarTV.sln index a3f0facf..20a97940 100644 --- a/1.5 'Kruger 60'/MovistarTV.sln +++ b/1.5 'Kruger 60'/MovistarTV.sln @@ -169,6 +169,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelLogos", "InternalToo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.EPG.Serialization", "Services.EPG.Serialization\Services.EPG.Serialization.csproj", "{5A171DBB-855C-452B-93C6-229C7AA6C7A6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.EPG", "UiServices.EPG\UiServices.EPG.csproj", "{004C3829-FED4-4084-B23B-871193AFA8C7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -550,6 +552,24 @@ Global {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|x86.ActiveCfg = Release|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|x86.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|x86.ActiveCfg = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|x86.Build.0 = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release + Setup|x86.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|Any CPU.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|x86.ActiveCfg = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs index 62d695a6..20498a50 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.EPG { +namespace IpTviewr.UiServices.EPG { using System; @@ -39,7 +39,7 @@ internal CommonUiResources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.EPG.CommonUiResources", typeof(CommonUiResources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.CommonUiResources", typeof(CommonUiResources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs index a4292ee2..37af132e 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs @@ -1,7 +1,7 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { partial class EpgBasicGridDialog { @@ -40,7 +40,7 @@ private void InitializeComponent() this.buttonOk = new System.Windows.Forms.Button(); this.buttonRecordChannel = new System.Windows.Forms.Button(); this.buttonDisplayChannel = new System.Windows.Forms.Button(); - this.epgEventDisplay = new Project.IpTv.UiServices.EPG.EpgEventMiniBar(); + this.EpgProgramDisplay = new IpTviewr.UiServices.EPG.EpgProgramMiniBar(); ((System.ComponentModel.ISupportInitialize)(this.dataGridPrograms)).BeginInit(); this.SuspendLayout(); // @@ -101,14 +101,14 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // // buttonRecordChannel // resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); - this.buttonRecordChannel.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Record_16x16; + this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Record_16x16; this.buttonRecordChannel.Name = "buttonRecordChannel"; this.buttonRecordChannel.UseVisualStyleBackColor = true; this.buttonRecordChannel.Click += new System.EventHandler(this.buttonRecordChannel_Click); @@ -116,21 +116,21 @@ private void InitializeComponent() // buttonDisplayChannel // resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); - this.buttonDisplayChannel.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; + this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; this.buttonDisplayChannel.Name = "buttonDisplayChannel"; this.buttonDisplayChannel.UseVisualStyleBackColor = true; this.buttonDisplayChannel.Click += new System.EventHandler(this.buttonDisplayChannel_Click); // - // epgEventDisplay + // EpgProgramDisplay // - resources.ApplyResources(this.epgEventDisplay, "epgEventDisplay"); - this.epgEventDisplay.Name = "epgEventDisplay"; + resources.ApplyResources(this.EpgProgramDisplay, "EpgProgramDisplay"); + this.EpgProgramDisplay.Name = "EpgProgramDisplay"; // // EpgBasicGridDialog // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.epgEventDisplay); + this.Controls.Add(this.EpgProgramDisplay); this.Controls.Add(this.buttonOk); this.Controls.Add(this.buttonRecordChannel); this.Controls.Add(this.buttonDisplayChannel); @@ -151,7 +151,7 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonRecordChannel; private System.Windows.Forms.Button buttonDisplayChannel; private System.Windows.Forms.Button buttonOk; - private EpgEventMiniBar epgEventDisplay; + private EpgProgramMiniBar EpgProgramDisplay; private System.Windows.Forms.DataGridViewTextBoxColumn columnChannel; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramNow; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramThen; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs index 6221579e..0e4a36f0 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System; @@ -9,24 +9,24 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Core.IpTvProvider; -using Project.IpTv.Services.EPG; -using Project.IpTv.Services.EPG.Serialization; -using Project.IpTv.Services.SqlServerCE; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Discovery.BroadcastList; - -namespace Project.IpTv.UiServices.EPG +using IpTviewr.Common.Telemetry; +using IpTviewr.Core.IpTvProvider; +using IpTviewr.Services.EPG; +using IpTviewr.Services.EPG.Serialization; +using IpTviewr.Services.SqlServerCE; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Discovery.BroadcastList; + +namespace IpTviewr.UiServices.EPG { public partial class EpgBasicGridDialog : Form { private IList ServicesList; private UiBroadcastService CurrentService; private UiBroadcastService SelectedService; - private EpgEvent[,] EpgEvents; + private EpgProgram[,] EpgPrograms; private int CurrentRowIndex, SelectedRowIndex; private DateTime ReferenceTime; @@ -67,9 +67,9 @@ private void EpgBasicGridDialog_Load(object sender, EventArgs e) } // if } // foreach - EpgEvents = new EpgEvent[ServicesList.Count, 3]; + EpgPrograms = new EpgProgram[ServicesList.Count, 3]; - epgEventDisplay.Visible = false; + EpgProgramDisplay.Visible = false; buttonDisplayChannel.Enabled = false; buttonRecordChannel.Enabled = false; } // EpgBasicGridDialog_Load @@ -78,7 +78,7 @@ private void EpgBasicGridDialog_Shown(object sender, EventArgs e) { var workerOptions = new BackgroundWorkerOptions() { - OutputData = EpgEvents, + OutputData = EpgPrograms, BackgroundTask = AsyncBuildList, AllowAutoClose = true, TaskDescription = Properties.Texts.EpgDataLoadingList, @@ -98,16 +98,16 @@ private void EpgBasicGridDialog_Shown(object sender, EventArgs e) } // if */ - for (int index = 0; index < EpgEvents.GetLength(0); index++) + for (int index = 0; index < EpgPrograms.GetLength(0); index++) { var row = dataGridPrograms.Rows[index]; for (int cellIndex = 0; cellIndex < 3; cellIndex++) { - var epgEvent = EpgEvents[index, cellIndex]; + var epgProgram = EpgPrograms[index, cellIndex]; var cell = row.Cells[cellIndex + 1]; - if (epgEvent != null) + if (epgProgram != null) { - cell.Value = epgEvent.Title; + cell.Value = epgProgram.Title; } else { @@ -127,11 +127,11 @@ private void EpgBasicGridDialog_Shown(object sender, EventArgs e) private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) { - var result = options.OutputData as EpgEvent[,]; + var result = options.OutputData as EpgProgram[,]; - using (var cn = DbServices.GetConnection(AppUiConfiguration.Current.EpgDatabaseFile)) + using (var cn = DbServices.GetConnection(null)) // TODO: EPG AppUiConfiguration.Current.EpgDatabaseFile)) { - var serviceEvents = new Dictionary(ServicesList.Count, StringComparer.InvariantCultureIgnoreCase); + var serviceEvents = new Dictionary(ServicesList.Count, StringComparer.InvariantCultureIgnoreCase); foreach (var service in ServicesList) { // TODO: do not assume imagenio.es @@ -140,18 +140,20 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi var now = DateTime.Now; ReferenceTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0); + // TODO: EPG + /* var events = EpgDbQuery.GetAllServicesNowEvent(cn, ReferenceTime); foreach (var epgServiceEvent in events) { - var epgEvents = new EpgEvent[3]; - epgEvents[0] = epgServiceEvent.EpgEvent; - serviceEvents[epgServiceEvent.FullServiceName] = epgEvents; + var epgPrograms = new EpgProgram[3]; + epgPrograms[0] = epgServiceEvent.EpgProgram; + serviceEvents[epgServiceEvent.FullServiceName] = epgPrograms; } // foreach foreach (var serviceName in serviceEvents.Keys.ToList()) { - EpgEvent[] epgEvents; + EpgProgram[] epgPrograms; DateTime start; if (dialog.QueryCancel()) return; @@ -159,34 +161,34 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi var serviceDbId = EpgDbQuery.GetDatabaseIdForServiceId(serviceName, cn); if (serviceDbId <= 0) continue; - epgEvents = serviceEvents[serviceName]; - start = (epgEvents != null) ? start = epgEvents[0].LocalEndTime : ReferenceTime; + EpgPrograms = serviceEvents[serviceName]; + start = (epgPrograms != null) ? start = EpgPrograms[0].LocalEndTime : ReferenceTime; var afterEvents = EpgDbQuery.GetDateRange(cn, serviceDbId, start, null, 2); if (afterEvents.Count > 0) { - if (epgEvents == null) + if (EpgPrograms == null) { - epgEvents = new EpgEvent[3]; - serviceEvents[serviceName] = epgEvents; + EpgPrograms = new EpgProgram[3]; + serviceEvents[serviceName] = EpgPrograms; } // if for (int epgIndex = 0; epgIndex < afterEvents.Count; epgIndex++) { - epgEvents[epgIndex + 1] = afterEvents[epgIndex]; + EpgPrograms[epgIndex + 1] = afterEvents[epgIndex]; } // for epgIndex } // if } // foreach for (int index = 0; index < ServicesList.Count; index++) { - EpgEvent[] epgEvents; + EpgProgram[] epgPrograms; if (dialog.QueryCancel()) return; // TODO: do not assume imagenio.es var service = ServicesList[index]; - epgEvents = serviceEvents[service.ServiceName + ".imagenio.es"]; - if (epgEvents == null) + EpgPrograms = serviceEvents[service.ServiceName + ".imagenio.es"]; + if (EpgPrograms == null) { if (service.Data.ServiceInformation.ReplacementService != null) { @@ -194,9 +196,9 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi { if (replacement.Kind != "5") continue; if (replacement.TextualIdentifier == null) continue; - if (serviceEvents.TryGetValue(replacement.TextualIdentifier.ServiceName + ".imagenio.es", out epgEvents)) + if (serviceEvents.TryGetValue(replacement.TextualIdentifier.ServiceName + ".imagenio.es", out EpgPrograms)) { - if (epgEvents != null) + if (EpgPrograms != null) { break; } // if @@ -205,19 +207,20 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi } // if } // if - if (epgEvents == null) continue; + if (EpgPrograms == null) continue; - for (int epgIndex = 0; epgIndex < epgEvents.Length; epgIndex++) + for (int epgIndex = 0; epgIndex < EpgPrograms.Length; epgIndex++) { - EpgEvents[index, epgIndex] = epgEvents[epgIndex]; + EpgPrograms[index, epgIndex] = EpgPrograms[epgIndex]; } // if } // for index + */ } // using cn } // AsyncBuildList private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) { - EpgEvent epgEvent; + EpgProgram epgProgram; int columnIndex; string caption; @@ -227,7 +230,7 @@ private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) SelectedService = null; SelectedRowIndex = -1; columnIndex = -1; - epgEvent = null; + epgProgram = null; } else { @@ -235,7 +238,7 @@ private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) SelectedService = ServicesList[SelectedRowIndex]; columnIndex = cell.ColumnIndex; - epgEvent = (columnIndex > 0)? EpgEvents[cell.RowIndex, columnIndex - 1] : null; + epgProgram = (columnIndex > 0)? EpgPrograms[cell.RowIndex, columnIndex - 1] : null; switch (columnIndex) { @@ -247,12 +250,12 @@ private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) break; } // switch - epgEventDisplay.DisplayData(ServicesList[SelectedRowIndex], epgEvent, ReferenceTime, caption); + EpgProgramDisplay.DisplayData(ServicesList[SelectedRowIndex], epgProgram, ReferenceTime, caption); } // if-else - epgEventDisplay.Visible = (columnIndex > 0); + EpgProgramDisplay.Visible = (columnIndex > 0); buttonDisplayChannel.Enabled = (columnIndex == 1); - buttonRecordChannel.Enabled = (columnIndex >= 1) && (epgEvent != null); + buttonRecordChannel.Enabled = (columnIndex >= 1) && (epgProgram != null); } // dataGridPrograms_SelectionChanged private void buttonDisplayChannel_Click(object sender, EventArgs e) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx index e9f72370..53ae8c0c 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx @@ -270,28 +270,28 @@ 3 - + Bottom, Left, Right - + 12, 310 - + 454, 90 - + 35 - - epgEventDisplay + + EpgProgramDisplay - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null - + $this - + 0 diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs index ce6a45f8..b8eadd61 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs @@ -1,7 +1,7 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { partial class EpgChannelPrograms { @@ -43,7 +43,7 @@ private void InitializeComponent() this.buttonRecordChannel = new System.Windows.Forms.Button(); this.buttonOk = new System.Windows.Forms.Button(); this.pictureChannelLogo = new System.Windows.Forms.PictureBox(); - this.epgEventDetails = new Project.IpTv.UiServices.EPG.EpgEventMiniBar(); + this.EpgProgramDetails = new IpTviewr.UiServices.EPG.EpgProgramMiniBar(); ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).BeginInit(); this.SuspendLayout(); // @@ -117,7 +117,7 @@ private void InitializeComponent() // this.buttonDisplayChannel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonDisplayChannel.Enabled = false; - this.buttonDisplayChannel.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; + this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; this.buttonDisplayChannel.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.buttonDisplayChannel.Location = new System.Drawing.Point(141, 325); this.buttonDisplayChannel.Name = "buttonDisplayChannel"; @@ -133,7 +133,7 @@ private void InitializeComponent() // this.buttonRecordChannel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonRecordChannel.Enabled = false; - this.buttonRecordChannel.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Record_16x16; + this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Record_16x16; this.buttonRecordChannel.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.buttonRecordChannel.Location = new System.Drawing.Point(247, 325); this.buttonRecordChannel.Name = "buttonRecordChannel"; @@ -149,7 +149,7 @@ private void InitializeComponent() // this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.buttonOk.Location = new System.Drawing.Point(372, 325); this.buttonOk.Name = "buttonOk"; @@ -170,19 +170,19 @@ private void InitializeComponent() this.pictureChannelLogo.TabIndex = 18; this.pictureChannelLogo.TabStop = false; // - // epgEventDetails + // EpgProgramDetails // - this.epgEventDetails.Location = new System.Drawing.Point(12, 229); - this.epgEventDetails.Name = "epgEventDetails"; - this.epgEventDetails.Size = new System.Drawing.Size(460, 90); - this.epgEventDetails.TabIndex = 30; + this.EpgProgramDetails.Location = new System.Drawing.Point(12, 229); + this.EpgProgramDetails.Name = "EpgProgramDetails"; + this.EpgProgramDetails.Size = new System.Drawing.Size(460, 90); + this.EpgProgramDetails.TabIndex = 30; // // EpgChannelPrograms // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(484, 362); - this.Controls.Add(this.epgEventDetails); + this.Controls.Add(this.EpgProgramDetails); this.Controls.Add(this.buttonRecordChannel); this.Controls.Add(this.buttonDisplayChannel); this.Controls.Add(this.buttonOk); @@ -213,6 +213,6 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonOk; private System.Windows.Forms.Button buttonRecordChannel; private System.Windows.Forms.Button buttonDisplayChannel; - private EpgEventMiniBar epgEventDetails; + private EpgProgramMiniBar EpgProgramDetails; } // class EpgChannelPrograms } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs index 0593fff5..86de24a8 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs @@ -1,12 +1,12 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Services.EPG; -using Project.IpTv.Services.EPG.Serialization; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.EPG; +using IpTviewr.Services.EPG.Serialization; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; using System; using System.Collections.Generic; using System.ComponentModel; @@ -16,10 +16,10 @@ using System.Text; using System.Threading; using System.Windows.Forms; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.Core.IpTvProvider; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.Core.IpTvProvider; -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { public partial class EpgChannelPrograms : Form { @@ -92,12 +92,12 @@ private void comboBoxDate_SelectedIndexChanged(object sender, EventArgs e) private void listPrograms_SelectedIndexChanged(object sender, EventArgs e) { - var epgEvent = (listPrograms.SelectedItems.Count != 0) ? (EpgEvent)listPrograms.SelectedItems[0].Tag : null; - epgEventDetails.Visible = (epgEvent != null); - epgEventDetails.DisplayData(Service, epgEvent, ReferenceTime, "Programa"); + var epgProgram = (listPrograms.SelectedItems.Count != 0) ? (EpgProgram)listPrograms.SelectedItems[0].Tag : null; + EpgProgramDetails.Visible = (epgProgram != null); + EpgProgramDetails.DisplayData(Service, epgProgram, ReferenceTime, "Programa"); - buttonDisplayChannel.Enabled = (epgEvent != null) && (epgEvent.LocalStartTime <= ReferenceTime) && (epgEvent.LocalEndTime > ReferenceTime); - buttonRecordChannel.Enabled = (epgEvent != null) && (epgEvent.LocalEndTime >= ReferenceTime); + buttonDisplayChannel.Enabled = (epgProgram != null) && (epgProgram.LocalStartTime <= ReferenceTime) && (epgProgram.LocalEndTime > ReferenceTime); + buttonRecordChannel.Enabled = (epgProgram != null) && (epgProgram.LocalEndTime >= ReferenceTime); } // listPrograms_SelectedIndexChanged private void buttonDisplayChannel_Click(object sender, EventArgs e) @@ -120,7 +120,7 @@ private void StartLoadEpg() } // if comboBoxDate.Enabled = false; - epgEventDetails.Visible = false; + EpgProgramDetails.Visible = false; ThreadPool.QueueUserWorkItem(LoadEpg); } // StartLoadEpg @@ -130,13 +130,14 @@ private void LoadEpg(object state) ReferenceTime = DateTime.Now; var start = new DateTime(ReferenceTime.Year, ReferenceTime.Month, ReferenceTime.Day).AddDays(DaysDelta); var end = start.AddDays(1); - var epgEvents = EpgDbSerialization.GetServiceEvents(EpgDatabase, FullServiceName, FullAlternateServiceName, start, end); - this.BeginInvoke(new Action>(ShowEpg), epgEvents); + // TODO: EPG + //var epgPrograms = EpgDbSerialization.GetServiceEvents(EpgDatabase, FullServiceName, FullAlternateServiceName, start, end); + //this.BeginInvoke(new Action>(ShowEpg), epgPrograms); } // LoadEpg - private void ShowEpg(IList epgEvents) + private void ShowEpg(IList epgPrograms) { - EpgEvent last; + EpgProgram last; ListViewItem item, select; last = null; @@ -145,9 +146,9 @@ private void ShowEpg(IList epgEvents) listPrograms.BeginUpdate(); listPrograms.Items.Clear(); - foreach (var epgEvent in epgEvents) + foreach (var epgProgram in epgPrograms) { - if ((last != null) && (last.LocalEndTime != epgEvent.LocalStartTime)) + if ((last != null) && (last.LocalEndTime != epgProgram.LocalStartTime)) { item = new ListViewItem(last.LocalEndTime.ToShortTimeString()); item.UseItemStyleForSubItems = false; @@ -156,23 +157,23 @@ private void ShowEpg(IList epgEvents) } else { - item = new ListViewItem(epgEvent.LocalStartTime.ToShortTimeString()); + item = new ListViewItem(epgProgram.LocalStartTime.ToShortTimeString()); item.UseItemStyleForSubItems = false; item.Font = BoldListFont; - item.Tag = epgEvent; - item.SubItems.Add(epgEvent.Title); - item.ToolTipText = epgEvent.Title; + item.Tag = epgProgram; + item.SubItems.Add(epgProgram.Title); + item.ToolTipText = epgProgram.Title; } // if-else listPrograms.Items.Add(item); - last = epgEvent; + last = epgProgram; - if ((select == null) && (epgEvent.LocalStartTime <= ReferenceTime) && (epgEvent.LocalEndTime > ReferenceTime)) + if ((select == null) && (epgProgram.LocalStartTime <= ReferenceTime) && (epgProgram.LocalEndTime > ReferenceTime)) { select = item; } // if } // foreach - if (epgEvents.Count == 0) + if (epgPrograms.Count == 0) { item = new ListViewItem("--:--"); item.SubItems.Add("Información de programas no disponible para este canal"); diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs index 13148941..6e2b8e55 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs @@ -1,9 +1,9 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { - partial class EpgEventMiniBar + partial class EpgProgramMiniBar { /// /// Required designer variable. @@ -31,9 +31,9 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EpgEventMiniBar)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EpgProgramMiniBar)); this.buttonProgramProperties = new System.Windows.Forms.Button(); - this.pictureProgramThumbnail = new Project.IpTv.UiServices.Common.Controls.PictureBoxEx(); + this.pictureProgramThumbnail = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); this.labelProgramDetails = new System.Windows.Forms.Label(); this.labelProgramTitle = new System.Windows.Forms.Label(); this.labelProgramTime = new System.Windows.Forms.Label(); @@ -123,7 +123,7 @@ private void InitializeComponent() this.labelProgramCaption.TabIndex = 36; this.labelProgramCaption.Text = "(Program)"; // - // EpgEventMiniBar + // EpgProgramMiniBar // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; @@ -133,7 +133,7 @@ private void InitializeComponent() this.Controls.Add(this.labelProgramTitle); this.Controls.Add(this.labelProgramTime); this.Controls.Add(this.labelProgramCaption); - this.Name = "EpgEventMiniBar"; + this.Name = "EpgProgramMiniBar"; this.Size = new System.Drawing.Size(400, 90); ((System.ComponentModel.ISupportInitialize)(this.pictureProgramThumbnail)).EndInit(); this.ResumeLayout(false); @@ -149,5 +149,5 @@ private void InitializeComponent() private System.Windows.Forms.Label labelProgramTitle; private System.Windows.Forms.Label labelProgramTime; private System.Windows.Forms.Label labelProgramCaption; - } // class EpgEventMiniBar + } // class EpgProgramMiniBar } // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs index 16c52624..5f6a057d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System; @@ -9,59 +9,61 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.EPG; -using Project.IpTv.Common; -using Project.IpTv.Core.IpTvProvider; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Common.Forms; +using IpTviewr.Services.EPG; +using IpTviewr.Common; +using IpTviewr.Core.IpTvProvider; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.Services.EPG.Serialization; -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { - public partial class EpgEventMiniBar : UserControl + public partial class EpgProgramMiniBar : UserControl { private UiBroadcastService Service; - private EpgEvent EpgEvent; + private EpgProgram EpgProgram; - public EpgEventMiniBar() + public EpgProgramMiniBar() { InitializeComponent(); } // constructor - public void DisplayData(UiBroadcastService service, EpgEvent epgEvent, DateTime referenceTime, string caption) + public void DisplayData(UiBroadcastService service, EpgProgram epgProgram, DateTime referenceTime, string caption) { Service = service; - EpgEvent = epgEvent; + EpgProgram = epgProgram; labelProgramCaption.Text = caption; labelProgramCaption.Visible = caption != null; - labelProgramTime.Visible = (epgEvent != null); - labelProgramDetails.Visible = (epgEvent != null); + labelProgramTime.Visible = (epgProgram != null); + labelProgramDetails.Visible = (epgProgram != null); pictureProgramThumbnail.ImageLocation = null; - buttonProgramProperties.Visible = (epgEvent != null); - pictureProgramThumbnail.Cursor = (epgEvent != null) ? Cursors.Hand : Cursors.Default; + buttonProgramProperties.Visible = (epgProgram != null); + pictureProgramThumbnail.Cursor = (epgProgram != null) ? Cursors.Hand : Cursors.Default; - if (epgEvent == null) + if (EpgProgram == null) { labelProgramTitle.Text = Properties.Texts.EpgNoInformation; pictureProgramThumbnail.Image = Properties.Resources.EpgNoProgramImage; } else { - labelProgramTitle.Text = epgEvent.Title; - labelProgramTime.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(epgEvent.LocalStartTime, epgEvent.LocalEndTime, referenceTime), - FormatString.TimeSpanTotalMinutes(epgEvent.Duration, FormatString.Format.Extended)); - labelProgramDetails.Text = string.Format("{0} / {1}", (epgEvent.Genre != null) ? epgEvent.Genre.Description : Properties.Texts.EpgNoGenre, - (epgEvent.ParentalRating != null) ? epgEvent.ParentalRating.Description : Properties.Texts.EpgNoParentalRating); + labelProgramTitle.Text = EpgProgram.Title; + labelProgramTime.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(EpgProgram.LocalStartTime, EpgProgram.LocalEndTime, referenceTime), + FormatString.TimeSpanTotalMinutes(EpgProgram.Duration, FormatString.Format.Extended)); + labelProgramDetails.Text = string.Format("{0} / {1}", (EpgProgram.Genre != null) ? EpgProgram.Genre.Description : Properties.Texts.EpgNoGenre, + (EpgProgram.ParentalRating != null) ? EpgProgram.ParentalRating.Description : Properties.Texts.EpgNoParentalRating); pictureProgramThumbnail.Image = Properties.Resources.EpgLoadingProgramImage; pictureProgramThumbnail.ImageLocation = null; - pictureProgramThumbnail.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(service, epgEvent, false); + // TODO: EPG + // pictureProgramThumbnail.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(service, EpgProgram, false); } // if-else } // DisplayData private void buttonProgramProperties_Click(object sender, EventArgs e) { - EpgExtendedInfoDialog.ShowExtendedInfo(this, Service, EpgEvent); + EpgExtendedInfoDialog.ShowExtendedInfo(this, Service, EpgProgram); } // buttonProgramProperties_Click private void pictureProgramThumbnail_LoadCompleted(object sender, AsyncCompletedEventArgs e) @@ -74,7 +76,7 @@ private void pictureProgramThumbnail_LoadCompleted(object sender, AsyncCompleted private void pictureProgramThumbnail_Click(object sender, EventArgs e) { - EpgExtendedInfoDialog.ShowExtendedInfo(this, Service, EpgEvent); + EpgExtendedInfoDialog.ShowExtendedInfo(this, Service, EpgProgram); } // pictureProgramThumbnail_Click - } // class EpgEventMiniBar + } // class EpgProgramMiniBar } // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs index 322fbe82..ee25baa3 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs @@ -1,7 +1,7 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { partial class EpgExtendedInfoDialog { @@ -79,7 +79,7 @@ private void InitializeComponent() // // contextRtfMenuCopy // - this.contextRtfMenuCopy.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Copy_Clip_16x16; + this.contextRtfMenuCopy.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Copy_Clip_16x16; this.contextRtfMenuCopy.Name = "contextRtfMenuCopy"; resources.ApplyResources(this.contextRtfMenuCopy, "contextRtfMenuCopy"); this.contextRtfMenuCopy.Click += new System.EventHandler(this.contextRtfMenuCopy_Click); @@ -93,7 +93,7 @@ private void InitializeComponent() // buttonNext // resources.ApplyResources(this.buttonNext, "buttonNext"); - this.buttonNext.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Forward_16x16; + this.buttonNext.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Forward_16x16; this.buttonNext.Name = "buttonNext"; this.buttonNext.UseVisualStyleBackColor = true; this.buttonNext.Click += new System.EventHandler(this.buttonNext_Click); @@ -101,7 +101,7 @@ private void InitializeComponent() // buttonPrevious // resources.ApplyResources(this.buttonPrevious, "buttonPrevious"); - this.buttonPrevious.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Back_16x16; + this.buttonPrevious.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Back_16x16; this.buttonPrevious.Name = "buttonPrevious"; this.buttonPrevious.UseVisualStyleBackColor = true; this.buttonPrevious.Click += new System.EventHandler(this.buttonPrevious_Click); @@ -109,7 +109,7 @@ private void InitializeComponent() // buttonRecordProgram // resources.ApplyResources(this.buttonRecordProgram, "buttonRecordProgram"); - this.buttonRecordProgram.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Record_16x16; + this.buttonRecordProgram.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Record_16x16; this.buttonRecordProgram.Name = "buttonRecordProgram"; this.buttonRecordProgram.UseVisualStyleBackColor = true; this.buttonRecordProgram.Click += new System.EventHandler(this.buttonRecordProgram_Click); @@ -117,7 +117,7 @@ private void InitializeComponent() // buttonShowProgram // resources.ApplyResources(this.buttonShowProgram, "buttonShowProgram"); - this.buttonShowProgram.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; + this.buttonShowProgram.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; this.buttonShowProgram.Name = "buttonShowProgram"; this.buttonShowProgram.UseVisualStyleBackColor = true; this.buttonShowProgram.Click += new System.EventHandler(this.buttonShowProgram_Click); @@ -126,7 +126,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // @@ -140,15 +140,15 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonZoom, "buttonZoom"); this.buttonZoom.Cursor = System.Windows.Forms.Cursors.Hand; - this.buttonZoom.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_FullView_16x16; + this.buttonZoom.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_FullView_16x16; this.buttonZoom.Name = "buttonZoom"; this.buttonZoom.UseVisualStyleBackColor = true; // // pictureProgramPreview // resources.ApplyResources(this.pictureProgramPreview, "pictureProgramPreview"); - this.pictureProgramPreview.ErrorImage = global::Project.IpTv.UiServices.EPG.Properties.Resources.EpgNoProgramImage; - this.pictureProgramPreview.Image = global::Project.IpTv.UiServices.EPG.Properties.Resources.EpgLoadingProgramImage; + this.pictureProgramPreview.ErrorImage = global::IpTviewr.UiServices.EPG.Properties.Resources.EpgNoProgramImage; + this.pictureProgramPreview.Image = global::IpTviewr.UiServices.EPG.Properties.Resources.EpgLoadingProgramImage; this.pictureProgramPreview.Name = "pictureProgramPreview"; this.pictureProgramPreview.TabStop = false; this.pictureProgramPreview.LoadCompleted += new System.ComponentModel.AsyncCompletedEventHandler(this.pictureProgramPreview_LoadCompleted); diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs index 8f4a5f44..82138d33 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System; @@ -9,31 +9,36 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Core.IpTvProvider; -using Project.IpTv.Core.IpTvProvider.EPG; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Common.Forms; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; -using Project.IpTv.UiServices.Discovery.BroadcastList; - -namespace Project.IpTv.UiServices.EPG +using IpTviewr.Core.IpTvProvider; +// TODO: EPG +// using IpTviewr.Core.IpTvProvider.EPG; +using IpTviewr.Services.EPG; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Discovery.BroadcastList; +using IpTviewr.Services.EPG.Serialization; + +namespace IpTviewr.UiServices.EPG { public partial class EpgExtendedInfoDialog : Form { private Encoding Ansi1252Encoding; private DateTime ReferenceTime; - public static void ShowExtendedInfo(IWin32Window owner, UiBroadcastService service, EpgEvent epgEvent) + public static void ShowExtendedInfo(IWin32Window owner, UiBroadcastService service, EpgProgram epgProgram) { using (var dialog = new EpgExtendedInfoDialog()) { + // TODO: EPG + /* dialog.ProgramInfo = new ProgramEpgInfo() { Service = service, - Base = epgEvent, + Base = epgProgram, }; dialog.ShowDialog(owner); + */ } // using dialog } // ShowExtendedInfo @@ -44,11 +49,14 @@ public EpgExtendedInfoDialog() Ansi1252Encoding = Encoding.GetEncoding(1252); } // constructor + // TODO: EPG + /* public ProgramEpgInfo ProgramInfo { get; set; } // ProgramInfo + */ private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) { @@ -56,7 +64,8 @@ private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) buttonPrevious.Visible = false; //(NavigationCallback != null); buttonNext.Visible = false; // (NavigationCallback != null); - if (ProgramInfo == null) return; + // TODO: EPG + // if (ProgramInfo == null) return; /* if ((CurrentEpgInfo == null) && (NavigationCallback == null)) @@ -70,14 +79,16 @@ private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) } // if */ - pictureChannelLogo.Image = ProgramInfo.Service.Logo.GetImage(LogoSize.Size48, true); - labelChannelName.Text = UiBroadcastListManager.GetColumnData(ProgramInfo.Service, UiBroadcastListColumn.NumberAndNameCrlf); + // TODO: EPG + // pictureChannelLogo.Image = ProgramInfo.Service.Logo.GetImage(LogoSize.Size48, true); + // labelChannelName.Text = UiBroadcastListManager.GetColumnData(ProgramInfo.Service, UiBroadcastListColumn.NumberAndNameCrlf); richTextProgramData.Text = Properties.EpgRtf.LoadingProgramData; labelAdditionalDetails.Text = null; pictureProgramPreview.Image = Properties.Resources.EpgLoadingProgramImage; pictureProgramPreview.ImageLocation = null; - pictureProgramPreview.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(ProgramInfo.Service, ProgramInfo.Base, true); + // TODO: EPG + // pictureProgramPreview.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(ProgramInfo.Service, ProgramInfo.Base, true); buttonShowProgram.Enabled = false; buttonRecordProgram.Enabled = false; @@ -85,19 +96,21 @@ private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) private void EpgExtendedInfoDialog_Shown(object sender, EventArgs e) { - ProgramInfo.Extended = IpTvProvider.Current.EpgInfo.GetEpgInfo(ProgramInfo.Service, ProgramInfo.Base, true); - if (ProgramInfo.Extended == null) - { + // TODO: EPG + // ProgramInfo.Extended = IpTvProvider.Current.EpgInfo.GetEpgInfo(ProgramInfo.Service, ProgramInfo.Base, true); + // if (ProgramInfo.Extended == null) + // { richTextProgramData.Text = Properties.EpgRtf.NullProgramData; - } - else - { - DisplayEpgInfo(); - } // if-else + // } + // else + // { + // DisplayEpgInfo(); + // } // if-else } // EpgExtendedInfoDialog_Shown private void DisplayEpgInfo() { + /* StringBuilder rtf; //buttonPrevious.Enabled = CurrentEpgInfo.PreviousEnabled; @@ -147,6 +160,7 @@ private void DisplayEpgInfo() buttonShowProgram.Enabled = (ProgramInfo.Base.LocalStartTime <= ReferenceTime) && (ProgramInfo.Base.LocalEndTime > ReferenceTime); buttonRecordProgram.Enabled = (ProgramInfo.Base.LocalEndTime >= ReferenceTime); + */ } // DisplayEpgInfo private string Extract(string[] longText, string[] shortText, string defaultText) @@ -266,7 +280,8 @@ private void buttonNext_Click(object sender, EventArgs e) private void buttonShowProgram_Click(object sender, EventArgs e) { - ExternalTvPlayer.ShowTvChannel(this, ProgramInfo.Service); + // TODO: EPG + // ExternalTvPlayer.ShowTvChannel(this, ProgramInfo.Service); } private void buttonRecordProgram_Click(object sender, EventArgs e) @@ -280,6 +295,6 @@ private void pictureProgramPreview_LoadCompleted(object sender, AsyncCompletedEv { (sender as PictureBox).Image = Properties.Resources.EpgNoProgramImage; } // if - } + } // pictureProgramPreview_LoadCompleted } // class } // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.Designer.cs index ac5ecd3a..739edd5b 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.Designer.cs @@ -1,7 +1,7 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { partial class EpgMiniBar { @@ -45,7 +45,7 @@ private void InitializeComponent() this.buttonForward = new System.Windows.Forms.Button(); this.buttonBack = new System.Windows.Forms.Button(); this.labelFromTo = new System.Windows.Forms.Label(); - this.epgProgressBar = new Project.IpTv.UiServices.EPG.EpgProgressBarFixed(); + this.epgProgressBar = new IpTviewr.UiServices.EPG.EpgProgressBarFixed(); this.pictureChannelLogo = new System.Windows.Forms.PictureBox(); this.buttonFullView = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).BeginInit(); @@ -92,7 +92,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonDetails, "buttonDetails"); this.buttonDetails.FlatAppearance.BorderSize = 0; - this.buttonDetails.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Properties_16x16; + this.buttonDetails.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Properties_16x16; this.buttonDetails.Name = "buttonDetails"; this.toolTipControl.SetToolTip(this.buttonDetails, resources.GetString("buttonDetails.ToolTip")); this.buttonDetails.UseVisualStyleBackColor = true; @@ -102,7 +102,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonEpgGrid, "buttonEpgGrid"); this.buttonEpgGrid.FlatAppearance.BorderSize = 0; - this.buttonEpgGrid.Image = global::Project.IpTv.UiServices.EPG.Properties.Resources.Action_Epg_16x16; + this.buttonEpgGrid.Image = global::IpTviewr.UiServices.EPG.Properties.Resources.Action_Epg_16x16; this.buttonEpgGrid.Name = "buttonEpgGrid"; this.toolTipControl.SetToolTip(this.buttonEpgGrid, resources.GetString("buttonEpgGrid.ToolTip")); this.buttonEpgGrid.UseVisualStyleBackColor = true; @@ -112,7 +112,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonForward, "buttonForward"); this.buttonForward.FlatAppearance.BorderSize = 0; - this.buttonForward.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Forward_16x16; + this.buttonForward.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Forward_16x16; this.buttonForward.Name = "buttonForward"; this.toolTipControl.SetToolTip(this.buttonForward, resources.GetString("buttonForward.ToolTip")); this.buttonForward.UseVisualStyleBackColor = true; @@ -122,7 +122,7 @@ private void InitializeComponent() // this.buttonBack.FlatAppearance.BorderSize = 0; resources.ApplyResources(this.buttonBack, "buttonBack"); - this.buttonBack.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Back_16x16; + this.buttonBack.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Back_16x16; this.buttonBack.Name = "buttonBack"; this.toolTipControl.SetToolTip(this.buttonBack, resources.GetString("buttonBack.ToolTip")); this.buttonBack.UseVisualStyleBackColor = true; @@ -148,7 +148,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonFullView, "buttonFullView"); this.buttonFullView.FlatAppearance.BorderSize = 0; - this.buttonFullView.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_FullView_16x16; + this.buttonFullView.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_FullView_16x16; this.buttonFullView.Name = "buttonFullView"; this.toolTipControl.SetToolTip(this.buttonFullView, resources.GetString("buttonFullView.ToolTip")); this.buttonFullView.UseVisualStyleBackColor = true; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.cs index a6713f32..135021ac 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System; @@ -9,27 +9,27 @@ using System.Linq; using System.Text; using System.Windows.Forms; -using Project.IpTv.Services.EPG; -using Project.IpTv.Services.EPG.Serialization; -using Project.IpTv.Services.SqlServerCE; -using Project.IpTv.Common; +using IpTviewr.Services.EPG; +using IpTviewr.Services.EPG.Serialization; +using IpTviewr.Services.SqlServerCE; +using IpTviewr.Common; -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { public partial class EpgMiniBar : UserControl { - private EpgEvent[] EpgEvents; + private EpgProgram[] EpgPrograms; private int EpgIndex; private int CurrentRequestId; - private class LoadEpgEventsData + private class LoadEpgProgramsData { public int RequestId; public string FullServiceName; public string FullAlternateServiceName; public DateTime ReferenceTime; - public EpgEvent[] EpgEvents; - } // class LoadEpgEventsData + public EpgProgram[] EpgPrograms; + } // class LoadEpgProgramsData public enum Button { @@ -49,9 +49,9 @@ public EpgMiniBar() AutoRefresh = true; } // constructor - public EpgEvent SelectedEvent + public EpgProgram SelectedEvent { - get { return (EpgEvents == null) ? null : EpgEvents[EpgIndex]; } + get { return (EpgPrograms == null) ? null : EpgPrograms[EpgIndex]; } } // SelectedEvent public bool IsDisabled @@ -108,18 +108,18 @@ private void timerAutoRefresh_Tick(object sender, EventArgs e) { try { - RefreshEpgEvents(DateTime.Now); + RefreshEpgPrograms(DateTime.Now); } catch { } // try-catch } // timerAutoRefresh_Tick - public void ClearEpgEvents() + public void ClearEpgPrograms() { timerLoadingData.Enabled = false; SetAutoRefreshTimer(false); - EpgEvents = null; + EpgPrograms = null; EpgIndex = -1; pictureChannelLogo.Image = null; @@ -134,9 +134,9 @@ public void ClearEpgEvents() EnableBackForward(false, false); buttonEpgGrid.Enabled = true; buttonDetails.Enabled = false; - } // ClearEpgEvents + } // ClearEpgPrograms - public void DisplayEpgEvents(Image channelLogo, string fullServiceName, string fullAlternateServiceName, DateTime referenceTime, string epgDatabase) + public void DisplayEpgPrograms(Image channelLogo, string fullServiceName, string fullAlternateServiceName, DateTime referenceTime, string epgDatabase) { EpgDatabase = epgDatabase; FullServiceName = fullServiceName; @@ -144,38 +144,38 @@ public void DisplayEpgEvents(Image channelLogo, string fullServiceName, string f ReferenceTime = new DateTime(referenceTime.Year, referenceTime.Month, referenceTime.Day, referenceTime.Hour, referenceTime.Minute, 0, 0); // clean-up UI - ClearEpgEvents(); + ClearEpgPrograms(); pictureChannelLogo.Image = channelLogo; - LoadEpgEventsAsync(); - } // DisplayEpgEvents + LoadEpgProgramsAsync(); + } // DisplayEpgPrograms - public void RefreshEpgEvents(DateTime referenceTime) + public void RefreshEpgPrograms(DateTime referenceTime) { ReferenceTime = new DateTime(referenceTime.Year, referenceTime.Month, referenceTime.Day, referenceTime.Hour, referenceTime.Minute, 0, 0); - LoadEpgEventsAsync(); - } // RefreshEpgEvents + LoadEpgProgramsAsync(); + } // RefreshEpgPrograms - public EpgEvent[] GetEpgEvents() + public EpgProgram[] GetEpgPrograms() { - if (EpgEvents == null) return null; + if (EpgPrograms == null) return null; - var result = new EpgEvent[EpgEvents.Length]; - Array.Copy(EpgEvents, result, EpgEvents.Length); + var result = new EpgProgram[EpgPrograms.Length]; + Array.Copy(EpgPrograms, result, EpgPrograms.Length); return result; - } // GetEpgEvents + } // GetEpgPrograms public void GoBack() { if (EpgIndex < 0) return; - DisplayEpgEvent(EpgIndex - 1); + DisplayEpgProgram(EpgIndex - 1); } // GoBack public void GoForward() { if (EpgIndex > 2) return; - DisplayEpgEvent(EpgIndex + 1); + DisplayEpgProgram(EpgIndex + 1); } // GoFoward private void buttonBack_Click(object sender, EventArgs e) @@ -224,7 +224,7 @@ private void buttonEpgGrid_Click(object sender, EventArgs e) buttonClicked(this, new EpgMiniBarButtonClickedEventArgs(Button.EpgGrid)); } // buttonEpgGrid_Click - private void LoadEpgEventsAsync() + private void LoadEpgProgramsAsync() { if (IsDisabled) return; @@ -233,7 +233,7 @@ private void LoadEpgEventsAsync() timerLoadingData.Enabled = false; timerLoadingData.Enabled = true; - var data = new LoadEpgEventsData() + var data = new LoadEpgProgramsData() { RequestId = ++CurrentRequestId, FullServiceName = this.FullServiceName, @@ -241,30 +241,31 @@ private void LoadEpgEventsAsync() ReferenceTime = this.ReferenceTime }; - System.Threading.ThreadPool.QueueUserWorkItem((o) => LoadEpgEvents(data), null); - } // LoadEpgEventsAsync + System.Threading.ThreadPool.QueueUserWorkItem((o) => LoadEpgPrograms(data), null); + } // LoadEpgProgramsAsync - private void LoadEpgEvents(LoadEpgEventsData data) + private void LoadEpgPrograms(LoadEpgProgramsData data) { int serviceDbId; using (var cn = DbServices.GetConnection(EpgDatabase)) { - serviceDbId = EpgDbQuery.GetDatabaseIdForServiceId(FullServiceName, cn); - data.EpgEvents = EpgDbQuery.GetBeforeNowAndThenEvents(cn, serviceDbId, ReferenceTime.ToUniversalTime()); + // TODO: EPG + // serviceDbId = EpgDbQuery.GetDatabaseIdForServiceId(FullServiceName, cn); + // data.EpgPrograms = EpgDbQuery.GetBeforeNowAndThenEvents(cn, serviceDbId, ReferenceTime.ToUniversalTime()); // try alternate service if no EPG data - if ((data.EpgEvents == null) && (FullAlternateServiceName != null)) + if ((data.EpgPrograms == null) && (FullAlternateServiceName != null)) { - serviceDbId = EpgDbQuery.GetDatabaseIdForServiceId(FullAlternateServiceName, cn); - data.EpgEvents = EpgDbQuery.GetBeforeNowAndThenEvents(cn, serviceDbId, ReferenceTime.ToUniversalTime()); + // serviceDbId = EpgDbQuery.GetDatabaseIdForServiceId(FullAlternateServiceName, cn); + // data.EpgPrograms = EpgDbQuery.GetBeforeNowAndThenEvents(cn, serviceDbId, ReferenceTime.ToUniversalTime()); } // if - this.BeginInvoke(new Action(DisplayEpgEvents), data); + this.BeginInvoke(new Action(DisplayEpgPrograms), data); } // using - } // LoadEpgEvents + } // LoadEpgPrograms - private void DisplayEpgEvents(LoadEpgEventsData data) + private void DisplayEpgPrograms(LoadEpgProgramsData data) { // ignore data if not from current request // as data is loading async, "old" load request may arrive if channel is quickly changed @@ -273,39 +274,39 @@ private void DisplayEpgEvents(LoadEpgEventsData data) timerLoadingData.Enabled = false; SetAutoRefreshTimer(true); - EpgEvents = data.EpgEvents; - buttonFullView.Enabled = (EpgEvents != null); + EpgPrograms = data.EpgPrograms; + buttonFullView.Enabled = (EpgPrograms != null); - if (EpgEvents == null) + if (EpgPrograms == null) { - DisplayEpgEvent(0); + DisplayEpgProgram(0); } else { - if ((EpgIndex != -1) && (EpgEvents[EpgIndex] != null)) + if ((EpgIndex != -1) && (EpgPrograms[EpgIndex] != null)) { - DisplayEpgEvent(EpgIndex); + DisplayEpgProgram(EpgIndex); } - else if (EpgEvents[1] != null) + else if (EpgPrograms[1] != null) { - DisplayEpgEvent(1); + DisplayEpgProgram(1); } - else if (EpgEvents[0] != null) + else if (EpgPrograms[0] != null) { - DisplayEpgEvent(0); + DisplayEpgProgram(0); } - else if (EpgEvents[2] != null) + else if (EpgPrograms[2] != null) { - DisplayEpgEvent(2); + DisplayEpgProgram(2); } else { - DisplayEpgEvent(0); + DisplayEpgProgram(0); } // if-else } // if-else - } // DisplayEpgEvents + } // DisplayEpgPrograms - private void DisplayEpgEvent(int index) + private void DisplayEpgProgram(int index) { TimeSpan ellapsed; @@ -316,10 +317,10 @@ private void DisplayEpgEvent(int index) labelStartTime.Visible = (index == 1); labelFromTo.Visible = (index != 1); - var epgEvent = (EpgEvents != null) ? EpgEvents[EpgIndex] : null; + var EpgProgram = (EpgPrograms != null) ? EpgPrograms[EpgIndex] : null; - buttonDetails.Enabled = DetailsButtonEnabled && (epgEvent != null); - if (epgEvent == null) + buttonDetails.Enabled = DetailsButtonEnabled && (EpgProgram != null); + if (EpgProgram == null) { labelProgramTitle.Text = Properties.Texts.EpgNoInformation; labelFromTo.Text = null; @@ -329,33 +330,33 @@ private void DisplayEpgEvent(int index) return; } // if - labelProgramTitle.Text = epgEvent.Title; + labelProgramTitle.Text = EpgProgram.Title; switch (EpgIndex) { case 0: - labelFromTo.Text = FormatString.DateTimeFromToMinutes(epgEvent.LocalStartTime, epgEvent.LocalEndTime, ReferenceTime); - ellapsed = (ReferenceTime - epgEvent.LocalEndTime); + labelFromTo.Text = FormatString.DateTimeFromToMinutes(EpgProgram.LocalStartTime, EpgProgram.LocalEndTime, ReferenceTime); + ellapsed = (ReferenceTime - EpgProgram.LocalEndTime); labelEllapsed.Text = string.Format(Properties.Texts.ProgramEnded, FormatString.TimeSpanTotalMinutes(ellapsed, FormatString.Format.Extended)); - EnableBackForward(false, EpgEvents[1] != null); + EnableBackForward(false, EpgPrograms[1] != null); break; case 1: - labelStartTime.Text = string.Format("{0:HH:mm}", epgEvent.LocalStartTime); - labelEndTime.Text = string.Format("{0:t}", epgEvent.LocalEndTime); - ellapsed = (ReferenceTime - epgEvent.LocalStartTime); - epgProgressBar.MaximumValue = epgEvent.Duration.TotalMinutes; + labelStartTime.Text = string.Format("{0:HH:mm}", EpgProgram.LocalStartTime); + labelEndTime.Text = string.Format("{0:t}", EpgProgram.LocalEndTime); + ellapsed = (ReferenceTime - EpgProgram.LocalStartTime); + epgProgressBar.MaximumValue = EpgProgram.Duration.TotalMinutes; epgProgressBar.Value = ellapsed.TotalMinutes; labelEllapsed.Text = string.Format(Properties.Texts.ProgramStarted, FormatString.TimeSpanTotalMinutes(ellapsed, FormatString.Format.Extended)); - EnableBackForward(EpgEvents[0] != null, EpgEvents[2] != null); + EnableBackForward(EpgPrograms[0] != null, EpgPrograms[2] != null); break; default: - labelFromTo.Text = FormatString.DateTimeFromToMinutes(epgEvent.LocalStartTime, epgEvent.LocalEndTime, ReferenceTime); - ellapsed = (epgEvent.LocalStartTime - ReferenceTime); + labelFromTo.Text = FormatString.DateTimeFromToMinutes(EpgProgram.LocalStartTime, EpgProgram.LocalEndTime, ReferenceTime); + ellapsed = (EpgProgram.LocalStartTime - ReferenceTime); labelEllapsed.Text = string.Format(Properties.Texts.ProgramWillStart, FormatString.TimeSpanTotalMinutes(ellapsed, FormatString.Format.Extended)); - EnableBackForward(EpgEvents[1] != null, false); + EnableBackForward(EpgPrograms[1] != null, false); break; } // switch - } // DisplayEpgEvent + } // DisplayEpgProgram private void EnableBackForward(bool back, bool forward) { diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.resx index dd0b75de..e5d0142d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBar.resx @@ -436,7 +436,7 @@ epgProgressBar - Project.IpTv.UiServices.EPG.EpgProgressBarFixed, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.EPG.EpgProgressBarFixed, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null $this diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBarEventArgs.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBarEventArgs.cs index 9d8ba236..60c49d80 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBarEventArgs.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniBarEventArgs.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System; @@ -6,7 +6,7 @@ using System.Linq; using System.Text; -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { public class EpgMiniBarButtonClickedEventArgs : EventArgs { diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs index 1f8f550b..ae6ed96f 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs @@ -1,7 +1,7 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { partial class EpgNowThenDialog { @@ -35,9 +35,9 @@ private void InitializeComponent() this.labelChannelName = new System.Windows.Forms.Label(); this.pictureChannelLogo = new System.Windows.Forms.PictureBox(); this.buttonOk = new System.Windows.Forms.Button(); - this.epgEventBefore = new Project.IpTv.UiServices.EPG.EpgEventMiniBar(); - this.epgEventNow = new Project.IpTv.UiServices.EPG.EpgEventMiniBar(); - this.epgEventThen = new Project.IpTv.UiServices.EPG.EpgEventMiniBar(); + this.EpgProgramBefore = new IpTviewr.UiServices.EPG.EpgProgramMiniBar(); + this.EpgProgramNow = new IpTviewr.UiServices.EPG.EpgProgramMiniBar(); + this.EpgProgramThen = new IpTviewr.UiServices.EPG.EpgProgramMiniBar(); ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).BeginInit(); this.SuspendLayout(); // @@ -58,32 +58,32 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::Project.IpTv.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // - // epgEventBefore + // EpgProgramBefore // - resources.ApplyResources(this.epgEventBefore, "epgEventBefore"); - this.epgEventBefore.Name = "epgEventBefore"; + resources.ApplyResources(this.EpgProgramBefore, "EpgProgramBefore"); + this.EpgProgramBefore.Name = "EpgProgramBefore"; // - // epgEventNow + // EpgProgramNow // - resources.ApplyResources(this.epgEventNow, "epgEventNow"); - this.epgEventNow.Name = "epgEventNow"; + resources.ApplyResources(this.EpgProgramNow, "EpgProgramNow"); + this.EpgProgramNow.Name = "EpgProgramNow"; // - // epgEventThen + // EpgProgramThen // - resources.ApplyResources(this.epgEventThen, "epgEventThen"); - this.epgEventThen.Name = "epgEventThen"; + resources.ApplyResources(this.EpgProgramThen, "EpgProgramThen"); + this.EpgProgramThen.Name = "EpgProgramThen"; // // FormEpgNowThen // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.epgEventThen); - this.Controls.Add(this.epgEventNow); - this.Controls.Add(this.epgEventBefore); + this.Controls.Add(this.EpgProgramThen); + this.Controls.Add(this.EpgProgramNow); + this.Controls.Add(this.EpgProgramBefore); this.Controls.Add(this.labelChannelName); this.Controls.Add(this.pictureChannelLogo); this.Controls.Add(this.buttonOk); @@ -104,8 +104,8 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonOk; private System.Windows.Forms.PictureBox pictureChannelLogo; private System.Windows.Forms.Label labelChannelName; - private EpgEventMiniBar epgEventBefore; - private EpgEventMiniBar epgEventNow; - private EpgEventMiniBar epgEventThen; + private EpgProgramMiniBar EpgProgramBefore; + private EpgProgramMiniBar EpgProgramNow; + private EpgProgramMiniBar EpgProgramThen; } // class EpgNowThenDialog } // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs index fa57b81d..abf75f2e 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs @@ -1,12 +1,13 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. -using Project.IpTv.Common; -using Project.IpTv.Common.Serialization; -using Project.IpTv.Common.Telemetry; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Configuration.Logos; -using Project.IpTv.UiServices.Discovery; +using IpTviewr.Common; +using IpTviewr.Common.Serialization; +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.EPG; +using IpTviewr.Services.EPG.Serialization; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; using System; using System.Collections.Generic; using System.ComponentModel; @@ -16,12 +17,12 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { public partial class EpgNowThenDialog : Form { private UiBroadcastService Service; - private EpgEvent[] EpgEvents; + private EpgProgram[] EpgPrograms; private DateTime ReferenceTime; public EpgNowThenDialog() @@ -29,12 +30,12 @@ public EpgNowThenDialog() InitializeComponent(); } // constructor - public static void ShowEpgEvents(UiBroadcastService service, EpgEvent[] epg, IWin32Window owner, DateTime referenceTime) + public static void ShowEpgPrograms(UiBroadcastService service, EpgProgram[] epg, IWin32Window owner, DateTime referenceTime) { using (var form = new EpgNowThenDialog()) { form.Service = service; - form.EpgEvents = epg; + form.EpgPrograms = epg; form.ReferenceTime = referenceTime; form.ShowDialog(owner); } // using form @@ -47,9 +48,9 @@ private void FormBasicEpgData_Load(object sender, EventArgs e) pictureChannelLogo.Image = Service.Logo.GetImage(LogoSize.Size48, true); labelChannelName.Text = string.Format("{0}\r\n{1}", Service.DisplayLogicalNumber, Service.DisplayName); - epgEventBefore.DisplayData(Service, (EpgEvents != null) ? EpgEvents[0] : null, ReferenceTime, Properties.Texts.EpgProgramBeforeCaption); - epgEventNow.DisplayData(Service, (EpgEvents != null) ? EpgEvents[1] : null, ReferenceTime, Properties.Texts.EpgProgramNowCaption); - epgEventThen.DisplayData(Service, (EpgEvents != null) ? EpgEvents[2] : null, ReferenceTime, Properties.Texts.EpgProgramThenCaption); + EpgProgramBefore.DisplayData(Service, (EpgPrograms != null) ? EpgPrograms[0] : null, ReferenceTime, Properties.Texts.EpgProgramBeforeCaption); + EpgProgramNow.DisplayData(Service, (EpgPrograms != null) ? EpgPrograms[1] : null, ReferenceTime, Properties.Texts.EpgProgramNowCaption); + EpgProgramThen.DisplayData(Service, (EpgPrograms != null) ? EpgPrograms[2] : null, ReferenceTime, Properties.Texts.EpgProgramThenCaption); } // FormBasicEpgData_Load } // class EpgNowThenDialog } // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.es.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.es.resx index f5b1bdc5..6dfd19d6 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.es.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.es.resx @@ -121,13 +121,13 @@ &Cerrar - + 510, 90 - + 510, 90 - + 510, 90 diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.resx index 5629f3eb..d2a8d786 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.resx @@ -124,55 +124,55 @@ 100, 25 - + 0 - + 1 - + 18 NoControl - + 12, 162 - + 1 3 - + $this - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null - + 12, 162 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 12, 66 FormEpgNowThen - + 20 ImageBeforeText - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null NoControl @@ -183,13 +183,13 @@ 6, 13 - + 2 - + 510, 90 - + 19 @@ -198,29 +198,29 @@ labelChannelName - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null - + $this 12, 12 - + $this - - epgEventThen + + EpgProgramThen 16 - - epgEventMiniBar3 + + EpgProgramMiniBar3 - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null 66, 12 @@ -228,25 +228,25 @@ 48, 48 - + 0 - + 19 Segoe UI, 11.25pt, style=Bold - + $this - + 12, 258 456, 48 - + 510, 90 @@ -255,8 +255,8 @@ 5 - - epgEventNow + + EpgProgramNow $this @@ -267,7 +267,7 @@ buttonOk - + $this @@ -276,13 +276,13 @@ Bottom, Right - + 20 - + $this - + 12, 258 @@ -294,8 +294,8 @@ MiddleLeft - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null 17 @@ -309,16 +309,16 @@ EPG information - + 18 - - epgEventMiniBar1 + + EpgProgramMiniBar1 - + 12, 66 - + 2 @@ -330,8 +330,8 @@ &Close - - epgEventMiniBar2 + + EpgProgramMiniBar2 pictureChannelLogo @@ -339,19 +339,19 @@ 534, 390 - - Project.IpTv.UiServices.EPG.EpgEventMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null 12 - - epgEventBefore + + EpgProgramBefore $this - + 510, 90 diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs index 8b43002b..1f75acd8 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System; @@ -9,7 +9,7 @@ using System.Text; using System.Windows.Forms; -namespace Project.IpTv.UiServices.EPG +namespace IpTviewr.UiServices.EPG { public class EpgProgressBarFixed: Control { diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs index 8f9571db..27a7ac4d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. using System.Reflection; @@ -9,7 +9,7 @@ // set of attributes. Change these attribute parameters to modify the information // associated with an assembly. [assembly: AssemblyTitle("UI Services: EPG")] -[assembly: AssemblyDescription("Project.IpTv.UiServices.EPG")] +[assembly: AssemblyDescription("IpTviewr.UiServices.EPG")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] [assembly: AssemblyCulture("")] diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs index 9da51cef..5e0bd718 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.EPG.Properties { +namespace IpTviewr.UiServices.EPG.Properties { using System; @@ -39,7 +39,7 @@ internal EpgRtf() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.EPG.Properties.EpgRtf", typeof(EpgRtf).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.EpgRtf", typeof(EpgRtf).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs index 33713a12..ec6a9259 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.EPG.Properties { +namespace IpTviewr.UiServices.EPG.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.EPG.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs index a102d5c9..45762312 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace Project.IpTv.UiServices.EPG.Properties { +namespace IpTviewr.UiServices.EPG.Properties { using System; @@ -39,7 +39,7 @@ internal Texts() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.UiServices.EPG.Properties.Texts", typeof(Texts).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.Texts", typeof(Texts).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj index 74731cd3..986a72fc 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj +++ b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj @@ -1,5 +1,5 @@  - + Debug @@ -7,14 +7,15 @@ {004C3829-FED4-4084-B23B-871193AFA8C7} Library Properties - Project.IpTv.UiServices.EPG + IpTviewr.UiServices.EPG UiServices.EPG - v3.5 + v4.5.2 512 SAK SAK SAK SAK + true @@ -24,6 +25,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -32,6 +34,7 @@ TRACE prompt 4 + false @@ -151,6 +154,7 @@ EpgNowThenDialog.cs + Designer EpgExtendedInfoDialog.cs @@ -165,6 +169,21 @@ Texts.Designer.cs + + + Resources\Action_Copy_Clip_16x16.png + + + Resources\Action_Properties_16x16.png + + + + + + + + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} @@ -178,9 +197,9 @@ {8da15060-5a78-4f89-a9f1-7aa56b0d622c} Project.Common - - {ed5c1cf5-0975-4995-8933-9a7df39fd739} - Services.EPG + + {5a171dbb-855c-452b-93c6-229c7aa6c7a6} + Services.EPG.Serialization {3a053f34-4edf-4071-b966-923255a0ae14} @@ -199,21 +218,6 @@ UiServices.Discovery - - - Resources\Action_Copy_Clip_16x16.png - - - Resources\Action_Properties_16x16.png - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Falta información sobre el programa + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.resx b/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.resx new file mode 100644 index 00000000..6f855c6b --- /dev/null +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Insufficient information about the program + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj b/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj index 7c6ec2aa..3138bb14 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj @@ -43,14 +43,25 @@ + + + + + + + + True + True + Texts.resx + @@ -79,6 +90,16 @@ Project.Common + + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + El canal de TV seleccionado ha sido marcado como inactivo y puede no estar disponible. + +¿Todavía desea programar una grabación para {0}? + + + Se ha creado correctamente la tarea de grabación. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx index 24e3d296..cd3980a7 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ..\..\common.ui\resources\action_cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -133,4 +133,12 @@ ..\..\common.ui\resources\action_play_lg_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + The selected TV channel has been marked as inactive and might not be available. + +Do you still want to schedule a recording of {0}? + + + The recording task has been sucessfully created. + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index ab538d4f..f72b433b 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -19,6 +19,8 @@ namespace IpTviewr.UiServices.Record { public partial class RecordChannelDialog : CommonBaseForm { + public static readonly TimeSpan DefaultExpiryDateTimeSpan = new TimeSpan(1, 0, 0, 0); + private const string ListLocationsSelectedImageKey = "selected"; private const string ListLocationsDefaultImageKey = "folder"; @@ -167,7 +169,7 @@ private void InitScheduleData() else { checkBoxExpiryDate.Checked = false; - dateTimeExpiryDate.Value = CurrentStartDateTime + new TimeSpan(15, 0, 0, 0); + dateTimeExpiryDate.Value = CurrentStartDateTime + DefaultExpiryDateTimeSpan; } // if-else // Safety margin @@ -364,7 +366,7 @@ private void UpdateTaskName() { if (IsTaskNameUserProvided) return; - var taskName = string.Format(Properties.RecordChannel.RecordTaskNameSuggestedNameFormat, Task.Channel.Name, CurrentStartDateTime, CurrentStartDateTime); + var taskName = RecordDescription.CreateTaskName(Task.Channel, CurrentStartDateTime); textTaskName.SetText(taskName, false); } // UpdateTaskName diff --git a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj index 07306d64..a060db2f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj +++ b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj @@ -37,6 +37,10 @@ false + + False + ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + @@ -115,6 +119,7 @@ RecordChannelDialog.cs + Form @@ -178,6 +183,7 @@ ResXFileCodeGenerator ControlTexts.Designer.cs + ResXFileCodeGenerator Resources.Designer.cs @@ -205,6 +211,10 @@ {8da15060-5a78-4f89-a9f1-7aa56b0d622c} Project.Common + + {5a171dbb-855c-452b-93c6-229c7aa6c7a6} + Services.EpgDiscovery + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} Services.Record.Serialization @@ -221,6 +231,10 @@ {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + {90f750b3-64db-493f-96a6-e68de5ea60a1} UiServices.Forms From b839ae96e40345c97c78a4b49c89c3e9b5580916 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Thu, 1 Sep 2016 01:32:37 +0200 Subject: [PATCH 26/76] Enhancements on AppUiConfiguration.User.Record Added new property: RecorderLauncherPath (avoids hard-coding filenames) Enhanced RecordSaveLocations --- .../Properties/InvariantTexts.Designer.cs | 9 +++++++++ .../Properties/InvariantTexts.resx | 7 +++++-- .../Schema2014/Config/RecordConfig.cs | 7 +++++++ .../Schema2014/Config/RecordSaveLocation.cs | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs index 70996118..cf3f9409 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs @@ -159,6 +159,15 @@ internal static string FormatServiceLogoKey { } } + /// + /// Looks up a localized string similar to IpTvRecorderLauncher.exe. + /// + internal static string RecorderLauncher { + get { + return ResourceManager.GetString("RecorderLauncher", resourceCulture); + } + } + /// /// Looks up a localized string similar to Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.1010.0. /// diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx index 2c67f4ff..f3cac378 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx +++ b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 DBV-IPTV @@ -150,6 +150,9 @@ {0}::{1} + + IpTvRecorderLauncher.exe + Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.1010.0 diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs index 06f886f3..8851bc4f 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Xml.Serialization; @@ -37,6 +38,12 @@ public RecorderConfig[] Recorders set; } // Recorders + [XmlIgnore] + public string RecorderLauncherPath + { + get { return Path.Combine(AppUiConfiguration.Current.Folders.Install, Properties.InvariantTexts.RecorderLauncher); } + } // RecorderLauncherPath + public string Validate(string ownerTag) { string validationError; diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs index 970f4b30..9bfb1275 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs +++ b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs @@ -25,6 +25,15 @@ public RecordSaveLocation(string name, string path) Path = path; } // constructor + public static RecordSaveLocation GetDefaultSaveLocation(IEnumerable saveLocations) + { + var q = from location in saveLocations + where location.IsDefaultSaveLocation + select location; + + return q.First(); + } // GetDefaultSaveLocation + [XmlAttribute("name")] public string Name { @@ -39,6 +48,11 @@ public string Path set { Item2 = ConfigCommon.Normalize(value); } } // Value + public bool IsDefaultSaveLocation + { + get { return string.IsNullOrEmpty(Name); } + } // IsDefaultSaveLocation + public string Validate(string ownerTag) { /* From 3cf8d1ad80b9091ad16f8a1b1ffa35eb193bb23b Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Thu, 1 Sep 2016 01:45:05 +0200 Subject: [PATCH 27/76] Code refactoring: RecordHelper All code in ChannelList regarding the record action has been moved to a new class in UiServices.Record, named RecordHelper This new helper also allows to record a given EpgProgram This will make a lot easier to implement the 'record' button in several epg-related dialogs --- .../Properties/RecordChannel.Designer.cs | 50 ++ .../Properties/RecordChannel.es.resx | 10 +- .../Properties/RecordChannel.resx | 21 + .../Properties/Resources.Designer.cs | 50 ++ .../Properties/Resources.resx | 15 + .../RecordChannelDialog.Designer.cs | 7 - .../UiServices.Record/RecordChannelDialog.cs | 11 + .../RecordChannelDialog.resx | 204 +++--- .../UiServices.Record/RecordHelper.cs | 158 +++++ .../RecordProgramOptions.Designer.cs | 191 ++++++ .../UiServices.Record/RecordProgramOptions.cs | 134 ++++ .../RecordProgramOptions.es.resx | 148 +++++ .../RecordProgramOptions.resx | 606 ++++++++++++++++++ .../Resources/Action_Record_16x16.png | Bin 0 -> 429 bytes .../Resources/Icon_Record_48x48.png | Bin 0 -> 2074 bytes .../Resources/Icon_Recorder.ico | Bin 0 -> 31056 bytes .../Resources/Status_Info_16x16.png | Bin 0 -> 814 bytes .../Resources/Status_Warning_16x16.png | Bin 0 -> 618 bytes .../UiServices.Record.csproj | 17 + 19 files changed, 1502 insertions(+), 120 deletions(-) create mode 100644 1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs create mode 100644 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs create mode 100644 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs create mode 100644 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx create mode 100644 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx create mode 100644 1.5 'Kruger 60'/UiServices.Record/Resources/Action_Record_16x16.png create mode 100644 1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Record_48x48.png create mode 100644 1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Recorder.ico create mode 100644 1.5 'Kruger 60'/UiServices.Record/Resources/Status_Info_16x16.png create mode 100644 1.5 'Kruger 60'/UiServices.Record/Resources/Status_Warning_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs index efee5190..a3df1e8e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs @@ -90,6 +90,20 @@ internal static string EmptyTaskName { } } + /// + /// Looks up a localized string similar to .ts + ///.raw + ///.mpg + ///.mp2 + ///.mp4 + ///.m2ts. + /// + internal static string FileExtensions { + get { + return ResourceManager.GetString("FileExtensions", resourceCulture); + } + } + /// /// Looks up a localized string similar to A save location has not been selected. ///Please select one or browse for a folder.. @@ -100,6 +114,24 @@ internal static string NoSaveLocation { } } + /// + /// Looks up a localized string similar to Record. + /// + internal static string RecordButtonDefault { + get { + return ResourceManager.GetString("RecordButtonDefault", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Record.... + /// + internal static string RecordButtonSettings { + get { + return ResourceManager.GetString("RecordButtonSettings", resourceCulture); + } + } + /// /// Looks up a localized string similar to <Custom location>. /// @@ -127,6 +159,24 @@ internal static string SaveMissingLocation { } } + /// + /// Looks up a localized string similar to No program has been selected or there is insufficient information.. + /// + internal static string SelectedProgramIsNullOrBlank { + get { + return ResourceManager.GetString("SelectedProgramIsNullOrBlank", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The program has already begun. It will be recorded from now.. + /// + internal static string SelectedProgramIsRightNow { + get { + return ResourceManager.GetString("SelectedProgramIsRightNow", resourceCulture); + } + } + /// /// Looks up a localized string similar to <No folder>. /// diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx index 7d89b8c9..f90c9126 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 La extensión del archivo de la grabación no puede estar en blanco. @@ -145,6 +145,12 @@ Por favor seleccione una ubicación o seleccione una carpeta. <No localizada> + + No se seleccionado ningún programa o la información es insuficiente. + + + El programa ya ha comenzado. Se grabará a partir de ahora. + <En ninguna carpeta> diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx index 06fb4f3a..374c1532 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx @@ -129,10 +129,25 @@ Please specify a name. The name of the task can not be empty. Please specify a name. + + .ts +.raw +.mpg +.mp2 +.mp4 +.m2ts + One extension per line, starting with the dot [.] + A save location has not been selected. Please select one or browse for a folder. + + Record + + + Record... + <Custom location> @@ -142,6 +157,12 @@ Please select one or browse for a folder. <Missing location> + + No program has been selected or there is insufficient information. + + + The program has already begun. It will be recorded from now. + <No folder> diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs index 14e750fe..2fdfae6a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs @@ -110,6 +110,36 @@ internal static System.Drawing.Bitmap Action_Play_LG_16x16 { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Record_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Record_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Icon_Record_48x48 { + get { + object obj = ResourceManager.GetObject("Icon_Record_48x48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Icon_Recorder { + get { + object obj = ResourceManager.GetObject("Icon_Recorder", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + /// /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. /// @@ -129,5 +159,25 @@ internal static string SchedulerCreateTaskOk { return ResourceManager.GetString("SchedulerCreateTaskOk", resourceCulture); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Info_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Warning_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx index cd3980a7..d46e8356 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx @@ -133,6 +133,15 @@ ..\..\common.ui\resources\action_play_lg_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\resources\action_record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\icon_recorder.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\icon_record_48x48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + The selected TV channel has been marked as inactive and might not be available. @@ -141,4 +150,10 @@ Do you still want to schedule a recording of {0}? The recording task has been sucessfully created. + + ..\resources\status_info_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\status_warning_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs index 5ca3dd5d..573532a7 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs @@ -345,13 +345,6 @@ private void InitializeComponent() // resources.ApplyResources(this.comboFileExtension, "comboFileExtension"); this.comboFileExtension.FormattingEnabled = true; - this.comboFileExtension.Items.AddRange(new object[] { - resources.GetString("comboFileExtension.Items"), - resources.GetString("comboFileExtension.Items1"), - resources.GetString("comboFileExtension.Items2"), - resources.GetString("comboFileExtension.Items3"), - resources.GetString("comboFileExtension.Items4"), - resources.GetString("comboFileExtension.Items5")}); this.comboFileExtension.Name = "comboFileExtension"; this.comboFileExtension.Validating += new System.ComponentModel.CancelEventHandler(this.comboFileExtension_Validating); // diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index f72b433b..03b643aa 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -41,6 +41,14 @@ public bool IsNewTask set; } // IsNewTask + public static string[] GetFilenameExtensions() + { + var separators = new string[] { "\r\n" }; + var extensions = Properties.RecordChannel.FileExtensions.Split(separators, StringSplitOptions.RemoveEmptyEntries); + + return extensions; + } // GetFilenameExtensions + public RecordChannelDialog() { InitializeComponent(); @@ -376,6 +384,9 @@ private void UpdateTaskName() private void InitSaveData() { + // Fill extensions combo + comboFileExtension.Items.AddRange(GetFilenameExtensions()); + // Name (filename) if (IsNewTask) { diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx index 2ada54f7..28c7d296 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx @@ -112,22 +112,22 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + False Name - + 150 - + False @@ -136,11 +136,11 @@ 250 - + Top, Left, Right - + Segoe UI, 12pt, style=Bold @@ -163,7 +163,7 @@ labelChannelName - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -199,7 +199,7 @@ labelChannelDescription - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -232,7 +232,7 @@ buttonOk - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -268,7 +268,7 @@ buttonCancel - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -292,7 +292,7 @@ dateTimeExpiryDate - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSchedule @@ -322,7 +322,7 @@ checkBoxExpiryDate - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSchedule @@ -352,7 +352,7 @@ labelStartMarginSufix - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSchedule @@ -376,7 +376,7 @@ numericStartMargin - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSchedule @@ -406,7 +406,7 @@ checkBoxStartMargin - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSchedule @@ -427,7 +427,7 @@ recordingSchedule - IpTviewr.UiServices.Record.Controls.RecordingSchedule, UiServices.Record, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingSchedule, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageSchedule @@ -454,7 +454,7 @@ tabPageSchedule - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabProperties @@ -475,7 +475,7 @@ recordingTime - IpTviewr.UiServices.Record.Controls.RecordingDuration, UiServices.Record, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingDuration, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageLength @@ -505,7 +505,7 @@ labelEndMarginSufix - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageLength @@ -529,7 +529,7 @@ numericEndMargin - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageLength @@ -559,7 +559,7 @@ checkBoxEndMargin - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageLength @@ -586,7 +586,7 @@ tabPageLength - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabProperties @@ -619,7 +619,7 @@ checkAppendRecordingDetails - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageDescription @@ -646,7 +646,7 @@ textTaskDescription - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageDescription @@ -676,7 +676,7 @@ labelTaskDescription - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageDescription @@ -706,7 +706,7 @@ checkAddTaskPrefix - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageDescription @@ -736,7 +736,7 @@ labelTaskName - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageDescription @@ -760,7 +760,7 @@ textTaskName - IpTviewr.UiServices.Controls.FilenameTextBox, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageDescription @@ -784,7 +784,7 @@ tabPageDescription - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabProperties @@ -801,58 +801,58 @@ 425, 156 - + 17, 17 - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0 - CwAAAk1TRnQBSQFMAgEBAgEAAegBAQHoAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AUUBAAH/AbgBRQEAAf8DOAFcFAABuAGjAZQB/wEq - ARABAAH/ASoBEAEAAf8BKgEQAQAB/wEqARABAAH/ASoBEAEAAf8BKgEQAQAB/wEqARABAAH/ASoBEAEA - Af8BKgEQAQAB/wEqARABAAH/ASoBEAEAAf8BKgEQAQAB/wEqARABAAH/ASoBEAEAAf8BKgEQAQAB/6AA - AbgBRQEAAf8B8QHMAY4B/wG4AUUBAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL + CwAAAk1TRnQBSQFMAgEBAgEAAfABAQHwAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AUQBAAH/AbgBRAEAAf8DOAFcFAABuAGjAZQB/wEp + AQ8BAAH/ASkBDwEAAf8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEAAf8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEA + Af8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEAAf8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEAAf8BKQEPAQAB/6AA + AbgBRAEAAf8B8QHMAY4B/wG4AUQBAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi - AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASoBEAEAAf+gAAG4AUUBAAH/AfABwAEzAf8B7wHK - AYwB/wG4AUUBAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy + AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASkBDwEAAf+gAAG4AUQBAAH/AfABwAEyAf8B7wHK + AYwB/wG4AUQBAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt - Af8B5AG9AaYB/wHhAbcBngH/ASoBEAEAAf+AAANDAXcBuAFFAQAB/wG4AUUBAAH/AbgBRQEAAf8BuAFF - AQAB/wG4AUUBAAH/AbgBRQEAAf8BuAFFAQAB/wG4AUUBAAH/AfMBxQE1Af8B5QGZAQAB/wHvAcsBjAH/ - AbgBRQEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY + Af8B5AG9AaYB/wHhAbcBngH/ASkBDwEAAf+AAANDAXcBuAFEAQAB/wG4AUQBAAH/AbgBRAEAAf8BuAFE + AQAB/wG4AUQBAAH/AbgBRAEAAf8BuAFEAQAB/wG4AUQBAAH/AfMBxQE0Af8B5QGZAQAB/wHvAcsBjAH/ + AbgBRAEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn - AcQBsAH/AeMBvQGlAf8BKgEQAQAB/4AAAaUBLQEAAf8B6QG6AS4B/wHuAcEBMwH/AfQBxwE2Af8B9wHM - ATgB/wH6Ac8BOgH/AfsBzwE6Af8B+wHPAToB/wH5AcwBOQH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ - Ae8BygGMAf8BsgE9AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh + AcQBsAH/AeMBvQGlAf8BKQEPAQAB/4AAAaUBLAEAAf8B6QG6AS0B/wHuAcEBMgH/AfQBxwE1Af8B9wHM + ATcB/wH6Ac8BOQH/AfsBzwE5Af8B+wHPATkB/wH5AcwBOAH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ + Ae8BygGMAf8BsgE8AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq - AcwBuwH/AecBxgGzAf8B5AG+AacB/wEqARABAAH/gAABpQEtAQAB/wFoAVMBKwH8Ad0BlAEAAf8B5AGb + AcwBuwH/AecBxgGzAf8B5AG+AacB/wEpAQ8BAAH/gAABpQEsAQAB/wFnAVEBKwH8Ad0BlAEAAf8B5AGb AQAB/wHtAaUBAAH/AfMBrAEAAf8B+AGxAQAB/wH5AbIBAAH/AfkBsQEAAf8B9QGtAQAB/wHyAacBAAH/ - AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBPQEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ + AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBPAEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX - AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASoBEAEAAf+AAAGlAS0BAAH/AWgBVwEr + AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASkBDwEAAf+AAAGlASwBAAH/AWcBVgEr AfwB3AGcAQAB/wHgAZ0BAAH/AecBoQEAAf8B7QGmAQAB/wHzAasBAAH/AfgBsQEAAf8B+QGyAQAB/wH4 - AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzAT8BAAH/AcABqwGc + AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzAT4BAAH/AcABqwGc Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy - AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASoBEAEA - Af+AAAGlAS0BAAH/AdwBqQEcAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ - AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEeAf8BswE/ + AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASkBDwEA + Af+AAAGlASwBAAH/AdwBqQEbAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ + AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEdAf8BswE+ AQAB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ - AecBxwGyAf8BKgEQAQAB/4AAAaUBLQEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl - Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAElAf8BswE/AQAB/wM4AVwEAAHD + AecBxwGyAf8BKQEPAQAB/4AAAaUBLAEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl + Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEkAf8BswE+AQAB/wM4AVwEAAHD Aa4BnwH/Af0B+wH4Af8B/AH4AfYB/wH7AfYB8gH/AfoB8wHvAf8B+QHwAeoB/wH4AfEB7AH/AfgB7wHp - Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEq - ARABAAH/gAADQwF3AaUBLQEAAf8BpQEtAQAB/wGlAS0BAAH/AaUBLQEAAf8BpQEtAQAB/wGlAS0BAAH/ - AaUBLQEAAf8BpQEtAQAB/wH4AbwBCAH/AfsBwQEKAf8B/AHSAT8B/wGzAT8BAAH/AzgBXAgAAcUBrwGg + Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEp + AQ8BAAH/gAADQwF3AaUBLAEAAf8BpQEsAQAB/wGlASwBAAH/AaUBLAEAAf8BpQEsAQAB/wGlASwBAAH/ + AaUBLAEAAf8BpQEsAQAB/wH4AbwBBwH/AfsBwQEJAf8B/AHSAT4B/wGzAT4BAAH/AzgBXAgAAcUBrwGg Af8B/gH7AfgB/wH9AfoB+QH/AfwB+AH1Af8B+wH1AfIB/wH6AfIB7gH/AfkB8QHsAf8BvQGpAZsB/wG9 - AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEqARABAAH/ASoBEAEA - Af+gAAGlAS0BAAH/AfMBtgEDAf8B+wHQAT4B/wGzAT8BAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ - AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BNwEeAQsB/wHWAdEBzgH/AckBxAHA - Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wFDASoBGAH/pAABpQEtAQAB/wHzAcgBOQH/ - AbMBPwEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 - AfYB8gH/AZ0BiAE9Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt - Af8BngGKAUEB/6QAAaUBLQEAAf8BswE/AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB + AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEpAQ8BAAH/ASkBDwEA + Af+gAAGlASwBAAH/AfMBtgECAf8B+wHQAT0B/wGzAT4BAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ + AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BNgEdAQoB/wHWAdEBzgH/AckBxAHA + Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wFCASkBFwH/pAABpQEsAQAB/wHzAcgBOAH/ + AbMBPgEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 + AfYB8gH/AZ0BiAE8Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt + Af8BngGKAUAB/6QAAaUBLAEAAf8BswE+AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB AasBnAH/Ab4BqQGaAf8BuwGmAZcB/wG5AaQBlQH/AbcBogGTAf8B2AHHAbwB/wHOAbwBrgH/AcgBtAGn Af8BwwGuAaAB/wG8AacBmAH/AbkBpAGVAf8BrQGZAYwB/6QAA1MBqgM4AVz/ANkAAUIBTQE+BwABPgMA ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AT8C/wQAAf8BHwYAAf8BDwYAAf8BBwcAAQMHAAEB @@ -866,7 +866,7 @@ listViewLocations - IpTviewr.UiServices.Controls.ListViewSortable, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageSave @@ -896,7 +896,7 @@ buttonSelectFolder - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSave @@ -907,24 +907,6 @@ Top, Right - - .ts - - - .raw - - - .mpg - - - .mp2 - - - .mp4 - - - .m2ts - 368, 22 @@ -938,7 +920,7 @@ comboFileExtension - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSave @@ -962,7 +944,7 @@ textFilename - IpTviewr.UiServices.Controls.FilenameTextBox, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageSave @@ -992,7 +974,7 @@ labelFilename - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSave @@ -1022,7 +1004,7 @@ labelSaveLocation - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageSave @@ -1046,7 +1028,7 @@ tabPageSave - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabProperties @@ -1067,7 +1049,7 @@ timeSpanSchedulerDeleteTaskAfter - IpTviewr.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageAdvanced @@ -1088,7 +1070,7 @@ timeSpanSchedulerRetry - IpTviewr.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null tabPageAdvanced @@ -1121,7 +1103,7 @@ comboSchedulerAlreadyRunning - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1151,7 +1133,7 @@ labelSchedulerConcurrent - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1181,7 +1163,7 @@ checkSchedulerDeleteTask - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1202,7 +1184,7 @@ numericSchedulerMaxRetries - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1232,7 +1214,7 @@ labelSchedulerMaxRetries - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1262,7 +1244,7 @@ checkSchedulerRetry - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1292,7 +1274,7 @@ checkSchedulerASAP - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1316,7 +1298,7 @@ comboSchedulerFolder - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1346,7 +1328,7 @@ labelSchedulerFolder - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced @@ -1370,7 +1352,7 @@ tabPageAdvanced - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabProperties @@ -1391,7 +1373,7 @@ tabProperties - System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -1424,7 +1406,7 @@ labelChannelNumber - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -1451,7 +1433,7 @@ pictureChannelLogo - IpTviewr.UiServices.Controls.PictureBoxEx, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -1459,10 +1441,10 @@ 6 - + 172, 17 - + True @@ -1481,30 +1463,30 @@ ColumnName - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColumnLocation - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 imageListLocations - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 selectFolder - IpTviewr.UiServices.Controls.SelectFolderDialog, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null RecordChannelDialog - IpTviewr.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs new file mode 100644 index 00000000..83cfdd2a --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs @@ -0,0 +1,158 @@ +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.Services.Record; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Discovery; +using Microsoft.SqlServer.MessageBox; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Record +{ + public class RecordHelper + { + public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService service, EpgProgram program, DateTime localReferenceTime, bool allowRecordChannel = true) + { + RecordProgramOptions.RecordOption option; + + if (service == null) return false; + if (VerifyIsInactive(ownerForm, service)) return false; + + // select record options + using (var dlg = new RecordProgramOptions()) + { + dlg.SelectedService = service; + dlg.SelectedProgram = program; + dlg.LocalReferenceTime = localReferenceTime; + dlg.AllowRecordChannel = allowRecordChannel; + dlg.ShowDialog(ownerForm); + option = dlg.SelectedOption; + } // using + + if (option == RecordProgramOptions.RecordOption.None) return false; + + // create record task and allow to edit it + var task = CreateRecordTask(service, program); + if (option != RecordProgramOptions.RecordOption.Default) + { + using (var dlg = new RecordChannelDialog()) + { + dlg.Task = task; + dlg.IsNewTask = false; + dlg.ShowDialog(ownerForm); + task = dlg.Task; + if (dlg.DialogResult != DialogResult.OK) return false; + } // using dlg + } // if + + // schedule task + var scheduler = new Scheduler(ownerForm.GetExceptionHandler(), + AppUiConfiguration.Current.Folders.RecordTasks, AppUiConfiguration.Current.User.Record.RecorderLauncherPath); + + if (scheduler.CreateTask(task)) + { + MessageBox.Show(ownerForm, Properties.Resources.SchedulerCreateTaskOk, ownerForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + return true; + } // if + + return false; + } // RecordService + + public static bool CanRecord(EpgProgram program, bool allowRecordChannel = true) + { + if (allowRecordChannel) return true; + + if ((program == null) || (program.IsBlank)) return false; + + return true; + } // CanRecord + + private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastService service) + { + if (service.IsInactive) + { + var box = new ExceptionMessageBox() + { + Caption = ownerForm.Text, + Text = string.Format(Properties.Resources.RecordDeadTvChannel, service.DisplayName), + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Question, + Buttons = ExceptionMessageBoxButtons.YesNo, + DefaultButton = ExceptionMessageBoxDefaultButton.Button2, + }; + + if (box.Show(ownerForm) != DialogResult.Yes) return true; + } // if + + return false; + } // VerifyIsInactive + + private static RecordTask CreateRecordTask(UiBroadcastService service, EpgProgram program) + { + RecordChannel channel; + + channel = new RecordChannel() + { + LogicalNumber = service.DisplayLogicalNumber, + Name = service.DisplayName, + Description = service.DisplayDescription, + ServiceKey = service.Key, + ServiceName = service.FullServiceName, + ChannelUrl = service.LocationUrl, + }; + + if ((program == null) || (program.IsBlank)) + { + return RecordTask.CreateWithDefaultValues(channel); + } + else + { + var schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime) as RecordScheduleTime; + schedule.StartDate = program.LocalStartTime; + schedule.ExpiryDate = program.LocalEndTime + program.Duration + RecordChannelDialog.DefaultExpiryDateTimeSpan; + + var duration = RecordDuration.CreateWithDefaultValues(); + duration.Length = program.Duration; + + var description = RecordDescription.CreateWithDefaultValues(); + description.Name = RecordDescription.CreateTaskName(channel, schedule.StartDate); + description.Description = program.ParentalRating.Description; + + /* var extended = program as EpgProgramExtended; + if (extended != null) + { + + } + else */ + { + description.Description = program.ParentalRating.Description; + } + + var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppUiConfiguration.Current.User.Record.SaveLocations); + var action = RecordAction.CreateWithDefaultValues(); + action.Filename = string.Format("{0} - {1}", service.DisplayName, program.Title); + action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; + action.SaveLocationName = defaultLocation.Name; + action.SaveLocationPath = defaultLocation.Path; + + var task = new RecordTask() + { + Channel = channel, + Schedule = schedule, + Duration = duration, + Description = description, + Action = RecordAction.CreateWithDefaultValues(), + AdvancedSettings = RecordAdvancedSettings.CreateWithDefaultValues(), + }; + + return task; + } // if-else + } // CreateRecordTask + } // class RecordHelper +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs new file mode 100644 index 00000000..27684cda --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs @@ -0,0 +1,191 @@ +namespace IpTviewr.UiServices.Record +{ + partial class RecordProgramOptions + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordProgramOptions)); + this.labelProgramDescription = new System.Windows.Forms.Label(); + this.labelChannelName = new System.Windows.Forms.Label(); + this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.labelProgramSchedule = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.pictureIconRec = new System.Windows.Forms.PictureBox(); + this.labelInfo = new System.Windows.Forms.Label(); + this.pictureIconInfo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.radioRecordChannel = new System.Windows.Forms.RadioButton(); + this.radioRecordProgramEdit = new System.Windows.Forms.RadioButton(); + this.radioRecordProgramDefault = new System.Windows.Forms.RadioButton(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconRec)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).BeginInit(); + this.SuspendLayout(); + // + // labelProgramDescription + // + resources.ApplyResources(this.labelProgramDescription, "labelProgramDescription"); + this.labelProgramDescription.AutoEllipsis = true; + this.labelProgramDescription.Name = "labelProgramDescription"; + this.labelProgramDescription.UseMnemonic = false; + // + // labelChannelName + // + resources.ApplyResources(this.labelChannelName, "labelChannelName"); + this.labelChannelName.AutoEllipsis = true; + this.labelChannelName.Name = "labelChannelName"; + this.labelChannelName.UseMnemonic = false; + // + // pictureChannelLogo + // + this.pictureChannelLogo.BackColor = System.Drawing.SystemColors.Control; + resources.ApplyResources(this.pictureChannelLogo, "pictureChannelLogo"); + this.pictureChannelLogo.Name = "pictureChannelLogo"; + this.pictureChannelLogo.TabStop = false; + // + // labelProgramSchedule + // + resources.ApplyResources(this.labelProgramSchedule, "labelProgramSchedule"); + this.labelProgramSchedule.AutoEllipsis = true; + this.labelProgramSchedule.Name = "labelProgramSchedule"; + this.labelProgramSchedule.UseMnemonic = false; + // + // groupBox1 + // + resources.ApplyResources(this.groupBox1, "groupBox1"); + this.groupBox1.Controls.Add(this.pictureIconRec); + this.groupBox1.Controls.Add(this.labelInfo); + this.groupBox1.Controls.Add(this.pictureIconInfo); + this.groupBox1.Controls.Add(this.radioRecordChannel); + this.groupBox1.Controls.Add(this.radioRecordProgramEdit); + this.groupBox1.Controls.Add(this.radioRecordProgramDefault); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.TabStop = false; + // + // pictureIconRec + // + this.pictureIconRec.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Icon_Record_48x48; + resources.ApplyResources(this.pictureIconRec, "pictureIconRec"); + this.pictureIconRec.Name = "pictureIconRec"; + this.pictureIconRec.TabStop = false; + // + // labelInfo + // + resources.ApplyResources(this.labelInfo, "labelInfo"); + this.labelInfo.Name = "labelInfo"; + // + // pictureIconInfo + // + resources.ApplyResources(this.pictureIconInfo, "pictureIconInfo"); + this.pictureIconInfo.Name = "pictureIconInfo"; + this.pictureIconInfo.TabStop = false; + // + // radioRecordChannel + // + resources.ApplyResources(this.radioRecordChannel, "radioRecordChannel"); + this.radioRecordChannel.Name = "radioRecordChannel"; + this.radioRecordChannel.TabStop = true; + this.radioRecordChannel.UseVisualStyleBackColor = true; + this.radioRecordChannel.CheckedChanged += new System.EventHandler(this.radioRecordChannel_CheckedChanged); + // + // radioRecordProgramEdit + // + resources.ApplyResources(this.radioRecordProgramEdit, "radioRecordProgramEdit"); + this.radioRecordProgramEdit.Name = "radioRecordProgramEdit"; + this.radioRecordProgramEdit.TabStop = true; + this.radioRecordProgramEdit.UseVisualStyleBackColor = true; + this.radioRecordProgramEdit.CheckedChanged += new System.EventHandler(this.radioRecordProgramEdit_CheckedChanged); + // + // radioRecordProgramDefault + // + resources.ApplyResources(this.radioRecordProgramDefault, "radioRecordProgramDefault"); + this.radioRecordProgramDefault.Name = "radioRecordProgramDefault"; + this.radioRecordProgramDefault.TabStop = true; + this.radioRecordProgramDefault.UseVisualStyleBackColor = true; + this.radioRecordProgramDefault.CheckedChanged += new System.EventHandler(this.radioRecordProgramDefault_CheckedChanged); + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.CausesValidation = false; + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Record_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // RecordProgramOptions + // + this.AcceptButton = this.buttonOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.labelProgramSchedule); + this.Controls.Add(this.labelProgramDescription); + this.Controls.Add(this.labelChannelName); + this.Controls.Add(this.pictureChannelLogo); + this.Name = "RecordProgramOptions"; + this.ShowInTaskbar = false; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.RecordProgramOptions_FormClosed); + this.Load += new System.EventHandler(this.RecordProgramOptions_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconRec)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Label labelProgramDescription; + private System.Windows.Forms.Label labelChannelName; + private Common.Controls.PictureBoxEx pictureChannelLogo; + private System.Windows.Forms.Label labelProgramSchedule; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioRecordChannel; + private System.Windows.Forms.RadioButton radioRecordProgramEdit; + private System.Windows.Forms.RadioButton radioRecordProgramDefault; + private System.Windows.Forms.Label labelInfo; + private Common.Controls.PictureBoxEx pictureIconInfo; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.PictureBox pictureIconRec; + } +} \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs new file mode 100644 index 00000000..b5d5c327 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs @@ -0,0 +1,134 @@ +using IpTviewr.Common; +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Discovery; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Record +{ + public partial class RecordProgramOptions : Form + { + public enum RecordOption + { + None = 0, + Default = 10, + EditSettings = 15, + Channel = 20 + } // enum RecordOption + + public RecordProgramOptions() + { + InitializeComponent(); + this.Icon = Properties.Resources.Icon_Recorder; + } // constructor + + public UiBroadcastService SelectedService + { + get; + set; + } // SelectedService + + public EpgProgram SelectedProgram + { + get; + set; + } // SelectedProgram + + public DateTime LocalReferenceTime + { + get; + set; + } // LocalReferenceTime + + public RecordOption SelectedOption + { + get; + private set; + } // SelectedOption + public bool AllowRecordChannel + { + get; + set; + } // AllowRecordChannel + + private void RecordProgramOptions_Load(object sender, EventArgs e) + { + pictureChannelLogo.Image = SelectedService.Logo.GetImage(Configuration.Logos.LogoSize.Size48); + labelChannelName.Text = string.Format("{0} {1}", SelectedService.DisplayLogicalNumber, SelectedService.DisplayName); + + if ((SelectedProgram == null) || (SelectedProgram.IsBlank)) + { + labelProgramDescription.Visible = false; + labelProgramSchedule.Visible = false; + + pictureIconInfo.Image = Properties.Resources.Status_Warning_16x16; + labelInfo.Text = Properties.RecordChannel.SelectedProgramIsNullOrBlank; + + radioRecordProgramDefault.Enabled = false; + radioRecordProgramEdit.Enabled = false; + + if (AllowRecordChannel) + { + radioRecordChannel.Checked = true; + } + else + { + radioRecordChannel.Enabled = false; + buttonOk.Enabled = false; + } // if-else + } + else + { + labelProgramDescription.Text = SelectedProgram.Title; + labelProgramSchedule.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(SelectedProgram.LocalStartTime, SelectedProgram.LocalEndTime, LocalReferenceTime), + FormatString.TimeSpanTotalMinutes(SelectedProgram.Duration, FormatString.Format.Extended)); + + if (SelectedProgram.IsCurrent(LocalReferenceTime)) + { + pictureIconInfo.Image = Properties.Resources.Status_Info_16x16; + labelInfo.Text = Properties.RecordChannel.SelectedProgramIsRightNow; + } // if + + radioRecordProgramDefault.Checked = true; + } // if-else + } // RecordProgramOptions_Load + + private void RecordProgramOptions_FormClosed(object sender, FormClosedEventArgs e) + { + if (DialogResult != DialogResult.OK) + { + SelectedOption = RecordOption.None; + } // if + } // RecordProgramOptions_FormClosed + + private void radioRecordProgramDefault_CheckedChanged(object sender, EventArgs e) + { + SelectedOption = RecordOption.Default; + ChangeOkButtonText(false); + } // radioRecordProgramDefault_CheckedChanged + + private void radioRecordProgramEdit_CheckedChanged(object sender, EventArgs e) + { + SelectedOption = RecordOption.EditSettings; + ChangeOkButtonText(true); + } // radioRecordProgramEdit_CheckedChanged + + private void radioRecordChannel_CheckedChanged(object sender, EventArgs e) + { + SelectedOption = RecordOption.Channel; + ChangeOkButtonText(true); + } // radioRecordChannel_CheckedChanged + + private void ChangeOkButtonText(bool withOptions) + { + buttonOk.Text = withOptions ? Properties.RecordChannel.RecordButtonSettings : Properties.RecordChannel.RecordButtonDefault; + } // ChangeOkButtonText + } // class RecordProgramOptions +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx new file mode 100644 index 00000000..1310540f --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 251, 17 + + + Grabar el canal actual con opciones avanzadas + + + 305, 17 + + + Grabar el programa seleccionado (permite editar los ajustes) + + + 311, 17 + + + Grabar el programa seleccionado con los ajustes por defecto + + + Opciones de grabación + + + Cancelar + + + Seleccione las opciones de grabación + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx new file mode 100644 index 00000000..b5ce7011 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx @@ -0,0 +1,606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Left, Right + + + + Segoe UI, 9.75pt + + + NoControl + + + 82, 37 + + + 370, 18 + + + + 6 + + + (Channel description) + + + MiddleLeft + + + labelProgramDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Top, Left, Right + + + Segoe UI, 12pt, style=Bold + + + NoControl + + + 82, 12 + + + 370, 25 + + + 5 + + + (Channel name) + + + labelChannelName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + NoControl + + + 12, 12 + + + 64, 64 + + + CenterImage + + + 4 + + + pictureChannelLogo + + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 6 + + + Top, Left, Right + + + Segoe UI, 9.75pt + + + NoControl + + + 82, 58 + + + 370, 18 + + + 7 + + + (Channel description) + + + MiddleLeft + + + labelProgramSchedule + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Top, Left, Right + + + pictureIconRec + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + labelInfo + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + pictureIconInfo + + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + groupBox1 + + + 2 + + + radioRecordChannel + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + radioRecordProgramEdit + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + radioRecordProgramDefault + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + 12, 91 + + + 440, 115 + + + 8 + + + Recording options + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 6, 19 + + + 40, 40 + + + Zoom + + + 11 + + + pictureIconRec + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + Top, Left, Right + + + 74, 65 + + + 360, 16 + + + 4 + + + (Information) + + + MiddleLeft + + + labelInfo + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + 52, 65 + + + 16, 16 + + + CenterImage + + + 3 + + + pictureIconInfo + + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + groupBox1 + + + 2 + + + True + + + 52, 88 + + + 247, 17 + + + 2 + + + Record current channel with advanced options + + + radioRecordChannel + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + True + + + 52, 42 + + + 272, 17 + + + 1 + + + Record selected program (allows to change settings) + + + radioRecordProgramEdit + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + True + + + 52, 19 + + + 240, 17 + + + 0 + + + Record selected program with default settings + + + radioRecordProgramDefault + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 5 + + + Bottom, Right + + + NoControl + + + 352, 212 + + + 100, 25 + + + 10 + + + Cancel + + + MiddleRight + + + ImageBeforeText + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Bottom, Right + + + NoControl + + + 246, 212 + + + 100, 25 + + + 9 + + + Record + + + MiddleRight + + + ImageBeforeText + + + buttonOk + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 6, 13 + + + 464, 245 + + + CenterParent + + + Select recording options + + + RecordProgramOptions + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Action_Record_16x16.png b/1.5 'Kruger 60'/UiServices.Record/Resources/Action_Record_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a75db7757e2ad8fcc442014fe574b5e61438a83a GIT binary patch literal 429 zcmV;e0aE^nP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-BS}O-RCwCtld(&~Kp4eeT2ZT^O$Li~EgjoUa1hB- zvbs2AFRuPC{s&GOTy)GL85|03g+hmp(MFGOflHISv$=CGLINEeeB;OC2k$*TLu-v) z)WDAVd%)gr$LVD30Pp~~N^6u#2c^=!^Y9XGdyVZ9r<1XBcyxTc*y18_cOn8I|moSbb69LVo|GZj-wE+L@7k&l+ XH*cBHD2Q%R00000NkvXXu0mjfqKT@= literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Record_48x48.png b/1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Record_48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..7c23c386efa27fabebd7fd921db59268004dba9c GIT binary patch literal 2074 zcmV+#2<7*QP)R5_CmabU}4=Xm4@=L}6}jc_2Y-Y-Mh2?Wb7)001m>MObu0 za%Ew3X>V>IRB3Hx0CU5kVjwgiZ)0>IGB7bTATc;PH8MIdHXti7F)%R5?3|bY000Mc zNliru-UL`#8|8RtC|{7 z)7Iic5M0nIT5A<7+9JpkV>Fo5YEf%YixiE-1>9Lwwg;!@8{a(d)sbatlAj*g@?)Oa&hwxJ*TLk{xLqaacaJFwSk;5|J({X#=Sb6L3_ zM&J@3^C*7FqZ(%gu&oL?$U_hGL9c;?9`<0j#o&E>d_s9@ugg*YC?rITTuXpkA_Be8 zFJ}XGVgH@M_v+Ovlt<&10MDZ{g{OO6r%tT~+#C_;hn>hbvvCVJ-pOr@BhSh{@$;i^ zoSfPWypja$z@8)l9B<`LE-o%^@ImP|Q1-1x)8^onBw$aFFt`)&0GCbh2w_1%L9r~P zhcKq|eT=-NnGo*unuH#>Y=&4~G*L2CVnMZ~&o_5X0EY~*z-JM>larH%rz%^9N<@YB z0_`&G#W(Pp|NA>VnPBHoj5^7+1d2FR!cvO7(wx7LNV?Wc&GaF z^yzdZC58UZ$)TdGEXq$#ri__0DZ$N6B?DZ*XGm^3qZ@VY+SLPx4B=Y=?^;?K)z{RB=duX77cb~M6WO8wglkIw z{(`8!uFgb8UtdoJ>FI)m!~$GX-z?@*;1&dW_UsvnlM))RUstmJY4m8JOe&UD-rvg2 zrQ{wxsQC10YHVmQ=_mU_$8T|Qq&3XMR(6MybLUjRo0hujYDyhCR5fG3XKMvD_7E! z;$kC_8lH&*BS#ATr&p~q%E;Nhd*K3=#%f0hWq*ri>&jL`z^ zhsTdsx!7OFkJHh)bKlf?^Qi2`4dVdZ&(Ej*!-rEHuN5gHT&tPk6!;_o;1&e%>H`m= zxnUijVXYC!S+-1NOt)l-YE4+GvOKzZlQL$_Qn^p&?AgsG0DRE~0>J&&GmyD>v8p|1 z;X)MwM3j1tQs!!PWhGtWaGB2TqSTqiGu5IQXzm(-vEw}A%JxItu5_V-0|#i&;K8(4 zQN?|5Fnu2sMDe`4+{3%eS|%iAuBN66x3rWvZLWdlMj>+qlDxc(c>=Yvw3H4_m_S?L zio75byL6%SY161MGn2}$U8A%qQ$%ckaOH||=4z^{C~Lt2+Uo93TiO2p=x92#W(}oH zoM^HmFdK!ekWwtwU9G7WKQrvC}$3Ro^v!S zzjsf>f8>IBJyeYhj3$X3n2)LLiYxu9y>=Bw?;dkSABHc)ji5 zS-8%b){+eRzk2?hb~7HEnb_K1D2X#BVmoG`{O(=ah4^n~PqU3(9y}o3(xs}kVR0{HZ8wVR_C9^+7Y=>9c`;gj z>&8C6mks3dC}Tr+F)@+OaK=5%o4_P9r#mULhh^e>T-{Nkx zHO~Vr+D=>PZ}U80_a`#DKNJ5a-b&d0dm$9Ne=~<-*Y8GUvFo?fve@RzgUEa=f@4eS~ z*I8%pPtT`wY7JdgUDZujP1RMu`u8;;5EKX*go%j>#IPV%C=jR!1OoCPAdd)=g$048 zfph=lDM7~2AP^Zm2t-NwPyI-s%pdV@{-656a3By8@_*(jK~2E*F&H2aJNrN7s0bj? zN8JC+Q-U&p{AUsnNL2K1IVDIMxb~15cmN>$&6CN2KwPXKP{d~iDKunapcI5ABmGes zh=C^rVZy=y$K&OVzb6n}WaK3fR*+$_;NN}X>-Ggs5x7Wbx~SNjySN)UnSrF_J_5I) zbTf0J=#jxPUZB7R*QiM6ecO@?s!RO&rRT5zrtI`)4^-iPzUx z2m}HKgF&FbfBy=93xVqYOZs2Qe;r^!E`mTpU*@Bjsz;_o>?9hP67?g-1}K;h^s5$Z z1jWQAdh}AJ`AhV4cYEp(kNTJ|5wSomt3Z@Y^Nh%9oyZ{wo}EGSXpGZ|VP(#Xs^9pj zNHihFHT#h>(W-a1ORGlql~?~=3>hh$nBL!R0Le%we5@2V4E#TJ7UJJp46GO`K=g0x zEEv##bk^kLq@SOklA@vr56{ibjgODdM^;uVJiK58glJe;Ljwa{GO{RG*jQND7+Ba3 ztgI;{B!vP3MZ&@z&d%j>axApA{8D5D_76Zd-$cwVIj_H#aM7 zZI`>djV30Wy}hTat4DKlby`}&JUrbV9^1piOZD}~^YbI|@#85etu{6<&(E23bXWWP zd7PZT3kvooCo5G{&NnxQ;^UtlAIlXKGU@3Pv9Vh%Eid=>9`Em)EiKR1)^1Kt4u1bm zCL|n;j(&c8Oh7|RB`1$ZLCIoZh(kh3qxd^k{$KdNwFdyx1Ka8EDK%kxK%GiP=V>EXGBc|kq_{1jHe+FFYamSEWWyLwlb>nk+W`}+XsDb89ap9|zj*&(JMRtKW2a-@OcK2P1$-;Fo0 zzbcD<;3)5PAq<`7cprA)3xWx!Vz?!WEdASx|Iv~FO$Je1z8V41zs-_BjsMeog({yu zK^x(^PMY3;XoDdGF)EP>3rxDO$N5>f^$t{s@Duhj-&X(f3W*l(HE?XZZD69GPEDfzJYn0(LDWSiNem-_ck2*^{p78WB6lX z_*}LqxGJz2x5F4~N}5Z>nmqPVg~gTHNv20=a^J=IT~22sepeA4qOC0p#=CchgNBeK zajIueu`)Bh?E! zyut7YV#HHJUahU1TUYCMeAz0DEbi_!jkSTM?;_&rSkXU_j|1+_H<3G#$Kj;4*e@7bZ0a4pOqtoo`I$jVZ zYA^;pqyyEk3rQT|bNaKz0apFYR|@ft6hTU?UK%rb->{p>j&b^l3(mep8JKxz>|@cm z%r}AqH)ytN8f&!8`1RPbmEf;s-z`6%fU((TSQ^X<;pcC_+{U$Jn(|0IYY}slTcBFF zDCj)Z{Vp3M=ghTTau5WmHfYeQu+TM5Gy|75R7>GAV?tq$a(U!AIz}B|+y3iJfB&m@L-SWwWsrii*xxR|7zCvbws`-VU%sJQ`ZQfWTZ;)#0B%;~5$0 zZ{7fp5{HQR^71kmA787h`*3?ZQ(hhe2UjL5dv|%c+1D2f2dAs68;^{9wYxi+7A7kpxW4!}Ey@YabsTX3ENLPfz>8!{bm;02*qsu>l}xG$o}wFffCT zu3TO|9u+l>imKxCX8_s05ff+7(pD-dRmjVy)6f9p<^P5Mtp||))3N~U@DDWrXMhB7 zL~K&ivIX`%+y7XWki>fx6*1I)cWwP*o5j4in|4O|P;%VJA;#~7B@OsnxN%HU$vu&X z$Q}U%kp$t$fxJTohu(|Im_s&xLpH)~G94M!$9i>|QMeiMjJ4V~q_saS8VH=jrnj90 zJZhG`Kn#w~4Zk;MT=XuzWYtdC?kUb38%8ivxz18bmzoGZ55aW#Xi|2Gw$!39OmnJ;bJqk&{+CNAy6e-STNOPFWrtG zJFQmD@%7QFJBXH_9?;ew<8nGjcGqrab2`DFM_E~>HoCShhQekF<8qXrKj!?|XnvuU z#9ahk)qm7%>xmjSVE^8mQuSs3nnc?N#rtdv z6h-VS7dxjrqTC%)Q=Sw%=mv1iNB5$lBCQR!n3Z9kqBa{rQTh$O{ESdDJNb!YnGu*4 zTzK}6?=lsNt5yk#3OT@ENF|W#23RI$p-P#r1Dh6jdjF1)|Ir5jx7lFW zH~);gQ4KxmL?hf4iCJ@!f<&Y|v2Q1FE*Y*WSn&E10RaSbVgwRYTD*El%eZ>d`sH!J!f7w zImW8PFm8nx=>4;Y)Fl^%WbTE#S~7n!O|Izj$Ob#soqZqxjb!h4tE-FMC~<4G6`mR_ z+^t6#|DGrTPjv{!oi@IQlT$4RJ$h)j`oQ5yZbY3qkbh+WiVagYQu{ z7e1<9gn=U>a#5(z$97<${(Ett;+;OO5F_ItVy`X_U%g*D;;~Zz4V>^AGp{r>AxGDY zRRemSGK5(jq?-_li46g%<3i<6dXPVc#8>kvzoBCX!^uHa&RD5T@Ig?wFRLJUP?GG(!iHs2Q&W+Ul5i4f zvv{)x1*wyA7N=Uy%9zKSgimG3WhINv3F*klC61^1Keo3bqlvSZ)6!h*U;V6%7a!y^ z3eYPd&~(*mOQi?S_fUFreA3dn0XydD8CivY(9qt!7gq4=%n=wGF10$=K4|qw@RO5Q zqQu0!Sl-S5Hl_T-RL~;cXFQqto#1;`SBF)%oANhMEQZiJW_9yIdz)VhQ(Y|Iz2o2% zCyWg8q`UlC9^Gnf-OGjOOGKD!-_zstqHmN3^4NEIsm;j1349#)^)+^+CL*%VSXO|j zpX+-#rZN=n%E}cCD(1ijw4@PTRQF_{Bj{OVY59fLRi+dFF#eu$!$ZzE-rsIy~DG)UYlrcO7Z?f!m?Cv9)+WZC$7!jh3OK`q2e`Rh9?lRX)KpPT>zh(q-x_?= z!TuJUV5Zr7?DX{Pz5Z*{DP+d&vMZ?er#M2k0WVLa8qd)@4GxEkUrGK4bumq%KC6#$ z7!*bBapaRRM@J>_&KY$?gGgV6zjaxRe++DGe!+XxS!|kKe7x;_()1T;cWNv3yENyg zm<=~>*cif$m>KW&wjuh&($1b0{f+@`L~&^|3XKA zVNOm?0NJU&zCI@>Cn+f@K0bbFY01*k^5e&kyu7^sFyzC-Lr+hSqobpckPv`{TpS$l zI5+^X1aNL*V#3D8hM$d1?#&y3678|EJ<-s7QBVQ^kh{7{OiX>W?G&BG~XJ%%Um6hMKu*k{D$WS&6iCA}($g8(W*BV}C?MjjnDA zIk}aUl>i$Xz_9?)ZI6us1bDW&nNCj+5avi)+U@x{0EfpbE6ujHu>kd9V-F`K-CkUr z@9Y4A767Q9-n=Og6a=Ub;K^D;!>?FaORcRf_V#h8s53u)+?<|fym|9OT)fuI4C3bp zFzVj)^h$U4(ZT|Nf^!uWjppX3>+5G*TLAH1?Ck+!SVKdD9X58Ix%tW3+Qsf}v7}@i zGBQBa3FzoQ=4LV{r^&?R@#f}-j7+`0J`V>67#X?A+8WRT59a17l$8NI9!*a#k&yUP zS68X8zc)L(Ju(8YZeLW?-PKihP!K@%iTL;@>+4Ab1i4&X*T=^I;sUUJd2mo7BNK~= z2=MAsb8`+iH^8y$Jv~jPrfm)mM@vfp=eK)$ZVnEvcXwaz?;kEK0D9zdYikld{!)AU zR~(!iR@P)<;>p57K!60;IEk3}cWEhr-1k>k{V_2B2`@A@PXG7;@$xE_mIn3+vlSH+ zxw)w{G{ql2EHpF>#Ke5(=LZx-Kye&TOIvJeTBxrFu)jh{2?W{!fp$S4U~9P#0v!PA zHwX#|1ceNO!aYAfzq`A8eLTy}EdccAS70{1f?od>0WpvQ!i`~gBnSj!`yY~tI)Vz0 z814!Tw(Nx{Pf7zNB2~2%8Z;9FlX^KrcqAHHAe^^`P03s}^PEI)<(weX&5HNwvcdYw zwsZmPP9JaL{POVaaoM9A)`R~#DQT9fl|{qQ;AB7<(eZaD*Xb`}xD|b)YTL@J{mc2^ zit*X|1oX!b=Mc5WwaHIz)(YIn&H^gc%6I7)WS!;NjrVkkB(wmss-IIvoV757_~wmoT6US08H? z(|F)aTSWN})qNkjokv9} zv=gC=s8umW3uIl+f4vxSZ@^KFPXR| z?Qxy5Y9buiQJ3led|>LztS&G**2m&H!8PS zmog|Ed{e~-mabuy5Ed%IatiIP;4~t6v=>Ye!pstt5KNU2v<^?$4UU%o zT5!EEB5YS$(zOGVHrh8cQowx=2M2d=efe0S6E^@~M_Z~+VWadF5s5!|Bu((G`%7R* z6#gzN)tCL+ykU)UU5N^%ua}?AvB{Vvot}at5)sqnirIY=ixh^(GKG865%{NrxIXV- zCa}AtE|Eq&I;3-V*HY3*X>qasQNAtMB4<>txjvf7FcFhIo^GNjd`2j!f#Y?EpV$86 z)G)Qfsy&4EwnOcZ$9AznF+TEb$A|vLECKhtMyrYqAyo!@PrLURk&2lcTopg98BRV8 z3Fd69{P^k3+)0tNDmrw^x7}27;Z4lwhZO$(tiotr^)dY(#j#Fqc!CVg6_}9!^IG^9 z;WeP|!+_}DwiY5F{xkoNwJqh;q;MO95s;g~l#$ z%bv>8iIt{jsSyLc@hTdS@ollTA~=ZUtQtzVOC%yCH=s{gm==SkFJtU0Z!dUQD1Bw< z)0W&%NBDOicQX08oKFuY)?Y7*_FM!I+}+*dR@%L#&VVf|sld`ZNA)4pCx-dt zob-4v?BzH{3kkJMnF_&kPYH`LjBL)D`z$*<+b=IK zucdqmM1vR+=ZV|7r4&;KJ*OT*`mcxjBi#-1u3j`g6BZWEJ6a%d`YnQtghlfQd+l4e z=-aDL_7JwCSL?HOuWRJ($!1o_<({08d)49Z(iw0D4fJz0&iyP&Q^00cSC8+|KwYik z)6*UaeK8MA6&;jdHN6a|Uoa#QkiAHZKZl|v`Ib#L@OyA0&EdR>UWXNenBfR1YkvOx znFWQ264kvUE}>})2}{9Vnh-o}9=R=pL#skdr>fKE z&0J3a+-WVI5&sT6%>rd$u=YBV5kDtk)d8-QS5-8fe=gw9`yyR^4F)DDR0SFW4MS`eTW^o)Z#W?5?e3Gu}ls zI_UI86S;8F1idVE=D4AgmJohiT(2?NS2m``%My~2n4iD$_7Qq!H-@E6mFaC(+{!u_ zpDv!B(QDf~%_LiRj|^ZO1<|E1DNYQiDq@OUr6lz zb5`3w#l*y@J|5ud3A%(I=y&4Zmhi@sg26$rI~!G?w!Q%)UxL{vzQ=ZngIAUeAuVw zXN{p=6#8OVW>^rleGmKs4xu!X4};9kq`$uMcd(Dcb|gE~F5J#|nZ-D6?)_quigJ_P zRYCRVgi^1k)L6M}IiytYqdc;X4wvX%kj=X+UI;w_H*jZ@20P; z6Mm*o9`fPOt{bpq8G^UAS-f#Wb}OpzYhr%FWQ4+*2OgEuL|EFRa>WpOBv2D2ScAd? za}@3H4%IqFbgb5l*yMrs(>v#G<>c-23Y{bl>u+>EoEGDDJWy*wGde21gZReVlkpJN%FL3HESo)` zkrLNaoX&M$e1Ez~$;g~8S+7&UQl%(->E-M|t=E}bO)aUx5X#ooy|}{WRn+BOmR?=x z6rIAmd92h?@!44@9B6rQMBniWJ?pR7!^p^c=*7Q^Gm#HtQ1Gm%s@CH92VwGVNFRQ# z*{J)yb_~2~sxS=?eX&^WX#4|Z&3qo0FB#E{AF64&^K?%K`_*GB(o-z)%?KXS#qUTw z`$n>(5R#u$+F!+9|Gd?oAn!AArfqB_kln$Bqj}|x_yk($YZ1wzXTawJ zD_c-TU)2e^OLzLTq{47^B=VEKtodTlHEF|lGLs9xd7dgvZ!vOwYii3Id3Yo2yGNkl z>+Qj*?R(hA(HV!fb-`fr!JUyYV(cQ)JD4|M&|JY?+5GKrW^4r3^IMyRkDX&_9|ZYa z()&7lm%mtNBWTxWHBPPWctTDTP2K$IBx@dK*^$~kdR!8#YuG^HfjvkKdS=^p| zMe*BS#A%}R{Am(9A&MzsVYNWoQ<`q?TUU2m zR>#{@tPzh6m&clYZZmIxjytbhcAWCxu3*u;qy!K|^==U0EzqO80k)?+Qyc77Q`6HTgF{0<)@L)bvTV1_cX!ri zi>=Uiz16RJ38O>M_X5Yd`nHt<0|Qxry|fA^C#O0GSQ6eO5lSJIJ>X#)*4SnOE^8u& zAD*OGGB7A8s4s>jr9X7m>2MYut7oLFgZk(Ay+GfnZVI9f)qK zbG2jK+3hVwFPi|4WKBRj8zf8AiEu5t;Efj(UFc2>xjf1T@h?ii93>=_rqE(h{;x&^ z)mVvV>Q6@TbMV>_;+`cWB$#AYt`x!xM`&EG|N5Bj{dioT+O_?7uM|+ndOfk_M;KHy z0i`!lN(b%S13%}~1EwL2Aro{HP}Glu&_a)o4&)Xao9r*^*eQv6Lm#10{nIAZk9>wG zHpFM5gC{#FNl91migT6a0wh7tg7m`K_~((n7Zgx`XrNm;5O&fTJc6f57K})2NHNbc zQ&<5t;*)M5DG56_Z3upF2pXXS4K+Lcj(Wlb8i~=NDEKvrK7NXru04h3X7eXD1sv=W z=9L%TVLDlTt6nd+|D*J#*gT;>sr-uCaqoj$u+^;_^2t%BHwFg93Cur?v1f7;0; zV@W*|oyXmWnMER0rhg7d527KUG`Du)&%GN=3FC-@#@do^qt6rCmEgdW3_@&?L^Nk*bv*V3j31LHM&9YN3KD(lA``Z6Dyd*VZ2H{kWqNqN1JQ6OlA)tEIjYyb40DP(Pi{>;;9K zqC`RWsr13bQWmz@10LJ&*<~7oc6F2YBCiEA{QQv|cRE9xRs?U0oI76?-s|Zpi`3hZ zPdjZP9(!EMYvYsKNkeDDY*pT_>x|nywAC)Q29) z+HqtwVa}P_6RSo|)1}L8mJ;HDm47PI_!83n?t4FnmG4@43;JH~3Txn02kvO}k>ujNDl%BcT|Lu2EUKED~4yEuf*w!76TDjD6 z;%vwg+HZ&znZx<^<0r@qEE5hh3Mt3L#KTJ-!>AZ~p?I(TK@_WPvgJdV5V7I$UhaX0 zejaxA+0*$Z@#$WxPudu{uw2FU_3y>y;|pQ+J5iZIZr&Xs{Z88qw!s5B5s@JsRbF&< zx&RO}dl^iw9yM4|8HInMB$*HkEOQLVIT@#KnZ9m_L$&#j_ERt~N}Rawtcm?FbZ0X) zlxSL!&B*cjDxjmI2hwkMi5OB*q0R5iUK8jh^Wd^uWHCCefD`~F$SUPj-+<5*h*!&uzEvb=zLO#DLki$qtKYIc%oYQO|o zrW^sRMP>MOcYbLGea1K%_5;=MBk22C5qL4pmKHH?!aZ(Gc>rUQUAA_m*?WS|9LgKNY9Hwd1)Y7TS|T;bPG0_Ch%iWC)%JfY&iS^p`pyDM@y3S# zr69ql;@hLi3Rod}Yb^E>ZgYlQdSOW(RzNJAa)zbtgF_QrpbmscIJE8cZ-SU>g| zQuzaO0t<@A=M}z5Ro(&*49nFwSp>AAk-W2jiVLH%kLy9usB|%U+^W=5ElK3qdYLN| zBw#CG)3;Rw6-<+QkKDkalu%MaBrtTzpp^99mh`)`E2&`!<(})u^&3%P66=Srxe^i3 z(>D|D122TqJq7pRxZf+@J#{?p?e)bd^V<+C;oC*qf~Ub9vk6GA~Y*L zrg2Tpf0*h*BX?^l3_-8ZqS0&IJMp(?`}ng3JCT~FII*_vMA^>ir;ONzJob;iD)Z6r zw&U-mX2wMn4KC-&#LDLGTY?0A;S@L>bzh7Z-tAMWK96wK$7<*bh#z9ow{>c07#DTo zhNM1dlNvu@NKzKPd_e^gQdC7R9>AHm(xP(Dctl!q&$Nu;`<-+M9M=T2W*pZVW@>Lz zFNddUQy&g5fCB=~_tYDDuJ5T2QYt{o!r6-B7=wPscp+zuIAY&V=zZoE#UhtfLw8@w z4*(7S8;J)HYXQObUmU6HRAT<`)r`1_vGI?OQc_{Py}coqx74XLv{Gx{cSL>&ol%`#s~bcf-)?k$ z;DtW{cjx(RXlOVOym-0j>gs|*oyz_7>({_SgEc*{cAA@-n>P*&4qB#UWj!0JtE*eQ zJTSe!J|9-LRZ?7H?qH3Wq|sm8ifmR*LoQZvw#Ow0R*%Cvd%3pi$bZ$H6Wy`+&`fhgl3*kR^|=P>EPm3G2i{ zN$zMxqnZ5DsWI|aKd6-ZC2mFTuOnTd;wKN0eEAt51gdlcG6tEJqt!p}+Xw4m0i zjd&BL_P=R{Qbrr`=X@Pcvu|F9cM3uAE_x~#*|NwhjH#EOn>^5I3R@;ao2g5}gf%Kn;W;?alX*;ma z7s{94o+$m>Z5vsaR4@b3oB=kJG;O;w3DmfeE5|kj*hHuA&VEtcd>FE6)BF_ zo-M{+y+2OG?4dlvE|uXA%{VW}1`ullM<@l`b`=w-dx9%C^+%azOpQZ25;xb#%a>NG zzn&Vi8Fpx5t9vlNhaLDhWKLiTmnP;GPi2afw(!0x5*JTKTaE$(USEW5(U8`VByD}8% ztsSt!Y2uLn+74G65=~`2Kw8`6{eqXQjEsuPGR~}w+g3WTa%)Pf_sd6`?i_b-*$~wf z`yA60E$zciD$Gd8@+^RV-Xv#CVJE!}k{Nbj`uu%rWrckPsSYt{DGl8|7Aovb23wEyPc8Q6b+ zdd6bULm2V~4Z~!N-97cgNa6BB!GIJ41H(Wk4^CU+_|U^+zCP5GIA|q4V3ChGDxI@w zXdqYcYvR7bPG@1!l*#$|m8u--d)5{%=ahq){d;2WJ&Bij>-F_3x9y?8b9)~Qk)BhR z*=Mrs0E_iB4<2EdoRINf7AB}G#+1k$uu>dhsh>s|cV_LLmA49iRT^uN+MC_h&@hjs zj3C&u&P{^fXsm_u^SjVg&9V~txN{($D#{gD5N7K2bnlt%_=kl~Jq83^K{;dWWWT&z z)#OlI&pJ}jpD@qgKR$GJah;WuU(Da3`rr%W^JNu0Wjzx_7s&lbu&y3muUS=mm*vkyiC(nw;dpxEZnVx%>~< zy-RR?IaqAXy;pE^nJVaEj34&a3)Wxu1DHPtfeg$hN`Ex_Ny3iqcf3Z0Ha9yhZ6TJT zU$#)D^P~!-s^88*1?fQw8+&g%9MP*vnRZ?L_C~2Xg9F(^<0sb&87G*95@(<&TUgbh zld74)l@db$YWednsw_jEoe&jOo_$k*rR=R0?1jiT(I z#NS*d2o?#eftwhiYDzX)_d#Ne0#($g#%x&v>_nx069r*QQc+Ri@vT_LCnj=5(tG7B z%{numkyKw$ue7IZt`N}B?Ca?tXX<&k1?;gNkur&@$IrKOT1-G-LPhOJPJ&`ZHFCM! z4lAe$7%3@pc1uD=YP}DhLG1nH-Wc@>VhCpFo3|w&OY&$pPxU5{*oq>x%0)T zSjSq!*EWZ|<~_58pqpOXuf88ME5;_do^bK3rl?v`x&h{>-?Rbi7DYak6TPxoCa+5O~)kUMW@^U1!Qs?zM9`y^XEuww@+8vt?^9Eh3 zFP_^Jeg2Pg<=g53%z-RuRct>by+DQeia(K+Vhl$mT6N}pZT49n8|r)GJ38$f`5P59 z%a(0ZnLR>P0eW7ncX%cVBH93HP^EQ7d znfb9UBb4QpuYK4a>5le{#Cd7HQGrZp2EI_`y#2X+9LG?Boi{bV@4+&yb+bbR1Y@O;g{gq~izg4~H1kzW;qEB~=jeXvlJh#9C_7vG! zeYN{Lwch!JZKJ4LKyAg5ni{~VwPpA z?y4k3?GgW4*Ab)lDD6;s1m6oM-tXlu^D!jjl8{818d!Li{(@uH@FTUb&B>H|TleWc z2MlW1cqFtA1v!WD|I+38{S)d?2r83J7lSOAZ6PL1`GeW;H&&Gj?S@pqv$<&=Z_!TX zXBG3JZCV6sq}oSK*L?8T`%BaSptji|1JT`&_edqu6t%ksgW zXaI$;dNhSu@Mm-5g>@N-8D`@b{l>1&KCA#@KDcdeu@lS_kq(s_oWMqD`vdC3D6oRi;Ks%()7-ZE9Z$$Oi z5M6Lve>|XQe#CwnWSR3p^82&whkNB9bZ00I?V3{40qwtU_^bf6LoNW)!=ws`S_cbh zqte7FfqOMqks5i-0XqS;2kp{5!v!ax zxW?y#-&)oUl^ARq8GWzk{^%<4o=<&&n^W1PKxysm@)07ECP6OF1e!)vSY{7Y8csEd zg0R%yyhae*+#l?-VV2kB!NIH3TuQahsyk$w+$?4=U`B{rG-Z!WVIRa(@}}K_hAgB{ zE=|f#bB8%Z6scP$gv*C7nAe!y%tsMLrE-}kh)}SDjNL)4s9B998p2|Lv$_#W^@&r? zs##Mfk5o@^L~XmQ@6+vac?BNG#o^tW3(cgyV* zJO8M17B41YecDG{f{g1yu|0H`fj|dPHpFd@$7RVb)00-MQkS2diwg(Ad$#3wy-HxG zYnH&q!;fs_r%1F~8vby7nDP%3v~`k@()~SwJwBIZyPuwTaPaUC7N(|aR+TwhUF0e1 zFFGp9B|2Y97FIQE(yypVZc+B7AKYg->ba#3BU9$c( z)p}cg&5ZrTG+i}^H%q|~sDPvh*(w!Z9s|W<=jVvR>~$>P)g?Q4F=flRUGUoq?9(e= zoOvxwtpkm@ z6a8rj#LyU7bq1^1Z|6LT6EC?IzC;vWO%m3KxxkV?&4gl{@ySla*pL2fv4TDF6Ww79 zq@t1@-Uzl48m6#v+oMo6`H7Q@OQ#0(&3f5;wDKu6+>U8S;|OZj8~QB`$6hNv*sfY5eW>9|KY~^5s>8!E8K}UdXBJ(6#v!=!P(aH6+D$c}{Z8ZfOQC9i`0% zhZ{W{1nAZ!3x2(BbuULCm)g9+{9mm;5Ff+fJmm}H0Kol+Z>c@@FlDswiLWeXGrjpq zEWn_Kx7r*wH*sS0p^_HPk^7#(u-ERVwk)tB23*9C3#&XnPhCs(z(0HXwb2{Y7*}`X zh>|4I_Ow2LeIdx~CcJj6R3ajsPK=Caw4d`l080~ z6~wiP31dU}xf+sAHWk1>4!4clv*_e_n)4+s?YBhZxiV0@0u`_u;u;xNi$U8gQ&T4ytoiyS z;1ucl6Wx}{iu88$#mb7!>T%tJ^cWnV38B9o_0>@^8Fcu}x4IsFpY?B;52RRH4Q0-( zU-UfAR_%?9sdf|OaA{76s1VZ&n6NTLO06aN(_569nmPa&>vf?!E^|oSbG?Su zsyQhw6u8`;2{W$uumxCrFf33iZkw%|!Rk_gTuvrW`%<6b&B?hpbLP;nT|8H;wMZPy z_Mv$62>A<=nBfrpLU?a~Kj7fLjiS>2JSV$RE4lr^%*I%b0Y_{_5KDLqJ@M%b#cMS(%Kt88LGPwj}sYfesQOzpKfD1tZELfrolDL3bo5Xg?mXNh!#SLo{zbtj$l=_ zZB%tewSU~Ndl|ac(CyX)o^#RM9d4^}jkM|-nn~?Pu-EIZ-1TiDf-iYQ9Kp#~=+2F= zeZcAn7@55QDqjjQLsZQ=l2iXYVE3)s@<38`n?mNhii)IE*|~u|sLcQ(3#-f+fzyTV z19P{X`@z8>AZV=J6_8+@Rj18#DyieY$HB=*_QOs2GK(CXdl*yCCf?T$?tu`qTkxKc zCH?vZ^SEMjv|6b^)=%W$MlVxi>|Q%7m|GE1+1=VlwF=|xwyBTVPXlF>kj+E-`00#y zcp$fOeccLZ4U^_2bnfMZFO4K*Um>74;Cl-d&*7&>RDwt)AB z6Fe}0c8!?^;9~%S^Vr$Jc%`CL%LDTnGn*}HRv1uGGAao8x)F|`f*QfAtE-*5+S&^h z%`1q--=gVW(w(2C|ipX|w@BtEWBw#>hFl-cU_rSCm{q=Hd ze61lN68VV(=Qq3T{2qGgDwdBt$&7@`C?j278kSswlD{5exx#&oZyJEV094Gt;V zIe=b+V}Zwi?^OZ#c3`4E3-wU=4gBu#w_!QEIL#aq@W*F z6quy%+Q<{@hu_B#g8$+xoSOfSo+{(sltbtV8N!(W_>6F?lqhJRwiLtw5OHdOw^F>9 z2=-lW!ILu-1oU6}eUI@wjC)rg3ywxyDUk!LU96Bd)%$KRp8KUeI5y;~r+0Sok_j-C%$J%Iiys_A?%{o3SDE+!xDA zcEl#6Q8=DuWIq?W(Sd>H5BjIJbI+YkZnkQ7`I?SY<#_N=G;}>+GDwk58$w-_5J4475=0% z&h2SmNABj^xt{IFm`I&YN}OJwF1f)flNv*gUjI6`_0)uRLy5m+D4~UYbc3B9ao;M%w^Zq%A8Pr+U0q4c z?j}EF?pYHM#w9u-qQsvYn9#QG1BA{_V5X;nStt{sSTc-Q^4FE=o@r=G-}bMpP~u?0 z=X$fpwRf~EgRdb>?AB>ei0J5jt_F&EcnNtZBAHA6igGXDcubCa-~9Yuji*iw=8ul_ zYOm#DLMJuy=@ZeFdi#F{6D@b+M5cD|n7?ek?VM=L@%vt}>i0?HYX1Yy>kTh4A;GTt z2Z!D}qO<3o?k``w1Y%k*71AHa{iobv;3sxkoGoty;p)BD#TOnf$Lj<78T(pY7>{>q zHZ96JA0j*UXQDd%UOb6ChgsioawWo_dEdAy`?ZPb9q}W;oIRoEYyP2g-4k7HzaeHN z7fNj$&2ZNue>#bWGKESL<+)oS-^se%o$j8@-*0nYE!>YEtZ16joLv^Pk$bE=+1vfC z;^at$ih0}(Rx_OCgux^s(Fvgt`sJ{RG5TzAc%blk3m$GVSTg3z0*>N@GJN-e(^=L`qua^4NcLH4iQ>f6pG($U%I5?s4_`$pw63ge2wEAWP zk%y26#s4_^o89Zf31Vt<4%O*yqqhGTmT9er;2i5bO z+QV0TS=B1qM%H;9e8) zbgM>s3p+tzGZ&Xr{e@rTqtU!8xjyQx9ReTLxN}n=rxYZgHW!OS?9scGP+&dk4dU=wc6J-iATL6f~cyBi&&WO&#rpI-)U_FE1g&A+ShbjJE~ z*dNmD=(5>YAFiR!psF<9mJXd|L0R$e;!QmD9q!sOZ$rtuGmlh##Bk02>4;0fa}8of z`zK(9341(|9PMXT#qhVu@{?stzTu`-?w@pVL?HNIU_fU}Y&$I~6xt1QJNXHHbwU{? zX4sM`;{ENW+(2=)MuWXojd?w$g=;Cu4q6ZrAF&Klg==hlgMmp*eDGI3hZea?Rf3sd zVvSizLN;x1fd5@7&#Z;Tb~dC#N;|CODkBx;jZL=U4#T5&KkfLr(55tbeM%WkTjhs{Red3U_*>?U=%ZJ2 zXb=Bx!nnZo=GpqyE9cyDjd&~MGK$KrK9=1HeQ`&-j9wrp2m+WF0*OQ4<+muNc#tj+5$eEumS*^4^J z{}w|8QDaW6uzNMf5M$$zceOwmK0O<;r?0mAq&r%}pz!%{HsY)|G4kYz{0uR+ZueZp zPZ-TeYy049X*N5EIvN?HSaA+zq1AyZYg28G&2w)%kb~5u>hds7q-f=+sI3Qa%@cyo zZc2^eK%NTcrpE&U-0`_bl3sb@rTo3Mnw`GLa-`e0wiVhcMz-V{Q`5Kk)R z_=pn}IBDfkrg*?TyUwy4jI&ugx|3B8p&5PZ4DWZ^n4s!!^9-u}pe`L5)47R$aGVz} zYGY4FH+2P=r1u#-lM;H^vvyO_n+bqp+QQ?hiovXNnOUI4^;fCj0NNmU(IhySHnso? z`Y1pJo=&A`9NfFf5q@cMQCm~H9=2QF8!1&ON)}T&`tW!&$)vBPP}gQ%=oDdbIwxjg z*ScRzZP1f@jgDTV`10bu@UR)@QkhB>Q!LFTj`*P(PT=6>v9yWhz$pXEu*$~g`Jvur zi7x@-O53u_Hs!L%KoYQjcEf`1>in!b1oMRS_uI=tM+IIAjo17NYL1`y^5pNl+>FB}1?u^SBjcU27NcfzZklL^10iz7sJgirJe>XspzxZOs2EKgr#l z$|g(0epK1^t9jWNcJBDO!05xm#f(Pp*y)@^I(@b6Jm=8(m|GM92o>rR-36%malwO7b?R>COmFa`Ux~&+UF>WA2+n7mxnS9=Dr40 zu)`zZu(aiSJBja?66Lgg3pXVcza6 zz+H1=q#_EhzE?^$Klb~pY%k?S%`>|E2g4v3Q{K?hsOa4aktm@nH5J1ToK+Tz0-jsp z8g0)ZSbc4_vn)ezC8z$B*Z^Cs(!7X3N<#ud9$OIb%fq?LX1nA`SjtL)|F5mH4vQje z+x{%Eba$hmfOK~Y2uMkHN(j=8z#`HJDAElAD%~k8wRB5^ba#W)H~KtZyvOnF-?KY& z&+J@t-uHF>&hgDyF!cKMptgEdwX`JNwAuV(%oXcqvLtVr4Qum_tX8E;%f7&DhhueF zkf|EEpeI@YHLv^^{IrjOArLd;l&fh=cW?0GBTJ&ME=c&*GS62UEXtKhCC1iE3|uw9 zwBhCYw@HJ2eQ%-+U*HHnthKf5hZcV;BL}oT-U&I7pUcjC8{f$SSKo>x9_A~$4~y2O zAB%ZLZ?s%LU0+#>rZ}pSruNt^sa{VqeK$$p*pED7_2Idh@+uVYfi1wf${on>q@|^& zA>N5}uD`xPY=G55(WVhVJt+@C1x&cHYx!CoQL02 z%Qic?qXE5bAv(-7`R07EyX3uu2 z&Npd*ucw8oqo_1llKuu?n49wIUwDh5qE@?KIa9&`=7Y&>E`Wq}Y>g>1J9zB;QjRbo zpKZ?Pu=P+#(XQt2VSM*RV72zs%K+791B zr2>7i>F27=ApT?DiTnqarjVr_OcCAVGBHVz=d5j?4`ijQ{*K*m-SB? z)TuMAZ%FRuTU&+FeouXuk}q~ocs5D~mW?C*gtal9cY6Z2eFvLs-L!elpakZ$aB&dl zxr{fh&`zSFR0<|{&Jw?7EXkBG-ZM57PQ=yKkka-SLcwE;`CE481l|oA?va9rdLD73yJRds+rdd!>mc#%i$ZSFPk@M zyY)(~0qDec*&>_4O0nZY$>G?%!MPbBr={U*#}WEJ(XaV$y2!SvF2avIX8jIF`yzYfSbUZ-8n|XBfOna)-ec&-ec2~P{C^o@OYV%BI4>cFPqE>iW)#UBwGhzs%Gn+GL0Rg8Y5}P^9_>0PmJ;a3Y$s~5Tvsv> z@aFQLZ24(R^t8CSltin7(D?RddQ}2`kYB`_AyC^<9H(jGtLVVe_{BG5a>bPLrV;@W1y94C@wBW z8~g>hFL~F6b%i~ie+y90xa;KlH#ZL5Z!u6tdg>LwXn;zWWmQWwx2rxJ$$nz4v^ZA~ zOhsi-cqM6)Un~?+_;Vazr}%YqZibr+r%5`|QZnsCP{S6VQO{;u+|arnHS2fnB1xTl z?bD4>E@+?=G_t62bXYK2NGu|Vnge!|*Bhmn;rv<*u7&2N8%l$k7_@Cc1%tz-Bt25e-~d#91(r_?L<1#M>JKIQ`0;g3-;Vvs+i^NDS~h7ClMg@) znFi*Y52iI~`I&ypS-DP~E~TMacis%-DD8`Tf*D-yOPY$W@{+h$lhrDh-&DWV`O$jS z+;4@=lP0P!nN}KDa5of(3EqHbN5tjWFR8czlFF(o({)J+%U^&P36U&alM7+70MPEg zmf*B{w#`R4D8_EPTT()uH=|vh+ap(8yqCd7!~OnGf5LBi!^=S!RbQL=&Eff$R*`gBC=+1^!xe zdY{4Fx;!6JT;hAj9odj7X8~Kk?eNQPS0mq&51VfsjA!H) zHF%ahbEM*X>mq`v^x(&q>fue3rPD$fKOz!9Hx)m{&X92JBut^#Y=v2#8qIrZ$+VSm zgXMif&3kPZZ8**)4!yp)fJ zOA(%biZK_k8T8t$aT-bw#sPgPLEy`Nl==$U+Ovc%!8Zo^kX&lAJXp~)d5ay5XPbO$ zUVoJL;?$Q3o&nCVFT$FMhR${6&t%{ zU9}F1XsyUL6zV#)<5F02*jizwG2}PDB`gdd2*Vm)p=M7K$lJfwAASG_Pyewf3JfE1&kv%*2zcjA# zYNbHtqUZS>K*=l52q-g1*D74@=V|QEnR0v$a+qfQGx@j--K4LK*IK>x72$(D6qtTv zeJh2J4Y&C_1|SA+g*<089wwMyIBrPVIDQ}iFzG2uZf=4JJ0p~Db_Y@<=GNM^35BEX zZtO;WUcPc-F{D<>yu3ZlT`enOB!q#pH{^NmonLe0hZqhJ%crU+l%j-22H5a|1Xh-* z?=FQT(Hn8LgxgUn9L4nJ04}vNIl#_&QX&UkQqy`+NtW_)0QR8P5qv=Y6BNDHcf#k1 zf{o0`W;Aw>;I-xaB@COx(xy*6l zfwKe``)dPdbG8^jh7Iekg(%BDitB-tL&`4!_dkC-#x?{g zwnXMCCw>AEH$c~-R0>+K14ifq?tXpGWvu1^M-d!v^m)Zn9m^mahIHj^(r*@>kEC{E#>(NPC{F_ z-s8m@g=$8wa9Qht?X8`l)Iu+<6Z$JkgZB;nKsbga{>%D(0TJs_{ta)0iKmYOPtTvK zc0a63*-OSu`%PL@ITr3&CnuBok#$eAS(l|6(?FGAC28UEZo~Hpp#|BF{J=m5d2y3& zX>~Cj+$3PqS@0K|_p6AT^00Cg8%8!;G>+Mzw==H7*yZJ4=BQ>?Riu?=4V}HHU@f4# zYW%BWq6dmdSH(qAtmHv$qFJW8#o0pEnF+_kA>Yr1BM3k#jp&%`thzVh%Jyd zcba0aI3mNQ-8Hf#9&1=fROYd4T^;kmalA&zHvLO&=|We>u{R{T+#mSmA0NfHK4iog z{$fUr7!BT?92Ig$;b`-R9GTGmBuCL2D}%ZfLh$1en8NG#H``Y&{)r1e!-{&J9`oKb zj>1VX-d%{9y?YAEi+Ea}57s}=Nk1OWry%O=6?|&!MLCcfX6v8p(&JjzavHzUw?#p2 zGV2T{^yec#TpulJlX`OJs$NG0Y~*ZjSD$y&v9q8PiXRDkBIJ^S^$6yFt_Z`1GqE}7 zXr@}k@Ay2~Xm0lfMS7Rf8(C;1U7s7p*SOB|rJil&t+ce+Q@|hu1l5d^i=PqMvmqSa z7l(yT59gfyvO%n3R3A(Rfs%&Bw(N|BoES9=E=Q`P2_jY49Ao&2k5A8~{25a|!=P%{IN#A| z{h=+M_^x{0_XzyZ->>E{KjE_gD6MVAc^%oHCnU)9Um_qP4VDW17AAw}>0$xtq#xzM_`2NJY0lt>-9=l;r0ma?tIk1P#A34ERkNYnAgE47_UCT+-J$r7VNZ?OpJB?> z6vZaJi$DW+{)Sq1Z>t;6)Jp^vAIenzZs{QplJ9_iU}Bp(u6BXgB{loqnWjj!PnEZz z7B}r;Q<5i#sp_f36->T@VCY=x0HTLf0Amk^0i{Odgcz<-N3H!JrLx*fk!Xfkb2_Su z1kHjGw(VLxs|D&IU*X3r5hvqgw$4@7XA{VHBiNq%WO&ps>_J^J+wdlVi=J#oZ&%v% z*Jkz@kq1uw1Ke1UXgLL(TfZ)V{%2G`L8ZRF{@d$EO&=*?iPWMk?1w6x`%pkE)%f=U z7O9bEK06Om%tSZ|0k_cn_`>egcr6I$pmv0f=hBLAb$k8J!H5-?_n{FPi33-j+Xf!| zkL3(*?{CglyXnSxpgjTiX-M~T%BrjxGu+D*emZ3Z%hXJ!gUG$F8P3^b+n#Y|GdE;g zk+XMtl~>H%fIS?i86Fn{7c#2waqJ5>Ce?6u9W5qGpTK?I7*}t>{RCZVviL^Xu-_JJ zHGD0|0CG7McyR{FVLX3(lSi@v{EZ~j>1a2;&gF)LLEw4~-@!1EQ2c7|D#!08uNtq> zrb4|oj+|l1FpO@!-oV9H)3dFPsqx|?GM|v=GHS#u4d{Q`5wGA`5fl7%;fyIq(N{Jd zX@Z3d_EV`BLXo1G_7$wdp&E=zIC?dd%I+ICIv!zf zWOtEvo{8fNls`WpQXFQtcbDV87Xzx;ZuUPis_s-klCQV&bol`T4l};)m8NO_Iv%kT zMmv)!#CJ_O2J#{t035&suOm>7%tiQj84qMIS*>ksT3@>}!B(M-MLO(%MsPfKCG3Ht z!=4wZ<3&l%9ShqRvx+NmLqi#Sr7CIm2k}uf5KpI1A3DV&Tb>a`Q?W0duyc%)Vn`wI z%iV*IHDRc54lajT00j*6W&#S4@TgQ!ejC-5zA#}%cFrg0S=Do#*qeELyjJAsq_HMc za5E_Qi>`^F>x;695w$-!NysqQoh5ty{!*Suk1x2!z~-;H<2lk1D0;Ee1ON~-;4~~$ z%|PraIq;;SKcBJCjXFe!Nfp#OsTHy_7ZX6iDS6-d5`p3Jg--E{j=9==9OXoBKDs3g zB=1pDY^HnHC?DzQMEvK=gHHvhb-tkceXd@Bm4KpA0$e!V`TPyA!cJj^AShre{}~8u zWp&m5sH273fN&mMF{I>Y8$@0bCUR^^!8LI2*sGO`vQ<}#w7~(~4wVwN#?ffAWp8P9 z<`KI%UlUNAZtwm2oJQd4@Xpx z2zBIDR4Hc2J#^Xw<2L)heGfh|zErd;s%{Q(w&Kr(+?EEEB{okga&tO4bS85!Flfc) z3Lwa2;X_-$jrSOCd|#>8-{0c;fdt_&t#6M;rh^uTzq3yd*prN)5q&4~bap2&xm%P{ z@R4EjG(U&BIbo% zKX&69YNp?^)>f`Af*Dzx6S~{ewQnVMF>F~MhQKD_UcB0?tT=qlo8{TXwc}?ZhaqHJ z$#~uh7Uz;~p*qpDDn1$-iIWg1Nf>DFd43y+{h#j1I%on-`}Aovm9DV^Tz~zXvMoem z8)EhW4UT!Spg`B)-mbc*O-4L2ANbHTUGYOS8pdTyK)`oM_mI6P=ycJL4%2yC7u6=2 z<7TrnxKv|Nismve8lP3?(S`Ym?OZ;^Hmaxeb-%4qe`4YyS4jqd68e%H^bxR??^Z&9 ze6C|zGIDnG_TTFr)E#;rTrcKCGo3dx+^sGhHRt40n;QKFDM#C9mFfoB@X&GcUBK#x zaBB4+?()tX3qH%QWv((7c6<7<>C$BMa9BxpF$w4NNZ_sQc(YHg>!_jC3Nx>@<pBaX?nY;DuSzOX|?WGdlxOds6?=(hMQ@*EP7yK5*=E%g6VU zXvLI`n0p4q)YN-fDJj>)l2_rQ`|yG-{7%PG?YW>-GOk)Vtl4t2puFvknlCbGV)Zjc z-Y3vX`}I;Hqk`YPhbNwTt@T2Gsx_Hro4qT9mR50;%FrZysn{q5RjIG{W9z5j4Su{l z()^D^2nY8jKMFjY5oMSkHTc^0Mq__Ca29%B>!2Klo8MNilZlfhdIs^u7~tctxI>FZ z`qx?pDxQNmXO;n1zSgo(Krlt@{XIZ>2&K2YRqT$b4p}J2YEg)iLc6epU!;>y_KGoq3ljpDUyP{fI1IwzW!s6M=C*K6(nD z<4Y{^chk_8Y%HvKpSTx>e9n8mGlf}Woi_)0Vp_KiEbhbylKrH~1a$y~8yIvxiCmP} z^*}iRB0~a9Og5>bzJLNb99HuSD^7{~7VPhnbmwdtt-kxJ9mq!fwkB{R!Cp+Hr?0|0 z4N||d0B>t+$A1~PiZfejg^?lQdv>Dlk-=RqbBz^GHg9C)P`MsPw-sjc(-ukRHkn+( z&{Yk#sQ;8p_zLATdl_CBjlI0B!y(KBEA_&DZ({Wto35ygA+Vr)}Tci)LwWAFbt z*A+pO3Sp|JC$tLX#06g;n!Su0L0XDEm{TxJWY1eKJ{q6CxvG{$>r+!C5am2@Jy+@d zuvtzQMkhPXkled!BpN>4<~LPVsC_$d=zEr}=(XTMaV65R zIdtjPb{7T_!im=T{_4qyEArCep{W2nJ5Ex_9uGBiZEb|1o@cj$Gz)iKy~ zT_a^jQES|OIvPr;*kNRRDCUF~`020*;Rvwahx?v)_O?4coYEO^dpz5>WT^96l^?A; zxb2O1zyHM|(v7X2#m50QedL3zDyjq5NV~(P zn&jvT2GJH8^tKSxRSao-Irqh7?MFW9P=gCPz3)z9H+YwUWL%iV29AIf=&-LD_=4Jz z&|rK3tuHck)*xE@h`F~T`sRR3CL7`~KeF>I3ujT6I%_!KL@{;zJJFz(lX)MgOtW~( z3o9;p(^|t0hkaKtmWS}n*4r0xq@P$NJp0m*$dA=L6l+?X3V->*E8;$&*%wz$DOYT= z;Zup>cyTu!*`avw$Br*kCV6(8EzDLBVgI`x2EJ+^w>~vhQYQY27ec02a>VN zo^HCZh!az@U+hb0F68Pdl3&A8xBxUt6RSr}d5SOW)>=ZicsB0HQ4H|>(uJ?cuVW%f zI4_YIS)UqP|sXx#-qu|tB^LR7BywK!Z(qq;NcM+lI?eB0zn#e6hJy# zA7~ImPLP-H0K6fWlcg%+@6H@WyCN5Q;V9*hXwY(Z6T8zYY9w*z#jflLTPUdFI zmOf`wwkK*?;LaBufoEFZU<uK`b1V>0@z-wmV^(xSd(|4wbx( z(?ABWrZ~W-K-D&RDQLCp{Ev_C7L;uN+s8Lk`MRI+$&=S7VVsC#S>A-8Esug)6p|$C z$=Z7uYJ5VV(4Qu9J(Q>7N??{&+n(>)3M8HX4d9Hp{@wXpc`k%SXV0Fk_MRLW{(jW$ zVGKzB>q{KYZH;Ee;YdnM^kl`eC>oW2gtl z))Fwo7Zo(-ztHECGgUcRIi*}!EZ?4o9W2_G9-$cq{?~X3{LsjgN5Zpyb}Gl)0Q37w zwp6ltO2S(Exh7b7XS`632lq7Cr+4iW4OF2Ea;M@tq|xcOuKsJooi5}b>haSDL%E*ZIa=Hq26XlV@s z=U~GWL#Qt}rR=FL=(MT7)}!#aQ#QUWSV)q%K>O#XHDUg14Nf$HeK(TAa=`jQXx{ZC znr1Gbcy7d{szS27i`>n$pHug{MOUN{;~5*?MRpF>^REO_(w)Y=y)mopedx>=9+O6a zTYT^mr%1rL~K@75!--5G^JXG`6pH2vVefI{y?M$U97)%{||1B}zuB z-9va)Fh70z^z%Z(ve*%C=udzG)BT%fw@X?a54inDno`MKF87(QyLf*a5J&}k2#*Sk z48`5alDSB<)>-FPzz&6SeeIjNRK;-R?{ge%(JH zi0Fky@^6xF2HGU(EEg=3m;u>M)>ZdB$6o*Scbh*0-IOV7Yiln9f_y^jP(9?cjb9OZ z=r)0e@c}$+5v&D%%z%ZR*te}daQyPMcu@6F$0a13Cx8Et&4+|jS+(8v0mZ{Yy<)2B z{wtk(ZBX0Otf2@=Gc@u_P=#y!wYwWuiuuICz8eP>fPVKUJYy&Qa{vCM{o*-ABl^7h zf!lvpQ_IB6x*cyDUxIHgSO?v_l>N|L#4yIz354@|6Do-xi@jmMhz74qtK)e$yJS=l z#ow(BWI&665YtGCsYBL`x>S?a+M=}d-;4Qd5{|dP=hhGwzuStZ2eIBml;jhG0BpD8 zAag()QU_Fu5<;C@FDg7UDk?<*0iglXOIfCzGF|v|mxDtqL z+jMlbF`r%Vi9Q2a@(;MFAFpfr#s3l;t5be6atY70Px^a$;QB%91t*YHCOG$0iN}t5 z-H3V^fqJM^MU&n*CnR7}c61JBOHMRW7)F!Jw#JGcnqhE;9x(SZ1gS9{c)9}q z(if)e>5}3gx<=2Uh|-pj`g_A5h*_JX*sKgl@(_TFKnp781nws&j&3|iefS`la?UF0 zz9%rH8&Fag=w$|Xq@I-z_gP7Cb#+DL+>VkksH=IB>VShS(#H$fN=~V|Q(aQ{ekimR z@IB%tD)+xwjjTW1A%)nzm&g`JO==y5*buH;d|RwpVr+DsKNtIT(P2x>ebMpO2Q_Cx zLtY*+=s*(4God^p%oO)|uyyyxI3{R})>U!UfA;9hH-bqK1Zs^vTGG zCu!=jk~9;;hzu##_eklkuGjt{bRfC7w$q3AuQ24Sdae!>u?PqVygb0B=E@-c6%Dvm z?d|oy?)YJ$e$20DI)|5GSHOSfJh-ngA1Gygs~nJ@MWO}5ZserXXeaLpPBUSADBs2r z<~Z)Q+6oaQWQf^MCR^z4`4PRCtui_RMq9@a_gP1yYr=#QFgxHQ_@`)@=H&m$n~jA= zS;61!qT(+Jd5unN@0*>m85YAg#&HDhi_GtC#C(ef{G$3b@%7D3k|OvqgW#5TqW1(K z*-npW*OF;IlHRsfsEqZ1fW+xHr;`^>1WR-PO(+K|k2G6-B?!$cvh}O-ElJ{n%!y3cKH`(wKfd0wY(p3>-}ul;Q?_PfG97E61W2mc3kE2mC^E!ZDGFtuLY?(3Z@x0_ zg!)2il+{=C17qmiVj7&bz$6QVRd~Dm3sdGxDz&hCk$|Wnx6UD1Iejsq^@ZXW2+gGe)6XGc!`Mr z%}5iEV0JB*fBZR`4_8vM=0M3RW7aN5DIeCd|sAr)t-8clO)<6K&H^NxSAM%L@)O(;O1*? zV(uXaIAOdSK;1xbvm`mnfX5#EG|T}hxUJNMKc(OB|Kdm~sr>ejg{LE!>`~P+uSqR+ zxslGNYnneLfEexqYw)SQebo*bt8O6BLFpDH58;qmo0S#Q{doALf@ezg*Sk)ymUfw7Ma*tvX zBxvc>%5=Z4^bj#ynqi+Ayuk{?6vyg; zN9K}02R{vafwV0=a`u^c#zBd3nn`rDmWecXP+7@E90f>R3zTR3mXR+hj1T#b5Nu(( zBOHHfTRr+0`v7KbobT;9XyI{u;zyo*OGavruKwZuoTZb^6iEmRr`v5LGK+WyVOV}I z{njGIe*kqT&--F}Ue-R(sO5u)N1XZkNDD9!4Bwm7m2=Dnp|phWAnakLq@=`=-iqq!J-s~J6#eM>A*e?k&+Y2|P&UQ4mKFqUD{=xelmF%IMK{e@3#O{{JM zk6tYnJlUDyVF*4@QZ2Y4BHB(#Cg15h;43Zr<7LbIbC~`Xrtd`WyIUViv>Q}xbGNt! ziLqJbJ<`8=`Az@>PW9u2OQ)jU&pUw=>56RKC?Mz``Mf_VC}*MsT0-w@QiKHF zCF({sRDM4C{5CWj9elrA$ezQSfg;w=HYMcVUR>yhR`*ohld)ahXQC9XQQy{;P41r3~TuR$)WkSN!{T`ek2Dxd@f!~i)!dhw{YB_ z`)|D!q&460svQE>~}EUgrakv||VkE)-p9UnU{0Pe8^^H+D&{j)1=!iK@DeLB3cTUcNBHvZ)?U{MtL`pcQ9Kp>F6F*kn`X9UkxO=^702?H7MGKr@R%+}2a_jwZ!c3)E|QJGh_bgx-^{|o!T~(Dd7v?_Q194f{~BrgfHq07 zlaPQz=*baBFXL~Q>r(H{cRfHQ>?J*wM@2#ID`|rv`ln9|lt5*vBrgy3Br-8m$KEJg zJegAYW@|Z;Zr(!w^MfRozT#V6{E&}wF~@kq8@!e8UE|*|HP2!F3*0d7I*TMuXmG&) zmpDZHFL7v^#BspoD0sk$+g85M4WlUelB;}4AZyeI%aIp%3TUYPLDs{)-}Zm+&LdTC z!R9=q=ErhV^hUfi`1tCy>&4jVKd4EWj{5XtjW=qsd8oB~vwXf4D;f1P>oiWHSsD2& zQAW6psnZ{OYgkY7=PjEpTyiQQ7SrQ5H`RJ=XydYih7H1p6D_4ALu|MOq6sX!lDR#b zgBy7aKRu2@uN(Ui8k(rU5Cukz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;q)9|URCwB~lgUq0VHCxG-`4>wLMcPqh8CPCRs&8X z5)$La$j1Lb+-pKil(j2YCKeOZME?Nyb)kzAw-y#SM3DxFO!nCpI@$KMeM5OJpa$1^ zH#fPt_vGZBbA)AC9Ie@hvp0b$U=j!)j*~zFh)3ok^GEkZ3t;x)>rMbPt;U5w zi6Ku3W$PR3Yspu@qsUxjOCBd| zZ*ZL9P1=^~*`!*x zxH#gWTFza39g8j5fvJJOpetQNnq0J^Rv7SO{0$1(9krK8|RC>d~l36Px`s+TVZ2uou5jE-E5AbljdwtQu~n`q<8*-o;VG(bWEaV51=I~UNn9O^(I z0Rg~BxaDMlkPd`!FfrQ6=qUpwwNnG)w!}i>`|DV&$7yHs(&!LnRiI?|33_cb8YUat zWfngvY$+A4jR(1Py^Uh#3#lL5&m(h@7p*5o*VmHXVVJ&sBh1)o7ax;4Z|36&0cVD~ sn7K2~*lCTd@}Xtr=>H4Tzr^|X0LofP_H3_Al>h($07*qoM6N<$f?`N?O#lD@ literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Status_Warning_16x16.png b/1.5 'Kruger 60'/UiServices.Record/Resources/Status_Warning_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..78f246f047efee82e1ee0b64f1adbef606253054 GIT binary patch literal 618 zcmV-w0+s!VP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-;7LS5RCwBylfP~gK^Vk;-}-FFIChME=h(5G2(T6; zpah97qN1X89i>STp`=JblN3Bb-XLY%Q1AcdkQrp!HXSPCG~edkf_v zbNLd`4I;g&my7af(tY z!^x4-&e|Q|sk}S%YrxB;<)U85f{Q}17Mvr0|04k1_t(Mm5D^gJ?7QL1(b)&!p$F_H zQ=ZPJBkW)V#(=Z@IwE#7fKVZ7{EzbK1jh-bjj_8Pu)0*s;YK}N6oDJ3Bf{6$rO6{A zf)fBiL|Ck3`TVK7>H(*(-W>D)7;>$iJe67F{IB>i05~0`Lczgc$^ZZW07*qoM6N<$ Ef-W!&ivR!s literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj index a060db2f..5e33ef03 100644 --- a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj +++ b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj @@ -119,6 +119,12 @@ RecordChannelDialog.cs + + Form + + + RecordProgramOptions.cs + Form @@ -194,6 +200,12 @@ RecordChannelDialog.cs + + RecordProgramOptions.cs + + + RecordProgramOptions.cs + RecordTasksDialog.cs @@ -257,6 +269,11 @@ Resources\Action_Play_LG_16x16.png + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - >> Channel details << -TV Channel: {0} {1} -URL: {2} -IPTV service: {3} - - - Scheduled recording duration is {0}, with a safety margin of {1} minutes. -Total recording time, including safety margins, is {2}. - - - The recording will end the next day at {0:T}. - - - The recording will end the same day at {0:T}. - - - The recording ends today at {0:T}. - - - The recording ends tomorrow at {0:T}. - - - >> Recording duration << - - - Recording duration is {0}, with a safety margin of {1} minutes. -Total recording time, including safety margins, will be {2}. - - - >> Recording schedule << - - - Task name: {0} -Task description: {1} - - - Task name: {0} - - - Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes. - - - Daily recording, everyday at {1:T}, with a safety margin of {2} minutes. - - - One time recording at {1:T}, with a safety margin of {2} minutes. - - - One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes. - - - Recording right now. - - - Recording as soon as possible. - - - Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes. - - - every - Keep trailing space! - - - and - Keep start & end space! - - - every - Keep trailing space! - - - , - Keep trailing space! - - - Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes. - - - Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes. - - - Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes. - - - Starting on {0:D} with no expiry date. - - - Starting on {0:D} and ending on {1:D}. - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + >> Channel details << +TV Channel: {0} {1} +URL: {2} +IPTV service: {3} + + + Scheduled recording duration is {0}, with a safety margin of {1} minutes. +Total recording time, including safety margins, is {2}. + + + The recording will end the next day at {0:T}. + + + The recording will end the same day at {0:T}. + + + The recording ends today at {0:T}. + + + The recording ends tomorrow at {0:T}. + + + >> Recording duration << + + + Recording duration is {0}, with a safety margin of {1} minutes. +Total recording time, including safety margins, will be {2}. + + + >> Recording schedule << + + + Task name: {0} +Task description: {1} + + + Task name: {0} + + + Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes. + + + Daily recording, everyday at {1:T}, with a safety margin of {2} minutes. + + + One time recording at {1:T}, with a safety margin of {2} minutes. + + + One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes. + + + Recording right now. + + + Recording as soon as possible. + + + Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes. + + + every + Keep trailing space! + + + and + Keep start & end space! + + + every + Keep trailing space! + + + , + Keep trailing space! + + + Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes. + + + Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes. + + + Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes. + + + Starting on {0:D} with no expiry date. + + + Starting on {0:D} and ending on {1:D}. + + + {0} [{1:yyyy\-MM\-dd} {2:HH\-mm\-ss}] + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs index da4446c9..2c0f4853 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs @@ -13,36 +13,59 @@ namespace IpTviewr.Services.Record.Serialization [XmlType(Namespace = RecordTask.XmlNamespace)] public class RecordDescription { + public static string CreateTaskName(RecordChannel channel, DateTime startDateTime) + { + return string.Format(Properties.Texts.RecordTaskNameSuggestedNameFormat, channel.Name, startDateTime, startDateTime); + } // CreateTaskName + + /// + /// The user-provided name for the record task. + /// public string Name { get; set; } // Name + /// + /// The name of the task in Task Scheduler. Filled by Scheduler + /// public string TaskSchedulerName { get; set; } // TaskSchedulerName + /// + /// User-provided description + /// public string Description { get; set; } // Description + /// + /// The details of the task in TaskScheduler. Filled by Scheduler + /// public string Details { get; set; } // Details + /// + /// The task name for Task Scheduler will have an standard prefix (IPTViewr) on it's name + /// public bool AddPrefix { get; set; } // AddPrefix + /// + /// When filling the Details propery, Scheduler will verbalize the most important aspects of the task + /// public bool AddDetails { get; diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs index 81af78b4..c98dbda4 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs @@ -61,7 +61,7 @@ internal Resources() { } /// - /// Looks up a localized string similar to 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task + /// Looks up a localized string similar to D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task ///TaskId: {0} ///Database: {1}. /// @@ -72,7 +72,7 @@ internal static string DefinitionRegistrationInfo_Documentation { } /// - /// Looks up a localized string similar to 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task. + /// Looks up a localized string similar to D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task. /// internal static string DefinitionRegistrationInfo_Documentation_Begins { get { @@ -80,25 +80,6 @@ internal static string DefinitionRegistrationInfo_Documentation_Begins { } } - /// - /// Looks up a localized string similar to Task Id: {0} - ///Task file: {1}. - /// - internal static string DefinitionRegistrationInfo_DocumentationV1 { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_DocumentationV1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task Id:. - /// - internal static string DefinitionRegistrationInfo_DocumentationV1_Begins { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_DocumentationV1_Begins", resourceCulture); - } - } - /// /// Looks up a localized string similar to Application. /// diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Resources.resx b/1.5 'Kruger 60'/Services.Record/Properties/Resources.resx index 81406fbb..d3802b71 100644 --- a/1.5 'Kruger 60'/Services.Record/Properties/Resources.resx +++ b/1.5 'Kruger 60'/Services.Record/Properties/Resources.resx @@ -1,141 +1,134 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task -TaskId: {0} -Database: {1} - - - Task Id: {0} -Task file: {1} - - - Task Id: - - - 1DCDA40A-A9D5-4CF3-B3C5-971B8811F127: IPTV Record Task - - - Application - - - RecordTasks.sdf - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task +TaskId: {0} +Database: {1} + + + D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task + + + Application + + + RecordTasks.sdf + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record/Scheduler.cs b/1.5 'Kruger 60'/Services.Record/Scheduler.cs index 4c225dda..c232cee7 100644 --- a/1.5 'Kruger 60'/Services.Record/Scheduler.cs +++ b/1.5 'Kruger 60'/Services.Record/Scheduler.cs @@ -54,11 +54,7 @@ public static bool IsRecordSchedulerTask(Task schedulerTask, out RecordTask reco if (!schedulerTask.Definition.RegistrationInfo.Documentation.StartsWith(Resources.DefinitionRegistrationInfo_Documentation_Begins, StringComparison.InvariantCultureIgnoreCase)) { - // try v1 documentation format - if (!schedulerTask.Definition.RegistrationInfo.Documentation.StartsWith(Resources.DefinitionRegistrationInfo_DocumentationV1_Begins, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } // if + return false; } // if try @@ -69,7 +65,7 @@ public static bool IsRecordSchedulerTask(Task schedulerTask, out RecordTask reco catch { // ignore, but return a null RecordTask - return true; + return false; } // try-catch } // IsRecordSchedulerTask @@ -299,7 +295,7 @@ private void SetDescription(TaskDefinition definition, RecordTask task) { string userDescription; - TaskName = GetUniqueTaskName(task, "IPTV"); + TaskName = GetUniqueTaskName(task, "IPTViewr"); task.Description.TaskSchedulerName = TaskName; userDescription = task.Description.Description; From 9ce058069ce1adeb1f203a688068f60701b6ea28 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Thu, 1 Sep 2016 01:49:14 +0200 Subject: [PATCH 29/76] Added IsCurrent method to EpgProgram Code changed to use this new method --- .../Services.EpgDiscovery/EpgMemoryDatastore.cs | 2 +- 1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs | 10 ++++++++++ 1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs | 5 +---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs index 750e6aac..59d6bf55 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs @@ -113,7 +113,7 @@ private IEpgLinkedList GetLinkedList(EpgService service, DateTime? localTime) node = service.Programs.First; while (program != null) { - if ((utcTime >= node.Value.UtcStartTime) && (utcTime < node.Value.UtcEndTime)) + if (program.IsCurrent(utcTime)) { break; } // if diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs index 35bb707a..bf8a02ca 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs @@ -93,6 +93,16 @@ public string XmlDuration set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } } // XmlDuration + public bool IsCurrent(DateTime referenceTime) + { + if (referenceTime.Kind != DateTimeKind.Utc) + { + referenceTime = referenceTime.ToLocalTime(); + } // if + + return (referenceTime >= UtcStartTime) && (referenceTime < UtcEndTime); + } // IsCurrent + public static EpgProgram FromScheduleEvent(TvAnytime.TvaScheduleEvent item) { if (item == null) return null; diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs index 2e6012f0..fbeb5bbd 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs @@ -103,10 +103,7 @@ public LinkedListNode GetUtcProgram(DateTime utcTime) var node = Programs?.First; while (node != null) { - if ((utcTime >= node.Value.UtcStartTime) && (utcTime < node.Value.UtcEndTime)) - { - return node; - } // if + if (node.Value.IsCurrent(utcTime)) return node; node = node.Next; } // while return node; From 3319f2d69b57ffa57bef68bcd3920bc73f821dd3 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Thu, 1 Sep 2016 01:50:45 +0200 Subject: [PATCH 30/76] UiServices.EPG: moved resource file to Properties folder Code changed accordingly --- .../EpgBasicGridDialog.Designer.cs | 6 +++--- .../EpgChannelPrograms.Designer.cs | 6 +++--- .../EpgExtendedInfoDialog.Designer.cs | 14 ++++++------- .../EpgNowThenDialog.Designer.cs | 2 +- .../CommonUiResources.Designer.cs | 4 ++-- .../{ => Properties}/CommonUiResources.resx | 20 +++++++++---------- .../UiServices.EPG/UiServices.EPG.csproj | 16 +++++++++------ 7 files changed, 36 insertions(+), 32 deletions(-) rename 1.5 'Kruger 60'/UiServices.EPG/{ => Properties}/CommonUiResources.Designer.cs (98%) rename 1.5 'Kruger 60'/UiServices.EPG/{ => Properties}/CommonUiResources.resx (86%) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs index 37af132e..ca68f47e 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs @@ -101,14 +101,14 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // // buttonRecordChannel // resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); - this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Record_16x16; + this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Record_16x16; this.buttonRecordChannel.Name = "buttonRecordChannel"; this.buttonRecordChannel.UseVisualStyleBackColor = true; this.buttonRecordChannel.Click += new System.EventHandler(this.buttonRecordChannel_Click); @@ -116,7 +116,7 @@ private void InitializeComponent() // buttonDisplayChannel // resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); - this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; + this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Play_LG_16x16; this.buttonDisplayChannel.Name = "buttonDisplayChannel"; this.buttonDisplayChannel.UseVisualStyleBackColor = true; this.buttonDisplayChannel.Click += new System.EventHandler(this.buttonDisplayChannel_Click); diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs index b8eadd61..37805f7d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs @@ -117,7 +117,7 @@ private void InitializeComponent() // this.buttonDisplayChannel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonDisplayChannel.Enabled = false; - this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; + this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Play_LG_16x16; this.buttonDisplayChannel.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.buttonDisplayChannel.Location = new System.Drawing.Point(141, 325); this.buttonDisplayChannel.Name = "buttonDisplayChannel"; @@ -133,7 +133,7 @@ private void InitializeComponent() // this.buttonRecordChannel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonRecordChannel.Enabled = false; - this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Record_16x16; + this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Record_16x16; this.buttonRecordChannel.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.buttonRecordChannel.Location = new System.Drawing.Point(247, 325); this.buttonRecordChannel.Name = "buttonRecordChannel"; @@ -149,7 +149,7 @@ private void InitializeComponent() // this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.buttonOk.Location = new System.Drawing.Point(372, 325); this.buttonOk.Name = "buttonOk"; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs index ee25baa3..36bd1d39 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs @@ -79,7 +79,7 @@ private void InitializeComponent() // // contextRtfMenuCopy // - this.contextRtfMenuCopy.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Copy_Clip_16x16; + this.contextRtfMenuCopy.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Copy_Clip_16x16; this.contextRtfMenuCopy.Name = "contextRtfMenuCopy"; resources.ApplyResources(this.contextRtfMenuCopy, "contextRtfMenuCopy"); this.contextRtfMenuCopy.Click += new System.EventHandler(this.contextRtfMenuCopy_Click); @@ -93,7 +93,7 @@ private void InitializeComponent() // buttonNext // resources.ApplyResources(this.buttonNext, "buttonNext"); - this.buttonNext.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Forward_16x16; + this.buttonNext.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Forward_16x16; this.buttonNext.Name = "buttonNext"; this.buttonNext.UseVisualStyleBackColor = true; this.buttonNext.Click += new System.EventHandler(this.buttonNext_Click); @@ -101,7 +101,7 @@ private void InitializeComponent() // buttonPrevious // resources.ApplyResources(this.buttonPrevious, "buttonPrevious"); - this.buttonPrevious.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Back_16x16; + this.buttonPrevious.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Back_16x16; this.buttonPrevious.Name = "buttonPrevious"; this.buttonPrevious.UseVisualStyleBackColor = true; this.buttonPrevious.Click += new System.EventHandler(this.buttonPrevious_Click); @@ -109,7 +109,7 @@ private void InitializeComponent() // buttonRecordProgram // resources.ApplyResources(this.buttonRecordProgram, "buttonRecordProgram"); - this.buttonRecordProgram.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Record_16x16; + this.buttonRecordProgram.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Record_16x16; this.buttonRecordProgram.Name = "buttonRecordProgram"; this.buttonRecordProgram.UseVisualStyleBackColor = true; this.buttonRecordProgram.Click += new System.EventHandler(this.buttonRecordProgram_Click); @@ -117,7 +117,7 @@ private void InitializeComponent() // buttonShowProgram // resources.ApplyResources(this.buttonShowProgram, "buttonShowProgram"); - this.buttonShowProgram.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Play_LG_16x16; + this.buttonShowProgram.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Play_LG_16x16; this.buttonShowProgram.Name = "buttonShowProgram"; this.buttonShowProgram.UseVisualStyleBackColor = true; this.buttonShowProgram.Click += new System.EventHandler(this.buttonShowProgram_Click); @@ -126,7 +126,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // @@ -140,7 +140,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonZoom, "buttonZoom"); this.buttonZoom.Cursor = System.Windows.Forms.Cursors.Hand; - this.buttonZoom.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_FullView_16x16; + this.buttonZoom.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_FullView_16x16; this.buttonZoom.Name = "buttonZoom"; this.buttonZoom.UseVisualStyleBackColor = true; // diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs index ae6ed96f..35052d62 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs @@ -58,7 +58,7 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.EPG.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // diff --git a/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.Designer.cs similarity index 98% rename from 1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs rename to 1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.Designer.cs index 20498a50..cfc3f26e 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace IpTviewr.UiServices.EPG { +namespace IpTviewr.UiServices.EPG.Properties { using System; @@ -39,7 +39,7 @@ internal CommonUiResources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.CommonUiResources", typeof(CommonUiResources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.resx b/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.resx similarity index 86% rename from 1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.resx rename to 1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.resx index a75e4d78..d19f1504 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/CommonUiResources.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.resx @@ -119,33 +119,33 @@ - ..\Common.UI\..\Common.UI\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Close_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Close_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Back_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Back_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Forward_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Forward_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Fullview_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Fullview_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Common.UI\Resources\Action_Play_LG_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\Resources\Action_Play_LG_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\common.ui\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\common.ui\resources\action_properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Common.UI\resources\action_properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj index ff310f49..61f3f27f 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj +++ b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj @@ -54,11 +54,6 @@ Properties\AssemblySolutionInfo.cs - - True - True - CommonUiResources.resx - Form @@ -87,6 +82,11 @@ Component + + True + True + CommonUiResources.resx + True True @@ -117,7 +117,7 @@ - + ResXFileCodeGenerator Designer CommonUiResources.Designer.cs @@ -217,6 +217,10 @@ {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} UiServices.Discovery + + {971b720e-2ae8-4ea4-b5ce-7a1af11c3743} + UiServices.Record + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - TkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - DAAACwwBP0AiyAAAAAd0SU1FB98CGRcaEMyeEGUAAAPOSURBVFhH7ZNtbFNlFMef+zzt7avDmSlEcUt0 - ZBAILy74GjbAtivEjG1uCpQE9uLYZFuyLQUzpuKYM7FZ2Btr7719G223ZAviB5TwASWZGKMQMgRi9ANR - JirZpmBhHRv3ep7bpx0xxk9ojOkvOWl7znme//+ce4tSpEiR4r8IKV2LNx9rwO4fD5EzJ1oeqr0h6L74 - 6gD+4O0i3PCAnlvI+u4/lhWadde6yMXbIpZjElYm3PwV8GOUqgwHp1kOalGxQnMAIU7Ljt0faiz6slsC - ngEBZTouJFe9aCyLVzXmKQ//A8sr0CefbeOPQ4GP1xF6Pt9avLOyur24pLSSpZDFZtu6s6KyfVclREVV - +zbHjpacnGXPsPI8ix/WZd8SSJRerhqAuPy+4VOYkmMtqMZq3E5NJXpugwlfFX+QlVFHZ+8nwciQ0ujc - 62cp1ON2nw2GB5WByHwEwuG5/A0b2WCMoTpzb/JiCJjwzlPZxtWszMDcNy7DKK1Tg9Mip8REfAMKJghO - Cg3/HAgPKVtKSprVdoS0/iOh34PhiFK7p65zXV5emVuQrgxEIorrUNdp1hPnumfB+aQ4xIdNxn5WohAI - dRNPLzHkgrlZ2hcDAzMCktcvxc8h/SMLvaHhuwGYtl/yXurqO3y6p999BgzINHJylubR87trX++iGxF8 - /ov0d5JJ8cExOhW9+KagnViUzi96s5Ds+aUHj4FgNCrgnz5uJr4MM878aK9Jor0xiVPugAHLMu6FJ1c8 - uwEMyH64PAATB0LhZICBOa1Wm0F19rXsjwRhAx0u10lVOMGxpjRRNQDPta/c1Pj5W9qj9EVLbIQG/f6b - m1yvt5ttUUE7NSMhZVZCUZ5DaZbC7fW+yIjiDw1OPpG9ZM3izMzVjU6nhxrwDRwZZzK86A9cpY9kq8PR - ynJxlmfpl09LJDberbvgrV7gTIoLWIHp1U8aNDfezV/w1aQ5Z0QkH60jnfT87qYWjx8MdHb3jaoXAvv2 - tw5RMbfk/a5wS3Fd27vvHQdDMhia4nX6R1nbPK1FuoodeWbLpMf0bXLye8QTBuiWqgvSN3/ZZhLhmIGe - dfX6PgsMjij1jc0e+psCwl/Tt56unD73QCgie4MD11auWrWetfwVOt2vh8nVew38eQNgYK7WZnqVHVDZ - aC96xbLppfLHMrNWshSy2gscVru93AZhKSjYtSY31wpp+o/5ezQclzHaSoZBWE4IJ8Qn+sj3L68lNtb6 - z9JgI46bHjypbkPAd0+9QULwb0xn5X+HdDN+/Nw7mpHX8kkpS6VIkSLF/w2E/gDuigD6FZTLsQAAAABJ - RU5ErkJggg== - - - - - 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 - YII= - - - - - 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 - AElFTkSuQmCC - - - - - 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 - - - - 194, 22 - - - Canales &recientes - - - 191, 6 - - - &Seleccionar proveedor... - - - Ver &detalles técnicos... - - - 194, 22 - - - &Proveedor - - - 194, 22 - - - P&aquete - - - 191, 6 - - - 194, 22 - - - Configuración... - - - 194, 22 - - - Exportar información... - - - 191, 6 - - - 194, 22 - - - &Salir - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe - vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F - WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 - 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy - Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR - 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr - qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ - 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy - 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN - DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ - g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY - MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u - uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD - +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG - 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI - MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 - GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY - 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA - +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD - BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 - E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 - GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv - t1cGwyjGjgUAAAAASUVORK5CYII= - - - - Editar la lista... - - - 264, 22 - - - &Favoritos - - - 261, 6 - - - 264, 22 - - - Ver canal de &TV - - - 264, 22 - - - Ver canal &usando... - - - 261, 6 - - - 264, 22 - - - &Configuración de visualización... - - - 264, 22 - - - &Editar la lista de canales... - - - 261, 6 - - - 264, 22 - - - Comprobar &disponibilidad... - - - 264, 22 - - - &Actualizar lista de canales... - - - 264, 22 - - - Ver &detalles técnicos... - - - 49, 20 - - - &Canal - - - 200, 22 - - - Grabar &canal... - - - 200, 22 - - - &Gestionar grabaciones... - - - 197, 6 - - - 200, 22 - - - &Reparar tareas... - - - 84, 20 - - - &Grabaciones - - - 239, 22 - - - &Ahora y a continuación... - - - 239, 22 - - - &Hoy... - - - 239, 22 - - - &Mañana / otros días... - - - 236, 6 - - - 239, 22 - - - A&nterior programa - - - 239, 22 - - - &Siguiente programa - - - 236, 6 - - - 239, 22 - - - A&ctualizar... - - - 103, 20 - - - Guía &programas - - - 228, 22 - - - &Documentación - - - 228, 22 - - - &Página principal del proyecto - - - 228, 22 - - - Informar de un problema... - - - 225, 6 - - - 228, 22 - - - &Buscar actualizaciones... - - - 228, 22 - - - &Acerca de... - - - 53, 20 - - - Ay&uda - - - 436, 15 - - - (Nombre del SP) - - - 436, 15 - - - (Descripción del SP) - - - &Ver canal de TV - - - &Grabar canal - - - Ver con &reproductor... - - - 238, 22 - - - Copiar la URL de ubicación - - - 238, 22 - - - Copiar datos del canal - - - 238, 22 - - - Copiar todos los canales - - - 235, 6 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 - JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAACPklE - QVQ4T6WS70uTURTH9y/03jdBL3prU2O4FqvBU66hLB2GFtKvJ9Isfy3TJEXLVHT5A7QVLp20Wk3CiUb+ - AH8gJmIsJSs1l7TEoabYRDD4ds99dI9Le1MHzvPi3OfzufeeexQA/iv5p7MjAEp32xpaXat45lhGc5Mf - j6zzqKv9BkuVF/dLZ1BU+Bn5eR+Qkz2OG9c9DN0SENjbA9TWbFDxr7G+sQl9Yi/OJL7iyUISuF6ucEF5 - 2Q8q7hkE+5fXcdT4GkqlCFOCk8qSwPF0iQuKCr9TcVdsw198K4gwuJF3axanjS20JAlsjQtccNM8TcWQ - 2Am/n/LjoOBCZsYk4mJttCwJGup9XJB+bZyKwfgTHvL4EKZ1QBRHYTBY6RdJUFM9xwXi5VEq8tgL7hn5 - in3RTUg+24+YmDr6TRJUlM+iuwvsKYGUC29hOjfIu00NozvTsWlnCe5DvOkNBMEiC0qKp9DuBpsBoMX+ - i737T5TeW+RNpYbRndNSPUH4VFwbdLoyWXA7fxLO58AT2yYbnAD0SRkhaTxvRtLVAgmOZfBJJ7TaYllg - zplgMFD9IMB3JkjBliLUAsY+LWBiZhFi9l0c17dyWH3MDo2mQBbQWFofInhsEhB8JbcSH71L8M6vIuuO - BZFaO4ObEXnkMdTRubIgLfUdu/cahw/onNh/SMCL9gG4u4bQ3TeCweExnDCYoNQ0IorB4aoGqFSZIYL4 - SxcH+HjShNGQ0DvTU1G3qWF0Z9qVkuDDUemy4N8Tit/kKu4LI/ykxwAAAABJRU5ErkJggg== - - - - 238, 22 - - - Exportar lista en archivo .m3u... - - - &Copiar - - - Gra&bar... - - - &Ver canal... - - - Lista de canales - IPTViewr - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAu + IgAALiIBquLdkgAAAAd0SU1FB94KCBQCD9JCkw4AAAlUSURBVFhH7ddpVJNnFgfwN1sDxkgI2WMIBAQE + wuoGArKEBEUUpYCtUEWxWEWEM24o4tbR0ap1pNRhqmABUxEtihvHoxZoEKuIUjAlTgRxVCoWiwvuJPOP + vLaMTjvTmfnY+z25v3PvfZ7nvsTv8d8Gk0YjWKLRBNdrJkUQvpEqTiyjSedU02SLW+nSnA66YNVVGi+j + ijo4+g8ElfzN/xQ0KoPgy2II54BtVPdYHd19WoOVS1IjyzmlaYhibrOtwwI9zz7LwJcuMwokOe084boO + W8GGG2zu1k4r7rZbNGbQDPKffmNIBTGE96hSmn94NdNbUzvYa2Id12PqWZFb4nk5AM4AuCvSmr0c0vW+ + siyDHwC+kpXtXsI1HW68DTccuFu/F9rmdw2x2dH9lnXqp+S//rugEISrbB5ljN9R+ujRJ1gjg0/ZASAF + YJhyYp0XAKMBCHWZ3hgFwCQA4gCIByBeutQYJ85pjxGu7YgEIJC7udOTk3dHzt7Rbcsu6mEyZ2wkk/xC + yLmTiKDhFfQg5RHWGL/jfAAcAPD0C68O8FbXqpXRdVPdp5xNdok/n+b0bmOmYkbTEsf3m1fI0/UrAcgB + YBkAmajAHN76GwncLZ1qzvYuf/aOu46swh7bQSUPGLSRE8hsAwOTMkK4hhLmdIgZ4nrINlh5xB4A5ajR + J4JGBJ+KASAZgHSPCXXLXSefXa+IO7dNnnihwD65qcg+tbnEfr6+dGiWoRiAnQDkAfBHABYBkAJANAAj + AXAYVPpwCLPwNo3MSgZKHsTbRFHJyq1CFRW8YNdK57HKI6MAGA9AMgCZAKxVqmq3u0XpPneKrj8gm/zN + cUlcw1fidy7pJLO+rZd+oK+XZhp0AJwG4DAAewDYDkAOALPRgvEA+FgXP5BY7eu1osYvIpMjfG0WEmph + GRMAHgDDAAhEC2IBSAMgF4A837BqrUdEzTHnSJ3OPurMRUn02dbcXR2dX3x1527AMkOnOO3yDclCQ4dk + qfEKAJcAqAHgAGYgH4DlACQDEAqAi9XeRxx6MVkFDs2OGM8toasFZZwI2X7FOEXFGACmoALzAfgQgJ0A + VPqEVtcND69pcYz4+lrgew1drR0Pn5jJmP5x+1PBnMuPRRmGXgB6ALgFQCsAOgDKAfgYgIUAxFqXPPRj + 7u0VMw4+fYvi4EEQnoOSiAl2WutIYZk4XLbfB4AJAKQBsA6AIgCqALgAQJtbWM2d1BUtvchp6k/dH9O2 + tJv4qS0m0QKDSbzE+AKARwDcBkAPwGnOn7t2sz/tXs3a1fMeAMHMsl5HxsHnLErSMoIIZ/+JquHuYQOg + ACAYLZge4lq5HIACAI4C0AjAdQB63MJrnqpmXugj8/4UiZvbzLzZLWbhAoMZABMAfQD0AvB3ABpQgS8B + 2MwqvPeBdfFDDXPvIzfGoWc21M21VCKaXUTTcLVczMDwMNl+DSowFxXYCMA+AM4A0AZAj09Y9XP3iBqT + IuJr8/TsFvM7Oa1k+n6A3c8AMwAmAJ4B8AMAl1GB4wDkowJZqEAMWqBkVDyxox7ooQFQTB/P3cNHBbxR + gckAZAGQD8AxAJoBuA3AUwyhyUNVa3aK1Jml6jrz29l6Mv0bFbAAzAC8AKAHAAMAJzEDf2XturcYQzgF + AG/MAJ96rI9OTGSX0KO4ewQA+AIQB8BSAD4D4BQAVwDoAeAFjqHZM7LWPEytM8uizpgTVvzHgCv/AuDz + a4BsAAoBqAbgKgD3Aeh7BXDR6Mw4hubE1wD9LWgdCHgOQDcAegCqAHizBZWPaYRqcJ5lBnhkC6YAsASA + nQCcBuBvANx7HWCpwEBAAgDcWS1mQfpPAMsMPAbgJgAXAKh4OYS7Xg6hmhxCDnVHI5UYw1pKjbLVciIF + ez0AmDhgBqoA0APQDcBzAEyvWjBUgxYs/xkQ/1Gb2TalxcwHQLTYaBLltD8D4C4AVwCoBqAYFViNeyB5 + 4DGkLthOIdwHJVLGc7WWYzgMp0AFgOUUfATAlwA0AHADgF7f8Oo+DKEJN2H/EA4AxG1qM3NSWkx281v7 + hIuNTwH4EYA2AL4BoAKAbQBkAjAZM2C5iESYASZFGUIQEqYnbkKtFY6hLExWHghAEgC5AOwG4DQA3wHQ + hVPwyENV88I1qs50uKaLTP0qTObPTv7QZzevtVewyHgHgKsAnAfgMAAFAKwAIBkzMA6AYS+v4r04gi8D + ryAADI2wTIAWeAMwCRdRBgBbASgHQAdAKwCdANzzia1/9DLjm/ECFegA4LIwp10HwCEACgBYhYsoFQDL + Y+RtXfpAZLXviRVtxpr+/JYIsFlLQQWGAOCEmzAEFUgCIBuAfAAOAFALQBNaYHRR6657J5675f5uQyc2 + opvOKd92OM9tMSoyvmvmpxvOoAVVqIAWgO0A5OA1TAUAz3H3CFbhfftBxQ/ZzKLv/3lNFFkrCVSAicdI + GKao8EIFogCYBUAOAHkAaDGER5WRtdVuUXX1ThPrz+E5PofnuF447WKtYEbTCWHa5YPCDEOpaIkxH4AP + AcgCIBmAKACwkHQ7sHbf51gWEqrHWDLzgAjnF1BVsv1sAOQAjAAgGoAUABYDsB6AT7zUtYVYSEqxkHyh + iDuvlSc2lsiSLu0cOrv5E+k8/SZJpiFXvNSYiWOYAkAsAOOwlHpx8rrs2QU/cthFDxiMCZlkxtdCOlhJ + RMoOMNAC23GulY7YB/wBUAOQAMAcALKwE2ZjJ8zFSrbaJeF8rvP0xuWKmU2LHN5vTsdKNgsbUSIWkmjx + yvYQAHx4G246cbdgKc3rGmxTcJfOUM8ms/1CePEXEBFOFcxQ10pbACwrmScAAQCoAIgB4G0AErGUTsNS + moAZmIqlNBpLqQpLaRB2Qn8Ahotzr8mFa68LsJQOsdt2m2mTW0el8+Rkll8LrGbekmxKqFslY6zyMDvA + 75gAADmWUldsxUoAfAHwB8AfAF8AlM6zmtzwXaDAd4EUAMt3gY1k1TVr0bprDJvUUgrTJZD8898QMm4E + EeheTh3rf5w5xrKWh5zmAGAHAF8Zc0bgOfUs321ag51r8kUOKsB2mtts7Zihf0sy5yTNNmIZhanw+/98 + DfE4noSjYj5luO9WqjJoP81Lc4LurqmiO6u0NEf151TH2EMUecIRQhZfTghj/0Lwpm4lxElaQjS3guCl + VBI2sSsJK80ogrC2If/x93g9COIftCli6OLZdiIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCBQHAUiNSkwAAAmpSURBVFhH7Zd3dNXlHYc/CQFZBQUBwdNWqVYc + BaVqa7GtWuuoizrq6rAH8LSearWOgoqSEJYMRWWGhOReMiF7LzJICAkJZJCQTW4SQhiJICSs5L593pvY + U1rb0//6T+85z3nvvSf5fZ981+8X/f+lU2cG6OmVTB8Y6WyH5GrhuwbpXKPU18b3llYvmQ5vmcND5G7z + kWkfKnf7MM9p2n34zn7vDV5yHxbnIE2XYmN8xSUCBdlSaw1USF31Umet1N3grS8bhqm3eaT6XGPkbh2H + zEQkriLoFN5fDVMINJnPEznHw1gYBZcBUq2DIp1w6lKJvwukpEo15VJ1qdSwX2qp9lZ71XAdqR6r47WT + 9EX9NTrdOE1nD81QX+vt6m+9i4zMIuiPEbgb7iLIHXAr3ARTwYqNI0sjOcnQEYKT3X/MhCd4QjKBq6V9 + JVLFXi9V7R2murKxaiyfopbK76qteqaO1PwEkYcReRKRF3S2+Xe62DIHkbmIzEHgJYK8CE/DI3AvWKEb + 4ZtwBQxHgBINClh0/KSUWwgFUlGBt4p2j1BZ8QRVlHxHB0pnqnbfzxB5CpHfq/3Aa4gsQMQPkeWIrNK5 + 5jWUZjVpXoGEP0Heg9dhLjwDP4fb4TqYQG+M4ERiMBPK2Uv6c6XMnV7Kzh+pvF2TVFgwTcW7Z6lszxOI + zEHkbdXtW4rIOkSCEYlUZ02cTtQl6WRDis40JevcoXhddG0nIw5E1hNkGbwDc+BxsCW6HpCwmbD9YAWS + U6T4dCkp6zKlZE1QRs40Zef+RHn5z6ig4FVEFiOyAZFIHShLU+3+AjWVl+lQRZXaqmrokVp11R7Uqfoq + 9TSV6fyhAvW70shIBCLrCLYI/gCz4Qdge+Ny+oKeaEfAkSSFJ3srKm2MYtKnKiHzR0rJfhqRP2tn3kdk + xKHCwlSVFBVrX3GNykta6JHOpzsOnUzvOXW2/FzvuZWnT/SMPl7Xre66Tn3Z2MLEVOtCSyEiCQQLQMSX + cx48DDP4PJmTLDAZ2hQvBScMU2jSJERmaHvqo4pNf0WJmcuVmu1UZk4WIhXK3+WiNF0qLuyJ+6Lrovnn + l9vtHtNZd17HDp5Rd/0x+qOR/iimUeMpy3oa9a8EfA6YnLZrOb9BP3hL63d4aWP0KAXGXaOQhLsR+bUi + UhZqR1qg4jIyKE2lUnceVmbuaUQuPlFT3T8Y0vh2tJlXDrtMf//AVwFfnnCrtbKfRj1Ho3bRqPWI7EIk + jEZdStB5BL+fcxowFa4h0upIb322/XJtiJ6mzTEPKijuFTkSVissKUaRKaWKTmtVfMYZRPrIiHt1S6sn + 2CKXy6ggz6hol3n78MB3Ry6cN+wQQ6O61V59Vp0Hj9Co5TrVkEB/rKU/XqM37IjegohdWD7SirAhWh1x + pT6JnK7Pt89G5G0FxG7W1vgsORNrFZbcrajUi4pJcysu3Sgxy4zdWWDIiFHWTqPcXBN07KhHoKKnx9Af + hokxaqrok6uqW4erD1KWdHXVbWCjvqnepid04dB0RCZQmqHSYqePlmybqI/Cvo/Ir7Q2aqE+3+GgLIXa + EutCpAcRN/1hFJlqtANi0wyTY5ScYebV1nuC29ec5kaj0iKjyhKjmrJ+1e0/qeaKerVWZamjZpOO1b5F + WWYzttPZqFeqr4UM+DmGapFjkvydd2hZ6PNaGearNRHh+jSqROt2dGhTzDltiXPTqEbOJKOwRKNwiEo2 + Hze3DIY2JuVEF9mgJLsLjfbuMdpf0q+q0pOq2Ven+vJMNVduUNuBvyDyGCK36GT9OPqDHvBz+MjXMRFu + hxe0xOmr5aERWhleqo8jO/Xp9gs0qqE/DKUxCgRnvMk72jUY2pggVzvZyDRKpyQ5SBRQoqLdFxA5zthW + IZKkg/vWqqH8TzpU+SCLbBqNau8xTIG/cwiBJ8BMeBY+RCqMspRoRWiHVoWfR8SQEUOPeEhuPTIY2piX + iivJCtnZkUJ/ZBilZRsWmZtF1otIm/bsLmGRRSGyjI06h0V2D/0xVa4Do9VR7WUFvAk6DqbDL2EBBEMB + /eHS0m29Wh7mJiNGK0PNrOicwdDGPJBBvTchtZWsbKMs2+mP+Aw3i+w8i+yEsvMOssiyWGRbVFy0gHvM + s9zs7lR12dWqrxiuxjIW0eIQL4KNgRvgF/AGbIQsqKM/TnL2IWrk7zAbKxo9wbvPMnIbY4x3ULwZ7kw2 + YyLTzLAoJiUi+TwbtZtF1sTY7kYk0rNR83f9kf54iI16Ext1PLd9H0piBZySr3MEQa6Be+FlWAVxsA86 + tCikVwuD+7UwyBS1H/MIfN2rsvtUHzuki4lpYpEVs8ji2B+fscjeYmyfUU7+D7Wr4Fv0xyiV7vFCBAFf + K7BtGOdkgt0Jz8NCsGXIgVqycEwfBPfqvaC+QtdRu/bcX0fx0a4ebY6uVXD8bm1LimWRrWeRvUtZfoPI + vUrbeYOycscpN9+H/pDS0hBY4bCTYPvgCrgZHoFXYQ3sgEKo04chHWThCyROa/6WHi3Yckbvbzkl360n + tMRxWB+FNujjiDKaNIvRjVBQ/Fo5EuezyH7LIrsfkZsRmaTk7OFKzxATI5Xx6KeVUQNl8HOMIpAtw93w + IthmXA8xkEcWypGoIxPNen9rCyLNejewnvdVWrS1BIlspiaGiQlgYpaxyN7Q5tjnWWT3schuoSyTERnJ + NvXijjvwDOI6jsBaBPxDBhaSnx1H5/cI+BDMAVuKzyAUEpHIoh/yEMlHJBcyyEoChGtR8GYadQU7ZD4b + dS7Xnc0im0U2pikgbhKLbKTCUrwVmSjFRkiBkVIjDyXyRcAXgcVOL/k5RxPo23AHPApW4h1YCp/CZgjy + sMgRAOtgFUK+8CZyc5mUp9io9zG2t5GNa8nGeK2Pvkybor0UaINDAAI2uEcghAdRTxbCyIJtRsd4uA5s + Q9pMPAd2Ml4HKzN/kLfA9so8eAEeh3sQmkkmr5P/tqvIxmhWu48+2S59zl9MAhWbz1M3T8eXCNgsLKMP + /MPJgmPEQCkcU2EG2J54AB6DJ+EpsAvLfn4QfgpW1jbwtTAJxuhDxzDPjlnGH7Y6XFqDhH+gtJ//Ef5F + wLKSR3NbCn87EewFP6bCzzGFi1mRG8FuylvhtsH3NuD1YEt2Fdgpso08FLwQkD4I4nqwOo6R4x+eXfyX + 9W8FPBIIeHqCfrAXstkY2JJ2VU/gs71p2dOW6XLO0YM/Q1DPSre/Ky0JHciovd7La6QYxu2/ErB8VQ57 + Ec+SCvGmQYfQH9w1nTaQD0HtDWwwoJW2P/fVe37fk01Oe71Q9v1/FPifvqS/AYf7Iwy+Al2qAAAAAElF + TkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB98CGRcaEMyeEGUAAAPOSURBVFhH7ZNtbFNlFMef+zzt7avDmSlEcUt0 + ZBAILy74GjbAtivEjG1uCpQE9uLYZFuyLQUzpuKYM7FZ2Btr7719G223ZAviB5TwASWZGKMQMgRi9ANR + JirZpmBhHRv3ep7bpx0xxk9ojOkvOWl7znme//+ce4tSpEiR4r8IKV2LNx9rwO4fD5EzJ1oeqr0h6L74 + 6gD+4O0i3PCAnlvI+u4/lhWadde6yMXbIpZjElYm3PwV8GOUqgwHp1kOalGxQnMAIU7Ljt0faiz6slsC + ngEBZTouJFe9aCyLVzXmKQ//A8sr0CefbeOPQ4GP1xF6Pt9avLOyur24pLSSpZDFZtu6s6KyfVclREVV + +zbHjpacnGXPsPI8ix/WZd8SSJRerhqAuPy+4VOYkmMtqMZq3E5NJXpugwlfFX+QlVFHZ+8nwciQ0ujc + 62cp1ON2nw2GB5WByHwEwuG5/A0b2WCMoTpzb/JiCJjwzlPZxtWszMDcNy7DKK1Tg9Mip8REfAMKJghO + Cg3/HAgPKVtKSprVdoS0/iOh34PhiFK7p65zXV5emVuQrgxEIorrUNdp1hPnumfB+aQ4xIdNxn5WohAI + dRNPLzHkgrlZ2hcDAzMCktcvxc8h/SMLvaHhuwGYtl/yXurqO3y6p999BgzINHJylubR87trX++iGxF8 + /ov0d5JJ8cExOhW9+KagnViUzi96s5Ds+aUHj4FgNCrgnz5uJr4MM878aK9Jor0xiVPugAHLMu6FJ1c8 + uwEMyH64PAATB0LhZICBOa1Wm0F19rXsjwRhAx0u10lVOMGxpjRRNQDPta/c1Pj5W9qj9EVLbIQG/f6b + m1yvt5ttUUE7NSMhZVZCUZ5DaZbC7fW+yIjiDw1OPpG9ZM3izMzVjU6nhxrwDRwZZzK86A9cpY9kq8PR + ynJxlmfpl09LJDberbvgrV7gTIoLWIHp1U8aNDfezV/w1aQ5Z0QkH60jnfT87qYWjx8MdHb3jaoXAvv2 + tw5RMbfk/a5wS3Fd27vvHQdDMhia4nX6R1nbPK1FuoodeWbLpMf0bXLye8QTBuiWqgvSN3/ZZhLhmIGe + dfX6PgsMjij1jc0e+psCwl/Tt56unD73QCgie4MD11auWrWetfwVOt2vh8nVew38eQNgYK7WZnqVHVDZ + aC96xbLppfLHMrNWshSy2gscVru93AZhKSjYtSY31wpp+o/5ezQclzHaSoZBWE4IJ8Qn+sj3L68lNtb6 + z9JgI46bHjypbkPAd0+9QULwb0xn5X+HdDN+/Nw7mpHX8kkpS6VIkSLF/w2E/gDuigD6FZTLsQAAAABJ + RU5ErkJggg== + + + + + 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 + YII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB98CGgALBflGzYUAAAQzSURBVFhH7VTtb1NVGO9kGvEPMH7ZTBA1RNnW + 161sfe/GRIQEhEEI0YzBFoQAq6wwNncHI8s0uJeOuba3vadvczA311scW1vFgYQFBR3SORbJtkZNQI0j + Ecnieh+fc+mQgfGLfPBDf8mTc3LPc57f7zwvV5JCCimk8L/Bkr3PyVQRtVWJpgjnWWVhlTU7rLBmhWXW + rCG5NWdIIX6jZ9Qnq122Jnn10SC3XV1p5IsSaII+aBY0/QbBHCwWKoZ3CUWnXsX1LUHbbxT0vFmgPoag + qTd59dFA3b7CYuRXCsZQEeh4MxQE9cBedUP3xEk4MdEDbMwN2qARDHhGffS8qQ+vpS3NWLaYdZIGu9PV + crzTXnI3mkRyrKVtfaeTbZ03h8v9/rGW1t0Gkykj6bIQeSjAwBcK+lAhaIIGeD28CeK34rDz7G6Y/G0S + CkPFkN+vR3EmMKCPjjeKAtYWrn+BcIHbbs6TaG5ts96NJklzciTEEo/AejwJFxpLvLj3JpyEjBsNhodF + YAksNL1aJChAoshUBJouvwfnfjwPf8zehlOTA4CpF8XpQibQ8npRwL491asJ8c+5iG+u6mD1ahpLKpMv + dnKecSoAhVw4VMeUdLIuHxXgQqs/0rCL+i2Aqj3Xgq8TKAF9deyXMdh/4QCM//odlH62HT6+HgT7VRby + gzokN0IBrxMFtDV3HOCIX3AR7xySfYLmd7rJSSS/QwV0OJ1NNL7eZF6C5L+jn+Dw+WvptwVQ2lQWTdAo + 0BRfufktWM5XiSJGfrqIJZiC8uGdEJ+ZhnVDG5FcD/m8tk/ymCSNcF3+pABBTPlCS1RVH9pK47/y2pqX + UMAdNOFwY+NekfR+KEQBBtrtcPnG13Dky6Piq6UfKeHgSA0MTA2CI8aKzZiPAlbwmr5nlz3/hIfrukQ8 + AWA5z+gHrKvMQTzbMAM9SQGzGzZvVtD4NfWHS2n60WbfrKjQiqT3Y17ABmy+qVvTYhlGb1yBTZEt0DPR + C83ftMGZ+OfwzsX6ewK0q1Y+7SVdN2kG7CxnS4aS2DnSmRQwY9lv1VpraotZbD76elxHnsnMfCrp+jeU + tlwLjplAx6/72gkcQRfYRo/D8A/noP86D/u+eBtiP8fEKZgvQXnlHqWPdM8SEhCYhqM7aJzH0xctwj44 + i2RAS4BGe+FPnAK6/750W5lcJHwQKlueRRekTWiEVQNrYXomDoFrH4JrjANuzHNvJKlA2oQabMK6liad + j+s+zXGBgS1b38ihcTIyMp9EAV4kG6SG+9NYkt4OB1ttMpv/+R9AgRmopGMovhDHcN1gidgHjZeaoPGr + d6HsTDn+B3ACUKA+ZKbj2CtJT0/Dq/P2IP7t7GEsrX1RrfxUXaeI5jLSqILJjsiY5eEc5uVwtrhmRaRM + TlTOyKNKRhHNY5b7pRuTV1NIIYUUUvgPkEj+AsfZlR3W3/MiAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRYlAs0O7t0AAAYoSURBVFhH1ZcJTFRXFIbvm+3NMGzDIFhrjbam + tsFqRRTFfWmaqE0bte6CojTVukZjXULNwIBpZbWIGGutVavVBoWBGQGVGqOJNkU7xCVgXbCiouBuZZn3 + 97w3F2UoUmlt0v7Jn8db5n7/PecMM8P+k+r8mlrcX6pfdPCMaGn0AcU6y4GzakvhOWZxlDPLbzu7WTCJ + WRBJjhYsmK0haz3smiHO7yKqtXzp59PiRGMvu9PrIVnytEHKc2qlXKcg5Zzxkh6U5UqYrJYwhUmI0kiY + KUqI1jez4V5qH8ObfOnn096ffFfYnUbJUWqEpw2wl2phK2U4fHEAFC0JAQUAotRAtAjMMng62uCqifRd + yJf+a3XsqtE5nL5H/hzAi+B65JeqkUsBympS3QF2rgS1AYgUgJm6lgJImO1d1Emn0nBE64pZ6vUGwe96 + whsD6JDnZLA5Bdyrr3AHuOAEJlOAaeQZGoLqWwpRYw3Vv8oRrWvPUd8FFMDVHO7gu7dRgOKy7m54oxa8 + wttAVYiWq9AsBLXh+mTvjzji2TKZmdrhNBbYnSKVX69A3RZp9xpl97m/MJytjOVkri1zgYm8ClEqaoXW + 3Q45jOyZOgkxXrYAxlQc1bJmzGddHE6h2lEqEFRFUBXynbKZu/QEzz3FcPvhKU7mOl0MjCe4PAtTydPJ + kdxR5BmKq2JDWEeOalk7DrHoQidz7achc5AVMEEbwftOMhSd6QDJxcGNqq8HYryBcQSaQJarIc+F3Ba5 + Ku4gDdfGsmkc1ZJ8VCnHY/deu5UkVdWkoLI6BRU3k3GxKgm/3liL84rX4NqdXE5tpuPfA7ZEIP8LwL4W + KEgCipKBQynAj2nAwWSpeN683Yypn9GGiIkvs3UHrkcXX+ArvjjVkuMWHESo8fOretYnmBObacWmKSzd + 3sDS7Hh95zGcra5zv/ofqvzcHUzquwm9tPEI01vrQ4xzxnFiUwmCKsu+i2XkSezLfLD0PLAN+7Gx9Apf + 5u/ph80lGGxegzCdBf2M8YjwiZeGBiVulYFuLpdmwOhgITPvKttA8ExyBgVYZwNLy8GEwhI8qKUha4Me + 3H+MVdN3o7cmFn3F1YgwxmGQnxVDAhIwLDDhcpC+u5mj3dItzxhLAeqVAB4hcsFS9iH4mwM4VlnNl29d + J49exPtdU/A2W6XAB3jHYbC/FUPNCpyO1vpQ8+zRHK1I0G7M30oBJIHgst0hKEAGVSE9BywpG2PyT3BE + 61r8wXa8xZYjjHYfYbR4wJUAgVZpxEuJWZxN5e890qzKzLvcCPcIsZ5XIXkvvit7vnmwfVuCHmwl+upW + Y6BvHIYGWJ/A3bZKw9ollAcauvkpAcSlyWNo93WtBqCW3K97vjm4ffsRgeOV8rsDNIW7TW2o7Rkwc7gS + QJ+6dyoFuNe0Bc0DjMhrofySRNvN5iee+mTUVoRpqf8+cTR4nhWQW0C+Myh42VglgMAElX511ihqQxmF + cD2BN3k3fF1eyZfmunIZGNwLYPQvdmQ4cMPzfvbWkwjVrEZ/mv7BpqcBCOwaHpRwuk/g3JEKuqm04z/u + rM3Kz5bbQQMoKQHWkzcVwGP+c/YAwfRpJ8Mb3dELKLTxB4CqOw3ob0pEuFccBspvP7Oy67oR7RN3dfYd + /uwPJFWXEIOYmr2MAtxuDBGe/zNflrRkDqAhoEDWknX8qOJ/xy7mD9In8LvbEGawor9vvDQowHprSPBn + Cw2aIJGjWpWg+jRlKNtgd7JMhyvtUrWES+eBCPruJ+9WBhrI3txGfi5fl4O905sm8Sq2f1Uq9TRYXf38 + E0pC/GdF8LXboPciO7AtxdsqMtJrYRYkZXF5lzLQh+xH9udHX7J8XU+Wg3QSpYrEtMf92ydt9lYPCOIr + tl3efiZdrYHNhZrdhEhfveUdyzAZbGpi+Vy+Lt/3ouf07PpdE5vlzfRt+z3wLB3Rs3Da6Qmyi4CSB/yp + JbrfQGGOFhhZKH/pi9MiUR3oaqfNItDvCqw53MQeNbTTpsfoVCb+khevjipBUxkoRiFAqORQNzxAqLhk + FicFqAQ1f/TfVbaftgcC1YcJXkfHoh1+2rb99HoRijSo/e+200/8UFT78Ev/RzH2BzdjvMyix458AAAA + AElFTkSuQmCC + + + + + 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 + + + + 194, 22 + + + Canales &recientes + + + 191, 6 + + + &Seleccionar proveedor... + + + Ver &detalles técnicos... + + + 194, 22 + + + &Proveedor + + + 194, 22 + + + P&aquete + + + 191, 6 + + + 194, 22 + + + Configuración... + + + 194, 22 + + + Exportar información... + + + 191, 6 + + + 194, 22 + + + &Salir + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAe + vAAAHrwB7kRN9wAAAAd0SU1FB94KCRImFvvwwb8AAATLSURBVFhH7ZZLbFR1FMari04fM9N3i5sy1r5F + WtsK000TIJGFVrDUhVI3RlIopWnUkIq09DGdYiQkCJhYooiE4KsETZSgC0hRggqlEaFJNRZNExNhSpm2 + 87wzn9/5z53JZDKUGmNlwUl+ua9zzvf9H/fmJtyP+3GvRDJZR15aRERPdFU8RzwksIiInuiq2EKCxGcy + Gx1Go9GRlJzsMBgMjsREwqMhKUndS0lJcaSmpqock8mkMJqMjlRey7Nk5iQxV9Wq+kR1lFqpMZtNDtHR + 9URXRQsJ5ubkuOCfdgLeWWBuFsFZMsNzHuEiHiLP/EQjgSjkno9IjuSyHqyVetVDrlmrTTvzcnNdoqfr + qtANZLmZpEFFgPh15DwqNCf+mLiGH86fwfDZr3Fl9AKmHZN8ILnhCBJp5dMJ9/Bpebk5btHTdVUoA5kZ + 6TQwxypJ9hAX4S14Fb/98hNstm6sXfskqqtrsLyiUlFJrLW1eLHpBQx9cgx+l0OvkVrpIUg/6evSsrMy + 4xtITzO7OV00II7nOIgZMgvv3A0c3L8XNU+sQElJGQoLi1BVVYX16+opuhENz65HrXUlSkvLUVJahsYN + DRi99K3egzMf4KqCR+nL/jJQ0dN1VSgDaWaTm9NLA3QfLtRuo6+nS4nmL7Wg/umn8NGxwzj15RA+/GAQ + g+8ewMmh4xi9+B2+OfU5mpqeR2FRMapranDp+2G1XIoAByN9A04tIz1tPgO3aYDTJQVS6Hdi90AvHrZY + MNDfjSOHB/FMfb1agsrKx1FRySXg0Wq1or1tG8Z+/hHvHTqIgoICHNj3lhoA/GThBvQZUAZYSBN+901u + uquw23ux7LHlKC4uwUrrCrRubYatdydeaW/F6lWrUF6+DHV1dbh88RwmuUm9c3+FxCMGZGBOLT3dfDcD + +gxIoZjQ90PbthZYOBPdu3bgi5Mfo58bcsfr2/H+oXcwfm0E+/ftQVFhMTrf6GANN57sIfYI+qZFeAEG + 0qKWgCMPem+x+JZuYhZOvmpXRs5jwN6DCu780rLQpisrfxRr1qxWG+8qX8mpG9cjAwiwh6CWUzdw5yWI + MSCFmmcqZEKNwKXOGxsbkJ+fj62bN+HokUF0dLzKZSnGluaXQyOXGaPpcP2CDajXkAnhPSBTFxmBLIe8 + GRSY4Pdg+MxX+PT4Ua5/G/6cHMe5s6cxPjYSElejD9fKAGQJZA/I2zWjZWTcwYA441TTgHzRZBTyFlBY + 7QWeKwPycZHvhAetLZs5Exbs3TPAa6mhQHjtY2ulX6ivlpWZEd9AdnYmu3toQEKSOWVqSgURlmsRkZSA + +jJuf60dv45d1u+FTUhe7FdQnkl4NPnki56uq0IZWJKXyypNMuVDrhOIIqjfuxuSF10X/Szgf2hJXnwD + BkOi19bX6dtt79H6+7q0vp6dcbH1dqrndpuwS7PzvL+3S92Ply9I/psD0rfTZ0gyeEVP11WhDPwPRAw0 + E/lLwSIieqKrooJcIOOLiOiJbiTkB9G8ADLJUmKJg9zPIfHqYon8kP6TSCRvkwnyexyuk8+IkfzreIA8 + GMMj5CaJt6HCTJEiElsr/RYUkryJyEhOxHCayA+lfx7kueTF1ko/2XTSf96Qad5IWv8Dmoj0v1ciIeFv + t1cGwyjGjgUAAAAASUVORK5CYII= + + + + Editar la lista... + + + 264, 22 + + + &Favoritos + + + 261, 6 + + + 264, 22 + + + Ver canal de &TV + + + 264, 22 + + + Ver canal &usando... + + + 261, 6 + + + 264, 22 + + + &Configuración de visualización... + + + 264, 22 + + + &Editar la lista de canales... + + + 261, 6 + + + 264, 22 + + + Comprobar &disponibilidad... + + + 264, 22 + + + &Actualizar lista de canales... + + + 264, 22 + + + Ver &detalles técnicos... + + + 49, 20 + + + &Canal + + + 200, 22 + + + Grabar &canal... + + + 200, 22 + + + &Gestionar grabaciones... + + + 197, 6 + + + 200, 22 + + + &Reparar tareas... + + + 84, 20 + + + &Grabaciones + + + 239, 22 + + + 236, 6 + + + 239, 22 + + + &Ahora y a continuación... + + + 239, 22 + + + &Hoy... + + + 239, 22 + + + &Mañana / otros días... + + + 236, 6 + + + 239, 22 + + + A&nterior programa + + + 239, 22 + + + &Siguiente programa + + + 103, 20 + + + Guía &programas + + + 228, 22 + + + &Documentación + + + 228, 22 + + + &Página principal del proyecto + + + 228, 22 + + + Informar de un problema... + + + 225, 6 + + + 228, 22 + + + &Buscar actualizaciones... + + + 228, 22 + + + &Acerca de... + + + 53, 20 + + + Ay&uda + + + 436, 15 + + + (Nombre del SP) + + + 436, 15 + + + (Descripción del SP) + + + &Ver canal de TV + + + &Grabar canal + + + Ver con &reproductor... + + + 238, 22 + + + Copiar la URL de ubicación + + + 238, 22 + + + Copiar datos del canal + + + 238, 22 + + + Copiar todos los canales + + + 235, 6 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAACPklE + QVQ4T6WS70uTURTH9y/03jdBL3prU2O4FqvBU66hLB2GFtKvJ9Isfy3TJEXLVHT5A7QVLp20Wk3CiUb+ + AH8gJmIsJSs1l7TEoabYRDD4ds99dI9Le1MHzvPi3OfzufeeexQA/iv5p7MjAEp32xpaXat45lhGc5Mf + j6zzqKv9BkuVF/dLZ1BU+Bn5eR+Qkz2OG9c9DN0SENjbA9TWbFDxr7G+sQl9Yi/OJL7iyUISuF6ucEF5 + 2Q8q7hkE+5fXcdT4GkqlCFOCk8qSwPF0iQuKCr9TcVdsw198K4gwuJF3axanjS20JAlsjQtccNM8TcWQ + 2Am/n/LjoOBCZsYk4mJttCwJGup9XJB+bZyKwfgTHvL4EKZ1QBRHYTBY6RdJUFM9xwXi5VEq8tgL7hn5 + in3RTUg+24+YmDr6TRJUlM+iuwvsKYGUC29hOjfIu00NozvTsWlnCe5DvOkNBMEiC0qKp9DuBpsBoMX+ + i737T5TeW+RNpYbRndNSPUH4VFwbdLoyWXA7fxLO58AT2yYbnAD0SRkhaTxvRtLVAgmOZfBJJ7TaYllg + zplgMFD9IMB3JkjBliLUAsY+LWBiZhFi9l0c17dyWH3MDo2mQBbQWFofInhsEhB8JbcSH71L8M6vIuuO + BZFaO4ObEXnkMdTRubIgLfUdu/cahw/onNh/SMCL9gG4u4bQ3TeCweExnDCYoNQ0IorB4aoGqFSZIYL4 + SxcH+HjShNGQ0DvTU1G3qWF0Z9qVkuDDUemy4N8Tit/kKu4LI/ykxwAAAABJRU5ErkJggg== + + + + 238, 22 + + + Exportar lista en archivo .m3u... + + + &Copiar + + + Gra&bar... + + + &Ver canal... + + + Lista de canales - IPTViewr + \ No newline at end of file diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx index 2286fe4a..8445c07f 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx @@ -112,28 +112,64 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 - + 48, 48 - + 200, 17 32, 32 - + 353, 17 - + + 0, 0 + + + 724, 24 + + + + 0 + + + menuStripMain + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + 65, 20 + + + &IPTViewr + + + 160, 22 + + + Recent channels + + + False + False @@ -605,21 +641,18 @@ Recent[9] - - 160, 22 - - - Recent channels - - - False - 157, 6 False + + 160, 22 + + + &Provider + 200, 22 @@ -632,11 +665,14 @@ Show technical details... - + 160, 22 - - &Provider + + P&ackage + + + False False @@ -656,15 +692,6 @@ Manage packages... - - 160, 22 - - - P&ackage - - - False - 157, 6 @@ -698,11 +725,20 @@ Exit - - 65, 20 + + 63, 20 - - &IPTViewr + + &Channel + + + 225, 22 + + + &Favorites + + + False False @@ -734,7 +770,7 @@ t1cGwyjGjgUAAAAASUVORK5CYII= - + Ctrl+1 @@ -1113,15 +1149,6 @@ Edit list... - - 225, 22 - - - &Favorites - - - False - 222, 6 @@ -1188,11 +1215,11 @@ Show technical &details... - - 63, 20 + + 78, 20 - - &Channel + + &Recordings 185, 22 @@ -1230,11 +1257,11 @@ False - - 78, 20 + + 40, 20 - - &Recordings + + &EPG F6 @@ -1245,9 +1272,15 @@ Current programming... + + False + 252, 6 + + False + 255, 22 @@ -1263,6 +1296,9 @@ &Today... + + False + Shift+F7 @@ -1272,6 +1308,9 @@ T&omorrow / other days... + + False + 252, 6 @@ -1293,23 +1332,11 @@ &Next program - - 252, 6 - - - 255, 22 - - - &Refresh... - - - 40, 20 - - - &EPG + + 44, 20 - - False + + &Help F1 @@ -1350,33 +1377,6 @@ &About... - - 44, 20 - - - &Help - - - 0, 0 - - - 724, 24 - - - 0 - - - menuStripMain - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - Top, Left, Right @@ -1402,13 +1402,13 @@ labelProviderName - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 7 + 4 Top, Left, Right @@ -1435,17 +1435,26 @@ labelProviderDescription - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 6 + 3 - + 673, 17 + + 219, 148 + + + contextMenuList + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 218, 22 @@ -1476,6 +1485,12 @@ 215, 6 + + 218, 22 + + + &Copy + 188, 22 @@ -1519,64 +1534,13 @@ Save list as .m3u file... - - 218, 22 - - - &Copy - 218, 22 (Placeholder for properties) - - 219, 148 - - - contextMenuList - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom, Left - - - NoControl - - - 42, 386 - - - 433, 24 - - - 6 - - - (Notification area) - - - MiddleLeft - - - False - - - labelNotification - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - + 488, 17 @@ -1586,7 +1550,7 @@ 12, 66 - 700, 282 + 700, 283 3 @@ -1601,145 +1565,82 @@ $this - 1 - - - Bottom, Left + 2 - + NoControl - - 12, 386 + + 12, 27 - - 24, 24 + + 32, 32 - + CenterImage - - 19 - - - False - - - pictureNotificationIcon - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Bottom, Right - - - NoControl - - - 612, 354 - - - 100, 25 - - - 7 - - - Rec&ord... - - - MiddleRight - - - ImageBeforeText + + 12 - - buttonRecordChannel + + pictureProviderLogo - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 4 - - - Bottom, Right - - - NoControl - - - 612, 386 - - - 100, 25 + + 5 - - 8 + + 815, 17 + + + 0, 419 - - &Show... + + 724, 22 - - MiddleRight + + 20 - - ImageBeforeText + + statusStrip1 - - buttonDisplayChannel + + statusMainStrip - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 5 - - - NoControl - - - 12, 27 - - - 32, 32 - - - CenterImage + + 1 - - 12 + + False - - pictureProviderLogo + + MiddleLeft - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 709, 17 - - $this + + statusLabelMain - - 8 + + MiddleLeft - + True - 724, 422 + 724, 441 Channel list - IPTViewr @@ -1748,529 +1649,523 @@ imageListChannelsLarge - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 imageListChannels - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbIpTv - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent0 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent1 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent2 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent3 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent4 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent5 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent6 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent7 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent8 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbRecent9 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorDvb1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbProvider - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemProviderSelect - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemProviderDetails - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbPackages - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemPackagesSelect - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemPackagesManage - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorDvb2 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbSettings - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbExport - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorDvb3 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemDvbExit - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannel - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites0 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites1 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites2 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites3 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites4 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites5 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites6 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites7 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites8 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavorites9 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavoritesSeparator1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavoritesAdd - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelFavoritesEdit - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorChannel1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelShow - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelShowWith - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorChannel2 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelListView - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelEditList - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorChannel3 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelVerify - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelRefreshList - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemChannelDetails - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemRecordings - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemRecordingsRecord - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemRecordingsManage - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorRecordings1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemRecordingsRepair - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpg - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpgBasicGrid - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorEpg1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpgNow - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpgToday - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpgTomorrow - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorEpg2 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpgPrevious - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemEpgNext - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - separatorEpg3 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemEpgRefresh - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemHelp - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemHelpDocumentation - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemHelpHomePage - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemHelpReportIssue - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorHelp1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemHelpCheckUpdates - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuItemHelpAbout - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListShow - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListRecord - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListShowWith - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorContextList1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListMode - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorContextList2 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListCopy - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListCopyURL - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListCopyRow - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListCopyAll - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 separatorContextList3 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListExportM3u - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 contextMenuListProperties - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 timerDismissNotification - System.Windows.Forms.Timer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + statusLabelMain + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ChannelListForm From 96b96bc532f86442924964d16cb887086a4c2fb9 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Fri, 2 Sep 2016 11:11:47 +0200 Subject: [PATCH 35/76] Bug corrections --- .../Services.EpgDiscovery/EpgProgram.cs | 22 ++- .../Properties/RecordChannel.Designer.cs | 11 +- .../Properties/RecordChannel.es.resx | 3 + .../Properties/RecordChannel.resx | 5 +- .../UiServices.Record/RecordHelper.cs | 2 +- .../UiServices.Record/RecordProgramOptions.cs | 77 ++++++---- .../RecordProgramOptions.resx | 133 +++++------------- 7 files changed, 123 insertions(+), 130 deletions(-) diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs index bf8a02ca..8733cf2c 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs @@ -97,12 +97,32 @@ public bool IsCurrent(DateTime referenceTime) { if (referenceTime.Kind != DateTimeKind.Utc) { - referenceTime = referenceTime.ToLocalTime(); + referenceTime = referenceTime.ToUniversalTime(); } // if return (referenceTime >= UtcStartTime) && (referenceTime < UtcEndTime); } // IsCurrent + public bool IsOld(DateTime referenceTime) + { + if (referenceTime.Kind != DateTimeKind.Utc) + { + referenceTime = referenceTime.ToUniversalTime(); + } // if + + return (referenceTime >= UtcEndTime); + } // IsOld + + public bool IsAfter(DateTime referenceTime) + { + if (referenceTime.Kind != DateTimeKind.Utc) + { + referenceTime = referenceTime.ToUniversalTime(); + } // if + + return (referenceTime < UtcStartTime); + } // IsAfter + public static EpgProgram FromScheduleEvent(TvAnytime.TvaScheduleEvent item) { if (item == null) return null; diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs index a3df1e8e..611f3e60 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs @@ -169,7 +169,16 @@ internal static string SelectedProgramIsNullOrBlank { } /// - /// Looks up a localized string similar to The program has already begun. It will be recorded from now.. + /// Looks up a localized string similar to The selected program has ended and can't be recorded.. + /// + internal static string SelectedProgramIsOld { + get { + return ResourceManager.GetString("SelectedProgramIsOld", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The program has already begun. It will be recorded as soon as possible.. /// internal static string SelectedProgramIsRightNow { get { diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx index f90c9126..9006d492 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx @@ -148,6 +148,9 @@ Por favor seleccione una ubicación o seleccione una carpeta. No se seleccionado ningún programa o la información es insuficiente. + + El programa seleccionado ya ha finalizado y no puede ser grabado. + El programa ya ha comenzado. Se grabará a partir de ahora. diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx index 374c1532..acfb33c3 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx @@ -160,8 +160,11 @@ Please select one or browse for a folder. No program has been selected or there is insufficient information. + + The selected program has ended and can't be recorded. + - The program has already begun. It will be recorded from now. + The program has already begun. It will be recorded as soon as possible. <No folder> diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs index 83cfdd2a..61f77f00 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs @@ -44,7 +44,7 @@ public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService se using (var dlg = new RecordChannelDialog()) { dlg.Task = task; - dlg.IsNewTask = false; + dlg.IsNewTask = true; dlg.ShowDialog(ownerForm); task = dlg.Task; if (dlg.DialogResult != DialogResult.OK) return false; diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs index b5d5c327..ca91a482 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs @@ -60,43 +60,48 @@ public bool AllowRecordChannel private void RecordProgramOptions_Load(object sender, EventArgs e) { - pictureChannelLogo.Image = SelectedService.Logo.GetImage(Configuration.Logos.LogoSize.Size48); - labelChannelName.Text = string.Format("{0} {1}", SelectedService.DisplayLogicalNumber, SelectedService.DisplayName); + // logo, channel name and program data + SetChannelDetails(); - if ((SelectedProgram == null) || (SelectedProgram.IsBlank)) + // info text + var validProgram = (SelectedProgram != null) && (!SelectedProgram.IsBlank); + if (!validProgram) { - labelProgramDescription.Visible = false; - labelProgramSchedule.Visible = false; - pictureIconInfo.Image = Properties.Resources.Status_Warning_16x16; labelInfo.Text = Properties.RecordChannel.SelectedProgramIsNullOrBlank; - - radioRecordProgramDefault.Enabled = false; - radioRecordProgramEdit.Enabled = false; - - if (AllowRecordChannel) - { - radioRecordChannel.Checked = true; - } - else - { - radioRecordChannel.Enabled = false; - buttonOk.Enabled = false; - } // if-else } else { - labelProgramDescription.Text = SelectedProgram.Title; - labelProgramSchedule.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(SelectedProgram.LocalStartTime, SelectedProgram.LocalEndTime, LocalReferenceTime), - FormatString.TimeSpanTotalMinutes(SelectedProgram.Duration, FormatString.Format.Extended)); - - if (SelectedProgram.IsCurrent(LocalReferenceTime)) + if (SelectedProgram.IsOld(LocalReferenceTime)) + { + pictureIconInfo.Image = Properties.Resources.Status_Info_16x16; + labelInfo.Text = Properties.RecordChannel.SelectedProgramIsOld; + validProgram = false; + } + else if (SelectedProgram.IsCurrent(LocalReferenceTime)) { pictureIconInfo.Image = Properties.Resources.Status_Info_16x16; labelInfo.Text = Properties.RecordChannel.SelectedProgramIsRightNow; - } // if + } // if-else if + } // if-else + + // radio buttons + radioRecordChannel.Enabled = AllowRecordChannel; + radioRecordProgramDefault.Enabled = validProgram; + radioRecordProgramEdit.Enabled = validProgram; + // check radio + if (radioRecordProgramDefault.Enabled) + { radioRecordProgramDefault.Checked = true; + } + else if (radioRecordChannel.Enabled) + { + radioRecordChannel.Checked = true; + } + else + { + buttonOk.Enabled = false; } // if-else } // RecordProgramOptions_Load @@ -130,5 +135,27 @@ private void ChangeOkButtonText(bool withOptions) { buttonOk.Text = withOptions ? Properties.RecordChannel.RecordButtonSettings : Properties.RecordChannel.RecordButtonDefault; } // ChangeOkButtonText + + private void SetChannelDetails() + { + pictureChannelLogo.Image = SelectedService.Logo.GetImage(Configuration.Logos.LogoSize.Size64); + labelChannelName.Text = string.Format("{0} {1}", SelectedService.DisplayLogicalNumber, SelectedService.DisplayName); + + if (SelectedProgram != null) + { + labelProgramDescription.Text = SelectedProgram.Title; + labelProgramSchedule.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(SelectedProgram.LocalStartTime, SelectedProgram.LocalEndTime, LocalReferenceTime), + FormatString.TimeSpanTotalMinutes(SelectedProgram.Duration, FormatString.Format.Extended)); + } + else + { + labelChannelName.Top = pictureChannelLogo.Top; + labelChannelName.Height = pictureChannelLogo.Height; + + labelProgramDescription.Visible = false; + labelProgramSchedule.Visible = false; + + } // if-else + } // SetChannelDetails } // class RecordProgramOptions } // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx index b5ce7011..323c98a4 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx @@ -123,7 +123,7 @@ - Segoe UI, 9.75pt + Segoe UI, 9.75pt, style=Bold NoControl @@ -169,7 +169,7 @@ 82, 12 - 370, 25 + 370, 22 5 @@ -177,6 +177,9 @@ (Channel name) + + MiddleLeft + labelChannelName @@ -220,7 +223,7 @@ Top, Left, Right - Segoe UI, 9.75pt + Segoe UI, 9.75pt, style=Italic NoControl @@ -255,102 +258,6 @@ Top, Left, Right - - pictureIconRec - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - labelInfo - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - pictureIconInfo - - - IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - - groupBox1 - - - 2 - - - radioRecordChannel - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - radioRecordProgramEdit - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - radioRecordProgramDefault - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - - - 12, 91 - - - 440, 115 - - - 8 - - - Recording options - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - 6, 19 @@ -379,7 +286,7 @@ Top, Left, Right - 74, 65 + 49, 65 360, 16 @@ -406,7 +313,7 @@ 1 - 52, 65 + 30, 65 16, 16 @@ -510,6 +417,30 @@ 5 + + 12, 91 + + + 440, 115 + + + 8 + + + Recording options + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + Bottom, Right From 86dcdb439553921852beab3ef3ba24fe57e9c07d Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Fri, 2 Sep 2016 13:32:34 +0200 Subject: [PATCH 36/76] BackgroundWorkerDialog --- .../Forms/BackgroundWorkerDialog.Designer.cs | 1 - .../Forms/BackgroundWorkerDialog.cs | 5 +-- .../Forms/BackgroundWorkerDialog.resx | 35 +++++++++---------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs index ec4bf756..b66a6c90 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs @@ -98,7 +98,6 @@ private void InitializeComponent() this.MinimizeBox = false; this.Name = "BackgroundWorkerDialog"; this.ShowInTaskbar = false; - this.TopMost = true; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BackgroundWorkerDialog_FormClosing); this.Load += new System.EventHandler(this.BackgroundWorkerDialog_Load); this.Shown += new System.EventHandler(this.BackgroundWorkerDialog_Shown); diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs index e8e4425b..474e62b6 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs @@ -124,8 +124,8 @@ void Worker_DoWork(object sender, DoWorkEventArgs e) } // if Options.BackgroundBeforeTask?.Invoke(Options, this); - if (Options.BackgroundTask != null) Options.BackgroundTask(Options, this); - if (Options.BackgroundAfterTask != null) Options.BackgroundAfterTask(Options, this); + Options.BackgroundTask?.Invoke(Options, this); + Options.BackgroundAfterTask?.Invoke(Options, this); } // Worker_DoWork void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) @@ -255,6 +255,7 @@ bool IBackgroundWorkerDialog.QueryCancel() private void SetProgressText(string text) { labelProgressText.Text = text; + labelProgressText.Refresh(); } // SetProgressText private void SetProgressMinMax(int min, int max) diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx index 58cf55b8..42ce2422 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx @@ -112,23 +112,23 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 12, 12 64, 64 - + CenterImage - + 0 @@ -136,7 +136,7 @@ pictureWaitIcon - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -163,7 +163,7 @@ labelTaskDescription - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -184,7 +184,7 @@ progressBar - System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -211,7 +211,7 @@ labelProgressText - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -221,11 +221,10 @@ - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAACOSURBVDhPpZLBCcAgDEUdwZncwm3cycF685r6DlLbJEXb - Dx8kJu9HMIjIL5vFHZvFHV8HR6212H10y+SyAyi1VkkpSc6ZYWBxCUAjAwwCAASQu1WAmc6dAtDcPd44 - ms10ZAHUul46UgBEwjzkpSMPcNvCS0cmAJE0tvDS0Rvg+XFUOlKArzaLOzaL65ZwAtqVazMG1dGuAAAA - AElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAI5JREFUOE+lksEJwCAMRR3BmdzCbdzJwXrzmvoOUtskRdsPHyQm70cwiMgvm8Ud + m8UdXwdHrbXYfXTL5LIDKLVWSSlJzplhYHEJQCMDDAIABJC7VYCZzp0C0Nw93jiazXRkAdS6XjpSAETC + POSlIw9w28JLRyYAkTS28NLRG+D5cVQ6UoCvNos7NovrlnAC2pVrMwbV0a4AAAAASUVORK5CYII= @@ -256,7 +255,7 @@ buttonClose - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -300,7 +299,7 @@ buttonRequestCancel - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -308,7 +307,7 @@ 1 - + True @@ -327,6 +326,6 @@ BackgroundWorkerDialog - IpTviewr.UiServices.Controls.CommonBaseForm, UiServices.Controls, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file From 1364ca86024659e7ca68ef75ef3590285e9d168d Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 3 Sep 2016 12:23:41 +0200 Subject: [PATCH 37/76] Added CommonBaseUserControl Mimics CommonBaseForm methods for user controls: exception handling, SafeCall --- .../Controls/CommonBaseUserControl.cs | 144 ++++++++++++++++++ .../UiServices.Common.csproj | 3 + 2 files changed, 147 insertions(+) create mode 100644 1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs new file mode 100644 index 00000000..14602a30 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs @@ -0,0 +1,144 @@ +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Forms; +using Microsoft.SqlServer.MessageBox; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + public class CommonBaseUserControl: UserControl + { + #region Exceptions + + public Action GetExceptionHandler() + { + return HandleException; + } // GetExceptionHandler + + protected bool HandleMyOwnExceptions + { + get; + set; + } // HandleMyOwnExceptions + + /// + /// Provides an unified way of handling exceptions. + /// + /// The data about the exception, including additional information for the user, such a caption or a text + /// If a parent CommonForm exists, the exception will be passed along. + /// If no parent is found, the virtual method ExceptionHandler will be called + protected void HandleException(ExceptionEventData ex) + { + HandleOwnedFormException(ex); + } // HandleException + + private void HandleOwnedFormException(ExceptionEventData ex) + { + if (!HandleMyOwnExceptions) + { + var parent = ParentForm as CommonBaseForm; + if (parent != null) + { + parent.GetExceptionHandler().Invoke(ex); + } // if + } // if + + ExceptionHandler(ex); + } // HandleOwnedFormException + + /// + /// Exception handler. + /// By default displays an ExceptionMessageBox. Descendants are encouraged to provide their own implementation. + /// + /// The data about the exception, including additional information for the user, such a caption or a text + /// Descendants who override this method MUST NOT call base.ExceptionHandler. + /// This method MUST NOT be called directly. To handle and exception, HandleException MUST be used instead. + /// + protected virtual void ExceptionHandler(ExceptionEventData ex) + { + BasicGoogleTelemetry.SendExtendedExceptionHit(ex.Exception, true, ex.Message, this.GetType().Name); + + var box = new ExceptionMessageBox() + { + Caption = Properties.CommonForm.UncaughtExceptionCaption, + Buttons = ExceptionMessageBoxButtons.OK, + Symbol = ExceptionMessageBoxSymbol.Stop, + }; + + if (ex.Message == null) + { + box.Text = ex.Exception.Message; + box.Message = ex.Exception; + } + else + { + box.Text = ex.Message; + box.InnerException = ex.Exception; + } // if-else + + box.Show(ParentForm); + } // ExceptionHandler + +#endregion + + #region 'Safe' functions + + protected void SafeDispose(IDisposable disposable) + { + if (disposable == null) return; + disposable.Dispose(); + } // SafeDispose + + protected bool SafeCall(Action implementation) + { + try + { + implementation(); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action implementation, T arg) + { + try + { + implementation(arg); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action implementation, T1 arg1, T2 arg2) + { + try + { + implementation(arg1, arg2); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + #endregion + } // UserControl +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj index 7ad0f4ed..251aa3c5 100644 --- a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj +++ b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj @@ -54,6 +54,9 @@ Properties\AssemblySolutionInfo.cs + + UserControl + True True From e65b7267eea66aca26cd7944453e8d150ef87acf Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 3 Sep 2016 12:24:31 +0200 Subject: [PATCH 38/76] EpgMemoryDatastore.GetAllPrograms --- .../Services.EpgDiscovery/EpgMemoryDatastore.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs index 5bde7725..54f3e372 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs @@ -44,12 +44,21 @@ public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localT public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) { - throw new NotImplementedException(); + var result = new Dictionary(Data.Count); + foreach(var entry in Data) + { + if (entry.Value.Programs.Count == 0) continue; + + result[entry.Key] = GetLinkedList(entry.Value, localTime); + } // foreach + + return result; } // GetAllPrograms protected override void AddEpgService(EpgService epgService) { Console.WriteLine("Store.Add: {0} with {1} programs", epgService.ServiceIdReference, epgService.Programs?.Count); + if (epgService.Programs == null) return; switch (StorageMethod) { From 9881b185abdcd136a351760905ecbf1a5ec4681e Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 3 Sep 2016 12:55:46 +0200 Subject: [PATCH 39/76] IpTvProvider: re-added EPG code --- .../Core.IpTvProvider.csproj | 7 ++ .../EPG/EpgInfoProviderCapabilities.cs | 28 ++++---- .../Core.IpTvProvider/EPG/IEpgInfoProvider.cs | 40 +++++------ .../Core.IpTvProvider/EPG/ProgramEpgInfo.cs | 67 ++++++++++--------- .../Core.IpTvProvider/IpTvProvider.cs | 2 - 5 files changed, 76 insertions(+), 68 deletions(-) diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj index e153ef51..258a0910 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj @@ -54,6 +54,9 @@ Properties\AssemblySolutionInfo.cs + + + @@ -81,6 +84,10 @@ {8986cd52-0c65-42d6-9c47-20ff47cf87bb} Project.Native + + {5a171dbb-855c-452b-93c6-229c7aa6c7a6} + Services.EpgDiscovery + {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs index 934b4a97..d7b5c6ea 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs @@ -1,14 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Core.IpTvProvider.EPG -{ - [Flags] - public enum EpgInfoProviderCapabilities - { - ExtendedInfo = 0x01, - IndependentProgramThumbnail = 0x02 - } // enum EpgInfoProviderCapabilities -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Core.IpTvProvider.EPG +{ + [Flags] + public enum EpgInfoProviderCapabilities + { + ExtendedInfo = 0x01, + IndependentProgramThumbnail = 0x02 + } // enum EpgInfoProviderCapabilities +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs index 22efca38..97311638 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs @@ -1,19 +1,21 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.Core.IpTvProvider.EPG -{ - public interface IEpgInfoProvider - { - EpgInfoProviderCapabilities Capabilities { get; } - ExtendedEpgEvent GetEpgInfo(UiBroadcastService service, EpgEvent epgEvent, bool portrait); - string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgEvent epgEvent, bool portrait); - } // interface IEpgInfoProvider -} // namespace +// Copyright (C) 2015, Codeplex user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IpTviewr.UiServices.Discovery; +using IpTviewr.Services.EpgDiscovery; + +namespace IpTviewr.Core.IpTvProvider.EPG +{ + public interface IEpgInfoProvider + { + EpgInfoProviderCapabilities Capabilities { get; } + + EpgProgramExtended GetEpgInfo(UiBroadcastService service, EpgProgram epgEvent, bool portrait); + + string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgProgram epgEvent, bool portrait); + } // interface IEpgInfoProvider +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs index 2b2460ae..1e587fb6 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs @@ -1,33 +1,34 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.Core.IpTvProvider.EPG -{ - public class ProgramEpgInfo - { - public UiBroadcastService Service - { - get; - set; - } // Service - - public EpgEvent Base - { - get; - set; - } // Base - - public ExtendedEpgEvent Extended - { - get; - set; - } // Extended - } // ProgramEpgInfo -} // namespace +// Copyright (C) 2015, Codeplex user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IpTviewr. +using IpTviewr.UiServices.Discovery; +using IpTviewr.Services.EpgDiscovery; + +namespace IpTviewr.Core.IpTvProvider.EPG +{ + public class ProgramEpgInfo + { + public UiBroadcastService Service + { + get; + set; + } // Service + + public EpgProgram Base + { + get; + set; + } // Base + + public EpgProgramExtended Extended + { + get; + set; + } // Extended + } // ProgramEpgInfo +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs index 912e089e..3cefea06 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs @@ -25,13 +25,11 @@ public static IpTvProvider Current #region IpTvProvider Members - /* public EPG.IEpgInfoProvider EpgInfo { get; protected set; } // EpgInfo - */ public abstract InitializationResult Initialize(); From 9cf540236df0feef4ee59dbdf59fd0d654313564 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 3 Sep 2016 12:56:35 +0200 Subject: [PATCH 40/76] Revert "IpTvProvider: re-added EPG code" This reverts commit 9881b185abdcd136a351760905ecbf1a5ec4681e. --- .../Core.IpTvProvider.csproj | 7 -- .../EPG/EpgInfoProviderCapabilities.cs | 28 ++++---- .../Core.IpTvProvider/EPG/IEpgInfoProvider.cs | 40 ++++++----- .../Core.IpTvProvider/EPG/ProgramEpgInfo.cs | 67 +++++++++---------- .../Core.IpTvProvider/IpTvProvider.cs | 2 + 5 files changed, 68 insertions(+), 76 deletions(-) diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj index 258a0910..e153ef51 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj @@ -54,9 +54,6 @@ Properties\AssemblySolutionInfo.cs - - - @@ -84,10 +81,6 @@ {8986cd52-0c65-42d6-9c47-20ff47cf87bb} Project.Native - - {5a171dbb-855c-452b-93c6-229c7aa6c7a6} - Services.EpgDiscovery - {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs index d7b5c6ea..934b4a97 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs @@ -1,14 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Core.IpTvProvider.EPG -{ - [Flags] - public enum EpgInfoProviderCapabilities - { - ExtendedInfo = 0x01, - IndependentProgramThumbnail = 0x02 - } // enum EpgInfoProviderCapabilities -} // namespace +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Project.IpTv.Core.IpTvProvider.EPG +{ + [Flags] + public enum EpgInfoProviderCapabilities + { + ExtendedInfo = 0x01, + IndependentProgramThumbnail = 0x02 + } // enum EpgInfoProviderCapabilities +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs index 97311638..22efca38 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs @@ -1,21 +1,19 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using IpTviewr.UiServices.Discovery; -using IpTviewr.Services.EpgDiscovery; - -namespace IpTviewr.Core.IpTvProvider.EPG -{ - public interface IEpgInfoProvider - { - EpgInfoProviderCapabilities Capabilities { get; } - - EpgProgramExtended GetEpgInfo(UiBroadcastService service, EpgProgram epgEvent, bool portrait); - - string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgProgram epgEvent, bool portrait); - } // interface IEpgInfoProvider -} // namespace +// Copyright (C) 2015, Codeplex user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Project.IpTv.Services.EPG; +using Project.IpTv.UiServices.Discovery; + +namespace Project.IpTv.Core.IpTvProvider.EPG +{ + public interface IEpgInfoProvider + { + EpgInfoProviderCapabilities Capabilities { get; } + ExtendedEpgEvent GetEpgInfo(UiBroadcastService service, EpgEvent epgEvent, bool portrait); + string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgEvent epgEvent, bool portrait); + } // interface IEpgInfoProvider +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs index 1e587fb6..2b2460ae 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs @@ -1,34 +1,33 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using IpTviewr. -using IpTviewr.UiServices.Discovery; -using IpTviewr.Services.EpgDiscovery; - -namespace IpTviewr.Core.IpTvProvider.EPG -{ - public class ProgramEpgInfo - { - public UiBroadcastService Service - { - get; - set; - } // Service - - public EpgProgram Base - { - get; - set; - } // Base - - public EpgProgramExtended Extended - { - get; - set; - } // Extended - } // ProgramEpgInfo -} // namespace +// Copyright (C) 2015, Codeplex user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Project.IpTv.Services.EPG; +using Project.IpTv.UiServices.Discovery; + +namespace Project.IpTv.Core.IpTvProvider.EPG +{ + public class ProgramEpgInfo + { + public UiBroadcastService Service + { + get; + set; + } // Service + + public EpgEvent Base + { + get; + set; + } // Base + + public ExtendedEpgEvent Extended + { + get; + set; + } // Extended + } // ProgramEpgInfo +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs index 3cefea06..912e089e 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs @@ -25,11 +25,13 @@ public static IpTvProvider Current #region IpTvProvider Members + /* public EPG.IEpgInfoProvider EpgInfo { get; protected set; } // EpgInfo + */ public abstract InitializationResult Initialize(); From 8928e8584d3595814f4b6d475a3706b077f74975 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 3 Sep 2016 13:03:32 +0200 Subject: [PATCH 41/76] IpTvProvider: re-added EPG code Previous commit had compile errors --- .../Core.IpTvProvider.csproj | 7 ++ .../EPG/EpgInfoProviderCapabilities.cs | 14 ---- .../EPG/EpgProviderCapabilities.cs | 14 ++++ .../Core.IpTvProvider/EPG/IEpgInfoProvider.cs | 40 +++++------ .../Core.IpTvProvider/EPG/ProgramEpgInfo.cs | 66 +++++++++---------- .../Core.IpTvProvider/IpTvProvider.cs | 2 - 6 files changed, 75 insertions(+), 68 deletions(-) delete mode 100644 1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs create mode 100644 1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj index e153ef51..b037897f 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj +++ b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj @@ -54,6 +54,9 @@ Properties\AssemblySolutionInfo.cs + + + @@ -81,6 +84,10 @@ {8986cd52-0c65-42d6-9c47-20ff47cf87bb} Project.Native + + {5A171DBB-855C-452B-93C6-229C7AA6C7A6} + Services.EpgDiscovery + {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs deleted file mode 100644 index 934b4a97..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgInfoProviderCapabilities.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.Core.IpTvProvider.EPG -{ - [Flags] - public enum EpgInfoProviderCapabilities - { - ExtendedInfo = 0x01, - IndependentProgramThumbnail = 0x02 - } // enum EpgInfoProviderCapabilities -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs new file mode 100644 index 00000000..6e1a184e --- /dev/null +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Core.IpTvProvider.EPG +{ + [Flags] + public enum EpgProviderCapabilities + { + ExtendedInfo = 0x01, + ProgramThumbnail = 0x02, + } // enum EpgProviderCapabilities +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs index 22efca38..3217668e 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs @@ -1,19 +1,21 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.Core.IpTvProvider.EPG -{ - public interface IEpgInfoProvider - { - EpgInfoProviderCapabilities Capabilities { get; } - ExtendedEpgEvent GetEpgInfo(UiBroadcastService service, EpgEvent epgEvent, bool portrait); - string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgEvent epgEvent, bool portrait); - } // interface IEpgInfoProvider -} // namespace +// Copyright (C) 2015, Codeplex user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Discovery; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace IpTviewr.Core.IpTvProvider.EPG +{ + public interface IEpgInfoProvider + { + EpgProviderCapabilities Capabilities { get; } + + //EpgProgramExtended GetEpgInfo(UiBroadcastService service, EpgProgram epgEvent, bool portrait); + + //string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgProgram epgEvent, bool portrait); + } // interface IEpgInfoProvider +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs index 2b2460ae..31522996 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs @@ -1,33 +1,33 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.Core.IpTvProvider.EPG -{ - public class ProgramEpgInfo - { - public UiBroadcastService Service - { - get; - set; - } // Service - - public EpgEvent Base - { - get; - set; - } // Base - - public ExtendedEpgEvent Extended - { - get; - set; - } // Extended - } // ProgramEpgInfo -} // namespace +// Copyright (C) 2015, Codeplex user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using IpTviewr.UiServices.Discovery; +using IpTviewr.Services.EpgDiscovery; + +namespace IpTviewr.Core.IpTvProvider.EPG +{ + public class ProgramEpgInfo + { + public UiBroadcastService Service + { + get; + set; + } // Service + + public EpgProgram Base + { + get; + set; + } // Base + + public EpgProgramExtended Extended + { + get; + set; + } // Extended + } // ProgramEpgInfo +} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs index 912e089e..3cefea06 100644 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs +++ b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs @@ -25,13 +25,11 @@ public static IpTvProvider Current #region IpTvProvider Members - /* public EPG.IEpgInfoProvider EpgInfo { get; protected set; } // EpgInfo - */ public abstract InitializationResult Initialize(); From 7e889593db82df4712c64b65f82235e61867b319 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sat, 3 Sep 2016 13:19:29 +0200 Subject: [PATCH 42/76] PictureBoxEx: added SetImage() --- .../Controls/PictureBoxEx.cs | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs index a04acde5..843168ae 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs @@ -17,13 +17,6 @@ namespace IpTviewr.UiServices.Common.Controls [ToolboxBitmap(typeof(PictureBox))] public class PictureBoxEx : PictureBox { - protected override void OnPaint(PaintEventArgs pe) - { - pe.Graphics.CompositingQuality = CompositingQuality.HighQuality; - pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; - base.OnPaint(pe); - } // OnPaint - public static Bitmap ToGrayscale(Image original) { // create the grayscale ColorMatrix @@ -54,5 +47,18 @@ public static Bitmap ToGrayscale(Image original) return greyscaleBitmap; } // ToGrayscale + + public void SetImage(Image image) + { + if (Image != null) Image.Dispose(); + Image = image; + } // SetImage + + protected override void OnPaint(PaintEventArgs pe) + { + pe.Graphics.CompositingQuality = CompositingQuality.HighQuality; + pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + base.OnPaint(pe); + } // OnPaint } // class PictureBoxEx } // namespace From 57f38db0e6d9f9632cffbf1923c38caf862554f6 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 4 Sep 2016 13:45:39 +0200 Subject: [PATCH 43/76] Added EpgSingleServiceDatastore --- .../EpgSingleServiceDatastore.cs | 43 +++++++++++++++++++ .../Services.EpgDiscovery.csproj | 1 + 2 files changed, 44 insertions(+) create mode 100644 1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs new file mode 100644 index 00000000..43a3b3bc --- /dev/null +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed class EpgSingleServiceDatastore: EpgDatastore + { + string FullServiceName; + IEpgLinkedList ServicePrograms; + + public EpgSingleServiceDatastore(string fullServiceName, IEpgLinkedList servicePrograms) + { + FullServiceName = fullServiceName; + ServicePrograms = servicePrograms; + } // constructor + + protected override void AddEpgService(EpgService epgService) + { + throw new InvalidOperationException(); + } // Add + + public override ICollection GetServicesRefs() + { + return new string[] { FullServiceName }; + } // GetServicesRefs + + public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localTime, int nodesBefore, int nodesAfter) + { + return ServicePrograms; + } // GetPrograms + + public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) + { + var result = new Dictionary(1); + result.Add(FullServiceName, ServicePrograms); + + return result; + } // GetAllPrograms + } // class EpgSingleServiceDatastore +} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj b/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj index 3138bb14..13204891 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj @@ -48,6 +48,7 @@ + From 999fddc99e08267e0d179309a9c4e00c738fa75a Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 4 Sep 2016 13:47:20 +0200 Subject: [PATCH 44/76] Added EpgProgramPictureBox --- .../UiServices.EPG/EpgProgramPictureBox.cs | 42 ++++++++++++++++++ .../Properties/Resources.Designer.cs | 20 +++++++++ .../UiServices.EPG/Properties/Resources.resx | 12 +++-- .../EpgLoadingProgramImageVertical.png | Bin 0 -> 5287 bytes .../Resources/EpgNoProgramImageVertical.png | Bin 0 -> 23602 bytes .../UiServices.EPG/UiServices.EPG.csproj | 5 +++ 6 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs create mode 100644 1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png create mode 100644 1.5 'Kruger 60'/UiServices.EPG/Resources/EpgNoProgramImageVertical.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs new file mode 100644 index 00000000..363b78bf --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs @@ -0,0 +1,42 @@ +using IpTviewr.Core.IpTvProvider; +using IpTviewr.Core.IpTvProvider.EPG; +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Common.Controls; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.EPG +{ + internal class EpgProgramPictureBox: PictureBoxEx + { + public void LoadProgramImageAsync(EpgProgram epgProgram, bool portrait) + { + if ((epgProgram == null)) // || (!IpTvProvider.Current.EpgInfo.Capabilities.HasFlag(EpgProviderCapabilities.ProgramThumbnail))) + { + OnProgramImageLoaded(null, portrait); + } + else + { + OnProgramImageLoaded(null, portrait); + // TODO: async load program image + } // if-else + } // LoadProgramImageAsync + + private void OnProgramImageLoaded(Image image, bool portrait) + { + if (image == null) + { + SetImage(portrait ? Properties.Resources.EpgNoProgramImageVertical : Properties.Resources.EpgNoProgramImage); + } + else + { + SetImage(image); + } // if-else + } // OnProgramImageLoaded + } // class EpgProgramPictureBox +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs index ec6a9259..03ff76af 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs @@ -90,6 +90,16 @@ internal static System.Drawing.Bitmap EpgLoadingProgramImage { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EpgLoadingProgramImageVertical { + get { + object obj = ResourceManager.GetObject("EpgLoadingProgramImageVertical", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -100,6 +110,16 @@ internal static System.Drawing.Bitmap EpgNoProgramImage { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EpgNoProgramImageVertical { + get { + object obj = ResourceManager.GetObject("EpgNoProgramImageVertical", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx index 46a440eb..faa59230 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ..\resources\action_epg_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -127,9 +127,15 @@ ..\Resources\epgloadingprogramimage.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\resources\epgloadingprogramimagevertical.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\epgnoprogramimage.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\resources\epgnoprogramimagevertical.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\resources\progressbarbase.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png b/1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5487cacdaaac008465d6ff7951d4604e2bbf23 GIT binary patch literal 5287 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 Tdoxww_+7bl{bJ<>eDwbSkWWvV literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj index 2f5c532d..f266918a 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj +++ b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj @@ -79,6 +79,9 @@ EpgMiniGuide.cs + + Component + Component @@ -180,7 +183,9 @@ + + From 0c194edf9da685dc73c19de928fb90fef2854fea Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 4 Sep 2016 13:49:02 +0200 Subject: [PATCH 45/76] EpgMiniGuide enhancements Also: renamed EpgMiniBar to EpgMiniGuide --- .../UiServices.EPG/EpgMiniGuide.Designer.cs | 5 +- .../UiServices.EPG/EpgMiniGuide.cs | 267 ++++++++++-------- .../UiServices.EPG/EpgMiniGuide.resx | 4 +- .../Properties/Texts.Designer.cs | 22 +- .../UiServices.EPG/Properties/Texts.es.resx | 6 + .../UiServices.EPG/Properties/Texts.resx | 10 +- 6 files changed, 192 insertions(+), 122 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs index 25395f5a..293f62d6 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs @@ -168,7 +168,6 @@ private void InitializeComponent() // // pictureChannelLogo // - this.pictureChannelLogo.BackColor = System.Drawing.Color.White; resources.ApplyResources(this.pictureChannelLogo, "pictureChannelLogo"); this.pictureChannelLogo.Name = "pictureChannelLogo"; this.pictureChannelLogo.TabStop = false; @@ -178,7 +177,7 @@ private void InitializeComponent() resources.ApplyResources(this.epgProgressBar, "epgProgressBar"); this.epgProgressBar.Name = "epgProgressBar"; // - // EpgMiniBar + // EpgMiniGuide // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; @@ -197,7 +196,7 @@ private void InitializeComponent() this.Controls.Add(this.buttonBack); this.Controls.Add(this.pictureChannelLogo); this.Controls.Add(this.labelFromTo); - this.Name = "EpgMiniBar"; + this.Name = "EpgMiniGuide"; ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).EndInit(); this.ResumeLayout(false); diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs index e2427113..740a6447 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs @@ -17,10 +17,11 @@ using IpTviewr.Core.IpTvProvider; using IpTviewr.Services.EpgDiscovery; using System.Threading; +using IpTviewr.UiServices.Common.Controls; namespace IpTviewr.UiServices.EPG { - public partial class EpgMiniGuide : UserControl + public partial class EpgMiniGuide : CommonBaseUserControl { private EpgProgram[] EpgPrograms; private int EpgIndex; @@ -111,18 +112,92 @@ public bool BasicGridEnabled #endregion Properties + #region Public static methods + + internal static DateTime TruncateToMinutes(DateTime time) + { + return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 + } // TruncateToMinutes + + #endregion + public EpgMiniGuide() { InitializeComponent(); AutoRefresh = true; } // constructor - #region Public static methods + #region Public methods - internal static DateTime TruncateToMinutes(DateTime time) + public void LoadEpgPrograms(UiBroadcastService service, DateTime localReferenceTime, EpgDatastore datastore, bool async = true) { - return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 - } // TruncateToMinutes + SelectedService = service; + LocalReferenceTime = TruncateToMinutes(localReferenceTime); + Datastore = datastore; + + // clean-up UI + ClearEpgPrograms(); + pictureChannelLogo.SetImage(service?.Logo.GetImage(Configuration.Logos.LogoSize.Size48)); + + BeginLoadEpgPrograms(async); + } // LoadEpgPrograms + + public void ClearEpgPrograms() + { + timerLoadingData.Enabled = false; + SetAutoRefreshTimer(false); + EpgPrograms = null; + EpgIndex = -1; + + pictureChannelLogo.SetImage(null); + + labelProgramTitle.Text = IsDisabled ? Properties.Texts.EpgNoInformation : null; + labelEllapsed.Text = null; + labelFromTo.Visible = false; + labelStartTime.Visible = false; + labelEndTime.Visible = false; + epgProgressBar.Visible = false; + + EnableBackForward(false, false); + buttonEpgGrid.Enabled = BasicGridEnabled; + buttonFullView.Enabled = false; + buttonDetails.Enabled = false; + + var enableButtons = (SelectedService != null) && (!SelectedService.IsHidden); + buttonDisplayChannel.Enabled = enableButtons; + buttonRecordChannel.Enabled = enableButtons; + } // ClearEpgPrograms + + public void RefreshEpgPrograms(DateTime localReferenceTime) + { + LocalReferenceTime = TruncateToMinutes(localReferenceTime); + BeginLoadEpgPrograms(true); + } // RefreshEpgPrograms + + public EpgProgram[] GetEpgPrograms() + { + if (EpgPrograms == null) return null; + + var result = new EpgProgram[EpgPrograms.Length]; + Array.Copy(EpgPrograms, result, EpgPrograms.Length); + + return result; + } // GetEpgPrograms + + public void GoTo(int epgIndex) + { + GoToNearestIndex(epgIndex); + } // GoTo + + public void GoBack() + { + DisplayEpgProgram(EpgIndex - 1); + } // GoBack + + public void GoForward() + { + DisplayEpgProgram(EpgIndex + 1); + } // GoFoward #endregion @@ -137,13 +212,7 @@ private void timerLoadingData_Tick(object sender, EventArgs e) private void timerAutoRefresh_Tick(object sender, EventArgs e) { - try - { - RefreshEpgPrograms(DateTime.Now); - } - catch - { - } // try-catch + SafeCall(RefreshEpgPrograms, DateTime.Now); } // timerAutoRefresh_Tick private void buttonBack_Click(object sender, EventArgs e) @@ -204,85 +273,18 @@ private void buttonRecordChannel_Click(object sender, EventArgs e) #endregion - #region Actions - - public void SetEpgPrograms(UiBroadcastService service, DateTime localReferenceTime, EpgDatastore datastore) - { - SelectedService = service; - LocalReferenceTime = TruncateToMinutes(localReferenceTime); - Datastore = datastore; + #region Auxiliary methods - // clean-up UI - ClearEpgPrograms(); - ReplaceChannelLogo(service?.Logo.GetImage(Configuration.Logos.LogoSize.Size48)); - - LoadEpgProgramsAsync(); - } // SetEpgPrograms - - public void ClearEpgPrograms() - { - timerLoadingData.Enabled = false; - SetAutoRefreshTimer(false); - EpgPrograms = null; - EpgIndex = -1; - - ReplaceChannelLogo(null); - - labelProgramTitle.Text = IsDisabled? Properties.Texts.EpgNoInformation : null; - labelEllapsed.Text = null; - labelFromTo.Visible = false; - labelStartTime.Visible = false; - labelEndTime.Visible = false; - epgProgressBar.Visible = false; - - EnableBackForward(false, false); - buttonEpgGrid.Enabled = BasicGridEnabled; - buttonFullView.Enabled = false; - buttonDetails.Enabled = false; - - var enableButtons = (SelectedService != null) && (!SelectedService.IsHidden); - buttonDisplayChannel.Enabled = enableButtons; - buttonRecordChannel.Enabled = enableButtons; - } // ClearEpgPrograms - - public void RefreshEpgPrograms(DateTime localReferenceTime) - { - LocalReferenceTime = TruncateToMinutes(localReferenceTime); - LoadEpgProgramsAsync(); - } // RefreshEpgPrograms - - public EpgProgram[] GetEpgPrograms() - { - if (EpgPrograms == null) return null; - - var result = new EpgProgram[EpgPrograms.Length]; - Array.Copy(EpgPrograms, result, EpgPrograms.Length); - - return result; - } // GetEpgPrograms - - public void GoBack() - { - DisplayEpgProgram(EpgIndex - 1); - } // GoBack - - public void GoForward() - { - DisplayEpgProgram(EpgIndex + 1); - } // GoFoward - - #endregion - - #region Auxuliary methods - - private void LoadEpgProgramsAsync() + private void BeginLoadEpgPrograms(bool async) { if (IsDisabled) return; - if (CurrentRequestId == int.MaxValue) CurrentRequestId = 0; - timerLoadingData.Enabled = false; - timerLoadingData.Enabled = true; + if (async) + { + timerLoadingData.Enabled = false; + timerLoadingData.Enabled = true; + } // if // TODO: do NOT assume .imagenio.es var fullServiceName = SelectedService.ServiceName + ".imagenio.es"; @@ -296,8 +298,15 @@ private void LoadEpgProgramsAsync() ReferenceTime = this.LocalReferenceTime }; - ThreadPool.QueueUserWorkItem((o) => LoadEpgPrograms(data), null); - } // LoadEpgProgramsAsync + if (async) + { + ThreadPool.QueueUserWorkItem((o) => LoadEpgPrograms(data), null); + } + else + { + LoadEpgPrograms(data); + } // if-else + } // BeginLoadEpgPrograms private void LoadEpgPrograms(LoadEpgProgramsData data) { @@ -321,41 +330,45 @@ private void LoadEpgPrograms(LoadEpgProgramsData data) epgPrograms[3] = next?.Program; data.EpgPrograms = epgPrograms; - - EpgIndex = 1; } // if - this.BeginInvoke(new Action(DisplayEpgPrograms), data); + if (InvokeRequired) + { + BeginInvoke(new Action(LoadEpgProgramsEnded), data); + } + else + { + LoadEpgProgramsEnded(data); + } // if-else } // LoadEpgPrograms - private void DisplayEpgPrograms(LoadEpgProgramsData data) + private void LoadEpgProgramsEnded(LoadEpgProgramsData data) { - // ignore data if not from current request - // as data is loading async, "old" load request may arrive if channel is quickly changed - if (data.RequestId != CurrentRequestId) return; + try + { + // ignore data if not from current request + // as data is loading async, "old" load request may arrive if channel is quickly changed + if (data.RequestId != CurrentRequestId) return; - timerLoadingData.Enabled = false; - SetAutoRefreshTimer(true); + timerLoadingData.Enabled = false; + SetAutoRefreshTimer(true); - EpgPrograms = data.EpgPrograms; - buttonFullView.Enabled = (EpgPrograms != null); + EpgPrograms = data.EpgPrograms; + buttonFullView.Enabled = (EpgPrograms != null); - if ((EpgPrograms == null) || (EpgIndex == -1)) - { - DisplayEpgProgram(0); + DisplayEpgProgram((data.EpgPrograms != null)? 1 : 0); } - else + catch(Exception ex) { - DisplayEpgProgram(EpgIndex); - } // if-else + HandleException(new ExceptionEventData(ex)); + } // try-catch } // DisplayEpgPrograms private void DisplayEpgProgram(int index) { - if ((index < 0) || (index > 3)) return; - TimeSpan ellapsed; + if ((index < 0) || (index > 3)) return; EpgIndex = index; epgProgressBar.Visible = (index == 1); @@ -403,6 +416,40 @@ private void DisplayEpgProgram(int index) } // switch } // DisplayEpgProgram + private void GoToNearestIndex(int epgIndex) + { + if (epgIndex < 0) epgIndex = 0; + if (epgIndex > 3) epgIndex = 3; + + if (EpgPrograms == null) + { + DisplayEpgProgram(0); + return; + } // if + + // look forward + for (int index=epgIndex; index<4;index++) + { + if (EpgPrograms[index] != null) + { + DisplayEpgProgram(index); + return; + } // if + } // for + + // look backwards + for (int index=epgIndex; index>=0;index--) + { + if (EpgPrograms[index] != null) + { + DisplayEpgProgram(index); + return; + } // if + } // for + + DisplayEpgProgram(0); + } // GoToNearestIndex + private void EnableBackForward(bool back, bool forward) { buttonBack.Enabled = back; @@ -419,12 +466,6 @@ private void SetAutoRefreshTimer(bool enabled) timerAutoRefresh.Enabled = enabled & AutoRefresh; } // SetAutoRefreshTimer - private void ReplaceChannelLogo(Image newLogo) - { - if (pictureChannelLogo.Image != null) pictureChannelLogo.Image = null; - pictureChannelLogo.Image = newLogo; - } // ReplaceServiceLogo - private T SafeGetItem(T[] array, int index) { if ((index < 0) || (index >= array.Length)) return default(T); diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx index bf43f562..bebd3983 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx @@ -640,9 +640,9 @@ System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - EpgMiniBar + EpgMiniGuide - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + IpTviewr.UiServices.Common.Controls.CommonBaseUserControl, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs index e975c02e..79ad8a8b 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs @@ -61,7 +61,7 @@ internal Texts() { } /// - /// Looks up a localized string similar to Searching for program information.... + /// Looks up a localized string similar to Loading program information.... /// internal static string EpgDataLoading { get { @@ -70,7 +70,7 @@ internal static string EpgDataLoading { } /// - /// Looks up a localized string similar to Searching for EPG data.... + /// Looks up a localized string similar to Loading EPG data.... /// internal static string EpgDataLoadingList { get { @@ -105,6 +105,15 @@ internal static string EpgNoInformation { } } + /// + /// Looks up a localized string similar to Not available. + /// + internal static string EpgNoInformationShort { + get { + return ResourceManager.GetString("EpgNoInformationShort", resourceCulture); + } + } + /// /// Looks up a localized string similar to Parental rating not available. /// @@ -150,6 +159,15 @@ internal static string EpgProgramThenCaption { } } + /// + /// Looks up a localized string similar to There was an error retrieving the list of programs. + /// + internal static string ObtainingListException { + get { + return ResourceManager.GetString("ObtainingListException", resourceCulture); + } + } + /// /// Looks up a localized string similar to Ended {0} ago. /// diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.es.resx b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.es.resx index a79563f1..87d2a017 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.es.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.es.resx @@ -132,6 +132,9 @@ Información de programa no disponible + + No disponible + Clasificación no disponible @@ -147,6 +150,9 @@ A continuación + + Se ha producido un error al recuperar la lista de programas + Terminó hace {0} diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.resx b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.resx index 54ad3e39..35fae6da 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.resx @@ -118,10 +118,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Searching for program information... + Loading program information... - Searching for EPG data... + Loading EPG data... No data @@ -132,6 +132,9 @@ Program information is not available + + Not available + Parental rating not available @@ -147,6 +150,9 @@ Then + + There was an error retrieving the list of programs + Ended {0} ago From da6f15dc459b85651ba5ca288b22da53c86412ad Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 4 Sep 2016 13:49:31 +0200 Subject: [PATCH 46/76] EpgBasicGridDialog --- .../EpgBasicGridDialog.Designer.cs | 80 ++-- .../UiServices.EPG/EpgBasicGridDialog.cs | 347 +++++++++--------- .../UiServices.EPG/EpgBasicGridDialog.es.resx | 6 +- .../UiServices.EPG/EpgBasicGridDialog.resx | 153 +++----- 4 files changed, 258 insertions(+), 328 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs index ca68f47e..c84254ca 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs @@ -32,16 +32,17 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EpgBasicGridDialog)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); this.dataGridPrograms = new System.Windows.Forms.DataGridView(); + this.buttonOk = new System.Windows.Forms.Button(); + this.pictureProgramThumbnail = new IpTviewr.UiServices.EPG.EpgProgramPictureBox(); + this.epgMiniGuide = new IpTviewr.UiServices.EPG.EpgMiniGuide(); this.columnChannel = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramNow = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramThen = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramAfter = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.buttonOk = new System.Windows.Forms.Button(); - this.buttonRecordChannel = new System.Windows.Forms.Button(); - this.buttonDisplayChannel = new System.Windows.Forms.Button(); - this.EpgProgramDisplay = new IpTviewr.UiServices.EPG.EpgProgramMiniBar(); ((System.ComponentModel.ISupportInitialize)(this.dataGridPrograms)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureProgramThumbnail)).BeginInit(); this.SuspendLayout(); // // dataGridPrograms @@ -64,11 +65,41 @@ private void InitializeComponent() this.dataGridPrograms.Name = "dataGridPrograms"; this.dataGridPrograms.ReadOnly = true; this.dataGridPrograms.RowHeadersVisible = false; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dataGridPrograms.RowsDefaultCellStyle = dataGridViewCellStyle1; this.dataGridPrograms.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.dataGridPrograms.ShowEditingIcon = false; this.dataGridPrograms.ShowRowErrors = false; this.dataGridPrograms.SelectionChanged += new System.EventHandler(this.dataGridPrograms_SelectionChanged); // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // pictureProgramThumbnail + // + resources.ApplyResources(this.pictureProgramThumbnail, "pictureProgramThumbnail"); + this.pictureProgramThumbnail.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.pictureProgramThumbnail.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureProgramThumbnail.InitialImage = global::IpTviewr.UiServices.EPG.Properties.Resources.EpgNoProgramImage; + this.pictureProgramThumbnail.Name = "pictureProgramThumbnail"; + this.pictureProgramThumbnail.TabStop = false; + // + // epgMiniGuide + // + this.epgMiniGuide.AutoRefresh = false; + this.epgMiniGuide.BackColor = System.Drawing.SystemColors.Control; + this.epgMiniGuide.BasicGridEnabled = false; + this.epgMiniGuide.DetailsEnabled = false; + this.epgMiniGuide.IsDisabled = false; + resources.ApplyResources(this.epgMiniGuide, "epgMiniGuide"); + this.epgMiniGuide.ManualActions = false; + this.epgMiniGuide.Name = "epgMiniGuide"; + // // columnChannel // this.columnChannel.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; @@ -97,50 +128,20 @@ private void InitializeComponent() this.columnProgramAfter.Name = "columnProgramAfter"; this.columnProgramAfter.ReadOnly = true; // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - // - // buttonRecordChannel - // - resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); - this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Record_16x16; - this.buttonRecordChannel.Name = "buttonRecordChannel"; - this.buttonRecordChannel.UseVisualStyleBackColor = true; - this.buttonRecordChannel.Click += new System.EventHandler(this.buttonRecordChannel_Click); - // - // buttonDisplayChannel - // - resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); - this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Play_LG_16x16; - this.buttonDisplayChannel.Name = "buttonDisplayChannel"; - this.buttonDisplayChannel.UseVisualStyleBackColor = true; - this.buttonDisplayChannel.Click += new System.EventHandler(this.buttonDisplayChannel_Click); - // - // EpgProgramDisplay - // - resources.ApplyResources(this.EpgProgramDisplay, "EpgProgramDisplay"); - this.EpgProgramDisplay.Name = "EpgProgramDisplay"; - // // EpgBasicGridDialog // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.EpgProgramDisplay); + this.Controls.Add(this.pictureProgramThumbnail); + this.Controls.Add(this.epgMiniGuide); this.Controls.Add(this.buttonOk); - this.Controls.Add(this.buttonRecordChannel); - this.Controls.Add(this.buttonDisplayChannel); this.Controls.Add(this.dataGridPrograms); this.MinimizeBox = false; this.Name = "EpgBasicGridDialog"; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.EpgBasicGridDialog_Load); - this.Shown += new System.EventHandler(this.EpgBasicGridDialog_Shown); ((System.ComponentModel.ISupportInitialize)(this.dataGridPrograms)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureProgramThumbnail)).EndInit(); this.ResumeLayout(false); } @@ -148,10 +149,9 @@ private void InitializeComponent() #endregion private System.Windows.Forms.DataGridView dataGridPrograms; - private System.Windows.Forms.Button buttonRecordChannel; - private System.Windows.Forms.Button buttonDisplayChannel; private System.Windows.Forms.Button buttonOk; - private EpgProgramMiniBar EpgProgramDisplay; + private IpTviewr.UiServices.EPG.EpgMiniGuide epgMiniGuide; + private IpTviewr.UiServices.EPG.EpgProgramPictureBox pictureProgramThumbnail; private System.Windows.Forms.DataGridViewTextBoxColumn columnChannel; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramNow; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramThen; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs index a620c6f3..d3d0984d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs @@ -17,254 +17,235 @@ using IpTviewr.UiServices.Configuration; using IpTviewr.UiServices.Discovery; using IpTviewr.UiServices.Discovery.BroadcastList; +using IpTviewr.Common; +using System.Threading; namespace IpTviewr.UiServices.EPG { - public partial class EpgBasicGridDialog : Form + public partial class EpgBasicGridDialog : CommonBaseForm { private IList ServicesList; - private UiBroadcastService CurrentService; + private UiBroadcastService InitialService; private UiBroadcastService SelectedService; - private EpgProgram[,] EpgPrograms; - private int CurrentRowIndex, SelectedRowIndex; - private DateTime ReferenceTime; + private IEpgLinkedList[] EpgPrograms; + private EpgDatastore Datastore; + private int SelectedRowIndex; + private DateTime LocalReferenceTime; - public EpgBasicGridDialog() - { - InitializeComponent(); - this.Icon = Properties.Resources.Epg; - } // constructor - - public static DialogResult ShowGrid(IWin32Window owner, IList list, UiBroadcastService currentService) + public static DialogResult ShowGrid(CommonBaseForm parentForm, IList list, UiBroadcastService currentService, EpgDatastore datastore) { using (var dialog = new EpgBasicGridDialog()) { dialog.ServicesList = list; - dialog.CurrentService = currentService; - return dialog.ShowDialog(owner); + dialog.InitialService = currentService; + dialog.Datastore = datastore; + return dialog.ShowDialog(parentForm); } // using } // ShowGrid - private void EpgBasicGridDialog_Load(object sender, EventArgs e) + public EpgBasicGridDialog() { - BasicGoogleTelemetry.SendScreenHit(this); - - CurrentRowIndex = -1; - foreach (var service in ServicesList) - { - var name = UiBroadcastListManager.GetColumnData(service, UiBroadcastListColumn.NumberAndName); - var rowIndex = dataGridPrograms.Rows.Add(name); + InitializeComponent(); + this.Icon = Properties.Resources.Epg; + } // constructor - if ((CurrentService != null) && (service.Key == CurrentService.Key)) - { - CurrentRowIndex = rowIndex; - } // if + #region Event handlers - if ((service.IsHidden) || (service.IsInactive)) - { - dataGridPrograms.Rows[rowIndex].DefaultCellStyle.ForeColor = SystemColors.GrayText; - } // if - } // foreach + private void EpgBasicGridDialog_Load(object sender, EventArgs e) + { + BasicGoogleTelemetry.SendScreenHit(this); - EpgPrograms = new EpgProgram[ServicesList.Count, 3]; + EpgPrograms = new IEpgLinkedList[ServicesList.Count]; + ChangeSelectedRow(-1); - EpgProgramDisplay.Visible = false; - buttonDisplayChannel.Enabled = false; - buttonRecordChannel.Enabled = false; - } // EpgBasicGridDialog_Load - - private void EpgBasicGridDialog_Shown(object sender, EventArgs e) - { var workerOptions = new BackgroundWorkerOptions() { OutputData = EpgPrograms, - BackgroundTask = AsyncBuildList, + BackgroundTask = AsyncGetEpgPrograms, + AfterTask = FillGrid, AllowAutoClose = true, TaskDescription = Properties.Texts.EpgDataLoadingList, AllowCancelButton = true, }; - if (BackgroundWorkerDialog.RunWorkerAsync(this, workerOptions) != DialogResult.OK) - { - return; - } // if - // TODO: implement HandleException - /* + var result = BackgroundWorkerDialog.RunWorkerAsync(this, workerOptions); + var close = false; if (workerOptions.OutputException != null) { - HandleException(TasksTexts.ObtainingListException, workerOptions.OutputException); - return; + HandleException(new ExceptionEventData(Properties.Texts.ObtainingListException, workerOptions.OutputException)); + close = true; } // if - */ - - for (int index = 0; index < EpgPrograms.GetLength(0); index++) + if (result != DialogResult.OK) { - var row = dataGridPrograms.Rows[index]; - for (int cellIndex = 0; cellIndex < 3; cellIndex++) - { - var epgProgram = EpgPrograms[index, cellIndex]; - var cell = row.Cells[cellIndex + 1]; - if (epgProgram != null) - { - cell.Value = epgProgram.Title; - } - else - { - cell.Style.BackColor = SystemColors.Control; - cell.Value = Properties.Texts.EpgNoInformation; - cell.ErrorText = Properties.Texts.EpgNoData; - } // if-else - } // for cellIndex - } // for index + close = true; + } // if - SelectedService = null; - if (CurrentRowIndex >= 0) + if (close) { - dataGridPrograms.CurrentCell = dataGridPrograms.Rows[CurrentRowIndex].Cells[1]; + Visible = false; + Close(); } // if - } // EpgBasicGridDialog_Shown + } // EpgBasicGridDialog_Load - private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) + private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) { - var result = options.OutputData as EpgProgram[,]; - - using (var cn = DbServices.GetConnection(null)) // TODO: EPG AppUiConfiguration.Current.EpgDatabaseFile)) + var cell = (dataGridPrograms.SelectedCells.Count > 0) ? dataGridPrograms.SelectedCells[0] : null; + if (cell == null) { - var serviceEvents = new Dictionary(ServicesList.Count, StringComparer.InvariantCultureIgnoreCase); - foreach (var service in ServicesList) + ChangeSelectedRow(-1); + } + else + { + ChangeSelectedRow(cell.RowIndex); + + // don't allow to select the service + if (cell.ColumnIndex == 0) { - // TODO: do not assume imagenio.es - serviceEvents[service.ServiceName + ".imagenio.es"] = null; - } // foreach + var row = dataGridPrograms.Rows[SelectedRowIndex]; + row.Cells[1].Selected = true; + + // changing the selected cell will cause SelectionChanged to be fired + // thus making unnecesary to call DisplayProgramData() + return; + } // if + + DisplayProgramData(cell.ColumnIndex); + } // if-else + } // dataGridPrograms_SelectionChanged - var now = DateTime.Now; - ReferenceTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0); - // TODO: EPG - /* - var events = EpgDbQuery.GetAllServicesNowEvent(cn, ReferenceTime); + #endregion + + private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) + { + if (dialog.QueryCancel()) return; + + dialog.SetProgressText("Filling the list..."); + + var currentRowIndex = -1; + foreach (var service in ServicesList) + { + var name = UiBroadcastListManager.GetColumnData(service, UiBroadcastListColumn.NumberAndName); + var rowIndex = dataGridPrograms.Rows.Add(name); - foreach (var epgServiceEvent in events) + if (service.Key == InitialService?.Key) { - var epgPrograms = new EpgProgram[3]; - epgPrograms[0] = epgServiceEvent.EpgProgram; - serviceEvents[epgServiceEvent.FullServiceName] = epgPrograms; - } // foreach + currentRowIndex = rowIndex; + } // if - foreach (var serviceName in serviceEvents.Keys.ToList()) + // TODO: use ListManager view options for hidden and inactive programs (to show or no to show) + if ((service.IsHidden) || (service.IsInactive)) { - EpgProgram[] epgPrograms; - DateTime start; + dataGridPrograms.Rows[rowIndex].DefaultCellStyle.ForeColor = SystemColors.GrayText; + } // if + } // foreach - if (dialog.QueryCancel()) return; + for (int index = 0; index < EpgPrograms.Length; index++) + { + int cellIndex; + var row = dataGridPrograms.Rows[index]; - var serviceDbId = EpgDbQuery.GetDatabaseIdForServiceId(serviceName, cn); - if (serviceDbId <= 0) continue; + var node = EpgPrograms[index]?.Requested; + cellIndex = 1; + while ((node != null) && (cellIndex < 4)) + { + var cell = row.Cells[cellIndex]; + cell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; + cell.Value = node.Program.Title; + node = node.Next; + cellIndex++; + } // while + + // mark remaining cells as empty + for (; cellIndex < 4; cellIndex++) + { + var cell = row.Cells[cellIndex]; + cell.Style.ForeColor = SystemColors.GrayText; + cell.Value = Properties.Texts.EpgNoInformationShort; + cell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; + } // for cellIndex + } // for index - EpgPrograms = serviceEvents[serviceName]; - start = (epgPrograms != null) ? start = EpgPrograms[0].LocalEndTime : ReferenceTime; + SelectedService = null; + if (currentRowIndex >= 0) + { + dataGridPrograms.CurrentCell = dataGridPrograms.Rows[currentRowIndex].Cells[1]; + } + else + { + SelectedRowIndex = -1; + } // if-else + } // FillGrid - var afterEvents = EpgDbQuery.GetDateRange(cn, serviceDbId, start, null, 2); - if (afterEvents.Count > 0) - { - if (EpgPrograms == null) - { - EpgPrograms = new EpgProgram[3]; - serviceEvents[serviceName] = EpgPrograms; - } // if - for (int epgIndex = 0; epgIndex < afterEvents.Count; epgIndex++) - { - EpgPrograms[epgIndex + 1] = afterEvents[epgIndex]; - } // for epgIndex - } // if - } // foreach + private void AsyncGetEpgPrograms(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) + { + IEpgLinkedList servicePrograms; - for (int index = 0; index < ServicesList.Count; index++) - { - EpgProgram[] epgPrograms; + dialog.SetProgressText("Requesting data for channels..."); - if (dialog.QueryCancel()) return; + LocalReferenceTime = DateTime.Now; + var programs = Datastore.GetAllPrograms(LocalReferenceTime, 0, 2); - // TODO: do not assume imagenio.es - var service = ServicesList[index]; - EpgPrograms = serviceEvents[service.ServiceName + ".imagenio.es"]; - if (EpgPrograms == null) - { - if (service.Data.ServiceInformation.ReplacementService != null) - { - foreach (var replacement in service.Data.ServiceInformation.ReplacementService) - { - if (replacement.Kind != "5") continue; - if (replacement.TextualIdentifier == null) continue; - if (serviceEvents.TryGetValue(replacement.TextualIdentifier.ServiceName + ".imagenio.es", out EpgPrograms)) - { - if (EpgPrograms != null) - { - break; - } // if - } // if - } // foreach - } // if - } // if + dialog.SetProgressText("Sorting information..."); + + var index = -1; + foreach (var service in ServicesList) + { + index++; - if (EpgPrograms == null) continue; + // TODO: do NOT assume .imagenio.es + var fullServiceName = service.ServiceName + ".imagenio.es"; + var fullAlternateServiceName = service.ReplacementService?.ServiceName + ".imagenio.es"; - for (int epgIndex = 0; epgIndex < EpgPrograms.Length; epgIndex++) + if (!programs.TryGetValue(fullServiceName, out servicePrograms)) + { + if (!programs.TryGetValue(fullAlternateServiceName, out servicePrograms)) { - EpgPrograms[index, epgIndex] = EpgPrograms[epgIndex]; + continue; } // if - } // for index - */ - } // using cn - } // AsyncBuildList + } // if - private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) - { - EpgProgram epgProgram; - int columnIndex; - string caption; + EpgPrograms[index] = servicePrograms; + } // foreach + } // AsyncGetEpgPrograms - var cell = (dataGridPrograms.SelectedCells.Count > 0) ? dataGridPrograms.SelectedCells[0] : null; - if (cell == null) + private void DisplayProgramData(int cellIndex) + { + if (cellIndex < 1) { - SelectedService = null; - SelectedRowIndex = -1; - columnIndex = -1; - epgProgram = null; + pictureProgramThumbnail.Visible = false; + epgMiniGuide.Visible = false; } else { - SelectedRowIndex = cell.RowIndex; - SelectedService = ServicesList[SelectedRowIndex]; + //pictureProgramThumbnail.SetImage(Properties.Resources.EpgLoadingProgramImage); + pictureProgramThumbnail.Visible = true; - columnIndex = cell.ColumnIndex; - epgProgram = (columnIndex > 0)? EpgPrograms[cell.RowIndex, columnIndex - 1] : null; + // TODO: load program image (async) + pictureProgramThumbnail.SetImage(Properties.Resources.EpgNoProgramImage); - switch (columnIndex) - { - case 1: caption = Properties.Texts.EpgProgramNowCaption; break; - case 2: caption = Properties.Texts.EpgProgramThenCaption; break; - case 3: caption = Properties.Texts.EpgProgramAfterCaption; break; - default: - caption = null; - break; - } // switch - - EpgProgramDisplay.DisplayData(ServicesList[SelectedRowIndex], epgProgram, ReferenceTime, caption); + epgMiniGuide.Visible = true; + epgMiniGuide.GoTo(cellIndex); } // if-else + } // DisplayProgramData - EpgProgramDisplay.Visible = (columnIndex > 0); - buttonDisplayChannel.Enabled = (columnIndex == 1); - buttonRecordChannel.Enabled = (columnIndex >= 1) && (epgProgram != null); - } // dataGridPrograms_SelectionChanged - - private void buttonDisplayChannel_Click(object sender, EventArgs e) + private void ChangeSelectedRow(int rowIndex) { - ExternalTvPlayer.ShowTvChannel(this, SelectedService); - } // buttonDisplayChannel_Click + if (rowIndex == SelectedRowIndex) return; + SelectedRowIndex = rowIndex; + SelectedService = (rowIndex >= 0)? ServicesList[rowIndex] : null; - private void buttonRecordChannel_Click(object sender, EventArgs e) - { - NotImplementedBox.ShowBox(this, "buttonRecordChannel"); - } // buttonRecordChannel_Click + if (rowIndex == -1) + { + pictureProgramThumbnail.Visible = false; + epgMiniGuide.Visible = false; + return; + } // if + + var epgPrograms = EpgPrograms[rowIndex]; + var singleServiceDatastore = new EpgSingleServiceDatastore(SelectedService.FullServiceName, EpgPrograms[SelectedRowIndex]); + + epgMiniGuide.LoadEpgPrograms(SelectedService, LocalReferenceTime, singleServiceDatastore, false); + epgMiniGuide.Visible = true; + } // ChangeSelectedRow } // class EpgBasicGridDialog } // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.es.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.es.resx index 39775e0c..73901d8d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.es.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.es.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Canal @@ -139,6 +139,6 @@ &Ver canal... - Guía electrónica de programación + Guía electrónica de programación (abreviada) \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx index 53ae8c0c..45cef33b 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx @@ -112,18 +112,22 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Top, Bottom, Left, Right Channel + + + 125 + Now @@ -133,14 +137,13 @@ After - + 12, 12 - 560, 292 + 610, 292 - 0 @@ -148,13 +151,13 @@ dataGridPrograms - System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 4 + 3 Bottom, Right @@ -163,7 +166,7 @@ NoControl - 472, 375 + 522, 375 100, 25 @@ -184,162 +187,108 @@ buttonOk - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 1 - - - Bottom, Right - - - False - - - NoControl - - - 472, 341 - - - 100, 25 - - - 32 - - - Rec&ord... - - - MiddleRight - - - ImageBeforeText - - - buttonRecordChannel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - 2 - - Bottom, Right - - - False + + Bottom, Left - + NoControl - - 472, 310 + + 12, 310 - - 100, 25 + + 120, 90 - - 33 + + Zoom - - &Show... + + 42 - - MiddleRight - - - ImageBeforeText + + pictureProgramThumbnail - - buttonDisplayChannel + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + $this - - 3 - - - Bottom, Left, Right + + 0 - - 12, 310 + + 138, 312 - - 454, 90 + + 484, 57 - + 35 - - EpgProgramDisplay + + epgMiniGuide - - IpTviewr.UiServices.EPG.EpgProgramMiniBar, UiServices.EPG, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.EPG.EpgMiniGuide, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - + $this - - 0 + + 1 - + True 6, 13 - 584, 412 - - - NoControl + 634, 412 CenterParent - Electronic Program Guide + Electronic Program Guide (abridged) columnChannel - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 columnProgramNow - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 columnProgramThen - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 columnProgramAfter - System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 EpgBasicGridDialog - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file From 59b1a43719a0d726423dee84afb1490094f00391 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 4 Sep 2016 13:50:30 +0200 Subject: [PATCH 47/76] ChannelList: show EPG basic grid --- .../ChannelList/ChannelListForm.Designer.cs | 2 +- .../ChannelList/ChannelListForm.cs | 5 +- .../ChannelList/ChannelListForm.resx | 242 ++++++++++-------- 3 files changed, 136 insertions(+), 113 deletions(-) diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs b/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs index 0d08e972..1774eef6 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.Designer.cs @@ -834,7 +834,7 @@ private void InitializeComponent() // resources.ApplyResources(this.epgMiniGuide, "epgMiniGuide"); this.epgMiniGuide.BackColor = System.Drawing.Color.White; - this.epgMiniGuide.BasicGridEnabled = false; + this.epgMiniGuide.BasicGridEnabled = true; this.epgMiniGuide.DetailsEnabled = false; this.epgMiniGuide.IsDisabled = false; this.epgMiniGuide.ManualActions = false; diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs b/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs index 7d6dd334..9cb73ebc 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs @@ -854,7 +854,7 @@ private void ShowEpgMiniGuide(bool display) // display mini bar // TODO: epgMiniGuide.DetailsEnabled epgMiniGuide.DetailsEnabled = false; //(IpTvProvider.Current.EpgInfo.Capabilities & EpgInfoProviderCapabilities.ExtendedInfo) != 0; - epgMiniGuide.SetEpgPrograms(ListManager.SelectedService, DateTime.Now, EpgDatastore); + epgMiniGuide.LoadEpgPrograms(ListManager.SelectedService, DateTime.Now, EpgDatastore); } // ShowEpgMiniGuide private void ShowEpgNowThenForm() @@ -865,8 +865,7 @@ private void ShowEpgNowThenForm() private void ShowEpgBasicGrid() { - // TODO: ShowEpgBasicGrid - // EpgBasicGridDialog.ShowGrid(this, ListManager.GetDisplayedBroadcastList(), ListManager.SelectedService); + EpgBasicGridDialog.ShowGrid(this, ListManager.GetDisplayedBroadcastList(), ListManager.SelectedService, EpgDatastore); } // ShowEpgBasicGrid private void ShowEpgExtendedInfo() diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx index 8445c07f..6751d257 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.resx @@ -133,43 +133,7 @@ 353, 17 - - 0, 0 - - - 724, 24 - - - 0 - - - menuStripMain - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 6 - - - 65, 20 - - - &IPTViewr - - - 160, 22 - - - Recent channels - - - False - False @@ -641,18 +605,21 @@ Recent[9] + + 160, 22 + + + Recent channels + + + False + 157, 6 False - - 160, 22 - - - &Provider - 200, 22 @@ -665,14 +632,11 @@ Show technical details... - + 160, 22 - - P&ackage - - - False + + &Provider False @@ -692,6 +656,15 @@ Manage packages... + + 160, 22 + + + P&ackage + + + False + 157, 6 @@ -725,20 +698,11 @@ Exit - - 63, 20 - - - &Channel - - - 225, 22 - - - &Favorites + + 65, 20 - - False + + &IPTViewr False @@ -1149,6 +1113,15 @@ Edit list... + + 225, 22 + + + &Favorites + + + False + 222, 6 @@ -1215,11 +1188,11 @@ Show technical &details... - - 78, 20 + + 63, 20 - - &Recordings + + &Channel 185, 22 @@ -1257,11 +1230,11 @@ False - - 40, 20 + + 78, 20 - - &EPG + + &Recordings F6 @@ -1272,21 +1245,18 @@ Current programming... - - False - 252, 6 - - False - 255, 22 &Now and then... + + False + F7 @@ -1314,6 +1284,9 @@ 252, 6 + + False + Alt+Left @@ -1332,11 +1305,11 @@ &Next program - - 44, 20 + + 40, 20 - - &Help + + &EPG F1 @@ -1377,6 +1350,33 @@ &About... + + 44, 20 + + + &Help + + + 0, 0 + + + 724, 24 + + + 0 + + + menuStripMain + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + Top, Left, Right @@ -1408,7 +1408,7 @@ $this - 4 + 5 Top, Left, Right @@ -1441,20 +1441,11 @@ $this - 3 + 4 673, 17 - - 219, 148 - - - contextMenuList - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 218, 22 @@ -1485,12 +1476,6 @@ 215, 6 - - 218, 22 - - - &Copy - 188, 22 @@ -1534,12 +1519,27 @@ Save list as .m3u file... + + 218, 22 + + + &Copy + 218, 22 (Placeholder for properties) + + 219, 148 + + + contextMenuList + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 488, 17 @@ -1565,7 +1565,7 @@ $this - 2 + 3 NoControl @@ -1592,11 +1592,26 @@ $this - 5 + 6 815, 17 + + False + + + MiddleLeft + + + 709, 17 + + + statusLabelMain + + + MiddleLeft + 0, 419 @@ -1619,22 +1634,31 @@ $this - 1 + 2 - - False + + Bottom, Left, Right - - MiddleLeft + + 12, 355 - - 709, 17 + + 700, 57 - - statusLabelMain + + 1 - - MiddleLeft + + epgMiniGuide + + + IpTviewr.UiServices.EPG.EpgMiniGuide, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 1 True From 5524f14f3d825e22648da684e5d2f66080daec12 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Sun, 4 Sep 2016 22:15:29 +0200 Subject: [PATCH 48/76] RecordHelper code refactoring --- .../ChannelList/ChannelListForm.cs | 54 +- .../Services.EpgDiscovery/EpgDownloader.cs | 2 +- .../UiServices.EPG/EpgMiniGuide.cs | 2 +- .../RecordChannelDialog.Designer.cs | 211 +++-- .../UiServices.Record/RecordChannelDialog.cs | 15 +- .../RecordChannelDialog.resx | 772 +++++++++--------- .../UiServices.Record/RecordHelper.cs | 195 +++-- 7 files changed, 630 insertions(+), 621 deletions(-) diff --git a/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs b/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs index 9cb73ebc..6cec61b0 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs +++ b/1.5 'Kruger 60'/ChannelList/ChannelListForm.cs @@ -368,16 +368,6 @@ private void listViewChannelsList_DoubleClick(object sender, EventArgs e) SafeCall(ShowTvChannel, true); } // listViewChannelsList_DoubleClick - private void buttonRecordChannel_Click(object sender, EventArgs e) - { - SafeCall(buttonRecordChannel_Click_Implementation, sender, e); - } // buttonRecordChannel_Click - - private void buttonDisplayChannel_Click(object sender, EventArgs e) - { - SafeCall(ShowTvChannel, true); - } // buttonDisplayChannel_Click - #endregion #region Service-related event handlers implementation @@ -516,49 +506,7 @@ private void menuItemRecordingsRepair_Click(object sender, EventArgs e) private void buttonRecordChannel_Click_Implementation(object sender, EventArgs e) { - RecordTask task; - - if (ListManager.SelectedService == null) return; - - if (ListManager.SelectedService.IsInactive) - { - var box = new ExceptionMessageBox() - { - Caption = this.Text, - Text = string.Format(Properties.Texts.RecordDeadTvChannel, ListManager.SelectedService.DisplayName), - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Question, - Buttons = ExceptionMessageBoxButtons.YesNo, - DefaultButton = ExceptionMessageBoxDefaultButton.Button2, - }; - if (box.Show(this) != System.Windows.Forms.DialogResult.Yes) return; - } // if - - using (var dlg = new RecordChannelDialog()) - { - dlg.Task = RecordTask.CreateWithDefaultValues(new RecordChannel() - { - LogicalNumber = ListManager.SelectedService.DisplayLogicalNumber, - Name = ListManager.SelectedService.DisplayName, - Description = ListManager.SelectedService.DisplayDescription, - ServiceKey = ListManager.SelectedService.Key, - ServiceName = ListManager.SelectedService.FullServiceName, - ChannelUrl = ListManager.SelectedService.LocationUrl, - }); - dlg.IsNewTask = true; - dlg.ShowDialog(this); - task = dlg.Task; - if (dlg.DialogResult != DialogResult.OK) return; - } // using dlg - - var scheduler = new Scheduler(GetExceptionHandler(), - AppUiConfiguration.Current.Folders.RecordTasks, - MyApplication.RecorderLauncherPath); - - if (scheduler.CreateTask(task)) - { - MessageBox.Show(this, Texts.SchedulerCreateTaskOk, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); - } // if + RecordHelper.RecordService(this, ListManager.SelectedService); } // buttonRecordChannel_Click_Implementation private void menuItemRecordingsManage_Click_Implementation(object sender, EventArgs e) diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs index 30b5df04..57ee0b41 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs @@ -92,7 +92,7 @@ private void Download() StreamClient = new DvbStpStreamClient(MulticastIpAddress, MulticastPort); StreamClient.NoDataTimeout = -1; // not implemented by DvbStpStreamClient StreamClient.ReceiveDatagramTimeout = 60 * 1000; // 60 seconds - StreamClient.OperationTimeout = (30 * 60) * 1000; // 30 minutes + StreamClient.OperationTimeout = -1; // forever StreamClient.SegmentPayloadReceived += SegmentPayloadReceived; while (retryTime <= maxRetryTime) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs index 740a6447..b1272f44 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs @@ -268,7 +268,7 @@ private void buttonRecordChannel_Click(object sender, EventArgs e) ButtonClicked?.Invoke(this, new EpgMiniBarButtonClickedEventArgs(Button.Record)); if (ManualActions) return; - RecordHelper.RecordService(ParentForm as CommonBaseForm, SelectedService, SelectedProgram, LocalReferenceTime, true); + RecordHelper.RecordProgram(ParentForm as CommonBaseForm, SelectedService, SelectedProgram, LocalReferenceTime, true); } // buttonRecordChannel_Click #endregion diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs index 573532a7..e9e3a77f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs @@ -35,8 +35,6 @@ private void InitializeComponent() System.Windows.Forms.ColumnHeader ColumnName; System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordChannelDialog)); System.Windows.Forms.ColumnHeader ColumnLocation; - this.labelChannelName = new System.Windows.Forms.Label(); - this.labelChannelDescription = new System.Windows.Forms.Label(); this.buttonOk = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.tabProperties = new System.Windows.Forms.TabControl(); @@ -52,13 +50,6 @@ private void InitializeComponent() this.labelEndMarginSufix = new System.Windows.Forms.Label(); this.numericEndMargin = new System.Windows.Forms.NumericUpDown(); this.checkBoxEndMargin = new System.Windows.Forms.CheckBox(); - this.tabPageDescription = new System.Windows.Forms.TabPage(); - this.checkAppendRecordingDetails = new System.Windows.Forms.CheckBox(); - this.textTaskDescription = new System.Windows.Forms.TextBox(); - this.labelTaskDescription = new System.Windows.Forms.Label(); - this.checkAddTaskPrefix = new System.Windows.Forms.CheckBox(); - this.labelTaskName = new System.Windows.Forms.Label(); - this.textTaskName = new IpTviewr.UiServices.Common.Controls.FilenameTextBox(); this.tabPageSave = new System.Windows.Forms.TabPage(); this.listViewLocations = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.imageListLocations = new System.Windows.Forms.ImageList(this.components); @@ -67,7 +58,14 @@ private void InitializeComponent() this.textFilename = new IpTviewr.UiServices.Common.Controls.FilenameTextBox(); this.labelFilename = new System.Windows.Forms.Label(); this.labelSaveLocation = new System.Windows.Forms.Label(); + this.tabPageDescription = new System.Windows.Forms.TabPage(); + this.checkAppendRecordingDetails = new System.Windows.Forms.CheckBox(); + this.textTaskDescription = new System.Windows.Forms.TextBox(); + this.labelTaskDescription = new System.Windows.Forms.Label(); this.tabPageAdvanced = new System.Windows.Forms.TabPage(); + this.checkAddTaskPrefix = new System.Windows.Forms.CheckBox(); + this.labelTaskName = new System.Windows.Forms.Label(); + this.textTaskName = new IpTviewr.UiServices.Common.Controls.FilenameTextBox(); this.timeSpanSchedulerDeleteTaskAfter = new IpTviewr.UiServices.Common.Controls.TimeSpanUpDown(); this.timeSpanSchedulerRetry = new IpTviewr.UiServices.Common.Controls.TimeSpanUpDown(); this.comboSchedulerAlreadyRunning = new System.Windows.Forms.ComboBox(); @@ -79,9 +77,11 @@ private void InitializeComponent() this.checkSchedulerASAP = new System.Windows.Forms.CheckBox(); this.comboSchedulerFolder = new System.Windows.Forms.ComboBox(); this.labelSchedulerFolder = new System.Windows.Forms.Label(); - this.labelChannelNumber = new System.Windows.Forms.Label(); - this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); + this.labelProgramSchedule = new System.Windows.Forms.Label(); + this.labelProgramDescription = new System.Windows.Forms.Label(); + this.labelChannelName = new System.Windows.Forms.Label(); + this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); ColumnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); ColumnLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.tabProperties.SuspendLayout(); @@ -89,8 +89,8 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.numericStartMargin)).BeginInit(); this.tabPageLength.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericEndMargin)).BeginInit(); - this.tabPageDescription.SuspendLayout(); this.tabPageSave.SuspendLayout(); + this.tabPageDescription.SuspendLayout(); this.tabPageAdvanced.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericSchedulerMaxRetries)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).BeginInit(); @@ -104,20 +104,6 @@ private void InitializeComponent() // resources.ApplyResources(ColumnLocation, "ColumnLocation"); // - // labelChannelName - // - resources.ApplyResources(this.labelChannelName, "labelChannelName"); - this.labelChannelName.AutoEllipsis = true; - this.labelChannelName.Name = "labelChannelName"; - this.labelChannelName.UseMnemonic = false; - // - // labelChannelDescription - // - resources.ApplyResources(this.labelChannelDescription, "labelChannelDescription"); - this.labelChannelDescription.AutoEllipsis = true; - this.labelChannelDescription.Name = "labelChannelDescription"; - this.labelChannelDescription.UseMnemonic = false; - // // buttonOk // resources.ApplyResources(this.buttonOk, "buttonOk"); @@ -140,8 +126,8 @@ private void InitializeComponent() resources.ApplyResources(this.tabProperties, "tabProperties"); this.tabProperties.Controls.Add(this.tabPageSchedule); this.tabProperties.Controls.Add(this.tabPageLength); - this.tabProperties.Controls.Add(this.tabPageDescription); this.tabProperties.Controls.Add(this.tabPageSave); + this.tabProperties.Controls.Add(this.tabPageDescription); this.tabProperties.Controls.Add(this.tabPageAdvanced); this.tabProperties.Name = "tabProperties"; this.tabProperties.SelectedIndex = 0; @@ -231,11 +217,6 @@ private void InitializeComponent() 0, 0}); this.numericEndMargin.Name = "numericEndMargin"; - this.numericEndMargin.Value = new decimal(new int[] { - 5, - 0, - 0, - 0}); // // checkBoxEndMargin // @@ -244,56 +225,6 @@ private void InitializeComponent() this.checkBoxEndMargin.UseVisualStyleBackColor = true; this.checkBoxEndMargin.CheckedChanged += new System.EventHandler(this.checkBoxEndMargin_CheckedChanged); // - // tabPageDescription - // - this.tabPageDescription.Controls.Add(this.checkAppendRecordingDetails); - this.tabPageDescription.Controls.Add(this.textTaskDescription); - this.tabPageDescription.Controls.Add(this.labelTaskDescription); - this.tabPageDescription.Controls.Add(this.checkAddTaskPrefix); - this.tabPageDescription.Controls.Add(this.labelTaskName); - this.tabPageDescription.Controls.Add(this.textTaskName); - resources.ApplyResources(this.tabPageDescription, "tabPageDescription"); - this.tabPageDescription.Name = "tabPageDescription"; - this.tabPageDescription.UseVisualStyleBackColor = true; - // - // checkAppendRecordingDetails - // - resources.ApplyResources(this.checkAppendRecordingDetails, "checkAppendRecordingDetails"); - this.checkAppendRecordingDetails.Checked = true; - this.checkAppendRecordingDetails.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkAppendRecordingDetails.Name = "checkAppendRecordingDetails"; - this.checkAppendRecordingDetails.UseVisualStyleBackColor = true; - // - // textTaskDescription - // - resources.ApplyResources(this.textTaskDescription, "textTaskDescription"); - this.textTaskDescription.Name = "textTaskDescription"; - // - // labelTaskDescription - // - resources.ApplyResources(this.labelTaskDescription, "labelTaskDescription"); - this.labelTaskDescription.Name = "labelTaskDescription"; - // - // checkAddTaskPrefix - // - resources.ApplyResources(this.checkAddTaskPrefix, "checkAddTaskPrefix"); - this.checkAddTaskPrefix.Checked = true; - this.checkAddTaskPrefix.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkAddTaskPrefix.Name = "checkAddTaskPrefix"; - this.checkAddTaskPrefix.UseVisualStyleBackColor = true; - // - // labelTaskName - // - resources.ApplyResources(this.labelTaskName, "labelTaskName"); - this.labelTaskName.Name = "labelTaskName"; - // - // textTaskName - // - resources.ApplyResources(this.textTaskName, "textTaskName"); - this.textTaskName.Name = "textTaskName"; - this.textTaskName.TextChanged += new System.EventHandler(this.textTaskName_TextChanged); - this.textTaskName.Validating += new System.ComponentModel.CancelEventHandler(this.textTaskName_Validating); - // // tabPageSave // this.tabPageSave.Controls.Add(this.listViewLocations); @@ -364,8 +295,38 @@ private void InitializeComponent() resources.ApplyResources(this.labelSaveLocation, "labelSaveLocation"); this.labelSaveLocation.Name = "labelSaveLocation"; // + // tabPageDescription + // + this.tabPageDescription.Controls.Add(this.checkAppendRecordingDetails); + this.tabPageDescription.Controls.Add(this.textTaskDescription); + this.tabPageDescription.Controls.Add(this.labelTaskDescription); + resources.ApplyResources(this.tabPageDescription, "tabPageDescription"); + this.tabPageDescription.Name = "tabPageDescription"; + this.tabPageDescription.UseVisualStyleBackColor = true; + // + // checkAppendRecordingDetails + // + resources.ApplyResources(this.checkAppendRecordingDetails, "checkAppendRecordingDetails"); + this.checkAppendRecordingDetails.Checked = true; + this.checkAppendRecordingDetails.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkAppendRecordingDetails.Name = "checkAppendRecordingDetails"; + this.checkAppendRecordingDetails.UseVisualStyleBackColor = true; + // + // textTaskDescription + // + resources.ApplyResources(this.textTaskDescription, "textTaskDescription"); + this.textTaskDescription.Name = "textTaskDescription"; + // + // labelTaskDescription + // + resources.ApplyResources(this.labelTaskDescription, "labelTaskDescription"); + this.labelTaskDescription.Name = "labelTaskDescription"; + // // tabPageAdvanced // + this.tabPageAdvanced.Controls.Add(this.checkAddTaskPrefix); + this.tabPageAdvanced.Controls.Add(this.labelTaskName); + this.tabPageAdvanced.Controls.Add(this.textTaskName); this.tabPageAdvanced.Controls.Add(this.timeSpanSchedulerDeleteTaskAfter); this.tabPageAdvanced.Controls.Add(this.timeSpanSchedulerRetry); this.tabPageAdvanced.Controls.Add(this.comboSchedulerAlreadyRunning); @@ -381,6 +342,24 @@ private void InitializeComponent() this.tabPageAdvanced.Name = "tabPageAdvanced"; this.tabPageAdvanced.UseVisualStyleBackColor = true; // + // checkAddTaskPrefix + // + resources.ApplyResources(this.checkAddTaskPrefix, "checkAddTaskPrefix"); + this.checkAddTaskPrefix.Checked = true; + this.checkAddTaskPrefix.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkAddTaskPrefix.Name = "checkAddTaskPrefix"; + this.checkAddTaskPrefix.UseVisualStyleBackColor = true; + // + // labelTaskName + // + resources.ApplyResources(this.labelTaskName, "labelTaskName"); + this.labelTaskName.Name = "labelTaskName"; + // + // textTaskName + // + resources.ApplyResources(this.textTaskName, "textTaskName"); + this.textTaskName.Name = "textTaskName"; + // // timeSpanSchedulerDeleteTaskAfter // resources.ApplyResources(this.timeSpanSchedulerDeleteTaskAfter, "timeSpanSchedulerDeleteTaskAfter"); @@ -459,19 +438,6 @@ private void InitializeComponent() resources.ApplyResources(this.labelSchedulerFolder, "labelSchedulerFolder"); this.labelSchedulerFolder.Name = "labelSchedulerFolder"; // - // labelChannelNumber - // - resources.ApplyResources(this.labelChannelNumber, "labelChannelNumber"); - this.labelChannelNumber.Name = "labelChannelNumber"; - this.labelChannelNumber.UseMnemonic = false; - // - // pictureChannelLogo - // - this.pictureChannelLogo.BackColor = System.Drawing.SystemColors.Control; - resources.ApplyResources(this.pictureChannelLogo, "pictureChannelLogo"); - this.pictureChannelLogo.Name = "pictureChannelLogo"; - this.pictureChannelLogo.TabStop = false; - // // selectFolder // this.selectFolder.Description = ""; @@ -484,6 +450,34 @@ private void InitializeComponent() this.selectFolder.ShowFullPathInEditBox = true; this.selectFolder.ShowNewFolderButton = true; // + // labelProgramSchedule + // + resources.ApplyResources(this.labelProgramSchedule, "labelProgramSchedule"); + this.labelProgramSchedule.AutoEllipsis = true; + this.labelProgramSchedule.Name = "labelProgramSchedule"; + this.labelProgramSchedule.UseMnemonic = false; + // + // labelProgramDescription + // + resources.ApplyResources(this.labelProgramDescription, "labelProgramDescription"); + this.labelProgramDescription.AutoEllipsis = true; + this.labelProgramDescription.Name = "labelProgramDescription"; + this.labelProgramDescription.UseMnemonic = false; + // + // labelChannelName + // + resources.ApplyResources(this.labelChannelName, "labelChannelName"); + this.labelChannelName.AutoEllipsis = true; + this.labelChannelName.Name = "labelChannelName"; + this.labelChannelName.UseMnemonic = false; + // + // pictureChannelLogo + // + this.pictureChannelLogo.BackColor = System.Drawing.SystemColors.Control; + resources.ApplyResources(this.pictureChannelLogo, "pictureChannelLogo"); + this.pictureChannelLogo.Name = "pictureChannelLogo"; + this.pictureChannelLogo.TabStop = false; + // // RecordChannelDialog // this.AcceptButton = this.buttonOk; @@ -492,13 +486,13 @@ private void InitializeComponent() this.AutoValidate = System.Windows.Forms.AutoValidate.Disable; this.CancelButton = this.buttonCancel; this.CausesValidation = false; - this.Controls.Add(this.labelChannelNumber); + this.Controls.Add(this.labelProgramSchedule); + this.Controls.Add(this.labelProgramDescription); + this.Controls.Add(this.labelChannelName); + this.Controls.Add(this.pictureChannelLogo); this.Controls.Add(this.tabProperties); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOk); - this.Controls.Add(this.labelChannelDescription); - this.Controls.Add(this.labelChannelName); - this.Controls.Add(this.pictureChannelLogo); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RecordChannelDialog"; @@ -513,10 +507,10 @@ private void InitializeComponent() this.tabPageLength.ResumeLayout(false); this.tabPageLength.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericEndMargin)).EndInit(); - this.tabPageDescription.ResumeLayout(false); - this.tabPageDescription.PerformLayout(); this.tabPageSave.ResumeLayout(false); this.tabPageSave.PerformLayout(); + this.tabPageDescription.ResumeLayout(false); + this.tabPageDescription.PerformLayout(); this.tabPageAdvanced.ResumeLayout(false); this.tabPageAdvanced.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericSchedulerMaxRetries)).EndInit(); @@ -526,10 +520,6 @@ private void InitializeComponent() } #endregion - - private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureChannelLogo; - private System.Windows.Forms.Label labelChannelName; - private System.Windows.Forms.Label labelChannelDescription; private System.Windows.Forms.Button buttonOk; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.TabControl tabProperties; @@ -543,15 +533,11 @@ private void InitializeComponent() private System.Windows.Forms.NumericUpDown numericEndMargin; private System.Windows.Forms.CheckBox checkBoxEndMargin; private IpTviewr.UiServices.Record.Controls.RecordingDuration recordingTime; - private System.Windows.Forms.Label labelChannelNumber; private System.Windows.Forms.TabPage tabPageDescription; private System.Windows.Forms.TabPage tabPageAdvanced; private System.Windows.Forms.CheckBox checkAppendRecordingDetails; private System.Windows.Forms.TextBox textTaskDescription; private System.Windows.Forms.Label labelTaskDescription; - private System.Windows.Forms.CheckBox checkAddTaskPrefix; - private IpTviewr.UiServices.Common.Controls.FilenameTextBox textTaskName; - private System.Windows.Forms.Label labelTaskName; private System.Windows.Forms.TabPage tabPageSave; private System.Windows.Forms.Label labelFilename; private System.Windows.Forms.Label labelSaveLocation; @@ -574,5 +560,12 @@ private void InitializeComponent() private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerRetry; private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerDeleteTaskAfter; private IpTviewr.UiServices.Common.Controls.SelectFolderDialog selectFolder; + private System.Windows.Forms.CheckBox checkAddTaskPrefix; + private System.Windows.Forms.Label labelTaskName; + private Common.Controls.FilenameTextBox textTaskName; + private System.Windows.Forms.Label labelProgramSchedule; + private System.Windows.Forms.Label labelProgramDescription; + private System.Windows.Forms.Label labelChannelName; + private Common.Controls.PictureBoxEx pictureChannelLogo; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index 03b643aa..b683cc9f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -19,7 +19,7 @@ namespace IpTviewr.UiServices.Record { public partial class RecordChannelDialog : CommonBaseForm { - public static readonly TimeSpan DefaultExpiryDateTimeSpan = new TimeSpan(1, 0, 0, 0); + public static readonly TimeSpan DefaultExpiryDateTimeSpan = new TimeSpan(23, 0, 0); private const string ListLocationsSelectedImageKey = "selected"; private const string ListLocationsDefaultImageKey = "folder"; @@ -117,10 +117,15 @@ private void DialogRecordChannel_Shown_Implementation(object sender, EventArgs e private void InitGeneralData() { var serviceLogo = AppUiConfiguration.Current.ServiceLogoMappings.FromServiceKey(Task.Channel.ServiceKey); - pictureChannelLogo.Image = serviceLogo.GetImage(LogoSize.Size64, true); - labelChannelNumber.Text = Task.Channel.LogicalNumber; - labelChannelName.Text = Task.Channel.Name; - labelChannelDescription.Text = Task.Channel.Description; + pictureChannelLogo.Image = serviceLogo.GetImage(LogoSize.Size64); + + labelChannelName.Text = string.Format("{0} {1}", Task.Channel.LogicalNumber, Task.Channel.Name); + + labelChannelName.Top = pictureChannelLogo.Top; + labelChannelName.Height = pictureChannelLogo.Height; + + labelProgramDescription.Visible = false; + labelProgramSchedule.Visible = false; } // InitGeneralData private void GetGeneralData() diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx index 28c7d296..31534479 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx @@ -137,82 +137,13 @@ 250 - - Top, Left, Right - - - - Segoe UI, 12pt, style=Bold - - - NoControl - - - 143, 12 - - - 308, 26 - - - 1 - - - (Channel name) - - - labelChannelName - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - Top, Left, Right - - - Segoe UI, 9.75pt - - - NoControl - - - 147, 38 - - - 304, 38 - - - 2 - - - (Channel description) - - - MiddleLeft - - - labelChannelDescription - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - Bottom, Right NoControl + 246, 375 @@ -238,7 +169,7 @@ $this - 3 + 6 Bottom, Right @@ -274,13 +205,13 @@ $this - 2 + 5 Top, Bottom, Left, Right - 25, 210 + 152, 210 215, 20 @@ -307,7 +238,7 @@ NoControl - 3, 187 + 130, 187 199, 17 @@ -337,7 +268,7 @@ NoControl - 168, 237 + 168, 239 43, 13 @@ -361,7 +292,7 @@ 2 - 122, 235 + 122, 237 40, 20 @@ -391,7 +322,7 @@ NoControl - 3, 236 + 3, 238 113, 17 @@ -490,7 +421,7 @@ NoControl - 168, 188 + 168, 239 43, 13 @@ -514,7 +445,7 @@ 1 - 122, 186 + 122, 237 40, 20 @@ -544,7 +475,7 @@ NoControl - 3, 187 + 3, 238 113, 17 @@ -594,212 +525,14 @@ 1 - - Bottom, Left - - - True - - - NoControl - - - 3, 204 - - - 289, 17 - - - 5 - - - Append recording details (channel name, schedule, etc) - - - checkAppendRecordingDetails - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDescription - - - 0 - - - Top, Bottom, Left, Right - - - 3, 98 - - - True - - - 425, 100 - - - 4 - - - textTaskDescription - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDescription - - - 1 - - - True - - - NoControl - - - 3, 82 - - - 202, 13 - - - 3 - - - Task and recording description (optional): - - - labelTaskDescription - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDescription - - - 2 - - - True - - - NoControl - - - 3, 49 - - - 158, 17 - - - 2 - - - Add standard prefix to name - - - checkAddTaskPrefix - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDescription - - - 3 - - - True - - - NoControl - - - 3, 7 - - - 184, 13 - - - 0 - - - Windows Task Scheduler task name: - - - labelTaskName - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageDescription - - - 4 - - - Top, Left, Right - - - 3, 23 - - - 425, 20 - - - 1 - - - textTaskName - - - IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - - tabPageDescription - - - 5 - - - 4, 22 - - - 432, 261 - - - 3 - - - Description - - - tabPageDescription - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabProperties - - - 2 - Top, Bottom, Left, Right - 3, 71 + 6, 71 - 425, 156 + 422, 155 17, 17 @@ -808,55 +541,55 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0 - CwAAAk1TRnQBSQFMAgEBAgEAAfABAQHwAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AUQBAAH/AbgBRAEAAf8DOAFcFAABuAGjAZQB/wEp - AQ8BAAH/ASkBDwEAAf8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEAAf8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEA - Af8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEAAf8BKQEPAQAB/wEpAQ8BAAH/ASkBDwEAAf8BKQEPAQAB/6AA - AbgBRAEAAf8B8QHMAY4B/wG4AUQBAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL - Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi - AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASkBDwEAAf+gAAG4AUQBAAH/AfABwAEyAf8B7wHK - AYwB/wG4AUQBAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy - AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt - Af8B5AG9AaYB/wHhAbcBngH/ASkBDwEAAf+AAANDAXcBuAFEAQAB/wG4AUQBAAH/AbgBRAEAAf8BuAFE - AQAB/wG4AUQBAAH/AbgBRAEAAf8BuAFEAQAB/wG4AUQBAAH/AfMBxQE0Af8B5QGZAQAB/wHvAcsBjAH/ - AbgBRAEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY - Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn - AcQBsAH/AeMBvQGlAf8BKQEPAQAB/4AAAaUBLAEAAf8B6QG6AS0B/wHuAcEBMgH/AfQBxwE1Af8B9wHM - ATcB/wH6Ac8BOQH/AfsBzwE5Af8B+wHPATkB/wH5AcwBOAH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ - Ae8BygGMAf8BsgE8AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh - Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq - AcwBuwH/AecBxgGzAf8B5AG+AacB/wEpAQ8BAAH/gAABpQEsAQAB/wFnAVEBKwH8Ad0BlAEAAf8B5AGb - AQAB/wHtAaUBAAH/AfMBrAEAAf8B+AGxAQAB/wH5AbIBAAH/AfkBsQEAAf8B9QGtAQAB/wHyAacBAAH/ - AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBPAEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ - AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX - AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASkBDwEAAf+AAAGlASwBAAH/AWcBVgEr - AfwB3AGcAQAB/wHgAZ0BAAH/AecBoQEAAf8B7QGmAQAB/wHzAasBAAH/AfgBsQEAAf8B+QGyAQAB/wH4 - AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzAT4BAAH/AcABqwGc - Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy - AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASkBDwEA - Af+AAAGlASwBAAH/AdwBqQEbAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ - AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEdAf8BswE+ - AQAB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr - AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ - AecBxwGyAf8BKQEPAQAB/4AAAaUBLAEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl - Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEkAf8BswE+AQAB/wM4AVwEAAHD - Aa4BnwH/Af0B+wH4Af8B/AH4AfYB/wH7AfYB8gH/AfoB8wHvAf8B+QHwAeoB/wH4AfEB7AH/AfgB7wHp - Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEp - AQ8BAAH/gAADQwF3AaUBLAEAAf8BpQEsAQAB/wGlASwBAAH/AaUBLAEAAf8BpQEsAQAB/wGlASwBAAH/ - AaUBLAEAAf8BpQEsAQAB/wH4AbwBBwH/AfsBwQEJAf8B/AHSAT4B/wGzAT4BAAH/AzgBXAgAAcUBrwGg - Af8B/gH7AfgB/wH9AfoB+QH/AfwB+AH1Af8B+wH1AfIB/wH6AfIB7gH/AfkB8QHsAf8BvQGpAZsB/wG9 - AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEpAQ8BAAH/ASkBDwEA - Af+gAAGlASwBAAH/AfMBtgECAf8B+wHQAT0B/wGzAT4BAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ - AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BNgEdAQoB/wHWAdEBzgH/AckBxAHA - Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wFCASkBFwH/pAABpQEsAQAB/wHzAcgBOAH/ - AbMBPgEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 - AfYB8gH/AZ0BiAE8Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt - Af8BngGKAUAB/6QAAaUBLAEAAf8BswE+AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB - AasBnAH/Ab4BqQGaAf8BuwGmAZcB/wG5AaQBlQH/AbcBogGTAf8B2AHHAbwB/wHOAbwBrgH/AcgBtAGn - Af8BwwGuAaAB/wG8AacBmAH/AbkBpAGVAf8BrQGZAYwB/6QAA1MBqgM4AVz/ANkAAUIBTQE+BwABPgMA - ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AT8C/wQAAf8BHwYAAf8BDwYAAf8BBwcAAQMHAAEB - HwABAQcAAQMGAAH/AQcBAAEBBAAB/wEPAQABAQQAAf8BHwEAAQEEAAH/AT8C/wQABP8EAAs= + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAy + CwAAAk1TRnQBSQFMAgEBAgIAAQIBAAECARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA + ARADAAEBAQABIAYAARAyAANTAaoDOAFc+AABuAFCAQAB/wG4AUIBAAH/AzgBXBQAAbgBowGUAf8BJwEN + AQAB/wEnAQ0BAAH/AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/ + AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/AScBDQEAAf+gAAG4 + AUIBAAH/AfEBzAGOAf8BuAFCAQAB/wM4AVwQAAG5AaQBlQH/AfUB6AHfAf8B8AHcAc4B/wHvAdkBywH/ + Ae0B0gHDAf8B6QHNAbsB/wHoAcgBswH/AeYBxAGvAf8B5AHAAakB/wHjAb0BpAH/AeMBvAGlAf8B4gG8 + AaMB/wHiAbsBowH/AeIBuAGeAf8B3wG2AZ0B/wEnAQ0BAAH/oAABuAFCAQAB/wHwAcABMAH/Ae8BygGM + Af8BuAFCAQAB/wM4AVwMAAG6AaUBlgH/AfkB8QHsAf8B9gHqAeMB/wH1AecB3gH/AfMB4wHZAf8B8gHg + AdUB/wHwAdwB0AH/Ae8B2QHLAf8B7QHVAcYB/wHsAdIBwgH/AekBzQG5Af8B5wHIAbMB/wHmAcMBrQH/ + AeQBvQGmAf8B4QG3AZ4B/wEnAQ0BAAH/gAADQwF3AbgBQgEAAf8BuAFCAQAB/wG4AUIBAAH/AbgBQgEA + Af8BuAFCAQAB/wG4AUIBAAH/AbgBQgEAAf8BuAFCAQAB/wHzAcUBMgH/AeUBmQEAAf8B7wHLAYwB/wG4 + AUIBAAH/A0oBiggAAbwBpgGXAf8B+QHzAe4B/wH3Ae0B5gH/AfYB6gHiAf8B9QHmAd0B/wHzAeMB2AH/ + AfIB3wHUAf8B8AHcAc8B/wHvAdgBygH/Ae0B1QHFAf8B7AHRAcEB/wHqAc4BvQH/AekBygG3Af8B5wHE + AbAB/wHjAb0BpQH/AScBDQEAAf+AAAGlASoBAAH/AekBugErAf8B7gHBATAB/wH0AccBMwH/AfcBzAE1 + Af8B+gHPATcB/wH7Ac8BNwH/AfsBzwE3Af8B+QHMATYB/wHyAbEBAAH/AesBoQEAAf8B5QGZAQAB/wHv + AcoBjAH/AbIBOgEAAf8DOAFcBAABvQGoAZkB/wH6AfUB8QH/AfgB7wHqAf8B9wHsAeUB/wH2AekB4QH/ + AfQB5QHcAf8B8wHiAdcB/wHxAd4B0wH/AfAB2wHOAf8B7gHXAckB/wHtAdQBxAH/AesB0QHAAf8B6gHM + AbsB/wHnAcYBswH/AeQBvgGnAf8BJwENAQAB/4AAAaUBKgEAAf8BZQFNASsB/AHdAZQBAAH/AeQBmwEA + Af8B7QGlAQAB/wHzAawBAAH/AfgBsQEAAf8B+QGyAQAB/wH5AbEBAAH/AfUBrQEAAf8B8gGnAQAB/wHs + AaABAAH/AeQBlgEAAf8B7wHJAYsB/wGyAToBAAH/AzgBXAG/AakBmgH/AfsB9gHyAf8B+QHyAe0B/wH4 + Ae8B6QH/AfcB6wHkAf8B9QHoAeAB/wH0AeUB2wH/AfIB4QHWAf8B8QHeAdIB/wHvAdoBzQH/Ae4B1wHI + Af8B7QHTAcMB/wHrAdABvwH/AeoBzAG5Af8B4wG+AacB/wEnAQ0BAAH/gAABpQEqAQAB/wFlAVMBKwH8 + AdwBnAEAAf8B4AGdAQAB/wHnAaEBAAH/Ae0BpgEAAf8B8wGrAQAB/wH4AbEBAAH/AfkBsgEAAf8B+AGx + AQAB/wH1Aa0BAAH/AfEBpgEAAf8B6gGeAQAB/wHiAZUBAAH/Ae8BzAGSAf8BswE8AQAB/wHAAasBnAH/ + AfwB9wH0Af8B+gH0AfAB/wH5AfEB7AH/AfgB7gHoAf8B9gHrAeQB/wH1AecB3wH/AfQB5AHaAf8B8gHg + AdUB/wHxAd0B0QH/Ae8B2QHMAf8B7gHWAccB/wHsAdMBwwH/AesBzwG+Af8B5AHAAaoB/wEnAQ0BAAH/ + gAABpQEqAQAB/wHcAakBGQH/AdcBmQEAAf8B3gGgAQAB/wHkAaYBAAH/AeoBqwEAAf8B8AGuAQAB/wH0 + Aa8BAAH/AfcBsQEAAf8B+QGxAQAB/wH4Aa8BAAH/AfQBqwEAAf8B8AGlAQAB/wHwAboBGwH/AbMBPAEA + Af8DOAFcAcIBrAGdAf8B/AH5AfcB/wH7AfYB8wH/AfoB9AHvAf8B+QHxAesB/wH4Ae0B5wH/AfcB6wHl + Af8B9gHpAeEB/wH0AeUB3AH/AfMB4wHYAf8B8QHfAdQB/wHwAdwB0AH/Ae8B2QHLAf8B7gHWAcgB/wHn + AccBsgH/AScBDQEAAf+AAAGlASoBAAH/A1wB3wJkAVwB5wJlAV4B5QJlAV4B5QJlAV4B5QJlAV4B5QJf + AVgB4wJkAVMB8QH6AbkBAAH/AfoBuAEAAf8B+AGyAQAB/wH3AcQBIgH/AbMBPAEAAf8DOAFcBAABwwGu + AZ8B/wH9AfsB+AH/AfwB+AH2Af8B+wH2AfIB/wH6AfMB7wH/AfkB8AHqAf8B+AHxAewB/wH4Ae8B6QH/ + AfYB7QHmAf8B9gHqAeIB/wH1AekB4AH/AfUB5QHeAf8B9AHkAdoB/wHzAeEB1wH/Ae8B2AHKAf8BJwEN + AQAB/4AAA0MBdwGlASoBAAH/AaUBKgEAAf8BpQEqAQAB/wGlASoBAAH/AaUBKgEAAf8BpQEqAQAB/wGl + ASoBAAH/AaUBKgEAAf8B+AG8AQUB/wH7AcEBBwH/AfwB0gE8Af8BswE8AQAB/wM4AVwIAAHFAa8BoAH/ + Af4B+wH4Af8B/QH6AfkB/wH8AfgB9QH/AfsB9QHyAf8B+gHyAe4B/wH5AfEB7AH/Ab0BqQGbAf8BvQGp + AZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BJwENAQAB/wEnAQ0BAAH/ + oAABpQEqAQAB/wHzAbYBAAH/AfsB0AE7Af8BswE8AQAB/wM4AVwMAAHGAbABoQH/Af4B+wH6Af8B/gH8 + AfsB/wH9AfoB+AH/AfwB9wH0Af8B+wH1AfEB/wH6AfMB7gH/ATQBGwEIAf8B1gHRAc4B/wHJAcQBwAH/ + AcEBuwG3Af8BuQGyAawB/wG1Aa0BpwH/AbIBqQGiAf8BQAEnARUB/6QAAaUBKgEAAf8B8wHIATYB/wGz + ATwBAAH/AzgBXBAAAccBsQGiAv8B+wH6Af8B/gL8Af8B/gH7AfkB/wH9AfkB9wH/AfsB9wH0Af8B+gH2 + AfIB/wGdAYgBOgH/AeAB3AHaAf8B3AHaAdcB/wHSAdEBzwH/AdUB1AHSAf8BywHIAcYB/wG5AbMBrQH/ + AZ4BigE+Af+kAAGlASoBAAH/AbMBPAEAAf8DOAFcFAAByAGyAaMB/wHGAbABoQH/AcQBrgGfAf8BwQGr + AZwB/wG+AakBmgH/AbsBpgGXAf8BuQGkAZUB/wG3AaIBkwH/AdgBxwG8Af8BzgG8Aa4B/wHIAbQBpwH/ + AcMBrgGgAf8BvAGnAZgB/wG5AaQBlQH/Aa0BmQGMAf+kAANTAaoDOAFc/wDZAAFCAU0BPgcAAT4DAAEo + AwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/wE/Av8EAAH/AR8GAAH/AQ8GAAH/AQcHAAEDBwABAR8A + AQEHAAEDBgAB/wEHAQABAQQAAf8BDwEAAQEEAAH/AR8BAAEBBAAB/wE/Av8EAAT/BAAL @@ -881,7 +614,7 @@ NoControl - 3, 233 + 6, 233 125, 25 @@ -908,7 +641,7 @@ Top, Right - 368, 22 + 368, 23 60, 21 @@ -932,10 +665,10 @@ Top, Left, Right - 3, 23 + 6, 23 - 359, 20 + 356, 20 1 @@ -1034,13 +767,211 @@ tabProperties - 3 + 2 - - 22, 146 + + Bottom, Left - - 253, 20 + + True + + + NoControl + + + 3, 241 + + + 289, 17 + + + 5 + + + Append recording details (channel name, schedule, etc) + + + checkAppendRecordingDetails + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageDescription + + + 0 + + + Top, Bottom, Left, Right + + + 3, 23 + + + True + + + 425, 212 + + + 4 + + + textTaskDescription + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageDescription + + + 1 + + + True + + + NoControl + + + 3, 7 + + + 202, 13 + + + 3 + + + Task and recording description (optional): + + + labelTaskDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageDescription + + + 2 + + + 4, 22 + + + 432, 261 + + + 3 + + + Description + + + tabPageDescription + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabProperties + + + 3 + + + True + + + NoControl + + + 270, 7 + + + 158, 17 + + + 13 + + + Add standard prefix to name + + + checkAddTaskPrefix + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdvanced + + + 0 + + + True + + + NoControl + + + 3, 8 + + + 184, 13 + + + 11 + + + Windows Task Scheduler task name: + + + labelTaskName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageAdvanced + + + 1 + + + Top, Left, Right + + + 6, 24 + + + 422, 20 + + + 12 + + + textTaskName + + + IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + tabPageAdvanced + + + 2 + + + 25, 194 + + + 253, 20 8 @@ -1055,10 +986,10 @@ tabPageAdvanced - 0 + 3 - 22, 97 + 25, 145 192, 20 @@ -1076,7 +1007,7 @@ tabPageAdvanced - 1 + 4 Run in paralel (record both) @@ -1091,7 +1022,7 @@ Stop previous recording and proceed - 22, 195 + 25, 233 307, 21 @@ -1109,7 +1040,7 @@ tabPageAdvanced - 2 + 5 True @@ -1118,7 +1049,7 @@ NoControl - 3, 179 + 3, 217 278, 13 @@ -1139,7 +1070,7 @@ tabPageAdvanced - 3 + 6 True @@ -1148,7 +1079,7 @@ NoControl - 3, 123 + 6, 171 309, 17 @@ -1169,10 +1100,10 @@ tabPageAdvanced - 4 + 7 - 352, 97 + 355, 145 35, 20 @@ -1190,7 +1121,7 @@ tabPageAdvanced - 5 + 8 True @@ -1199,7 +1130,7 @@ NoControl - 220, 99 + 223, 147 126, 13 @@ -1220,7 +1151,7 @@ tabPageAdvanced - 6 + 9 True @@ -1229,7 +1160,7 @@ NoControl - 3, 73 + 6, 122 211, 17 @@ -1250,7 +1181,7 @@ tabPageAdvanced - 7 + 10 True @@ -1259,7 +1190,7 @@ NoControl - 3, 50 + 6, 99 307, 17 @@ -1280,16 +1211,16 @@ tabPageAdvanced - 8 + 11 Top, Left, Right - 3, 23 + 6, 63 - 425, 21 + 422, 21 1 @@ -1304,7 +1235,7 @@ tabPageAdvanced - 9 + 12 True @@ -1313,7 +1244,7 @@ NoControl - 3, 7 + 3, 47 341, 13 @@ -1334,7 +1265,7 @@ tabPageAdvanced - 10 + 13 4, 22 @@ -1379,40 +1310,118 @@ $this + 4 + + + 172, 17 + + + Top, Left, Right + + + Segoe UI, 9.75pt, style=Italic + + + NoControl + + + 82, 58 + + + 370, 18 + + + 11 + + + (Program schedule) + + + MiddleLeft + + + labelProgramSchedule + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Top, Left, Right + + + Segoe UI, 9.75pt, style=Bold + + + NoControl + + + 82, 37 + + + 370, 18 + + + 10 + + + (Program description) + + + MiddleLeft + + + labelProgramDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 1 - - Segoe UI, 11pt, style=Bold + + Top, Left, Right - + + Segoe UI, 12pt, style=Bold + + NoControl - + 82, 12 - - 55, 64 + + 370, 22 - - 0 + + 9 - - ### + + (Channel name) - - MiddleCenter + + MiddleLeft - - labelChannelNumber + + labelChannelName - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 0 + + 2 NoControl @@ -1427,7 +1436,7 @@ CenterImage - 0 + 8 pictureChannelLogo @@ -1439,11 +1448,8 @@ $this - 6 + 3 - - 172, 17 - True diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs index 61f77f00..29202709 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs @@ -17,11 +17,29 @@ namespace IpTviewr.UiServices.Record { public class RecordHelper { - public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService service, EpgProgram program, DateTime localReferenceTime, bool allowRecordChannel = true) + public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService service) + { + if (service == null) throw new ArgumentNullException(nameof(service)); + if (VerifyIsInactive(ownerForm, service)) return false; + + var task = GetRecordTask(service, null, new DateTime()); + using (var dlg = new RecordChannelDialog()) + { + dlg.Task = task; + dlg.IsNewTask = true; + dlg.ShowDialog(ownerForm); + task = dlg.Task; + if (dlg.DialogResult != DialogResult.OK) return false; + } // using dlg + + return ScheduleTask(ownerForm, task); + } // RecordService + + public static bool RecordProgram(CommonBaseForm ownerForm, UiBroadcastService service, EpgProgram program, DateTime localReferenceTime, bool allowRecordChannel = true) { RecordProgramOptions.RecordOption option; - if (service == null) return false; + if (service == null) throw new ArgumentNullException(nameof(service)); if (VerifyIsInactive(ownerForm, service)) return false; // select record options @@ -38,7 +56,7 @@ public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService se if (option == RecordProgramOptions.RecordOption.None) return false; // create record task and allow to edit it - var task = CreateRecordTask(service, program); + var task = GetRecordTask(service, program, localReferenceTime); if (option != RecordProgramOptions.RecordOption.Default) { using (var dlg = new RecordChannelDialog()) @@ -51,18 +69,8 @@ public static bool RecordService(CommonBaseForm ownerForm, UiBroadcastService se } // using dlg } // if - // schedule task - var scheduler = new Scheduler(ownerForm.GetExceptionHandler(), - AppUiConfiguration.Current.Folders.RecordTasks, AppUiConfiguration.Current.User.Record.RecorderLauncherPath); - - if (scheduler.CreateTask(task)) - { - MessageBox.Show(ownerForm, Properties.Resources.SchedulerCreateTaskOk, ownerForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); - return true; - } // if - - return false; - } // RecordService + return ScheduleTask(ownerForm, task); + } // RecordProgram public static bool CanRecord(EpgProgram program, bool allowRecordChannel = true) { @@ -73,31 +81,36 @@ public static bool CanRecord(EpgProgram program, bool allowRecordChannel = true) return true; } // CanRecord - private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastService service) + public static RecordTask GetRecordTask(UiBroadcastService service, EpgProgram program, DateTime localReferenceTime) { - if (service.IsInactive) - { - var box = new ExceptionMessageBox() - { - Caption = ownerForm.Text, - Text = string.Format(Properties.Resources.RecordDeadTvChannel, service.DisplayName), - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Question, - Buttons = ExceptionMessageBoxButtons.YesNo, - DefaultButton = ExceptionMessageBoxDefaultButton.Button2, - }; + var channel = GetRecordChannel(service); - if (box.Show(ownerForm) != DialogResult.Yes) return true; + if ((program == null) || (program.IsBlank)) + { + return RecordTask.CreateWithDefaultValues(channel); } // if - return false; - } // VerifyIsInactive + var schedule = GetRecordSchedule(program, localReferenceTime); + var duration = GetRecordDuration(program); + var description = GetRecordDescription(program, channel); + var action = GetRecordAction(service, program); - private static RecordTask CreateRecordTask(UiBroadcastService service, EpgProgram program) - { - RecordChannel channel; + var task = new RecordTask() + { + Channel = channel, + Schedule = schedule, + Duration = duration, + Description = description, + Action = action, + AdvancedSettings = RecordAdvancedSettings.CreateWithDefaultValues(), + }; + + return task; + } // GetRecordTask - channel = new RecordChannel() + public static RecordChannel GetRecordChannel(UiBroadcastService service) + { + var channel = new RecordChannel() { LogicalNumber = service.DisplayLogicalNumber, Name = service.DisplayName, @@ -107,52 +120,96 @@ private static RecordTask CreateRecordTask(UiBroadcastService service, EpgProgra ChannelUrl = service.LocationUrl, }; - if ((program == null) || (program.IsBlank)) + return channel; + } // GetRecordChannel + + public static RecordSchedule GetRecordSchedule(EpgProgram program, DateTime localReferenceTime) + { + var isCurrent = program.IsCurrent(localReferenceTime); + var kind = isCurrent ? RecordScheduleKind.RightNow : RecordScheduleKind.OneTime; + var schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime) as RecordScheduleTime; + if (!isCurrent) schedule.StartDate = program.LocalStartTime; + schedule.ExpiryDate = program.LocalEndTime + program.Duration + RecordChannelDialog.DefaultExpiryDateTimeSpan; + + return schedule; + } // GetRecordSchedule + + private static RecordDuration GetRecordDuration(EpgProgram program) + { + var duration = RecordDuration.CreateWithDefaultValues(); + duration.Length = program.Duration; + + return duration; + } // GetRecordDuration + + private static RecordDescription GetRecordDescription(EpgProgram program, RecordChannel channel) + { + var description = RecordDescription.CreateWithDefaultValues(); + description.Name = RecordDescription.CreateTaskName(channel, program.LocalStartTime); + + /* var extended = program as EpgProgramExtended; + if (extended != null) { - return RecordTask.CreateWithDefaultValues(channel); + } - else + else */ { - var schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime) as RecordScheduleTime; - schedule.StartDate = program.LocalStartTime; - schedule.ExpiryDate = program.LocalEndTime + program.Duration + RecordChannelDialog.DefaultExpiryDateTimeSpan; + var buffer = new StringBuilder(); + buffer.AppendLine(program.Title); + buffer.Append(program.ParentalRating.Description); + description.Description = buffer.ToString(); + } // if-else - var duration = RecordDuration.CreateWithDefaultValues(); - duration.Length = program.Duration; + return description; + } // GetRecordDescription - var description = RecordDescription.CreateWithDefaultValues(); - description.Name = RecordDescription.CreateTaskName(channel, schedule.StartDate); - description.Description = program.ParentalRating.Description; + private static RecordAction GetRecordAction(UiBroadcastService service, EpgProgram program) + { + var action = RecordAction.CreateWithDefaultValues(); + var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppUiConfiguration.Current.User.Record.SaveLocations); - /* var extended = program as EpgProgramExtended; - if (extended != null) - { + action.Filename = string.Format("{0} - {1}", service.DisplayName, program.Title); + action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; + action.SaveLocationName = defaultLocation.Name; + action.SaveLocationPath = defaultLocation.Path; - } - else */ - { - description.Description = program.ParentalRating.Description; - } + return action; + } // GetRecordAction - var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppUiConfiguration.Current.User.Record.SaveLocations); - var action = RecordAction.CreateWithDefaultValues(); - action.Filename = string.Format("{0} - {1}", service.DisplayName, program.Title); - action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; - action.SaveLocationName = defaultLocation.Name; - action.SaveLocationPath = defaultLocation.Path; - var task = new RecordTask() + private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastService service) + { + if (service.IsInactive) + { + var box = new ExceptionMessageBox() { - Channel = channel, - Schedule = schedule, - Duration = duration, - Description = description, - Action = RecordAction.CreateWithDefaultValues(), - AdvancedSettings = RecordAdvancedSettings.CreateWithDefaultValues(), + Caption = ownerForm.Text, + Text = string.Format(Properties.Resources.RecordDeadTvChannel, service.DisplayName), + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Question, + Buttons = ExceptionMessageBoxButtons.YesNo, + DefaultButton = ExceptionMessageBoxDefaultButton.Button2, }; - return task; - } // if-else - } // CreateRecordTask + if (box.Show(ownerForm) != DialogResult.Yes) return true; + } // if + + return false; + } // VerifyIsInactive + + private static bool ScheduleTask(CommonBaseForm ownerForm, RecordTask task) + { + // schedule task + var scheduler = new Scheduler(ownerForm.GetExceptionHandler(), + AppUiConfiguration.Current.Folders.RecordTasks, AppUiConfiguration.Current.User.Record.RecorderLauncherPath); + + if (scheduler.CreateTask(task)) + { + MessageBox.Show(ownerForm, Properties.Resources.SchedulerCreateTaskOk, ownerForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + return true; + } // if + + return false; + } // ScheduleTask } // class RecordHelper } // namespace From f12c637f192afc381d6aefa4d75cc7687e8574ba Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 01:06:41 +0200 Subject: [PATCH 49/76] Services.Record.Serialization Added RecordProgram --- .../RecordProgram.cs | 51 +++++++++++++++++++ .../RecordTask.cs | 6 +++ .../Services.Record.Serialization.csproj | 1 + 3 files changed, 58 insertions(+) create mode 100644 1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs new file mode 100644 index 00000000..a25cc4b3 --- /dev/null +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs @@ -0,0 +1,51 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + + public class RecordProgram + { + public string Title + { + get; + set; + } // Title + + public DateTime UtcStartTime + { + get; + set; + } // UtcStartTime + + public DateTime UtcEndTime + { + get; + set; + } // UtcEndTime + + [XmlIgnore] + public DateTime LocalStartTime + { + get { return UtcStartTime.ToLocalTime(); } + } // LocalStartTime + + [XmlIgnore] + public DateTime LocalEndTime + { + get { return UtcEndTime.ToLocalTime(); } + } // LocalEndTime + + [XmlIgnore] + public TimeSpan Duration + { + get { return UtcEndTime - UtcStartTime; } + } // Duration + } // class RecordProgram +} // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs index e8911e6b..32d3b15d 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs @@ -35,6 +35,12 @@ public RecordChannel Channel set; } // Channel + public RecordProgram Program + { + get; + set; + } // Program + [XmlElement("RightNow", typeof(RecordRightNow))] [XmlElement("OneTimeSchedule", typeof(RecordOneTime))] [XmlElement("DailySchedule", typeof(RecordDaily))] diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj index 60da51cf..0dc4217d 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj @@ -66,6 +66,7 @@ + From 4e03ebc42e2bb4f1773c54d84d81d031c5ac4887 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 01:07:00 +0200 Subject: [PATCH 50/76] UiServices.Record --- .../UiServices.Record/RecordChannelDialog.cs | 29 ++++++++++++++++--- .../UiServices.Record/RecordHelper.cs | 27 +++++++++++++---- .../UiServices.Record/RecordProgramOptions.cs | 7 ++++- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index b683cc9f..a0ec50fd 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -1,6 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +using IpTviewr.Common; using IpTviewr.Common.Telemetry; using IpTviewr.Services.Record.Serialization; using IpTviewr.UiServices.Common.Forms; @@ -41,6 +42,12 @@ public bool IsNewTask set; } // IsNewTask + public DateTime LocalReferenceTime + { + get; + set; + } // LocalReferenceTime + public static string[] GetFilenameExtensions() { var separators = new string[] { "\r\n" }; @@ -52,6 +59,8 @@ public static string[] GetFilenameExtensions() public RecordChannelDialog() { InitializeComponent(); + Icon = Properties.Resources.Icon_Recorder; + LocalReferenceTime = DateTime.Now; } // constructor #region Form events @@ -116,16 +125,28 @@ private void DialogRecordChannel_Shown_Implementation(object sender, EventArgs e private void InitGeneralData() { + // service logo var serviceLogo = AppUiConfiguration.Current.ServiceLogoMappings.FromServiceKey(Task.Channel.ServiceKey); pictureChannelLogo.Image = serviceLogo.GetImage(LogoSize.Size64); + // service name labelChannelName.Text = string.Format("{0} {1}", Task.Channel.LogicalNumber, Task.Channel.Name); - labelChannelName.Top = pictureChannelLogo.Top; - labelChannelName.Height = pictureChannelLogo.Height; + // program name + if (Task.Program != null) + { + labelProgramDescription.Text = Task.Program.Title; + labelProgramSchedule.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(Task.Program.LocalStartTime, Task.Program.LocalEndTime, LocalReferenceTime), + FormatString.TimeSpanTotalMinutes(Task.Program.Duration, FormatString.Format.Extended)); + } + else + { + labelChannelName.Top = pictureChannelLogo.Top; + labelChannelName.Height = pictureChannelLogo.Height; - labelProgramDescription.Visible = false; - labelProgramSchedule.Visible = false; + labelProgramDescription.Visible = false; + labelProgramSchedule.Visible = false; + } // if-else } // InitGeneralData private void GetGeneralData() diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs index 29202709..091797bd 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs @@ -63,6 +63,7 @@ public static bool RecordProgram(CommonBaseForm ownerForm, UiBroadcastService se { dlg.Task = task; dlg.IsNewTask = true; + dlg.LocalReferenceTime = localReferenceTime; dlg.ShowDialog(ownerForm); task = dlg.Task; if (dlg.DialogResult != DialogResult.OK) return false; @@ -81,23 +82,25 @@ public static bool CanRecord(EpgProgram program, bool allowRecordChannel = true) return true; } // CanRecord - public static RecordTask GetRecordTask(UiBroadcastService service, EpgProgram program, DateTime localReferenceTime) + public static RecordTask GetRecordTask(UiBroadcastService service, EpgProgram epgProgram, DateTime localReferenceTime) { var channel = GetRecordChannel(service); - if ((program == null) || (program.IsBlank)) + if (epgProgram == null) { return RecordTask.CreateWithDefaultValues(channel); } // if - var schedule = GetRecordSchedule(program, localReferenceTime); - var duration = GetRecordDuration(program); - var description = GetRecordDescription(program, channel); - var action = GetRecordAction(service, program); + RecordProgram program = GetRecordProgram(epgProgram); + var schedule = GetRecordSchedule(epgProgram, localReferenceTime); + var duration = GetRecordDuration(epgProgram); + var description = GetRecordDescription(epgProgram, channel); + var action = GetRecordAction(service, epgProgram); var task = new RecordTask() { Channel = channel, + Program = program, Schedule = schedule, Duration = duration, Description = description, @@ -123,6 +126,18 @@ public static RecordChannel GetRecordChannel(UiBroadcastService service) return channel; } // GetRecordChannel + private static RecordProgram GetRecordProgram(EpgProgram epgProgram) + { + var program = new RecordProgram() + { + Title = epgProgram.Title, + UtcStartTime = epgProgram.UtcStartTime, + UtcEndTime = epgProgram.UtcEndTime, + }; + + return program; + } // GetRecordProgram + public static RecordSchedule GetRecordSchedule(EpgProgram program, DateTime localReferenceTime) { var isCurrent = program.IsCurrent(localReferenceTime); diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs index ca91a482..ecdd662c 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs @@ -82,7 +82,12 @@ private void RecordProgramOptions_Load(object sender, EventArgs e) { pictureIconInfo.Image = Properties.Resources.Status_Info_16x16; labelInfo.Text = Properties.RecordChannel.SelectedProgramIsRightNow; - } // if-else if + } + else + { + pictureIconInfo.Visible = false; + labelInfo.Visible = false; + } } // if-else // radio buttons From 6e86e01db601312f1340fab987b29f6f7377faa2 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 01:29:45 +0200 Subject: [PATCH 51/76] UiServices.EPG work in progress Remodeled EpgMiniGuide Added EpgMiniGuideButtons (inherits EpgMiniGuide) EpgBasicGridDialog uses new EpgMiniGuideButtons --- .../EpgBasicGridDialog.Designer.cs | 60 ++-- .../UiServices.EPG/EpgBasicGridDialog.resx | 19 +- .../UiServices.EPG/EpgMiniGuide.Designer.cs | 82 ++--- .../UiServices.EPG/EpgMiniGuide.cs | 4 +- .../UiServices.EPG/EpgMiniGuide.resx | 262 +++++++-------- .../EpgMiniGuideButtons.Designer.cs | 87 +++++ .../UiServices.EPG/EpgMiniGuideButtons.cs | 23 ++ .../EpgMiniGuideButtons.es.resx | 129 ++++++++ .../UiServices.EPG/EpgMiniGuideButtons.resx | 299 ++++++++++++++++++ .../Properties/Resources.Designer.cs | 20 ++ .../UiServices.EPG/Properties/Resources.resx | 6 + .../Resources/Action_Epg_Play_16x16.png | Bin 0 -> 615 bytes .../Resources/Action_Epg_Record_16x16.png | Bin 0 -> 542 bytes .../UiServices.EPG/UiServices.EPG.csproj | 15 + 14 files changed, 779 insertions(+), 227 deletions(-) create mode 100644 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs create mode 100644 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs create mode 100644 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.es.resx create mode 100644 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx create mode 100644 1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Play_16x16.png create mode 100644 1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Record_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs index c84254ca..e73d8411 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs @@ -33,14 +33,15 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EpgBasicGridDialog)); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); this.dataGridPrograms = new System.Windows.Forms.DataGridView(); this.buttonOk = new System.Windows.Forms.Button(); - this.pictureProgramThumbnail = new IpTviewr.UiServices.EPG.EpgProgramPictureBox(); - this.epgMiniGuide = new IpTviewr.UiServices.EPG.EpgMiniGuide(); this.columnChannel = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramNow = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramThen = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramAfter = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.pictureProgramThumbnail = new IpTviewr.UiServices.EPG.EpgProgramPictureBox(); + this.epgMiniGuide = new IpTviewr.UiServices.EPG.EpgMiniGuideButtons(); ((System.ComponentModel.ISupportInitialize)(this.dataGridPrograms)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureProgramThumbnail)).BeginInit(); this.SuspendLayout(); @@ -51,9 +52,14 @@ private void InitializeComponent() this.dataGridPrograms.AllowUserToDeleteRows = false; resources.ApplyResources(this.dataGridPrograms, "dataGridPrograms"); this.dataGridPrograms.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.dataGridPrograms.BackgroundColor = System.Drawing.SystemColors.Control; this.dataGridPrograms.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.dataGridPrograms.CausesValidation = false; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridPrograms.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.dataGridPrograms.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridPrograms.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.columnChannel, @@ -65,8 +71,8 @@ private void InitializeComponent() this.dataGridPrograms.Name = "dataGridPrograms"; this.dataGridPrograms.ReadOnly = true; this.dataGridPrograms.RowHeadersVisible = false; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.dataGridPrograms.RowsDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.dataGridPrograms.RowsDefaultCellStyle = dataGridViewCellStyle2; this.dataGridPrograms.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.dataGridPrograms.ShowEditingIcon = false; this.dataGridPrograms.ShowRowErrors = false; @@ -80,26 +86,6 @@ private void InitializeComponent() this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // - // pictureProgramThumbnail - // - resources.ApplyResources(this.pictureProgramThumbnail, "pictureProgramThumbnail"); - this.pictureProgramThumbnail.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.pictureProgramThumbnail.Cursor = System.Windows.Forms.Cursors.Hand; - this.pictureProgramThumbnail.InitialImage = global::IpTviewr.UiServices.EPG.Properties.Resources.EpgNoProgramImage; - this.pictureProgramThumbnail.Name = "pictureProgramThumbnail"; - this.pictureProgramThumbnail.TabStop = false; - // - // epgMiniGuide - // - this.epgMiniGuide.AutoRefresh = false; - this.epgMiniGuide.BackColor = System.Drawing.SystemColors.Control; - this.epgMiniGuide.BasicGridEnabled = false; - this.epgMiniGuide.DetailsEnabled = false; - this.epgMiniGuide.IsDisabled = false; - resources.ApplyResources(this.epgMiniGuide, "epgMiniGuide"); - this.epgMiniGuide.ManualActions = false; - this.epgMiniGuide.Name = "epgMiniGuide"; - // // columnChannel // this.columnChannel.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; @@ -128,13 +114,33 @@ private void InitializeComponent() this.columnProgramAfter.Name = "columnProgramAfter"; this.columnProgramAfter.ReadOnly = true; // + // pictureProgramThumbnail + // + resources.ApplyResources(this.pictureProgramThumbnail, "pictureProgramThumbnail"); + this.pictureProgramThumbnail.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.pictureProgramThumbnail.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureProgramThumbnail.InitialImage = global::IpTviewr.UiServices.EPG.Properties.Resources.EpgNoProgramImage; + this.pictureProgramThumbnail.Name = "pictureProgramThumbnail"; + this.pictureProgramThumbnail.TabStop = false; + // + // epgMiniGuide + // + resources.ApplyResources(this.epgMiniGuide, "epgMiniGuide"); + this.epgMiniGuide.AutoRefresh = false; + this.epgMiniGuide.BackColor = System.Drawing.SystemColors.Control; + this.epgMiniGuide.BasicGridEnabled = false; + this.epgMiniGuide.DetailsEnabled = false; + this.epgMiniGuide.IsDisabled = false; + this.epgMiniGuide.ManualActions = false; + this.epgMiniGuide.Name = "epgMiniGuide"; + // // EpgBasicGridDialog // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonOk); this.Controls.Add(this.pictureProgramThumbnail); this.Controls.Add(this.epgMiniGuide); - this.Controls.Add(this.buttonOk); this.Controls.Add(this.dataGridPrograms); this.MinimizeBox = false; this.Name = "EpgBasicGridDialog"; @@ -150,7 +156,7 @@ private void InitializeComponent() private System.Windows.Forms.DataGridView dataGridPrograms; private System.Windows.Forms.Button buttonOk; - private IpTviewr.UiServices.EPG.EpgMiniGuide epgMiniGuide; + private IpTviewr.UiServices.EPG.EpgMiniGuideButtons epgMiniGuide; private IpTviewr.UiServices.EPG.EpgProgramPictureBox pictureProgramThumbnail; private System.Windows.Forms.DataGridViewTextBoxColumn columnChannel; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramNow; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx index 45cef33b..16d8e827 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx @@ -172,7 +172,7 @@ 100, 25 - 34 + 2 &Close @@ -193,7 +193,7 @@ $this - 2 + 0 Bottom, Left @@ -217,34 +217,37 @@ pictureProgramThumbnail - IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.EPG.EpgProgramPictureBox, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this - 0 + 1 + + + Bottom, Left, Right 138, 312 - 484, 57 + 484, 88 - 35 + 1 epgMiniGuide - IpTviewr.UiServices.EPG.EpgMiniGuide, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.EPG.EpgMiniGuideButtons, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this - 1 + 2 True diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs index 293f62d6..f5700fb4 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs @@ -40,13 +40,13 @@ private void InitializeComponent() this.timerAutoRefresh = new System.Windows.Forms.Timer(this.components); this.timerLoadingData = new System.Windows.Forms.Timer(this.components); this.toolTipControl = new System.Windows.Forms.ToolTip(this.components); + this.buttonRecordChannel = new System.Windows.Forms.Button(); + this.buttonDisplayChannel = new System.Windows.Forms.Button(); + this.buttonFullView = new System.Windows.Forms.Button(); this.buttonDetails = new System.Windows.Forms.Button(); this.buttonEpgGrid = new System.Windows.Forms.Button(); this.buttonForward = new System.Windows.Forms.Button(); this.buttonBack = new System.Windows.Forms.Button(); - this.buttonFullView = new System.Windows.Forms.Button(); - this.buttonRecordChannel = new System.Windows.Forms.Button(); - this.buttonDisplayChannel = new System.Windows.Forms.Button(); this.labelFromTo = new System.Windows.Forms.Label(); this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); this.epgProgressBar = new IpTviewr.UiServices.EPG.EpgProgressBarFixed(); @@ -90,6 +90,36 @@ private void InitializeComponent() this.toolTipControl.InitialDelay = 750; this.toolTipControl.ReshowDelay = 100; // + // buttonRecordChannel + // + resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); + this.buttonRecordChannel.FlatAppearance.BorderSize = 0; + this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.Properties.Resources.Action_Epg_Record_16x16; + this.buttonRecordChannel.Name = "buttonRecordChannel"; + this.toolTipControl.SetToolTip(this.buttonRecordChannel, resources.GetString("buttonRecordChannel.ToolTip")); + this.buttonRecordChannel.UseVisualStyleBackColor = false; + this.buttonRecordChannel.Click += new System.EventHandler(this.buttonRecordChannel_Click); + // + // buttonDisplayChannel + // + resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); + this.buttonDisplayChannel.FlatAppearance.BorderSize = 0; + this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.Properties.Resources.Action_Epg_Play_16x16; + this.buttonDisplayChannel.Name = "buttonDisplayChannel"; + this.toolTipControl.SetToolTip(this.buttonDisplayChannel, resources.GetString("buttonDisplayChannel.ToolTip")); + this.buttonDisplayChannel.UseVisualStyleBackColor = false; + this.buttonDisplayChannel.Click += new System.EventHandler(this.buttonDisplayChannel_Click); + // + // buttonFullView + // + resources.ApplyResources(this.buttonFullView, "buttonFullView"); + this.buttonFullView.FlatAppearance.BorderSize = 0; + this.buttonFullView.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_FullView_16x16; + this.buttonFullView.Name = "buttonFullView"; + this.toolTipControl.SetToolTip(this.buttonFullView, resources.GetString("buttonFullView.ToolTip")); + this.buttonFullView.UseVisualStyleBackColor = true; + this.buttonFullView.Click += new System.EventHandler(this.buttonFullView_Click); + // // buttonDetails // resources.ApplyResources(this.buttonDetails, "buttonDetails"); @@ -131,36 +161,6 @@ private void InitializeComponent() this.buttonBack.UseVisualStyleBackColor = true; this.buttonBack.Click += new System.EventHandler(this.buttonBack_Click); // - // buttonFullView - // - resources.ApplyResources(this.buttonFullView, "buttonFullView"); - this.buttonFullView.FlatAppearance.BorderSize = 0; - this.buttonFullView.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_FullView_16x16; - this.buttonFullView.Name = "buttonFullView"; - this.toolTipControl.SetToolTip(this.buttonFullView, resources.GetString("buttonFullView.ToolTip")); - this.buttonFullView.UseVisualStyleBackColor = true; - this.buttonFullView.Click += new System.EventHandler(this.buttonFullView_Click); - // - // buttonRecordChannel - // - resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); - this.buttonRecordChannel.FlatAppearance.BorderSize = 0; - this.buttonRecordChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Record_16x16; - this.buttonRecordChannel.Name = "buttonRecordChannel"; - this.toolTipControl.SetToolTip(this.buttonRecordChannel, resources.GetString("buttonRecordChannel.ToolTip")); - this.buttonRecordChannel.UseVisualStyleBackColor = false; - this.buttonRecordChannel.Click += new System.EventHandler(this.buttonRecordChannel_Click); - // - // buttonDisplayChannel - // - resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); - this.buttonDisplayChannel.FlatAppearance.BorderSize = 0; - this.buttonDisplayChannel.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Play_LG_16x16; - this.buttonDisplayChannel.Name = "buttonDisplayChannel"; - this.toolTipControl.SetToolTip(this.buttonDisplayChannel, resources.GetString("buttonDisplayChannel.ToolTip")); - this.buttonDisplayChannel.UseVisualStyleBackColor = false; - this.buttonDisplayChannel.Click += new System.EventHandler(this.buttonDisplayChannel_Click); - // // labelFromTo // resources.ApplyResources(this.labelFromTo, "labelFromTo"); @@ -205,21 +205,21 @@ private void InitializeComponent() #endregion private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureChannelLogo; - private System.Windows.Forms.Button buttonBack; - private System.Windows.Forms.Label labelProgramTitle; - private System.Windows.Forms.Button buttonForward; private System.Windows.Forms.Label labelStartTime; private System.Windows.Forms.Label labelEndTime; private System.Windows.Forms.Label labelEllapsed; private EpgProgressBarFixed epgProgressBar; - private System.Windows.Forms.Button buttonEpgGrid; - private System.Windows.Forms.Button buttonDetails; private System.Windows.Forms.Timer timerAutoRefresh; private System.Windows.Forms.Timer timerLoadingData; private System.Windows.Forms.ToolTip toolTipControl; private System.Windows.Forms.Label labelFromTo; - private System.Windows.Forms.Button buttonFullView; - private System.Windows.Forms.Button buttonRecordChannel; - private System.Windows.Forms.Button buttonDisplayChannel; + protected System.Windows.Forms.Button buttonRecordChannel; + protected System.Windows.Forms.Button buttonDisplayChannel; + protected System.Windows.Forms.Button buttonEpgGrid; + protected System.Windows.Forms.Button buttonDetails; + protected System.Windows.Forms.Button buttonFullView; + protected System.Windows.Forms.Button buttonBack; + protected System.Windows.Forms.Label labelProgramTitle; + protected System.Windows.Forms.Button buttonForward; } // class EpgMiniBar } // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs index b1272f44..0d974403 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs @@ -159,8 +159,8 @@ public void ClearEpgPrograms() epgProgressBar.Visible = false; EnableBackForward(false, false); - buttonEpgGrid.Enabled = BasicGridEnabled; - buttonFullView.Enabled = false; + buttonEpgGrid.Visible = BasicGridEnabled; + buttonFullView.Visible = false; buttonDetails.Enabled = false; var enableButtons = (SelectedService != null) && (!SelectedService.IsHidden); diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx index bebd3983..e8be864a 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx @@ -156,9 +156,6 @@ 10 - - Bottom, Left - NoControl @@ -189,9 +186,6 @@ 8 - - Bottom, Left - NoControl @@ -222,9 +216,6 @@ 7 - - Bottom, Left, Right - NoControl @@ -232,7 +223,7 @@ 310, 31 - 104, 20 + 185, 20 6 @@ -264,6 +255,114 @@ 313, 17 + + Top, Right + + + Flat + + + NoControl + + + 547, 31 + + + 20, 20 + + + 11 + + + Record selected program or channel + + + buttonRecordChannel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Top, Right + + + Flat + + + NoControl + + + 547, 3 + + + 20, 20 + + + 12 + + + MiddleRight + + + Show selected channel + + + buttonDisplayChannel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top, Right + + + Flat + + + NoControl + + + 501, 31 + + + 3, 3, 1, 3 + + + 20, 20 + + + 10 + + + Show program details + + + False + + + buttonFullView + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + Top, Right @@ -274,7 +373,7 @@ NoControl - 439, 3 + 523, 3 3, 3, 1, 3 @@ -301,7 +400,7 @@ 3 - Bottom, Right + Top, Right Flat @@ -310,7 +409,7 @@ NoControl - 439, 31 + 523, 31 1, 3, 3, 3 @@ -346,7 +445,7 @@ NoControl - 417, 3 + 501, 3 20, 20 @@ -399,138 +498,6 @@ 11 - - Bottom, Right - - - Flat - - - NoControl - - - 417, 31 - - - 3, 3, 1, 3 - - - 20, 20 - - - 10 - - - Show program details - - - False - - - buttonFullView - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Bottom, Right - - - Flat - - - MiddleLeft - - - NoControl - - - 463, 29 - - - 100, 25 - - - 11 - - - Rec&ord... - - - MiddleRight - - - ImageBeforeText - - - Record selected program or channel - - - buttonRecordChannel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - Top, Right - - - Flat - - - MiddleLeft - - - NoControl - - - 463, 3 - - - 100, 25 - - - 12 - - - &Show... - - - MiddleRight - - - ImageBeforeText - - - Show selected channel - - - buttonDisplayChannel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Bottom, Left - NoControl @@ -588,9 +555,6 @@ 12 - - Bottom, Left - 118, 31 diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs new file mode 100644 index 00000000..717a50e0 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs @@ -0,0 +1,87 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +namespace IpTviewr.UiServices.EPG +{ + partial class EpgMiniGuideButtons + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EpgMiniGuideButtons)); + this.SuspendLayout(); + // + // buttonRecordChannel + // + resources.ApplyResources(this.buttonRecordChannel, "buttonRecordChannel"); + this.buttonRecordChannel.FlatAppearance.BorderSize = 0; + this.buttonRecordChannel.UseVisualStyleBackColor = true; + // + // buttonDisplayChannel + // + resources.ApplyResources(this.buttonDisplayChannel, "buttonDisplayChannel"); + this.buttonDisplayChannel.FlatAppearance.BorderSize = 0; + this.buttonDisplayChannel.UseVisualStyleBackColor = true; + // + // buttonEpgGrid + // + this.buttonEpgGrid.FlatAppearance.BorderSize = 0; + // + // buttonDetails + // + resources.ApplyResources(this.buttonDetails, "buttonDetails"); + this.buttonDetails.FlatAppearance.BorderSize = 0; + // + // buttonFullView + // + this.buttonFullView.FlatAppearance.BorderSize = 0; + // + // buttonBack + // + this.buttonBack.FlatAppearance.BorderSize = 0; + // + // labelProgramTitle + // + resources.ApplyResources(this.labelProgramTitle, "labelProgramTitle"); + // + // buttonForward + // + this.buttonForward.FlatAppearance.BorderSize = 0; + this.buttonForward.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control; + resources.ApplyResources(this.buttonForward, "buttonForward"); + // + // EpgMiniGuideButtons + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "EpgMiniGuideButtons"; + this.ResumeLayout(false); + + } + + #endregion + } // class EpgMiniGuideButtons +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs new file mode 100644 index 00000000..744d1024 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs @@ -0,0 +1,23 @@ +// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury +// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.EPG +{ + public partial class EpgMiniGuideButtons : EpgMiniGuide + { + public EpgMiniGuideButtons() + { + InitializeComponent(); + } // constructor + } // class EpgMiniGuideButtons +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.es.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.es.resx new file mode 100644 index 00000000..d90c5981 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gra&bar... + + + &Ver canal + + + &Detalles... + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx new file mode 100644 index 00000000..f0807166 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bottom, Left + + + Standard + + + + 109, 63 + + + 100, 25 + + + Rec&ord... + + + MiddleRight + + + ImageBeforeText + + + buttonRecordChannel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Bottom, Left + + + Standard + + + 3, 63 + + + 100, 25 + + + &Show + + + ImageBeforeText + + + buttonDisplayChannel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + buttonEpgGrid + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Bottom, Left + + + Standard + + + 215, 63 + + + 100, 25 + + + &Details... + + + MiddleRight + + + ImageBeforeText + + + buttonDetails + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + buttonFullView + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + buttonBack + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + 356, 21 + + + labelProgramTitle + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + 439, 3 + + + buttonForward + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + True + + + 6, 13 + + + 465, 88 + + + EpgMiniGuideButtons + + + IpTviewr.UiServices.EPG.EpgMiniGuide, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs index 03ff76af..96fa3dfb 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs @@ -70,6 +70,26 @@ internal static System.Drawing.Bitmap Action_Epg_16x16 { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Epg_Play_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Epg_Play_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Epg_Record_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Epg_Record_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx index faa59230..d11754f8 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx +++ b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx @@ -121,6 +121,12 @@ ..\resources\action_epg_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\resources\action_epg_play_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\action_epg_record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\resources\epg.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Play_16x16.png b/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Play_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..44311b1b6301fef30663aecc2a699d9856982493 GIT binary patch literal 615 zcmV-t0+{`YP)WdLk-E+91^b7gQYATls9HXtxCIy5mlF)$!2FflMNwzzM#00007bV*G` z2jB?=7AqgSF>6`?000SaNLh0L01FZT01FZU(%pXi00004XF*Lt006O%3;baP0005L zNkluh^)Y7p3VP-7Z(1P?v=)A2uBOYTRts55eA_Y zp$c@T+t0WE|L@vgH=AXK zVTe$J&?W}nHr_k<41j?jzkmFncw*vz;Z9+=I{tS4OCSSo6Jx;Ne}DgPyS44V@V1$cEt4ES@Lc#Kg{onwgk5m>9(3#NvP%<|(es#NEpMNHj_`oQaKz0Vm*6;Nlhv z6N(Zl6`IZ8!oQ2JnQy01iO@`;5TS5RSxzo=^#ILsc%}~7kCy-d002ovPDHLkV1jJT B1tb6f literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Record_16x16.png b/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Record_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a52070b6616344f788f08bed3c68116a21aaf34 GIT binary patch literal 542 zcmV+(0^$9MP)7Rz%RjQZfq4LL?!Qf}lVm zutOjbc8e}1WD%j5MOH>Z|K4m^_631049we^-~Y|b?h<`j4Mf_0qP{Un3QkJW4jcQt z$1(bCsfnZkq8=GYO(_&F9;Fhc#(Ny&9M1g)4-t*XNzY%wAB3Jc_mjvVQTJcqQW0hZ zY?S-r(*6n;jTvUCS00Y&S)qVerNVSg4ZKxV@KjV_w!Z$&mt$-*b#?I7)(W2)W@%KC z0<5@TFd%z!f^0I0ZHEJiNCeksXE=|=FsIXD*X6?9)fMuY3_`7~q6%ioEgutqEHyRZ zsZc=JVnNjDL^hGYdRG@N;&JRxOyEA3!)iwd{3a88TCEUZ_LIPa{0CokHTH&wag$2n zV0;{hZa22Ua!Z7)r#eo7BSFiwHj-komgpa7gf9uvFu|k`y&0z gRWAE6mGhim0Xv6qeg+lLPyhe`07*qoM6N<$f{60wO#lD@ literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj index f266918a..f38c3365 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj +++ b/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj @@ -78,6 +78,12 @@ EpgMiniGuide.cs + + UserControl + + + EpgMiniGuideButtons.cs + Component @@ -120,6 +126,12 @@ + + EpgMiniGuideButtons.cs + + + EpgMiniGuideButtons.cs + ResXFileCodeGenerator Designer @@ -145,6 +157,7 @@ EpgMiniGuide.cs + Designer EpgNowThenDialog.cs @@ -181,6 +194,8 @@ + + From 2fb812ce25365d5e0d162a0aee87afa1424598fd Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 02:12:24 +0200 Subject: [PATCH 52/76] BackgroundWorkerDialog For short-lived background actions (by default 300ms), the dialog is not shown --- .../Forms/BackgroundWorkerDialog.Designer.cs | 8 +++++ .../Forms/BackgroundWorkerDialog.cs | 32 +++++++++++++------ .../Forms/BackgroundWorkerDialog.resx | 9 ++++++ .../Forms/BackgroundWorkerOptions.cs | 11 +++++++ 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs index b66a6c90..0b74fa5e 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs @@ -33,6 +33,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackgroundWorkerDialog)); this.pictureWaitIcon = new System.Windows.Forms.PictureBox(); this.labelTaskDescription = new System.Windows.Forms.Label(); @@ -40,6 +41,7 @@ private void InitializeComponent() this.labelProgressText = new System.Windows.Forms.Label(); this.buttonClose = new System.Windows.Forms.Button(); this.buttonRequestCancel = new System.Windows.Forms.Button(); + this.timerShow = new System.Windows.Forms.Timer(this.components); ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).BeginInit(); this.SuspendLayout(); // @@ -81,6 +83,10 @@ private void InitializeComponent() this.buttonRequestCancel.UseVisualStyleBackColor = true; this.buttonRequestCancel.Click += new System.EventHandler(this.buttonRequestCancel_Click); // + // timerShow + // + this.timerShow.Tick += new System.EventHandler(this.timerShow_Tick); + // // BackgroundWorkerDialog // this.AcceptButton = this.buttonClose; @@ -97,6 +103,7 @@ private void InitializeComponent() this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "BackgroundWorkerDialog"; + this.Opacity = 0D; this.ShowInTaskbar = false; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BackgroundWorkerDialog_FormClosing); this.Load += new System.EventHandler(this.BackgroundWorkerDialog_Load); @@ -115,5 +122,6 @@ private void InitializeComponent() private System.Windows.Forms.Label labelProgressText; private System.Windows.Forms.Button buttonClose; private System.Windows.Forms.Button buttonRequestCancel; + private System.Windows.Forms.Timer timerShow; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs index 474e62b6..3414e63e 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs @@ -54,11 +54,6 @@ private void BackgroundWorkerDialog_Load(object sender, EventArgs e) SafeCall(BackgroundWorkerDialog_Load_Implementation, sender, e); } // BackgroundWorkerDialog_Load - private void BackgroundWorkerDialog_Shown(object sender, EventArgs e) - { - SafeCall(BackgroundWorkerDialog_Shown_Implementation, sender, e); - } // BackgroundWorkerDialog_Shown - private void BackgroundWorkerDialog_FormClosing(object sender, FormClosingEventArgs e) { if (!formCanClose) @@ -91,14 +86,20 @@ private void BackgroundWorkerDialog_Load_Implementation(object sender, EventArgs labelProgressText.Text = null; progressBar.Style = ProgressBarStyle.Marquee; progressBar.Enabled = Options.AllowProgressBar; - buttonRequestCancel.Enabled = Options.AllowCancelButton; + // maintain the dialog 'hidden' for short-lived background tasks? + // fact: Windows doesn't allow to hide a modal dialog. Our trick: set the opacity to 0% + // and then back to 100% when the dialog must be shown + var milliseconds = (int)Options.ShowAfter.TotalMilliseconds; + if (milliseconds > 0) + { + timerShow.Interval = milliseconds; + timerShow.Start(); + } // if + Options.BeforeTask?.Invoke(Options, this); - } // BackgroundWorkerDialog_Load_Implementation - private void BackgroundWorkerDialog_Shown_Implementation(object sender, EventArgs e) - { worker = new BackgroundWorker(); worker.WorkerReportsProgress = false; worker.WorkerSupportsCancellation = true; @@ -107,7 +108,13 @@ private void BackgroundWorkerDialog_Shown_Implementation(object sender, EventArg worker.RunWorkerCompleted += Worker_RunWorkerCompleted; worker.RunWorkerAsync(Thread.CurrentThread); - } // BackgroundWorkerDialog_Shown_Implementation + } // BackgroundWorkerDialog_Load_Implementation + + private void timerShow_Tick(object sender, EventArgs e) + { + timerShow.Stop(); + Opacity = 1; + } // timerShow_Tick void Worker_DoWork(object sender, DoWorkEventArgs e) { @@ -285,5 +292,10 @@ private void SetProgressUndefined() } // SetProgressUndefined #endregion + + private void BackgroundWorkerDialog_Shown(object sender, EventArgs e) + { + if (!timerShow.Enabled) Opacity = 1; + } // BackgroundWorkerDialog_Shown } // class BackgroundWorkerDialog } // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx index 42ce2422..49dd1275 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx @@ -307,6 +307,9 @@ 1 + + 17, 17 + True @@ -322,6 +325,12 @@ Please wait... + + timerShow + + + System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + BackgroundWorkerDialog diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs index b809b71a..831c8f69 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs @@ -10,6 +10,17 @@ namespace IpTviewr.UiServices.Common.Forms { public class BackgroundWorkerOptions { + public BackgroundWorkerOptions() + { + ShowAfter = new TimeSpan(0, 0, 0, 0, 300); + } // BackgroundWorkerOptions + + public TimeSpan ShowAfter + { + get; + set; + } // ShowAfter + public string Caption { get; From 9937bf2e06ebf54899450f9a99048e260819525a Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 02:25:07 +0200 Subject: [PATCH 53/76] Updated Google Analytics TrackingId Changed from alpha phase to beta phase --- .../ChannelList/Properties/InvariantTexts.Designer.cs | 2 +- 1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs index 0221734e..6dca7516 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs +++ b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.Designer.cs @@ -61,7 +61,7 @@ internal InvariantTexts() { } /// - /// Looks up a localized string similar to UA-66146192-3. + /// Looks up a localized string similar to UA-66146192-4. /// internal static string AnalyticsGoogleTrackingId { get { diff --git a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx index 23386041..bd54463c 100644 --- a/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx +++ b/1.5 'Kruger 60'/ChannelList/Properties/InvariantTexts.resx @@ -112,13 +112,13 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - UA-66146192-3 + UA-66146192-4 Get new property for every new major version or new phase! From 0b25e31d31adb68b3dbed36a384aaddfc024735e Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 23:13:37 +0200 Subject: [PATCH 54/76] Services.Record.Serialization Deleted RecordSheduleTime class and moved code to RecordSchedule RecordDuration: added EndDateTime --- .../RecordDaily.cs | 2 +- .../RecordDuration.cs | 35 +++++ .../RecordMonthly.cs | 2 +- .../RecordOneTime.cs | 2 +- .../RecordRightNow.cs | 5 - .../RecordSchedule.cs | 128 ++++++++++++++++-- .../RecordScheduleTime.cs | 122 ----------------- .../RecordTask.cs | 16 ++- .../RecordWeekly.cs | 2 +- .../Services.Record.Serialization.csproj | 1 - 10 files changed, 165 insertions(+), 150 deletions(-) delete mode 100644 1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs index 89e42ea8..5ebe0fa4 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs @@ -11,7 +11,7 @@ namespace IpTviewr.Services.Record.Serialization { [Serializable] [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordDaily : RecordScheduleTime + public sealed class RecordDaily : RecordSchedule { public RecordDaily() { diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs index b6cdb1fd..e2115955 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs @@ -42,6 +42,34 @@ public string XmlLength set { Length = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } } // XmlTimeSpan + [XmlIgnore] + public DateTime? EndDateTime + { + get; + set; + } // EndDateTime + + [XmlElement("EndDateTime")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlEndDateTime + { + get + { + return (EndDateTime == null) ? null : XmlConvert.ToString(EndDateTime.Value, XmlDateTimeSerializationMode.RoundtripKind); + } // get + set + { + if (string.IsNullOrEmpty(value)) + { + EndDateTime = null; + } + else + { + EndDateTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + } // if-else + } // set + } // EndDateTime + /// /// Safety margin, in minutes, or null if there is no margin /// @@ -72,6 +100,13 @@ public TimeSpan SafetyMarginTimeSpan } // get } // SafetyMarginTimeSpan + public TimeSpan GetDuration(RecordSchedule schedule) + { + if (EndDateTime == null) return Length; + + return (EndDateTime.Value - schedule.GetStartDateTime()); + } // GetDuration + /// /// Creates a RecordDuration instance with default values /// diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs index 19cc0cf9..c8194ccc 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs @@ -11,7 +11,7 @@ namespace IpTviewr.Services.Record.Serialization { [Serializable] [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordMonthly : RecordScheduleTime + public class RecordMonthly : RecordSchedule { public override RecordScheduleKind Kind { diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs index f03cbff6..5167b664 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs @@ -11,7 +11,7 @@ namespace IpTviewr.Services.Record.Serialization { [Serializable] [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordOneTime : RecordScheduleTime + public sealed class RecordOneTime : RecordSchedule { public override RecordScheduleKind Kind { diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs index 8156c32d..232f4a82 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs @@ -32,10 +32,5 @@ public override DateTime GetStartDateTime() { return DateTime.Now; } // GetStartDateTime - - public override TimeSpan GetSafetyMargin() - { - return TimeSpan.Zero; - } // GetSafetyMargin } // class RecordRightNow } // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs index 741b59ae..92ff8fb9 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs @@ -3,15 +3,17 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; +using System.Xml; using System.Xml.Serialization; namespace IpTviewr.Services.Record.Serialization { [Serializable] [XmlInclude(typeof(RecordRightNow))] - [XmlInclude(typeof(RecordScheduleTime))] + [XmlInclude(typeof(RecordSchedule))] [XmlInclude(typeof(RecordOneTime))] [XmlInclude(typeof(RecordDaily))] [XmlInclude(typeof(RecordWeekly))] @@ -19,12 +21,6 @@ namespace IpTviewr.Services.Record.Serialization [XmlType(Namespace=RecordTask.XmlNamespace)] public abstract class RecordSchedule { - [XmlIgnore] - public abstract RecordScheduleKind Kind - { - get; - } // Kind - public static RecordSchedule CreateWithDefaultValues(RecordScheduleKind kind) { RecordSchedule schedule; @@ -44,16 +40,126 @@ public static RecordSchedule CreateWithDefaultValues(RecordScheduleKind kind) return schedule; } // CreateWithDefaultValues - public virtual string Verbalize(bool pastTime) + /// + /// Default safety margin, in minutes + /// + public static int DefaultSafetyMargin + { + get { return 5; } + } // DefaultSafetyMargin + + #region Properties + + [XmlIgnore] + public abstract RecordScheduleKind Kind + { + get; + } // Kind + + public DateTime StartDate + { + get; + set; + } // StartDate + + [XmlIgnore] + public DateTime? ExpiryDate + { + get; + set; + } // ExpiryDate + + [XmlElement(ElementName = "ExpiryDate")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlExpiryDate + { + get + { + return (ExpiryDate == null) ? null : XmlConvert.ToString(ExpiryDate.Value, XmlDateTimeSerializationMode.RoundtripKind); + } // get + set + { + if (string.IsNullOrEmpty(value)) + { + ExpiryDate = null; + } + else + { + ExpiryDate = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + } // if-else + } // set + } // ExpiryDate + + /// + /// Safety margin, in minutes, or null if there is no margin + /// + [XmlIgnore] + public int? SafetyMargin + { + get; + set; + } // SafetyMargin + + [XmlElement("SafetyMargin")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlSafetyMargin + { + get + { + return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; + } // get + set + { + SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); + } // set + } // XmlSafetyMargin + + /// + /// Gets the safety margin as a TimeSpan + /// + [XmlIgnore] + public TimeSpan SafetyMarginTimeSpan + { + get + { + return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : new TimeSpan(); + } // get + } // SafetyMarginTimeSpan + + #endregion + + #region Public methods + + public virtual DateTime GetStartDateTime() + { + return StartDate; + } // GetStartDateTime + + public string Verbalize(bool pastTime) { var builder = new StringBuilder(); Verbalize(pastTime, builder); return builder.ToString(); } // Verbalize - public abstract void SetDefaultValues(); public abstract void Verbalize(bool pastTime, StringBuilder builder); - public abstract DateTime GetStartDateTime(); - public abstract TimeSpan GetSafetyMargin(); + + public virtual void SetDefaultValues() + { + var now = DateTime.Now; + StartDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) + new TimeSpan(0, 1, 0); + SafetyMargin = DefaultSafetyMargin; + } // SetDefaultValues + + #endregion + + protected void VerbalizeStartExpiryDate(bool pastTime, StringBuilder builder) + { + if (!pastTime) return; + + builder.AppendLine(); + var format = (ExpiryDate.HasValue) ? Properties.Texts.VerbalizeStartExpiryDate : Properties.Texts.VerbalizeStartDate; + builder.AppendFormat(format, StartDate, ExpiryDate); + } // VerbalizeStartExpiryDate } // abstract class RecordSchedule } // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs deleted file mode 100644 index e0ed912f..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleTime.cs +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public abstract class RecordScheduleTime : RecordSchedule - { - /// - /// Default safety margin, in minutes - /// - public static int DefaultSafetyMargin - { - get { return 5; } - } // DefaultSafetyMargin - - public DateTime StartDate - { - get; - set; - } // StartDate - - [XmlIgnore] - public DateTime? ExpiryDate - { - get; - set; - } // ExpiryDate - - [XmlElement(ElementName="ExpiryDate")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlExpiryDate - { - get - { - return (ExpiryDate == null) ? null : XmlConvert.ToString(ExpiryDate.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - ExpiryDate = null; - } - else - { - ExpiryDate = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - } // if-else - } // set - } // ExpiryDate - - /// - /// Safety margin, in minutes, or null if there is no margin - /// - [XmlIgnore] - public int? SafetyMargin - { - get; - set; - } // SafetyMargin - - [XmlElement("SafetyMargin")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlSafetyMargin - { - get - { - return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; - } // get - set - { - SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); - } // set - } // XmlSafetyMargin - - /// - /// Gets the safety margin as a TimeSpan - /// - [XmlIgnore] - public TimeSpan SafetyMarginTimeSpan - { - get - { - return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : new TimeSpan(); - } // get - } // SafetyMarginTimeSpan - - public override void SetDefaultValues() - { - var now = DateTime.Now; - StartDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) + new TimeSpan(0, 1, 0); - SafetyMargin = DefaultSafetyMargin; - } // SetDefaultValues - - protected void VerbalizeStartExpiryDate(bool pastTime, StringBuilder builder) - { - if (!pastTime) return; - - builder.AppendLine(); - var format = (ExpiryDate.HasValue) ? Properties.Texts.VerbalizeStartExpiryDate : Properties.Texts.VerbalizeStartDate; - builder.AppendFormat(format, StartDate, ExpiryDate); - } // VerbalizeStartExpiryDate - - public override DateTime GetStartDateTime() - { - return StartDate; - } // GetStartDateTime - - public override TimeSpan GetSafetyMargin() - { - return SafetyMarginTimeSpan; - } // GetSafetyMargin - } // abstract class RecordScheduleTime -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs index 32d3b15d..187556fc 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs @@ -139,8 +139,7 @@ public void BuildDescription(bool pastTime, bool withBasicDescription, bool with if (withDuration) { buffer.AppendLine(Properties.Texts.BuildDescriptionDurationHeader); - var scheduleTime = Schedule as RecordScheduleTime; - var startSafetyMargin = (scheduleTime != null) ? scheduleTime.SafetyMarginTimeSpan : TimeSpan.Zero; + var startSafetyMargin = Schedule.SafetyMarginTimeSpan; var endSafetyMargin = Duration.SafetyMarginTimeSpan; var recordDuration = Duration.Length; var totalRecordTime = startSafetyMargin + recordDuration + endSafetyMargin; @@ -152,11 +151,10 @@ public void BuildDescription(bool pastTime, bool withBasicDescription, bool with totalRecordTime); buffer.AppendLine(); - if (scheduleTime != null) + if (Schedule.Kind != RecordScheduleKind.RightNow) { string format; - var schedule = (RecordScheduleTime)Schedule; - var startDate = schedule.StartDate - schedule.SafetyMarginTimeSpan; + var startDate = Schedule.StartDate - Schedule.SafetyMarginTimeSpan; var endDate = startDate + totalRecordTime; if (startDate.Day == endDate.Day) { @@ -167,8 +165,12 @@ public void BuildDescription(bool pastTime, bool withBasicDescription, bool with format = pastTime ? Properties.Texts.BuildDescriptionDurationEndsNextDay : Properties.Texts.BuildDescriptionDurationEndsTomorrow; } // if-else buffer.AppendFormat(format, endDate); - buffer.AppendLine(); - } // if + } + else + { + + } // if-else + buffer.AppendLine(); } // if withDuration // remove last CRLF diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs index b7149cf2..9b92a5ee 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs @@ -11,7 +11,7 @@ namespace IpTviewr.Services.Record.Serialization { [Serializable] [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordWeekly : RecordScheduleTime + public sealed class RecordWeekly : RecordSchedule { public const RecordWeekDays AllWeekDays = RecordWeekDays.Sunday | RecordWeekDays.Monday | RecordWeekDays.Tuesday | RecordWeekDays.Wednesday | RecordWeekDays.Thursday | RecordWeekDays.Friday | RecordWeekDays.Saturday; diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj index 0dc4217d..32bbe764 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj +++ b/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj @@ -71,7 +71,6 @@ - From 72c5b29ffc39301b327b5c6b801b1e7711156c53 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 23:14:58 +0200 Subject: [PATCH 55/76] Record Scheduler and Launcher Updated to conform to Record.Serialization changes --- .../IpTvRecorderLauncher/Launcher.cs | 24 +++++++++++-------- 1.5 'Kruger 60'/Services.Record/Scheduler.cs | 14 +++++------ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs index 882cb546..10574032 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs @@ -171,7 +171,7 @@ private void DisplayTaskData(RecordTask task, TimeSpan totalRecordTime) private Program.Result LaunchRecorderProgram(RecordTask task) { var scheduledStartTime = task.Schedule.GetStartDateTime(); - var scheduledTotalTime = task.Schedule.GetSafetyMargin() + task.Duration.Length + task.Duration.SafetyMarginTimeSpan; + var scheduledTotalTime = task.Schedule.SafetyMarginTimeSpan + task.Duration.GetDuration(task.Schedule) + task.Duration.SafetyMarginTimeSpan; var now = DateTime.Now; // var scheduledDateTime = new DateTime(scheduledStartTime.Year, scheduledStartTime.Month, scheduledStartTime.Day, scheduledStartTime.Hour, scheduledStartTime.Minute, scheduledStartTime.Second); // TODO: determine most probable launch date; we need to account for HUGE delays between scheduled run time and real run time @@ -192,16 +192,20 @@ private Program.Result LaunchRecorderProgram(RecordTask task) } // if if (gap.TotalSeconds < 30) gap = TimeSpan.Zero; - if (gap.TotalSeconds > task.Schedule.GetSafetyMargin().TotalSeconds) - { - RecordingLate = true; - Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningRecordingLate, (int)task.Schedule.GetSafetyMargin().TotalMinutes); - Console.WriteLine(Properties.Texts.DisplayWarningRecordingLate, (int)task.Schedule.GetSafetyMargin().TotalMinutes); - } - else if (gap.TotalSeconds > 0) + + if (task.Schedule.Kind != RecordScheduleKind.RightNow) { - Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningBehindSchedule, gap); - Console.WriteLine(Properties.Texts.DisplayWarningBehindSchedule, gap); + if (gap.TotalSeconds > task.Schedule.SafetyMarginTimeSpan.TotalSeconds) + { + RecordingLate = true; + Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningRecordingLate, (int)task.Schedule.SafetyMarginTimeSpan.TotalMinutes); + Console.WriteLine(Properties.Texts.DisplayWarningRecordingLate, (int)task.Schedule.SafetyMarginTimeSpan.TotalMinutes); + } + else if (gap.TotalSeconds > 0) + { + Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningBehindSchedule, gap); + Console.WriteLine(Properties.Texts.DisplayWarningBehindSchedule, gap); + } // if-else } // if-else var date = string.Format(Properties.Texts.FormatRecordFileDate, diff --git a/1.5 'Kruger 60'/Services.Record/Scheduler.cs b/1.5 'Kruger 60'/Services.Record/Scheduler.cs index c232cee7..d9b502d7 100644 --- a/1.5 'Kruger 60'/Services.Record/Scheduler.cs +++ b/1.5 'Kruger 60'/Services.Record/Scheduler.cs @@ -199,17 +199,15 @@ private static TaskFolder GetTaskSchedulerFolder(RecordAdvancedSettings settings private void GetDuration(RecordTask task) { - // extract start details - var scheduleTime = task.Schedule as RecordScheduleTime; - if (scheduleTime != null) - { - StartSafetyMargin = scheduleTime.SafetyMarginTimeSpan; - } - else + // set duration if EndDateTime + if (task.Duration.EndDateTime != null) { - StartSafetyMargin = new TimeSpan(0, 0, 0); + task.Duration.Length = task.Duration.GetDuration(task.Schedule); } // if-else + // extract start details + StartSafetyMargin = task.Schedule.SafetyMarginTimeSpan; + // extract duration details EndSafetyMargin = task.Duration.SafetyMarginTimeSpan; RecordDuration = task.Duration.Length; From ef51565d4af877d2e5d6e0999668c5a4c3f598c6 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Mon, 5 Sep 2016 23:15:24 +0200 Subject: [PATCH 56/76] EpgBasicGridDialog --- .../UiServices.EPG/EpgBasicGridDialog.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs index d3d0984d..2982fdcf 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs @@ -31,6 +31,7 @@ public partial class EpgBasicGridDialog : CommonBaseForm private EpgDatastore Datastore; private int SelectedRowIndex; private DateTime LocalReferenceTime; + private bool IsGridReady; public static DialogResult ShowGrid(CommonBaseForm parentForm, IList list, UiBroadcastService currentService, EpgDatastore datastore) { @@ -89,6 +90,8 @@ private void EpgBasicGridDialog_Load(object sender, EventArgs e) private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) { + if (!IsGridReady) return; + var cell = (dataGridPrograms.SelectedCells.Count > 0) ? dataGridPrograms.SelectedCells[0] : null; if (cell == null) { @@ -118,10 +121,9 @@ private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) { if (dialog.QueryCancel()) return; - dialog.SetProgressText("Filling the list..."); - var currentRowIndex = -1; + var serviceRowIndex = -1; foreach (var service in ServicesList) { var name = UiBroadcastListManager.GetColumnData(service, UiBroadcastListColumn.NumberAndName); @@ -129,7 +131,7 @@ private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog d if (service.Key == InitialService?.Key) { - currentRowIndex = rowIndex; + serviceRowIndex = rowIndex; } // if // TODO: use ListManager view options for hidden and inactive programs (to show or no to show) @@ -166,9 +168,11 @@ private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog d } // for index SelectedService = null; - if (currentRowIndex >= 0) + IsGridReady = true; + + if (serviceRowIndex >= 0) { - dataGridPrograms.CurrentCell = dataGridPrograms.Rows[currentRowIndex].Cells[1]; + dataGridPrograms.CurrentCell = dataGridPrograms.Rows[serviceRowIndex].Cells[1]; } else { From 5f13d5ff5de653de0ea946fdb2302256f7050484 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 16:05:21 +0200 Subject: [PATCH 57/76] IpTviewr.Common.DateTimeExtensions Added IpTviewr.Common.DateTimeExtensions Revised code to use extensions, instead of ad-hoc code --- .../TestEpgLinkedListWrapper.cs | 10 +++---- .../Project.Common/DateTimeExtensions.cs | 27 +++++++++++++++++++ .../Project.Common/Project.Common.csproj | 1 + .../Services.EpgDiscovery/Common.cs | 10 ------- .../EpgMemoryDatastore.cs | 5 ++-- 5 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/TestEpgLinkedListWrapper.cs b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/TestEpgLinkedListWrapper.cs index 19535c0c..b5e25458 100644 --- a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/TestEpgLinkedListWrapper.cs +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/TestEpgLinkedListWrapper.cs @@ -1,4 +1,5 @@ -using IpTviewr.Services.EpgDiscovery; +using IpTviewr.Common; +using IpTviewr.Services.EpgDiscovery; using System; using System.Collections.Generic; using System.Linq; @@ -11,7 +12,7 @@ class TestEpgLinkedListWrapper : Experiment { protected override int Run(string[] args) { - var startTime = TruncateToMinutes(DateTime.UtcNow); + var startTime = DateTime.UtcNow.TruncateToMinutes(); // create initial programs list @@ -121,10 +122,5 @@ private void DisplayProgram(EpgProgram epgProgram, bool current = false) { Console.WriteLine("{3} {0:dd/MM HH:mm} {2:hh\\:mm} {1} ", epgProgram.LocalStartTime, epgProgram.Title, epgProgram.Duration, current? "==>" : " "); } // DisplayProgram - - internal static DateTime TruncateToMinutes(DateTime time) - { - return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 - } // TruncateToMinutes } // class TestEpgLinkedListWrapper } // namespace diff --git a/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs b/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs new file mode 100644 index 00000000..fff9b980 --- /dev/null +++ b/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IpTviewr.Common +{ + public static class DateTimeExtensions + { + /// + /// Truncates a given DateTime to minutes resolution, ignoring seconds and milliseconds + /// + /// The DateTime to truncate. The Kind is preserved after truncation + /// The truncated DateTime + public static DateTime TruncateToMinutes(this DateTime time) + { + return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 + } // TruncateToMinutes + + public static DateTime TruncateToSeconds(this DateTime time, int modulo) + { + var seconds = (time.Second / modulo) * modulo; + return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, seconds, time.Kind); + } // TruncateToSeconds + } // static class DateTimeExtensions +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj index 6f54ee9e..443ccf86 100644 --- a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj +++ b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj @@ -55,6 +55,7 @@ Properties\AssemblySolutionInfo.cs + diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs index 0525135d..c30805f6 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs @@ -8,15 +8,5 @@ namespace IpTviewr.Services.EpgDiscovery internal class Common { public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2016:EPG"; - - /// - /// Truncates a given DateTime to minutes resolution, ignoring seconds and milliseconds - /// - /// The DateTime to truncate. The Kind is preserved after truncation - /// The truncated DateTime - internal static DateTime TruncateToMinutes(DateTime time) - { - return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 - } // TruncateToMinutes } // class Common } // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs index 54f3e372..9b316cf7 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs +++ b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs @@ -1,4 +1,5 @@ -using System; +using IpTviewr.Common; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; @@ -89,7 +90,7 @@ private IEpgLinkedList GetLinkedList(EpgService service, DateTime? localTime) if (localTime == null) localTime = DateTime.Now; var utcTime = localTime.Value.ToUniversalTime(); - var truncatedUtcTime = Common.TruncateToMinutes(utcTime); + var truncatedUtcTime = utcTime.TruncateToMinutes(); program = service.Programs.First.Value; if (utcTime < program.UtcStartTime) From f68e767a697c5ffc09d35defaa81e3c73ff89bdc Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 16:06:13 +0200 Subject: [PATCH 58/76] TruncateToMinutes extension --- 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs index 0d974403..279882f8 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs +++ b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs @@ -112,15 +112,6 @@ public bool BasicGridEnabled #endregion Properties - #region Public static methods - - internal static DateTime TruncateToMinutes(DateTime time) - { - return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 - } // TruncateToMinutes - - #endregion - public EpgMiniGuide() { InitializeComponent(); @@ -132,7 +123,7 @@ public EpgMiniGuide() public void LoadEpgPrograms(UiBroadcastService service, DateTime localReferenceTime, EpgDatastore datastore, bool async = true) { SelectedService = service; - LocalReferenceTime = TruncateToMinutes(localReferenceTime); + LocalReferenceTime = localReferenceTime.TruncateToMinutes(); Datastore = datastore; // clean-up UI @@ -170,7 +161,7 @@ public void ClearEpgPrograms() public void RefreshEpgPrograms(DateTime localReferenceTime) { - LocalReferenceTime = TruncateToMinutes(localReferenceTime); + LocalReferenceTime = localReferenceTime.TruncateToMinutes(); BeginLoadEpgPrograms(true); } // RefreshEpgPrograms From e9b80fe39f254b52eefa7560ab4d150e65f9c254 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 16:07:26 +0200 Subject: [PATCH 59/76] WinFormsControlsExtension --- .../UiServices.Common.csproj | 1 + .../WinFormsControlsExtensions.cs | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs diff --git a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj index 251aa3c5..39606e5b 100644 --- a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj +++ b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj @@ -155,6 +155,7 @@ SplashScreen.cs + diff --git a/1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs b/1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs new file mode 100644 index 00000000..e80fe202 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common +{ + public static class WinFormsControlsExtensions + { + public static void ChangeImage(this Button control, Image newImage) + { + if (control.Image != null) control.Image.Dispose(); + control.Image = newImage; + } // ChangeImage + + public static void ChangeImage(this PictureBox control, Image newImage) + { + if (control.Image != null) control.Image.Dispose(); + control.Image = newImage; + } // ChangeImage + } // static class WinFormsControlsExtensions +} // namespace From 2110a5a50d869e8dba07dcf5cde8f89fe494e28f Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:20:00 +0200 Subject: [PATCH 60/76] Minor changes in Services.Record --- .../Services.Record.Serialization/RecordDuration.cs | 11 ++++++++--- .../Services.Record.Serialization/RecordSchedule.cs | 2 +- 1.5 'Kruger 60'/Services.Record/Scheduler.cs | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs index e2115955..d1fac208 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs @@ -21,7 +21,7 @@ public class RecordDuration /// public static int DefaultSafetyMargin { - get { return 5; } + get { return 10; } } // DefaultSafetyMargin /// @@ -100,11 +100,16 @@ public TimeSpan SafetyMarginTimeSpan } // get } // SafetyMarginTimeSpan - public TimeSpan GetDuration(RecordSchedule schedule) + public TimeSpan GetDuration(DateTime startDateTime) { if (EndDateTime == null) return Length; - return (EndDateTime.Value - schedule.GetStartDateTime()); + return (EndDateTime.Value - startDateTime); + } // GetDuration + + public TimeSpan GetDuration(RecordSchedule schedule) + { + return GetDuration(schedule.GetStartDateTime()); } // GetDuration /// diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs index 92ff8fb9..348cdce7 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs @@ -147,7 +147,7 @@ public string Verbalize(bool pastTime) public virtual void SetDefaultValues() { var now = DateTime.Now; - StartDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) + new TimeSpan(0, 1, 0); + StartDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) + new TimeSpan(0, 5, 0); SafetyMargin = DefaultSafetyMargin; } // SetDefaultValues diff --git a/1.5 'Kruger 60'/Services.Record/Scheduler.cs b/1.5 'Kruger 60'/Services.Record/Scheduler.cs index d9b502d7..08f03b0b 100644 --- a/1.5 'Kruger 60'/Services.Record/Scheduler.cs +++ b/1.5 'Kruger 60'/Services.Record/Scheduler.cs @@ -177,6 +177,7 @@ private static TaskFolder GetTaskSchedulerFolder(RecordAdvancedSettings settings { if (string.IsNullOrEmpty(settings.TaskSchedulerFolder)) { + settings.TaskSchedulerFolder = ""; return taskScheduler.RootFolder; } // if From d3cd65da78b8a16ade40adc3ff747e93cfcede5e Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:23:28 +0200 Subject: [PATCH 61/76] Enhancements in UiService.Record UI controls Revamped RecordDuration RecordingSchedule auto-updates start time if RightNow --- .../Controls/RecordingDuration.Designer.cs | 46 ++- .../Controls/RecordingDuration.cs | 296 +++++++++++------- .../Controls/RecordingDuration.resx | 166 ++++++---- .../Controls/RecordingSchedule.Designer.cs | 9 + .../Controls/RecordingSchedule.cs | 85 +++-- .../Controls/RecordingSchedule.resx | 52 +-- .../RecordingWeeklyScheduleFragment.es.resx | 6 +- .../RecordingWeeklyScheduleFragment.resx | 59 ++-- 8 files changed, 468 insertions(+), 251 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs index eb599760..7292031b 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs @@ -33,30 +33,26 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordingDuration)); this.comboQuickSetting = new System.Windows.Forms.ComboBox(); - this.radioQuickSettings = new System.Windows.Forms.RadioButton(); this.dateTimeEndTime = new System.Windows.Forms.DateTimePicker(); this.dateTimeEndDate = new System.Windows.Forms.DateTimePicker(); this.radioEndDateTime = new System.Windows.Forms.RadioButton(); this.radioTimeSpan = new System.Windows.Forms.RadioButton(); this.timeSpanLength = new IpTviewr.UiServices.Common.Controls.TimeSpanUpDown(); + this.labelEndMarginSufix = new System.Windows.Forms.Label(); + this.numericEndMargin = new System.Windows.Forms.NumericUpDown(); + this.checkBoxEndMargin = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.numericEndMargin)).BeginInit(); this.SuspendLayout(); // // comboQuickSetting // + this.comboQuickSetting.BackColor = System.Drawing.SystemColors.Window; this.comboQuickSetting.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboQuickSetting.FormattingEnabled = true; resources.ApplyResources(this.comboQuickSetting, "comboQuickSetting"); this.comboQuickSetting.Name = "comboQuickSetting"; this.comboQuickSetting.SelectedIndexChanged += new System.EventHandler(this.comboQuickSetting_SelectedIndexChanged); // - // radioQuickSettings - // - resources.ApplyResources(this.radioQuickSettings, "radioQuickSettings"); - this.radioQuickSettings.Name = "radioQuickSettings"; - this.radioQuickSettings.TabStop = true; - this.radioQuickSettings.UseVisualStyleBackColor = true; - this.radioQuickSettings.CheckedChanged += new System.EventHandler(this.radio_CheckedChanged); - // // dateTimeEndTime // this.dateTimeEndTime.CausesValidation = false; @@ -102,20 +98,44 @@ private void InitializeComponent() this.timeSpanLength.ValueChanged += new System.EventHandler(this.timeSpanLength_ValueChanged); this.timeSpanLength.Validating += new System.ComponentModel.CancelEventHandler(this.timeSpanLength_Validating); // + // labelEndMarginSufix + // + resources.ApplyResources(this.labelEndMarginSufix, "labelEndMarginSufix"); + this.labelEndMarginSufix.Name = "labelEndMarginSufix"; + // + // numericEndMargin + // + resources.ApplyResources(this.numericEndMargin, "numericEndMargin"); + this.numericEndMargin.Maximum = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.numericEndMargin.Name = "numericEndMargin"; + // + // checkBoxEndMargin + // + resources.ApplyResources(this.checkBoxEndMargin, "checkBoxEndMargin"); + this.checkBoxEndMargin.Name = "checkBoxEndMargin"; + this.checkBoxEndMargin.UseVisualStyleBackColor = true; + this.checkBoxEndMargin.CheckedChanged += new System.EventHandler(this.checkBoxEndMargin_CheckedChanged); + // // RecordingDuration // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoValidate = System.Windows.Forms.AutoValidate.Disable; + this.Controls.Add(this.labelEndMarginSufix); + this.Controls.Add(this.numericEndMargin); + this.Controls.Add(this.checkBoxEndMargin); this.Controls.Add(this.timeSpanLength); this.Controls.Add(this.comboQuickSetting); - this.Controls.Add(this.radioQuickSettings); this.Controls.Add(this.dateTimeEndTime); this.Controls.Add(this.dateTimeEndDate); this.Controls.Add(this.radioEndDateTime); this.Controls.Add(this.radioTimeSpan); this.Name = "RecordingDuration"; - this.Load += new System.EventHandler(this.RecordingTime_Load); + ((System.ComponentModel.ISupportInitialize)(this.numericEndMargin)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -124,11 +144,13 @@ private void InitializeComponent() #endregion private System.Windows.Forms.ComboBox comboQuickSetting; - private System.Windows.Forms.RadioButton radioQuickSettings; private System.Windows.Forms.DateTimePicker dateTimeEndTime; private System.Windows.Forms.DateTimePicker dateTimeEndDate; private System.Windows.Forms.RadioButton radioEndDateTime; private System.Windows.Forms.RadioButton radioTimeSpan; private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanLength; + private System.Windows.Forms.Label labelEndMarginSufix; + private System.Windows.Forms.NumericUpDown numericEndMargin; + private System.Windows.Forms.CheckBox checkBoxEndMargin; } } diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs index 316bb0a2..9d3a8f98 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs @@ -16,82 +16,124 @@ namespace IpTviewr.UiServices.Record.Controls { public partial class RecordingDuration : UserControl { - private bool ManualUpdateOfValue; - private RecordDuration Duration; + private int ManualUpdate; + private bool AvoidRecursion; + private RecordScheduleKind ScheduleKind; + private DateTime StartDateTime; + private TimeSpan fieldRecordTimeSpan; + private DateTime fieldEndDateTime; + private bool IsScheduledProgram; - public DateTime StartDateTime + public RecordingDuration() { - get; - private set; - } // StartDateTime + InitializeComponent(); + InitComboQuickSettings(comboQuickSetting); + } // constructor + + #region Internal properties - public TimeSpan RecordTimeSpan + private TimeSpan RecordTimeSpan { - get; - private set; + get + { + return fieldRecordTimeSpan; + } // get + set + { + fieldRecordTimeSpan = value; + if (AvoidRecursion) return; + + AvoidRecursion = true; + OnTimeSpanChanged(); + OnEndDateTimeChanged(); + AvoidRecursion = false; + } // set } // RecordTimeSpan - public RecordingDuration() + private DateTime EndDateTime { - InitializeComponent(); - InitComboQuickSettings(comboQuickSetting); - } // constructor + get + { + return fieldEndDateTime; + } // get + + set + { + fieldEndDateTime = value; + if (AvoidRecursion) return; + + AvoidRecursion = true; + OnEndDateTimeChanged(); + OnTimeSpanChanged(); + AvoidRecursion = false; + } // set + } // EndDateTime + + #endregion #region Public methods - public void Init(DateTime startDateTime, RecordDuration duration, bool useQuickSettings) + public void SetDuration(DateTime startDateTime, RecordScheduleKind kind, RecordDuration duration) { - Duration = duration; - UpdateUpDownTimeSpan(duration.Length); - UpdateStartTime(startDateTime); - UpdateCombo(duration.Length); - - if ((comboQuickSetting.SelectedIndex >= 0) && (useQuickSettings)) + if (duration.EndDateTime == null) { - radioQuickSettings.Checked = true; + radioTimeSpan.Checked = true; + RecordTimeSpan = duration.Length; } else { + IsScheduledProgram = (kind == RecordScheduleKind.RightNow); radioEndDateTime.Checked = true; + EndDateTime = duration.EndDateTime.Value; } // if-else - } // Init - public void UpdateStartTime(DateTime startDateTime) - { - ManualUpdateOfValue = true; - StartDateTime = startDateTime; - dateTimeEndDate.Value = startDateTime + RecordTimeSpan; - dateTimeEndTime.Value = dateTimeEndDate.Value; - ManualUpdateOfValue = false; - } // UpdateStartTime + checkBoxEndMargin.Checked = duration.SafetyMargin.HasValue; + numericEndMargin.Value = duration.SafetyMargin.HasValue ? duration.SafetyMargin.Value : RecordDuration.DefaultSafetyMargin; + SetScheduleKind(kind); + } // SetDuration - public void ShowEndDateOption(bool show) + public RecordDuration GetDuration() { - radioEndDateTime.Visible = show; - dateTimeEndDate.Visible = show; - dateTimeEndTime.Visible = show; - - if ((radioEndDateTime.Checked) && (!show)) + var duration = new RecordDuration() { - radioTimeSpan.Checked = true; - } // if - } // ShowEndDateOption + Length = RecordTimeSpan, + EndDateTime = radioEndDateTime.Checked ? EndDateTime : (DateTime?)null, + }; // duration - public RecordDuration GetDuration() - { - Duration.Length = timeSpanLength.Value; + if ((checkBoxEndMargin.Checked) && (checkBoxEndMargin.Enabled) && (numericEndMargin.Value > 0)) + { + duration.SafetyMargin = (int)numericEndMargin.Value; + } + else + { + duration.SafetyMargin = null; + } // if-else - return Duration; + return duration; } // GetDuration - #endregion + public void SetStartTime(DateTime startDateTime) + { + ManualUpdate++; - #region Form events + StartDateTime = startDateTime; + if (!radioEndDateTime.Checked) + { + EndDateTime = StartDateTime + RecordTimeSpan; + } + else + { + RecordTimeSpan = EndDateTime - StartDateTime; + } // if-else - private void RecordingTime_Load(object sender, EventArgs e) + ManualUpdate--; + } // UpdateStartTime + + public void SetScheduleKind(RecordScheduleKind kind) { - // no op - } // RecordingTime_Load + ScheduleKind = kind; + OnScheduleKindChanged(); + } // SetScheduleKind #endregion @@ -99,28 +141,24 @@ private void RecordingTime_Load(object sender, EventArgs e) private void radio_CheckedChanged(object sender, EventArgs e) { - bool enabled; - - enabled = radioQuickSettings.Checked; - comboQuickSetting.Enabled = enabled; - - enabled = radioTimeSpan.Checked; - timeSpanLength.Enabled = enabled; - - enabled = radioEndDateTime.Checked; - dateTimeEndDate.Enabled = enabled; - dateTimeEndTime.Enabled = enabled; + OnScheduleKindChanged(); } // radio_CheckedChanged private void comboQuickSetting_SelectedIndexChanged(object sender, EventArgs e) { - if (ManualUpdateOfValue) return; + if (ManualUpdate > 0) return; if (comboQuickSetting.SelectedItem == null) return; - var span = ((KeyValuePair)comboQuickSetting.SelectedItem).Value; - UpdateTimeSpan(span); + RecordTimeSpan = ((KeyValuePair)comboQuickSetting.SelectedItem).Value; } // comboQuickSetting_SelectedIndexChanged + private void timeSpanLength_ValueChanged(object sender, EventArgs e) + { + if (ManualUpdate > 0) return; + + RecordTimeSpan = timeSpanLength.Value; + } // timeSpanLength_ValueChanged + private void timeSpanLength_Validating(object sender, CancelEventArgs e) { var span = timeSpanLength.Value; @@ -134,16 +172,11 @@ private void timeSpanLength_Validating(object sender, CancelEventArgs e) RecordTimeSpan = span; } // timeSpanLength_Validating - private void timeSpanLength_ValueChanged(object sender, EventArgs e) - { - if (ManualUpdateOfValue) return; - UpdateTimeSpan(timeSpanLength.Value); - } // timeSpanLength_ValueChanged - private void dateTimeEndDate_ValueChanged(object sender, EventArgs e) { - if (ManualUpdateOfValue) return; - UpdateTimeSpan(GetEndDateTime() - StartDateTime); + if (ManualUpdate > 0) return; + + RecordTimeSpan = (GetEndDateTime() - StartDateTime); } // dateTimeEndDate_ValueChanged private void dateTimeEndDate_Validating(object sender, CancelEventArgs e) @@ -153,8 +186,9 @@ private void dateTimeEndDate_Validating(object sender, CancelEventArgs e) private void dateTimeEndTime_ValueChanged(object sender, EventArgs e) { - if (ManualUpdateOfValue) return; - UpdateTimeSpan(GetEndDateTime() - StartDateTime); + if (ManualUpdate > 0) return; + + RecordTimeSpan = (GetEndDateTime() - StartDateTime); } // dateTimeEndTime_ValueChanged private void dateTimeEndTime_Validating(object sender, CancelEventArgs e) @@ -162,10 +196,43 @@ private void dateTimeEndTime_Validating(object sender, CancelEventArgs e) ValidateEndDateTime(sender as DateTimePicker, e); } // dateTimeEndTime_Validating + private void checkBoxEndMargin_CheckedChanged(object sender, EventArgs e) + { + OnEndMarginCheckedChanged(); + } // checkBoxEndMargin_CheckedChanged + #endregion #region Private methods + public void OnScheduleKindChanged() + { + bool showEndMargin; + + if (ScheduleKind == RecordScheduleKind.RightNow) + { + radioTimeSpan.Enabled = !IsScheduledProgram; + showEndMargin = radioEndDateTime.Checked; + } + else + { + radioTimeSpan.Enabled = true; + showEndMargin = true; + } // if-else + + checkBoxEndMargin.Visible = showEndMargin; + checkBoxEndMargin.Enabled = showEndMargin; + numericEndMargin.Visible = showEndMargin; + labelEndMarginSufix.Visible = showEndMargin; + + timeSpanLength.Enabled = radioTimeSpan.Checked; + comboQuickSetting.Enabled = radioTimeSpan.Checked; + dateTimeEndDate.Enabled = radioEndDateTime.Checked; + dateTimeEndTime.Enabled = radioEndDateTime.Checked; + + if (!radioTimeSpan.Enabled) radioEndDateTime.Checked = true; + } // OncheduleKindChanged + private void InitComboQuickSettings(ComboBox combo) { TimeSpanConverter converter; @@ -187,51 +254,63 @@ private void InitComboQuickSettings(ComboBox combo) } // foreach line } // InitComboQuickSettings - private void UpdateTimeSpan(TimeSpan span) - { - ManualUpdateOfValue = true; - RecordTimeSpan = span; - dateTimeEndDate.Value = StartDateTime + span; - dateTimeEndTime.Value = dateTimeEndDate.Value; - ManualUpdateOfValue = false; - UpdateUpDownTimeSpan(span); - UpdateCombo(span); - } // UpdateTimeSpan - - private void UpdateCombo(TimeSpan span) + private void UpdateComboQuickSettingsSelection(TimeSpan span) { - int indexToSelect; + var q = from index in Enumerable.Range(0, comboQuickSetting.Items.Count) + let item = (KeyValuePair)comboQuickSetting.Items[index] + where (TimeSpan)item.Value == span + select index + 1; + var indexToSelect = (q.FirstOrDefault()) - 1; - indexToSelect = -1; - for (int index = 0; index < comboQuickSetting.Items.Count; index++) - { - var item = (KeyValuePair)comboQuickSetting.Items[index]; - if ((TimeSpan)item.Value == span) - { - indexToSelect = index; - break; - } // if - } // for - - ManualUpdateOfValue = true; if (indexToSelect != comboQuickSetting.SelectedIndex) { + ManualUpdate++; comboQuickSetting.SelectedIndex = indexToSelect; + ManualUpdate--; } // if - ManualUpdateOfValue = false; - } // UpdateCombo + } // UpdateComboQuickSettingsSelection private void UpdateUpDownTimeSpan(TimeSpan span) { - if (span.TotalSeconds <= 0) span = new TimeSpan(); + if (span.TotalSeconds <= 0) span = TimeSpan.Zero; if (span.Days > timeSpanLength.MaxDays) span = new TimeSpan(timeSpanLength.MaxDays, 23, 59, 59); - ManualUpdateOfValue = true; + ManualUpdate++; + timeSpanLength.Value = span; RecordTimeSpan = span; - ManualUpdateOfValue = false; + + ManualUpdate--; } // UpdateUpDownTimeSpan + private void OnTimeSpanChanged() + { + ManualUpdate++; + + UpdateComboQuickSettingsSelection(RecordTimeSpan); + UpdateUpDownTimeSpan(RecordTimeSpan); + + ManualUpdate--; + + if (!radioEndDateTime.Checked) + { + EndDateTime = StartDateTime + RecordTimeSpan; + } // if + + } // OnTimeSpanChanged + + private void OnEndDateTimeChanged() + { + ManualUpdate++; + + dateTimeEndDate.Value = EndDateTime; + dateTimeEndTime.Value = EndDateTime; + + ManualUpdate--; + + RecordTimeSpan = EndDateTime - StartDateTime; + } // OnEndDateTimeChanged + private DateTime GetEndDateTime() { var date = dateTimeEndDate.Value; @@ -249,7 +328,7 @@ private void ValidateEndDateTime(DateTimePicker sender, CancelEventArgs e) if (span.TotalSeconds < 0) { e.Cancel = true; - MessageBox.Show(this, ControlTexts.RecordingTimeInvalidDateTime, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show(Parent, ControlTexts.RecordingTimeInvalidDateTime, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Parent.Focus(); this.Focus(); return; @@ -257,7 +336,7 @@ private void ValidateEndDateTime(DateTimePicker sender, CancelEventArgs e) if (span.TotalSeconds < 60) { e.Cancel = true; - MessageBox.Show(this, ControlTexts.RecordingTimeInvalidTimeSpan, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show(Parent, ControlTexts.RecordingTimeInvalidTimeSpan, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Parent.Focus(); this.Focus(); return; @@ -265,13 +344,20 @@ private void ValidateEndDateTime(DateTimePicker sender, CancelEventArgs e) if (span.TotalDays > timeSpanLength.MaxDays) { e.Cancel = true; - MessageBox.Show(this, string.Format(ControlTexts.RecordingTimeDateTimeSpanMaxValue, timeSpanLength.MaxDays), + MessageBox.Show(Parent, string.Format(ControlTexts.RecordingTimeDateTimeSpanMaxValue, timeSpanLength.MaxDays), ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Parent.Focus(); this.Focus(); } // if } // ValidateEndDateTime + private void OnEndMarginCheckedChanged() + { + var enabled = checkBoxEndMargin.Checked; + numericEndMargin.Enabled = enabled; + labelEndMarginSufix.Enabled = enabled; + } // OnEndMarginCheckedChanged + #endregion } // class RecordingTime } // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx index f47ba01b..c44c6134 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx @@ -112,19 +112,19 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + - 20, 26 + 279, 23 - 215, 21 + 146, 21 - + 1 @@ -132,47 +132,16 @@ comboQuickSetting - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 1 - - - True - - - - NoControl - - - 0, 3 - - - 115, 17 - - - 0 - - - Use quick settings: - - - radioQuickSettings - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 + 4 - 241, 125 + 241, 72 75, 20 @@ -184,16 +153,16 @@ dateTimeEndTime - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 3 + 5 - 20, 125 + 20, 72 215, 20 @@ -205,22 +174,23 @@ dateTimeEndDate - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 4 + 6 True + NoControl - 0, 102 + 0, 49 198, 17 @@ -235,13 +205,13 @@ radioEndDateTime - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 5 + 7 True @@ -250,7 +220,7 @@ NoControl - 0, 53 + 0, 0 151, 17 @@ -265,16 +235,16 @@ radioTimeSpan - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 6 + 8 - 20, 76 + 20, 23 253, 20 @@ -286,27 +256,111 @@ timeSpanLength - IpTviewr.UiServices.Controls.TimeSpanUpDown, UiServices.Controls, Version=1.0.1000.200, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this + 3 + + + True + + + NoControl + + + 165, 122 + + + 43, 13 + + + 15 + + + minutes + + + labelEndMarginSufix + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 - + + 119, 120 + + + 40, 20 + + + 14 + + + Center + + + numericEndMargin + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + NoControl + + + 0, 121 + + + 113, 17 + + + 13 + + + Add safety margin: + + + checkBoxEndMargin + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + True 6, 13 - 425, 175 + 425, 145 RecordingDuration - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs index a8d5a341..177a504c 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs @@ -31,6 +31,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordingSchedule)); this.dateTimeStartTime = new System.Windows.Forms.DateTimePicker(); this.dateTimeStartDate = new System.Windows.Forms.DateTimePicker(); @@ -45,6 +46,7 @@ private void InitializeComponent() this.fragmentMonthly = new IpTviewr.UiServices.Record.Controls.RecordingMonthlyScheduleFragment(); this.fragmentRightNow = new IpTviewr.UiServices.Record.Controls.RecordingRightNowScheduleFragment(); this.fragmentWeekly = new IpTviewr.UiServices.Record.Controls.RecordingWeeklyScheduleFragment(); + this.timerUpdateRightNow = new System.Windows.Forms.Timer(this.components); this.SuspendLayout(); // // dateTimeStartTime @@ -60,6 +62,7 @@ private void InitializeComponent() resources.ApplyResources(this.dateTimeStartDate, "dateTimeStartDate"); this.dateTimeStartDate.Name = "dateTimeStartDate"; this.dateTimeStartDate.ValueChanged += new System.EventHandler(this.dateTimeStart_ValueChanged); + this.dateTimeStartDate.Validating += new System.ComponentModel.CancelEventHandler(this.dateTimeStartDate_Validating); // // radioMonthly // @@ -132,6 +135,11 @@ private void InitializeComponent() resources.ApplyResources(this.fragmentWeekly, "fragmentWeekly"); this.fragmentWeekly.Name = "fragmentWeekly"; // + // timerUpdateRightNow + // + this.timerUpdateRightNow.Interval = 5000; + this.timerUpdateRightNow.Tick += new System.EventHandler(this.timerUpdateRightNow_Tick); + // // RecordingSchedule // resources.ApplyResources(this, "$this"); @@ -171,5 +179,6 @@ private void InitializeComponent() private RecordingDailyScheduleFragment fragmentDaily; private RecordingWeeklyScheduleFragment fragmentWeekly; private RecordingMonthlyScheduleFragment fragmentMonthly; + private System.Windows.Forms.Timer timerUpdateRightNow; } } diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs index bea02cf3..56a333ee 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs @@ -10,16 +10,19 @@ using System.Text; using System.Windows.Forms; using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Record.Properties; +using IpTviewr.Common; namespace IpTviewr.UiServices.Record.Controls { public partial class RecordingSchedule : UserControl { - private bool ManualUpdateOfValue; + private int ManualUpdate; private IRecordingScheduleFragment CurrentFragment; private IRecordingScheduleFragment[] ScheduleFragments; private RadioButton[] RadioButtons; + private DateTime OriginalDateTime; public event EventHandler ScheduleKindChanged; public event EventHandler DateTimeChanged; @@ -78,16 +81,12 @@ public void SetSchedule(RecordSchedule schedule, bool isNew) throw new InvalidOperationException("A 'RightNow' recording task can not be edited!"); } // if + OriginalDateTime = schedule.StartDate; + foreach (var fragment in ScheduleFragments) { - if (schedule.Kind == fragment.Kind) - { - fragment.SetSchedule(schedule); - } - else - { - fragment.SetSchedule(RecordSchedule.CreateWithDefaultValues(fragment.Kind)); - } // if-else + if (schedule.Kind == fragment.Kind) fragment.SetSchedule(schedule); + else fragment.SetSchedule(RecordSchedule.CreateWithDefaultValues(fragment.Kind)); } // foreach foreach (var radio in RadioButtons) @@ -95,20 +94,10 @@ public void SetSchedule(RecordSchedule schedule, bool isNew) var kind = (RecordScheduleKind)radio.Tag; radio.Checked = (schedule.Kind == kind); // if we're editing an existing record task, we can't set its type as 'Right now' - radio.Enabled = isNew? true : (kind != RecordScheduleKind.RightNow); + radio.Enabled = isNew ? true : (kind != RecordScheduleKind.RightNow); } // foreach - var scheduleTime = schedule as RecordScheduleTime; - if (scheduleTime != null) - { - ManualUpdateOfValue = true; - dateTimeStartDate.Value = scheduleTime.StartDate; - dateTimeStartTime.Value = scheduleTime.StartDate; - ManualUpdateOfValue = false; - } // if - SetPatternKind(schedule.Kind); - StartDateChanged(); } // SetSchedule public RecordSchedule GetSchedule() @@ -118,7 +107,7 @@ public RecordSchedule GetSchedule() private void SchedulePattern_Load(object sender, EventArgs e) { - ManualUpdateOfValue = true; + ManualUpdate++; panelPlaceholder.Visible = false; for(int index=0; index 0) return; selectedKind = (RecordScheduleKind)((RadioButton)sender).Tag; canSelectDateTime = (selectedKind != RecordScheduleKind.RightNow); @@ -155,16 +144,46 @@ private void radioButton_CheckedChanged(object sender, EventArgs e) dateTimeStartDate.Enabled = canSelectDateTime; dateTimeStartTime.Enabled = canSelectDateTime; + ManualUpdate++; + + dateTimeStartDate.Value = OriginalDateTime; + dateTimeStartTime.Value = OriginalDateTime; + + ManualUpdate--; + + StartTimerUpdateRightNow(selectedKind == RecordScheduleKind.RightNow); + SetPatternKind(selectedKind); + StartDateChanged(); } // radioButton_CheckedChanged private void dateTimeStart_ValueChanged(object sender, EventArgs e) { - if (ManualUpdateOfValue) return; + if (ManualUpdate > 0) return; StartDateChanged(); } // dateTimeStart_ValueChanged + private void dateTimeStartDate_Validating(object sender, CancelEventArgs e) + { + var date = dateTimeStartDate.Value; + var time = dateTimeStartTime.Value; + var startDate = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); + + if (startDate < DateTime.Now) + { + e.Cancel = true; + MessageBox.Show(Parent, ControlTexts.RecordingInvalidStartDateTime, ControlTexts.RecordingScheduleValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + this.Parent.Focus(); + this.Focus(); + } // if + } // dateTimeStartDate_Validating + + private void timerUpdateRightNow_Tick(object sender, EventArgs e) + { + UpdateStartTimeRightNow(); + } // timerUpdateRightNow_Tick + private void SetPatternKind(RecordScheduleKind kind) { foreach (var patternControl in ScheduleFragments) @@ -194,5 +213,23 @@ private void StartDateChanged() DateTimeChanged?.Invoke(this, new DateTimeChangedEventArgs(startDate)); } // StartDateChanged + + private void StartTimerUpdateRightNow(bool start) + { + timerUpdateRightNow.Enabled = start; + if (start) UpdateStartTimeRightNow(); + } // StartTimerUpdateRightNow + + private void UpdateStartTimeRightNow() + { + ManualUpdate++; + + var now = DateTime.Now.TruncateToSeconds(5); + dateTimeStartDate.Value = now; + + ManualUpdate--; + + dateTimeStartTime.Value = now; + } // UpdateStartTimeRightNow } // class namespace } // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx index be12265f..9e8ea0fb 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx @@ -112,19 +112,19 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 350, 0 75, 20 - + 6 @@ -132,7 +132,7 @@ dateTimeStartTime - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -153,7 +153,7 @@ dateTimeStartDate - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -167,7 +167,7 @@ False - + NoControl @@ -183,11 +183,14 @@ Monthly + + False + radioMonthly - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -217,7 +220,7 @@ radioWeekly - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -247,7 +250,7 @@ radioDaily - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -277,7 +280,7 @@ radioOneTime - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -307,7 +310,7 @@ radioRightNow - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -328,7 +331,7 @@ panelPlaceholder - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -349,7 +352,7 @@ fragmentDaily - IpTviewr.UiServices.Controls.RecordingDailyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingDailyScheduleFragment, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -370,7 +373,7 @@ fragmentOneTime - IpTviewr.UiServices.Controls.RecordingOneTimeScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingOneTimeScheduleFragment, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -394,7 +397,7 @@ fragmentMonthly - IpTviewr.UiServices.Controls.RecordingMonthlyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingMonthlyScheduleFragment, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -415,7 +418,7 @@ fragmentRightNow - IpTviewr.UiServices.Controls.RecordingRightNowScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingRightNowScheduleFragment, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -436,7 +439,7 @@ fragmentWeekly - IpTviewr.UiServices.Controls.RecordingWeeklyScheduleFragment, DvbIpTv.UiServices.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Record.Controls.RecordingWeeklyScheduleFragment, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -444,7 +447,10 @@ 4 - + + 17, 17 + + True @@ -453,10 +459,16 @@ 425, 175 + + timerUpdateRightNow + + + System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + RecordingSchedule - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx index 322963dc..cd345f7e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 142, 13 diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx index 545d912c..da036856 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 weeks on @@ -126,11 +126,11 @@ labelRecurPrefix - + 6, 13 - + True @@ -150,7 +150,7 @@ 31 - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 RecordingWeeklyScheduleFragment @@ -161,9 +161,6 @@ 30 - - $this - $this @@ -176,8 +173,11 @@ 1 - - 0, 2 + + 2 + + + True $this @@ -188,17 +188,17 @@ checkAllDays - - $this - 45, 20 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 300, 150 - System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 29 @@ -207,12 +207,12 @@ Recur every: - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 - + Center @@ -220,7 +220,7 @@ True - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 74, 0 @@ -229,13 +229,13 @@ 4 - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 2 + + 0, 2 - - True + + $this 181, 26 @@ -246,8 +246,8 @@ 125, 2 - - 68, 13 + + $this 28 @@ -255,13 +255,10 @@ 32 - - 300, 150 + + 68, 13 - + True - - es - \ No newline at end of file From 14427ad33f9e2fcbefe12c7d81f94279d32fde98 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:25:56 +0200 Subject: [PATCH 62/76] UiServices.Record resources update --- .../Properties/ControlTexts.Designer.cs | 9 +++++++++ .../Properties/ControlTexts.es.resx | 7 +++++-- .../Properties/ControlTexts.resx | 7 +++++-- .../Properties/RecordChannel.Designer.cs | 19 +++++++++++++----- .../Properties/RecordChannel.es.resx | 9 +++++++++ .../Properties/RecordChannel.resx | 9 ++++++--- .../Properties/Resources.Designer.cs | 10 +++++++++ .../Properties/Resources.resx | 3 +++ .../Resources/Action_RecordButton_16x16.png | Bin 0 -> 542 bytes .../UiServices.Record.csproj | 1 + 10 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 1.5 'Kruger 60'/UiServices.Record/Resources/Action_RecordButton_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs index 5677c852..5ff0dc75 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs @@ -60,6 +60,15 @@ internal ControlTexts() { } } + /// + /// Looks up a localized string similar to The start date/time can not be earlier than the current time.. + /// + internal static string RecordingInvalidStartDateTime { + get { + return ResourceManager.GetString("RecordingInvalidStartDateTime", resourceCulture); + } + } + /// /// Looks up a localized string similar to Schedule: a value is not valid or allowed. /// diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.es.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.es.resx index 6f9469eb..de7713f2 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.es.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.es.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 La longitud total de la grabación no puede ser superior a {0:N0} días. @@ -149,4 +149,7 @@ Seleccione una fecha/hora anterior para limitar la longitud total de la grabaci Debe especificarse al menos un día para una programación semanal. + + La fecha/hora de comienzo no puede ser anterior a la fecha y hora actuales. + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.resx index 77ab6127..29be3f83 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Total recording time can not exceed {0:N0} days. @@ -149,4 +149,7 @@ Select an earlier date/time to limit the total recording time to less than {0:N0 At least a day must be selected for a weekly schedule. + + The start date/time can not be earlier than the current time. + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs index 611f3e60..ac61487a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs @@ -117,18 +117,27 @@ internal static string NoSaveLocation { /// /// Looks up a localized string similar to Record. /// - internal static string RecordButtonDefault { + internal static string RecordButtonRecord { get { - return ResourceManager.GetString("RecordButtonDefault", resourceCulture); + return ResourceManager.GetString("RecordButtonRecord", resourceCulture); } } /// - /// Looks up a localized string similar to Record.... + /// Looks up a localized string similar to Set schedule. /// - internal static string RecordButtonSettings { + internal static string RecordButtonSchedule { get { - return ResourceManager.GetString("RecordButtonSettings", resourceCulture); + return ResourceManager.GetString("RecordButtonSchedule", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Schedule.... + /// + internal static string RecordButtonWithSettings { + get { + return ResourceManager.GetString("RecordButtonWithSettings", resourceCulture); } } diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx index 9006d492..f02ab8ac 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx @@ -133,6 +133,15 @@ Por favor indique un nombre para la tarea. No se ha seleccionado una ubicación de grabación. Por favor seleccione una ubicación o seleccione una carpeta. + + Grabar + + + Programar + + + Programar... + {0} [{1:yyyy\-MM\-dd} {2:HH\-mm\-ss}] diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx index acfb33c3..6ee542ed 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx @@ -142,11 +142,14 @@ Please specify a name. A save location has not been selected. Please select one or browse for a folder. - + Record - - Record... + + Set schedule + + + Schedule... <Custom location> diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs index 2fdfae6a..c4c27a5a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs @@ -120,6 +120,16 @@ internal static System.Drawing.Bitmap Action_Record_16x16 { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_RecordButton_16x16 { + get { + object obj = ResourceManager.GetObject("Action_RecordButton_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx index d46e8356..4910e50f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx +++ b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx @@ -156,4 +156,7 @@ Do you still want to schedule a recording of {0}? ..\resources\status_warning_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\resources\action_recordbutton_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Action_RecordButton_16x16.png b/1.5 'Kruger 60'/UiServices.Record/Resources/Action_RecordButton_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a52070b6616344f788f08bed3c68116a21aaf34 GIT binary patch literal 542 zcmV+(0^$9MP)7Rz%RjQZfq4LL?!Qf}lVm zutOjbc8e}1WD%j5MOH>Z|K4m^_631049we^-~Y|b?h<`j4Mf_0qP{Un3QkJW4jcQt z$1(bCsfnZkq8=GYO(_&F9;Fhc#(Ny&9M1g)4-t*XNzY%wAB3Jc_mjvVQTJcqQW0hZ zY?S-r(*6n;jTvUCS00Y&S)qVerNVSg4ZKxV@KjV_w!Z$&mt$-*b#?I7)(W2)W@%KC z0<5@TFd%z!f^0I0ZHEJiNCeksXE=|=FsIXD*X6?9)fMuY3_`7~q6%ioEgutqEHyRZ zsZc=JVnNjDL^hGYdRG@N;&JRxOyEA3!)iwd{3a88TCEUZ_LIPa{0CokHTH&wag$2n zV0;{hZa22Ua!Z7)r#eo7BSFiwHj-komgpa7gf9uvFu|k`y&0z gRWAE6mGhim0Xv6qeg+lLPyhe`07*qoM6N<$f{60wO#lD@ literal 0 HcmV?d00001 diff --git a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj index 5e33ef03..42b699d3 100644 --- a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj +++ b/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj @@ -269,6 +269,7 @@ Resources\Action_Play_LG_16x16.png + From 27499bae1b3d989dbe9ca88e4074251cd4ab6a27 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:26:30 +0200 Subject: [PATCH 63/76] Bugs solved in RecordHelper --- .../UiServices.Record/RecordHelper.cs | 98 ++++++++++++------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs index 091797bd..2aaa54bd 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs @@ -54,6 +54,7 @@ public static bool RecordProgram(CommonBaseForm ownerForm, UiBroadcastService se } // using if (option == RecordProgramOptions.RecordOption.None) return false; + if (option == RecordProgramOptions.RecordOption.Channel) program = null; // create record task and allow to edit it var task = GetRecordTask(service, program, localReferenceTime); @@ -91,11 +92,13 @@ public static RecordTask GetRecordTask(UiBroadcastService service, EpgProgram ep return RecordTask.CreateWithDefaultValues(channel); } // if - RecordProgram program = GetRecordProgram(epgProgram); - var schedule = GetRecordSchedule(epgProgram, localReferenceTime); - var duration = GetRecordDuration(epgProgram); + var isCurrent = epgProgram.IsCurrent(localReferenceTime); + var program = GetRecordProgram(epgProgram); + var schedule = GetRecordSchedule(epgProgram, isCurrent); + var duration = GetRecordDuration(epgProgram, isCurrent); var description = GetRecordDescription(epgProgram, channel); var action = GetRecordAction(service, epgProgram); + var advanced = GetRecordAdvancedSettings(); var task = new RecordTask() { @@ -105,7 +108,7 @@ public static RecordTask GetRecordTask(UiBroadcastService service, EpgProgram ep Duration = duration, Description = description, Action = action, - AdvancedSettings = RecordAdvancedSettings.CreateWithDefaultValues(), + AdvancedSettings = advanced, }; return task; @@ -128,6 +131,8 @@ public static RecordChannel GetRecordChannel(UiBroadcastService service) private static RecordProgram GetRecordProgram(EpgProgram epgProgram) { + if (epgProgram == null) throw new ArgumentNullException(nameof(epgProgram)); + var program = new RecordProgram() { Title = epgProgram.Title, @@ -138,29 +143,42 @@ private static RecordProgram GetRecordProgram(EpgProgram epgProgram) return program; } // GetRecordProgram - public static RecordSchedule GetRecordSchedule(EpgProgram program, DateTime localReferenceTime) + public static RecordSchedule GetRecordSchedule(EpgProgram epgProgram, bool isCurrent) { - var isCurrent = program.IsCurrent(localReferenceTime); - var kind = isCurrent ? RecordScheduleKind.RightNow : RecordScheduleKind.OneTime; - var schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime) as RecordScheduleTime; - if (!isCurrent) schedule.StartDate = program.LocalStartTime; - schedule.ExpiryDate = program.LocalEndTime + program.Duration + RecordChannelDialog.DefaultExpiryDateTimeSpan; + RecordSchedule schedule; + + if (epgProgram == null) throw new ArgumentNullException(nameof(epgProgram)); + + if (isCurrent) + { + schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.RightNow); + } + else + { + schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime); + schedule.ExpiryDate = epgProgram.LocalEndTime + epgProgram.Duration + RecordChannelDialog.DefaultExpiryDateTimeSpan; + } // if-else + schedule.StartDate = epgProgram.LocalStartTime; return schedule; } // GetRecordSchedule - private static RecordDuration GetRecordDuration(EpgProgram program) + public static RecordDuration GetRecordDuration(EpgProgram epgProgram, bool isCurrent) { + if (epgProgram == null) throw new ArgumentNullException(nameof(epgProgram)); + var duration = RecordDuration.CreateWithDefaultValues(); - duration.Length = program.Duration; + duration.EndDateTime = epgProgram.LocalEndTime; return duration; } // GetRecordDuration - private static RecordDescription GetRecordDescription(EpgProgram program, RecordChannel channel) + public static RecordDescription GetRecordDescription(EpgProgram epgProgram, RecordChannel channel) { + if (epgProgram == null) throw new ArgumentNullException(nameof(epgProgram)); + var description = RecordDescription.CreateWithDefaultValues(); - description.Name = RecordDescription.CreateTaskName(channel, program.LocalStartTime); + description.Name = RecordDescription.CreateTaskName(channel, epgProgram.LocalStartTime); /* var extended = program as EpgProgramExtended; if (extended != null) @@ -170,20 +188,22 @@ private static RecordDescription GetRecordDescription(EpgProgram program, Record else */ { var buffer = new StringBuilder(); - buffer.AppendLine(program.Title); - buffer.Append(program.ParentalRating.Description); + buffer.AppendLine(epgProgram.Title); + buffer.Append(epgProgram.ParentalRating.Description); description.Description = buffer.ToString(); } // if-else return description; } // GetRecordDescription - private static RecordAction GetRecordAction(UiBroadcastService service, EpgProgram program) + public static RecordAction GetRecordAction(UiBroadcastService service, EpgProgram epgProgram) { + if (epgProgram == null) throw new ArgumentNullException(nameof(epgProgram)); + var action = RecordAction.CreateWithDefaultValues(); var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppUiConfiguration.Current.User.Record.SaveLocations); - action.Filename = string.Format("{0} - {1}", service.DisplayName, program.Title); + action.Filename = string.Format("{0} - {1}", service.DisplayName, epgProgram.Title); action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; action.SaveLocationName = defaultLocation.Name; action.SaveLocationPath = defaultLocation.Path; @@ -191,6 +211,33 @@ private static RecordAction GetRecordAction(UiBroadcastService service, EpgProgr return action; } // GetRecordAction + private static RecordAdvancedSettings GetRecordAdvancedSettings() + { + var advanced = RecordAdvancedSettings.CreateWithDefaultValues(); + + var folders = AppUiConfiguration.Current.User.Record.TaskSchedulerFolders; + if (folders != null) + { + advanced.TaskSchedulerFolder = folders[0].Path; + } // if + + return advanced; + } // GetRecordAdvancedSettings + + public static bool ScheduleTask(CommonBaseForm ownerForm, RecordTask task) + { + // schedule task + var scheduler = new Scheduler(ownerForm.GetExceptionHandler(), + AppUiConfiguration.Current.Folders.RecordTasks, AppUiConfiguration.Current.User.Record.RecorderLauncherPath); + + if (scheduler.CreateTask(task)) + { + MessageBox.Show(ownerForm, Properties.Resources.SchedulerCreateTaskOk, ownerForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + return true; + } // if + + return false; + } // ScheduleTask private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastService service) { @@ -211,20 +258,5 @@ private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastServic return false; } // VerifyIsInactive - - private static bool ScheduleTask(CommonBaseForm ownerForm, RecordTask task) - { - // schedule task - var scheduler = new Scheduler(ownerForm.GetExceptionHandler(), - AppUiConfiguration.Current.Folders.RecordTasks, AppUiConfiguration.Current.User.Record.RecorderLauncherPath); - - if (scheduler.CreateTask(task)) - { - MessageBox.Show(ownerForm, Properties.Resources.SchedulerCreateTaskOk, ownerForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); - return true; - } // if - - return false; - } // ScheduleTask } // class RecordHelper } // namespace From 382331288e018b511f902a29aee1a0da4e0309e6 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:26:58 +0200 Subject: [PATCH 64/76] RecordProgramOptions --- .../RecordProgramOptions.Designer.cs | 14 +- .../UiServices.Record/RecordProgramOptions.cs | 5 +- .../RecordProgramOptions.es.resx | 4 +- .../RecordProgramOptions.resx | 142 +++++++++++------- 4 files changed, 95 insertions(+), 70 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs index 27684cda..e3be4a0d 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs @@ -34,7 +34,6 @@ private void InitializeComponent() this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); this.labelProgramSchedule = new System.Windows.Forms.Label(); this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.pictureIconRec = new System.Windows.Forms.PictureBox(); this.labelInfo = new System.Windows.Forms.Label(); this.pictureIconInfo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); this.radioRecordChannel = new System.Windows.Forms.RadioButton(); @@ -44,7 +43,6 @@ private void InitializeComponent() this.buttonOk = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).BeginInit(); this.groupBox1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconRec)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).BeginInit(); this.SuspendLayout(); // @@ -79,7 +77,6 @@ private void InitializeComponent() // groupBox1 // resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.pictureIconRec); this.groupBox1.Controls.Add(this.labelInfo); this.groupBox1.Controls.Add(this.pictureIconInfo); this.groupBox1.Controls.Add(this.radioRecordChannel); @@ -88,13 +85,6 @@ private void InitializeComponent() this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // - // pictureIconRec - // - this.pictureIconRec.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Icon_Record_48x48; - resources.ApplyResources(this.pictureIconRec, "pictureIconRec"); - this.pictureIconRec.Name = "pictureIconRec"; - this.pictureIconRec.TabStop = false; - // // labelInfo // resources.ApplyResources(this.labelInfo, "labelInfo"); @@ -143,7 +133,6 @@ private void InitializeComponent() // resources.ApplyResources(this.buttonOk, "buttonOk"); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.Record.Properties.Resources.Action_Record_16x16; this.buttonOk.Name = "buttonOk"; this.buttonOk.UseVisualStyleBackColor = true; // @@ -161,13 +150,13 @@ private void InitializeComponent() this.Controls.Add(this.labelChannelName); this.Controls.Add(this.pictureChannelLogo); this.Name = "RecordProgramOptions"; + this.ShowIcon = false; this.ShowInTaskbar = false; this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.RecordProgramOptions_FormClosed); this.Load += new System.EventHandler(this.RecordProgramOptions_Load); ((System.ComponentModel.ISupportInitialize)(this.pictureChannelLogo)).EndInit(); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconRec)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureIconInfo)).EndInit(); this.ResumeLayout(false); @@ -186,6 +175,5 @@ private void InitializeComponent() private Common.Controls.PictureBoxEx pictureIconInfo; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOk; - private System.Windows.Forms.PictureBox pictureIconRec; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs index ecdd662c..a4783793 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs @@ -1,5 +1,6 @@ using IpTviewr.Common; using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Common; using IpTviewr.UiServices.Discovery; using System; using System.Collections.Generic; @@ -26,7 +27,6 @@ public enum RecordOption public RecordProgramOptions() { InitializeComponent(); - this.Icon = Properties.Resources.Icon_Recorder; } // constructor public UiBroadcastService SelectedService @@ -138,7 +138,8 @@ private void radioRecordChannel_CheckedChanged(object sender, EventArgs e) private void ChangeOkButtonText(bool withOptions) { - buttonOk.Text = withOptions ? Properties.RecordChannel.RecordButtonSettings : Properties.RecordChannel.RecordButtonDefault; + buttonOk.ChangeImage(withOptions? Properties.Resources.Action_Ok_16x16 : Properties.Resources.Action_RecordButton_16x16); + buttonOk.Text = withOptions ? Properties.RecordChannel.RecordButtonWithSettings : Properties.RecordChannel.RecordButtonRecord; } // ChangeOkButtonText private void SetChannelDetails() diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx index 1310540f..bf8aab1f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx @@ -122,13 +122,13 @@ 251, 17 - Grabar el canal actual con opciones avanzadas + Grabar el canal actual con configuración a medida 305, 17 - Grabar el programa seleccionado (permite editar los ajustes) + Usar una configuración personalizada para grabar el programa seleccionado 311, 17 diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx index 323c98a4..cce4cc17 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx @@ -258,35 +258,95 @@ Top, Left, Right - - 6, 19 + + labelInfo + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + pictureIconInfo - - 40, 40 + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - Zoom + + groupBox1 - - 11 + + 1 - - pictureIconRec + + radioRecordChannel - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - - 0 + + 2 + + + radioRecordProgramEdit + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 3 + + + radioRecordProgramDefault + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 4 + + + 12, 91 + + + 440, 115 + + + 8 + + + Recording options + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 Top, Left, Right - 49, 65 + 28, 65 360, 16 @@ -310,10 +370,10 @@ groupBox1 - 1 + 0 - 30, 65 + 6, 65 16, 16 @@ -334,22 +394,22 @@ groupBox1 - 2 + 1 True - 52, 88 + 6, 92 - 247, 17 + 235, 17 2 - Record current channel with advanced options + Record current channel with custom settings radioRecordChannel @@ -361,22 +421,22 @@ groupBox1 - 3 + 2 True - 52, 42 + 6, 42 - 272, 17 + 267, 17 1 - Record selected program (allows to change settings) + Use custom settings to record the selected program radioRecordProgramEdit @@ -388,13 +448,13 @@ groupBox1 - 4 + 3 True - 52, 19 + 6, 19 240, 17 @@ -415,31 +475,7 @@ groupBox1 - 5 - - - 12, 91 - - - 440, 115 - - - 8 - - - Recording options - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 + 4 Bottom, Right From 93006af9458166404e193c2cd761c50d38cea77e Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:27:10 +0200 Subject: [PATCH 65/76] RecordChannelDialog --- .../RecordChannelDialog.Designer.cs | 67 +--- .../UiServices.Record/RecordChannelDialog.cs | 368 ++++++++---------- .../RecordChannelDialog.resx | 194 +++------ 3 files changed, 240 insertions(+), 389 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs index e9e3a77f..affee050 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs @@ -44,12 +44,7 @@ private void InitializeComponent() this.labelStartMarginSufix = new System.Windows.Forms.Label(); this.numericStartMargin = new System.Windows.Forms.NumericUpDown(); this.checkBoxStartMargin = new System.Windows.Forms.CheckBox(); - this.recordingSchedule = new IpTviewr.UiServices.Record.Controls.RecordingSchedule(); this.tabPageLength = new System.Windows.Forms.TabPage(); - this.recordingTime = new IpTviewr.UiServices.Record.Controls.RecordingDuration(); - this.labelEndMarginSufix = new System.Windows.Forms.Label(); - this.numericEndMargin = new System.Windows.Forms.NumericUpDown(); - this.checkBoxEndMargin = new System.Windows.Forms.CheckBox(); this.tabPageSave = new System.Windows.Forms.TabPage(); this.listViewLocations = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.imageListLocations = new System.Windows.Forms.ImageList(this.components); @@ -82,13 +77,14 @@ private void InitializeComponent() this.labelProgramDescription = new System.Windows.Forms.Label(); this.labelChannelName = new System.Windows.Forms.Label(); this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.recordingSchedule = new IpTviewr.UiServices.Record.Controls.RecordingSchedule(); + this.recordingTime = new IpTviewr.UiServices.Record.Controls.RecordingDuration(); ColumnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); ColumnLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.tabProperties.SuspendLayout(); this.tabPageSchedule.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericStartMargin)).BeginInit(); this.tabPageLength.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericEndMargin)).BeginInit(); this.tabPageSave.SuspendLayout(); this.tabPageDescription.SuspendLayout(); this.tabPageAdvanced.SuspendLayout(); @@ -179,52 +175,13 @@ private void InitializeComponent() this.checkBoxStartMargin.UseVisualStyleBackColor = true; this.checkBoxStartMargin.CheckedChanged += new System.EventHandler(this.checkBoxStartMargin_CheckedChanged); // - // recordingSchedule - // - resources.ApplyResources(this.recordingSchedule, "recordingSchedule"); - this.recordingSchedule.Name = "recordingSchedule"; - this.recordingSchedule.ScheduleKindChanged += new System.EventHandler(this.recordingSchedule_ScheduleKindChanged); - this.recordingSchedule.DateTimeChanged += new System.EventHandler(this.recordingSchedule_DateTimeChanged); - // // tabPageLength // this.tabPageLength.Controls.Add(this.recordingTime); - this.tabPageLength.Controls.Add(this.labelEndMarginSufix); - this.tabPageLength.Controls.Add(this.numericEndMargin); - this.tabPageLength.Controls.Add(this.checkBoxEndMargin); resources.ApplyResources(this.tabPageLength, "tabPageLength"); this.tabPageLength.Name = "tabPageLength"; this.tabPageLength.UseVisualStyleBackColor = true; // - // recordingTime - // - this.recordingTime.AutoValidate = System.Windows.Forms.AutoValidate.Disable; - this.recordingTime.CausesValidation = false; - resources.ApplyResources(this.recordingTime, "recordingTime"); - this.recordingTime.Name = "recordingTime"; - // - // labelEndMarginSufix - // - resources.ApplyResources(this.labelEndMarginSufix, "labelEndMarginSufix"); - this.labelEndMarginSufix.Name = "labelEndMarginSufix"; - // - // numericEndMargin - // - resources.ApplyResources(this.numericEndMargin, "numericEndMargin"); - this.numericEndMargin.Maximum = new decimal(new int[] { - 60, - 0, - 0, - 0}); - this.numericEndMargin.Name = "numericEndMargin"; - // - // checkBoxEndMargin - // - resources.ApplyResources(this.checkBoxEndMargin, "checkBoxEndMargin"); - this.checkBoxEndMargin.Name = "checkBoxEndMargin"; - this.checkBoxEndMargin.UseVisualStyleBackColor = true; - this.checkBoxEndMargin.CheckedChanged += new System.EventHandler(this.checkBoxEndMargin_CheckedChanged); - // // tabPageSave // this.tabPageSave.Controls.Add(this.listViewLocations); @@ -478,6 +435,20 @@ private void InitializeComponent() this.pictureChannelLogo.Name = "pictureChannelLogo"; this.pictureChannelLogo.TabStop = false; // + // recordingSchedule + // + resources.ApplyResources(this.recordingSchedule, "recordingSchedule"); + this.recordingSchedule.Name = "recordingSchedule"; + this.recordingSchedule.ScheduleKindChanged += new System.EventHandler(this.recordingSchedule_ScheduleKindChanged); + this.recordingSchedule.DateTimeChanged += new System.EventHandler(this.recordingSchedule_DateTimeChanged); + // + // recordingTime + // + this.recordingTime.AutoValidate = System.Windows.Forms.AutoValidate.Disable; + this.recordingTime.CausesValidation = false; + resources.ApplyResources(this.recordingTime, "recordingTime"); + this.recordingTime.Name = "recordingTime"; + // // RecordChannelDialog // this.AcceptButton = this.buttonOk; @@ -496,7 +467,6 @@ private void InitializeComponent() this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RecordChannelDialog"; - this.ShowIcon = false; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.DialogRecordChannel_Load); this.Shown += new System.EventHandler(this.DialogRecordChannel_Shown); @@ -505,8 +475,6 @@ private void InitializeComponent() this.tabPageSchedule.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericStartMargin)).EndInit(); this.tabPageLength.ResumeLayout(false); - this.tabPageLength.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericEndMargin)).EndInit(); this.tabPageSave.ResumeLayout(false); this.tabPageSave.PerformLayout(); this.tabPageDescription.ResumeLayout(false); @@ -529,9 +497,6 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox checkBoxStartMargin; private IpTviewr.UiServices.Record.Controls.RecordingSchedule recordingSchedule; private System.Windows.Forms.TabPage tabPageLength; - private System.Windows.Forms.Label labelEndMarginSufix; - private System.Windows.Forms.NumericUpDown numericEndMargin; - private System.Windows.Forms.CheckBox checkBoxEndMargin; private IpTviewr.UiServices.Record.Controls.RecordingDuration recordingTime; private System.Windows.Forms.TabPage tabPageDescription; private System.Windows.Forms.TabPage tabPageAdvanced; diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index a0ec50fd..74bc71a8 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -4,6 +4,7 @@ using IpTviewr.Common; using IpTviewr.Common.Telemetry; using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Common; using IpTviewr.UiServices.Common.Forms; using IpTviewr.UiServices.Configuration; using IpTviewr.UiServices.Configuration.Logos; @@ -89,7 +90,7 @@ private void DialogRecordChannel_Load_Implementation(object sender, EventArgs e) if (this.DesignMode) { Task = RecordTask.CreateWithDefaultValues(null); - IsNewTask = false; + IsNewTask = true; } else { @@ -123,6 +124,40 @@ private void DialogRecordChannel_Shown_Implementation(object sender, EventArgs e } // if } // DialogRecordChannel_Shown_Implementation + #endregion + + #region Form control events + + private void buttonOk_Click(object sender, EventArgs e) + { + SafeCall(buttonOk_Click_Implementation, sender, e); + } // buttonOk_Click + + private void buttonOk_Click_Implementation(object sender, EventArgs e) + { + var isValid = this.ValidateChildren(ValidationConstraints.Enabled); + if (!isValid) return; + + // General + GetGeneralData(); + // Schedule tab + GetScheduleData(); + // Duration tab + GetDurationData(); + // Description tab + GetDescriptionData(); + // Save tab + GetSaveData(); + // Advanced tab + GetAdvancedData(); + + this.DialogResult = System.Windows.Forms.DialogResult.OK; + } // buttonOk_Click_Implementation + + #endregion + + #region 'General' form setup & get data + private void InitGeneralData() { // service logo @@ -156,34 +191,6 @@ private void GetGeneralData() #endregion - #region General control events - - private void buttonOk_Click(object sender, EventArgs e) - { - SafeCall(buttonOk_Click_Implementation, sender, e); - } // buttonOk_Click - - private void buttonOk_Click_Implementation(object sender, EventArgs e) - { - var isValid = this.ValidateChildren(ValidationConstraints.Enabled); - if (!isValid) return; - - // Schedule tab - GetScheduleData(); - // Duration tab - GetDurationData(); - // Description tab - GetDescriptionData(); - // Save tab - GetSaveData(); - // Advanced tab - GetAdvancedData(); - - this.DialogResult = System.Windows.Forms.DialogResult.OK; - } // buttonOk_Click_Implementation - - #endregion - #region "Schedule" tab events / setup & get data private void InitScheduleData() @@ -194,60 +201,37 @@ private void InitScheduleData() recordingSchedule.SetSchedule(Task.Schedule, IsNewTask); // Expiry date - var scheduleTime = Task.Schedule as RecordScheduleTime; - if ((scheduleTime != null) && (scheduleTime.ExpiryDate.HasValue)) - { - checkBoxExpiryDate.Checked = true; - dateTimeExpiryDate.Value = scheduleTime.ExpiryDate.Value; - } - else - { - checkBoxExpiryDate.Checked = false; - dateTimeExpiryDate.Value = CurrentStartDateTime + DefaultExpiryDateTimeSpan; - } // if-else + var schedule = Task.Schedule; + checkBoxExpiryDate.Checked = schedule.ExpiryDate.HasValue; + dateTimeExpiryDate.Value = (schedule.ExpiryDate.HasValue) ? schedule.ExpiryDate.Value : CurrentStartDateTime + DefaultExpiryDateTimeSpan; // Safety margin - if (scheduleTime == null) - { - checkBoxStartMargin.Checked = false; - numericStartMargin.Value = RecordScheduleTime.DefaultSafetyMargin; - } - else - { - checkBoxStartMargin.Checked = scheduleTime.SafetyMargin.HasValue; - numericStartMargin.Value = Task.Duration.SafetyMargin.HasValue ? scheduleTime.SafetyMargin.Value : RecordScheduleTime.DefaultSafetyMargin; - } // if - + checkBoxStartMargin.Checked = schedule.SafetyMargin.HasValue; + numericStartMargin.Value = schedule.SafetyMargin ?? RecordSchedule.DefaultSafetyMargin; UpdateStartMarginStatus(true); } // InitScheduleData private void GetScheduleData() { - Task.Schedule = recordingSchedule.GetSchedule(); - var scheduleTime = Task.Schedule as RecordScheduleTime; + var schedule = recordingSchedule.GetSchedule(); + Task.Schedule = schedule; - if (scheduleTime == null) return; + schedule.ExpiryDate = null; + schedule.SafetyMargin = null; + if (schedule.Kind == RecordScheduleKind.OneTime) return; if ((checkBoxExpiryDate.Checked) && (checkBoxExpiryDate.Enabled)) { var date = dateTimeExpiryDate.Value; var expiryDate = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); - scheduleTime.ExpiryDate = expiryDate; - } - else - { - scheduleTime.ExpiryDate = null; - } // if-else + schedule.ExpiryDate = expiryDate; + } // if if ((checkBoxStartMargin.Checked) && (checkBoxStartMargin.Enabled) && (numericStartMargin.Value > 0)) { - scheduleTime.SafetyMargin = (int)numericStartMargin.Value; - } - else - { - scheduleTime.SafetyMargin = null; - } // if-else + schedule.SafetyMargin = (int)numericStartMargin.Value; + } // if } // GetScheduleData private void recordingSchedule_ScheduleKindChanged(object sender, RecordingSchedule.KindChangedEventArgs e) @@ -256,15 +240,16 @@ private void recordingSchedule_ScheduleKindChanged(object sender, RecordingSched var enabled = (e.Kind != RecordScheduleKind.RightNow); UpdateStartMarginStatus(enabled); - UpdateEndMarginStatus(enabled); EnableExpiryDate(); - recordingTime.ShowEndDateOption(e.Kind != RecordScheduleKind.RightNow); + recordingTime.SetScheduleKind(e.Kind); + + ChangeOkButtonText(enabled); } // recordingSchedule_ScheduleKindChanged private void recordingSchedule_DateTimeChanged(object sender, RecordingSchedule.DateTimeChangedEventArgs e) { CurrentStartDateTime = e.DateTime; - recordingTime.UpdateStartTime(CurrentStartDateTime); + recordingTime.SetStartTime(CurrentStartDateTime); UpdateTaskName(); } // schedulePattern_DateTimeChanged @@ -278,8 +263,11 @@ private void EnableExpiryDate() var expiryDisallowed = (CurrentScheduleKind == RecordScheduleKind.RightNow) || (CurrentScheduleKind == RecordScheduleKind.OneTime); + checkBoxExpiryDate.Visible = !expiryDisallowed; checkBoxExpiryDate.Enabled = !expiryDisallowed; - dateTimeExpiryDate.Enabled = checkBoxExpiryDate.Checked & !expiryDisallowed; + + dateTimeExpiryDate.Visible = !expiryDisallowed; + dateTimeExpiryDate.Enabled = checkBoxExpiryDate.Checked; EnableSchedulerDeleteTask(expiryDisallowed | (checkBoxExpiryDate.Enabled & checkBoxExpiryDate.Checked)); } // EnableExpiryDate @@ -291,119 +279,36 @@ private void checkBoxStartMargin_CheckedChanged(object sender, EventArgs e) private void UpdateStartMarginStatus(bool enabled) { + checkBoxStartMargin.Visible = enabled; checkBoxStartMargin.Enabled = enabled; - numericStartMargin.Enabled = checkBoxStartMargin.Checked & enabled; - labelStartMarginSufix.Enabled = checkBoxStartMargin.Checked & enabled; + + numericStartMargin.Visible = enabled; + numericStartMargin.Enabled = checkBoxStartMargin.Checked; + + labelStartMarginSufix.Visible = enabled; + labelStartMarginSufix.Enabled = checkBoxStartMargin.Checked; } // UpdateStartMarginStatus + private void ChangeOkButtonText(bool schedule) + { + buttonOk.ChangeImage(schedule ? Properties.Resources.Action_Ok_16x16 : Properties.Resources.Action_RecordButton_16x16); + buttonOk.Text = schedule ? Properties.RecordChannel.RecordButtonWithSettings : Properties.RecordChannel.RecordButtonRecord; + } // ChangeOkButtonText + #endregion #region "Duration" tab events / setup & get data private void InitDurationData() { - recordingTime.Init(CurrentStartDateTime, Task.Duration, true); - checkBoxEndMargin.Checked = Task.Duration.SafetyMargin.HasValue; - numericEndMargin.Value = Task.Duration.SafetyMargin.HasValue ? Task.Duration.SafetyMargin.Value : RecordDuration.DefaultSafetyMargin; - UpdateEndMarginStatus(true); + recordingTime.SetDuration(CurrentStartDateTime, Task.Schedule.Kind, Task.Duration); } // InitDurationData() private void GetDurationData() { Task.Duration = recordingTime.GetDuration(); - - if ((checkBoxEndMargin.Checked) && (checkBoxEndMargin.Enabled) && (numericEndMargin.Value > 0)) - { - Task.Duration.SafetyMargin = (int)numericEndMargin.Value; - } - else - { - Task.Duration.SafetyMargin = null; - } // if-else } // GetDurationData - private void checkBoxEndMargin_CheckedChanged(object sender, EventArgs e) - { - UpdateEndMarginStatus(true); - } // checkBoxEndMargin_CheckedChanged - - private void UpdateEndMarginStatus(bool enabled) - { - checkBoxEndMargin.Enabled = enabled; - numericEndMargin.Enabled = checkBoxEndMargin.Checked & enabled; - labelEndMarginSufix.Enabled = checkBoxEndMargin.Checked & enabled; - } // UpdateEndMarginStatus - - #endregion - - #region "Description" tab events / setup & get data - - private void InitDescriptionData() - { - if (IsNewTask) - { - // When the SetSchedule method of the RecordingSchedule is called, it will fire a DateTime changed event. - // As we capture this event to adjust the task name, there's no need to call UpdateTaskName() again - // UpdateTaskName(schedulePattern.Pattern.StartDateTime); - } - else - { - IsTaskNameUserProvided = true; - textTaskName.Text = Task.Description.TaskSchedulerName; - textTaskName.Enabled = false; - checkAddTaskPrefix.Enabled = false; - } // if-else - - checkAddTaskPrefix.Checked = Task.Description.AddPrefix; - textTaskDescription.Text = Task.Description.Description; - checkAppendRecordingDetails.Checked = Task.Description.AddDetails; - } // InitDescriptionData - - private void GetDescriptionData() - { - if (Task.Schedule.Kind == RecordScheduleKind.RightNow) - { - CurrentStartDateTime = DateTime.Now; - UpdateTaskName(); - } // if - Task.Description.Name = textTaskName.Text.Trim(); - Task.Description.AddPrefix = checkAddTaskPrefix.Checked; - Task.Description.Description = textTaskDescription.Text.Trim(); - Task.Description.AddDetails = checkAppendRecordingDetails.Checked; - } // GetDescriptionData - - private void textTaskName_TextChanged(object sender, EventArgs e) - { - IsTaskNameUserProvided = true; - } // textTaskName_TextChanged - - private void textTaskName_Validating(object sender, CancelEventArgs e) - { - var text = textTaskName.Text.Trim(); - - e.Cancel = (text.Length == 0); - if (e.Cancel) - { - ControlValidationFailed(Properties.RecordChannel.EmptyTaskName, sender as Control); - return; - } // if - - e.Cancel = (text.Length > RecordTaskSerialization.MaxTaskNameLength); - if (e.Cancel) - { - ControlValidationFailed(string.Format(Properties.RecordChannel.TooLongTaskName, RecordTaskSerialization.MaxTaskNameLength), sender as Control); - return; - } // if - } // textTaskName_Validating - - private void UpdateTaskName() - { - if (IsTaskNameUserProvided) return; - - var taskName = RecordDescription.CreateTaskName(Task.Channel, CurrentStartDateTime); - textTaskName.SetText(taskName, false); - } // UpdateTaskName - #endregion #region "Save" tab events / setup & get data @@ -414,24 +319,10 @@ private void InitSaveData() comboFileExtension.Items.AddRange(GetFilenameExtensions()); // Name (filename) - if (IsNewTask) - { - textFilename.SetText(Task.Channel.Name, false); - } - else - { - textFilename.SetText(Task.Action.Filename, false); - } // if-else + textFilename.SetText(string.IsNullOrEmpty(Task.Action.Filename)? Task.Channel.Name : Task.Action.Filename, false); // Extension - if (IsNewTask) - { - comboFileExtension.Text = comboFileExtension.Items[0] as string; - } - else - { - comboFileExtension.Text = Task.Action.FileExtension; - } // if-else + comboFileExtension.Text = string.IsNullOrEmpty(Task.Action.FileExtension) ? comboFileExtension.Items[0] as string : Task.Action.FileExtension; // Save locations var defaultItem = SetListLocations(AppUiConfiguration.Current.User.Record.SaveLocations); @@ -526,10 +417,7 @@ private ListViewItem SetListLocations(IList locations) { ListViewItem defaultItem; - if (locations == null) - { - throw new ArgumentNullException(); - } // if + if (locations == null) throw new ArgumentNullException(); defaultItem = null; listViewLocations.BeginUpdate(); @@ -538,20 +426,20 @@ private ListViewItem SetListLocations(IList locations) CurrentSelectedLocationIndex = (locations.Count == 0) ? -1 : 0; for (int index = 0; index < locations.Count; index++) { - var name = locations[index].Item1; + var name = locations[index].Name; if (string.IsNullOrEmpty(name)) name = Properties.RecordChannel.SaveDefaultLocation; var item = listViewLocations.Items.Add(name); item.ImageKey = ListLocationsDefaultImageKey; - item.SubItems.Add(locations[index].Item2.Trim()); + item.SubItems.Add(locations[index].Path.Trim()); - if (string.IsNullOrEmpty(locations[index].Item1)) defaultItem = item; + if (string.IsNullOrEmpty(locations[index].Name)) defaultItem = item; } // for - int sortColumn = (listViewLocations.CurrentSortColumn < 0)? 0 : listViewLocations.CurrentSortColumn; + int sortColumn = (listViewLocations.CurrentSortColumn < 0) ? 0 : listViewLocations.CurrentSortColumn; listViewLocations.Sort(sortColumn, !listViewLocations.CurrentSortIsDescending); - listViewLocations.EndUpdate(); + return defaultItem; } // SetListLocations @@ -559,18 +447,19 @@ private void SelectSaveLocation(string locationName, string path, ListViewItem d { ListViewItem item; - item = null; - if (locationName != null) + if ((locationName == null) && (!string.IsNullOrEmpty(path))) { - var find = from ListViewItem listItem in listViewLocations.Items - where string.Compare(listItem.Text, locationName, StringComparison.InvariantCultureIgnoreCase) == 0 - select listItem; - item = find.FirstOrDefault(); + locationName = Properties.RecordChannel.SaveDefaultLocation; } // if + var find = from ListViewItem listItem in listViewLocations.Items + where string.Compare(listItem.Text, locationName, StringComparison.InvariantCultureIgnoreCase) == 0 + select listItem; + item = find.FirstOrDefault(); + if (item == null) { - if (path == null) + if (string.IsNullOrEmpty(path)) { if (listViewLocations.Items.Count > 0) { @@ -617,18 +506,90 @@ where string.Compare(listItem.SubItems[1].Text, path, StringComparison.Invariant #endregion + #region "Description" tab events / setup & get data + + private void InitDescriptionData() + { + textTaskDescription.Text = Task.Description.Description; + checkAppendRecordingDetails.Checked = Task.Description.AddDetails; + } // InitDescriptionData + + private void GetDescriptionData() + { + if (Task.Schedule.Kind == RecordScheduleKind.RightNow) + { + CurrentStartDateTime = DateTime.Now; + UpdateTaskName(); + } // if + Task.Description.Description = textTaskDescription.Text.Trim(); + Task.Description.AddDetails = checkAppendRecordingDetails.Checked; + } // GetDescriptionData + + private void textTaskName_TextChanged(object sender, EventArgs e) + { + IsTaskNameUserProvided = true; + } // textTaskName_TextChanged + + private void textTaskName_Validating(object sender, CancelEventArgs e) + { + var text = textTaskName.Text.Trim(); + + e.Cancel = (text.Length == 0); + if (e.Cancel) + { + ControlValidationFailed(Properties.RecordChannel.EmptyTaskName, sender as Control); + return; + } // if + + e.Cancel = (text.Length > RecordTaskSerialization.MaxTaskNameLength); + if (e.Cancel) + { + ControlValidationFailed(string.Format(Properties.RecordChannel.TooLongTaskName, RecordTaskSerialization.MaxTaskNameLength), sender as Control); + return; + } // if + } // textTaskName_Validating + + private void UpdateTaskName() + { + if (IsTaskNameUserProvided) return; + + var taskName = RecordDescription.CreateTaskName(Task.Channel, CurrentStartDateTime); + textTaskName.SetText(taskName, false); + } // UpdateTaskName + + #endregion + #region "Advanced" tab events / setup & get data private void InitAdvancedData() { + // task name + if (string.IsNullOrEmpty(Task.Description.TaskSchedulerName)) + { + // When the SetSchedule method of the RecordingSchedule is called, it will fire a DateTime changed event. + // As we capture this event to adjust the task name, there's no need to call UpdateTaskName() again + // UpdateTaskName(schedulePattern.Pattern.StartDateTime); + } + else + { + IsTaskNameUserProvided = true; + textTaskName.Text = Task.Description.TaskSchedulerName; + } // if-else + textTaskName.Enabled = IsNewTask; + checkAddTaskPrefix.Enabled = IsNewTask; + checkAddTaskPrefix.Checked = Task.Description.AddPrefix; + + // task folder comboSchedulerFolder.DisplayMember = "Name"; comboSchedulerFolder.ValueMember = "Path"; - if (AppUiConfiguration.Current.User.Record.TaskSchedulerFolders != null) + var folders = AppUiConfiguration.Current.User.Record.TaskSchedulerFolders; + if (folders != null) { - comboSchedulerFolder.Items.AddRange(AppUiConfiguration.Current.User.Record.TaskSchedulerFolders); + comboSchedulerFolder.Items.AddRange(folders); } // if comboSchedulerFolder.Items.Add(new RecordTaskSchedulerFolder(Properties.RecordChannel.TaskSchedulerRootFolder, "")); comboSchedulerFolder.SelectedIndex = 0; + comboSchedulerFolder.Enabled = IsNewTask; checkSchedulerASAP.Checked = Task.AdvancedSettings.AsSoonAsPossible; @@ -652,6 +613,9 @@ private void InitAdvancedData() private void GetAdvancedData() { + Task.Description.Name = textTaskName.Text.Trim(); + Task.Description.AddPrefix = checkAddTaskPrefix.Checked; + // Task scheduler folder if (comboSchedulerFolder.SelectedIndex < 0) { @@ -659,7 +623,7 @@ private void GetAdvancedData() } else { - Task.AdvancedSettings.TaskSchedulerFolder = (comboSchedulerFolder.SelectedItem as StringPair).Item2; + Task.AdvancedSettings.TaskSchedulerFolder = (comboSchedulerFolder.SelectedItem as RecordTaskSchedulerFolder).Path; } // if-else // ASAP diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx index 31534479..d0983275 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx @@ -241,13 +241,13 @@ 130, 187 - 199, 17 + 198, 17 1 - Stop recording on the following date: + Stop schedule on the following date: checkBoxExpiryDate @@ -397,7 +397,7 @@ 3, 6 - 425, 175 + 425, 145 0 @@ -414,90 +414,6 @@ 0 - - True - - - NoControl - - - 168, 239 - - - 43, 13 - - - 3 - - - minutes - - - labelEndMarginSufix - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageLength - - - 1 - - - 122, 237 - - - 40, 20 - - - 2 - - - Center - - - numericEndMargin - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageLength - - - 2 - - - True - - - NoControl - - - 3, 238 - - - 113, 17 - - - 1 - - - Add safety margin: - - - checkBoxEndMargin - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageLength - - - 3 - 4, 22 @@ -541,55 +457,55 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAy - CwAAAk1TRnQBSQFMAgEBAgIAAQIBAAECARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA - ARADAAEBAQABIAYAARAyAANTAaoDOAFc+AABuAFCAQAB/wG4AUIBAAH/AzgBXBQAAbgBowGUAf8BJwEN - AQAB/wEnAQ0BAAH/AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/ - AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/AScBDQEAAf8BJwENAQAB/wEnAQ0BAAH/AScBDQEAAf+gAAG4 - AUIBAAH/AfEBzAGOAf8BuAFCAQAB/wM4AVwQAAG5AaQBlQH/AfUB6AHfAf8B8AHcAc4B/wHvAdkBywH/ - Ae0B0gHDAf8B6QHNAbsB/wHoAcgBswH/AeYBxAGvAf8B5AHAAakB/wHjAb0BpAH/AeMBvAGlAf8B4gG8 - AaMB/wHiAbsBowH/AeIBuAGeAf8B3wG2AZ0B/wEnAQ0BAAH/oAABuAFCAQAB/wHwAcABMAH/Ae8BygGM - Af8BuAFCAQAB/wM4AVwMAAG6AaUBlgH/AfkB8QHsAf8B9gHqAeMB/wH1AecB3gH/AfMB4wHZAf8B8gHg - AdUB/wHwAdwB0AH/Ae8B2QHLAf8B7QHVAcYB/wHsAdIBwgH/AekBzQG5Af8B5wHIAbMB/wHmAcMBrQH/ - AeQBvQGmAf8B4QG3AZ4B/wEnAQ0BAAH/gAADQwF3AbgBQgEAAf8BuAFCAQAB/wG4AUIBAAH/AbgBQgEA - Af8BuAFCAQAB/wG4AUIBAAH/AbgBQgEAAf8BuAFCAQAB/wHzAcUBMgH/AeUBmQEAAf8B7wHLAYwB/wG4 - AUIBAAH/A0oBiggAAbwBpgGXAf8B+QHzAe4B/wH3Ae0B5gH/AfYB6gHiAf8B9QHmAd0B/wHzAeMB2AH/ - AfIB3wHUAf8B8AHcAc8B/wHvAdgBygH/Ae0B1QHFAf8B7AHRAcEB/wHqAc4BvQH/AekBygG3Af8B5wHE - AbAB/wHjAb0BpQH/AScBDQEAAf+AAAGlASoBAAH/AekBugErAf8B7gHBATAB/wH0AccBMwH/AfcBzAE1 - Af8B+gHPATcB/wH7Ac8BNwH/AfsBzwE3Af8B+QHMATYB/wHyAbEBAAH/AesBoQEAAf8B5QGZAQAB/wHv - AcoBjAH/AbIBOgEAAf8DOAFcBAABvQGoAZkB/wH6AfUB8QH/AfgB7wHqAf8B9wHsAeUB/wH2AekB4QH/ - AfQB5QHcAf8B8wHiAdcB/wHxAd4B0wH/AfAB2wHOAf8B7gHXAckB/wHtAdQBxAH/AesB0QHAAf8B6gHM - AbsB/wHnAcYBswH/AeQBvgGnAf8BJwENAQAB/4AAAaUBKgEAAf8BZQFNASsB/AHdAZQBAAH/AeQBmwEA - Af8B7QGlAQAB/wHzAawBAAH/AfgBsQEAAf8B+QGyAQAB/wH5AbEBAAH/AfUBrQEAAf8B8gGnAQAB/wHs - AaABAAH/AeQBlgEAAf8B7wHJAYsB/wGyAToBAAH/AzgBXAG/AakBmgH/AfsB9gHyAf8B+QHyAe0B/wH4 - Ae8B6QH/AfcB6wHkAf8B9QHoAeAB/wH0AeUB2wH/AfIB4QHWAf8B8QHeAdIB/wHvAdoBzQH/Ae4B1wHI - Af8B7QHTAcMB/wHrAdABvwH/AeoBzAG5Af8B4wG+AacB/wEnAQ0BAAH/gAABpQEqAQAB/wFlAVMBKwH8 - AdwBnAEAAf8B4AGdAQAB/wHnAaEBAAH/Ae0BpgEAAf8B8wGrAQAB/wH4AbEBAAH/AfkBsgEAAf8B+AGx - AQAB/wH1Aa0BAAH/AfEBpgEAAf8B6gGeAQAB/wHiAZUBAAH/Ae8BzAGSAf8BswE8AQAB/wHAAasBnAH/ - AfwB9wH0Af8B+gH0AfAB/wH5AfEB7AH/AfgB7gHoAf8B9gHrAeQB/wH1AecB3wH/AfQB5AHaAf8B8gHg - AdUB/wHxAd0B0QH/Ae8B2QHMAf8B7gHWAccB/wHsAdMBwwH/AesBzwG+Af8B5AHAAaoB/wEnAQ0BAAH/ - gAABpQEqAQAB/wHcAakBGQH/AdcBmQEAAf8B3gGgAQAB/wHkAaYBAAH/AeoBqwEAAf8B8AGuAQAB/wH0 - Aa8BAAH/AfcBsQEAAf8B+QGxAQAB/wH4Aa8BAAH/AfQBqwEAAf8B8AGlAQAB/wHwAboBGwH/AbMBPAEA - Af8DOAFcAcIBrAGdAf8B/AH5AfcB/wH7AfYB8wH/AfoB9AHvAf8B+QHxAesB/wH4Ae0B5wH/AfcB6wHl - Af8B9gHpAeEB/wH0AeUB3AH/AfMB4wHYAf8B8QHfAdQB/wHwAdwB0AH/Ae8B2QHLAf8B7gHWAcgB/wHn - AccBsgH/AScBDQEAAf+AAAGlASoBAAH/A1wB3wJkAVwB5wJlAV4B5QJlAV4B5QJlAV4B5QJlAV4B5QJf - AVgB4wJkAVMB8QH6AbkBAAH/AfoBuAEAAf8B+AGyAQAB/wH3AcQBIgH/AbMBPAEAAf8DOAFcBAABwwGu - AZ8B/wH9AfsB+AH/AfwB+AH2Af8B+wH2AfIB/wH6AfMB7wH/AfkB8AHqAf8B+AHxAewB/wH4Ae8B6QH/ - AfYB7QHmAf8B9gHqAeIB/wH1AekB4AH/AfUB5QHeAf8B9AHkAdoB/wHzAeEB1wH/Ae8B2AHKAf8BJwEN - AQAB/4AAA0MBdwGlASoBAAH/AaUBKgEAAf8BpQEqAQAB/wGlASoBAAH/AaUBKgEAAf8BpQEqAQAB/wGl - ASoBAAH/AaUBKgEAAf8B+AG8AQUB/wH7AcEBBwH/AfwB0gE8Af8BswE8AQAB/wM4AVwIAAHFAa8BoAH/ - Af4B+wH4Af8B/QH6AfkB/wH8AfgB9QH/AfsB9QHyAf8B+gHyAe4B/wH5AfEB7AH/Ab0BqQGbAf8BvQGp - AZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BJwENAQAB/wEnAQ0BAAH/ - oAABpQEqAQAB/wHzAbYBAAH/AfsB0AE7Af8BswE8AQAB/wM4AVwMAAHGAbABoQH/Af4B+wH6Af8B/gH8 - AfsB/wH9AfoB+AH/AfwB9wH0Af8B+wH1AfEB/wH6AfMB7gH/ATQBGwEIAf8B1gHRAc4B/wHJAcQBwAH/ - AcEBuwG3Af8BuQGyAawB/wG1Aa0BpwH/AbIBqQGiAf8BQAEnARUB/6QAAaUBKgEAAf8B8wHIATYB/wGz - ATwBAAH/AzgBXBAAAccBsQGiAv8B+wH6Af8B/gL8Af8B/gH7AfkB/wH9AfkB9wH/AfsB9wH0Af8B+gH2 - AfIB/wGdAYgBOgH/AeAB3AHaAf8B3AHaAdcB/wHSAdEBzwH/AdUB1AHSAf8BywHIAcYB/wG5AbMBrQH/ - AZ4BigE+Af+kAAGlASoBAAH/AbMBPAEAAf8DOAFcFAAByAGyAaMB/wHGAbABoQH/AcQBrgGfAf8BwQGr - AZwB/wG+AakBmgH/AbsBpgGXAf8BuQGkAZUB/wG3AaIBkwH/AdgBxwG8Af8BzgG8Aa4B/wHIAbQBpwH/ - AcMBrgGgAf8BvAGnAZgB/wG5AaQBlQH/Aa0BmQGMAf+kAANTAaoDOAFc/wDZAAFCAU0BPgcAAT4DAAEo - AwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/wE/Av8EAAH/AR8GAAH/AQ8GAAH/AQcHAAEDBwABAR8A - AQEHAAEDBgAB/wEHAQABAQQAAf8BDwEAAQEEAAH/AR8BAAEBBAAB/wE/Av8EAAT/BAAL + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0 + CwAAAk1TRnQBSQFMAgEBAgEAASwBAgEsAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AT0BAAH/AbgBPQEAAf8DOAFcFAABuAGjAZQB/wEi + AQgBAAH/ASIBCAEAAf8BIgEIAQAB/wEiAQgBAAH/ASIBCAEAAf8BIgEIAQAB/wEiAQgBAAH/ASIBCAEA + Af8BIgEIAQAB/wEiAQgBAAH/ASIBCAEAAf8BIgEIAQAB/wEiAQgBAAH/ASIBCAEAAf8BIgEIAQAB/6AA + AbgBPQEAAf8B8QHMAY4B/wG4AT0BAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL + Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi + AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASIBCAEAAf+gAAG4AT0BAAH/AfABwAErAf8B7wHK + AYwB/wG4AT0BAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy + AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt + Af8B5AG9AaYB/wHhAbcBngH/ASIBCAEAAf+AAANDAXcBuAE9AQAB/wG4AT0BAAH/AbgBPQEAAf8BuAE9 + AQAB/wG4AT0BAAH/AbgBPQEAAf8BuAE9AQAB/wG4AT0BAAH/AfMBxQEtAf8B5QGZAQAB/wHvAcsBjAH/ + AbgBPQEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY + Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn + AcQBsAH/AeMBvQGlAf8BIgEIAQAB/4AAAaUBJQEAAf8B6QG6ASYB/wHuAcEBKwH/AfQBxwEuAf8B9wHM + ATAB/wH6Ac8BMgH/AfsBzwEyAf8B+wHPATIB/wH5AcwBMQH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ + Ae8BygGMAf8BsgE1AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh + Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq + AcwBuwH/AecBxgGzAf8B5AG+AacB/wEiAQgBAAH/gAABpQElAQAB/wFgAUMBKwH8Ad0BlAEAAf8B5AGb + AQAB/wHtAaUBAAH/AfMBrAEAAf8B+AGxAQAB/wH5AbIBAAH/AfkBsQEAAf8B9QGtAQAB/wHyAacBAAH/ + AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBNQEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ + AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX + AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASIBCAEAAf+AAAGlASUBAAH/AWABSQEr + AfwB3AGcAQAB/wHgAZ0BAAH/AecBoQEAAf8B7QGmAQAB/wHzAasBAAH/AfgBsQEAAf8B+QGyAQAB/wH4 + AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzATcBAAH/AcABqwGc + Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy + AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASIBCAEA + Af+AAAGlASUBAAH/AdwBqQEUAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ + AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEWAf8BswE3 + AQAB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr + AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ + AecBxwGyAf8BIgEIAQAB/4AAAaUBJQEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl + Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEdAf8BswE3AQAB/wM4AVwEAAHD + Aa4BnwH/Af0B+wH4Af8B/AH4AfYB/wH7AfYB8gH/AfoB8wHvAf8B+QHwAeoB/wH4AfEB7AH/AfgB7wHp + Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEi + AQgBAAH/gAADQwF3AaUBJQEAAf8BpQElAQAB/wGlASUBAAH/AaUBJQEAAf8BpQElAQAB/wGlASUBAAH/ + AaUBJQEAAf8BpQElAQAB/wH4AbwBAAH/AfsBwQECAf8B/AHSATcB/wGzATcBAAH/AzgBXAgAAcUBrwGg + Af8B/gH7AfgB/wH9AfoB+QH/AfwB+AH1Af8B+wH1AfIB/wH6AfIB7gH/AfkB8QHsAf8BvQGpAZsB/wG9 + AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEiAQgBAAH/ASIBCAEA + Af+gAAGlASUBAAH/AfMBtgEAAf8B+wHQATYB/wGzATcBAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ + AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BLwEWAQMB/wHWAdEBzgH/AckBxAHA + Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wE7ASIBEAH/pAABpQElAQAB/wHzAcgBMQH/ + AbMBNwEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 + AfYB8gH/AZ0BiAE1Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt + Af8BngGKATkB/6QAAaUBJQEAAf8BswE3AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB + AasBnAH/Ab4BqQGaAf8BuwGmAZcB/wG5AaQBlQH/AbcBogGTAf8B2AHHAbwB/wHOAbwBrgH/AcgBtAGn + Af8BwwGuAaAB/wG8AacBmAH/AbkBpAGVAf8BrQGZAYwB/6QAA1MBqgM4AVz/ANkAAUIBTQE+BwABPgMA + ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AT8C/wQAAf8BHwYAAf8BDwYAAf8BBwcAAQMHAAEB + HwABAQcAAQMGAAH/AQcBAAEBBAAB/wEPAQABAQQAAf8BHwEAAQEEAAH/AT8C/wQABP8EAAs= @@ -1459,9 +1375,15 @@ 464, 412 + + NoControl + 480, 450 + + CenterParent + Record TV Channel From 6981683e9f9cd43a3482e956909288aa1724e82b Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Tue, 6 Sep 2016 21:28:54 +0200 Subject: [PATCH 66/76] Updated splash to beta 1 --- .../ChannelList/Resources/Splash.png | Bin 62881 -> 59473 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/1.5 'Kruger 60'/ChannelList/Resources/Splash.png b/1.5 'Kruger 60'/ChannelList/Resources/Splash.png index cd40861fac0ee5490d49c2de8f24329e4654b556..6e30250a29355e95041b8bfa6b0c96a48fdf9241 100644 GIT binary patch literal 59473 zcmZ^~1yoki7A^eI-Q6kO-Q6ijcSyH%cXtR#cS}n*2nt9`h;(;%y@Pu1yW@@jKWBUc z{o?Fed#$dSRM7FI4&Hda119zGTxQhF9v78XAaf$zZYU|eJsC1FLDT6wWFs$JX(4mE52_|N4;N+}^LhK>#{3rlu>r3o-2QOxWFC>4-d~VJU(8U^irc? zV2~rx+S-c0wYe#ilAZloMMEQ1;?t*3=w|QV%cSJwFsbP1;J+&`FGnvfDw4Up+wGg(N>)}DUC{4Qt6*S2A{HGToiZvuK5cihP+CFI=k{$uOAAjVv497uimh#x z1S=~m{!+KUVZrXMWn@7?0cBK7Ov>(Zr#HT&goF$xF>$qumR7pKQm40O!NkPdSTQj% zN_b@CR2mu@nS!1kkw|cGaLP94oj9rI=V$c0yE|Ezhikh?A75Y2HrInx32ukwnccxy z0`$Av+ue`N&CL=91_tP!US8IlYineQ?d|On_V)JZ`rUr|1vYclvMyKq>ao>&t>lwi zBWav%E_+E5ILrnqyM3Vu_}Rk#1_jPLW3n#ShuV>2S-cdJd()+F_+0l>q^Om1Qg#O- zG0=&G{qzb8A_;OGQgdsqm>Fvx_!GuDC2BpM26i|O_1Gvb9R|M}H_pTfVv7PvlH8UNefS8N1gLQ=ig%j@g^_NUHaMF<(y zCe>>^26EC5udWVd)j$pNcdIu}$0PV^(hcKj7ZC`BL~x2Qcn53S0By5vsK&EraAU`4 zX|kdAXw!4v=^ng_&j)_2#Z&z9DP2r|ao%S=hwOZ1<{^TTl2S~~g~Q_krjM4JdEWb& z?vU3z)W;yOQ1kbyn+U2P_C<|Lb|35wHm}bD5x982CH|>Eri%J$;Ka~! z5oP(13)2sem8isS0cDc44*DcE%=_k({OMf!r?>duuF20CFFc!`o>VYSnExWb^*fc& zffid172xMO$d}8_tN45`HuP!an^SP!)r=&nM2w%x6t?tg;9Re_I@z2(n=x^WPJ3)> zTJZ`FQ*{#N>w;*Iauft>+6T!Ecu-)@45A^m=%Z~;6v1%d3v1T&ULe7Slnk(}3&wWl zf>Mu9jZah@AKSu<)T@`Z-!_co?fYM*+e1P3LX8vDM)z1hj|H=Q_@S}O>(BYf<`cEO zd>a|?c4sAptu}3Me3Bjhh*40j7Xs`}7Yz8}6p~?dH@lwR8`?iJEwbx5bHrC9Q)>j* zdpdr&#rN5XSbp;_s3u4ql4Cb*>xyO!EzH)@E!}y_J6ITuq)4 zDujv~humDAU$NhLlHPia>J~$we9^Y!*2E4 zw{XEgxz6K$4{mJDR`h@KrxQCg&L|Xs`qb`~x$UQNbJFkK`OKLKvpUmAeJJD$w|&I- z-pPn&Pk!!ffIo`+mT;m{%YB#OEX8ZL)8I&{8ucM>cSBfj@F$XdY2X1I#@|)ZGo3qO z$rRN@@#E({0CR0e4kH`k?pr#A{n05^y=*djOwlnLFJ979S4rHMIXu;qFp`+^H5FqA zQ7C-GK*$9>s57wRSxC;)_RYQ@Vik`MxCV)kI)lF6uLVmuRJRjiz4J4um(_MuVmzyv zyWPFi5Ya)G>fiq8*hfNg(>m!FzK_Q}Wt@xo3!6|Z{&U8B5aUx2rim?Q7634X|X}?4cmB@i2L~+_nZ8=N%sr6@Irw$C*8Gec+opVoTr7 z9qXX*YTt1@y}X)6_$;5Z+*n!n<5F@J2UD-=gsr4lu2QJ6N=H!}l2vLHQVrpv)A5F^ zZ26a@>b8IEC#dFQ%r1r2Q3zCC0k@OoA7CbozkD7AW~iViKjD6xYex>eW>4+=ee{rz zarYi<^NLBFBjK(5is1IKfaSzPEe@W|m5YHX;$wGZQ(wT>gCFpSgb71d{rcNg0d+Rb zy&3(bYmJ#Ww@_gsdU{#rO*qwocV4TI+h44|oG6!W)yHV;ER6JY)vaB2T#uu|c6n=l zcvgJjKb4c#{M<`Hy6E$}c8Ee*T<^CykJAr`u$o`s!ib+FN)@6@)ehtdl+JP*J>%Es zV;n?KJAQfAQlS{45Td9|vPu;rtdvS%bYKf~Eya9g^BCtI#^`n4Nw~pim-u+DyOS&G z80rz3T3x!O@){VlKGixb2~(yhQK&=Y?*yq2L&xH#ZYOW!EincT`AWuw3yG^W_zLf` z+0Zg9Ib*uzw!&t{CC;AQ6P*r~;kh8ePq!pB`UrcVXIDHNL|8>Ziy%?is_+r8s<+Bj zE)TFHa9M+q5KsF|`E(K|h1Ybiw`RuYkV(nEw7_iFuzi1dj@EP?TX9+Mct41}UCwFc zNq}!Dy-U=&F4}IrAD@ZD?2a!IsG_y1VYLw6#l7yGcUB|pmOAEa$zqSJ?{E4okNKA~ zWEU|98dHlm-cQEx9GvPmNp56r;U8g?@de!HJ|WB$PNfaqc*loC=PYB_lx`{h8FuRg ztnacvLxZG%!<=YgO(=As7Xgm>maRmLmgBCzqrJ@!n7g%|0NW;ud?aUD}HuBwD-UTc$MY zHt73DM8wp4EHNm*hVy~p&^2DVq*?Y#^`kxip|S%b?zwNAhrP}nsm(R#UnW>q@2IQ2 zdNivyKFyWQ7vKa+w`>Y%G~@Rj{u~RQht9;EeX^**)mNJF`24%CgSf)>f zEuXMdC=hx0P_=$L5Tdo6n@%*jKt*ib@^me%z9SYjt^M@bdV98%8ljJ#^O!^skxOJl z-&%uH?E`MUb!H(|X-Ee^La%Vr8CG7CSTN1>d;82=U#QN{i@e=X5_RJ zL!#Yluxb(dac!H!@$(J#J6Y^s^nJdL>X-S8sZX4~&22 zCp-3DU`t3XSv2*r<`&M{ni|y5wfdJ?TQ}=T*XYe5w8#>;(+N%IhAA4SO2%?Ap`sGX z#rvL;B11E;z$SAa2Yt_UV{f0&+Jgjl`-G_1l_(8KL-vY6O}<9OM1{#Qer&I?#2IfL zfsWm8xmvWM|CJEvRXBo*uLRXzpQ1AZtvfg%V?@%yO5bRKQ6sk^So_h&nuL2B%R+Te z-Y{)pgj3(TU(=RcDoUTpvd8i5;zmi$vUgKLqr;0Nh30g9Fo8EtE0YSf>&}aA=RsqhbH0ze?ft{?2k3UD z7UO%-8E}|#IWXDqis#*HyR_-G#_a`Z5nItVS&rKo#RpcNsDH3P)rO`(dRUXj1DK<* z)C&W?p3`%ZrI(cxJpEII`XVAe4@c0wdC;0G5P2*=jHt3~M_+;$t<5jYSQ>n|DPXU- z+=4-xAA5ISx^8lt+KeZKk3^w_Z&d7h`Ri!Zd!sE?-hg}e3V}fExqh6nEg|J&(-w>} zO^MC^Y^Td(*n+DBsnayG%uYw(2v@D(bZX~XleIn~@uL43-}NS35*NdRI!v7PY`;rp zgC3sw=KSZ1}ul%9k zok;l*GhxnflNI#G6lc^AH2NR$#d$Jx)m*q8r=>hWp^%s{hgia%QF?M~dc zQ}3JI48+txU8mEQUYk|I=k+*`=((Y4dc7+1m_(9J`}Sp&{653HSt7x5ca|pe zML$Ty%&Vqa6=9_8Q9=$Jgwm_}`$s1M5t7xjW-i2dxSB{C`--MxacU|x)T4(W@0>$n zXUUpLwfG;k)v;vHTUP9iaZ=ee*vUHwS?znbyymT@zs5Z+=j>Jw+v&Up{WFxZO2H_* zU`nf7#Vfxfq;LJUA4Eq^K>uqk6||Yx^`#?8a(g&sD@LZp`(k=8>yWTxA-$4uxX=UX z0&8-o&22~)1}I3Iy$Eyg`sO#0PGZ58C~wES1lTxaIQbFtoYE1O5MpVnu`QM?24_3H z#!+D5Laia8L&3PJw|XVr8AQk)ty%jnO%eQ`(3Tc7y~hpmZS)bByzf&5lP)Ia=|2an zki0DAMWV;=jk+>#k8%i(H{}jASp^8b@!^ zqQ}EsoS^>YTfdQ@;t3CjLJd;qvUmB}o^!?P;Y+B-G|VnC@0RgJ0gYVK;kOCX+ksP> zb8WME#p}8en&1<7{0q~$-;_H!Hg>K-3$kABz=Ho9D$9Xk(t|_(Ol{+p-=o^6{~#-aUUKIZd9&SL*zyJvR<|l#G5tMQx98@^g^=W zldHEvv2z6=(LVqS(G%J7o3frO`@RlXFWIS8H!GDVS;pJbO(AAiLQw4Bcp#qcb>Ee) z-wX|QQ=iEl_ihs*VtACcbti(}3%lNmMj?3g9 zB!&YMPnO@pKmRIgp@uW)rl*iV^b7Ch{W`Qk{?7A|F4f?KO>2tCHLD~1o}AS5CaHyR zV%oFLcMZg>v4!nx^ca@y^Ntw-TmlK;0_fk#XhAl((p53ynof~kR1v{k4rbPCy0#i= zT|#e|_sgj6v0`?V<_aUR8dp1_*`Vak^7q6}i$wp*7`R~FY%L$ei+^#OkSH8c*J^A@ z_57@@d&4^Z^@_3T3UA+@P?6*P$I`XDd*XJtXF^VlvDQ155%}1B9EcRtQsctas!TT# zeilm1~!=9!Yn&(Vj)mO|Vf-S@Uplp6h5 zd&lCs!K79Hg3BQ2nB_wpt~fM4Wz`#&lh~!LgnLhU|Lp6fr!^pWJJ@3))#`{N4+-lf z^qGozir~3xLt)8&mZ+2|9kX6y$@N}kC6UGY2X?ORkZc`UKe_Axd^H0QF}9YReH zX9Ptbh;`tK(mEY(a7xvRA}+8xEC!ONL4@%bZ;{OHuQv3c-Wj&Wv0MKZhrbsp^6^z8 zlb_!yD0TV1QKIw-$)M@Ght}0I4prh{%G_su7u#rW!c>4Q0z7UJR69yN1Y*)jUG(>( z5|Wl=IkQo&l6jp6-%Ug}ceu$UU+HK;LtK0C*!U08oz#bd4)=YcskN?pg|SZ4rf3E= zE^eXTDuasR*l7obrsj0+4X7KDHXbQs{pICVb&)9dF&tjd8MU83*Q@9&31H98D-=38 zuimP=^DVzGvn9;f9SiDv(Vh*3zl_Rm!!3?8;CUD*&tMVPo=IKO^q!2?kWyylrb zBJ7gIZAA6!aguqb(Q~!FXfi@Ck>`0?e zVek0>+t68V-{@wqb1i=a6zZ(eBg2%8k!vB6ejVB@p@1yKkh4dC-q@&>DyRLY`0*YuG?n%fHId31ZW zU!l;L`gb~r$kgo+Akl?MYO-m)l#y>{T=-eqUVg493B(%u!AYkVnG_;=`7_E)x7^Gj zqNVhAXUoo``Zfcl_oo=YXUbfJ8^XjC&T0$VQ3Vc;Sp+xYDbQ2W5Mw8r+tyCEr~skH z%~DhH&Zk6oq%Cd1FNA@SrrZ$Np9^&vA0QzoC7XTt9L`?3jRf?W^WY&FNh3Ti(>8<@ z`c)cmsy7sK@r@=|u90gU&$r~&oh%v@8g}Xm{h3Q)VwNpyq%kG1NW&zB7Q37>rnC0U zQ-WM9>%wFyg7&lyE-ur;EfdRuT^*|)G4s)juJ=j3wUp;JMw;syNz|;PS6>g3gr#Hh zyjRH=GqcA|yJ``2mGxx=8J;E%@;zU^+I)0`UV-V94s^&{)3Vju1_Rt0VAN#?E#g_K z2#r=KDo}~?&+V7L)A-wi{1d8ij4glGv|0$`O(l*Tk1mK_c_9Y(S~}q5Vitx&Oq)dD-FpE$-ts1k!GKrBKp?QK85|=(jP4 zU*bEfB%5*Gl|BY7R@94jF`*ZsBJ|XoV;GZKBl_kx#{ZBsY597=++E)veP+ zTt`2+Tu!M%tU?K%^f$Y!{ni0c#GyBGCOE^)b&1rDPZ6)sRyGc4?r76~WKU zP+{WW;WF8;Yy7e9E#8@q_gMOz<#6ScL%xye{v!aL3C{t+U5R}1vS zR9<{GlI{Y#@F=U#!fwcl?en!JBOV)d4N*H2wPZGui_QC<+fhlq8()zjj1D3ZqQWq6 z7CV>CB97(`)-tJ1$nSK9y)$Pw-QITG7ej7AqXjwc^hT-qs#oQ>39MH^j0yOR-w* zSX9ZT`f2t7&>P!5zbH!A_G1@0A`IWFVTOcBCSu!l^gbZvJD<1)UjEF3do$}>tTght zBpuYN8Qc4=wntnKb6XSogt zV{jiwPOT~;F$M$s4O|(RR0l-w$M54qRW_e`BD(IU!n@rwI)k{lLLS{qNqcC2{-9NR&z?Q0{!KoE{km(siGI@L+*JspYIa|!%8#-2vX z!=PZ18tKJnVSKW4bbum^oGaFun#P9|0===*1DYCcuVDFE-xBHx*G7Q+xs;JStOLi6 zmyhcN&cTfYY`Hml8?E*@{OR03CR?)K@logl)gie-TB}It0aq6x4>28juwI=y$y6UP ziuX7{mrzc#&kCz0hcS~UOxRnRyhLer^10pFFaYU7l9FF zmdWPilSH_k_LHtyJjit$my&$j@Avsby}!9Dm=eS*3g`cYzLHS9Wp@Z|oJ z%cFdQ^ww!!?R?B|f`A=y#0rMDW( zQj1GqPqqj!#Vm+E4m`ztf2pfHuC;uDn|Hm2=T!RYE9|PB`S6RQQTh;~O>1gqL1f=$ z%`3ZX*OKn4iriJ_r+16)eYScjRHs23S8;+>pH2Eb!>LwGPwm>gwxzH$o|PkF>4cm8 zBuoW*eA8rzCzZ72D%&463s84H;+KPkWTr!fOZ5c9IB7u4*E9V8$Ty}J+duvZG`4@1 zRiQ7?ChHj&A0Hl&(g4{88+BH=D!jzDZ?O1}1T;#+7cNK&DpAaY7Jjhp@a!a86?fpW^SOif6QwuhM^I5iv!hahRd``T3(Y!I_w<```|kXHDf7 z(QN=sLcndm3A9?G@TqS|xTQs|?*DnNVg|?eb*zBs=t|2zFIy{JlcU$UD1yxp@T~u8 z=m$Km0Pdi!*e>$RA1)qH>Z(65BBO4A0gPA}5&|iUm za7F_{Ugc#p#6YdqsS!9NfGzs~VNQMaE0_ts$iV4a$OwEOw7eRCnLZ)uAcO>R{MEsn zJQ#Tx42;ZoaLAn^XD25-Y~bGzK+25{pwlxzBaWv2ongilU}U*hR~X(OwS{1`Fy&eM z{)|wo(UFTmiv?qQJQM6b$w8C;tk4LIs1@-@O{>o107lKUE93pEM-@M56{i@f2gW2tRV(bzyn6ps{f$bqAwi3IVA$f+`TSb_>5 zQIA5%P*K{AYP!PWtM(0<_vpbR$Js!3nKTNcnXE&N-Pw3p*Kk>BPJj z<(c>Gi4@b!<#6zDj_2F&>?CxSYDOXF`Q&Ih;X50yr(PaQ#GCgXB=PUD)at+F$gPQ( z?A131S&V_1IQ`fDfZ;H2^r|G#2T&yA9%T;DYvCq?DF)ZCF`E3Q_ul*j8`&q<0<(;A zvY7STpH&vdi}n+KdOAG1yf6fE!Z{PR0FB72L#jg*Nf{Dm(9i#jNX+Iy!ATEQjmB)M z_nyjUKNCVd60By|n3AOkgh~6I1@ti(eJ|bf4lKG5 zrtBOsnO-B7^|yD6nxS7qWkpON1(psP*k+hRA~VAyBMlyXpS8DPWbk1kh#fJ@dJ~i3 z4Zd4V@G~G7Tz&s}VztYDzHF{WW)!sN7hBYA=t1?H@~+p%DFGKEfdfF$fY8rpN@@aF z9Uvn?@XQcPQ(2W8dSoFhf;Z&zjV#i@X<9a9^Q9cHkEn-ArJ#P13}@?fAAo%SFLI&(i)qbG7kJtHc=rmO8I#V)GTSlNJ+BF z&wCaKJ|c|e!1uk{cN}5-4i-FJm=QSvMY+WAT6};lpA%_~o+kw%=`8tw3(pB%>~n*iyydj z+3k8H~ zUS8h6L1RGRv`6SUFGbA~HU0B}EAD;;8#KOw=jvuESR9O4ukoNzt<3>^li?#G7jqXp z*VxCN!Cp99+oK5E?-#Y4ryaJT8>b#H(rb@t22kzH{$TBH!9B*?evW*&QpahsCpMT0 zF~`5qI})ix7aTP?xm26T083yr=@kbD)YsQw7KKDyz*K1(X?5EBgK)Y7SrB?*fj`%c zmsj5pK8~QXr)z_y_GwqQwp;_l_VAF>%t8LWbeHpo4Z?G|1g=O_cmX zN~r52L@7FwtCjZsC+C0^tpD){Q5eLZv}tQ;sKnDVM$Y+SpkTy;zkL@ZAasWb@TCTi zZ5GDvK;UGE*je4&gygj80vY<=LAmVx2HPIbMjk>w30>s=y=tHZ5{N+xr;axz<-8*+ zDjg6v*CBrzcscWaB#Q6fI1>mI)s0lDV%0vaIXI>}hZNnES43CREXxQn zc8j8YY7{^i*3-lW2-ygzcr1DiO8~7%ySX*J#?^HYD-kgd7H1+Zza9g1j63e6+1GO( zR6?BOUcWx?FsBEt#kQ0V@#LD~3j3JTSgIl>Ds z6l{7ZvSst!I#k1Iva(RYo?3j`eAmkxo>3th#I}aECavX&_djHakd?^u^xj;b%?boA|Ar!$U+Qf=8&G zF~Y!@8Az5UdHDRdA}N`{Yd@z~Rm|}vib_R|tod#!OM@4a5nJvlgZ(c_Q8RWmspUP~= z^t$=AwYC3kevT6e3#3WXh>||>C4E;Rw8KRd=*$Y{i4T=p`QRLOQ>X&fhI#r@_j&o( zNk}V8-ve)aob$(G1H(j*07UKRZdW(GHr|vv4D2p}yG7XHw7d$v69Af(Tcw8_v#JdmI zPTFT;fI=$C@CTgznZwo&l*3FC)SPkwBm0SiZ%{)Y(|WEu$M^6NVPL#(uNP~|hXTXW zp^#lQG4ZcF);S54WMJkZ7;Yckkku~6g5~y^C@O-)WO#6Dg6AIkm|>t34@lnJ$Wq?0 zLt-enYv_C+FeUrzJ~;ry^`}eP zAhGjA=`I_>bi1S-(ILL-q9ET~JfnB5_>7gmYB~@rH5h^}Q>1(LD+=`A4R{EDmkW)K zpUx*?-M_NmLT4tgfvsgBrt`>k|Mmo(@L-@M7ydpeE{Jfen#q;eG2=8z(s{Kw%>Z*b zx`MN(>xIyaki`E3LhXVq(OWkh$YJlP%i%@oMPyuXx*bfsIjQ z^Yq*3XyYrcAS9&%QPSf*Yt`Xo{r(VQ&%g|EI*$R_bmA-8?qWS#1xGN;7(UtvDM&0$ zH(*}W`%JxedXC=E|FH^v@hx3$$&T-eo)%^%912^=WxYrc#8G8r+Lc%={x7D_ zzGU}g>u+2Pc@4+Ix-||1I}YCig_Eca;6T#y-@Wbw@&p&=v`3CxeCkqU%jodhuyZ8Tzs!V3WE2XOBZ7#(5v*O= zA985JX*K4Z=hwk;g#LuhfQ`ouqj#0a`n^jf>g;W8?EyXFPQFmAJ#)E5{f43oZ?%z; z->s@-@uSf}%Z!%p*~v^Deace0$cL3qIti~cp6IZmFqV9fuL;`dd)Js%+tD~jl@spG z#6uhn)jsYQ!t~-2;&U7bq^1}^?xR)zJ`(dELQ6*=h1zV#7`he>g~#eCIeu7WaYf7Yg){Z~m&pa9rw2EA=XiC(3-s6&m9ThV;$k`8H?` z#L5lWMgj=PHe+HCU$aRdAEgvglOkp31k>TLVQ~3wM02V0rMGFB+UVh)zmI|bToAvf zwV^~zspPl~nE`_^g-FVOl1^aBjzW#n z)JCusdlwdDRiS~9bvjJX+zS-sr_zQ@*9S`nImq$8_Iw7DYbnaX>-Ga>NusFl91h_u zR2D<3@1*+)e#QR<$z^{YJC0--LfZDEZ;<{Pjq^A6hlPmaw;<-7pjs-)zcr)EQ&+pg{qb12^(iq6X?5wXLKV?Kvr-fUjt8|tX@GC z5;{Z#bM~6n8Tw$^3g5yXKHDN(GqLwNWfQcHQFsaN^c@P7ffDyAb2lj1Nd@H*(41N) zCRmC(Lh8N6M(RkpL)Sc00^NZM&h>xDaB6z`H4z5r2r^IsE39gN9*rJ`XiS-nM~QW+ zx@i6y*>drO@v@3>pve(;NFDA1SJS*;NZ%)A>+WtcsS_Q5O;`=M%X+}8=sg$f5yz?= z{!S6jq|oSa1kT0W&9pF!y%w;+TGOQi^Zan&pXc4I#A19Xqt)iYWc#ZY-OW~CS~!jI z6AZ>sEM>QQn4$k2-2P0t;&=mwLt?Z)2F*gVb1}jTN1|(NWOXG7ZSva zdW#&Z)3@P%-3gG_`qGs>WFGimZ05qMUt9vBcjEe|i(oPs?V{Tt$P9M&Hne#Bw`p9C z=i{J#W<02V+64MG*Kr7rX2V>GKwiX8`hEejx>X=w=BisI0|QtED=VwNn53wMlpOTl zN&#PugYC9JhbR4r<%DN`#y7q?O+?(_=1S9e`!e#Bg=&;xf(0^pe)nxUn-$^=Sx?`Q z>t0(dw-98wWGSS>0HiYHMK>LlI()(hFklomKr!!s!b8!3Xi{nRar=ZYI$hfiKFR%) zYW=FKT9w$y)mEBe(4BM1yOW;ur-`4LN?VmF)Jga47E*^IWyi-}Nw^RV<_bY+KgoX4 zt3y2yW61Koi$R`@yE8;b{hXbnyA3@I&@Di9!heAIfGVnJFt6#HfuqpfH^)l@lNhVr zo0I1Ph=rE2YW>AjNAArggLv_VVn(zuDJSnFGkkpCS53ktmX37n!Z8u1dXpKA%zk^-EO6k=@y?)Mf|P=Hsf`n%BKZ(B1+- zf6Y{ACzm9LSqkG;3%4+X3^h1}$blm8&JhPBL2Q>g7QxA;=9-a(Rj<~~% z9p_ib`~Evh)%f~%d%jvrI->6O6F)ax6lFW(W$!yf_qqx?Cch0(c3;1{4lwA*qufJr$(z^?&MjvgEHI)Xl*RHsHH4 zCm$!!NX)6jPUbwK^0`|}PdP}t6E!+fdHSqj6{K0c*B^B#j>0k?A5-k(QEI*T7p8Wh zWUQ?#{-$cQ2Fwzj$!o_%1bcE$XB7^I;9h56byzHB-{WVg&|Z2IU-3*|v0I|ed0aT0NtGqn3h?0( zoRLuRPzcyEf7o##i{lg>FuF7#C+sk|A`Qm3Yd9h>3G)?V5u`U|59z%U5MO_#{+Rx` zGFn>Nf36IYtN;St>|{en6~DtW&R2XC4E^qTN62&aSpxTE0wMN8vrz)Xz^||WmtLxa zhcKa(sjq*RuPCE2xfTe9r!I<@-T5I@*@421m;;;~*asm?(2C&Fy#CLBT{R}@pMyRD zS_Wa@%+|5;wq6z1-7bQsMqm&Wx9j&w{b&Fzqn>}cV4mkZ1b6dq%Fn&+2GZWm8}C&Y z!E7S!IT4p7FK%ZmK39;cJvilufD}OXWA%Ub`Aeg(f$E6y!enHu;b+cAjUhsy;-Zy% z{BG%LpAM;O%eA!Y*HR>IeZSIew&eEu4d8z;U|VE21{I}BBP*6Voz}X1($)E!JW&FK z<_2(p>R;}eL7D`ge-^(Q%6>N7i__`4wzion+7TsabTRnA@r_IfL06Zcji(ME!r!)E z)1Ph=xc*~yz!kooIrzdNvtK73yx$j-00`>63MVEsF?3=)w2Y-GGdra9KiSbgX#oIZ z%C-TJp|_$}tl-;xk}q?BAW1A*mQMIP>#2>TE`i7lnKFe1bS6+Ii}kWaFpr-j`kfs6j>d2v(j3 zci1-jcu<0BK}mP6^q{Cwg;1Af@`__1$e$$h`K zd;^9Ir$02kMV<^G60&*PP?r537`+5_Kj;qy8~6EcO}Z*$SU$~0m7sLu0Y}mjUQbKC zt{w$1@4`A*S6)f0KjE^<|}~ z`{iaXcg^oTOKhC(JfnTNwAfgD7Y=0i<0D3A^^Z!2K;PU?kd!w)dkWw@M6u8hDg=9e zZ*Cs~{5q}pcmaA)F8RN@3oxaOv?45syZ&Zg#p5yD z3(WHI<60g(FZuL^fZ0Tuc;n0ch<`{xJg&Yb5$}9CI6(dFY@i4SNTc+HP8@ErwK2iS zSOFDJz%f6lKdJ^`ExPaqGGp%|qF_Uy{a?Vwl;Sejq#)w9epg!H$jEh|oP%Q4MPl}} z%N;MQ@NIq4!7fbM{+Q+n1bGw$g%H`?(NZP7ng&X3<>uigWcSN+C5H(44d89%617g# z*)8J!8;-kO$bul20ATLee*mwLEdU*ccnA}XGZvH(K#-7m2Za#v(6r}&q#yJwCz!K-C6~bT(h>*j`-~n)q4}_MRl9KZNFDGB6 z2pxpZMw*oH3H-zeRm%4?K@>7x`5S|Rn*Or@5F>N7{$!D_?mc0O_MJ!)ydSOA+Y$OX z76A#=UVuj3Xe+;U2EfJ=05<-rCP3%y@gNe_PUXDd)mcdk;6Sh6BTfQpt^@#@QoF%C z5b5t$H50!FoYAqdd;ai(g#KF=?l8JMfV~o^0F2|c^!tw*dV6O2H-A+UQysdX*y_}Nz`4xCJmk2}lTs`Su&Edar(^eLbw2Ql1^kXhT;PgjCW2#hlFkM{r zG{RSg?7waN$Bm~5?tyPQ`C!hJ>*5@?DS@b)31unu%VCm~fn_@N5KzV=O&v4UM*Ew_ zePXwe`xm5S7Lvsts}A4q-YZKRJD0^#SYqnS%DAc1csvsS`6;n_8bnb?1QZG!kdn(N zDEy;qiq+fd8v4Y2@{bQ{;1it>d=)xkoK{=T>3EKjOLA|8{o=bfoIE-{*wV}Id}fIJ zf8>x%)ricG7nn?0g3!!eTJj!D9E2T$^Yi?$z%TD!+l8M|aedv$!-4-7)?^I%6}<`~FN^EaSP| zufc>Igrvo~|1{B8d#b132xi15$>^l1ck$FJ{L4Q6CwW)pGE<0QfMDYnxorSQH{gIR ztM9$bE8`UrAK(1iqhb`&S(8l$D~{MvL#LiXEwcAkrsH6$ss9b@vKei5w%D2o zMrewsth(KgC3}W3((;ZD6;E$kuueT!v}=!&+R+}0U&E}Pa{6gHmtDqR2a_TdkdolU z(VWP{-jjeYpk}>qTDE9KIRCUnVEb|`K9l(@xUZ} z_zDT@g#vJG91#`Yahkwa0;lPIOD&KG(8y`S$;o>oep!r%UcC3^tbb@{9_4p2_$Y)i ztjTJpF-60|FY|XA{|L{(mW4$1m1@|PsQQsFw z%W*RZTqNb(K5)kZixfZ||K&GjtiU1~`__AG4X!c1{g9i5g|YwHy<;vIdRrvDibD)t z>hL>k!=QO}tkY3O)|Vkdp$&t@Q^;Vcml`kRN;{2_=1(4%D6e3 ztPk(3G!@OI&>$=R>ABC6ql+(shpf0)zs=;+6|*4LuLi15(KriLiGI z%AfYeHNVxIR)s#iFQT6G$-1~Iy_54gk3dQiSR)!ySA?F3=x{!i1q19@o54dNn@=4c zC>{Xf3z^6_UfAeacJ4lEU-O<)UyHs{riQ$$s@O*6=TSvrOEyo&jtMUw9QnQ%NS2EpJP*0J5i00GK^jP}&+|wQE}vkrGLgYyK4j@b;C$#n;Nd0)Ik;y+ z7B&%wQY&Mmql)%tO2iyYZKSP5`!(c?C4;SsR0lFTVm|8^-x=K+e-oSc`<^W(>+?Bl z^u499JHq!N1~O(k-vtL`$luYZv1Br#W-N|NV3WKJWxswbDTuP%ta|D&nLM$Y^S*yC zkXrmgJ1{65Q0}eNs|m3q{v}ns2W$kX6PBC-V~48x)MPR7bVX&v2%EOMomJ(Ok{4_? zs|y}t_9%R1uo`lR3IdJ?I>4?FtdCkHdu(I1;n}%N=#AM0o@{^INKVEhb@GR!4kP;S z2eux?OEP6ME~GqM1Kw>DJ9%CHQ0Kl&Oc;4P=lZBpM&twgN#O5yu#~-gT@8e(=Q=zV zNmOCeQ;EAFNv?CCu~-fLZ=i?nJB?plNjjGa!L54seNSai_VB-C)QMV_ZGIZT_-o4l zTv0I?Y1?OUTYYi?+n>QrR}W%a=E0F*Suk+}r#9`X_wu@5VPQ=q{O;UoA36Qr@L*U@ zm`dm~tHPn)+WeM-r?&keG(Jt2+p{s8E#gtLqh@_-dr&zeqHUSdO(w-h$rly0(^`Qg zWOXC^A-9W?+4>5MzaX+*i3KcZqCzpIn#J-nkvDGh1`q28+6n(3es*4E_ft;rhxV$a zB-4&Ljo%KQ*#q%ybSXlH6iN5mWIHga!LgAz%Jd{vgC*3vFw1<6myM5FWPGN?%a%>b zw(;OUBrY{{Z{qzt=D?0aKcO*H_ZwFyCUr|&h&+$>Z_e(->vGGc_Nl@D-TWkvySn1O zlsOqnlfn#M1m-Di`?4=N-aD@BHICZB)2VL^m@{xT^`FO3g-#G)6si6BnNKU& z4$cNCO9ts<5dvXH3DKRN=Q%v}L-SpR(05 zU}0?&5>OJ+B;rY8zZssJTPogCm0 zBY*i7tIEVK)oP^8!0&`-9~K%2;YDQP$U$6|giHP;$#RTv0o2dDS)QlQ=ygZqxhydQ zso4mEcZi9piQt^q@9s(x!Tu^gu7oag3)3Q55A+D`vX=!sL1d-+4s4&h5-1`+{dKHB z37^6zHYnRag>11PSuD^xn>;*9;$$5~*hmg8cS?4V`eDViTod&ma=f!8U&8Z`piypd z?5QrVFTGK*@xg8S)WZRVZT{jvT_X>1pA zGTQpyXtzqkXc?lA_k33<$s=fa&O=5#aKSGHgN;jU%xzW#tF3Mvwfw|^Hat*$29jMM zzHWiLSvSess#2V=9h9=d&ND0O?!%ql8-t@cFp75?TDoWjL<)obJtHb&~M7?8RT+!A)92*ncww+9Dvq59q zwv)yUn#N{hqiKxBwryMQ^xpq{-tY6_%--j$y?$Ez{8Q zl_-_GC}WXk%##J`fIzx-3WyQR$00=}0sf~yNrRR7MjSM@(5$OD*gO%vtI1_-JUyV<}ZyAJ(6`e9&W?piik0Hc?YLT&hTVo2ut=p&7u)nWCv8!mo zgNK(*-~{oJ&8GYY$oSot5lrMvck)g`thm)ru)SH3hg(&|>TdA^Y@x~hF)BX>+8Y*+ zpG~HWJXZ?}aVT?85%ew`ce%```n9~kJrvQ9SDa)HbKLorgYMkGb)%Jc^0gwT$uC8( zNPz^rI19P%p|;?nPPY!YgpW7jia2Y=Zxa|Qfj7Eki>~xuFp)F9dxr?UBk=A~U#OT& zzi7Likwa?&iT1F=Hj>&ISa}4XOV0Sv4OWZBeX_QBJz?{Em)=g(EFza< z>K*z;(>d3WoH0rT4eE(CI0#Y&|`zDe;B~q)rg-)?p zf9PvSa4ON~>yu{1UCFfVqMfkZ(9!4JrP@xuU}_QC_TG|P-d?L5Q>2)-LZg#%K@S1y z=~~T%ux=2PlvIfNY!ALu-dQG6L^3d7&oBS%%Da5DE+|bAp~zBjy76tk*S2fLyr8J_ zY}kFeEN1iz^F1RoBgKgG^NKHp+2A>^EEv0Xk?7Wx9o!SzR9Qlw1DAl#qfYUG_%<^g z20sSlE1lvWACHU)k+E~oOEGkX1Kae6PT*70974W{oWJRZ?L2w z31~;C3T?Q=)1poyI3&AF6jf{1_fKwU8Ggmh8;ma+VACG?n$+fxL7eD~k2BdHnLn6v zK3-EGAi_D8@s;&xuC0I+U_Iq4cj>=M>#g_X)cru1>z~7fJMo`|aRw=oPYN8$eQb5n zD(Hxq1$W_ZRTJ2<*9OrUr#^kJv!-4G<)GZNPx=AIMvJ+%6Ew}tH5Wy zq^Tqu zh#Me2)?HFOs`OilL~g0wHq%i_;ZOu0eMA5XYwqY73WlhL$U0DlDEdf-$Q1ZpVJH4$ zj1(I1i{4j1PrsJMV^B&Y zRxg>*z7q?f-Org3Y7Z^z@DA{NX~d3(EOG-WyZ?|xE8 zmXH#Dei&RLQZu{Lypz06Qf5xjQJpL9-z|c4WxKYw-PR;8nv4wpyx@LKeDrx7DKHJQ z{S@+M;(D6Y&{xKay2dm-41XvjqXsIS7UO~g1S2NCs)0pmdq^DFYuXAR;4A8(ez@7o zRiKER41>?e2#YxRu*Vnsaan=$&bT;Zr9K)ZwTK2yD^Oxd?1AazLnUIH1QpRkNN~)` z31T2^(%ql2$KjMhM4Q>v+gRXa?+9cwbA#Y<_W!}-6tW<|b~hUaDScsq)_z*wwx~&# zaS-PM^zhWUv^&_%arg80I)t_Y5+MLgsAR)8Rz)wC^E3MSGrFIu(!2h`AK>R|ye;Xp^8&1#a- zVhVJU=y%@_b_-}T3t$q&9toSs*Lw)4AwY)BAdZAo##*6P>Gf6aG(+CN8q<``g_aeU zBf}fNG1t;hC_vBD7YDW!u)Sb%kg)i(R<03Ootx^bR=^r0T?dFEnJJR}FJq_X15Q5H zi~i;5qv$?BrqnkaqUScPmRN#QQj3+DF=%bZhw+3BV;VPVP&*pQb{xf&G`jIf$CMPu z5f%>ewx9{Ab)uI?P{GAc3MP2B+ne7&=2j<@^e%u?!$wHVU71Y3#tmP(bWg55@`%&m zy`h$pW3pbIjPU_@*0}@iijp1LW&6;#*oR|#Nd+0D-q3^TW)oTp9knoZ0tuHkD^DbS z>P7MgO=T@1p>QL`=Nl^m>}cJn+-mp$E+m>S!c%M}YOppW*w5xi%y2j#^41H;(hF`f zr#^RvkjNsYKQ{JKBBnP&AMrz68I2J+F$@c@RU1P?B64;AWpWZ=QHiw$w-*>sA*1Z@ zYbeho1D*6eRnSPKX+??{DyCa&!CWMe36p}=QQHgaddsVM_chmkZ_C71cpmBRGZWmb z-z2x6VpcRQ5Jiga3g33?Y=0D_d4rbeSfrsdv!pM?-VNr5o1bVCN)eeaQ55?TRQ~j! zwlNu$HWALH3i6rlWensVZvZ)Tlv@USNnqU(ZkT4gYzlDfa$ruIc@sM>R=$9L?2>^^fNTCdlmNz%8 z3i&SuF`)$Uk&T?zI9kC=PUTd(kx3b8P`RxW)9~su9v52eA}WxH6Bup_wXrna>L+Ub z_XNHC*mNQf)7De%VEM!{x5gQCol8|E*@Kn3uwppq-%Om6V4w%3`$Upn#5)>r(7E%$ zwogU={-3s41O<-nr^gBx4jtu3<+G_%KpG;}SqN@B50=D?AW#Ge!0Bl%YvhL5w*Qf2n6b3E^ z5HHxm$BJ#chhTQX9BQ!%+f{_MLNq{3yyhp<`@n7a<}p%k8c=>8l%k9URcnW|cPn~p z%|o<7Ae6V4G6WzbLT*6GqA-{O$bP|RrYr(e{jI#DZ$X1%8WIO38B|Mt^|zyCj$vA# z^HO1?NM6dnHFA+ljBp znvGxWzZU)-hf&?V`MPj3N4TkiZz(5e5h8WvV+7Ek>`o+5ZZlt^VL7*6J#GmGcEc6n$nulJAxhDmVkBYN@;% zXcqfBJC_1DI~UB!{Vw=%HYhfxV~B>zAgJ5rF5--}S-;h+-1azRC%lf&M8iioH-1n8 zbbNN$k#oDAmL&00&}XmMCJJmRVJYLeK+mFY(JS4r{YN6`P@&s?(F-tanX;W?Wr!vc zrmbC|ZBitv8cm3SK~jl?3Q3SWt*xDGR#*E~jvgCi2BosgM*pvFz|FnzPdC8A5y`=U zCq>v^)9ejaD84#`UH8)<``xrX<9r#d9qo)pR0AF#Qxc=Fu^+CF7s^98ho@&Od57gI z+{yz#7@&qwdaVErxbv`SCL;SuN!mpmQS}EO0Jj6U-RXJ{sC<+cFT&Wa4nA?Zz)k*Z zK5q~{^$3YnCX5`;lH(i!DBRxNSB>J@&V2RHVcW4vkmNJFVa% z98mS>ejhQFRg8J0Bz@+ zdNFyeF5@|MD-PS_-VfZ6q<-3FufT<^TEyUTzZ$@G0IApe3x-zA1B>xxK6%6z4RgcM zMI5?Q`HuhZsQhi@Ga9u_FRpZlHN*WOH2IW#DpWODqvKdp67nd%#6wR8Mul5OY?}v2 zG%j??$t5rmGeG`p@D`@wy?|6$9QL{Etmp4~$V5;f7W0z8gbEK+m)vB@-sY1F9mt;~{Rz zFTMFq2dt;QdmS*~?bS4^Z7eOpnMjG;`i$uip_$}m>f!c@gd9iGV_83;3XdKDhWGbMQwY zc3%+NsPR$1JF9h%gLd0K=U0#0@bvV0Q(>K}bXMb#|MIgS6})^<(@rP6?=KMm4}2p( zAALJ#MGnmSJ7JA09P;JMymg zn%wFLeISuyyC)SR2^E!`mr-=fUz4IDq=nYrBaY9HD>M zJvRVL8^&l~3Nm2+zf6~cLhL{Gnw>52t116(jN2p-f3TYE?AO~(Ny_J_{FH~L;FoU}B;*IOKY{mFC zFsw&Cs1}4vdK7EQ3I923IOiwG0`oHmg(CJ((yZ?|3_6k5Fc`X; zAK3LhYPj-A0&Itm&~~V>lvr+(ym4<9a;?|7(o)?eYZhN1w!=m%j4B!r*>*6A;I}s9 zBx9Z}m}iI2ZBth74Vb6qV_v6#8dQzvG7`?yCcqm+U%92Jb*4EAD15^f@a9$fFLF?1 z2By|zg9WD!DKU*GJFgxr56gRpH@4F{xnJpU_3|j5zkma|{pZ}GyZJZG_I984uo2QP zocSeCTsr+G9`7{=&zp&2n=%3x;a{-K6_OH21`ZReFCG`zr2NtslDbMq%ANxy`Y>xW ztOy_R)(G%QLqqr+ZAT!xDB2{xDtW&d!@bM8g(z z`xn1^e|`Kw=ENb*y|3d^L|zZ0WkC!7GMW8q9=?T8oayEo0R-zE8tFOcvOyCz5RZFAZwBH zOU4*%`VLr%$#V1w>;jG}Bwbv+Vv%jk+aEUuj?h%&X^% zNTeu3{^->F)k968l_$hR+H?IhFD{oqVphic2eY0hEl%j_FeU zA%x%6E3FeHavaLLWgpR|{FUIiAtY4QTjSqWrsNulr2HTGpGV;;`=&TgCCivgu5;r% z9+k8pZ-MDrtFuub$Xzcp0!~TJr~*z}j7j}0C&!Z|+%)DiIr?RNyEF}>XL}vU>hr)1 zhnx`7S1Ocuo0xhv;aHe=Bh9Rm9G{>NDSPV~n)!pptcVJmd_7k1D3xxJ@z>qj=FDZJ z?4$-?ptj){JOI^E*y^+%j=pmfXXC>g?rg1tz$Ir*C8(FFe8%ywn|Q%oq(iOAx>VWg zE@|28ESz@jL+ik~mN7UeMEM^|AU?kNKN-4<-hyev)Re+h4}@RW=(&y+WB$JjHddG1 zyu3DoB0k6R*0riJxO+ldwV(cka7KAMkt|&DLsscy_vr~I1j+SNl)s+?o;qgj(i{AQ z*WlqI*2ebGM+>Pm(>=>6i)AatvRN&07Q)~$jHla8RURXaRjxyUTkI~tHN>vrppXO& z>kV@6=snrgY%d}d!ZmP`4>lx&Hy>8(v9spZb^6%<^G;Af0;Hv-t!CSy?_7`Jnf*J& zb2rxWJZq|_K&FPHE9fhj}FQyLonk1_xC?;-vmckok*P2jpL(Xr@hOlWAR z&Pi^}sf^WzE%3bkrTv73Vq-N)HESG|YKto9cs z!#-{XFi`rmB7dRFb8>Kwvm`!!eXxnciGnv*5+mTfaXx1)U??ep&8_F`n*XaiAlY4w zf%74CqbT(u)e$Cm5?L7{1~=lO@6!cJXp-E((+@7I!wW6Ingh?q|5&cZSiJ>uiC2qa zvAM}_qjik*hLFgRG%nPF(`@7rIYQj58_ncuUt}sA0zfO1;wM!yOP(Fle>4?<6Weu30v zq>$qnZt*5%XS*WAwv9?C1rM!6o@(;Z1#mkXKk=c?iog>Hh6Tn*OIgdZp*#{e2uw;J z7qt=$a-zthD9EXKcXW-9GE~25FZ8E1l&02m(3b37;c{5S{?7uGV#D`GK`?S+>&d~9 z*ZGBWuXG)HI37UvwS+b9BQjUVbNeRM^=hJ~5A-@zgYrc=MqZ5BH6}?_3LX%Q`@MBk zS$RSFVc5#9Xkoj$HO*AWvBXoqPI=)ve&c+w92cR90P;w+HVP>c(ft9$;TNGYpX-3V z21tjms|bq|_8}ZYi#-ojquZA#g?Tfu{#&~*yW4ME!ZEAWz5l}Q|BNqacskrB%b;ka zIv)nbwU2<4R|}5arZ0d!7fKFd(|RD@b#FU>xXVF-ek60fyW|A6KPZj5&l(Ql0RoP& z0?u5sj(JJL8`Z8NkXnJ*>-tNrcQKHyaon13rE??rZT*|yr{Oj)6lZTy`ixR>3EV5v|pF%(w9aI$cNiuFLmayjw z2;l_#EpKa%uY$k9l?ZhZUmt&k*h3-NE-(i}%VT$^=(rm7hv7|mE@2)Wv4dxL;30n6 z3!!(}@FIZ@0MdJ4*mY~2(^2D(0s9~2|HqJm#3&oSd8kbO@t*B$gId3L6q)EpbErS2 zLwq;)ZD4_J>6BnaFNb1?YZ-Y)m0-}EiSb!p z0L5L?RI-6bw8?CSM!hWB~6_Kh-hJ{c!Fqh zzGBU_%AZ}Ur@Cjjr@I=mtAm7Um0MSwopprQkS#Z7U!=8X50>^EsJ?xpMY@TL-uZJ} zmAV`0_u&psL?y#cW9L;(Oi;7;FTyzV+3+~;tXjJH*j|0QvTo~1vlMO;EaQo^PE*SUFnkaM`^ zd-3~|BJmSVrVs|XU>%2zC)HDh*Fd<9&gCk*j8D2vCt8K`W*e?(cQ2yhb|&{#(Xs%& zi=y;Xl+r2TU_<%G&pmt`r=F||sFfjdaIz_N=hYu8LFidInrN32H1 zPNS1O#L{_i?OmLZR9i^noukkZd7>%HZ&dJ!Qe!=L?vHJRI*Wbo9w&3~pb6G?kQ+M# zF_i!r6%~MqiOE#Hcx3x0k`LICU^az_O>MeWL=rnUF8?aN5KU&`xXkX~SFxDWrX+}L zvnl6TsuuQP^l>UNSnWbr&}A{f)fY^N&_QP)ke)OgCM=5Vm{d^-b^pzlrv z5WR77cdwEoecQVhhIl3k=Cn~+)L8W1>$ii8oF}+`6LpCTy$l=Yqn}U=3(giM1NftR zStN>Voc#F{U$ct7PuiE1j$0%G>3isGal|v8k(GANrq}~rpK+nWt&8lR*;MOs8`|Ls zSbz>Uxou`WTWcbko<`%vZb3X$y6l;cd39#kC%thX>gnrnre%sBs!>+jzQnP-njGcu z^1kFnAzX?d&}Eo%NP#bv^I_gnGtS*sJ6&tzaB+3LzTTC7dU?^J0Ax%Qe6k1#5S*{J z)T~bCQ?A*AOE=CHD1N+U&{iObm61ZPXv_G96#b|Q{`KI)$bk@Czf66^XBRo}mzMi` zzrY=>7`c+M=^oxM)R;(V6{IXbl-f_nEnF0?QKnd#1MBJ`4M|6ZuW~7|%P@q(zQ21+ zzv#nB;CgG2f!41z@G~Iv&ov947<^bUTGxT#0jKbryRFjB>@2Il7oC++Ai_(#|}>@Z7%Fb&l>3EkHAxN5t?5`L&l(v?Uw18sdbnE zr>K}M==~iHDo!927PVT6ltMb*?A_+h7j%b2NQvU9h}QV<;i3bjC+-pLxSG=~CLX2M14 z&#{t1_}%w<@s?=rBf*Ufy5wex@#WvvZ2e(e=%9{Ya%QSdUM-3|0W>c}iWu~Dk}Scn zwNtd^T>;tIFLze%ksgAGgq+b%_z$u&L$NW+%^S@fs~>}~aaZHSl2I^PBU4K7j^Mu^ zyVzKlyC{^~ti&hHIK?5X}J7JV4c&4_Ff>L`FzHv1cw%Len~ z`HAt4pb=V6ebptMPLF@Uqa=B<KerlNT`jXfLm((0Tu7WTeAVhun4%agUmB-N4fFYNL1B}vqrc$ z;){n#EzaTy=gz2mYY;s@`f|M~$c!ToiN@shp&aK&4Miw@*SPGAPGHHdH$e3Kv$Q|g zSp#@@^n)gPsn(p~(fgh{*HzDj_oyz40`uYdIBC)_T7Yw|Sxx;>(Tc-bA@43 z*p1Gjifz{ybQ@}DfZCQ*7V6Lw;0v^4&XAF^2JPTji*XaU|0$5_R=>r8NF7@` zfw)Qo8-rS*8x#)11x+j(?2=0TyWC*8{8%pzYM|QRFnN<8P z*8&DlQ-E>SJ*>TsS?UDI&w@r?XY)P%q(WeXEFo&4I_C$T{{RZR*265vPTqq)WVOoM`qq;O23x=w&IW?Zxtiv$y z+4Cv?0<5H53p+wyA#;tO5^;JF$Yi6B=T&3sCx;5AK^6mWo%5!tMud8DG)M^DPfno2OT6R%ein^n@N8mB% z+*#(3Vl_#7%}~kAoEQ_ z8o{sr!Yo{u6Je@GohlD8KrZIhyDG3>Yv2?YoKSQkPNppL7bz4-WiK?kQaGb*SCYeR zbW)P-Sy^fS`)RxI3lH*h(F&Loa0xo`KHMSbs3ONPENco%Q-svSzBw+FP$g3)?WEXT0F-PnMMT9B?*xSS z0k3gJ0c_g!LeCT(W;Jjd4rx^yb5u2plBR%wr#i2d6uDTr{^~`CJHX2sRycK|ho#2l zYW30cdMKgo>9thwP4Y_M`L(9THStF>glmhU#7i=43`|)y``5U=PrDXZ^{B>tt$-?& zn&kopif?k7G+-ya1@56g9+el_56fO+3loG5x~J2Jm2HyfkuyRli`evg@PNTRdwD&4 zp4yWV4GZp_DBx50I)^_M<{xq$27FLI0B9hquwsA&%!-{WnofSopitWJO=M4H z(3m@^5#Fs;6n`q}#ND9;4z=2*rmFkb@|(O(->a>jz-$qNKLK%-BRtc--ypllppH9T zpf`XUVo_vg7&-Q6-4@_>y`x!1j0?47ljNu~qrb0@t{Y$ya=(jUdTXFZvEDq*z=xqw z#qj$5#HyeqgR&VorLynC42q4wnPY-5ZemBu5$&ioKO`gM$4}^&$4N~68C#0#xVx_| zhA`Q1O+gl(Yj}{j6^QfaGciV(j_xfhvgOag?)xS5(~~rrVWIB$xQ%(B%HGcYu3KyM z`nQd}cTOUs?zk^T;VTg+5AIaZvKjN#uA=p$geXMRE>Lor_x+kCca~F&XQh*CBB7Sc zMmZG(m`H+o_Q%k!hwj?jL{WuxNwk&RyGJ3~9PtxbO9Q{Ee-UJ38~OfC>aJD}h-bJc zk`!P3i%}Ip;7T|4use!4k}FGoN6dC_28Kw(lCnoAvTVyHD~c`#5Jk{LdxvL1g)VoE!SARwl9;F2(xfaGym0R#)U=mz*uTBC4KbVC=>q)4xTr~{DWdu87?uA$(^5b0BaT*>4OxrLJI0}-In@PSk zCJGj0NoWtfSaK3_J5J6xD!!hI>P`?_D%%Zo%uwVOqf4NNz^Rpe^M_c{ix)x)Og$63 zGYE7ea_pUlJicYv=9=y0V=DOkc)c96r#gAH0)f$KI;&D2f5F?v!=e&gSDHiSK_-KN znPnJk6fbWYfVna^tI1PXq6^e5SsA+UUUg)2oX|=fd+$+rWuhBJX^*KTsL@LltN?&2 zIwlSd&l5ona#vQ$y0eZE6cB879qN~EFV zuF9Bkte(W4kubW1fZ~4V=O?wOhC2K>Z>osC`KL+4ib}8rmyP&*^OcD|f$1d$9=owSb{=0+Fqx3J_@ zHus;9rwSGb;S=NNF<{VGSkHtjDCSKG9)+=Wy|V;02#*2ObW!qfxiZ0h4nPTiv14YS z#7^!I8ZQA(6fwpK_>lmY3&^@(SXK|R7@7VJv5=5TAl5HF&H8u*3ChbS_Af%9Tf53K z6;xgea-)g$YEuVyIfGk|;(?>&|^?&~Nb9n?ap({H|FQ0062I7SZb?_wCEGIrXbn67rp~+WJT4&U(`Zb$)R@YN}M{nLT zkkkg8MXbsF^RB>PGHfO4gCyT3Xl?a22ddxxn!m zjmCqd#Ki7j9e1C_rKN@Tt1o;;swM?Q7hD7BZ*LGFP}1Adr$AO?9`|e1;OWUrh$2Ex z@ByQnANaKMqqFHs=QJuOIhM^S4e^0k(dKH24qhVZKMfpcH7Vaj$YCZuB!}t_;8tZ1 ziOk;^=tb?+%4W)_4I1zVa%;Y$`Eug-9r7h^74;Q|oD|}Y63XefzCdUKQWz!NIMr`X z*p?y0EmqTbD%%1)8dh>AZ5^}<(==A{9Q?>peeuA#< z>po5+e4aKy^SK;&CtMCGOp49&QDP5$@vXNf;_gGU_WXqkoR_<|k_|5}B3IBK`Q^o%nAfWi4ot?r2A+?qAHg4qf*%3Y$W>BhJ@e0SRJB2i^s*5_n+lm1dao%5dQnC{tFV2Liix>#A z6#3={1{-nA;u^!8X(j}$>ktAI5S2x7a`hD3?JF2WQUtDM<1Hor7JOWD$jYmT!c4Xi08w+f(@Q)ymL zW#H$>{rBb_>C=U(q-1qhp`DF)*jgPTS(8}kl98VjWERjs!8?n7m1t=Lh^t>A!iZX? zkK8m!IZ7zjY93e1Zohg=ON*e$WB*$7xh! zO;n?Ihy-0_)uQRMUgx~!JB2pMUP8d^-xLKaxl7bf^<_B6mVCPckSf%k4ySrp2+MTP$HiV6R6QPgx5i7Xj z>q*|CnR-}+&-Qq7l#e?6cl3}v+Q_@-lhkqKL9USLFnx+ZTB>irkagRii*aBNqmTqJ@|wcoZc z#XJdD4}+2#;-rI3M4PyH=)=o?cBwOMV*p|!`RcsXeKLw; z{s!b7Q;cv|zAuj3EV4wH)}y2AMUlfHcR_-1Rti%1%{$1ji z6-~%f5CL%gab2Rl|GPwY@a92 zGhb6SpI9S=R*lxT9qm$1?D{bj`KihZGT<+2&uK@GR}NO#5MHpC69tb!*UyEoi9JayC@y?8~lvNW&nzhcxCK$EE z&a^92Ro*wq&Q>W&8}(u##yKjk8Qg`5i+K$(yq;XtmfilOdtC0-kjm_-gFY?tG;&pU zF-=8bNVi<0*eCHWug512&EDiVFL90DTn#Er^wdP0*dLxDSBxBh1PACXg9>2;wT0aa zO<^+w-N;cIKPSNz#E!l%6r5&Mg1^^|E_cT4D!=)7q!(H#Ds5sP3D2hp<_;e5=VTQP z;TP`WQZ$m7hb{DtK8C4$FJ8QXeq>j@vD)b5Q&3dAzS$quH63fPoUC>Iw06t3l9!o* z%M`b}y2v3Qg8>RUVFk%!buxGiR&jVF>RQF7^(p3?)V2MuVFFDn7Dfa0OrWp7&A$}x zBu!7d+AnyJ9`i8k87VbU16Hgo8?)b9tFjxm0L6ly-_@FN#Zl#lp@fYs6?hD{Y6id0 zc7O*bueVJs<-1=X4@9W{^mlsp6C2Q#5&6ft*mi#K$VRh2mbZ0#rKXEiB6UHy zu-Wu=0W@)6C6k`X4MS5jT5)Ji$LgdkcB>{*4}ji@FGT&*=`+nBwAM#vRg}?u*)I{? zO@Tm!RQC?FweA_UT!ZsUp6EfQSbnq~BC6k+N?5o|-YF5?AV6oBoZP=s@m(Y=N!pY& zv3Ca@mtVRzh@oi?@3}>JE>y0S7MyHO=|8V`Xebs6&z=H43im}z2PdXgebqf9g zwcj;E9Yu~1^j#EQ75;ISUZdB?O#eZAhK{74h9Bd@Y&{FJwz8$??xTf~A4 z^VhBk82V=X!M?w#2VQzdB2mGpk7v(DL$IrIDI1Nwo%@4hR;-F6uq+01)d5|YQRJvn zqy_&e(aEJOM*DS{{^Njho?$#xtc}?m?4fLV0=v(h1QN(oVM#YhJou@ z%g6(w4F^n9Dd)Zm=J%nQvS^?2a!;rkAZ)eWpClqyBDE%S%k3X-$kTREvw~tVDe|Y> zf){I-MKoBaQ@1y|5BQb7Dwny-Mi^bux&}oR3sJ-VN`5;+F7@i;nkMziRTQp^hJIV^ zO?OPQ-h!FU$K|tP*URr+(e|M&VBVY2^ZTWA&gRb&)@F~e;!uo6#j`q%xs@F`iebQ%>>b$%}?c z0rBXM4eb+R4UQdA?_(dCc{YWh@U>k=O->FmK`6P>$~O|XgN^aK)v*A1RAlal60c;( z(0X6)FkE`0aaabRw$_ejJ0E6KdBLvn4Li#oj*!jOlMW8VHVrB)Y~-LKDJJu2flhnL z5G5iA6htKm=hPUcl5S6gq1GsE^__a9%$IljVfuPHnhC)WNo59Gp2zsVqSl(^@-Ed2 zA#nWYs7o%6I7YzS`1Xb>rTZo@ZgZIvvAeQN%Kec)&q{HW;SKlupwM|}>kRF$(oFUs zF2zI8q$Os0_#`hsNelKmb$YFCW{x{)#H72Ktx_?z9(u@?F|(%&AE=CgvAgZuZc_h*Eup(pZgT+BkUwI+yQfbtzi=$ z!-9k9Dg1)tQaG})Z>{|yxWu_o*pYbM-p2r$nJeYqeJ86=7e~anvl&MDG1v@o@~^0G zb!NgX`ygT=Apf$M&)bk`#JY1`M%-l*dD=aT%-aBY*>y3QFyL3#V$Ay(LSLQfP?*@v zVt(PKy1Kfmii%3*Y6Z2K`DPE?Pb|BIoVswffKL1PdJ{x3qgz3fJ#U7)P17 z1>;V{gUk=zaeB|l!~#_RB&o6_5d=g;g15LB$VucnJ5~7>_=8p_3!aTGLG?@e?aRZV z>)Fskue3niNA|*`YKdMT3xLZZAZ6IW!g|dZ}(k>P4dd|AIIf$jBA6>IiG_!Keo?1ag;z& z59=B=#`3w6sivx^8d=aAV`{=nrSA1`*=6(?-=p*s3ZPOY8~O1J5JOtD*PeT*jS8|! z+Y_Z7!HN%L>E+uTbRnYHJ~rgq9=72uR6ch5?K7vhUYH&0y$I*X6`!Q`m(_7*55 zSxUW8Z^5F<*9N#EF`&DSCV4R~ZkiU5btSX+29-iO7>lZ)|(R>0)8z3U7u#D_8o~W(sOIl z^12DV_w~#5)4MaF0nSj~-US)v8h_9#oo|v08$z_D$Bx9B2O$tQqO44DsoftELJVSi zdly#Vv5B?*HY{U=o^ip&6!Ly>WW{(3^yhfTmPCa4n`Q?GFqB;%7wFtm{EQjQG>Cq# zPfoERdAi*6ci~vK+~(WVMMM8GZ=ay;YWt0?R`w?e`%|i6CDhG90!EQYyVb!=Z#PW; zaa#S$GKWY^*T?C)4pIJ0M8+UidagOl)_EZyMF_s!{7L^FPr4jFN5Wpa))_mkvLH|D z!ujx8i*n25q7Wff1P8_)-!gn-<^dOUU(D{XtZT-M?%3kZ5PPADm2PB@^*OMa`hL0) z{i{NIG|}sX$?1mc5{4@t8;v?3H}PBF5R0k!ld}|l`@?G88f8kN9H8OXq{@S_1c%2o zJyLEt|Niby&R+)iDM9%>$=mEgj}fM zk5+&ru^4<&h#)>gtlD;=XJ(n8J*~2Ct(%D5hB;C9BnZvb{wli>nolyLc5A9pm}c@= z_USY@g3IS!%@UyfvE0M z(&IwtXxY(J2(1C@Jkis1G?05{XVXe+RQVcoAM3%{2Eh_c;Ze@j&SClOBAZnjhkVu4 zZ^Q|PuSTb5NJ6f#v`0%O@da3WO?FQ2zi>8wK+W;LDLD`gzF81HXY6DbVeVatvK*pq(F(`p8iuk))zIm zRuihXdRKKs9i$v*|9+U;&#_BF(_G|qm$>ZV5$6q`3P>SS<%?i6Qcs=AEei{tjZKFr z*c9+egA8dV9^9o-w)MA=BNpyCh|*p-6w#Dkg0X!|+>gz@;N4y9n0TU?#0$jX-L+5R z0Ip#i@E0&sNSo!h40tBDxx-s9XW|Po&(RA1itiVJ1(XtwW0KC|{ z%aOlWume>SByPyC{gK0JeWPg1SUq|Y_w7UA`pNeJ02vz?&Y#y6_Iid7< z3lBc^4nO#iqr#&fUcBOvUVIdGjd;##Rf5&7$Z6R@P$rk>o@@ab3rB{V)NRU`f_Vf{ z0Yb0Q?X}c@QYO+F55e)`+!^nUj#`mXaymeBF5-{{b^riuNN>o%hs#4+zO94(Dp1v4 z?`R^zAFMuW>`<{3V%UoIW%))T7}4fSDS(xrXB2)`nZJ`P2FY3Z8vxpA3@feGdTT0} zNlw#a60X_%;W6wS9wmi#Nu_<;bn-k&Io+=oO;A7r`tjx0C*E!McxB|!%LVvs=ae6f z__Srkz)evz*>lD^BqWPxLFkXwC zjWF2Ncq$6NKHuUj5&5I*Q?KL^k(ER#YR%h~X%b3newEHzEsM>g9KeSxak?keKkc4u zCo#nTcDWw8{0**=$UIo*=B3q328ZN^mhI?DR1dC^{#v>On_SFo_^^BuTjSYLV0vqj z3O*Q)B7q)?T!y&uYHrH$D`9_57q~UFqsNUUT{ymm7&KWU8BH{CvOSwuGvXkNPTWuW zE{Osd(b0$!+=p(*Sv0$Ke{@(AmaV%s+t&1yZ$*1YGk!LxbdhV$?{cM5$DxFFz^~(3HZAF8w5a+ z@P35!(}V}s>BM2DKWEN!I{<2Q;&fFqf8c!QVhTwNc&(l~ofv0{;CqH9A={Ng!C+vM zok;dCL3D@IQ4G%6E1zFom`0go@3g`7YiU0DkAVNEuGKR1>g3j;8LvK{gL2CFfmXV!JODZBB@~ zt(lj|pytX9mLndwrewwaW{Z~KdP!X54y%slA};os0~sz(VksOZre`xRoZRXx9^Fgo zX(sf4{dv2OnfVbVkR6LBXYdq}xR!S;b@kZPpN;4dMwoR~G6hd^Ilu8sODd&j$QQ*c z)fiTt0psAJ0G7u8m341_(XOA@^@9Cn(#fP^ZDUyDCpqBTCJG{dBe{E#|% zQEwDeS9~bqMND?Y)T6BEzDl*>-pQyEdtH@-}#hE!n^j7O0}$l z2^dmQ#}W^>a2o6|VWsFVu!GT%=-gZ=OKRxRD@SwKVizCDd#Tj-o&;e{`$ zVdc~w$tC!R)+hV3iojpxT>FBgmo0b%;rjS5IAFW5Xf<+pE@VSV8i$-S`gFv9ZzK0L z&0C`4NPw4QNO!VSG!dALDKP`Hku#2i!=#sM{c9`bz`mm?Q=&R!DVD?~On*^R&KmT0tmGwD2Mbgkj#?xip?UgWtz)-#=LW z{_yx0E8f(#RS^dMnU@l;&oYYh=Vrb5D(`5#eUHc=6jRH_Au`tO)`&j;jYulwpl~!YZA-vs z%ynV4?57+X|D@j@QAQVE9%pmVf0Rj$Wo66Nq^qPUZ%Nb$B^01D%rtbuxr*^#lEw^L z8|wtz){|&cJv8n3M!69ZL$q)6lhkHwY$(an{9qwDFx3cl1>KuK+m%SDXNama%`Riy z43+!Q*EY)%HrsM@^o><0rwob1=M_x~VCJ*dagNaLvu4-K@4)KA09S6mSS851MYWnF^P(7Wt`wjzwvpIFrzXZER9c%iH#7~0Pt%m8 zwxVzcFlEcUj7f?s7Ocq)gjNy&NIUGYf!h0gv? zI}LO6*fGI-`hMRTyb2~#`eES8{_*+YYSEYX=QK+*?!HJ~Pl{v;w?so(34xBrII5(Z zyczJY5E;_WkyvW~FU(me&BwGAi!h$V>eX927$`6Awe_q635jQHDznk#Q_etdF89wP zr~@zqU)=DD)cMLhBVq4d(4sHeEZKQ4UWyZPvnsBwO-(tFSmFw@vR1-vZO4gUnM2Cx z7ET%l5-=3@)<~oM!?{%dby7j8BL)U9nV<#s8)PA;juf1CajLP*IN$6=u2LL#qp&552}PHX1vG3BGa~>q5{wcHsHm$2=Y_2W*;)6kM@{N77N1qY ztpy4oW>PYjkOy`3gXHY5#SeN#)YkLN^Xc%_caFXIZwbV`stY3FEo)W!!{Z>UFlRmd z{q3owq48Qp7>xx~zjRCG%6)tNL?Gx-V-C|&E0dNSbs|s3wbo}Xc27V5Ze6MZs{{~A z(r2Ld6nnH5OKl)gTdfq6YuHBG#hCCtU8;2f4mDe^e-jdzfubeL`BXn(6`N!ddvqTL zp@FJt_9|B#uO&UGp3RzdK&|#T3dTRWq_=MVh1b)80W%tr5MD4!8neRIsj zL)zX1X@^um$)w=`!X5YG%rbypBu*UgFXtE%A_1z1$~OX2GK!V0bk+3lO&Bi1fPx!> z{5qje;ueM|4mGwt36-+Xt!D6iJXPszG~{FY+w``{F~=&Qgk1^sLM2Q`6Nu!eW6O$; zlW`t4gpNdE>y<+_XiHU&MnS*ubX!BCi z3H&CM9z<`V-6~BaeQvE}^fZTXb0Qde|i z)}@4ExJw(A&9Rnh+SS&CI6cdug?f#&w7X;l_wglO9NiF z6b#T6&>KyTvS#)OJY}xC9=;7!S?X9aX(7$rytw7*S0)=q6}7*kN!8F~78O%g%0n$7 znT9u<^spA!VuY2u9$!AB$-9I}M`98Aa~pi%jnDL*nhpv%1H}6+;Ormc8?|M^Dzci) zu>7E;bc5fWw76BxSR~rC>xBld1!WCi zd$^!^h^@S6XLNxxdO*_zcdi_RR&EN0YT;CSGH>_9qlIzVYMYf zgv`SUr96|P@@G10)Um4(G()Q4EJ*NF1~A-?u4XVT4~qlNh2g*=OAS2*VNenMzs~5v zVc7PU&6(Vwdo1A-Dp>SyS$F;I!x@7v1gbl48zdLoO?ZNWS1{XcaQ3s=Egl|pck%BE z9+Y4;4&WnC5Ie&iV1IQ`e7D2FZ^Z4vKH7+Ve-q8nAA>Cws;NbxfGCQ6b=bUK`br62 z{bcxNk*s8@AZNZ)wj;|b)82RxfSev85=|aXX`Xo=iUvXF5+arvnAyeOAU^*JjaX;| z!!)7H5|kf}i!d>1aQrKb)v^)=O+RXcQG4L3xjzWUvoOnEWLK3kv5;&3RMxbki8+OtlcI2-&(Xo9Y!)X7( zld3eM^Z*wt7m-s&QK{go0&<`67_+DGbddXql`gsEwtjD;S7@BkG&Ph%%WB#@ZC8P&ff!P-)EyLsHy}1n4~F`$n8dEU5ZotX|&*@$}<-gAA9a`YO&!`SlnTDqJ?TuE~ zkwg<}(wD#bIZ?ogB$smJ3tT)XI;h?)#BtEI6-TDbU#M7BuyiEo990^4@uoRp`iY!1q^W<{ri(~~eTM!I3@WLM zF0)m&R>jE4iUEzbg=I=4w@d~zfzyZbk;{fu_k?sJtdQmlz~o4t;fRFF9|=GWrMfed zfe;cG2g#y-4>%W_r+(WJ;GmnZ7=4`uaxTcu9&@ea;pB1Q2OLW)QA zFDxq%U#4aHCH9i)&^A#5i{DA9-OHd-KU(ZG4Q3r$*sEj_$K-%U z2yh@!?4WiMIl%fZhOv<30>oI3aA2>2;VHSS?9ahUth$`MIZLL)H&#>&xiYp_5|^*e zFdW;vODZEAvd4!3ATCUrmzyzFoL1iFCoA{kox%3ai*dq&iatgVY(cM_Utz|dB9Q*a zXgpmDfyuW#n*MIuTq=_bO&ySkO6Hc8ABaNC3QU?4kH{OEKy>ANVXLSMy5@|YLaz*4 zn-^CpE%!xiav7c-&Mczhqm1cFcu18xT!mzJ(L-jO{7S zS%|HCA;a57_=+g(&mP%(yY*%IsU*$}dF}Vf*nsXaCvzb)_cE5YFpN$T@RW z5;hR6|3JQlHw+malJU#$t<*qo(tE~V=@i;==a?Ripk$ul|NI$IVFJ;Vg$8Z$$d(?C zPEGw0>)ApQc^@kNc1kF6|NW5Lj=fnT&^GndoTt*GHDZ5pZ;R*&JL~5@N#Or(QsR(Z z7P29xTPRuxxiIW&8mfQkYBkq=eM-`OR7;NOLUc4(Vt4_$F|4la*lMt!@ z&p|9I<1xEM(1)+;&lc z4WY_JNP%Mf3+yzAOM<_c%>FDiKhhsKObom94RHC?SLBKi~Dg4A;K{ItKGG<{H?UfUB%xMU`F7 zeg{AJX$;)N7!DS5!5!{z1x4Bn29vW;dD3qp8Tu{i_(bGZ{*`)`(IfzK^EhuVEDRqqMgg0tHT0JWJ zZCj{TI;jOzHE~7CF633!d=W*IrBzz!t1Mbe?GOklh0u~&Hm$HdE%&!UudFj(rcQ<` z=H(`;mU;%LHmCnn4>+QwYDNTpsz#OKc+<|^iD?aOLd76HKyuxZvHZo6zE^}q#pOW0 zwuv?diQ3vm&x~4N1veDVEY%lj{hXe-!V```v%CVY1jnAkWgJ%<&D? zx#rHU^AqU$FG#^TI}zMg1m=HV+DXGLfW#NI0pG`ryAYwA(y5HKvl&$@spBCaJ=>AD z*A@4I+m%94^D*SbXc3HI7{Q=Jcwoh4{zlfTAMmu1geM>pJ zLeI;EctqW7&V4F}a{gn)|@c$Bj8=dQJa>$yTPb((~TosaHqZp#~OSS@b>)=&x`SxzcoB3KjIt?g2Fwlo@`=*t_MDH?oE;4m zhgI59D-B|h8pb)RXk6&>$ee+uLk@w^6(H_cJE)?8dnO<=>Upu4k_n&$Yo_hRU6(to1dkMt!Ka;o?t1^sOdKbI2&=# zqi!9@E=}fg8PPugxTF_VQ9FKwB@%0h6$~T;Q^og_`lcT|NZKQ zU-6narj{z3?tvQ}=sHw>rT)v!rXooo?oYGp?T5Sfgk$uIMnsO9UVs$AHTw6Bl{&7o zPJKlq?vdOb26(s|;xwu(u4xL)D=nHngId7Kj8paIV)jN>SE|o7XbmeX^qG6T(J6|c zRBz&650O%4sk`xStZ znf|XZ!(0R{Iir*hDmhnjp))ept>u3d3INHx;JUbWw_}LS2<3+gyp^>%@-TrQo_d4e zo39@@j_=%kf33hzKW{bVq@}&nhB>HiHc6Pk93C7$P-q(xA(_rjsn7F~)lA4BT`wZR zrCyK)gv!Ik#|&5ZFri?`5TLsGc-Ink?oFqhpv*RI*7O z0j<8p(UA{0ezdGGeNj%k(_c5;usvyT=aV{Cn}_2X9_nW0Gax>v8}fWQDgxV0Rq}H4 zgcAe!QrIkJJFm*})x2^1oCu0y77E5K3A`w2oJBCf355mQ*D@MUg1J~(;rydDPpcwb z$bq%aojg9R^yINz<(-;z%yLlom82&&fzecX)U<2;0?L$)xY4r3 z6czy)$|fUop4OwDC)}FwL{rkYz&;=-N%*hgr#<$|O6R+@+({b_+c4_-Q>N9;ibBpv zOV(f_A+Lx=#^~Plfglxmp)XwF1GWJF7vNyUeL!wyGX`Doi9vh^<+|DGKTXIFCO#x7 zNmUgT*8Y7|3>zQlRR)n5Sf0Y{#=elfws`-4UWw|0wP7Q5-{|IN(oL{0dF|H*m&n5f#Pb(W2m8OL*VZi>N2i}26goY$oz%fERO33I zfDh3-nVJub*0*sGl|{3!#;+*w7e(?N(GC|#hcmJ+?}ZoN58QktUv4&xdd&5D{|a$|m>p4Vm2PqMHYUCG~?F6Hp2F-eYFN9wjBR|N#Wptwa6u$;^N`u>8J!`?}y3*IwaKkrP%4%yc4UnFgN1J zVA^U&eoND8Pc5dSq*TTuRS(lFuVo0_eoXx^;eV%;Ch9I`=$|wSS6G@eyw1sbY@ht} zT1Hnz@Mc+g7zkqM=f|yQMe0IN=4!+1OocGCjuu!$DA(pKUVA$mOD8C+*W9f|m_{>Q zjO9Yxs(gHVpyv2vNly-rzHeOnC%K=d1aPC>1d|a;wt~w@49z~(A4ceCXa7W7NR%lk zVTebRndYB@T@>n&8i@RdBGHIvOk_ntlslSZd6u7jXlLLN_k>R_ql#Svy``jgU&wpU z#)im*s>b+CR@oAjC<`YthTVhNP`_n10-5(^rT~p!_ZjK&$T3uEekkYz3S)M{15 z|DW_JMk2^9SHB~AOhFjU*qg&?@=%V(hk>&fV1ifq>@@Z~h$wk=nZ!MM1TEa33gGhOE2T!5nJxoFy+#Gv%U`&zMu zd5(msND^(N#gL#haH8xiQo*xOWoTk%ial2$aQP|e{o7XRXHxSYA97hE;&22^UX=qJ z!9RlQ5cXF7qbSG{hFN+R%~<-gfh<@71;^1)G4Kyz|I9Iq$iK`5Ad>(ioH8&6T!7%K z!xIYMYVZ?(Jv7grd3!vM$oYXC&gxLUk3)RK|MSJH!2DY8y2oLhPm^#Va>xsKa?1%Igj5rs%->2{|x9U9w|2zHO>1n)Mtbg&;>l&F|~ z&j3h3^eTNXakHOH!iq0o&?DF3n0!jkCk6f6SXxP^x*Tl`lwM^N1WzQKDJ;($Bp?1% zYSuU;juHpRmv2O5cDym#ZA|$eMgq7%wFOz+e&}A!I@}6Y?vO+%THkHM-sKnh_9R5r z2-$-*#95!hFF-dujs0RcN^aKFj0)jxg|Fpn>9NYQeI3SHscj1Q`$uQ`BP_a3#5Kd< z)aOmP<`q-S9CxKLv!_63k1-~0yV?{UAE|8R{r@~{l`ZZXEjm%4F$qc);~JQPGlpI% znw73X(yp9v@^T3z&Ok}hL}L{Ii1HLt@pmg^6e>k*VjG?fY0PW!bfSHgS@;F%u6!Kz zAALtuba1AAb>d92emr?^D7*JLwh#4d|HBmc$v5BV=SxHNz{+%yt2i!gP1$|5{}$a6 zM9Im?s<5E=iihua5!Tvwmv9L>`nAbRh!C4%O(oGj;|u+>S+5GSv%`guP&jM>AzSF~ z6O#j|;2|~70;WQ$zQ03YWSJF3MN(**$UlE-YGaSqsmO-fs8z@U5)WziuVsvNcyhyU zf3%4Z;uvh~sfI?k2hPnYEdk^d|L!oY&pl(pCOf(Pe3S%)5r|_DUytnem;kDwX1Bqh zV{}dA62o&8(WidO7>jz*JeZSqU&45c6*g)}pQ|*6O2fBRjWUqQa=YMI2H8TP&OOT| zl|s0)Tynt5c3+NR(c6!wq%VTqCbP3z&&IKW%?UMx-2dq4;Henub?s9Uf1xxHl+_MH z)tR4CzEQnb%js4*%WyepDz5Vg%B)9o*ejNb<%-tPK4im3ZwwPZ#jfvhpRatAI&D z3$wHEvW}0o>tE9NzrNemMx58DlQ7xif^&01`z6fRN;}q`aTV`6LUBwg$+_Tw0D3Lt zdDCt%|H2vbN`N*Ev!o3xmRU^*9;bOmn`n>qrq6T8AgR}Ha6`FoyM0L+5|ZP6qmIi4 z2OR;UFLDKl`i8|(a~P^Z5KWVu<>o`P4*5vQ4Sudb)>BE_725AqROR|t8?C8a&NPKZ zCHYSyMYK0hX_X<`!^zSY9Qhn=Mx0zRvqm+{ZWBBbam!ghjHRk#QR0EV3xTS3y@4Z0Z|35#;;Q3m?vSuaE%=y1=qtr3!?n6;D=-VA`CnBWyN3 z^DSe#PBx4fxgH7p9y^EftQn{qPk9Nex-uec-$wFTUmB#Z4Nev-)T>VB97(jihEYS4 z1|4`h8HFWy^Nt#40~+S_4eKL$@wa^_rML9>>wH{fPqr+)?JMNiX|h zoC(2zK%^i@Ohb<7>}*{B(I1V|g2Y+SqlWPdERQlX#}1%XWD3g40VyELB_RPfkHu*t z76O@wFYwL7=Hh*zbsQC&3*ov((a>z1v^5G$3qBX~qiq3;saKfED;>@9$VvNmX>Uyh z+y9i8D1oV;WBOACOZ|xY21OyJqg;mE(KJfpG1X>$OKKrSK4x3nlha_b<(Ooj8e=1kz=%S}L2_!rk;nqc^ zfjr!AMIX*dB-GR@8lciF5M*;&^@~kPF%2)5ETKMNw$;5%FT1l?tp_C2YWjmf4>mki zC8fL6D)n5fQ`GsSTGw}&4*9)Mzx)fW?;Yg7KaU;o|HiFAb!Xc~5Tmc{KBPUm+1G!~ z9&!~?l)=9E$xa|#Lc>J%!!gF<<~%;|pK-gd5Bxvs19@yAKBtBSN?#^-I#gRE!nf5l zf!p}f0M)}OaxUyptmqtm2Fx=jG;F8CtI@z;2x*rS6k|v^Wf3cO#$FR;-cyR!G^D(8 zNc%??4LkFN8CI>zWgROUpf^gP0B+B%h35n7lnZUM(#3w;FfyZL&;!CO)(G9qoY$Y& zNe1R}tXTW=q?oVGD$Iug0LkSMI2CnP)KgS~LkbfQPE4xe3w83r!&XyvkE09Bs*FNi z2)RGbLb4SCHy{=uB}K)>SrokM3X*=e^|HaXG3z&`i$&B^ zT6GpZRMO)-*)lixeG*vX8a*A}e5HpH(-o3RE>-ETdrGMf*7k5kkPXM@1M)l#bsaP zkA@#`La0>BZmIx4)7Fwws%F`cuCLd}z@D^oJ*dg+DYd%0arl~cC|vZ~78SA@3cE(f zZyd*VH$~e&%-uB2SuP3aXzlbx>^c{kmuWnixJIzx4b41IT@3}j7zel77P8gkpq3>y zv@w%q85De*tj9>5p>0C-ed=YSB!j3B99~mJpp+1!zF_<#HxQ>LKrj&IL}lI_ez8_S z5ORDmF}LauK{3Vnjy^dw@-aZ8+X9vCZG`NH9Uqc)dPr&Ri^8nR!1C9J)h1SRcCo*c zzKuJZJ}jQd^H}9%PpOH|4}o`yv$pEuM&oO(hx;-Z=cYtzgQlV|4f|AtnK7w>G3Ehh zrD(5PYRzKv{`9lX{W39H-QH7)ES9itTmlSsFN}L?C8mB5n&7O zJXFw?$)-fcRK=x@)rO$PbuXrYlB&qv{-)~1E{MoGR90|~BkP1$6y!qQILbR~Fd&$t zw^kyI&r`+Y!v5?WCj8H>1P7`Q#f`{gJNm?DTsL~>HgYBS_>gFVGw1>-l@C!-&7Xd&qCFvypIH~FY1pIJp`PXEXL^e*pi@^5=}NE zkCu?#E10W3S|&cXXQC)#ONThvTX4QL9S1P&fp03rSHZVt#;*h|E;QOiiCjvYq!5H* zK@M>XB0Wh4?1A$yR~iP)Sr9UWa+vdcDO%Mz@e zW!T#YbHd++z5!ihmb^}`A)21&;;x+%j(yYUahQGsDCl+jmt;rGUWB8u5isv%XGq8T z7q3aGON?2cofo10&q!K_I#Mt^Z6KE=eh|oMSWJJFt%Rl|U&?FU=vsiLg?va9OnxhA z6{qCg!SB%~)tMA9=;3Fzz|~awTBSBnQ2~!bofwwt_^pxMPag2s!yBn%BROwb?S|Rkn&nk`BO#cX_^FL7i4Tk+2eS95Hf{mkrf(_Tgy~>Z!Xbz z$_1^~Wc=~tbx&C{Nc2hnx)pyu$(vEznh@&@N~o6u15eF>(GI~h++S|+X45Ounjn(L z4K+l*aK~wnF4<&ygkH$N9yYrh<+r4curP*uYDPvu7^qok1tIjc69m`UuslNW{u=sT zYuHejv1r&#ojdF{<&IJJNl@Xp@WLCX2gNm*a3p8`CEA8{9mhU0>aQ8o08GD$+5S#4 z;F;GMX-s5-vs@O?F`XLC%#E#ogyt-i9r(~i{)0EVf?5c;V_$UG2~Qi3t~hAMp@#}ry`~-zMn2k2Dxm$Z;Cy+-areqN)YgB^DV-bI2XDX#7bv&*r6XM{IKWc zMRvWr+V3qW`3B{^O5HO3zd1bQ-_OTW)ciFF3Hq0uT<}YVj|e-*<0qU&=0z!8#|%bT z2$RoX)_gj~W`tgE5|g{W72XlZXY&|qk6ms4?!k*ROR<>R)cI#7x?I<6N%Mg}W&n^M zxsmlfWs3-CAZ)xp*2k@VHQ}i54V{EOH7cv8iGQ3Pe$)1Eh#okXr6Lzm@G_y8kipbo z#;Z`AS%5pYOEyRlMnuF^aImq6I%gAQtx#ntT`WfXs4{7)&k(+)vB#*K#I|ojPUo^% z{bNJOAHHQI`F(CwaNIEZL;;WQDc=omulm`y zy#n6f@Q0JTK6Cy@ABch9ZsScC$GPBEgc$AKJ)b96t~i3SJh3oOETjBLEa@P{G7nZj z)Vp=3|;$i7DVE(t-0OYe;N_e2?gCizWl^klbOeo~lp=&ID< zwRBrN8r>`5j8ikzsO;e3$=RM>+4^TnYZ}n3KQz`4hxOlA3H9WUdHm_gi3x=NBwOENClyUKKgCLBJwoBi?1;kHk4wp{6A3!O z91j<8{XhT@1oaCm=qZJCG@iA#NyI4i^p6)Bbi2Sh+^@?(W;?=B*CIoV8D+UyEVvArnPk z;b<}Hhy=hV|F|0);irE{EBt3_P6D}P--Adss%eJ9AF{;og;b|ezpGabrL$Uo3l7f4 znxXZ_6fvLiV$mnx))dxV&t_{3u&w zguUw*Jv%#f6$^v;NU@D7u=&a}@Ic+5Y+;&V3x{Fr1(6C2M&q|HUBf3Z?ECvm zL>$n*WEW_RjD1RqEA%x4G5*5_O!n?X+_Cs6&-mVRcCCmPf@H=AueORg=<-w|PP{As zK>3oIvNQ`Kx*52fTE17m^|QLmL9=*JSTWbR?kv(Bd@tGHTo#J{($#k`B!(7qv_w}e- zcqxTtpoIl)1!W>Y(l5`W6m_{2tr}ydu?7 z+P2|N-TK>6j`#o&#XoB(XIo$b?*W7O`8xtu^?r%@WYNX3$kZ0qd!avJ4e6$Ms((3D zuHdIyUNEW-w6B zH7FIn?;ST3!g%p@E<3||uMJ16A^#NB6{{}ly6Q6QTs+bAVKKk`GTXA(bQ-yWxPE*dqzR-rU8}@{qNkzj*sq%{cbD5pA4~yd_~c8|>oF34;la zyMXz7M=Zv+4IF$qegU>8oV3aphXLtbG@eU`l`Q7BGq~Ek#CeA*OTM79&xe|Gn{90H z?oDP#EN2&9H$%=YeZ>}0Ax6Oy-(6Os;v$W(F~L$&v~PuQfD%@YL*;=Gh}@aQ`QpGz zk=52(jot+P$Ns(S?;SSMBHF=1T>ZTSCiMcTRIO{BmUVt$4%${eprIS}6p~gYGFl$} z&Aw{Yr+UoYizA%=xv7|Vf2;D7j*h6`kku;A+glG_(Nch@vp-gK?tmnYh_7-zJ@fg% z$sw&#u5aYcLAG*F0f^bUS`tKiRvB7P-j}s7!kU z>o64AKb?Y0TSM8bCk>mH*Qc9WHLUmg-dQ}0`01W_h0ouG1|N6DzZRTq1c|hvWr@L3 zw;GDmtTlaV8&w{|=CXLIt z2!`0>2^T|dgo(_QN?tiY(Vug#--X5p@oyJZ`3jqL;tXSax8UzMFWRr3&iH3~3i?R4 zVo&|qdEBJaQnjV!0R68W6Z@0YCfnmq4)5zMhHjLK*p{>Ae2~F9?zB%oy1M)F(cn5_ z1=gQ(3W_X|=VfZhS?qiH+OaECmkbcmBLL$tL^Qr;yY}}-vh(sAipB>R^CP(2qR(4( zPbf49FBeQ8`o@T^m&W;*UgAwd;df8|;wNr|B$Hxvv%L=8{F%sG7?`NMvCUeMq&bZgybx_7#FsB}3G)RVwx|DouQbSQ)?p)8NbLV2!7Y{(;azM66Xi>GU$ z1Y*~mO|#j#Pv#R#e)U~Aw+ihSpv&N<$2zXxV7e$M%Bn<5=8&poB`6L6ED{AKcniCGb`YnG8X+BrLQQauR*hfW863Eg~3tg?Ruw)$}UUvazU{xytS)$ZzxBzPR%fs)AT55vXmPn!Aksp_n zOhBdY*ovh-n)AVH7n_PeAa}JP-PfInWSdCR=GvyUZ@z0TxB{PB zeOa$D+XAzTW4yt4WMZY4&9;(v3yZCu+nj@id{iFL zKGnX0I`ChMOAULndcXhLeG7W?&R@k_$ARH5dMJE*fj+&~L}%46^-k1B2s{GT9AGW! z*D^Z;9XA?O@PK5KnG1r2)hGrssedBkl^d!EY<~9AY3=PZm;mXxr*j>5k59E6egI6i z3isljXyh~nKiP{azCia(faYwr6t2Q#&0 z>*nuQC~K&0em>WCRSMU}_$LC-0Gg4A-0%ouC7&zj^iE5DR{S55F#O0ZSb}MsWsOG8 z*yDz*3^ip=tn|t8%nj7^tN~uG#05*bL#v${Rjbemr>$!9l~@&dh?o(J6b#%#bz!)2 zpZ=t3mqFLf7jl3km5sbgZ9v~>%BKCs=y_Sk9X)2^7DWwt$!W^_kRrphbE0=eYM1Mc zPa7R*`{Rx1Ykw^@uzFZXix@>F2#t{j6Fs9P((2V}=*KM&qGoFvS>bUWTdji$Zts6D zHYQ2?d(Dh?yt2pRyJF*fJL3CslX__}Xz&tq6W!)Sc*(K2Tmc(%Clxhs+($gC9{6~~ zgPQ(_=^VF;ixJb|QOV5hc#66Iwapkqhv4t=Y^?{^WUapIljG;(io~0G3G#R5vLc8W z6QEv7#_Y?btzyoX%|XLDy-r@igY%forcNRJnu9^Ch1oJq;86=Fu-l_u6L^~la3W_8 zm$${$P3~_A-+oDN>j)Ez}0dB0&(Z@j|S<{gpR6&p30dz~DliSN$V zqq zZITWYCIEWr9FN~UuE+fhJE5EBP8e4*E$&H+5Bn}pqX0Fz&1_&#S#0g0K};$^Fl zdmD-T0XoZ9g+>OmK+T*(!@Bh8Y7#C2qB0K-ZFy}ePvM%m!xfgb7Rm{WIxRyBqC@P> zVxiOC@z}oi#o;L_gHJjd`WnV}9|Kk%9yr^S`H?2>Kw&j5)6a3m@>Or^9aLv#<&BuN zH=L*QwS-=$^XB&_0wsOh$c!qksbl73Z7?NT!iu-}rt%zeEkT;`3;SwY-;>^ca1>rQ z7BydpV9L;$~hu9ZG^H66$Yafiu&V;oljK~lA?gZ^>?U0WT$z~x_^`(RvB8Sa-V?&b!VI>9{H-k**T*x0F$G+IOgR+ z!=@eS(ZqCR0liaSDCREkfI%OsUs%!&-Sctw3znxI<8{*_gNioxo2FTnLj`^H>y6Jn zl1#TVTfzn3N*9`gePNY^)aX0;&EppBjla;gAYXD4oe`tXF;mLZ7)Nb4stdrN-bHPI z$F(VabetO!$3-)HW}YjH-JpOm`HLGtjtq`uEVu{8xbc<_w?sQp0)y}h0zV~Rq|$?i zXFqW-^4f5b0-?ff0E@|3i=YEXnCE3G#O&erf!l`vTIpsgbh^5&EV&YrnByJi0-aTW zEhfj@QFe)Hv)2>qrq%jD`#{(bFP9mWJ2uvi6eZo|q})IHJ%)Szn(ASP0N`@ z;enZFr(KA?>~7AjA}w`C6V;RP?Crf1jRBiae^I3InWaC*s+#e0}kvA@>U>ge)T{hjw}lRSldkYk@a ztKqHm>^Rj|S3(ALJ7m@8#{P>4EV8SsE2}`_O^bcOhYPN?1Zl|DvUfr$Y74@-knwT) z@=EZl@?A+jlz(5{T`KOLn{db1g?XeS{a4x`*DgXrr3`s2Uk2ZzuKJ?RHZTk$$A*U@OT3W$w3k z29tKC(^V%ShY5RJPO>V8?dVcqv=fn{x#mH=MT7+9=Ex-W=VME@^a2rMHnH4KD`(^$ zrfxnLwx}dBTb&$oXSklPahHz$B@538);xq3Pro2_)k9~Jet&Ki2F)EOg?b8K9}BD7 zqE62xEd4crK*khkyfLc;>*W)mS8k4|&Z+kHP&&HBR*6^yZdE1|-H;j|Q)o`k*f$IV zDCZ=W`GB%D*$Zt({L=Vm70GN1yTHtRM9lA{Au^9eJEh+|7OmAfdxWQUe@c~a_OVWc zf)}8vG<-6c*3=ee-W7em@2rcKL%+@h!R&(3A<3jm>dDA7mFEdeipwPB`-^iQk`2gD zOcmH-RV#WItNE^c+*G(67VTo}QpMdV7vqvE|F8&z`B<6_!HW|X5UJ!CCQqqeN8~I; zLlqPSh)Ns>7b8UW5{Jkag=IX#QCc92>=dFjfnf~B$Ex%Du%@fMLYL2F*mcMwr&ICm zKhY-?mEMJhvfX;Gg5$$Yjsf8_$(00RD(HjGSJ2$H&U|_fz!M^A%^d=hHO0A#2Al^d z=En<6R~`@$-)u5)#?zy0%~H@e}Vh=sq}#%%6uSb7Ngh!OlsbZQy-?hR|um(U6kF2biWZr>2Kn-*ybyKpjuh@CQ| zyD_x2T2wpDZwQfJy(`RtN*SxbBlY`}&gzKMhOVCr1|t?{To#0v@GW9j_)iP4ICgN) zUOX$jMVhba`^SMsrIQy>?C+~)tO83}2+ce)TE07u%J*=p?G1f(w48QIu8%EODxnw105PM zG;uiV@5Vg$j-^n>`;JLysw$5$5W4g>uuDD7ufK>OKc^K$V>cz<1mXk7Qqx@cl|ylq zEG6O${DYZh#IV8Gu3%+`yyQd5=31U@|7P$$Nf;&m|MUZmFaDy2$~?%b|4(IK9TrvB z^*t~%49(DufQY1|bTL`+c7G zd#>;Lp80Fe-uvvc&)UBgd+l}h+Vwl?r>gBry3CqXs#vUSe7ym26(P1h<~3JsR{fYp zUlPh-;?Q@LvnJ)nGi(?Vo?0oc=-db!I|-xQdLYA+gM)g3N-ATHNHsH*TYc;|=c8kz zM6`i$us>`B*IRz}(6WCmpKI=ZPlQDzn_1(krBE%E8B;U|OBs^)Ho&c@gjZZi{8q@x zk0V?C2$|r^>F@eRIad|q;Mh%YJdGwpovJIJx%es_z{yC~uVp;JJX3h{#SAgNYE?_6 zHpQz8lWPYRHb(N1$kMXkz z7-P?yOo%?1eDm7HjO3aa+!v)Oz^$mP z)ryxB{Nc!n`m>tA!=j)^YilU6n52)rU8g3UN!2AqIE)j?G0%0V4cB)b182#GX%IcQ z^Vzj{1^0M}!3OzO12N)CQM^Vm)6u!6q!|irb{|P9qmHawJ0Cv{$HJ7+eAz9d8Jd>_ znzkU7dFcM>nW?ahcT7FSc$Q+5n@*^pfI&&{ST1}2 z)u#8Db6Q`(k{^i7))?n1@>BL=LmufZ!>4&wC#n*!k?QVr^+!|Q)q0%CoTchCv_qRI zn$(2Mf>K6gTq#$C&1PL0Woq{s18JKMv{*!frit5H^Ak(3pG(Ob?HT#9$(*|J#ZPO0 z^g;C=Hr%`${uA1N=}WNSHS1kKl6i(-q@DO)IS#j`Ta+BvzN~A5G@G^`qYE~}IWXk2 zaEDLU$;9kM(iQ!4d{C`aOgExh=vMgXEVcJoKJq~TPl$me`-d>t2<>yyPx&_dC9dKF zxW}2=na#cvVu^=sFLdtrIQa#q-FKQ*W54N-jiBl-lz|c_n)-*w)57FG>wEKRRb};a0z7t%P5aj0HYNhDiLxXA}2`tue!9pPv}@Tp*ma zq);kt1r*keqmEqsPX}gdZ6*PaP+=JcWQ!%v(c{!`ql5vyggp?)3bF0L+0fDHrWj!`b9y%_&7=rd+X(mm@FSeIHNq1F-I6OBilKAaQ6NK- z74U0BIkQz%k_|&jzgtGe?Lo&9s+_xre#ptiOk(N>^E7X)?Z__PxXZk5$h=@UeU}$O zCw5w2cHfVkLw72fH(&N1zonh?E36u#spzj5hGY}R1-R~g{Dvkq}H5b;Ydp74{b&_gs_z!_T2ukdDW_ ziLai0lyg!xZy3hH9h^zPF>_O5uOg{kzt^5p81AL)+;q|@yJ4OS8TQNx#Qe5UjhZ%$ zE1oY3WdmuDcKGy@?Dn5jX4KrGv&i~MS8LaXfQ{Q+j@v)sAJ&_LIEvu5|4lJ?bZM z_JMLpRCTcoFME$tU$=3@TTV1IdNgnc z3k09-Za5`pHd`c~l|p+DSY@6)d!{aZ5SeJ6hQ%V}`<~mM>wI=8{p|%a#}8w^xqi{t z(ZF)7ipQ}n-9^-6_pF=PCN;WI7XjIy7#UesPjkLDC`D(8wocnUEp&%5i{3|UKJ5o?E2-tv+e`^FYa@#xx6Def~P`GR8-1A zPEIo=w=5Qg=y%EmNi)g`2kU7Hi=rlXEQEFtH#U~liM#6FVKYR6FeEZ@Wq8HuHak9T zWA&Hs{2FNI7GU@_9BNfQN*)k+dvJKAyTVb6)(&Op67eR)7#0hoSl~GmwVRsx1=o@* zJNh7}(gqqoO#Mbh*-p40Q2BZ?L@&eRSy+C2AL#yg6dh>Im6*I-i)b%@U8Rhs(Z--A-{xk?|MhF zi?7CpH}D>Mj)WFGnpk|Q?P^>=6% zSD2E;BVx+^?x*NAh?-CK#_(R`L~mb&I?aihewOP)=(RT%U{ronI*Q!s?v0_Y9Q)QQ zLTGoir=HG}4GzCjy8SU9MLbDZ`Bb9utMD(0O1y6Wl{yaR^jkX^5KUNwPq46I7;i-Lb!)25%Sg5zR z+@#1jPj9lVjPPi&Xf9=)3na@I^i@eZOTh4ob6OAYI|u{Fj#kx>5~xIG;1ymdcWeR((W^0Oa(rbeR+iG5MpNcYb$lyY2dWL9r z1eTij_uSPDkC1PzhXSQ1IrWb_y}WVQb67$Q1fgu>A&1Nl0$^bz#L>wpebe1ctaWqq zz`$vnP^uf=DU$IKmG3&H^X}Vok&b=&Fln;edb=iGsgqR_u@to6&8jYevX=90bHaS8 zsZ=j)BQ0za^lEUJIAKSU`~I`orF={z1w(Xnbje?5s}$O-?*6k`_dYe2k!fS6Po71X zmdwPuymv7?4{A$5DNOqfubAAf z$PucTYyg}MblK5$cb>08A(Tp!VZ%`{EVXIR{o$`5o`t;gR0UT9N{W~HP>OSoLA7^- zg>e{61?HifxYK$%u&kMp;5m$>LoG4YuLk-J9Y5()yppByPMJ<#_t@uG5Ro!bmxBm| zu0CqU*4yA9SELl3h;5)$lLPl!k9?n`z8uUAT6zCzu{;{*8*0?Y$wNeHs)DVlNqCz} zXImJ28wqW1*d=pu;(r&u}p9;F- zvqP#RiTq@hlQ0d*AJI}!_Mp}Z_1(n?SA3LiM$2s(c2i#VEDvJeUh~$Wk;g*7ya5$R znpgQt;%j*fb-OtSRy<`A1ot@KLvwk1Rl_IlX>7)m`6~zSX7*-<6^Fr-R5xav8$4nwTF0R@-i>B3JCg$kWe(ZRLI@^{@jBfUVDaeej%0REl z0dHNJG@knaU*ga78pi~yZ>EbRH%$BzQZ2*9V4c#zJevitpuE&dg~7haizF9O^@*1? znngnK_#4PgT$6AYqE@zQoGnVx2+Sz6tW?MKyPy!2faS$r1%(X$UXhzCSafiDn&OXZ zwF;=(wzZ*yoC(%95rUPTl!(mm!KqBr4TWuuof!`vs~+om@XL_0A zCBDETzzLIlJ^x|EBx#j_>BfNglC#_0vlbFp)md_twl7|Olsy9+9u!x*bHOE`y#CeL z+z5XoQcN`+!Y#sMpGlrCulOlH(nHR1*KF^W=?dCEQ3q-@8BP9-8unT>&I7AN7* zxVy#HaHh8pvR3^j4%Ozyol2cdGLyu5B$wWDCSvdhW9csy5*THSj_S0BP>oPK@)R|~ z7Ygj2eul9)(cG)W^We@@<-HW}rEd)QM)hPOvLu@OBc98m0fL!gMT};0^(R(YKHp3|5CYz-W7bb{T|+LjacnQ?j0+x=!N_G6CzgXMFPPQ|y&iNXiSC2$# zA9?k2G~P<1vrYB>xPqY+gHd;XEvNP~>7{gdRFxDZ*Hqe4`}0@jjk_}2Slq>I4pP;A zQiUb;Cl3=rcM6)+HR4;_TXT+e73dzm6?T-XBD~P3dDn_7jZT8SADeqht@*7<%4#QAr3R~SGcIbz`h`%0T`*R) zMF=eJP;5WjRWit225bph+x&=+6NL{7ry{vf^x6^oQ8O7$?b|6`{-3ewbRHeI3DazwI)ib7!YRB&EL&Wg8hPmJ{J0LN9Uiig5q6oj z`+@h%5>&%pT{L%^=SF%^W~HP`8@t^KJNHn0s{uT&1``N40P=a4{3U`~FV$HVRJ_2B z&!y+X11OIUl;f2#8-HwOIXKQEE6+#6Maw!rE@ zYwSWoLXE6WcIOt!1UqaA)B=HU%0rqrKP1vwR`uV4;Uo; z85zeDfhY)@nHno61l#i8jjJuXG=Y3>J<_Y|PpGM>FujwJj9$!JMFx_DT>zg@pka;!wt0cvwd26P+}~}@&CS<#cQvG>q%fJ03cOp&8jy(N zNC;rA=mRDkxJ9_`_h_BpHToY|A08c%!9TSJ2;_)($er1fP0^D4p&&3zw6wHYEsgHW za+nJ6XvUm~OzdDUc}yTG2ko;1@Y3JkZ&%H2SR(^^2;>l|_gGcJllicS(yWXGA&Dg- z@u}s0nIvW>Zp9Qc3Ui?NiCa)M!Bb!Q(Z(vk4g0uH9UJKR}ceSR+zN_}94euqGtm*U$3QY%2c!Jc6bxX~3SCOY2%J~u@+Gqlz3cWHHZ#C)=&n85a0|mC z2!sGYtu|}36Z_p(<5M=;thwIc_ydpMWBa$8!2s03FhX4*?)Pu{d{GB*a1Hxv^A4x~ zsyFmdz*zX#QN)}E)&KR2B>ku7Mag zZ0f}dL=B9+w2=P8jn|+XL2rSheNY3%_tMm({(v@103DX~uK*CG{bLRNdv8r{7XP`o zHz-Pt|GKvq_iy~?-XicQ|NF7E`MLea-jx0Qo40;*(p_6GEWp=#9S6WG^9MWV>F)?U zE&ycu-yENf12DBAfU<<|8>3nOH#B>VK$upE-xfRW{rK_2dY=~w@bcRF`YkNK<(`P} zP`g^g%G;{@uKOPQKKlXuGD~>Nq_mj8^jrgR1UIp?lugWI1>(Bcp3&aXG5GPL4n8j+ zN+qM8CWO5V8x7kFBN7AyLpb{S>3J?7=LIl}^70VY*4Au{j0oSaGqQjnu(p)75BCQ| z|1k?rCxH}UC!rKkCy^AqvxW%+fChTk6dMmufSyhbG2iBw5EB!_#>bZ=CojMCAz$8F zM%ZD?8%!5WAIuPZBbYImDcJftng@-C-VD%TFOl?zi}Ta6%F0-N zetre)s8C2;!VT#=hflAcj{7gqhD#B5)&kEDk3tIzfa{5FNRgSr7Zia zfX2vG=pN{v?%wD=?S}PG_S_a?0S3D{Rv3jA1|p;~Yl2f@FrvQKDXFP3vI-3FH!St_ zfYO?J&UPkpCUz!qCUqur))T2>G5B}1IHM^)EzK+&1dO%K>@9yuq{xELiYDmb(?8@4 z=W#)9g8vvR?m`F$S+ru*&?0~mN&=$(T7%g`uk{&?rqcfAVn-W#F#jm2YjWb?@Llu) z1Vh9<9+^{-4^u^T!w3K)`wPZwh-PN8J8@>D;$sK_``Jp`oE1IigrIT5itl(go0tZvt3WR)Xq`WQe`|cVa9vsv<00$&7Uas?vyJI9pVwm|DQDRPgan@01datdjAGG9A54e%lzu z=eO_cZ_T-NH8_kHsje+A=Z^zvi}f;jt)8j@na-QuE-aW81D{qJ3Hp9DOqrjb*QF7# zi&ZOBPH22PIjL8yRj5=Z=((nnq7+M&KMoikdNe{VR4vWT*aY-qy2VWLk)?wE`<5wK z1T+uFUWbD9Xm~9ViU4mJlv#9za2)T>85B!B{#iN!$TE~mNALVpKeDm4>Ikr~diE{- zc_pYA@QEU$3imhXTk2>Sf&Z}Hu;p%`Y6c8&{B`Z`k{U`tod0Q$E?LF~0@?qi-kppg nN6ZJ%m;dy@EAce~c65a?-qD)vG5ewq1pHJLH5IDmET8@##U#U~ literal 62881 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 From acdc635ad07064ffd20c116eac8ec5c749dfae7f Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 00:07:31 +0200 Subject: [PATCH 67/76] SplashApplicationContext Added exception handling when creating/displaying the main form. --- .../Properties/Splash.Designer.cs | 81 +++++++++++ .../Properties/Splash.es.resx | 126 ++++++++++++++++++ .../UiServices.Common/Properties/Splash.resx | 126 ++++++++++++++++++ .../Start/SplashApplicationContext.cs | 35 ++++- .../UiServices.Common.csproj | 10 ++ 5 files changed, 374 insertions(+), 4 deletions(-) create mode 100644 1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs create mode 100644 1.5 'Kruger 60'/UiServices.Common/Properties/Splash.es.resx create mode 100644 1.5 'Kruger 60'/UiServices.Common/Properties/Splash.resx diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs new file mode 100644 index 00000000..07804305 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs @@ -0,0 +1,81 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Splash { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Splash() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.Splash", typeof(Splash).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Unable to create the program main window.. + /// + internal static string ExceptionGetMainForm { + get { + return ResourceManager.GetString("ExceptionGetMainForm", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to display the program main window.. + /// + internal static string ExceptionStartMainForm { + get { + return ResourceManager.GetString("ExceptionStartMainForm", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.es.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.es.resx new file mode 100644 index 00000000..f90bc99c --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + No ha sido posible crear la ventana principal del programa. + + + No ha sido posible mostrar la ventana principal del programa. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.resx new file mode 100644 index 00000000..57cccc21 --- /dev/null +++ b/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Unable to create the program main window. + + + Unable to display the program main window. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs b/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs index 52707af4..4648f2bc 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs @@ -295,15 +295,42 @@ private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArg worker.Dispose(); worker = null; - if ((!isOk) || (e.Cancelled) || (e.Error != null) || ((mainForm = GetMainForm()) == null)) + var close = (!isOk) || (e.Cancelled) || (e.Error != null); + if (!close) + { + close = true; + try + { + mainForm = GetMainForm(); + close = (mainForm == null); + } + catch (Exception ex) + { + DisplayException(Properties.Splash.ExceptionGetMainForm, false, true, ex); + } // try-catch + } // if + + if (!close) + { + close = true; + try + { + StartMainForm(mainForm); + close = false; + } + catch (Exception ex) + { + DisplayException(Properties.Splash.ExceptionStartMainForm, false, true, ex); + close = true; + } // try-catch + } // if + + if (close) { splashScreen.Close(); ExitThread(); - return; } // if - - StartMainForm(mainForm); } // Worker_RunWorkerCompleted #endregion diff --git a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj index 39606e5b..26962e10 100644 --- a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj +++ b/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj @@ -147,6 +147,11 @@ True True + + True + True + Splash.resx + @@ -240,6 +245,11 @@ ResXFileCodeGenerator TimeSpanUpDown.Designer.cs + + + ResXFileCodeGenerator + Splash.Designer.cs + SplashScreen.cs From b2419e6c87d8164fbdc3f4c9c9e5cdf070418dfe Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 00:16:19 +0200 Subject: [PATCH 68/76] Updated setup to include EPG assemblies --- 1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs | 17 +++-------------- .../Setup/MainSetup/MainSetup.wixproj | 19 ++++++++++++++++++- 1.5 'Kruger 60'/Setup/MainSetup/Product.wxs | 2 +- 1.5 'Kruger 60'/Setup/MainSetup/strings.wxi | 8 +++----- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs b/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs index 8a4d4849..cf70684d 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs +++ b/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs @@ -9,36 +9,25 @@ Description="Enables the EPG capabilities. If this feature is not installed, EPG information will not be available."> - - + - - + - - + - - - - - - - - diff --git a/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj b/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj index 1031555e..c465a404 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj +++ b/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj @@ -6,7 +6,7 @@ 3.9 f3fc11c7-8850-4874-9cf3-8ba4de43959a 2.0 - IPTViewr_Movistar+_1-5_alpha-4 + IPTViewr_Movistar+_1-5_beta-1 Package $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets @@ -34,6 +34,7 @@ + @@ -120,6 +121,14 @@ Binaries;Content;Satellites INSTALLFOLDER + + Services.EpgDiscovery + {5a171dbb-855c-452b-93c6-229c7aa6c7a6} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + Services.Record.Serialization {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} @@ -176,6 +185,14 @@ Binaries;Content;Satellites INSTALLFOLDER + + UiServices.EPG + {004c3829-fed4-4084-b23b-871193afa8c7} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + UiServices.Forms {90f750b3-64db-493f-96a6-e68de5ea60a1} diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs index d8ffc2c3..7f664461 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs +++ b/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs @@ -23,7 +23,7 @@ All rights reserved, except those granted by the governing license of this softw - + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi b/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi index b7a6065c..d963a8fd 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi +++ b/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi @@ -22,9 +22,7 @@ All rights reserved, except those granted by the governing license of this softw - + + + From 1618f150341ddfc70180e235d82e142b378b55bb Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 01:47:30 +0200 Subject: [PATCH 69/76] DateTimeExtensions signature change --- 1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs b/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs index fff9b980..600da8dd 100644 --- a/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs +++ b/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs @@ -18,9 +18,10 @@ public static DateTime TruncateToMinutes(this DateTime time) return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 } // TruncateToMinutes - public static DateTime TruncateToSeconds(this DateTime time, int modulo) + public static DateTime TruncateToSeconds(this DateTime time, int rounding = 1) { - var seconds = (time.Second / modulo) * modulo; + if (rounding < 1) throw new ArgumentOutOfRangeException(nameof(rounding)); + var seconds = (time.Second / rounding) * rounding; return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, seconds, time.Kind); } // TruncateToSeconds } // static class DateTimeExtensions From fabd5cd3cdaf838e2995ee5858e69ef8d5ed13a0 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 01:47:48 +0200 Subject: [PATCH 70/76] Services.Record.Serialization --- .../Services.Record.Serialization/RecordAction.cs | 6 +++--- .../Services.Record.Serialization/RecordRightNow.cs | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs index 84019815..7f109917 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs @@ -45,13 +45,13 @@ public RecordRecorder Recorder public static RecordAction CreateWithDefaultValues() { - RecordAction retry; + RecordAction action; - retry = new RecordAction() + action = new RecordAction() { }; - return retry; + return action; } // CreateWithDefaultValues } // class RecordAction } // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs index 232f4a82..34c21e8f 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs +++ b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs @@ -1,6 +1,7 @@ // Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury // All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +using IpTviewr.Common; using System; using System.Collections.Generic; using System.Linq; @@ -30,7 +31,7 @@ public override void Verbalize(bool pastTime, StringBuilder builder) public override DateTime GetStartDateTime() { - return DateTime.Now; + return DateTime.Now.TruncateToSeconds(1); } // GetStartDateTime } // class RecordRightNow } // namespace From dc83e3c8a51df6bb07e33b57264e6ffe8d6bb1e1 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 01:48:22 +0200 Subject: [PATCH 71/76] Control TimeSpanUpDown --- .../Controls/TimeSpanUpDown.cs | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs index 740c35fe..aa2040db 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs +++ b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs @@ -16,6 +16,7 @@ namespace IpTviewr.UiServices.Common.Controls public partial class TimeSpanUpDown : UserControl { private int SupressValueChangedEvent; + private TimeSpan fieldValue; public event EventHandler ValueChanged; @@ -94,10 +95,7 @@ public TimeSpan Value { get { - return new TimeSpan(numericTimeSpanDays.Visible? (int)numericTimeSpanDays.Value : 0, - (int)numericTimeSpanHours.Value, - (int)numericTimeSpanMinutes.Value, - SecondsAllowed? (int)numericTimeSpanSeconds.Value : 0); + return fieldValue; } // get set { @@ -109,6 +107,7 @@ public TimeSpan Value numericTimeSpanMinutes.Value = value.Minutes; numericTimeSpanSeconds.Value = value.Seconds; SupressValueChangedEvent--; + fieldValue = value; FireValueChanged(); } // set } // Value @@ -125,6 +124,7 @@ public TimeSpanUpDown() private void numericTimeSpanDays_ValueChanged(object sender, EventArgs e) { + UpdateValue(); FireValueChanged(); } // numericTimeSpanDays_ValueChanged @@ -141,6 +141,8 @@ private void numericTimeSpanHours_ValueChanged(object sender, EventArgs e) numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, days); SupressValueChangedEvent--; } // if + + UpdateValue(); FireValueChanged(); } // numericTimeSpanHours_ValueChanged @@ -154,8 +156,10 @@ private void numericTimeSpanMinutes_ValueChanged(object sender, EventArgs e) numericTimeSpanHours.Value += value / 60; SupressValueChangedEvent--; } // if + + UpdateValue(); FireValueChanged(); - } + } // numericTimeSpanMinutes_ValueChanged private void numericTimeSpanSeconds_ValueChanged(object sender, EventArgs e) { @@ -167,8 +171,10 @@ private void numericTimeSpanSeconds_ValueChanged(object sender, EventArgs e) numericTimeSpanMinutes.Value += value / 60; SupressValueChangedEvent--; } // if + + UpdateValue(); FireValueChanged(); - } + } // numericTimeSpanSeconds_ValueChanged private void RefreshLayout() { @@ -201,5 +207,13 @@ private void FireValueChanged() if ((SupressValueChangedEvent > 0) || (ValueChanged == null)) return; ValueChanged(this, EventArgs.Empty); } // FireValueChanged + + private void UpdateValue() + { + fieldValue = new TimeSpan(numericTimeSpanDays.Visible ? (int)numericTimeSpanDays.Value : 0, + (int)numericTimeSpanHours.Value, + (int)numericTimeSpanMinutes.Value, + SecondsAllowed ? (int)numericTimeSpanSeconds.Value : 0); + } // UpdateValue } // class TimeSpanUpDown } // namespace From dceee5adb69ed81d96374f275e894e1743d93958 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 01:48:39 +0200 Subject: [PATCH 72/76] Services.Record.Scheduler --- 1.5 'Kruger 60'/Services.Record/Scheduler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1.5 'Kruger 60'/Services.Record/Scheduler.cs b/1.5 'Kruger 60'/Services.Record/Scheduler.cs index 08f03b0b..ea26be15 100644 --- a/1.5 'Kruger 60'/Services.Record/Scheduler.cs +++ b/1.5 'Kruger 60'/Services.Record/Scheduler.cs @@ -224,7 +224,7 @@ private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedul case RecordScheduleKind.RightNow: { var rightNow = new TimeTrigger(); - rightNow.EndBoundary = DateTime.Now + TotalRecordTime; + rightNow.EndBoundary = DateTime.Now.TruncateToSeconds() + TotalRecordTime + new TimeSpan(0,1,0); definition.Triggers.Add(rightNow); break; From cbfcf4697381526d2467d73cfe3814d59faf25e1 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 01:49:02 +0200 Subject: [PATCH 73/76] UiServices.Record.RecordHelper --- .../UiServices.Record/RecordHelper.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs index 2aaa54bd..63104166 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs @@ -207,11 +207,12 @@ public static RecordAction GetRecordAction(UiBroadcastService service, EpgProgra action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; action.SaveLocationName = defaultLocation.Name; action.SaveLocationPath = defaultLocation.Path; + action.Recorder = GetDefaultRecorder(); return action; } // GetRecordAction - private static RecordAdvancedSettings GetRecordAdvancedSettings() + public static RecordAdvancedSettings GetRecordAdvancedSettings() { var advanced = RecordAdvancedSettings.CreateWithDefaultValues(); @@ -239,6 +240,19 @@ public static bool ScheduleTask(CommonBaseForm ownerForm, RecordTask task) return false; } // ScheduleTask + public static RecordRecorder GetDefaultRecorder() + { + // TODO: Should be user selectable + var recorder = new RecordRecorder() + { + Name = AppUiConfiguration.Current.User.Record.Recorders[0].Name, + Path = AppUiConfiguration.Current.User.Record.Recorders[0].Path, + Arguments = AppUiConfiguration.Current.User.Record.Recorders[0].Arguments + }; + + return recorder; + } // GetDefaultRecorder + private static bool VerifyIsInactive(CommonBaseForm ownerForm, UiBroadcastService service) { if (service.IsInactive) From 22d8a0c822d509c63d05ae6856e9dd1cb01bfb31 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 02:00:42 +0200 Subject: [PATCH 74/76] Minor tweaks in RecordDuration control --- .../Controls/RecordingDuration.Designer.cs | 4 ++-- .../Controls/RecordingDuration.cs | 17 +++-------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs index 7292031b..48c51689 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs @@ -60,8 +60,8 @@ private void InitializeComponent() resources.ApplyResources(this.dateTimeEndTime, "dateTimeEndTime"); this.dateTimeEndTime.Name = "dateTimeEndTime"; this.dateTimeEndTime.ShowUpDown = true; - this.dateTimeEndTime.ValueChanged += new System.EventHandler(this.dateTimeEndTime_ValueChanged); - this.dateTimeEndTime.Validating += new System.ComponentModel.CancelEventHandler(this.dateTimeEndTime_Validating); + this.dateTimeEndTime.ValueChanged += new System.EventHandler(this.dateTimeEndDate_ValueChanged); + this.dateTimeEndTime.Validating += new System.ComponentModel.CancelEventHandler(this.dateTimeEndDate_Validating); // // dateTimeEndDate // diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs index 9d3a8f98..9a569b3f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs +++ b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs @@ -11,6 +11,7 @@ using System.Windows.Forms; using IpTviewr.Services.Record.Serialization; using IpTviewr.UiServices.Record.Properties; +using IpTviewr.Common; namespace IpTviewr.UiServices.Record.Controls { @@ -59,7 +60,7 @@ private DateTime EndDateTime set { - fieldEndDateTime = value; + fieldEndDateTime = value.TruncateToSeconds(1); if (AvoidRecursion) return; AvoidRecursion = true; @@ -176,7 +177,7 @@ private void dateTimeEndDate_ValueChanged(object sender, EventArgs e) { if (ManualUpdate > 0) return; - RecordTimeSpan = (GetEndDateTime() - StartDateTime); + EndDateTime = GetEndDateTime(); } // dateTimeEndDate_ValueChanged private void dateTimeEndDate_Validating(object sender, CancelEventArgs e) @@ -184,18 +185,6 @@ private void dateTimeEndDate_Validating(object sender, CancelEventArgs e) ValidateEndDateTime(sender as DateTimePicker, e); } // dateTimeEndDate_Validating - private void dateTimeEndTime_ValueChanged(object sender, EventArgs e) - { - if (ManualUpdate > 0) return; - - RecordTimeSpan = (GetEndDateTime() - StartDateTime); - } // dateTimeEndTime_ValueChanged - - private void dateTimeEndTime_Validating(object sender, CancelEventArgs e) - { - ValidateEndDateTime(sender as DateTimePicker, e); - } // dateTimeEndTime_Validating - private void checkBoxEndMargin_CheckedChanged(object sender, EventArgs e) { OnEndMarginCheckedChanged(); From 5348b85cd4971c751a4f721f3e6b45f909e52c79 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 02:00:51 +0200 Subject: [PATCH 75/76] Minor tweaks in RecordChannelDialog --- .../RecordChannelDialog.Designer.cs | 32 ++++----- .../UiServices.Record/RecordChannelDialog.cs | 14 ++-- .../RecordChannelDialog.resx | 70 +++++++++---------- 3 files changed, 55 insertions(+), 61 deletions(-) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs index affee050..a9b325d6 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs @@ -44,7 +44,9 @@ private void InitializeComponent() this.labelStartMarginSufix = new System.Windows.Forms.Label(); this.numericStartMargin = new System.Windows.Forms.NumericUpDown(); this.checkBoxStartMargin = new System.Windows.Forms.CheckBox(); + this.recordingSchedule = new IpTviewr.UiServices.Record.Controls.RecordingSchedule(); this.tabPageLength = new System.Windows.Forms.TabPage(); + this.recordingTime = new IpTviewr.UiServices.Record.Controls.RecordingDuration(); this.tabPageSave = new System.Windows.Forms.TabPage(); this.listViewLocations = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); this.imageListLocations = new System.Windows.Forms.ImageList(this.components); @@ -77,8 +79,6 @@ private void InitializeComponent() this.labelProgramDescription = new System.Windows.Forms.Label(); this.labelChannelName = new System.Windows.Forms.Label(); this.pictureChannelLogo = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); - this.recordingSchedule = new IpTviewr.UiServices.Record.Controls.RecordingSchedule(); - this.recordingTime = new IpTviewr.UiServices.Record.Controls.RecordingDuration(); ColumnName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); ColumnLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.tabProperties.SuspendLayout(); @@ -175,6 +175,13 @@ private void InitializeComponent() this.checkBoxStartMargin.UseVisualStyleBackColor = true; this.checkBoxStartMargin.CheckedChanged += new System.EventHandler(this.checkBoxStartMargin_CheckedChanged); // + // recordingSchedule + // + resources.ApplyResources(this.recordingSchedule, "recordingSchedule"); + this.recordingSchedule.Name = "recordingSchedule"; + this.recordingSchedule.ScheduleKindChanged += new System.EventHandler(this.recordingSchedule_ScheduleKindChanged); + this.recordingSchedule.DateTimeChanged += new System.EventHandler(this.recordingSchedule_DateTimeChanged); + // // tabPageLength // this.tabPageLength.Controls.Add(this.recordingTime); @@ -182,6 +189,13 @@ private void InitializeComponent() this.tabPageLength.Name = "tabPageLength"; this.tabPageLength.UseVisualStyleBackColor = true; // + // recordingTime + // + this.recordingTime.AutoValidate = System.Windows.Forms.AutoValidate.Disable; + this.recordingTime.CausesValidation = false; + resources.ApplyResources(this.recordingTime, "recordingTime"); + this.recordingTime.Name = "recordingTime"; + // // tabPageSave // this.tabPageSave.Controls.Add(this.listViewLocations); @@ -435,20 +449,6 @@ private void InitializeComponent() this.pictureChannelLogo.Name = "pictureChannelLogo"; this.pictureChannelLogo.TabStop = false; // - // recordingSchedule - // - resources.ApplyResources(this.recordingSchedule, "recordingSchedule"); - this.recordingSchedule.Name = "recordingSchedule"; - this.recordingSchedule.ScheduleKindChanged += new System.EventHandler(this.recordingSchedule_ScheduleKindChanged); - this.recordingSchedule.DateTimeChanged += new System.EventHandler(this.recordingSchedule_DateTimeChanged); - // - // recordingTime - // - this.recordingTime.AutoValidate = System.Windows.Forms.AutoValidate.Disable; - this.recordingTime.CausesValidation = false; - resources.ApplyResources(this.recordingTime, "recordingTime"); - this.recordingTime.Name = "recordingTime"; - // // RecordChannelDialog // this.AcceptButton = this.buttonOk; diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs index 74bc71a8..b997d17e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs @@ -208,7 +208,6 @@ private void InitScheduleData() // Safety margin checkBoxStartMargin.Checked = schedule.SafetyMargin.HasValue; numericStartMargin.Value = schedule.SafetyMargin ?? RecordSchedule.DefaultSafetyMargin; - UpdateStartMarginStatus(true); } // InitScheduleData private void GetScheduleData() @@ -292,7 +291,7 @@ private void UpdateStartMarginStatus(bool enabled) private void ChangeOkButtonText(bool schedule) { buttonOk.ChangeImage(schedule ? Properties.Resources.Action_Ok_16x16 : Properties.Resources.Action_RecordButton_16x16); - buttonOk.Text = schedule ? Properties.RecordChannel.RecordButtonWithSettings : Properties.RecordChannel.RecordButtonRecord; + buttonOk.Text = schedule ? Properties.RecordChannel.RecordButtonSchedule : Properties.RecordChannel.RecordButtonRecord; } // ChangeOkButtonText #endregion @@ -339,13 +338,7 @@ private void GetSaveData() Task.Action.FileExtension = comboFileExtension.Text.Trim(); Task.Action.SaveLocationName = locationName; Task.Action.SaveLocationPath = locationPath; - // TODO: Should be user selectable - Task.Action.Recorder = new RecordRecorder() - { - Name = AppUiConfiguration.Current.User.Record.Recorders[0].Name, - Path = AppUiConfiguration.Current.User.Record.Recorders[0].Path, - Arguments = AppUiConfiguration.Current.User.Record.Recorders[0].Arguments - }; // Task.Action.Recorder + Task.Action.Recorder = RecordHelper.GetDefaultRecorder(); } // GetSaveData private void textFilename_Validating(object sender, CancelEventArgs e) @@ -640,9 +633,10 @@ private void GetAdvancedData() // Max execution time // TODO: no UI yet! + // Remember: //Task.AdvancedSettings.ExecutionTimeLimit.Enabled = checkSchedulerExecutionLimit.Checked; //Task.AdvancedSettings.ExecutionTimeLimit.Time = timeSpanSchedulerExecutionLimit.Value; - Task.AdvancedSettings.ExecutionTimeLimit.Enabled = true; // use default time limit + Task.AdvancedSettings.ExecutionTimeLimit.Enabled = true; // (Task.Schedule.Kind != RecordScheduleKind.RightNow); // use default time limit // Wake up computer // TODO: no UI yet! diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx index d0983275..7464aa9a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx +++ b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx @@ -156,6 +156,9 @@ Set schedule + + MiddleRight + ImageBeforeText @@ -458,50 +461,50 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0 - CwAAAk1TRnQBSQFMAgEBAgEAASwBAgEsAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AT0BAAH/AbgBPQEAAf8DOAFcFAABuAGjAZQB/wEi - AQgBAAH/ASIBCAEAAf8BIgEIAQAB/wEiAQgBAAH/ASIBCAEAAf8BIgEIAQAB/wEiAQgBAAH/ASIBCAEA - Af8BIgEIAQAB/wEiAQgBAAH/ASIBCAEAAf8BIgEIAQAB/wEiAQgBAAH/ASIBCAEAAf8BIgEIAQAB/6AA - AbgBPQEAAf8B8QHMAY4B/wG4AT0BAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL + CwAAAk1TRnQBSQFMAgEBAgEAATQBAgE0AQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4ATwBAAH/AbgBPAEAAf8DOAFcFAABuAGjAZQB/wEh + AQcBAAH/ASEBBwEAAf8BIQEHAQAB/wEhAQcBAAH/ASEBBwEAAf8BIQEHAQAB/wEhAQcBAAH/ASEBBwEA + Af8BIQEHAQAB/wEhAQcBAAH/ASEBBwEAAf8BIQEHAQAB/wEhAQcBAAH/ASEBBwEAAf8BIQEHAQAB/6AA + AbgBPAEAAf8B8QHMAY4B/wG4ATwBAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi - AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASIBCAEAAf+gAAG4AT0BAAH/AfABwAErAf8B7wHK - AYwB/wG4AT0BAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy + AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASEBBwEAAf+gAAG4ATwBAAH/AfABwAEqAf8B7wHK + AYwB/wG4ATwBAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt - Af8B5AG9AaYB/wHhAbcBngH/ASIBCAEAAf+AAANDAXcBuAE9AQAB/wG4AT0BAAH/AbgBPQEAAf8BuAE9 - AQAB/wG4AT0BAAH/AbgBPQEAAf8BuAE9AQAB/wG4AT0BAAH/AfMBxQEtAf8B5QGZAQAB/wHvAcsBjAH/ - AbgBPQEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY + Af8B5AG9AaYB/wHhAbcBngH/ASEBBwEAAf+AAANDAXcBuAE8AQAB/wG4ATwBAAH/AbgBPAEAAf8BuAE8 + AQAB/wG4ATwBAAH/AbgBPAEAAf8BuAE8AQAB/wG4ATwBAAH/AfMBxQEsAf8B5QGZAQAB/wHvAcsBjAH/ + AbgBPAEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn - AcQBsAH/AeMBvQGlAf8BIgEIAQAB/4AAAaUBJQEAAf8B6QG6ASYB/wHuAcEBKwH/AfQBxwEuAf8B9wHM - ATAB/wH6Ac8BMgH/AfsBzwEyAf8B+wHPATIB/wH5AcwBMQH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ - Ae8BygGMAf8BsgE1AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh + AcQBsAH/AeMBvQGlAf8BIQEHAQAB/4AAAaUBJAEAAf8B6QG6ASUB/wHuAcEBKgH/AfQBxwEtAf8B9wHM + AS8B/wH6Ac8BMQH/AfsBzwExAf8B+wHPATEB/wH5AcwBMAH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ + Ae8BygGMAf8BsgE0AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq - AcwBuwH/AecBxgGzAf8B5AG+AacB/wEiAQgBAAH/gAABpQElAQAB/wFgAUMBKwH8Ad0BlAEAAf8B5AGb + AcwBuwH/AecBxgGzAf8B5AG+AacB/wEhAQcBAAH/gAABpQEkAQAB/wFfAUEBKwH8Ad0BlAEAAf8B5AGb AQAB/wHtAaUBAAH/AfMBrAEAAf8B+AGxAQAB/wH5AbIBAAH/AfkBsQEAAf8B9QGtAQAB/wHyAacBAAH/ - AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBNQEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ + AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBNAEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX - AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASIBCAEAAf+AAAGlASUBAAH/AWABSQEr + AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASEBBwEAAf+AAAGlASQBAAH/AV8BRwEr AfwB3AGcAQAB/wHgAZ0BAAH/AecBoQEAAf8B7QGmAQAB/wHzAasBAAH/AfgBsQEAAf8B+QGyAQAB/wH4 - AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzATcBAAH/AcABqwGc + AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzATYBAAH/AcABqwGc Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy - AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASIBCAEA - Af+AAAGlASUBAAH/AdwBqQEUAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ - AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEWAf8BswE3 + AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASEBBwEA + Af+AAAGlASQBAAH/AdwBqQETAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ + AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEVAf8BswE2 AQAB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ - AecBxwGyAf8BIgEIAQAB/4AAAaUBJQEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl - Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEdAf8BswE3AQAB/wM4AVwEAAHD + AecBxwGyAf8BIQEHAQAB/4AAAaUBJAEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl + Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEcAf8BswE2AQAB/wM4AVwEAAHD Aa4BnwH/Af0B+wH4Af8B/AH4AfYB/wH7AfYB8gH/AfoB8wHvAf8B+QHwAeoB/wH4AfEB7AH/AfgB7wHp - Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEi - AQgBAAH/gAADQwF3AaUBJQEAAf8BpQElAQAB/wGlASUBAAH/AaUBJQEAAf8BpQElAQAB/wGlASUBAAH/ - AaUBJQEAAf8BpQElAQAB/wH4AbwBAAH/AfsBwQECAf8B/AHSATcB/wGzATcBAAH/AzgBXAgAAcUBrwGg + Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEh + AQcBAAH/gAADQwF3AaUBJAEAAf8BpQEkAQAB/wGlASQBAAH/AaUBJAEAAf8BpQEkAQAB/wGlASQBAAH/ + AaUBJAEAAf8BpQEkAQAB/wH4AbwBAAH/AfsBwQEBAf8B/AHSATYB/wGzATYBAAH/AzgBXAgAAcUBrwGg Af8B/gH7AfgB/wH9AfoB+QH/AfwB+AH1Af8B+wH1AfIB/wH6AfIB7gH/AfkB8QHsAf8BvQGpAZsB/wG9 - AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEiAQgBAAH/ASIBCAEA - Af+gAAGlASUBAAH/AfMBtgEAAf8B+wHQATYB/wGzATcBAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ - AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BLwEWAQMB/wHWAdEBzgH/AckBxAHA - Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wE7ASIBEAH/pAABpQElAQAB/wHzAcgBMQH/ - AbMBNwEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 - AfYB8gH/AZ0BiAE1Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt - Af8BngGKATkB/6QAAaUBJQEAAf8BswE3AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB + AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEhAQcBAAH/ASEBBwEA + Af+gAAGlASQBAAH/AfMBtgEAAf8B+wHQATUB/wGzATYBAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ + AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BLgEVAQIB/wHWAdEBzgH/AckBxAHA + Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wE6ASEBDwH/pAABpQEkAQAB/wHzAcgBMAH/ + AbMBNgEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 + AfYB8gH/AZ0BiAE0Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt + Af8BngGKATgB/6QAAaUBJAEAAf8BswE2AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB AasBnAH/Ab4BqQGaAf8BuwGmAZcB/wG5AaQBlQH/AbcBogGTAf8B2AHHAbwB/wHOAbwBrgH/AcgBtAGn Af8BwwGuAaAB/wG8AacBmAH/AbkBpAGVAf8BrQGZAYwB/6QAA1MBqgM4AVz/ANkAAUIBTQE+BwABPgMA ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AT8C/wQAAf8BHwYAAf8BDwYAAf8BBwcAAQMHAAEB @@ -1375,9 +1378,6 @@ 464, 412 - - NoControl - 480, 450 From 7f9be1d53b17acb3874239ad3fa6c0c25dd39903 Mon Sep 17 00:00:00 2001 From: AlphaCentaury Date: Wed, 7 Sep 2016 02:34:52 +0200 Subject: [PATCH 76/76] FirstTimeConfig Updated EPG warning text --- .../FirstTimeConfig/ConfigForm.Designer.cs | 43 +- 1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs | 2 +- .../FirstTimeConfig/ConfigForm.es.resx | 740 +++++++++--------- .../FirstTimeConfig/ConfigForm.resx | 66 +- 4 files changed, 424 insertions(+), 427 deletions(-) diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs index 368bb8f6..a703e035 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs @@ -32,13 +32,13 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm)); - this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); this.openFile = new System.Windows.Forms.OpenFileDialog(); this.labelStepTitle = new System.Windows.Forms.Label(); this.panelButtons = new System.Windows.Forms.Panel(); this.buttonPreviousPage = new System.Windows.Forms.Button(); this.buttonNextPage = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); + this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); this.wizardControl = new IpTviewr.Tools.FirstTimeConfig.WizardTabControl(); this.wizardPageReadme = new System.Windows.Forms.TabPage(); this.checkReadmeAck = new System.Windows.Forms.CheckBox(); @@ -85,7 +85,7 @@ private void InitializeComponent() this.radioChannelHDPriority = new System.Windows.Forms.RadioButton(); this.labelChannelAssignmentExplanation = new System.Windows.Forms.Label(); this.groupEPG = new System.Windows.Forms.GroupBox(); - this.checkEpgAutoUpdate = new System.Windows.Forms.CheckBox(); + this.pictureBoxEpgWarning = new System.Windows.Forms.PictureBox(); this.labelEpgWarning = new System.Windows.Forms.Label(); this.checkEpg = new System.Windows.Forms.CheckBox(); this.wizardPageRecordings = new System.Windows.Forms.TabPage(); @@ -114,22 +114,11 @@ private void InitializeComponent() this.wizardPageBasic.SuspendLayout(); this.groupBoxChannelNumbers.SuspendLayout(); this.groupEPG.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEpgWarning)).BeginInit(); this.wizardPageRecordings.SuspendLayout(); this.groupRecordConfig.SuspendLayout(); this.SuspendLayout(); // - // selectFolder - // - this.selectFolder.Description = ""; - this.selectFolder.DontIncludeNetworkFoldersBelowDomainLevel = false; - this.selectFolder.NewStyle = true; - this.selectFolder.RootFolder = System.Environment.SpecialFolder.MyComputer; - this.selectFolder.SelectedPath = ""; - this.selectFolder.ShowBothFilesAndFolders = false; - this.selectFolder.ShowEditBox = true; - this.selectFolder.ShowFullPathInEditBox = true; - this.selectFolder.ShowNewFolderButton = true; - // // openFile // this.openFile.DefaultExt = "exe"; @@ -177,6 +166,18 @@ private void InitializeComponent() this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); // + // selectFolder + // + this.selectFolder.Description = ""; + this.selectFolder.DontIncludeNetworkFoldersBelowDomainLevel = false; + this.selectFolder.NewStyle = true; + this.selectFolder.RootFolder = System.Environment.SpecialFolder.MyComputer; + this.selectFolder.SelectedPath = ""; + this.selectFolder.ShowBothFilesAndFolders = false; + this.selectFolder.ShowEditBox = true; + this.selectFolder.ShowFullPathInEditBox = true; + this.selectFolder.ShowNewFolderButton = true; + // // wizardControl // resources.ApplyResources(this.wizardControl, "wizardControl"); @@ -530,18 +531,19 @@ private void InitializeComponent() // // groupEPG // - this.groupEPG.Controls.Add(this.checkEpgAutoUpdate); + this.groupEPG.Controls.Add(this.pictureBoxEpgWarning); this.groupEPG.Controls.Add(this.labelEpgWarning); this.groupEPG.Controls.Add(this.checkEpg); resources.ApplyResources(this.groupEPG, "groupEPG"); this.groupEPG.Name = "groupEPG"; this.groupEPG.TabStop = false; // - // checkEpgAutoUpdate + // pictureBoxEpgWarning // - resources.ApplyResources(this.checkEpgAutoUpdate, "checkEpgAutoUpdate"); - this.checkEpgAutoUpdate.Name = "checkEpgAutoUpdate"; - this.checkEpgAutoUpdate.UseVisualStyleBackColor = true; + this.pictureBoxEpgWarning.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Warning_48x48; + resources.ApplyResources(this.pictureBoxEpgWarning, "pictureBoxEpgWarning"); + this.pictureBoxEpgWarning.Name = "pictureBoxEpgWarning"; + this.pictureBoxEpgWarning.TabStop = false; // // labelEpgWarning // @@ -665,6 +667,7 @@ private void InitializeComponent() this.groupBoxChannelNumbers.PerformLayout(); this.groupEPG.ResumeLayout(false); this.groupEPG.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEpgWarning)).EndInit(); this.wizardPageRecordings.ResumeLayout(false); this.groupRecordConfig.ResumeLayout(false); this.groupRecordConfig.PerformLayout(); @@ -715,7 +718,6 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox checkAnalyticsUsage; private System.Windows.Forms.CheckBox checkEnableAnalytics; private System.Windows.Forms.GroupBox groupEPG; - private System.Windows.Forms.CheckBox checkEpgAutoUpdate; private System.Windows.Forms.Label labelEpgWarning; private System.Windows.Forms.CheckBox checkEpg; private System.Windows.Forms.TabPage wizardPageReadme; @@ -740,5 +742,6 @@ private void InitializeComponent() private System.Windows.Forms.Label labelReadmeWarning; private System.Windows.Forms.PictureBox pictureIconReadme; private System.Windows.Forms.CheckBox checkReadmeAck; + private System.Windows.Forms.PictureBox pictureBoxEpgWarning; } } \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs index 40d7a5aa..827d3044 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs @@ -522,7 +522,7 @@ private void buttonConfig_Click(object sender, EventArgs e) var success = Configuration.Create(textBoxVlc.Text, rootFolder, new TelemetryConfiguration(checkEnableAnalytics.Checked, checkAnalyticsUsage.Checked, checkAnalyticsExceptions.Checked), - new EpgConfig(checkEpg.Checked, checkEpgAutoUpdate.Checked ? 24 : -1, 7), + new EpgConfig(checkEpg.Checked, -1, 7), radioChannelSDPriority.Checked, xmlConfigPath, out message); if (success) diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx index ebf69439..1018e838 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx @@ -1,371 +1,371 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Atrás - - - &Siguiente - - - &Cancelar - - - - 318, 17 - - - He leído y entendido la información anterior y deseo continuar - - - Lea atentamente la siguiente información hasta el final antes de utilizar este programa. - - - Información importante sobre el uso de este programa - - - &Probar... - - - &Localizar... - - - 96, 13 - - - Ubicación de VLC: - - - Co&mprobar... - - - 231, 27 - - - 132, 13 - - - Descargar de videolan.org - - - 146, 13 - - - Reproductor VLC de Videolan - - - Software adicional - - - 193, 13 - - - Instalar con archivo de instalación local - - - 193, 13 - - - Instalar con archivo de instalación local - - - Co&mprobar... - - - 232, 100 - - - 139, 13 - - - Descargar de microsoft.com - - - - 0 - - - Co&mprobar... - - - 232, 50 - - - 139, 13 - - - Descargar de microsoft.com - - - 4 - - - Descargar e instalar requisitos previos - - - Paso 1: Verificación de instalación del software necesario - - - 189, 17 - - - Informar de errores y fallos internos - - - 273, 62 - - - 194, 13 - - - ¿Qué es ésto? ¿Por qué es importante? - - - 317, 17 - - - Recolectar y enviar información anónima de uso del programa - - - 233, 17 - - - Ayudar a mejorar el software (recomendado) - - - Recolección de datos de utilización - - - 367, 17 - - - Soy un experto en informática y voy a configurar el Firewall por mí mismo - - - C&onfigurar... - - - Se necesitan permisos de administración para poder modificar la configuración del cortafuegos. Se le solicitará confirmación. - - - 203, 17 - - - Permitir comunicar al reproductor &VLC - - - 450, 17 - - - Permitir comunicar a través del cortafuegos a &todos los programas del decodificador virtual - - - Configuración del Cortafuegos de Windows (Windows Firewall) - - - Paso 2: Cortafuegos de Windows y mejora del software - - - 453, 17 - - - Dar prioridad a Calidad Estándar (SD). El nº de canal HD correspondiente empezará por 'H' - - - 440, 17 - - - Dar prioridad a Alta Definición (HD). El nº de canal SD correspondiente empezará por 'S' - - - La lista de canales comprende a todos ellos, con independencia de su formato de emisión. Por tanto, existirán números de canal duplicados cuando un mismo canal se emita en HD y en SD. - -¿Qué tipo de canal debe aparecer antes? - - - Asignación de números de canal - - - 446, 17 - - - Actualizar automáticamente los datos EPG si tienen más de 24h en la siguiente ejecución - - - 445, 13 - - - ¡Aviso! Sólo disponible funcionalidad básica de EPG y puede causar fallos de vez en cuando - - - 153, 17 - - - Habilitar la función de EPG - - - Guía electrónica de programación (EPG) - - - Paso 3: Configuración y ajustes básicos - - - Creando los archivos de configuración de la aplicación y de preferencias de usuario... - - - Configurar la &aplicación - - - 401, 17 - - - Cr&ear una sub-carpeta. Los programas grabados se guardarán en dicha carpeta - - - 143, 83 - - - 112, 13 - - - Nombre de la carpeta: - - - Seleccio&nar... - - - 365, 13 - - - Seleccione la carpeta en la que, por defecto, se guardarán las grabaciones: - - - Grabación de programas - - - Paso 4: Configuración de la funcionalidad de grabación - - - - Inherit - - - Asistente de configuración inicial - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Atrás + + + &Siguiente + + + &Cancelar + + + + 318, 17 + + + He leído y entendido la información anterior y deseo continuar + + + Lea atentamente la siguiente información hasta el final antes de utilizar este programa. + + + Información importante sobre el uso de este programa + + + &Probar... + + + &Localizar... + + + 96, 13 + + + Ubicación de VLC: + + + Co&mprobar... + + + 231, 27 + + + 132, 13 + + + Descargar de videolan.org + + + 146, 13 + + + Reproductor VLC de Videolan + + + Software adicional + + + 193, 13 + + + Instalar con archivo de instalación local + + + 193, 13 + + + Instalar con archivo de instalación local + + + Co&mprobar... + + + 232, 100 + + + 139, 13 + + + Descargar de microsoft.com + + + + 0 + + + Co&mprobar... + + + 232, 50 + + + 139, 13 + + + Descargar de microsoft.com + + + 4 + + + Descargar e instalar requisitos previos + + + Paso 1: Verificación de instalación del software necesario + + + 189, 17 + + + Informar de errores y fallos internos + + + 273, 62 + + + 194, 13 + + + ¿Qué es ésto? ¿Por qué es importante? + + + 317, 17 + + + Recolectar y enviar información anónima de uso del programa + + + 233, 17 + + + Ayudar a mejorar el software (recomendado) + + + Recolección de datos de utilización + + + 367, 17 + + + Soy un experto en informática y voy a configurar el Firewall por mí mismo + + + C&onfigurar... + + + Se necesitan permisos de administración para poder modificar la configuración del cortafuegos. Se le solicitará confirmación. + + + 203, 17 + + + Permitir comunicar al reproductor &VLC + + + 450, 17 + + + Permitir comunicar a través del cortafuegos a &todos los programas del decodificador virtual + + + Configuración del Cortafuegos de Windows (Windows Firewall) + + + Paso 2: Cortafuegos de Windows y mejora del software + + + 453, 17 + + + Dar prioridad a Calidad Estándar (SD). El nº de canal HD correspondiente empezará por 'H' + + + 440, 17 + + + Dar prioridad a Alta Definición (HD). El nº de canal SD correspondiente empezará por 'S' + + + La lista de canales comprende a todos ellos, con independencia de su formato de emisión. Por tanto, existirán números de canal duplicados cuando un mismo canal se emita en HD y en SD. + +¿Qué tipo de canal debe aparecer antes? + + + Asignación de números de canal + + + 446, 17 + + + Actualizar automáticamente los datos EPG si tienen más de 24h en la siguiente ejecución + + + 445, 13 + + + ¡AVISO! La funcionalidad EPG está todavía en desarrollo y no ha sido probada a fondo. Algunas funciones pueden fallar o no funcionar como se espera. + + + 153, 17 + + + Habilitar la función de EPG + + + Guía electrónica de programación (EPG) + + + Paso 3: Configuración y ajustes básicos + + + Creando los archivos de configuración de la aplicación y de preferencias de usuario... + + + Configurar la &aplicación + + + 401, 17 + + + Cr&ear una sub-carpeta. Los programas grabados se guardarán en dicha carpeta + + + 143, 83 + + + 112, 13 + + + Nombre de la carpeta: + + + Seleccio&nar... + + + 365, 13 + + + Seleccione la carpeta en la que, por defecto, se guardarán las grabaciones: + + + Grabación de programas + + + Paso 4: Configuración de la funcionalidad de grabación + + + + Inherit + + + Asistente de configuración inicial + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx index ed23c459..136b2dd1 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx @@ -117,9 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 17, 17 - 134, 17 @@ -285,6 +282,9 @@ 0 + + 17, 17 + Top, Bottom, Left, Right @@ -1571,56 +1571,47 @@ Which channels should appear first? 0 - - True - - + NoControl - - 6, 65 - - - 364, 17 + + 6, 39 - - 2 + + 16, 16 - - Auto-update EPG data if older than 24 hours (at the next app execution) + + Zoom - - False + + 3 - - checkEpgAutoUpdate + + pictureBoxEpgWarning - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupEPG - + 0 - - True - NoControl - 24, 39 + 25, 39 - 404, 13 + 443, 43 1 - Warning! Ony bare EPG functions are implemented and might crash from time to time + WARNING: The EPG functionality is still under development and has not been thoroughly tested. Some functions may fail or not work as expected. labelEpgWarning @@ -2030,24 +2021,27 @@ Which channels should appear first? 493, 359 + + NoControl + CenterScreen First-time configuration assistant - - selectFolder - - - IpTviewr.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - openFile System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + selectFolder + + + IpTviewr.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + ConfigForm