diff --git a/adb/adb.go b/adb/adb.go index 1ddccd8..dbc5a2f 100644 --- a/adb/adb.go +++ b/adb/adb.go @@ -112,10 +112,17 @@ func (d Device) Uninstall(pkg string) error { return nil } -var packageRegex = regexp.MustCompile(`^package:([^\s]+)`) +type Package struct { + ID string + VName string + VCode int -func (d Device) Installed() ([]string, error) { - cmd := d.AdbShell("pm", "list", "packages") +} + +var packageRegex = regexp.MustCompile(`Package \[([^\s]+)\]`) + +func (d Device) Installed() ([]Package, error) { + cmd := d.AdbShell("dumpsys", "package", "packages") stdout, err := cmd.StdoutPipe() if err != nil { return nil, err @@ -123,7 +130,7 @@ func (d Device) Installed() ([]string, error) { if err := cmd.Start(); err != nil { return nil, err } - var ids []string + var packages []Package scanner := bufio.NewScanner(stdout) for scanner.Scan() { line := scanner.Text() @@ -131,7 +138,10 @@ func (d Device) Installed() ([]string, error) { if m == nil { continue } - ids = append(ids, m[1]) + p := Package{ + ID: m[1], + } + packages = append(packages, p) } - return ids, nil + return packages, nil } diff --git a/cmd/fdroidcl/search.go b/cmd/fdroidcl/search.go index 3f12241..ab0b5c7 100644 --- a/cmd/fdroidcl/search.go +++ b/cmd/fdroidcl/search.go @@ -96,7 +96,7 @@ func printApp(app fdroidcl.App, IDLen int) { fmt.Printf(" %s\n", app.Summary) } -func mustInstalled(device adb.Device) []string { +func mustInstalled(device adb.Device) []adb.Package { installed, err := device.Installed() if err != nil { log.Fatalf("Could not get installed packages: %v", err) @@ -104,10 +104,10 @@ func mustInstalled(device adb.Device) []string { return installed } -func filterAppsInstalled(apps []fdroidcl.App, installed []string) []fdroidcl.App { +func filterAppsInstalled(apps []fdroidcl.App, installed []adb.Package) []fdroidcl.App { instMap := make(map[string]struct{}, len(installed)) - for _, id := range installed { - instMap[id] = struct{}{} + for _, p := range installed { + instMap[p.ID] = struct{}{} } var result []fdroidcl.App for _, app := range apps {