You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.4 KiB
60 lines
1.4 KiB
package operate |
|
|
|
import ( |
|
"encoding/json" |
|
|
|
"go-common/app/interface/main/app-card/model" |
|
"go-common/library/log" |
|
) |
|
|
|
type Follow struct { |
|
ID int64 `json:"id,omitempty"` |
|
Type string `json:"type,omitempty"` |
|
Title string `json:"title,omitempty"` |
|
Content json.RawMessage `json:"content,omitempty"` |
|
// extra |
|
Items []*Follow `json:"items,omitempty"` |
|
Goto model.Gt `json:"goto,omitempty"` |
|
Pid int64 `json:"pid,omitempty"` |
|
Tid int64 `json:"tid,omitempty"` |
|
} |
|
|
|
func (c *Follow) Change() { |
|
switch c.Type { |
|
case "upper", "channel_three": |
|
var contents []*struct { |
|
Ctype string `json:"ctype,omitempty"` |
|
Cvalue int64 `json:"cvalue,omitempty"` |
|
} |
|
if err := json.Unmarshal(c.Content, &contents); err != nil { |
|
log.Error("%+v", err) |
|
return |
|
} |
|
items := make([]*Follow, 0, len(contents)) |
|
for _, content := range contents { |
|
item := &Follow{Type: content.Ctype, Pid: content.Cvalue} |
|
switch content.Ctype { |
|
case "mid": |
|
item.Goto = model.GotoMid |
|
case "channel_id": |
|
item.Goto = model.GotoTag |
|
} |
|
items = append(items, item) |
|
} |
|
if len(items) < 3 { |
|
return |
|
} |
|
c.Items = items |
|
case "channel_single": |
|
var content struct { |
|
Aid int64 `json:"aid"` |
|
ChannelID int64 `json:"channel_id"` |
|
} |
|
if err := json.Unmarshal(c.Content, &content); err != nil { |
|
log.Error("%+v", err) |
|
return |
|
} |
|
c.Pid = content.Aid |
|
c.Tid = content.ChannelID |
|
} |
|
}
|
|
|