summaryrefslogtreecommitdiff
path: root/app/cli.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/cli.go')
-rw-r--r--app/cli.go166
1 files changed, 166 insertions, 0 deletions
diff --git a/app/cli.go b/app/cli.go
new file mode 100644
index 0000000..4d4f849
--- /dev/null
+++ b/app/cli.go
@@ -0,0 +1,166 @@
+package app
+
+import (
+ "bufio"
+ "bytes"
+ "encoding/json"
+ "os"
+ "time"
+)
+
+func ExecuteCommandLineArguments() {
+ const helpmsg = `SkunkyArt v1.3.1 [CSS improvements for mobile and the strips on Daily Deviations]
+Usage:
+ - [-c|--config] | path to config
+ - [-a|--add-instance] | generates 'instances.json' and 'INSTANCES.md' files with ur instance
+ - [-h|--help] | returns this message
+Example:
+ ./skunkyart -c config.json
+Copyright lost+skunk, X11. https://git.macaw.me/skunky/skunkyart/src/tag/v1.3.1`
+
+ a := os.Args[1:]
+ for n, x := range a {
+ switch x {
+ case "-c", "--config":
+ if len(a) >= 2 {
+ CFG.cfg = a[n+1]
+ } else {
+ exit("Not enought arguments", 1)
+ }
+ case "-h", "--help":
+ exit(helpmsg, 0)
+ case "-a", "--add-instance":
+ addInstance()
+ }
+ }
+}
+
+type settingsUrls struct {
+ I2P string `json:"i2p,omitempty"`
+ Ygg string `json:"ygg,omitempty"`
+ Tor string `json:"tor,omitempty"`
+ Clearnet string `json:"clearnet,omitempty"`
+}
+
+type settingsParams struct {
+ Nsfw bool `json:"nsfw"`
+ Proxy bool `json:"proxy"`
+}
+
+type settings struct {
+ Title string `json:"title"`
+ Country string `json:"country"`
+ ModifiedSrc string `json:"modified-src,omitempty"`
+ Urls settingsUrls `json:"urls"`
+ Settings settingsParams `json:"settings"`
+}
+
+func addInstance() {
+ prompt := func(txt string, necessary bool) string {
+ input := bufio.NewScanner(os.Stdin)
+ for {
+ print(txt)
+ print(": ")
+ input.Scan()
+
+ if i := input.Text(); necessary && i == "" {
+ println("Please specify the", txt)
+ } else {
+ return i
+ }
+ }
+ }
+
+ var settingsVar struct {
+ Instances []settings `json:"instances"`
+ }
+ instancesJson, err := os.OpenFile("instances.test.json", os.O_CREATE|os.O_WRONLY, 0644)
+ try(err)
+ defer instancesJson.Close()
+
+ instances, err := os.OpenFile("INSTANCES.md", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+ try(err)
+ defer instances.Close()
+
+ for {
+ if Templates["instances.json"] == "" {
+ print("\rDownloading instance list...")
+ } else {
+ println("\r\033[2KDownloaded!")
+ try(json.Unmarshal([]byte(Templates["instances.json"]), &settingsVar))
+
+ settingsVar.Instances = append(settingsVar.Instances, settings{
+ Title: prompt("Title", true),
+ Country: prompt("Country", true),
+ ModifiedSrc: prompt("Link to modified sources", false),
+ Settings: settingsParams{
+ Nsfw: CFG.Nsfw,
+ Proxy: CFG.Proxy,
+ },
+ Urls: settingsUrls{
+ Clearnet: prompt("Clearnet link", false),
+ Ygg: prompt("Yggdrasil link", false),
+ Tor: prompt("Onion link", false),
+ I2P: prompt("I2P link", false),
+ },
+ })
+
+ j, err := json.MarshalIndent(&settingsVar, "", " ")
+ try(err)
+
+ instancesJson.Write(j)
+
+ settingsVar := &settingsVar.Instances[len(settingsVar.Instances)-1]
+ var mdstr bytes.Buffer
+
+ mdstr.WriteString("\n|")
+ if settingsVar.Urls.Clearnet != "" {
+ mdstr.WriteString("[")
+ mdstr.WriteString(settingsVar.Title)
+ mdstr.WriteString("](")
+ mdstr.WriteString(settingsVar.Urls.Clearnet)
+ mdstr.WriteString(")")
+ } else {
+ mdstr.WriteString(settingsVar.Title)
+ }
+ mdstr.WriteString("|")
+
+ urls := []string{settingsVar.Urls.Ygg, settingsVar.Urls.I2P, settingsVar.Urls.Tor}
+ for i, l := 0, len(urls); i < l; i++ {
+ url := urls[i]
+ if url != "" {
+ mdstr.WriteString("[Yes](")
+ mdstr.WriteString(url)
+ mdstr.WriteString(")|")
+ } else {
+ mdstr.WriteString("No|")
+ }
+ }
+
+ settings := []bool{settingsVar.Settings.Nsfw, settingsVar.Settings.Proxy}
+ for i, l := 0, len(settings); i < l; i++ {
+ if settings[i] {
+ mdstr.WriteString("Yes|")
+ } else {
+ mdstr.WriteString("No|")
+ }
+ }
+
+ if settingsVar.ModifiedSrc != "" {
+ mdstr.WriteString("[Yes](")
+ mdstr.WriteString(settingsVar.ModifiedSrc)
+ mdstr.WriteString(")|")
+ } else {
+ mdstr.WriteString("No|")
+ }
+
+ mdstr.WriteString(settingsVar.Country)
+ mdstr.WriteString("|")
+
+ instances.Write(mdstr.Bytes())
+ break
+ }
+ time.Sleep(500 * time.Millisecond)
+ }
+ exit("Done! Now add the files 'instances.json' and 'INSTANCES.md' to the 'master' branch in the repository https://git.macaw.me/skunky/SkunkyArt", 0)
+}