masto-emoji-pack.go 1.2 KB

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