content.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package modules
  2. import (
  3. "fmt"
  4. "index/suffixarray"
  5. "path/filepath"
  6. "regexp"
  7. "strings"
  8. "gopkg.in/yaml.v2"
  9. )
  10. type ContentData struct {
  11. Data []GroupData `yaml:"data"`
  12. }
  13. type GroupData struct {
  14. Title string `yaml:"title"`
  15. Columns []ColumnData `yaml:"columns"`
  16. Icon string `yaml:"icon"`
  17. }
  18. type ColumnData struct {
  19. Title string `yaml:"title"`
  20. Bookmarks []BookmarkData `yaml:"bookmarks"`
  21. Icon string `yaml:"icon"`
  22. }
  23. type BookmarkData struct {
  24. Name string `yaml:"name"`
  25. Url string `yaml:"url"`
  26. UrlLocal string `yaml:"urlLocal"`
  27. Icon string `yaml:"icon"`
  28. IsLocal bool `yaml:"isLocal"`
  29. }
  30. func LoadContent() ContentData {
  31. emptyData := ContentData{}
  32. yamlFile, err := ReadFile(filepath.Join("data", "data.yaml"))
  33. if err != nil {
  34. fmt.Printf("Error reading YAML file: %s\n", err)
  35. return emptyData
  36. }
  37. var data ContentData
  38. err = yaml.Unmarshal(yamlFile, &data)
  39. if err != nil {
  40. fmt.Printf("Error parsing YAML file: %s\n", err)
  41. return emptyData
  42. }
  43. return data
  44. }
  45. func contains(str string, subStrs ...string) bool {
  46. if len(subStrs) == 0 {
  47. return true
  48. }
  49. r := regexp.MustCompile(strings.Join(subStrs, "|"))
  50. index := suffixarray.New([]byte(str))
  51. res := index.FindAllIndex(r, -1)
  52. exists := make(map[string]int)
  53. for _, v := range subStrs {
  54. exists[v] = 1
  55. }
  56. for _, pair := range res {
  57. s := str[pair[0]:pair[1]]
  58. exists[s] = exists[s] + 1
  59. }
  60. for _, v := range exists {
  61. if v == 1 {
  62. return false
  63. }
  64. }
  65. return true
  66. }
  67. func (b *BookmarkData) IsSVG() bool {
  68. return strings.Contains(b.Icon, ".svg")
  69. }
  70. func (b *BookmarkData) IsImage() bool {
  71. return contains(b.Icon, ".jpg", ".jpeg", ".png", ".gif", ".apng", ".bmp", ".ico", ".webp")
  72. }
  73. func (b *GroupData) IsSVG() bool {
  74. return strings.Contains(b.Icon, ".svg")
  75. }
  76. func (b *GroupData) IsImage() bool {
  77. return contains(b.Icon, ".jpg", ".jpeg", ".png", ".gif", ".apng", ".bmp", ".ico", ".webp")
  78. }
  79. func (b *ColumnData) IsSVG() bool {
  80. return strings.Contains(b.Icon, ".svg")
  81. }
  82. func (b *ColumnData) IsImage() bool {
  83. return contains(b.Icon, ".jpg", ".jpeg", ".png", ".gif", ".apng", ".bmp", ".ico", ".webp")
  84. }