cmd_options.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // Copyright (C) 2014 Audrius Butkevičius
  2. package main
  3. import (
  4. "fmt"
  5. "strings"
  6. "github.com/AudriusButkevicius/cli"
  7. )
  8. func init() {
  9. cliCommands = append(cliCommands, cli.Command{
  10. Name: "options",
  11. HideHelp: true,
  12. Usage: "Options command group",
  13. Subcommands: []cli.Command{
  14. {
  15. Name: "dump",
  16. Usage: "Show all Syncthing option settings",
  17. Requires: &cli.Requires{},
  18. Action: optionsDump,
  19. },
  20. {
  21. Name: "get",
  22. Usage: "Get a Syncthing option setting",
  23. Requires: &cli.Requires{"setting"},
  24. Action: optionsGet,
  25. },
  26. {
  27. Name: "set",
  28. Usage: "Set a Syncthing option setting",
  29. Requires: &cli.Requires{"setting", "value..."},
  30. Action: optionsSet,
  31. },
  32. },
  33. })
  34. }
  35. func optionsDump(c *cli.Context) {
  36. cfg := getConfig(c).Options
  37. writer := newTableWriter()
  38. fmt.Fprintln(writer, "Sync protocol listen addresses:\t", strings.Join(cfg.ListenAddresses, " "), "\t(addresses)")
  39. fmt.Fprintln(writer, "Global discovery enabled:\t", cfg.GlobalAnnEnabled, "\t(globalannenabled)")
  40. fmt.Fprintln(writer, "Global discovery servers:\t", strings.Join(cfg.GlobalAnnServers, " "), "\t(globalannserver)")
  41. fmt.Fprintln(writer, "Local discovery enabled:\t", cfg.LocalAnnEnabled, "\t(localannenabled)")
  42. fmt.Fprintln(writer, "Local discovery port:\t", cfg.LocalAnnPort, "\t(localannport)")
  43. fmt.Fprintln(writer, "Outgoing rate limit in KiB/s:\t", cfg.MaxSendKbps, "\t(maxsend)")
  44. fmt.Fprintln(writer, "Incoming rate limit in KiB/s:\t", cfg.MaxRecvKbps, "\t(maxrecv)")
  45. fmt.Fprintln(writer, "Reconnect interval in seconds:\t", cfg.ReconnectIntervalS, "\t(reconnect)")
  46. fmt.Fprintln(writer, "Start browser:\t", cfg.StartBrowser, "\t(browser)")
  47. fmt.Fprintln(writer, "Enable UPnP:\t", cfg.NATEnabled, "\t(nat)")
  48. fmt.Fprintln(writer, "UPnP Lease in minutes:\t", cfg.NATLeaseM, "\t(natlease)")
  49. fmt.Fprintln(writer, "UPnP Renewal period in minutes:\t", cfg.NATRenewalM, "\t(natrenew)")
  50. fmt.Fprintln(writer, "Restart on Wake Up:\t", cfg.RestartOnWakeup, "\t(wake)")
  51. reporting := "unrecognized value"
  52. switch cfg.URAccepted {
  53. case -1:
  54. reporting = "false"
  55. case 0:
  56. reporting = "undecided/false"
  57. case 1:
  58. reporting = "true"
  59. }
  60. fmt.Fprintln(writer, "Anonymous usage reporting:\t", reporting, "\t(reporting)")
  61. writer.Flush()
  62. }
  63. func optionsGet(c *cli.Context) {
  64. cfg := getConfig(c).Options
  65. arg := c.Args()[0]
  66. switch strings.ToLower(arg) {
  67. case "address":
  68. fmt.Println(strings.Join(cfg.ListenAddresses, "\n"))
  69. case "globalannenabled":
  70. fmt.Println(cfg.GlobalAnnEnabled)
  71. case "globalannservers":
  72. fmt.Println(strings.Join(cfg.GlobalAnnServers, "\n"))
  73. case "localannenabled":
  74. fmt.Println(cfg.LocalAnnEnabled)
  75. case "localannport":
  76. fmt.Println(cfg.LocalAnnPort)
  77. case "maxsend":
  78. fmt.Println(cfg.MaxSendKbps)
  79. case "maxrecv":
  80. fmt.Println(cfg.MaxRecvKbps)
  81. case "reconnect":
  82. fmt.Println(cfg.ReconnectIntervalS)
  83. case "browser":
  84. fmt.Println(cfg.StartBrowser)
  85. case "nat":
  86. fmt.Println(cfg.NATEnabled)
  87. case "natlease":
  88. fmt.Println(cfg.NATLeaseM)
  89. case "natrenew":
  90. fmt.Println(cfg.NATRenewalM)
  91. case "reporting":
  92. switch cfg.URAccepted {
  93. case -1:
  94. fmt.Println("false")
  95. case 0:
  96. fmt.Println("undecided/false")
  97. case 1:
  98. fmt.Println("true")
  99. default:
  100. fmt.Println("unknown")
  101. }
  102. case "wake":
  103. fmt.Println(cfg.RestartOnWakeup)
  104. default:
  105. die("Invalid setting: " + arg + "\nAvailable settings: address, globalannenabled, globalannserver, localannenabled, localannport, maxsend, maxrecv, reconnect, browser, upnp, upnplease, upnprenew, reporting, wake")
  106. }
  107. }
  108. func optionsSet(c *cli.Context) {
  109. config := getConfig(c)
  110. arg := c.Args()[0]
  111. val := c.Args()[1]
  112. switch strings.ToLower(arg) {
  113. case "address":
  114. for _, item := range c.Args().Tail() {
  115. validAddress(item)
  116. }
  117. config.Options.ListenAddresses = c.Args().Tail()
  118. case "globalannenabled":
  119. config.Options.GlobalAnnEnabled = parseBool(val)
  120. case "globalannserver":
  121. for _, item := range c.Args().Tail() {
  122. validAddress(item)
  123. }
  124. config.Options.GlobalAnnServers = c.Args().Tail()
  125. case "localannenabled":
  126. config.Options.LocalAnnEnabled = parseBool(val)
  127. case "localannport":
  128. config.Options.LocalAnnPort = parsePort(val)
  129. case "maxsend":
  130. config.Options.MaxSendKbps = parseUint(val)
  131. case "maxrecv":
  132. config.Options.MaxRecvKbps = parseUint(val)
  133. case "reconnect":
  134. config.Options.ReconnectIntervalS = parseUint(val)
  135. case "browser":
  136. config.Options.StartBrowser = parseBool(val)
  137. case "nat":
  138. config.Options.NATEnabled = parseBool(val)
  139. case "natlease":
  140. config.Options.NATLeaseM = parseUint(val)
  141. case "natrenew":
  142. config.Options.NATRenewalM = parseUint(val)
  143. case "reporting":
  144. switch strings.ToLower(val) {
  145. case "u", "undecided", "unset":
  146. config.Options.URAccepted = 0
  147. default:
  148. boolvalue := parseBool(val)
  149. if boolvalue {
  150. config.Options.URAccepted = 1
  151. } else {
  152. config.Options.URAccepted = -1
  153. }
  154. }
  155. case "wake":
  156. config.Options.RestartOnWakeup = parseBool(val)
  157. default:
  158. die("Invalid setting: " + arg + "\nAvailable settings: address, globalannenabled, globalannserver, localannenabled, localannport, maxsend, maxrecv, reconnect, browser, upnp, upnplease, upnprenew, reporting, wake")
  159. }
  160. setConfig(c, config)
  161. }