mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-02-05 21:20:06 +00:00
fix list apis (#453)
This commit is contained in:
@@ -2,6 +2,7 @@ package singleton
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"slices"
|
||||
"sync"
|
||||
|
||||
"github.com/libdns/cloudflare"
|
||||
@@ -16,22 +17,54 @@ import (
|
||||
var (
|
||||
DDNSCache map[uint64]*model.DDNSProfile
|
||||
DDNSCacheLock sync.RWMutex
|
||||
DDNSList []*model.DDNSProfile
|
||||
)
|
||||
|
||||
func initDDNS() {
|
||||
OnDDNSUpdate()
|
||||
OnNameserverUpdate()
|
||||
}
|
||||
|
||||
func OnDDNSUpdate() {
|
||||
var ddns []*model.DDNSProfile
|
||||
DB.Find(&ddns)
|
||||
DDNSCacheLock.Lock()
|
||||
defer DDNSCacheLock.Unlock()
|
||||
DDNSCache = make(map[uint64]*model.DDNSProfile)
|
||||
for i := 0; i < len(ddns); i++ {
|
||||
DDNSCache[ddns[i].ID] = ddns[i]
|
||||
}
|
||||
DDNSCacheLock.Unlock()
|
||||
|
||||
UpdateDDNSList()
|
||||
OnNameserverUpdate()
|
||||
}
|
||||
|
||||
func OnDDNSUpdate(p *model.DDNSProfile) {
|
||||
DDNSCacheLock.Lock()
|
||||
defer DDNSCacheLock.Unlock()
|
||||
DDNSCache[p.ID] = p
|
||||
}
|
||||
|
||||
func OnDDNSDelete(id []uint64) {
|
||||
DDNSCacheLock.Lock()
|
||||
defer DDNSCacheLock.Unlock()
|
||||
|
||||
for _, i := range id {
|
||||
delete(DDNSCache, i)
|
||||
}
|
||||
}
|
||||
|
||||
func UpdateDDNSList() {
|
||||
DDNSCacheLock.RLock()
|
||||
defer DDNSCacheLock.RUnlock()
|
||||
|
||||
DDNSList = make([]*model.DDNSProfile, 0, len(DDNSCache))
|
||||
for _, p := range DDNSCache {
|
||||
DDNSList = append(DDNSList, p)
|
||||
}
|
||||
slices.SortFunc(DDNSList, func(a, b *model.DDNSProfile) int {
|
||||
if a.ID < b.ID {
|
||||
return -1
|
||||
} else if a.ID == b.ID {
|
||||
return 0
|
||||
}
|
||||
return 1
|
||||
})
|
||||
}
|
||||
|
||||
func OnNameserverUpdate() {
|
||||
|
||||
@@ -3,6 +3,7 @@ package singleton
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"slices"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -18,8 +19,9 @@ var (
|
||||
NotificationList map[uint64]map[uint64]*model.Notification // [NotificationGroupID][NotificationID] -> model.Notification
|
||||
NotificationIDToGroups map[uint64]map[uint64]struct{} // [NotificationID] -> NotificationGroupID
|
||||
|
||||
NotificationMap map[uint64]*model.Notification
|
||||
NotificationGroup map[uint64]string // [NotificationGroupID] -> [NotificationGroupName]
|
||||
NotificationMap map[uint64]*model.Notification
|
||||
NotificationListSorted []*model.Notification
|
||||
NotificationGroup map[uint64]string // [NotificationGroupID] -> [NotificationGroupName]
|
||||
|
||||
NotificationsLock sync.RWMutex
|
||||
NotificationGroupLock sync.RWMutex
|
||||
@@ -36,7 +38,6 @@ func InitNotification() {
|
||||
func loadNotifications() {
|
||||
InitNotification()
|
||||
NotificationsLock.Lock()
|
||||
defer NotificationsLock.Unlock()
|
||||
|
||||
groupNotifications := make(map[uint64][]uint64)
|
||||
var ngn []model.NotificationGroupNotification
|
||||
@@ -72,6 +73,27 @@ func loadNotifications() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NotificationsLock.Unlock()
|
||||
UpdateNotificationList()
|
||||
}
|
||||
|
||||
func UpdateNotificationList() {
|
||||
NotificationsLock.RLock()
|
||||
defer NotificationsLock.RUnlock()
|
||||
|
||||
NotificationListSorted = make([]*model.Notification, 0, len(NotificationMap))
|
||||
for _, n := range NotificationMap {
|
||||
NotificationListSorted = append(NotificationListSorted, n)
|
||||
}
|
||||
slices.SortFunc(NotificationListSorted, func(a, b *model.Notification) int {
|
||||
if a.ID < b.ID {
|
||||
return -1
|
||||
} else if a.ID == b.ID {
|
||||
return 0
|
||||
}
|
||||
return 1
|
||||
})
|
||||
}
|
||||
|
||||
// OnRefreshOrAddNotificationGroup 刷新通知方式组相关参数
|
||||
|
||||
Reference in New Issue
Block a user