From 107968803c4e5706d3edd9134c4b26195c266355 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 3 May 2024 11:34:39 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20It=20works?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 3 ++ main.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ models/emoji.go | 11 +++++++ models/list.go | 8 +++++ models/paging.go | 8 +++++ 5 files changed, 114 insertions(+) create mode 100644 go.mod create mode 100644 main.go create mode 100644 models/emoji.go create mode 100644 models/list.go create mode 100644 models/paging.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f29d888 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module codeberg.org/danjones000/slackmojidl + +go 1.22.2 diff --git a/main.go b/main.go new file mode 100644 index 0000000..4da54e4 --- /dev/null +++ b/main.go @@ -0,0 +1,84 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "path" + + "codeberg.org/danjones000/slackmojidl/models" +) + +func die(v any) { + fmt.Fprintln(os.Stderr, v) + os.Exit(1) +} + +func main() { + if len(os.Args) < 2 { + die("Missing JSON file") + } + + if len(os.Args) < 3 { + die("Missing directory") + } + + dir := os.Args[2] + + by, err := os.ReadFile(os.Args[1]) + if err != nil { + die(err) + } + + list := models.List{} + err = json.Unmarshal(by, &list) + if err != nil { + die(err) + } + + for _, emoji := range list.Emoji { + dl(dir, emoji) + saveJson(dir, emoji) + } +} + +func dl(dir string, emoji models.Emoji) { + ext := path.Ext(emoji.Url) + outPath := path.Join(dir, emoji.Name+"."+ext) + out, err := os.Create(outPath) + if err != nil { + die(err) + } + defer out.Close() + + resp, err := http.Get(emoji.Url) + if err != nil { + die(err) + } + defer resp.Body.Close() + + _, err = io.Copy(out, resp.Body) + if err != nil { + die(err) + } + + fmt.Println("Saved", emoji.Name, "to", outPath) + +} + +func saveJson(dir string, emoji models.Emoji) { + outPath := path.Join(dir, emoji.Name+".json") + out, err := os.Create(outPath) + if err != nil { + die(err) + } + defer out.Close() + + enc := json.NewEncoder(out) + enc.SetIndent("", " ") + enc.Encode(emoji) + + fmt.Println("Saved data to ", outPath) +} diff --git a/models/emoji.go b/models/emoji.go new file mode 100644 index 0000000..fedff29 --- /dev/null +++ b/models/emoji.go @@ -0,0 +1,11 @@ +package models + +type Emoji struct { + Name string `json:"name"` + IsAlias uint16 `json:"is_alias"` + AliasFor string `json:"alias_for"` + Url string `json:"url"` + IsBad bool `json:"is_bad"` + Synonyms []string `json:"synonyms"` + UserDisplayName string `json:"user_display_name"` +} diff --git a/models/list.go b/models/list.go new file mode 100644 index 0000000..860350f --- /dev/null +++ b/models/list.go @@ -0,0 +1,8 @@ +package models + +type List struct { + Ok bool + Emoji []Emoji + DisabledEmoji []any `json:"disabled_emoji"` + Paging Paging +} diff --git a/models/paging.go b/models/paging.go new file mode 100644 index 0000000..5b8736a --- /dev/null +++ b/models/paging.go @@ -0,0 +1,8 @@ +package models + +type Paging struct { + Count uint32 + Total uint32 + Page uint32 + Pages uint32 +}