}\r
\r
/// <summary>\r
- /// インストールログ\r
- /// </summary>\r
- private List<InstallationLog> systemInstalledLogList;\r
- \r
- /// <summary>\r
- /// 初期化をする。ファイル群を読み込んで更新がなされる。\r
+ /// 初期化をする。データの読み込みは明示的にLoadPackageLists()を呼び出さなければならない。\r
/// </summary>\r
public PackageListsManager()\r
{\r
- LoadPackageLists();\r
+ availablePkgList = new PackageList<Package>();\r
+ installedPkgList = new PackageList<InstalledPackage>();\r
+ systemInstalledPkgList = new PackageList<InstalledPackage>();\r
}\r
\r
#region ファイル読み書き\r
/// </summary>\r
public void LoadPackageLists()\r
{\r
- try {\r
- availablePkgList = NaGet.Utils.GetDeserializedObject<PackageList<Package>>(NaGet.Env.PackageListFile);\r
- } catch (FileNotFoundException) {\r
+ System.Xml.Serialization.XmlSerializer sr;\r
+ \r
+ // ソフトリストのパッケージリスト読み込み\r
+ sr = new System.Xml.Serialization.XmlSerializer(typeof(PackageList<Package>));\r
+ if (File.Exists(NaGet.Env.PackageListFile)) {\r
+ availablePkgList = (PackageList<Package>) NaGet.Utils.GetDeserializedObject(NaGet.Env.PackageListFile, sr);\r
+ } else {\r
availablePkgList = new PackageList<Package>();\r
}\r
\r
- try {\r
- installedPkgList = NaGet.Utils.GetDeserializedObject<PackageList<InstalledPackage>>(NaGet.Env.ArchiveInstalledPackageListFile);\r
- } catch (FileNotFoundException) {\r
+ sr = new System.Xml.Serialization.XmlSerializer(typeof(PackageList<InstalledPackage>));\r
+ if (File.Exists(NaGet.Env.ArchiveInstalledPackageListFile)) {\r
+ installedPkgList = (PackageList<InstalledPackage>) NaGet.Utils.GetDeserializedObject(NaGet.Env.ArchiveInstalledPackageListFile, sr);\r
+ } else {\r
installedPkgList = new PackageList<InstalledPackage>();\r
}\r
\r
- try {\r
- systemInstalledPkgList = NaGet.Utils.GetDeserializedObject<PackageList<InstalledPackage>>(NaGet.Env.SystemInstalledPackageListFile);\r
- } catch (FileNotFoundException) {\r
+ //sr = new System.Xml.Serialization.XmlSerializer(typeof(PackageList<InstalledPackage>));\r
+ if (File.Exists(NaGet.Env.SystemInstalledPackageListFile)) {\r
+ systemInstalledPkgList = (PackageList<InstalledPackage>) NaGet.Utils.GetDeserializedObject(NaGet.Env.SystemInstalledPackageListFile, sr);\r
+ } else {\r
systemInstalledPkgList = new PackageList<InstalledPackage>();\r
}\r
- \r
- \r
- systemInstalledLogList = new List<InstallationLog>();\r
- try {\r
- systemInstalledLogList.AddRange(\r
- NaGet.Utils.GetDeserializedObject<InstallationLog[]>(NaGet.Env.SystemInstalledPackageLogFile)\r
- );\r
- } catch (Exception) {\r
- // do nothing\r
- }\r
}\r
\r
/// <summary>\r
{\r
NaGet.Utils.PutSerializeObject(NaGet.Env.SystemInstalledPackageListFile, systemInstalledPkgList);\r
}\r
- /// <summary>\r
- /// インストールログ\r
- /// をファイルに書き込む。\r
- /// </summary>\r
- public void SaveSystemInstalledLogList()\r
- {\r
- NaGet.Utils.PutSerializeObject(NaGet.Env.SystemInstalledPackageLogFile, systemInstalledLogList);\r
- }\r
\r
/// <summary>\r
/// 本オブジェクトの保有しているパッケージ情報の全てをファイルに書き出す。\r
SaveAvailablePackageList();\r
SaveInstalledPackageList();\r
SaveSystemInstalledPackageList();\r
- \r
- SaveSystemInstalledLogList();\r
}\r
\r
#endregion\r
/// <summary>\r
/// 本ソフトウェアを介してインストールされたパッケージを検出する。\r
/// 具体的には<see cref="NaGet.Env.ArchiveProgramFiles" />\r
- /// で指定されたフォルダの下を見る。\r
+ /// ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\95ã\82©ã\83«ã\83\80ã\83¼ã\81®ä¸\8bã\82\92è¦\8bã\82\8bã\80\82\r
/// </summary>\r
public void DetectInstalledPkgs()\r
{\r
public void DetectSystemInstalledPkgs()\r
{\r
List<InstalledPackage> installedPkgList = new List<InstalledPackage>();\r
+ List<InstallationLog> systemInstalledLogList = getSystemInstallerLog();\r
+ \r
installedPkgList.AddRange(RegistriedUninstallers.DetectInstalledPackages(availablePkgList));\r
\r
// インストールのログを見て可能な限りパッケージ情報を補完する。\r
\r
// 補完したパッケージ情報への差し替え\r
UninstallInformation pkgUninstInfo = pkg.UninstallInfo;\r
- NaGet.Utils.FieldCopy((Package) log.Package, ref pkg);\r
+ NaGet.Utils.FieldCopy<Package,InstalledPackage>(log.Package, ref pkg);\r
pkg.UninstallInfo = pkgUninstInfo;\r
if (pkg.UninstallInfo.InstallDate == null) { // インストール日時の補完\r
pkg.UninstallInfo.InstallDate = log.Date;\r
}\r
}\r
}\r
- this.systemInstalledPkgList.Packages = installedPkgList.ToArray();\r
+ \r
+ this.systemInstalledPkgList.SetPackages(installedPkgList);\r
}\r
\r
#endregion\r
/// <returns>全てのインストールされたパッケージのイテレータ</returns>\r
public IEnumerable<InstalledPackage> GetAllInstalledPackages()\r
{\r
- return NaGet.Utils.MeargeEnumerable<InstalledPackage>(\r
+ return NaGet.Utils.MergeEnumerable<InstalledPackage>(\r
installedPkgList.GetEnumerator(),\r
systemInstalledPkgList.GetEnumerator()\r
);\r
/// <returns>パッケージのイテレータ</returns>\r
public IEnumerable<Package> GetAllPackages()\r
{\r
- return NaGet.Utils.MeargeEnumerable<Package>(\r
+ return NaGet.Utils.MergeEnumerable<Package>(\r
availablePkgList.GetEnumerator(),\r
(IEnumerator<Package>) GetAllInstalledPackages().GetEnumerator()\r
);\r
}\r
\r
+ #endregion\r
+ \r
+ #region インストールログ関連\r
+ \r
/// <summary>\r
- /// 与えられたパッケージ参照エントリに対応するパッケージはインストール済みか否かを返す\r
+ /// インストールログのリストを作って返す。\r
/// </summary>\r
- /// <seealso cref="PackageList.GetPackageForEntry(Entry)" />\r
- /// <param name="entry">パッケージ参照エントリ</param>\r
- /// <returns>対応するパッケージがインストール済みならば<code>true</code></returns>\r
- public bool IsInstalledFor(Entry entry)\r
+ /// <returns>インストールログのリスト</returns>\r
+ private static List<InstallationLog> getSystemInstallerLog()\r
{\r
- return (installedPkgList.GetPackageForEntry(entry) != null) ||\r
- (systemInstalledPkgList.GetPackageForEntry(entry) != null);\r
+ List<InstallationLog> systemInstalledLogList;\r
+ \r
+ try {\r
+ systemInstalledLogList = NaGet.Utils.GetDeserializedObject<List<InstallationLog>>(NaGet.Env.SystemInstalledPackageLogFile);\r
+ } catch (Exception) {\r
+ systemInstalledLogList = new List<InstallationLog>(); \r
+ }\r
+ \r
+ return systemInstalledLogList;\r
}\r
\r
- #endregion\r
- \r
- #region インストールログ関連\r
+ /// <summary>\r
+ /// インストールログを保存する。\r
+ /// </summary>\r
+ /// <param name="systemInstalledLogList">インストールログデータ</param>\r
+ private static void setSystemInstallerLog(List<InstallationLog> systemInstalledLogList)\r
+ {\r
+ NaGet.Utils.PutSerializeObject(NaGet.Env.SystemInstalledPackageLogFile, systemInstalledLogList);\r
+ }\r
\r
/// <summary>\r
/// 指定パッケージ名に対応するログを判定するPredicate\r
/// </summary>\r
/// <param name="pkg">判定する指定パッケージ</param>\r
/// <returns>Predicate</returns>\r
- private Predicate<InstallationLog> createPackageNamePredicator(Package pkg)\r
+ private static Predicate<InstallationLog> createPackageNamePredicator(Package pkg)\r
{\r
return delegate(InstallationLog log) {\r
return log.Package.Name == pkg.Name;\r
/// <param name="inst">書き込むインストール情報</param>\r
public void WriteInstallationLog(Installation inst)\r
{\r
+ List<InstallationLog> systemInstalledLogList = getSystemInstallerLog();\r
+ \r
// 重複は削除\r
systemInstalledLogList.RemoveAll(createPackageNamePredicator(inst.InstalledPackage));\r
\r
newLog.Package = inst.InstalledPackage;\r
\r
systemInstalledLogList.Add(newLog);\r
+ \r
+ setSystemInstallerLog(systemInstalledLogList);\r
}\r
\r
#endregion\r