Browse Source

Repo Search added to cut on memory use

Jguer 8 năm trước cách đây
mục cha
commit
f51b897e3e
2 tập tin đã thay đổi với 44 bổ sung7 xóa
  1. 2 7
      actions.go
  2. 42 0
      pacman.go

+ 2 - 7
actions.go

@@ -29,8 +29,7 @@ func searchAndInstall(pkgName string, conf *alpm.PacmanConfig, flags []string) (
 	r.PrintSearch(0)
 	a.PrintSearch(len(r.Results))
 
-	args = append(args, "pacman")
-	args = append(args, "-S")
+	args = append(args, "pacman", "-S")
 
 	fmt.Printf("\x1B[32m%s\033[0m\nNumbers:", "Type numbers to install. Separate each number with a space.")
 	reader := bufio.NewReader(os.Stdin)
@@ -95,12 +94,8 @@ func searchMode(pkg string, conf *alpm.PacmanConfig) (err error) {
 	if err != nil {
 		return err
 	}
-	r, err := SearchPackages(pkg, conf)
-	if err != nil {
-		return err
-	}
 
-	r.PrintSearch(SearchMode)
+	SearchRepos(pkg, conf, SearchMode)
 	a.PrintSearch(SearchMode)
 
 	return nil

+ 42 - 0
pacman.go

@@ -105,6 +105,48 @@ func UpdatePackages(flags []string) error {
 	return err
 }
 
+// SearchRepos searches and prints packages in repo
+func SearchRepos(pkgName string, conf *alpm.PacmanConfig, mode int) (err error) {
+	h, err := conf.CreateHandle()
+	defer h.Release()
+	if err != nil {
+	}
+
+	dbList, err := h.SyncDbs()
+	localdb, err := h.LocalDb()
+
+	var installed bool
+	var i int
+	for _, db := range dbList.Slice() {
+		for _, pkg := range db.PkgCache().Slice() {
+			if strings.Contains(pkg.Name(), pkgName) {
+				if r, _ := localdb.PkgByName(pkg.Name()); r != nil {
+					installed = true
+				} else {
+					installed = false
+				}
+
+				switch {
+				case mode != SearchMode && installed == true:
+					fmt.Printf("%d \033[1m%s/\x1B[33m%s \x1B[36m%s \x1B[32;40mInstalled\033[0m\n%s\n",
+						i, db.Name(), pkg.Name(), pkg.Version(), pkg.Description())
+				case mode != SearchMode && installed != true:
+					fmt.Printf("%d \033[1m%s/\x1B[33m%s \x1B[36m%s\033[0m\n%s\n",
+						i, db.Name(), pkg.Name(), pkg.Version(), pkg.Description())
+				case mode == SearchMode && installed == true:
+					fmt.Printf("\033[1m%s/\x1B[33m%s \x1B[36m%s \x1B[32;40mInstalled\033[0m\n%s\n",
+						db.Name(), pkg.Name(), pkg.Version(), pkg.Description())
+				case mode == SearchMode && installed != true:
+					fmt.Printf("\033[1m%s/\x1B[33m%s \x1B[36m%s\033[0m\n%s\n",
+						db.Name(), pkg.Name(), pkg.Version(), pkg.Description())
+				}
+				i++
+			}
+		}
+	}
+	return
+}
+
 // SearchPackages handles repo searches. Creates a RepoSearch struct.
 func SearchPackages(pkgName string, conf *alpm.PacmanConfig) (s RepoSearch, err error) {
 	h, err := conf.CreateHandle()