mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2024-11-15 05:31:18 +08:00
55 lines
1.0 KiB
Go
55 lines
1.0 KiB
Go
package provider
|
|
|
|
import (
|
|
"github.com/dlclark/regexp2"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type SubscriptionInfo struct {
|
|
Upload *int
|
|
Download *int
|
|
Total *int
|
|
Expire *int
|
|
}
|
|
|
|
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()
|
|
tmp, err := strconv.Atoi(group[1].String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
si.Upload = &tmp
|
|
tmp, err = strconv.Atoi(group[2].String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
si.Download = &tmp
|
|
tmp, err = strconv.Atoi(group[3].String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
si.Total = &tmp
|
|
|
|
match, _ = reExpire.FindStringMatch(str)
|
|
if match != nil {
|
|
group = match.Groups()
|
|
tmp, err = strconv.Atoi(group[1].String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
si.Expire = &tmp
|
|
}
|
|
|
|
return
|
|
}
|