package sub import ( "strings" "github.com/mhsanaei/3x-ui/v3/database/model" "github.com/mhsanaei/3x-ui/v3/web/service" ) type LinkProvider struct { settingService service.SettingService } func NewLinkProvider() *LinkProvider { return &LinkProvider{} } func (p *LinkProvider) build(host string) *SubService { showInfo, _ := p.settingService.GetSubShowInfo() rModel, err := p.settingService.GetRemarkModel() if err != nil { rModel = "-ieo" } svc := NewSubService(showInfo, rModel) svc.PrepareForRequest(host) return svc } func (p *LinkProvider) SubLinksForSubId(host, subId string) ([]string, error) { svc := p.build(host) links, _, _, err := svc.GetSubs(subId, host) if err != nil { return nil, err } out := make([]string, 0, len(links)) for _, l := range links { out = append(out, splitLinkLines(l)...) } return out, nil } func (p *LinkProvider) LinksForClient(host string, inbound *model.Inbound, email string) []string { svc := p.build(host) return splitLinkLines(svc.GetLink(inbound, email)) } func splitLinkLines(raw string) []string { if raw == "" { return nil } parts := strings.Split(raw, "\n") out := make([]string, 0, len(parts)) for _, p := range parts { if p = strings.TrimSpace(p); p != "" { out = append(out, p) } } return out }