forked from TrueCloudLab/rclone
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) {
|
func Config(ctx context.Context, name string, m configmap.Mapper, config fs.ConfigIn) (*fs.ConfigOut, error) {
|
||||||
switch config.State {
|
switch config.State {
|
||||||
case "":
|
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",
|
Value: "standard",
|
||||||
Help: "Standard authentication.\nUse this if you're a normal Jottacloud user.",
|
Help: "Standard authentication.\nUse this if you're a normal Jottacloud user.",
|
||||||
}, {
|
}, {
|
||||||
|
@ -286,7 +286,7 @@ machines.`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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, ""
|
return acc.Devices[i].Name, ""
|
||||||
})
|
})
|
||||||
case "choose_device_result":
|
case "choose_device_result":
|
||||||
|
@ -304,7 +304,7 @@ machines.`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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, ""
|
return dev.MountPoints[i].Name, ""
|
||||||
})
|
})
|
||||||
case "choose_device_mountpoint":
|
case "choose_device_mountpoint":
|
||||||
|
|
|
@ -424,7 +424,7 @@ func Config(ctx context.Context, name string, m configmap.Mapper, config fs.Conf
|
||||||
|
|
||||||
switch config.State {
|
switch config.State {
|
||||||
case "choose_type":
|
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",
|
Value: "onedrive",
|
||||||
Help: "OneDrive Personal or Business",
|
Help: "OneDrive Personal or Business",
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -176,7 +176,13 @@ func ConfigConfirm(state string, Default bool, name string, help string) (*Confi
|
||||||
}, nil
|
}, 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
|
// state should be the next state required
|
||||||
// name is the config name for this item
|
// 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.
|
// It chooses the first item to be the default.
|
||||||
// If there are no items then it will return an error.
|
// 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 ConfigChooseFixed(state string, name string, help string, items []OptionExample) (*ConfigOut, error) {
|
func ConfigChooseExclusiveFixed(state string, name string, help string, items []OptionExample) (*ConfigOut, error) {
|
||||||
if len(items) == 0 {
|
if len(items) == 0 {
|
||||||
return nil, fmt.Errorf("no items found in: %s", help)
|
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
|
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
|
// state should be the next state required
|
||||||
// name is the config name for this item
|
// 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.
|
// It chooses the first item to be the default.
|
||||||
// If there are no items then it will return an error.
|
// 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) {
|
func ConfigChoose(state string, name string, help string, n int, getItem func(i int) (itemValue string, itemHelp string)) (*ConfigOut, error) {
|
||||||
items := make(OptionExamples, n)
|
items := make(OptionExamples, n)
|
||||||
for i := range items {
|
for i := range items {
|
||||||
|
|
Loading…
Reference in a new issue