mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-24 15:41:55 +08:00
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package qqwry
|
|
|
|
import (
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/sinlov/qqwry-golang/qqwry"
|
|
log "unknwon.dev/clog/v2"
|
|
)
|
|
|
|
type Database struct {
|
|
wry *qqwry.QQwry
|
|
}
|
|
|
|
// Area returns IpArea according to ip
|
|
func (db *Database) Area(ip string) string {
|
|
defer func() {
|
|
_ = recover()
|
|
}()
|
|
if db.wry == nil {
|
|
return ""
|
|
}
|
|
ipData := db.wry.SearchByIPv4(ip)
|
|
if ipData.Area == " CZ88.NET" {
|
|
return ipData.Country
|
|
}
|
|
return ipData.Country + " " + ipData.Area
|
|
}
|
|
|
|
var wry *qqwry.QQwry
|
|
var once sync.Once
|
|
|
|
func checkUpdate() {
|
|
info, err := os.Stat("qqwry.dat")
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
err := download()
|
|
if err != nil {
|
|
log.Warn("Download qqwry.dat failed, caused by:%v, recommend to download it by yourself otherwise the `IpArea` will be null", err)
|
|
}
|
|
}
|
|
} else if -time.Until(info.ModTime()) > 7*24*time.Hour {
|
|
log.Info("Updating qqwry.dat...")
|
|
err := download()
|
|
if err != nil {
|
|
log.Warn("Update qqwry.dat failed, please download qqwry.dat by yourself")
|
|
}
|
|
}
|
|
}
|
|
|
|
func New() *Database {
|
|
once.Do(func() {
|
|
checkUpdate()
|
|
qqwry.DatData.FilePath = "qqwry.dat"
|
|
init := qqwry.DatData.InitDatFile()
|
|
if v, ok := init.(error); ok {
|
|
if v != nil {
|
|
log.Warn("qqwry init failed")
|
|
wry = nil
|
|
}
|
|
}
|
|
wry = qqwry.NewQQwry()
|
|
})
|
|
return &Database{wry: wry}
|
|
}
|