diff --git a/hrp/cmd/adb/devices.go b/hrp/cmd/adb/devices.go index 6640a45e..7aef4d18 100644 --- a/hrp/cmd/adb/devices.go +++ b/hrp/cmd/adb/devices.go @@ -41,7 +41,11 @@ var listAndroidDevicesCmd = &cobra.Command{ if isDetail { fmt.Println(format(d.DeviceInfo())) } else { - fmt.Println(d.Serial(), d.Usb()) + if usb, err := d.Usb(); err != nil { + fmt.Println(d.Serial()) + } else { + fmt.Println(d.Serial(), usb) + } } } return nil diff --git a/hrp/pkg/gadb/client.go b/hrp/pkg/gadb/client.go index 1c867dd1..eb6b9d8c 100644 --- a/hrp/pkg/gadb/client.go +++ b/hrp/pkg/gadb/client.go @@ -108,7 +108,7 @@ func (c Client) DeviceList() (devices []*Device, err error) { } fields := strings.Fields(line) - if len(fields) < 5 || len(fields[0]) == 0 { + if len(fields) < 4 || len(fields[0]) == 0 { log.Error().Str("line", line).Msg("get unexpected line") continue } @@ -117,6 +117,9 @@ func (c Client) DeviceList() (devices []*Device, err error) { mapAttrs := map[string]string{} for _, field := range sliceAttrs { split := strings.Split(field, ":") + if len(split) == 1 { + continue + } key, val := split[0], split[1] mapAttrs[key] = val } diff --git a/hrp/pkg/gadb/device.go b/hrp/pkg/gadb/device.go index 8b9705b6..c9f61602 100644 --- a/hrp/pkg/gadb/device.go +++ b/hrp/pkg/gadb/device.go @@ -107,20 +107,37 @@ func (d *Device) features() (features Features, err error) { return features, nil } -func (d *Device) Product() string { - return d.attrs["product"] +func (d Device) HasAttribute(key string) bool { + _, ok := d.attrs[key] + return ok } -func (d *Device) Model() string { - return d.attrs["model"] +func (d Device) Product() (string, error) { + if d.HasAttribute("product") { + return d.attrs["product"], nil + } + return "", errors.New("does not have attribute: product") } -func (d *Device) Usb() string { - return d.attrs["usb"] +func (d Device) Model() (string, error) { + if d.HasAttribute("model") { + return d.attrs["model"], nil + } + return "", errors.New("does not have attribute: model") } -func (d *Device) transportId() string { - return d.attrs["transport_id"] +func (d *Device) Usb() (string, error) { + if d.HasAttribute("usb") { + return d.attrs["usb"], nil + } + return "", errors.New("does not have attribute: usb") +} + +func (d Device) transportId() (string, error) { + if d.HasAttribute("transport_id") { + return d.attrs["transport_id"], nil + } + return "", errors.New("does not have attribute: transport_id") } func (d *Device) DeviceInfo() map[string]string { @@ -132,8 +149,13 @@ func (d *Device) Serial() string { return d.serial } -func (d *Device) IsUsb() bool { - return d.Usb() != "" +func (d *Device) IsUsb() (bool, error) { + usb, err := d.Usb() + if err != nil { + return false, err + } + + return usb != "", nil } func (d *Device) State() (DeviceState, error) {