Skip to content

Commit ac5b5cf

Browse files
committed
feat: sub file as sublink fallback
1 parent 3f4cceb commit ac5b5cf

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

common/subscription/subscription.go

+33
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,20 @@ func ResolveSubscription(log *logrus.Logger, client *http.Client, configDir stri
154154
req *http.Request
155155
resp *http.Response
156156
)
157+
158+
var save_to_file bool = false
159+
157160
switch u.Scheme {
158161
case "file":
159162
b, err = ResolveFile(u, configDir)
160163
if err != nil {
161164
return "", nil, err
162165
}
163166
goto resolve
167+
case "http-file", "https-file":
168+
save_to_file = true
169+
subscription = strings.Replace(subscription, "-file", "", 1)
170+
break
164171
default:
165172
}
166173
req, err = http.NewRequest("GET", subscription, nil)
@@ -170,13 +177,39 @@ func ResolveSubscription(log *logrus.Logger, client *http.Client, configDir stri
170177
req.Header.Set("User-Agent", fmt.Sprintf("dae/%v (like v2rayA/1.0 WebRequestHelper) (like v2rayN/1.0 WebRequestHelper)", config.Version))
171178
resp, err = client.Do(req)
172179
if err != nil {
180+
if save_to_file {
181+
// fail to fetch, try to read from file
182+
u.Host = tag + ".sub"
183+
u.Path = ""
184+
b, err = ResolveFile(u, configDir)
185+
186+
if err != nil {
187+
return "", nil, err
188+
}
189+
goto resolve
190+
}
191+
173192
return "", nil, err
174193
}
175194
defer resp.Body.Close()
176195
b, err = io.ReadAll(resp.Body)
177196
if err != nil {
178197
return "", nil, err
179198
}
199+
200+
if save_to_file {
201+
path := filepath.Join(configDir, tag+".sub")
202+
file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
203+
if err != nil {
204+
return "", nil, err
205+
}
206+
defer file.Close()
207+
208+
_, err = file.Write(b)
209+
if err != nil {
210+
return "", nil, err
211+
}
212+
}
180213
resolve:
181214
if nodes, err = ResolveSubscriptionAsSIP008(log, b); err == nil {
182215
return tag, nodes, nil

0 commit comments

Comments
 (0)