Browse Source

generate pack.json

kPherox 4 years ago
parent
commit
f9f8a02546
3 changed files with 114 additions and 14 deletions
  1. 36 0
      emoji-pack.go
  2. 66 6
      masto-emoji-pack.go
  3. 12 8
      options.go

+ 36 - 0
emoji-pack.go

@@ -0,0 +1,36 @@
+package main
+
+import (
+	"encoding/json"
+)
+
+type EmojiPack struct {
+	Files    map[string]string `json:"files"`
+	Metadata EmojiPackMetadata `json:"pack"`
+}
+
+type EmojiPackMetadata struct {
+	License          string `json:"license,omitempty"`
+	Homepage         string `json:"homepage,omitempty"`
+	Description      string `json:"description,omitempty"`
+	Fallback         string `json:"fallback-src,omitempty"`
+	FallbackChecksum string `json:"fallback-src-sha256,omitempty"`
+	AllowSharing     bool   `json:"share-files,omitempty"`
+}
+
+func NewEmojiPack() EmojiPack {
+	e := EmojiPack{}
+	e.Files = map[string]string{}
+	e.Metadata = EmojiPackMetadata{}
+	return e
+}
+
+func (p *EmojiPack) SetFiles(es Emojis) {
+	for _, e := range es {
+		p.Files[e.Shortcode] = e.Url
+	}
+}
+
+func (p *EmojiPack) Json() ([]byte, error) {
+	return json.Marshal(p)
+}

+ 66 - 6
masto-emoji-pack.go

@@ -2,16 +2,76 @@ package main
 
 import (
 	"fmt"
-	"log"
+	"os"
+	"path/filepath"
 )
 
+type Result struct {
+	Server string
+	Emojis Emojis
+	Error  error
+}
+
 func main() {
-	es, err := NewEmojiList("pl.kpherox.dev")
-	if err != nil {
-		log.Fatal(err)
+	opts := parseOptions()
+
+	c := make(chan Result, 5)
+	defer close(c)
+
+	for _, d := range opts.Servers {
+		go saveEmojiList(d, opts, c)
+	}
+
+	for _, _ = range opts.Servers {
+		if r := <-c; r.Error != nil {
+			fmt.Println(r.Error)
+		} else {
+			fmt.Printf("Success: %s, emoji count: %d\n", r.Server, len(r.Emojis))
+			//for _, e := range r.Emojis {
+			//    fmt.Printf("%s, %s, %s\n", e.Shortcode, e.Url, e.Category)
+			//}
+		}
+	}
+}
+
+func saveEmojiList(domain string, opts Options, c chan Result) {
+	r := Result{
+		Server: domain,
 	}
+	r.Emojis, r.Error = NewEmojiList(domain)
+	if r.Error != nil {
+		c <- r
+		return
+	}
+
+	p := NewEmojiPack()
+	p.SetFiles(r.Emojis)
+
+	var b []byte
+	b, r.Error = p.Json()
+	if r.Error != nil {
+		c <- r
+		return
+	}
+
+	// opts.OutputDir
+	out := filepath.Join(opts.OutputDir, domain)
 
-	for _, e := range es {
-		fmt.Printf("%s, %s, %s\n", e.Shortcode, e.Url, e.Category)
+	if _, err := os.Stat(out); os.IsNotExist(err) {
+		os.Mkdir(out, 0777)
 	}
+	var f *os.File
+	f, r.Error = os.Create(filepath.Join(out, "pack.json"))
+	if r.Error != nil {
+		c <- r
+		return
+	}
+
+	_, r.Error = f.Write(b)
+	if r.Error != nil {
+		c <- r
+		return
+	}
+
+	c <- r
 }

+ 12 - 8
options.go

@@ -4,15 +4,17 @@ import (
 	"errors"
 	"fmt"
 	"os"
+	"path/filepath"
 
 	"github.com/pborman/getopt/v2"
 )
 
 type Options struct {
-	Help    bool
-	Version bool
-	Servers []string
-	Split   bool
+	Help      bool
+	Version   bool
+	Servers   []string
+	Split     bool
+	OutputDir string
 }
 
 func Help() {
@@ -42,14 +44,16 @@ func parseOptions() (options Options) {
 	help := getopt.BoolLong("help", 'h', "show help message")
 	version := getopt.BoolLong("version", 'v', "show version info")
 	split := getopt.BoolLong("split", 's', "split emoji pack via category")
+	dir := getopt.StringLong("path", 'p', "/tmp", "generate emoji pack directory", "PATH")
 
 	Parse()
 
 	options = Options{
-		Help:    *help,
-		Version: *version,
-		Servers: getopt.Args(),
-		Split:   *split,
+		Help:      *help,
+		Version:   *version,
+		Servers:   getopt.Args(),
+		Split:     *split,
+		OutputDir: filepath.Clean(*dir),
 	}
 
 	if options.Help {