Some timeout issues
[pithos-ms-client] / trunk / Pithos.Client.WPF / Configuration / PithosSettings.cs
index c91d3d0..2036ac8 100644 (file)
-// -----------------------------------------------------------------------
-// <copyright file="PithosSettings.cs" company="GRNET">
-// Copyright 2011-2012 GRNET S.A. All rights reserved.
-// 
-// Redistribution and use in source and binary forms, with or
-// without modification, are permitted provided that the following
-// conditions are met:
-// 
-//   1. Redistributions of source code must retain the above
-//      copyright notice, this list of conditions and the following
-//      disclaimer.
-// 
-//   2. Redistributions in binary form must reproduce the above
-//      copyright notice, this list of conditions and the following
-//      disclaimer in the documentation and/or other materials
-//      provided with the distribution.
-// 
-// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
-// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
-// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-// 
-// The views and conclusions contained in the software and
-// documentation are those of the authors and should not be
-// interpreted as representing official policies, either expressed
-// or implied, of GRNET S.A.
-// </copyright>
-// -----------------------------------------------------------------------
-
-using System.ComponentModel.Composition;
-using System.Configuration;
-using System.Dynamic;
-using Pithos.Client.WPF.Properties;
-using Pithos.Interfaces;
-
-namespace Pithos.Client.WPF.Configuration
-{
-    using System;
-    using System.Collections.Generic;
-    using System.Linq;
-    using System.Text;
-
-    [Export(typeof(IPithosSettings))]
-    [Export]
-    public class PithosSettings :  IPithosSettings
-    {
-        private readonly Settings _settings = Settings.Default;
-
-        public PithosSettings()
-        {
-                _settings.Upgrade();
-        }
-
-        public bool UseDefaultProxy
-        {
-            get { return _settings.UseDefaultProxy; }
-            set { _settings.UseDefaultProxy = value; }
-        }
-
-        public bool UseManualProxy
-        {
-            get { return _settings.UseManualProxy; }
-            set { _settings.UseManualProxy = value; }
-        }
-
-        public bool UseNoProxy
-        {
-            get { return _settings.UseNoProxy; }
-            set { _settings.UseNoProxy = value; }
-        }
-
-        public string PithosPath
-        {
-            get { return _settings.PithosPath; }
-            set { _settings.PithosPath = value; }
-        }
-
-      /*  public string PithosSite
-        {
-            get { return _settings.PithosSite; }
-        }*/
-
-        public string PithosLoginUrl
-        {
-            get { return _settings.PithosLoginUrl; }
-        }
-
-        public string IconsPath
-        {
-            get { return _settings.IconPath; }
-            set { _settings.IconPath = value; }
-        }
-
-        public string UserName
-        {
-            get { return _settings.UserName; }
-            set { _settings.UserName = value; }
-        }
-
-        public string ApiKey
-        {
-            get { return _settings.ApiKey; }
-            set { _settings.ApiKey = value; }
-        }
-
-        public AccountsCollection Accounts
-        {
-            get
-            {
-                if (_settings.Accounts==null)
-                    _settings.Accounts=new AccountsCollection();
-                return _settings.Accounts;
-            }
-            set { _settings.Accounts = value; }
-        }
-
-        public string ProxyServer
-        {
-            get { return _settings.ProxyServer; }
-            set { _settings.ProxyServer = value; }
-        }
-
-        public int ProxyPort
-        {
-            get { return _settings.ProxyPort; }
-            set { _settings.ProxyPort = value; }
-        }
-
-        public string ProxyUsername
-        {
-            get { return _settings.ProxyUsername; }
-            set { _settings.ProxyUsername = value; }
-        }
-
-
-        public string ProxyPassword
-        {
-            get { return _settings.ProxyPassword; }
-            set { _settings.ProxyPassword = value; }
-        }
-
-        public string ProxyDomain
-        {
-            get { return _settings.ProxyDomain; }
-            set { _settings.ProxyDomain = value; }
-        }
-
-        public bool ProxyAuthentication
-        {
-
-            get { return _settings.ProxyAuthentication; }
-            set { _settings.ProxyAuthentication = value; }
-        }
-
-        
-        
-        public bool ExtensionsActivated
-        {
-
-            get { return _settings.ExtensionsActivated; }
-            set { _settings.ExtensionsActivated = value; }
-        }
-
-        public bool ShowDesktopNotifications
-        {
-            get { return _settings.ShowDesktopNotifications; }
-            set { _settings.ShowDesktopNotifications = value; }
-        }
-
-
-        public int PollingInterval
-        {
-            get { return _settings.PollingInterval; }
-            set
-            {
-                if (value <= 0)
-                    throw new ArgumentOutOfRangeException();
-                _settings.PollingInterval = value;
-            }
-        }
-
-        public bool StartOnSystemStartup
-        {
-            get { return _settings.StartOnSystemStartup; }
-            set
-            {
-                _settings.StartOnSystemStartup = value;
-            }
-        }
-
-        public byte HashingParallelism
-        {
-            get { return _settings.HashingParallelism; }
-            set { _settings.HashingParallelism = value; }
-        }
-
-        public void Save()
-        {
-            _settings.Save();
-            Proxy.SetFromSettings(this);
-        }
-
-        public void Reload()
-        {
-            _settings.Reload();
-        }
-    }
-}
+#region\r
+/* -----------------------------------------------------------------------\r
+ * <copyright file="PithosSettings.cs" company="GRNet">\r
+ * \r
+ * Copyright 2011-2012 GRNET S.A. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or\r
+ * without modification, are permitted provided that the following\r
+ * conditions are met:\r
+ *\r
+ *   1. Redistributions of source code must retain the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer.\r
+ *\r
+ *   2. Redistributions in binary form must reproduce the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer in the documentation and/or other materials\r
+ *      provided with the distribution.\r
+ *\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR\r
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\r
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * The views and conclusions contained in the software and\r
+ * documentation are those of the authors and should not be\r
+ * interpreted as representing official policies, either expressed\r
+ * or implied, of GRNET S.A.\r
+ * </copyright>\r
+ * -----------------------------------------------------------------------\r
+ */\r
+#endregion\r
+using System.ComponentModel.Composition;\r
+using System.Diagnostics;\r
+using System.IO;\r
+using System.Linq;\r
+using Pithos.Client.WPF.Properties;\r
+using Pithos.Interfaces;\r
+using log4net.Appender;\r
+using log4net.Core;\r
+using log4net.Repository.Hierarchy;\r
+\r
+namespace Pithos.Client.WPF.Configuration\r
+{\r
+    using System;\r
+\r
+    [Export(typeof(IPithosSettings))]\r
+    [Export]\r
+    public class PithosSettings :  IPithosSettings\r
+    {\r
+        private readonly Settings _settings = Settings.Default;\r
+\r
+        public PithosSettings()\r
+        {\r
+            //Settings should already be upgraded by the time we reach this point\r
+            Debug.Assert(!_settings.MustUpgrade);\r
+            //_settings.Upgrade();\r
+        }\r
+\r
+        public bool UseDefaultProxy\r
+        {\r
+            get { return _settings.UseDefaultProxy; }\r
+            set { _settings.UseDefaultProxy = value; }\r
+        }\r
+\r
+        public bool UseManualProxy\r
+        {\r
+            get { return _settings.UseManualProxy; }\r
+            set { _settings.UseManualProxy = value; }\r
+        }\r
+\r
+        public bool UseNoProxy\r
+        {\r
+            get { return _settings.UseNoProxy; }\r
+            set { _settings.UseNoProxy = value; }\r
+        }\r
+\r
+        public string PithosPath\r
+        {\r
+            get { return _settings.PithosPath; }\r
+            set { _settings.PithosPath = value; }\r
+        }\r
+\r
+      /*  public string PithosSite\r
+        {\r
+            get { return _settings.PithosSite; }\r
+        }*/\r
+\r
+\r
+        public string IconsPath\r
+        {\r
+            get { return _settings.IconPath; }\r
+            set { _settings.IconPath = value; }\r
+        }\r
+\r
+        public string UserName\r
+        {\r
+            get { return _settings.UserName; }\r
+            set { _settings.UserName = value; }\r
+        }\r
+\r
+        public string ApiKey\r
+        {\r
+            get { return _settings.ApiKey; }\r
+            set { _settings.ApiKey = value; }\r
+        }\r
+\r
+        public AccountsCollection Accounts\r
+        {\r
+            get { return _settings.Accounts ?? (_settings.Accounts = new AccountsCollection()); }\r
+            set { _settings.Accounts = value; }\r
+        }\r
+\r
+        public string ProxyServer\r
+        {\r
+            get { return _settings.ProxyServer; }\r
+            set { _settings.ProxyServer = value; }\r
+        }\r
+\r
+        public int ProxyPort\r
+        {\r
+            get { return _settings.ProxyPort; }\r
+            set { _settings.ProxyPort = value; }\r
+        }\r
+\r
+        public string ProxyUsername\r
+        {\r
+            get { return _settings.ProxyUsername; }\r
+            set { _settings.ProxyUsername = value; }\r
+        }\r
+\r
+\r
+        public string ProxyPassword\r
+        {\r
+            get { return _settings.ProxyPassword; }\r
+            set { _settings.ProxyPassword = value; }\r
+        }\r
+\r
+        public string ProxyDomain\r
+        {\r
+            get { return _settings.ProxyDomain; }\r
+            set { _settings.ProxyDomain = value; }\r
+        }\r
+\r
+        public bool ProxyAuthentication\r
+        {\r
+\r
+            get { return _settings.ProxyAuthentication; }\r
+            set { _settings.ProxyAuthentication = value; }\r
+        }\r
+\r
+        \r
+        \r
+        public bool ExtensionsActivated\r
+        {\r
+\r
+            get { return _settings.ExtensionsActivated; }\r
+            set { _settings.ExtensionsActivated = value; }\r
+        }\r
+\r
+        public bool ShowDesktopNotifications\r
+        {\r
+            get { return _settings.ShowDesktopNotifications; }\r
+            set { _settings.ShowDesktopNotifications = value; }\r
+        }\r
+\r
+\r
+        public int PollingInterval\r
+        {\r
+            get { return _settings.PollingInterval; }\r
+            set\r
+            {\r
+                if (value <= 0)\r
+                    throw new ArgumentOutOfRangeException();\r
+                _settings.PollingInterval = value;\r
+            }\r
+        }\r
+\r
+        public TimeSpan StartupDelay\r
+        {\r
+            get { return _settings.StartupDelay; }\r
+            set\r
+            {\r
+                if (value < TimeSpan.Zero)\r
+                    throw new ArgumentOutOfRangeException();\r
+                _settings.StartupDelay = value;\r
+            }\r
+        }\r
+\r
+\r
+        public bool StartOnSystemStartup\r
+        {\r
+            get { return _settings.StartOnSystemStartup; }\r
+            set\r
+            {\r
+                _settings.StartOnSystemStartup = value;\r
+            }\r
+        }\r
+\r
+        public byte HashingParallelism\r
+        {\r
+            get { return _settings.HashingParallelism; }\r
+            set { _settings.HashingParallelism = value; }\r
+        }\r
+\r
+        public string UpdateUrl\r
+        {\r
+            get { return _settings.UpdateUrl; }\r
+        }\r
+\r
+        public bool UpdateDiagnostics\r
+        {\r
+            get { return _settings.UpdateDiagnostics; }\r
+        }\r
+\r
+        public TimeSpan UpdateCheckInterval\r
+        {\r
+            get { return _settings.UpdateCheckInterval; }\r
+        }\r
+\r
+        public TimeSpan FileIdleTimeout\r
+        {\r
+            get { return _settings.FileIdleTimeout; }\r
+        }\r
+\r
+        public bool UpdateForceCheck\r
+        {\r
+            get { return _settings.UpdateForceCheck; }\r
+        }\r
+\r
+        public bool DebugLoggingEnabled\r
+        {\r
+            get { return _settings.DebugLoggingEnabled; }\r
+            set\r
+            {\r
+                _settings.DebugLoggingEnabled = value;\r
+\r
+                SetDebugLevel();\r
+            }\r
+        }\r
+\r
+        public bool IgnoreCertificateErrors\r
+        {\r
+            get { return _settings.IgnoreCertificateErrors; }\r
+            set\r
+            {\r
+                _settings.IgnoreCertificateErrors = value;\r
+\r
+            }\r
+        }\r
+\r
+        private static void SetDebugLevel()\r
+        {\r
+            var loggerRepository = (Hierarchy) log4net.LogManager.GetRepository();\r
+\r
+            var appenders = loggerRepository.GetAppenders();\r
+\r
+            var debugAppender = appenders.OfType<RollingFileAppender>()\r
+                .FirstOrDefault(a => a.Name == "DebugFileAppender");\r
+            if (debugAppender != null)\r
+            {\r
+                var pithosDataPath = PithosDataPath;\r
+                debugAppender.File = Path.Combine(pithosDataPath, "debuglog.xml");\r
+                debugAppender.Threshold = !Settings.Default.DebugLoggingEnabled ? Level.Off : Level.All;\r
+                debugAppender.ActivateOptions();\r
+            }\r
+        }\r
+\r
+        public static string PithosDataPath\r
+        {\r
+            get\r
+            {\r
+                var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);\r
+                var pithosDataPath = Path.Combine(appDataPath, "GRNET\\PITHOS");\r
+                return pithosDataPath;\r
+            }\r
+        }\r
+\r
+        public void Save()\r
+        {\r
+            LockedSave();\r
+            Proxy.SetFromSettings(this);\r
+        }\r
+\r
+        private void LockedSave()\r
+        {\r
+            lock (this)\r
+            {\r
+                _settings.Save();\r
+            }\r
+        }\r
+\r
+        public void Reload()\r
+        {\r
+            _settings.Reload();\r
+        }\r
+\r
+        public void Reset()\r
+        {\r
+            _settings.Reset();\r
+            LockedSave();\r
+        }\r
+    }\r
+}\r