OSDN Git Service

na-get-lib,all-get,インストール除外リストの設定を追加。all-get.exeのcheckupgrade表示への反映
[applistation/AppliStation.git] / na-get-lib / NaGet / Env.cs
index 17a98c3..f2fc17b 100644 (file)
@@ -1,5 +1,6 @@
 using System;\r
 using System.IO;\r
+using System.Net;\r
 \r
 namespace NaGet\r
 {\r
@@ -7,22 +8,72 @@ namespace NaGet
        /// 環境変数などを取り扱うクラス\r
        /// </summary>\r
        public sealed class Env\r
-       {\r
+       {               \r
                /// <summary>\r
                /// 呼び出し禁止\r
                /// </summary>\r
                private Env()\r
                {\r
                }\r
+               \r
+               #region pref.xml関連\r
+               \r
+               /// <summary>\r
+               /// 設定を格納\r
+               /// </summary>\r
+               private static NaGetLibPref pref;\r
+               \r
+               /// <summary>\r
+               /// 設定(のクローンオブジェクト)を返す。\r
+               /// </summary>\r
+               public static NaGetLibPref Pref {\r
+                       get {\r
+                               NaGetLibPref prefCopied = new NaGetLibPref();\r
+                               \r
+                               if (pref == null) {\r
+                                       LoadPref();\r
+                               }\r
+                               NaGet.Utils.FieldCopy(pref, ref prefCopied);\r
+                               \r
+                               return prefCopied;\r
+                       }\r
+               }\r
+               \r
+               /// <summary>\r
+               /// 設定ファイルのある場所を取得する\r
+               /// </summary>\r
+               public static string PrefPath {\r
+                       get {\r
+                               return Path.Combine(Environment.CurrentDirectory, "pref.xml");\r
+                       }\r
+               }\r
+               \r
+               /// <summary>\r
+               /// 設定ファイルを読み込む。または再読み込みする。\r
+               /// </summary>\r
+               public static void LoadPref()\r
+               {\r
+                       string path = PrefPath;\r
+                       try {\r
+                               if (! File.Exists(path)) throw new FileNotFoundException(string.Empty, path);\r
+                               pref = NaGet.Utils.GetDeserializedObject<NaGetLibPref>(path);\r
+                       } catch(Exception) {\r
+                               pref = new NaGetLibPref();\r
+                       }\r
+               }\r
+               \r
+               \r
+               #endregion\r
 \r
+               #region ファイルパス\r
                \r
-               /// <summary>           \r
-               /// ã\83\95ã\82¡ã\82¤ã\83«ã\83ªã\82¹ã\83\88æ\8f\90ä¾\9bã\82µã\83¼ã\83\90ã\81®ã\83ªã\82¹ã\83\88ã\83\95ã\82¡ã\82¤ã\83«        \r
+               /// <summary>\r
+               /// ã\83\95ã\82¡ã\82¤ã\83«ã\83ªã\82¹ã\83\88æ\8f\90ä¾\9bã\83¬ã\83\9dã\82¸ã\83\88ã\83ªã\83ªã\82¹ã\83\88ã\81®ã\83\95ã\82¡ã\82¤ã\83«\r
                /// </summary>\r
-               public static readonly string ProviderListFile = "provider.list.txt";\r
+               public static readonly string RepositoriesListFile = "repos.list.xml";\r
 \r
                /// <summary>\r
-               /// ã\83\91ã\83\83ã\82±ã\83¼ã\82¸ã\83ªã\82¹ã\83\88ï¼\88ã\82­ã\83£ã\83\83ã\82·ã\83¥ï¼\89ç½®ã\81\8då ´ã\81®ã\83\91ã\82¹\r
+               /// ã\83\95ã\82¡ã\82¤ã\83«ã\83ªã\82¹ã\83\88ã\81\8bã\82\89読ã\81¿è¾¼ã\81¾ã\82\8cã\81\9fã\83\91ã\83\83ã\82±ã\83¼ã\82¸ã\81®ã\83ªã\82¹ã\83\88ã\83\95ã\82¡ã\82¤ã\83«\r
                /// </summary>\r
                public static readonly string PackageListFile = "packages.list.xml";\r
 \r
@@ -41,39 +92,41 @@ namespace NaGet
                /// </summary>\r
                public static readonly string SystemInstalledPackageLogFile = "packages.sysinstalled.log.xml";\r
                \r
-               private static string appDataFolderPath = null;\r
-               \r
                /// <summary>\r
-               /// アプリケーションデータを保存するフォルダのパス\r
+               /// ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\83\87ã\83¼ã\82¿ã\82\92ä¿\9då­\98ã\81\99ã\82\8bã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®ã\83\91ã\82¹\r
                /// </summary>\r
                public static string AppDataFolderPath\r
                {\r
                        get {\r
-                               if (appDataFolderPath == null) {\r
-//                                     string progFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);\r
-//                                     if (Path.GetDirectoryName(Environment.CurrentDirectory) == progFiles) {\r
-//                                             string appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);\r
-//                                             return Path.Combine(appData, "AppliStation");\r
-//                                     } else {\r
-                                               return Environment.CurrentDirectory;\r
-//                                     }\r
-                               } else {\r
-                                       return appDataFolderPath;\r
+                               if (pref == null) LoadPref();\r
+                               \r
+                               if (! string.IsNullOrEmpty(pref.AppDataFolder)) {\r
+                                       return pref.AppDataFolder;\r
                                }\r
+                               \r
+                               return Environment.CurrentDirectory;\r
                        }\r
-                       set { appDataFolderPath = value; }\r
                }\r
 \r
                /// <summary>\r
-               /// インストーラの一時置き場の親ディレクトリ\r
+               /// ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81®ä¸\80æ\99\82ç½®ã\81\8då ´ã\81®è¦ªã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ª\r
                /// </summary>\r
                public static string ArchiveFolderPath\r
                {\r
-                       get { return Path.Combine(AppDataFolderPath, "Cache"); }\r
+                       get {\r
+                               if (pref == null) LoadPref();\r
+\r
+                               if (! string.IsNullOrEmpty(pref.CacheFolder)) {\r
+                                       return pref.CacheFolder;\r
+                               }\r
+                               \r
+                               return Path.Combine(AppDataFolderPath, "Cache");\r
+                       \r
+                       }\r
                }\r
                \r
                /// <summary>\r
-               /// アーカイバ方式のパッケージのインストール先フォルダ\r
+               /// アーカイバ方式のパッケージのインストール先フォルダ\r
                /// </summary>\r
                public static string ArchiveProgramFiles {\r
                        get {\r
@@ -82,7 +135,7 @@ namespace NaGet
                }\r
                \r
                /// <summary>\r
-               /// アーカイバ方式のパッケージのプログラムグループフォルダ\r
+               /// アーカイバ方式のパッケージのプログラムグループフォルダ\r
                /// </summary>\r
                public static string ArchiveProgramGroup {\r
                        get {\r
@@ -91,12 +144,104 @@ namespace NaGet
                }\r
 \r
                /// <summary>\r
-               /// アーカイバ方式のパッケージのSystem32のフォルダ\r
+               /// アーカイバ方式のパッケージのSystem32のフォルダ\r
                /// </summary>\r
                public static string ArchiveSystem32 {\r
                        get {\r
                                return Path.Combine(ArchiveProgramFiles, ".system32");\r
                        }\r
                }\r
+               \r
+               #endregion\r
+               \r
+               #region ネットワーク\r
+               \r
+               /// <summary>\r
+               /// ウェブアクセスのためのプロキシを取得する。\r
+               /// </summary>\r
+               /// <returns>プロキシ</returns>\r
+               public static IWebProxy WebProxy\r
+               {\r
+                       get {\r
+                               if (pref == null) LoadPref();\r
+                               \r
+                               if (string.IsNullOrEmpty(pref.ProxyAddress)) {\r
+                                       // 設定されていないときはシステムのデフォルトを使う\r
+                                       return WebRequest.GetSystemWebProxy();\r
+                               } else if (pref.ProxyAddress == "-") {\r
+                                       // "-"のとき直接接続\r
+                                       return null;\r
+                               } else {\r
+                                       // host:portが設定されているならば、それをもとに設定\r
+                                       WebProxy proxy = new WebProxy(pref.ProxyAddress);\r
+                                       \r
+                                       // 認証プロキシの場合、認証情報を付加する\r
+                                       try {\r
+                                               Uri uri = new Uri(pref.ProxyAddress);\r
+                                               if (! string.IsNullOrEmpty(uri.UserInfo)) {\r
+                                                       int pos = uri.UserInfo.IndexOf(':');\r
+                                                       if (pos >= 0) {\r
+                                                               proxy.Credentials = new NetworkCredential(\r
+                                                                       uri.UserInfo.Substring(0, pos),\r
+                                                                       uri.UserInfo.Substring(pos+1)\r
+                                                               );\r
+                                                       }\r
+                                               }\r
+                                       } catch (Exception) {\r
+                                       }\r
+                                       \r
+                                       return proxy;\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               #endregion\r
+               \r
+               #region インストールプロセス\r
+               \r
+               /// <summary>\r
+               /// インストーラーをウイルススキャンするか?\r
+               /// </summary>\r
+               public static bool EnableScanInstallerFile {\r
+                       get {\r
+                               if (pref == null) LoadPref();\r
+                               return pref.EnableScanInstallerFile;\r
+                       }\r
+                       set {\r
+                               if (pref == null) LoadPref();\r
+                               pref.EnableScanInstallerFile = value;\r
+                       }\r
+               }\r
+\r
+               /// <summary>\r
+               /// インストールプロセスをバックグラウンドで行うか?\r
+               /// </summary>\r
+               public static bool InstallProcessOnBackground {\r
+                       get {\r
+                               if (pref == null) LoadPref();\r
+                               return pref.InstallOnBackground;\r
+                       }\r
+                       set {\r
+                               if (pref == null) LoadPref();\r
+                               pref.EnableScanInstallerFile = value;\r
+                       }\r
+               }\r
+               \r
+               /// <summary>\r
+               /// アップデートから除外するパッケージの名前\r
+               /// </summary>\r
+               public static string[] ExcludeUpdatePackageNames {\r
+                       get {\r
+                               if (pref == null) LoadPref();\r
+                               return pref.ExcludeUpdatePackageNames;\r
+                       }\r
+                       set {\r
+                               if (pref == null) LoadPref();\r
+                               pref.ExcludeUpdatePackageNames = value;\r
+                       }\r
+               }\r
+               \r
+               #endregion\r
+               \r
        }\r
 }\r