| package model |
|
|
| import ( |
| "github.com/QuantumNous/new-api/common" |
| "github.com/QuantumNous/new-api/setting/ratio_setting" |
| ) |
|
|
| func IsChannelEnabledForGroupModel(group string, modelName string, channelID int) bool { |
| if group == "" || modelName == "" || channelID <= 0 { |
| return false |
| } |
| if !common.MemoryCacheEnabled { |
| return isChannelEnabledForGroupModelDB(group, modelName, channelID) |
| } |
|
|
| channelSyncLock.RLock() |
| defer channelSyncLock.RUnlock() |
|
|
| if group2model2channels == nil { |
| return false |
| } |
|
|
| if isChannelIDInList(group2model2channels[group][modelName], channelID) { |
| return true |
| } |
| normalized := ratio_setting.FormatMatchingModelName(modelName) |
| if normalized != "" && normalized != modelName { |
| return isChannelIDInList(group2model2channels[group][normalized], channelID) |
| } |
| return false |
| } |
|
|
| func IsChannelEnabledForAnyGroupModel(groups []string, modelName string, channelID int) bool { |
| if len(groups) == 0 { |
| return false |
| } |
| for _, g := range groups { |
| if IsChannelEnabledForGroupModel(g, modelName, channelID) { |
| return true |
| } |
| } |
| return false |
| } |
|
|
| func isChannelEnabledForGroupModelDB(group string, modelName string, channelID int) bool { |
| var count int64 |
| err := DB.Model(&Ability{}). |
| Where(commonGroupCol+" = ? and model = ? and channel_id = ? and enabled = ?", group, modelName, channelID, true). |
| Count(&count).Error |
| if err == nil && count > 0 { |
| return true |
| } |
| normalized := ratio_setting.FormatMatchingModelName(modelName) |
| if normalized == "" || normalized == modelName { |
| return false |
| } |
| count = 0 |
| err = DB.Model(&Ability{}). |
| Where(commonGroupCol+" = ? and model = ? and channel_id = ? and enabled = ?", group, normalized, channelID, true). |
| Count(&count).Error |
| return err == nil && count > 0 |
| } |
|
|
| func isChannelIDInList(list []int, channelID int) bool { |
| for _, id := range list { |
| if id == channelID { |
| return true |
| } |
| } |
| return false |
| } |
|
|