OSDN Git Service

ed39c9d6e3b160886f3fea1bda27b982b6543b75
[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                 private static void loadPref()\r
30                 {\r
31                         string path = Path.Combine(Environment.CurrentDirectory, "pref.xml");\r
32                         try {\r
33                                 if (! File.Exists(path)) throw new FileNotFoundException(string.Empty, path);\r
34                                 pref = NaGet.Utils.GetDeserializedObject<NaGetLibPref>(path);\r
35                         } catch(Exception) {\r
36                                 pref = new NaGetLibPref();\r
37                         }\r
38                 }\r
39                 \r
40                 #endregion\r
41 \r
42                 #region ファイルパス\r
43                 \r
44                 /// <summary>           \r
45                 /// ファイルリスト提供サーバのリストファイル        \r
46                 /// </summary>\r
47                 [Obsolete]\r
48                 public static readonly string ProviderListFile = "provider.list.txt";\r
49                 \r
50                 /// <summary>\r
51                 /// ファイルリスト提供レポジトリリストのファイル\r
52                 /// </summary>\r
53                 public static readonly string RepositoriesListFile = "repos.list.xml";\r
54 \r
55                 /// <summary>\r
56                 /// ファイルリストから読み込まれたパッケージのリストファイル\r
57                 /// </summary>\r
58                 public static readonly string PackageListFile = "packages.list.xml";\r
59 \r
60                 /// <summary>\r
61                 /// 本ソフトウェアを介してインストールされたパッケージのリストファイル\r
62                 /// </summary>\r
63                 public static readonly string ArchiveInstalledPackageListFile = "packages.envinstalled.xml";\r
64 \r
65                 /// <summary>\r
66                 /// システムから検出されたパッケージのリストファイル\r
67                 /// </summary>\r
68                 public static readonly string SystemInstalledPackageListFile = "packages.sysinstalled.xml";\r
69                 \r
70                 /// <summary>\r
71                 /// インストールログファイル\r
72                 /// </summary>\r
73                 public static readonly string SystemInstalledPackageLogFile = "packages.sysinstalled.log.xml";\r
74                 \r
75                 /// <summary>\r
76                 /// アプリケーションデータを保存するフォルダのパス\r
77                 /// </summary>\r
78                 public static string AppDataFolderPath\r
79                 {\r
80                         get {\r
81                                 if (pref == null) loadPref();\r
82                                 \r
83                                 if (! string.IsNullOrEmpty(pref.AppDataFolder)) {\r
84                                         return pref.AppDataFolder;\r
85                                 }\r
86                                 \r
87                                 return Environment.CurrentDirectory;\r
88                         }\r
89                 }\r
90 \r
91                 /// <summary>\r
92                 /// インストーラの一時置き場の親ディレクトリ\r
93                 /// </summary>\r
94                 public static string ArchiveFolderPath\r
95                 {\r
96                         get { return Path.Combine(AppDataFolderPath, "Cache"); }\r
97                 }\r
98                 \r
99                 /// <summary>\r
100                 /// アーカイバ方式のパッケージのインストール先フォルダ\r
101                 /// </summary>\r
102                 public static string ArchiveProgramFiles {\r
103                         get {\r
104                                 return Path.Combine(AppDataFolderPath, "progs");\r
105                         }\r
106                 }\r
107                 \r
108                 /// <summary>\r
109                 /// アーカイバ方式のパッケージのプログラムグループフォルダ\r
110                 /// </summary>\r
111                 public static string ArchiveProgramGroup {\r
112                         get {\r
113                                 return Path.Combine(AppDataFolderPath, "programs");\r
114                         }\r
115                 }\r
116 \r
117                 /// <summary>\r
118                 /// アーカイバ方式のパッケージのSystem32のフォルダ\r
119                 /// </summary>\r
120                 public static string ArchiveSystem32 {\r
121                         get {\r
122                                 return Path.Combine(ArchiveProgramFiles, ".system32");\r
123                         }\r
124                 }\r
125                 \r
126                 #endregion\r
127                 \r
128                 #region ネットワーク\r
129                 \r
130                 /// <summary>\r
131                 /// ウェブアクセスのためのプロキシを取得する。\r
132                 /// </summary>\r
133                 /// <returns>プロキシ</returns>\r
134                 public static IWebProxy WebProxy\r
135                 {\r
136                         get {\r
137                                 if (pref == null) loadPref();\r
138                                 \r
139                                 if (string.IsNullOrEmpty(pref.ProxyAddress)) {\r
140                                         // 設定されていないときはシステムのデフォルトを使う\r
141                                         return WebRequest.GetSystemWebProxy();\r
142                                 } else if (pref.ProxyAddress == "-") {\r
143                                         // "-"のとき直接接続\r
144                                         return null;\r
145                                 } else {\r
146                                         // host:portが設定されているならば、それをもとに設定\r
147                                         return new WebProxy(pref.ProxyAddress);\r
148                                 }\r
149                         }\r
150                 }\r
151                 \r
152                 #endregion\r
153         }\r
154 }\r