Browse Source

Better connected devices support

pull/8/head
Daniel Martí 11 years ago
parent
commit
eb210bd626
  1. 16
      adb/adb.go
  2. 8
      cmd/fdroidcl/devices.go
  3. 13
      cmd/fdroidcl/search.go

16
adb/adb.go

@ -45,7 +45,7 @@ type Device struct {
var deviceRegex = regexp.MustCompile(`^([^\s]+)\s+device(.*)$`)
func Devices() ([]Device, error) {
func Devices() ([]*Device, error) {
cmd := exec.Command("adb", "devices", "-l")
stdout, err := cmd.StdoutPipe()
if err != nil {
@ -54,7 +54,7 @@ func Devices() ([]Device, error) {
if err := cmd.Start(); err != nil {
return nil, err
}
var devices []Device
var devices []*Device
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
line := scanner.Text()
@ -62,7 +62,7 @@ func Devices() ([]Device, error) {
if m == nil {
continue
}
device := Device{
device := &Device{
Id: m[1],
}
extras := m[2]
@ -87,17 +87,17 @@ func Devices() ([]Device, error) {
return devices, nil
}
func (d Device) AdbCmd(args ...string) *exec.Cmd {
func (d *Device) AdbCmd(args ...string) *exec.Cmd {
cmdArgs := append([]string{"-s", d.Id}, args...)
return exec.Command("adb", cmdArgs...)
}
func (d Device) AdbShell(args ...string) *exec.Cmd {
func (d *Device) AdbShell(args ...string) *exec.Cmd {
shellArgs := append([]string{"shell"}, args...)
return d.AdbCmd(shellArgs...)
}
func (d Device) Install(path string) error {
func (d *Device) Install(path string) error {
cmd := d.AdbCmd("install", path)
if err := cmd.Start(); err != nil {
return err
@ -105,7 +105,7 @@ func (d Device) Install(path string) error {
return nil
}
func (d Device) Uninstall(pkg string) error {
func (d *Device) Uninstall(pkg string) error {
cmd := d.AdbCmd("uninstall", pkg)
if err := cmd.Start(); err != nil {
return err
@ -125,7 +125,7 @@ var (
verNameRegex = regexp.MustCompile(`^ versionName=(.+)`)
)
func (d Device) Installed() (map[string]Package, error) {
func (d *Device) Installed() (map[string]Package, error) {
cmd := d.AdbShell("dumpsys", "package", "packages")
stdout, err := cmd.StdoutPipe()
if err != nil {

8
cmd/fdroidcl/devices.go

@ -40,16 +40,18 @@ func startAdbIfNeeded() {
}
}
func oneDevice() adb.Device {
func oneDevice() *adb.Device {
devices, err := adb.Devices()
if err != nil {
log.Fatalf("Could not get devices: %v", err)
}
if len(devices) == 0 {
log.Fatalf("No devices found")
log.Printf("No devices found, no device info will be available")
return nil
}
if len(devices) > 1 {
log.Fatalf("Too many devices found")
log.Printf("Too many devices found, no device info will be available")
return nil
}
return devices[0]
}

13
cmd/fdroidcl/search.go

@ -33,14 +33,18 @@ func runSearch(args []string) {
fmt.Println("-i is redundant if -u is specified")
cmdSearch.Flag.Usage()
}
device := oneDevice()
if device == nil && (*installed || *updates) {
log.Fatalf("Exactly one connected device is needed")
}
index := mustLoadIndex()
apps := filterAppsSearch(index.Apps, args)
if *installed {
instPkgs := mustInstalled(oneDevice())
instPkgs := mustInstalled(device)
apps = filterAppsInstalled(apps, instPkgs)
}
if *updates {
instPkgs := mustInstalled(oneDevice())
instPkgs := mustInstalled(device)
apps = filterAppsUpdates(apps, instPkgs)
}
if *quiet {
@ -104,7 +108,10 @@ func printApp(app fdroidcl.App, IDLen int) {
fmt.Printf(" %s\n", app.Summary)
}
func mustInstalled(device adb.Device) map[string]adb.Package {
func mustInstalled(device *adb.Device) map[string]adb.Package {
if device == nil {
return nil
}
inst, err := device.Installed()
if err != nil {
log.Fatalf("Could not get installed packages: %v", err)

Loading…
Cancel
Save