|
|
@@ -14,8 +14,8 @@ import (
|
|
|
"github.com/gin-gonic/gin"
|
|
|
)
|
|
|
|
|
|
-var group2model2channels map[string]map[string][]int
|
|
|
-var channelsIDM map[int]*Channel
|
|
|
+var group2model2channels map[string]map[string][]int // enabled channel
|
|
|
+var channelsIDM map[int]*Channel // all channels include disabled
|
|
|
var channelSyncLock sync.RWMutex
|
|
|
|
|
|
func InitChannelCache() {
|
|
|
@@ -24,7 +24,7 @@ func InitChannelCache() {
|
|
|
}
|
|
|
newChannelId2channel := make(map[int]*Channel)
|
|
|
var channels []*Channel
|
|
|
- DB.Where("status = ?", common.ChannelStatusEnabled).Find(&channels)
|
|
|
+ DB.Find(&channels)
|
|
|
for _, channel := range channels {
|
|
|
newChannelId2channel[channel.Id] = channel
|
|
|
}
|
|
|
@@ -35,12 +35,13 @@ func InitChannelCache() {
|
|
|
groups[ability.Group] = true
|
|
|
}
|
|
|
newGroup2model2channels := make(map[string]map[string][]int)
|
|
|
- newChannelsIDM := make(map[int]*Channel)
|
|
|
for group := range groups {
|
|
|
newGroup2model2channels[group] = make(map[string][]int)
|
|
|
}
|
|
|
for _, channel := range channels {
|
|
|
- newChannelsIDM[channel.Id] = channel
|
|
|
+ if channel.Status != common.ChannelStatusEnabled {
|
|
|
+ continue // skip disabled channels
|
|
|
+ }
|
|
|
groups := strings.Split(channel.Group, ",")
|
|
|
for _, group := range groups {
|
|
|
models := strings.Split(channel.Models, ",")
|
|
|
@@ -57,7 +58,7 @@ func InitChannelCache() {
|
|
|
for group, model2channels := range newGroup2model2channels {
|
|
|
for model, channels := range model2channels {
|
|
|
sort.Slice(channels, func(i, j int) bool {
|
|
|
- return newChannelsIDM[channels[i]].GetPriority() > newChannelsIDM[channels[j]].GetPriority()
|
|
|
+ return newChannelId2channel[channels[i]].GetPriority() > newChannelId2channel[channels[j]].GetPriority()
|
|
|
})
|
|
|
newGroup2model2channels[group][model] = channels
|
|
|
}
|
|
|
@@ -65,7 +66,7 @@ func InitChannelCache() {
|
|
|
|
|
|
channelSyncLock.Lock()
|
|
|
group2model2channels = newGroup2model2channels
|
|
|
- channelsIDM = newChannelsIDM
|
|
|
+ channelsIDM = newChannelId2channel
|
|
|
channelSyncLock.Unlock()
|
|
|
common.SysLog("channels synced from database")
|
|
|
}
|
|
|
@@ -203,11 +204,35 @@ func CacheGetChannel(id int) (*Channel, error) {
|
|
|
|
|
|
c, ok := channelsIDM[id]
|
|
|
if !ok {
|
|
|
- return nil, fmt.Errorf("当前渠道# %d,已不存在", id)
|
|
|
+ return nil, fmt.Errorf("渠道# %d,已不存在", id)
|
|
|
+ }
|
|
|
+ if c.Status != common.ChannelStatusEnabled {
|
|
|
+ return nil, fmt.Errorf("渠道# %d,已被禁用", id)
|
|
|
}
|
|
|
return c, nil
|
|
|
}
|
|
|
|
|
|
+func CacheGetChannelInfo(id int) (*ChannelInfo, error) {
|
|
|
+ if !common.MemoryCacheEnabled {
|
|
|
+ channel, err := GetChannelById(id, true)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return &channel.ChannelInfo, nil
|
|
|
+ }
|
|
|
+ channelSyncLock.RLock()
|
|
|
+ defer channelSyncLock.RUnlock()
|
|
|
+
|
|
|
+ c, ok := channelsIDM[id]
|
|
|
+ if !ok {
|
|
|
+ return nil, fmt.Errorf("渠道# %d,已不存在", id)
|
|
|
+ }
|
|
|
+ if c.Status != common.ChannelStatusEnabled {
|
|
|
+ return nil, fmt.Errorf("渠道# %d,已被禁用", id)
|
|
|
+ }
|
|
|
+ return &c.ChannelInfo, nil
|
|
|
+}
|
|
|
+
|
|
|
func CacheUpdateChannelStatus(id int, status int) {
|
|
|
if !common.MemoryCacheEnabled {
|
|
|
return
|