reprogl

Форк
0
/
image.go 
91 строка · 1.7 Кб
1
package models
2

3
import (
4
	"database/sql"
5
	"encoding/json"
6

7
	"xelbot.com/reprogl/container"
8
)
9

10
type FeaturedImage struct {
11
	ImagePath  sql.NullString
12
	Width      sql.NullInt32
13
	PictureTag sql.NullString
14
	SrcSet     sql.NullString
15
	Alt        sql.NullString
16
}
17

18
type SrcImage struct {
19
	Path   string `json:"path"`
20
	Width  int    `json:"width"`
21
	Height int    `json:"height"`
22
	Length int    `json:"length"`
23
}
24

25
type SrcSetItem struct {
26
	Items    []SrcImage `json:"items"`
27
	MimeType string     `json:"type"`
28
}
29

30
func (i *FeaturedImage) HasImage() bool {
31
	return i.PictureTag.Valid || i.ImagePath.Valid
32
}
33

34
func (i *FeaturedImage) HasWebp() bool {
35
	if !i.SrcSet.Valid {
36
		return false
37
	}
38

39
	srcSet := i.DecodeSrcSet()
40
	data, found := srcSet["webp"]
41

42
	return found && len(data.Items) > 0
43
}
44

45
func (i *FeaturedImage) HasAvif() bool {
46
	if !i.SrcSet.Valid {
47
		return false
48
	}
49

50
	srcSet := i.DecodeSrcSet()
51
	data, found := srcSet["avif"]
52

53
	return found && len(data.Items) > 0
54
}
55

56
func (i *FeaturedImage) DecodeSrcSet() map[string]SrcSetItem {
57
	data := make(map[string]SrcSetItem)
58
	if i.SrcSet.Valid {
59
		raw := []byte(i.SrcSet.String)
60
		if json.Valid(raw) {
61
			err := json.Unmarshal(raw, &data)
62
			if err != nil {
63
				panic(err)
64
			}
65
		}
66
	}
67

68
	return data
69
}
70

71
func (i *FeaturedImage) SrcImageForOpenGraph() *SrcImage {
72
	srcSet := i.DecodeSrcSet()
73
	if srcSetItem, found := srcSet["origin"]; found {
74
		return &srcSetItem.Items[0]
75
	}
76

77
	return nil
78
}
79

80
func (i *FeaturedImage) GetRssEnclosure() *RssEnclosure {
81
	srcSet := i.DecodeSrcSet()
82
	if srcSetItem, found := srcSet["origin"]; found {
83
		return &RssEnclosure{
84
			Url:      container.GetConfig().CDNBaseURL + "/uploads/" + srcSetItem.Items[0].Path,
85
			Length:   srcSetItem.Items[0].Length,
86
			MimeType: srcSetItem.MimeType,
87
		}
88
	}
89

90
	return nil
91
}
92

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.