OSDN Git Service

Merge branch 'master' of git.sourceforge.jp:/gitroot/applistation/AppliStation
[applistation/AppliStation.git] / all-get / Main.cs
index 7a286a4..0849124 100644 (file)
@@ -126,31 +126,23 @@ namespace AllGet
                \r
                public void CheckUpgrade()\r
                {\r
-                       PackageList<Package> packageList = pkgListMan.AvailablePkgList;\r
-                       \r
-                       VersionComparetor verComp = new VersionComparetor();\r
-                       \r
-                       foreach (InstalledPackage pkg in pkgListMan.InstalledPkgList) {\r
-                               Package avaiablePkg = packageList.GetPackageForName(pkg.Name);\r
+                       foreach (Package pkg in UpgradeFinder.GetUpgradePackages(pkgListMan)) {\r
+                               bool isSystem = false;\r
+                               Package instPkg = null;\r
                                \r
-                               if (avaiablePkg != null) {\r
-                                       if (verComp.Compare(pkg.Version, avaiablePkg.Version) < 0 &&\r
-                                           pkgListMan.InstalledPkgList.GetPackageForPackage(pkg.Name, avaiablePkg.Version) == null) {\r
-                                               \r
-                                               Console.WriteLine("{0} ({1}) => ({2})", pkg.Name, pkg.Version, avaiablePkg.Version);\r
+                               instPkg = pkgListMan.SystemInstalledPkgList.GetPackageForName(pkg.Name);\r
+                               if (instPkg != null) {\r
+                                       isSystem = true;\r
+                               } else {\r
+                                       instPkg = pkgListMan.InstalledPkgList.GetPackageForName(pkg.Name);\r
+                                       if (instPkg != null) {\r
+                                               isSystem = false;\r
+                                       } else {\r
+                                               System.Diagnostics.Debug.Fail("internal error.");\r
                                        }\r
                                }\r
-                       }\r
-                       foreach (InstalledPackage pkg in pkgListMan.SystemInstalledPkgList) {\r
-                               Package avaiablePkg = packageList.GetPackageForName(pkg.Name);\r
                                \r
-                               if (avaiablePkg != null) {\r
-                                       if (verComp.Compare(pkg.Version, avaiablePkg.Version) < 0 &&\r
-                                           pkgListMan.SystemInstalledPkgList.GetPackageForPackage(pkg.Name, avaiablePkg.Version) == null) {\r
-                                               \r
-                                               Console.WriteLine("{0} ({1})@sys => ({2})", pkg.Name, pkg.Version, avaiablePkg.Version);\r
-                                       }\r
-                               }\r
+                               Console.WriteLine("{0} ({1}){3} => ({2})", pkg.Name, instPkg.Version, pkg.Version, (isSystem)? "@sys" : "");\r
                        }\r
                }\r
                \r
@@ -212,7 +204,7 @@ namespace AllGet
                                \r
                                installations = new Installation[downloadList.Count];\r
                                for (int i = 0; i < installations.Length; i++) {\r
-                                       installations[i] = new Installation((Package) downloadList[i]);\r
+                                       installations[i] = new Installation(downloadList[i]);\r
                                }\r
                        }\r
                        \r
@@ -223,35 +215,56 @@ namespace AllGet
                                Environment.Exit(0);\r
                        }\r
                        \r
-                       {\r
-                               int i = 0;\r
-                               foreach (Installation inst in installations) {\r
-                                       i++;\r
-                                       \r
-                                       if (! inst.IsInstallablePackage()) {\r
-                                               Console.WriteLine("E:{0} {1} can not be installed.", i, inst.ToString());\r
-                                               continue;\r
-                                       }\r
-                                       \r
-                                       try {\r
-                                               Console.Write("Get:{0} {1}", i, inst.ToString());\r
-                                               inst.Download(downloader);\r
-                                               Console.WriteLine(" ...Done");\r
-                                       } catch (Exception e) {\r
-                                               Console.WriteLine("E: "+e.Message);\r
-                                               throw new ApplicationException(string.Format("Failed to download {0}", inst.ToString()), e);\r
-                                       }\r
+                       NaGet.SubCommands.NaGetDownloadToCache tasks = new NaGet.SubCommands.NaGetDownloadToCache(pkgListMan, installations);\r
+                       tasks.TaskQueryRaised += delegate(object sender, NaGetTaskQueryArgs e) {\r
+                               char result = '\u0000';\r
+                               if (e.SelectionFlag == (NaGetTaskQueryResult.CONTINUE | NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {\r
+                                       result = AllGet.Util.Query(e.Message + " [y/R/n]?", "yrn", 'r');\r
+                               } else if (e.SelectionFlag == (NaGetTaskQueryResult.RETRY | NaGetTaskQueryResult.CANCEL)) {\r
+                                       result = AllGet.Util.Query(e.Message + " [R/n]?", "rn", 'r');\r
+                               } else if (e.SelectionFlag == NaGetTaskQueryResult.CONTINUE) {\r
+                                       result = AllGet.Util.Query(e.Message + " [Y]?", "y", 'y');\r
+                               } else {\r
+                                       result = AllGet.Util.Query(e.Message + " [Y/n]?", "yn", 'y');\r
                                }\r
                                \r
-                               i = 0;\r
-                               foreach (Installation inst in installations) {\r
-                                       i++;\r
-                                       \r
-                                       if (inst.IsInstallablePackage() && inst.VerifyHashValues() == false) {\r
-                                               Console.WriteLine("Verify:{0} {1} does not match hash value!", i, inst.ToString());\r
-                                       }\r
+                               switch (result) {\r
+                                       case 'y':\r
+                                               return NaGetTaskQueryResult.CONTINUE;\r
+                                       case 'n':\r
+                                               return NaGetTaskQueryResult.CANCEL;\r
+                                       case 'r':\r
+                                               return NaGetTaskQueryResult.RETRY;\r
+                                       default:\r
+                                               return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;\r
                                }\r
-                       }\r
+                       };\r
+                       tasks.TaskSetRaised += delegate(object sender, NaGetTaskSetEventArgs e) { \r
+                               switch (e.Type) {\r
+//                                     case NaGetTaskSetEventType.COMPLETED_TASKSET\r
+//                                             break;\r
+                                       case NaGetTaskSetEventType.COMPLETED:\r
+                                               Console.WriteLine("Done.");\r
+                                               break;\r
+                                       case NaGetTaskSetEventType.STARTED_TASKSET:\r
+                                               Console.Write("  " + e.TaskMessage);\r
+                                               break;\r
+                                       case NaGetTaskSetEventType.COMPLETED_TASKSET:\r
+                                               Console.WriteLine(" ... Done. [{0}%]", (int) e.TaskProgressPercent);\r
+                                               break;\r
+                                       case NaGetTaskSetEventType.INFO:\r
+                                               Console.WriteLine("  " + e.TaskMessage);\r
+                                               break;\r
+                                       case NaGetTaskSetEventType.ERROR:\r
+                                       case NaGetTaskSetEventType.WARNING:\r
+                                               Console.WriteLine("  [Error] " + e.TaskMessage);\r
+                                               break;\r
+                               }\r
+                       };\r
+                       DownloadListener dl = new DownloadListener();\r
+                       tasks.Downloader.DownloadEventRaised += dl.OnDownload;\r
+                       \r
+                       tasks.Run();\r
                }\r
                \r
                public void Install(string[] packagenames)\r
@@ -277,7 +290,7 @@ namespace AllGet
                                \r
                                installations = new Installation[downloadList.Count];\r
                                for (int i = 0; i < installations.Length; i++) {\r
-                                       installations[i] = new Installation((Package) downloadList[i]);\r
+                                       installations[i] = new Installation(downloadList[i]);\r
                                        \r
                                        installations[i].Silent = silent; // サイレントインストールのフラグの設定\r
                                        \r