using NaGet.Packages.Install;\r
using NaGet.Net;\r
using NaGet.SubCommands;\r
+using NaGet.Tasks;\r
\r
namespace NaGet.SubCommands\r
{\r
get {\r
if (downloader == null) {\r
downloader = new Downloader();\r
+ downloader.DownloadEventRaised += delegate(object sender, DownloadEventArgs e) {\r
+ if (e.DownloadTaskType == DownloadEventType.DOWNLOADING && e.ProgressPercent > 0) {\r
+ RaiseTaskSetEvent(TaskEventType.PING, string.Empty, GetProgressPercent(TaskEventType.PING, e.ProgressPercent));\r
+ }\r
+ };\r
}\r
return downloader;\r
}\r
pkgListMan = pkgMan;\r
downloadPackageLists = downloadPackageListsFlag;\r
\r
- System.Collections.Generic.List<string> taskSetNames = new System.Collections.Generic.List<string>();\r
+ taskSetNames = new System.Collections.Generic.List<string>();\r
if (downloadPackageLists) {\r
- if ((! File.Exists(NaGet.Env.RepositoriesListFile)) && File.Exists(NaGet.Env.ProviderListFile)) {\r
- // repos.list.xmlがなくてprovider.list.txtがあるとき、マイグレートする。\r
- repoList = RepositoriesList.MigrateFromProviderListTxt(NaGet.Env.ProviderListFile);\r
- NaGet.Utils.PutSerializeObject(NaGet.Env.RepositoriesListFile, repoList);\r
- } else {\r
- // repos.list.xmlがあるとき、そこからよみとる。\r
- repoList = NaGet.Utils.GetDeserializedObject<RepositoriesList>(NaGet.Env.RepositoriesListFile);\r
- }\r
+ // repos.list.xmlがあるとき、そこからよみとる。\r
+ repoList = NaGet.Utils.GetDeserializedObject<RepositoriesList>(NaGet.Env.RepositoriesListFile);\r
\r
foreach (RepositoryInfo repo in repoList.EnabledRepositories) {\r
taskSetNames.Add(string.Format("リスト取得: {0}", repo.Url.Href));\r
}\r
taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.ArchiveInstalledPackageListFile));\r
taskSetNames.Add(string.Format("リスト更新: {0}", NaGet.Env.SystemInstalledPackageListFile));\r
- \r
- TaskSetNames = taskSetNames.ToArray();\r
}\r
\r
public override void Run()\r
{\r
currentTaskSetIndex ++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED, "リスト更新処理開始");\r
+ RaiseTaskSetEvent(TaskEventType.STARTED, "リスト更新処理開始");\r
\r
try {\r
// リストのダウンロード\r
if (downloadPackageLists) {\r
packageListsDownloaded = false;\r
try {\r
- runDownloadPackages();\r
- } catch (NaGetTaskCanceledException) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "リストのダウンロード処理がキャンセルされました");\r
+ runDownloadPackageLists();\r
+ } catch (TaskCanceledException) {\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "リストのダウンロード処理がキャンセルされました");\r
+ pkgListMan.LoadPackageLists();\r
} catch (System.Net.WebException e) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, e.Message);\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, e.Message);\r
if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ネットワークに接続されていません。");\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "ネットワークに接続されていません。");\r
} else {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.WARNING, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, "ネットワークに接続できませんでした。ネットワークが切断されているか、ファイアウォールによって遮断された可能性があります。");\r
}\r
+ pkgListMan.LoadPackageLists();\r
} finally {\r
- currentTaskSetIndex = repoList.EnabledRepositories.Length + 1;\r
+ int numOfEnabledRepos = NaGet.Utils.IEnumerable2Array(repoList.EnabledRepositories).Length;\r
+ currentTaskSetIndex = numOfEnabledRepos + 1;\r
}\r
packageListsDownloaded = true;\r
}\r
done = true;\r
}\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED, "終了", 100);\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED, "終了", 100);\r
}\r
\r
- private void runDownloadPackages()\r
+ private void runDownloadPackageLists()\r
{\r
PackageList<Package> avaiablePackageList = new PackageList<Package>();\r
foreach(RepositoryInfo repo in repoList.EnabledRepositories) {\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
\r
- string tmpfileName = Path.GetTempFileName();\r
- try {\r
- Downloader.Download(repo.Url.Href, tmpfileName);\r
- \r
- PackageList<Package> pkgList = NaGet.Utils.GetDeserializedObject<PackageList<Package>>(tmpfileName);\r
- \r
- // RepositoryReferenceの名前を読み込む // TODO RepositoryReferenceの名前を読み込む処理はここでいいのか?\r
- repo.Name = (string.IsNullOrEmpty(pkgList.Name))? repo.Name : pkgList.Name;\r
- \r
- avaiablePackageList.AddPackages(pkgList.Packages);\r
- } finally {\r
- if (File.Exists(tmpfileName)) {\r
- File.Delete(tmpfileName);\r
+ if (Uri.IsWellFormedUriString(repo.Url.Href, UriKind.Absolute)) {\r
+ string tmpfileName = Path.GetTempFileName();\r
+ try {\r
+ Downloader.Download(repo.Url.Href, tmpfileName);\r
+ if (repo.Type == RepositoryType.APPLISTATION_NATIVE_XML_1_0) {\r
+ try {\r
+ PackageList<Package> pkgList = NaGet.Utils.GetDeserializedObject<PackageList<Package>>(tmpfileName);\r
+ pkgList.FixPackageListName(); // PackageListNameとの紐付けを行う\r
+ \r
+ // RepositoryReferenceの名前を読み込む // TODO RepositoryReferenceの名前を読み込む処理はここでいいのか?\r
+ repo.Name = (string.IsNullOrEmpty(pkgList.Name))? repo.Name : pkgList.Name;\r
+ \r
+ avaiablePackageList.AddPackages(pkgList);\r
+ } catch (InvalidOperationException) {\r
+ RaiseTaskSetEvent(TaskEventType.ERROR, string.Format("レポジトリ'{0}'はAppliStation Native XML softlist形式ではありません。", repo.Name ?? repo.Url.Href));\r
+ }\r
+ } else {\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, string.Format("レポジトリ'{0}'の設定が不正です。", repo.Name ?? repo.Url.Href));\r
+ }\r
+ } finally {\r
+ if (File.Exists(tmpfileName)) {\r
+ File.Delete(tmpfileName);\r
+ }\r
}\r
+ } else {\r
+ RaiseTaskSetEvent(TaskEventType.WARNING, string.Format("レポジトリ'{0}'のURLが不正なため、ソフトリストは取得できませんでした。", repo.Name ?? repo.Url.Href));\r
}\r
\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex ++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
}\r
\r
// TODO 暫定的にかならず常にrepositoryリストに書き込む。\r
NaGet.Utils.PutSerializeObject(NaGet.Env.RepositoriesListFile, repoList);\r
}\r
\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
pkgListMan.availablePkgList = avaiablePackageList; // Mediatorのリストを更新\r
pkgListMan.SaveAvailablePackageList();\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex ++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
}\r
\r
private void runLocalUpdate()\r
{\r
// インストールトリストの更新\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, taskSetNames[currentTaskSetIndex]);\r
pkgListMan.DetectInstalledPkgs();\r
pkgListMan.SaveInstalledPackageList();\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, TaskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
\r
// システムにインストールされているリストの更新\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.STARTED_TASKSET, TaskSetNames[currentTaskSetIndex]);\r
+ RaiseTaskSetEvent(TaskEventType.STARTED_SUBTASK, TaskSetNames[currentTaskSetIndex]);\r
pkgListMan.DetectSystemInstalledPkgs();\r
pkgListMan.SaveSystemInstalledPackageList();\r
+ RaiseTaskSetEvent(TaskEventType.COMPLETED_SUBTASK, TaskSetNames[currentTaskSetIndex]);\r
currentTaskSetIndex++;\r
- RaiseTaskSetEvent(NaGetTaskSetEventType.COMPLETED_TASKSET, TaskSetNames[currentTaskSetIndex-1]);\r
}\r
\r
public override bool Cancel()\r