OSDN Git Service

na-get-lig,AppliStation-GUI,プロキシ設定機能を設定ダイアログに追加
[applistation/AppliStation.git] / na-get-lib / NaGet / Env.cs
1 using System;\r
2 using System.IO;\r
3 using System.Net;\r
4 \r
5 namespace NaGet\r
6 {\r
7         /// <summary>\r
8         /// 環境変数などを取り扱うクラス\r
9         /// </summary>\r
10         public sealed class Env\r
11         {               \r
12                 /// <summary>\r
13                 /// 呼び出し禁止\r
14                 /// </summary>\r
15                 private Env()\r
16                 {\r
17                 }\r
18                 \r
19                 #region pref.xml関連\r
20                 \r
21                 /// <summary>\r
22                 /// 設定を格納\r
23                 /// </summary>\r
24                 private static NaGetLibPref pref;\r
25                 \r
26                 /// <summary>\r
27                 /// 設定(のクローンオブジェクト)を返す。\r
28                 /// </summary>\r
29                 public static NaGetLibPref Pref {\r
30                         get {\r
31                                 NaGetLibPref prefCopied = new NaGetLibPref();\r
32                                 \r
33                                 if (pref == null) {\r
34                                         LoadPref();\r
35                                 }\r
36                                 NaGet.Utils.FieldCopy(pref, ref prefCopied);\r
37                                 \r
38                                 return prefCopied;\r
39                         }\r
40                 }\r
41                 \r
42                 /// <summary>\r
43                 /// 設定ファイルのある場所を取得する\r
44                 /// </summary>\r
45                 public static string PrefPath {\r
46                         get {\r
47                                 return Path.Combine(Environment.CurrentDirectory, "pref.xml");\r
48                         }\r
49                 }\r
50                 \r
51                 /// <summary>\r
52                 /// 設定ファイルを読み込む。または再読み込みする。\r
53                 /// </summary>\r
54                 public static void LoadPref()\r
55                 {\r
56                         string path = PrefPath;\r
57                         try {\r
58                                 if (! File.Exists(path)) throw new FileNotFoundException(string.Empty, path);\r
59                                 pref = NaGet.Utils.GetDeserializedObject<NaGetLibPref>(path);\r
60                         } catch(Exception) {\r
61                                 pref = new NaGetLibPref();\r
62                         }\r
63                 }\r
64                 \r
65                 \r
66                 #endregion\r
67 \r
68                 #region ファイルパス\r
69                 \r
70                 /// <summary>           \r
71                 /// ファイルリスト提供サーバのリストファイル        \r
72                 /// </summary>\r
73                 [Obsolete]\r
74                 public static readonly string ProviderListFile = "provider.list.txt";\r
75                 \r
76                 /// <summary>\r
77                 /// ファイルリスト提供レポジトリリストのファイル\r
78                 /// </summary>\r
79                 public static readonly string RepositoriesListFile = "repos.list.xml";\r
80 \r
81                 /// <summary>\r
82                 /// ファイルリストから読み込まれたパッケージのリストファイル\r
83                 /// </summary>\r
84                 public static readonly string PackageListFile = "packages.list.xml";\r
85 \r
86                 /// <summary>\r
87                 /// 本ソフトウェアを介してインストールされたパッケージのリストファイル\r
88                 /// </summary>\r
89                 public static readonly string ArchiveInstalledPackageListFile = "packages.envinstalled.xml";\r
90 \r
91                 /// <summary>\r
92                 /// システムから検出されたパッケージのリストファイル\r
93                 /// </summary>\r
94                 public static readonly string SystemInstalledPackageListFile = "packages.sysinstalled.xml";\r
95                 \r
96                 /// <summary>\r
97                 /// インストールログファイル\r
98                 /// </summary>\r
99                 public static readonly string SystemInstalledPackageLogFile = "packages.sysinstalled.log.xml";\r
100                 \r
101                 /// <summary>\r
102                 /// アプリケーションデータを保存するフォルダのパス\r
103                 /// </summary>\r
104                 public static string AppDataFolderPath\r
105                 {\r
106                         get {\r
107                                 if (pref == null) LoadPref();\r
108                                 \r
109                                 if (! string.IsNullOrEmpty(pref.AppDataFolder)) {\r
110                                         return pref.AppDataFolder;\r
111                                 }\r
112                                 \r
113                                 return Environment.CurrentDirectory;\r
114                         }\r
115                 }\r
116 \r
117                 /// <summary>\r
118                 /// インストーラの一時置き場の親ディレクトリ\r
119                 /// </summary>\r
120                 public static string ArchiveFolderPath\r
121                 {\r
122                         get { return Path.Combine(AppDataFolderPath, "Cache"); }\r
123                 }\r
124                 \r
125                 /// <summary>\r
126                 /// アーカイバ方式のパッケージのインストール先フォルダ\r
127                 /// </summary>\r
128                 public static string ArchiveProgramFiles {\r
129                         get {\r
130                                 return Path.Combine(AppDataFolderPath, "progs");\r
131                         }\r
132                 }\r
133                 \r
134                 /// <summary>\r
135                 /// アーカイバ方式のパッケージのプログラムグループフォルダ\r
136                 /// </summary>\r
137                 public static string ArchiveProgramGroup {\r
138                         get {\r
139                                 return Path.Combine(AppDataFolderPath, "programs");\r
140                         }\r
141                 }\r
142 \r
143                 /// <summary>\r
144                 /// アーカイバ方式のパッケージのSystem32のフォルダ\r
145                 /// </summary>\r
146                 public static string ArchiveSystem32 {\r
147                         get {\r
148                                 return Path.Combine(ArchiveProgramFiles, ".system32");\r
149                         }\r
150                 }\r
151                 \r
152                 #endregion\r
153                 \r
154                 #region ネットワーク\r
155                 \r
156                 /// <summary>\r
157                 /// ウェブアクセスのためのプロキシを取得する。\r
158                 /// </summary>\r
159                 /// <returns>プロキシ</returns>\r
160                 public static IWebProxy WebProxy\r
161                 {\r
162                         get {\r
163                                 if (pref == null) LoadPref();\r
164                                 \r
165                                 if (string.IsNullOrEmpty(pref.ProxyAddress)) {\r
166                                         // 設定されていないときはシステムのデフォルトを使う\r
167                                         return WebRequest.GetSystemWebProxy();\r
168                                 } else if (pref.ProxyAddress == "-") {\r
169                                         // "-"のとき直接接続\r
170                                         return null;\r
171                                 } else {\r
172                                         // host:portが設定されているならば、それをもとに設定\r
173                                         return new WebProxy(pref.ProxyAddress);\r
174                                 }\r
175                         }\r
176                 }\r
177                 \r
178                 #endregion\r
179         }\r
180 }\r