OSDN Git Service

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