// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . //go:build plus package models import ( "github.com/TeaOSLab/EdgeAPI/internal/senders/mediasenders" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/lists" ) // UpdateMessageMedias 设置当前所有可用的媒介 func (this *MessageMediaDAO) UpdateMessageMedias(tx *dbs.Tx, mediaDefinitions []*mediasenders.MediaDefinition) error { // 新的媒介信息 var mediaTypes = []string{} for index, m := range mediaDefinitions { var order = len(mediaDefinitions) - index var mediaType = m.Code mediaTypes = append(mediaTypes, mediaType) var name = m.Name var description = m.Description var userDescription = m.User var isOn = m.IsOn mediaId, err := this.Query(tx). ResultPk(). Attr("type", mediaType). FindInt64Col(0) if err != nil { return err } var op = NewMessageMediaOperator() if mediaId > 0 { op.Id = mediaId } op.Name = name op.Type = mediaType op.Description = description op.UserDescription = userDescription op.IsOn = isOn op.Order = order op.State = MessageMediaStateEnabled err = this.Save(tx, op) if err != nil { return err } } // 老的媒介信息 ones, err := this.Query(tx). FindAll() if err != nil { return err } for _, one := range ones { var mediaType = one.(*MessageMedia).Type if !lists.ContainsString(mediaTypes, mediaType) { err := this.Query(tx). Pk(one.(*MessageMedia).Id). Set("state", MessageMediaStateDisabled). UpdateQuickly() if err != nil { return err } } } return nil } // FindEnabledMediaWithType 根据类型查找媒介 func (this *MessageMediaDAO) FindEnabledMediaWithType(tx *dbs.Tx, mediaType string) (*MessageMedia, error) { one, err := this.Query(tx). Attr("type", mediaType). State(MessageMediaStateEnabled). Find() if one == nil || err != nil { return nil, err } return one.(*MessageMedia), nil }