clash/adapter/provider/subscription_info.go

58 lines
1.1 KiB
Go
Raw Normal View History

2022-11-04 18:24:08 +00:00
package provider
import (
"github.com/dlclark/regexp2"
"strconv"
"strings"
)
type SubscriptionInfo struct {
Upload uint64
Download uint64
Total uint64
Expire uint64
2022-11-04 18:24:08 +00:00
}
func NewSubscriptionInfo(str string) (si *SubscriptionInfo, err error) {
si = &SubscriptionInfo{}
str = strings.ToLower(str)
reTraffic := regexp2.MustCompile("upload=(\\d+); download=(\\d+); total=(\\d+)", 0)
reExpire := regexp2.MustCompile("expire=(\\d+)", 0)
match, err := reTraffic.FindStringMatch(str)
if err != nil || match == nil {
return nil, err
}
group := match.Groups()
si.Upload, err = str2uint64(group[1].String())
2022-11-04 18:24:08 +00:00
if err != nil {
return nil, err
}
si.Download, err = str2uint64(group[2].String())
2022-11-04 18:24:08 +00:00
if err != nil {
return nil, err
}
si.Total, err = str2uint64(group[3].String())
2022-11-04 18:24:08 +00:00
if err != nil {
return nil, err
}
match, _ = reExpire.FindStringMatch(str)
if match != nil {
group = match.Groups()
si.Expire, err = str2uint64(group[1].String())
2022-11-04 18:24:08 +00:00
if err != nil {
return nil, err
}
}
return
}
func str2uint64(str string) (uint64, error) {
i, err := strconv.ParseInt(str, 10, 64)
return uint64(i), err
}