masto-emoji-pack.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. )
  6. type Result struct {
  7. Server string
  8. Output []string
  9. Error error
  10. }
  11. func main() {
  12. opts := parseOptions()
  13. c := make(chan Result, 5)
  14. defer close(c)
  15. for _, d := range opts.Servers {
  16. go saveEmojiList(d, opts, c)
  17. }
  18. for _, _ = range opts.Servers {
  19. if r := <-c; r.Error != nil {
  20. fmt.Println(r.Error)
  21. } else {
  22. fmt.Printf("Success: %s\n", r.Server)
  23. for _, name := range r.Output {
  24. fmt.Println(name)
  25. }
  26. }
  27. }
  28. }
  29. func saveEmojiList(domain string, opts Options, c chan Result) {
  30. r := Result{
  31. Server: domain,
  32. }
  33. var es Emojis
  34. es, r.Error = NewEmojiList(domain)
  35. if r.Error != nil {
  36. c <- r
  37. return
  38. }
  39. out := filepath.Join(opts.OutputDir, domain)
  40. if !opts.Split {
  41. p := NewEmojiPack()
  42. p.SetFiles(es)
  43. r.Error = p.GenerateEmojiPack(out)
  44. r.Output = append(r.Output, out)
  45. c <- r
  46. return
  47. }
  48. var ces = map[string]Emojis{}
  49. for _, e := range es {
  50. ces[e.Category] = append(ces[e.Category], e)
  51. }
  52. for c, es := range ces {
  53. p := NewEmojiPack()
  54. p.SetFiles(es)
  55. dir := filepath.Join(out, c)
  56. if err := p.GenerateEmojiPack(dir); err != nil {
  57. r.Error = err
  58. }
  59. r.Output = append(r.Output, dir)
  60. }
  61. c <- r
  62. }