using System;\r
using System.IO;\r
+using System.Net;\r
\r
namespace NaGet\r
{\r
/// 環境変数などを取り扱うクラス\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
/// ファイルリスト提供サーバのリストファイル \r
/// </summary>\r
+ [Obsolete]\r
public static readonly string ProviderListFile = "provider.list.txt";\r
+ \r
+ /// <summary>\r
+ /// ファイルリスト提供レポジトリリストのファイル\r
+ /// </summary>\r
+ public static readonly string RepositoriesListFile = "repos.list.xml";\r
\r
/// <summary>\r
/// ファイルリストから読み込まれたパッケージのリストファイル\r
/// </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
}\r
\r
/// <summary>\r
- /// アーカイバ方式のパッケージのプログラムグループフォルダ\r
+ /// アーカイバ方式のパッケージのプログラムグループフォルダー\r
/// </summary>\r
public static string ArchiveProgramGroup {\r
get {\r
}\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
+ return new WebProxy(pref.ProxyAddress);\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
+ \r
+ #endregion\r
+ \r
}\r
}\r