mirror of
https://github.com/daeuniverse/dae.git
synced 2025-07-05 07:50:06 +07:00
refactor: tag getter
This commit is contained in:
@ -133,20 +133,9 @@ func resolveFile(u *url.URL, configDir string) (b []byte, err error) {
|
|||||||
|
|
||||||
func ResolveSubscription(log *logrus.Logger, configDir string, subscription string) (tag string, nodes []string, err error) {
|
func ResolveSubscription(log *logrus.Logger, configDir string, subscription string) (tag string, nodes []string, err error) {
|
||||||
/// Get tag.
|
/// Get tag.
|
||||||
iColon := strings.Index(subscription, ":")
|
tag, subscription = common.GetTagFromLinkLikePlaintext(subscription)
|
||||||
if iColon == -1 {
|
|
||||||
goto parseUrl
|
|
||||||
}
|
|
||||||
// If first colon is like "://" in "scheme://linkbody", no tag is present.
|
|
||||||
if strings.HasPrefix(subscription[iColon:], "://") {
|
|
||||||
goto parseUrl
|
|
||||||
}
|
|
||||||
// Else tag is the part before colon.
|
|
||||||
tag = subscription[:iColon]
|
|
||||||
subscription = subscription[iColon+1:]
|
|
||||||
|
|
||||||
/// Parse url.
|
/// Parse url.
|
||||||
parseUrl:
|
|
||||||
u, err := url.Parse(subscription)
|
u, err := url.Parse(subscription)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return tag, nil, fmt.Errorf("failed to parse subscription \"%v\": %w", subscription, err)
|
return tag, nil, fmt.Errorf("failed to parse subscription \"%v\": %w", subscription, err)
|
||||||
|
@ -340,3 +340,16 @@ func MapKeys(m interface{}) (keys []string, err error) {
|
|||||||
}
|
}
|
||||||
return keys, nil
|
return keys, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetTagFromLinkLikePlaintext(link string) (tag string, afterTag string) {
|
||||||
|
iColon := strings.Index(link, ":")
|
||||||
|
if iColon == -1 {
|
||||||
|
return "", link
|
||||||
|
}
|
||||||
|
// If first colon is like "://" in "scheme://linkbody", no tag is present.
|
||||||
|
if strings.HasPrefix(link[iColon:], "://") {
|
||||||
|
return "", link
|
||||||
|
}
|
||||||
|
// Else tag is the part before colon.
|
||||||
|
return link[:iColon], link[iColon+1:]
|
||||||
|
}
|
||||||
|
@ -7,8 +7,8 @@ package dialer
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/v2rayA/dae/common"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type FromLinkCreator func(gOption *GlobalOption, iOption InstanceOption, link string) (dialer *Dialer, err error)
|
type FromLinkCreator func(gOption *GlobalOption, iOption InstanceOption, link string) (dialer *Dialer, err error)
|
||||||
@ -21,20 +21,7 @@ func FromLinkRegister(name string, creator FromLinkCreator) {
|
|||||||
|
|
||||||
func NewFromLink(gOption *GlobalOption, iOption InstanceOption, link string) (dialer *Dialer, err error) {
|
func NewFromLink(gOption *GlobalOption, iOption InstanceOption, link string) (dialer *Dialer, err error) {
|
||||||
/// Get overwritten name.
|
/// Get overwritten name.
|
||||||
var overwrittenName string
|
overwrittenName, link := common.GetTagFromLinkLikePlaintext(link)
|
||||||
iColon := strings.Index(link, ":")
|
|
||||||
if iColon == -1 {
|
|
||||||
goto parseUrl
|
|
||||||
}
|
|
||||||
// If first colon is like "://" in "scheme://linkbody", no tag is present.
|
|
||||||
if strings.HasPrefix(link[iColon:], "://") {
|
|
||||||
goto parseUrl
|
|
||||||
}
|
|
||||||
// Else tag is the part before colon.
|
|
||||||
overwrittenName = link[:iColon]
|
|
||||||
link = link[iColon+1:]
|
|
||||||
|
|
||||||
parseUrl:
|
|
||||||
u, err := url.Parse(link)
|
u, err := url.Parse(link)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Reference in New Issue
Block a user