blob: 33a91efdea7e7197002b0feae569affc85f54eb5 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"context"
"flag"
"log"
"github.com/google/subcommands"
)
type listCmd struct {
devFinderCmd
// Determines whether or not to print the full device info.
fullInfo bool
}
func (*listCmd) Name() string {
return "list"
}
func (*listCmd) Usage() string {
return "list [flags...]\n\nflags:\n"
}
func (*listCmd) Synopsis() string {
return "lists all Fuchsia devices on the network"
}
func (cmd *listCmd) SetFlags(f *flag.FlagSet) {
cmd.SetCommonFlags(f)
f.BoolVar(&cmd.fullInfo, "full", false, "Print device address and domain")
}
func (cmd *listCmd) listDevices(ctx context.Context) ([]*fuchsiaDevice, error) {
deviceFinders, err := cmd.deviceFinders()
if err != nil {
return nil, err
}
f := make(chan *fuchsiaDevice, 1024)
for _, finder := range deviceFinders {
if err := finder.list(ctx, f); err != nil {
return nil, err
}
}
devices, err := cmd.filterInboundDevices(ctx, f)
if err != nil {
return nil, err
}
return devices, nil
}
func (cmd *listCmd) execute(ctx context.Context) error {
devices, err := cmd.listDevices(ctx)
if err != nil {
return err
}
if cmd.json {
return cmd.outputJSON(devices, cmd.fullInfo)
}
return cmd.outputNormal(devices, cmd.fullInfo)
}
func (cmd *listCmd) Execute(ctx context.Context, _ *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
if err := cmd.execute(ctx); err != nil {
log.Print(err)
return subcommands.ExitFailure
}
return subcommands.ExitSuccess
}