config: add utility function for backend config with list and custom input
This commit is contained in:
parent
f4f0e444bf
commit
700ca23a71
3 changed files with 74 additions and 9 deletions
|
@ -127,7 +127,7 @@ func init() {
|
|||
func Config(ctx context.Context, name string, m configmap.Mapper, config fs.ConfigIn) (*fs.ConfigOut, error) {
|
||||
switch config.State {
|
||||
case "":
|
||||
return fs.ConfigChooseFixed("auth_type_done", "config_type", `Authentication type.`, []fs.OptionExample{{
|
||||
return fs.ConfigChooseExclusiveFixed("auth_type_done", "config_type", `Authentication type.`, []fs.OptionExample{{
|
||||
Value: "standard",
|
||||
Help: "Standard authentication.\nUse this if you're a normal Jottacloud user.",
|
||||
}, {
|
||||
|
@ -286,7 +286,7 @@ machines.`)
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return fs.ConfigChoose("choose_device_result", "config_device", `Please select the device to use. Normally this will be Jotta`, len(acc.Devices), func(i int) (string, string) {
|
||||
return fs.ConfigChooseExclusive("choose_device_result", "config_device", `Please select the device to use. Normally this will be Jotta`, len(acc.Devices), func(i int) (string, string) {
|
||||
return acc.Devices[i].Name, ""
|
||||
})
|
||||
case "choose_device_result":
|
||||
|
@ -304,7 +304,7 @@ machines.`)
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return fs.ConfigChoose("choose_device_mountpoint", "config_mountpoint", `Please select the mountpoint to use. Normally this will be Archive.`, len(dev.MountPoints), func(i int) (string, string) {
|
||||
return fs.ConfigChooseExclusive("choose_device_mountpoint", "config_mountpoint", `Please select the mountpoint to use. Normally this will be Archive.`, len(dev.MountPoints), func(i int) (string, string) {
|
||||
return dev.MountPoints[i].Name, ""
|
||||
})
|
||||
case "choose_device_mountpoint":
|
||||
|
|
|
@ -424,7 +424,7 @@ func Config(ctx context.Context, name string, m configmap.Mapper, config fs.Conf
|
|||
|
||||
switch config.State {
|
||||
case "choose_type":
|
||||
return fs.ConfigChooseFixed("choose_type_done", "config_type", "Type of connection", []fs.OptionExample{{
|
||||
return fs.ConfigChooseExclusiveFixed("choose_type_done", "config_type", "Type of connection", []fs.OptionExample{{
|
||||
Value: "onedrive",
|
||||
Help: "OneDrive Personal or Business",
|
||||
}, {
|
||||
|
|
|
@ -176,7 +176,13 @@ func ConfigConfirm(state string, Default bool, name string, help string) (*Confi
|
|||
}, nil
|
||||
}
|
||||
|
||||
// ConfigChooseFixed returns a ConfigOut structure which has a list of items to choose from.
|
||||
// ConfigChooseExclusiveFixed returns a ConfigOut structure which has a list of
|
||||
// items to choose from.
|
||||
//
|
||||
// Possible items must be supplied as a fixed list.
|
||||
//
|
||||
// User is required to supply a value, and is restricted to the specified list,
|
||||
// i.e. free text input is not allowed.
|
||||
//
|
||||
// state should be the next state required
|
||||
// name is the config name for this item
|
||||
|
@ -185,8 +191,8 @@ func ConfigConfirm(state string, Default bool, name string, help string) (*Confi
|
|||
//
|
||||
// It chooses the first item to be the default.
|
||||
// If there are no items then it will return an error.
|
||||
// If there is only one item it will short cut to the next state
|
||||
func ConfigChooseFixed(state string, name string, help string, items []OptionExample) (*ConfigOut, error) {
|
||||
// If there is only one item it will short cut to the next state.
|
||||
func ConfigChooseExclusiveFixed(state string, name string, help string, items []OptionExample) (*ConfigOut, error) {
|
||||
if len(items) == 0 {
|
||||
return nil, fmt.Errorf("no items found in: %s", help)
|
||||
}
|
||||
|
@ -208,7 +214,13 @@ func ConfigChooseFixed(state string, name string, help string, items []OptionExa
|
|||
return choose, nil
|
||||
}
|
||||
|
||||
// ConfigChoose returns a ConfigOut structure which has a list of items to choose from.
|
||||
// ConfigChooseExclusive returns a ConfigOut structure which has a list of
|
||||
// items to choose from.
|
||||
//
|
||||
// Possible items are retrieved from a supplied function.
|
||||
//
|
||||
// User is required to supply a value, and is restricted to the specified list,
|
||||
// i.e. free text input is not allowed.
|
||||
//
|
||||
// state should be the next state required
|
||||
// name is the config name for this item
|
||||
|
@ -218,7 +230,60 @@ func ConfigChooseFixed(state string, name string, help string, items []OptionExa
|
|||
//
|
||||
// It chooses the first item to be the default.
|
||||
// If there are no items then it will return an error.
|
||||
// If there is only one item it will short cut to the next state
|
||||
// If there is only one item it will short cut to the next state.
|
||||
func ConfigChooseExclusive(state string, name string, help string, n int, getItem func(i int) (itemValue string, itemHelp string)) (*ConfigOut, error) {
|
||||
items := make(OptionExamples, n)
|
||||
for i := range items {
|
||||
items[i].Value, items[i].Help = getItem(i)
|
||||
}
|
||||
return ConfigChooseExclusiveFixed(state, name, help, items)
|
||||
}
|
||||
|
||||
// ConfigChooseFixed returns a ConfigOut structure which has a list of
|
||||
// suggested items.
|
||||
//
|
||||
// Suggested items must be supplied as a fixed list.
|
||||
//
|
||||
// User is required to supply a value, but is not restricted to the specified
|
||||
// list, i.e. free text input is accepted.
|
||||
//
|
||||
// state should be the next state required
|
||||
// name is the config name for this item
|
||||
// help should be the help shown to the user
|
||||
// items should be the items in the list
|
||||
//
|
||||
// It chooses the first item to be the default.
|
||||
func ConfigChooseFixed(state string, name string, help string, items []OptionExample) (*ConfigOut, error) {
|
||||
choose := &ConfigOut{
|
||||
State: state,
|
||||
Option: &Option{
|
||||
Name: name,
|
||||
Help: help,
|
||||
Examples: items,
|
||||
Required: true,
|
||||
},
|
||||
}
|
||||
if len(choose.Option.Examples) > 0 {
|
||||
choose.Option.Default = choose.Option.Examples[0].Value
|
||||
}
|
||||
return choose, nil
|
||||
}
|
||||
|
||||
// ConfigChoose returns a ConfigOut structure which has a list of suggested
|
||||
// items.
|
||||
//
|
||||
// Suggested items are retrieved from a supplied function.
|
||||
//
|
||||
// User is required to supply a value, but is not restricted to the specified
|
||||
// list, i.e. free text input is accepted.
|
||||
//
|
||||
// state should be the next state required
|
||||
// name is the config name for this item
|
||||
// help should be the help shown to the user
|
||||
// n should be the number of items in the list
|
||||
// getItem should return the items (value, help)
|
||||
//
|
||||
// It chooses the first item to be the default.
|
||||
func ConfigChoose(state string, name string, help string, n int, getItem func(i int) (itemValue string, itemHelp string)) (*ConfigOut, error) {
|
||||
items := make(OptionExamples, n)
|
||||
for i := range items {
|
||||
|
|
Loading…
Reference in a new issue