using System;
using System.IO;
using System.Net;
namespace NaGet
{
///
/// 環境変数などを取り扱うクラス
///
public sealed class Env
{
///
/// 呼び出し禁止
///
private Env()
{
}
#region pref.xml関連
///
/// 設定を格納
///
private static NaGetLibPref pref;
///
/// 設定(のクローンオブジェクト)を返す。
///
public static NaGetLibPref Pref {
get {
NaGetLibPref prefCopied = new NaGetLibPref();
if (pref == null) {
LoadPref();
}
NaGet.Utils.FieldCopy(pref, ref prefCopied);
return prefCopied;
}
}
///
/// 設定ファイルのある場所を取得する
///
public static string PrefPath {
get {
return Path.Combine(Environment.CurrentDirectory, "pref.xml");
}
}
///
/// 設定ファイルを読み込む。または再読み込みする。
///
public static void LoadPref()
{
string path = PrefPath;
try {
if (! File.Exists(path)) throw new FileNotFoundException(string.Empty, path);
pref = NaGet.Utils.GetDeserializedObject(path);
} catch(Exception) {
pref = new NaGetLibPref();
}
}
#endregion
#region ファイルパス
///
/// ファイルリスト提供サーバのリストファイル
///
[Obsolete]
public static readonly string ProviderListFile = "provider.list.txt";
///
/// ファイルリスト提供レポジトリリストのファイル
///
public static readonly string RepositoriesListFile = "repos.list.xml";
///
/// ファイルリストから読み込まれたパッケージのリストファイル
///
public static readonly string PackageListFile = "packages.list.xml";
///
/// 本ソフトウェアを介してインストールされたパッケージのリストファイル
///
public static readonly string ArchiveInstalledPackageListFile = "packages.envinstalled.xml";
///
/// システムから検出されたパッケージのリストファイル
///
public static readonly string SystemInstalledPackageListFile = "packages.sysinstalled.xml";
///
/// インストールログファイル
///
public static readonly string SystemInstalledPackageLogFile = "packages.sysinstalled.log.xml";
///
/// アプリケーションデータを保存するフォルダのパス
///
public static string AppDataFolderPath
{
get {
if (pref == null) LoadPref();
if (! string.IsNullOrEmpty(pref.AppDataFolder)) {
return pref.AppDataFolder;
}
return Environment.CurrentDirectory;
}
}
///
/// インストーラの一時置き場の親ディレクトリ
///
public static string ArchiveFolderPath
{
get { return Path.Combine(AppDataFolderPath, "Cache"); }
}
///
/// アーカイバ方式のパッケージのインストール先フォルダ
///
public static string ArchiveProgramFiles {
get {
return Path.Combine(AppDataFolderPath, "progs");
}
}
///
/// アーカイバ方式のパッケージのプログラムグループフォルダ
///
public static string ArchiveProgramGroup {
get {
return Path.Combine(AppDataFolderPath, "programs");
}
}
///
/// アーカイバ方式のパッケージのSystem32のフォルダ
///
public static string ArchiveSystem32 {
get {
return Path.Combine(ArchiveProgramFiles, ".system32");
}
}
#endregion
#region ネットワーク
///
/// ウェブアクセスのためのプロキシを取得する。
///
/// プロキシ
public static IWebProxy WebProxy
{
get {
if (pref == null) LoadPref();
if (string.IsNullOrEmpty(pref.ProxyAddress)) {
// 設定されていないときはシステムのデフォルトを使う
return WebRequest.GetSystemWebProxy();
} else if (pref.ProxyAddress == "-") {
// "-"のとき直接接続
return null;
} else {
// host:portが設定されているならば、それをもとに設定
return new WebProxy(pref.ProxyAddress);
}
}
}
#endregion
}
}