Merge tag 'v1.14.3'

This commit is contained in:
Shtorm
2026-10-19 01:05:55 +03:00
321 changed files with 6750 additions and 5105 deletions
+29 -1
View File
@@ -14,9 +14,11 @@ import (
"github.com/sagernet/sing-box/experimental/locale"
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option"
"github.com/sagernet/sing-box/service/powerreport"
"github.com/sagernet/sing/common"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/json"
"github.com/sagernet/sing/common/x/list"
"github.com/sagernet/sing/service"
"github.com/sagernet/sing/service/pause"
)
@@ -30,6 +32,7 @@ type Instance struct {
trafficManager *trafficcontrol.Manager
cacheFile adapter.CacheFile
pauseManager pause.Manager
pauseCallback *list.Element[pause.Callback]
urlTestHistoryStorage *urltest.HistoryStorage
outboundManager adapter.OutboundManager
endpointManager adapter.EndpointManager
@@ -79,7 +82,7 @@ type OverrideOptions struct {
ExcludePackage []string
}
func (s *StartedService) newInstance(ctx context.Context, profileContent string, overrideOptions *OverrideOptions) (*Instance, error) {
func (s *StartedService) newInstance(ctx context.Context, profileContent string, overrideOptions *OverrideOptions, reloading bool) (*Instance, error) {
selectedLocale := locale.FromContext(ctx)
ctx, _ = locale.ContextWithLocale(s.ctx, selectedLocale.Locale)
ctx = service.ExtendContext(ctx)
@@ -139,6 +142,7 @@ func (s *StartedService) newInstance(ctx context.Context, profileContent string,
i.clashMode = service.PtrFromContext[clashmode.Manager](ctx)
i.trafficManager = service.PtrFromContext[trafficcontrol.Manager](ctx)
i.pauseManager = service.FromContext[pause.Manager](ctx)
i.registerPowerReport(ctx, reloading)
i.cacheFile = service.FromContext[adapter.CacheFile](ctx)
i.outboundManager = service.FromContext[adapter.OutboundManager](ctx)
i.endpointManager = service.FromContext[adapter.EndpointManager](ctx)
@@ -168,10 +172,34 @@ func (i *Instance) Start() error {
func (i *Instance) Close() error {
i.cancel()
if i.pauseCallback != nil {
i.pauseManager.UnregisterCallback(i.pauseCallback)
i.pauseCallback = nil
}
i.urlTestHistoryStorage.Close()
return i.instance.Close()
}
func (i *Instance) registerPowerReport(ctx context.Context, reloading bool) {
powerManager := service.FromContext[*powerreport.Manager](ctx)
if powerManager == nil {
return
}
recorder := powerManager.Recorder()
if recorder != nil {
recorder.RecordServiceStart(i.instance.CreatedAt(), reloading)
}
if i.pauseManager == nil {
return
}
i.pauseCallback = i.pauseManager.RegisterCallback(func(event int) {
recorder := powerManager.Recorder()
if recorder != nil {
recorder.RecordPauseEvent(event)
}
})
}
func (i *Instance) Box() *box.Box {
return i.instance
}