3 using NaGet.Packages;
\r
4 using NaGet.Packages.Install;
\r
6 using NaGet.SubCommands;
\r
8 namespace NaGet.SubCommands
\r
10 public class NaGetUpdate : NaGetTaskSet
\r
12 private ProviderList providerList;
\r
14 private PackageListsManager pkgListMan;
\r
16 private bool downloadPackageLists = false;
\r
18 private bool packageListsDownloaded = true;
\r
20 public Downloader Downloader; // TODO 参照をしてセットするように
\r
22 private int currentTaskSetIndex = -1;
\r
24 private bool done = false;
\r
26 public override int CurrentTaskSetIndex {
\r
27 get { return currentTaskSetIndex; }
\r
30 public override bool Cancelable {
\r
31 get { return ! packageListsDownloaded; }
\r
34 public NaGetUpdate(PackageListsManager pkgListMan)
\r
35 : this(pkgListMan, true)
\r
39 public NaGetUpdate(PackageListsManager pkgMan, bool downloadPackageListsFlag)
\r
41 pkgListMan = pkgMan;
\r
42 downloadPackageLists = downloadPackageListsFlag;
\r
44 System.Collections.Generic.List<string> taskSetNames = new System.Collections.Generic.List<string>();
\r
45 if (downloadPackageLists) {
\r
46 providerList = new ProviderList(NaGet.Env.ProviderListFile);
\r
48 foreach (string url in providerList.Urls) {
\r
49 taskSetNames.Add(string.Format("リスト取得: {0}", url));
\r
51 taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.PackageListFile));
\r
53 taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.ArchiveInstalledPackageListFile));
\r
54 taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.SystemInstalledPackageListFile));
\r
56 TaskSetNames = taskSetNames.ToArray();
\r
59 public override void Run()
\r
61 currentTaskSetIndex ++;
\r
62 RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "リスト更新処理開始");
\r
66 if (downloadPackageLists) {
\r
67 packageListsDownloaded = false;
\r
69 runDownloadPackages();
\r
70 } catch (NaGetTaskCanceledException) {
\r
71 RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "リストのダウンロード処理がキャンセルされました");
\r
72 } catch (System.Net.WebException e) {
\r
73 RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Message);
\r
74 if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {
\r
75 RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ネットワークに接続されていません。");
\r
77 RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");
\r
80 currentTaskSetIndex = providerList.Urls.Length + 1;
\r
82 packageListsDownloaded = true;
\r
90 RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);
\r
93 private void runDownloadPackages()
\r
95 PackageList<Package> avaiablePackageList = new PackageList<Package>();
\r
96 foreach(string provider in providerList.Urls) {
\r
97 RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
\r
99 string tmpfileName = Path.GetTempFileName();
\r
101 Downloader.Download(provider, tmpfileName);
\r
103 avaiablePackageList.AddPackages(NaGet.Utils.GetDeserializedObject<PackageList<Package>>(tmpfileName).Packages);
\r
105 if (File.Exists(tmpfileName)) {
\r
106 File.Delete(tmpfileName);
\r
110 currentTaskSetIndex ++;
\r
111 RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);
\r
114 RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
\r
115 pkgListMan.availablePkgList = avaiablePackageList; // Mediatorのリストを更新
\r
116 pkgListMan.SaveAvailablePackageList();
\r
117 currentTaskSetIndex ++;
\r
118 RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);
\r
121 private void runLocalUpdate()
\r
124 RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
\r
125 pkgListMan.DetectInstalledPkgs();
\r
126 pkgListMan.SaveInstalledPackageList();
\r
127 currentTaskSetIndex++;
\r
128 RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);
\r
130 // システムにインストールされているリストの更新
\r
131 RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);
\r
132 pkgListMan.DetectSystemInstalledPkgs();
\r
133 pkgListMan.SaveSystemInstalledPackageList();
\r
134 currentTaskSetIndex++;
\r
135 RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);
\r
138 public override bool Cancel()
\r
140 return Downloader.Cancel();
\r
143 public override bool Done {
\r
144 get { return done; }
\r