mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-05-13 09:36:05 +00:00
chore: fix remarks shadowrocket subscription (#4247)
This commit is contained in:
parent
e20d73ba7e
commit
9f06bffbea
3 changed files with 54 additions and 41 deletions
|
|
@ -37,6 +37,8 @@ const lastOnlineMs = Number(subData.lastOnline || 0);
|
||||||
const subUrl = subData.subUrl || '';
|
const subUrl = subData.subUrl || '';
|
||||||
const subJsonUrl = subData.subJsonUrl || '';
|
const subJsonUrl = subData.subJsonUrl || '';
|
||||||
const subClashUrl = subData.subClashUrl || '';
|
const subClashUrl = subData.subClashUrl || '';
|
||||||
|
const subTitle = subData.subTitle || '';
|
||||||
|
const subSupportUrl = subData.subSupportUrl || '';
|
||||||
const links = Array.isArray(subData.links) ? subData.links : [];
|
const links = Array.isArray(subData.links) ? subData.links : [];
|
||||||
// Panel's "Calendar Type" setting; controls whether expiry / lastOnline
|
// Panel's "Calendar Type" setting; controls whether expiry / lastOnline
|
||||||
// render in Gregorian or Jalali on this standalone subscription page.
|
// render in Gregorian or Jalali on this standalone subscription page.
|
||||||
|
|
@ -102,7 +104,14 @@ function linkName(link, idx) {
|
||||||
|
|
||||||
// iOS deep links — taken verbatim from the legacy subpage. Each
|
// iOS deep links — taken verbatim from the legacy subpage. Each
|
||||||
// client expects the sub URL in a slightly different param name.
|
// client expects the sub URL in a slightly different param name.
|
||||||
const shadowrocketUrl = computed(() => `sub://${btoa(subUrl)}`);
|
const shadowrocketUrl = computed(() => {
|
||||||
|
if (!subUrl) return '';
|
||||||
|
const separator = subUrl.includes('?') ? '&' : '?';
|
||||||
|
const rawUrl = subUrl + separator + 'flag=shadowrocket';
|
||||||
|
const base64Url = encodeURIComponent(btoa(rawUrl));
|
||||||
|
const remark = encodeURIComponent(subTitle || sId || 'Subscription');
|
||||||
|
return `shadowrocket://add/sub/${base64Url}?remark=${remark}`;
|
||||||
|
});
|
||||||
const v2boxUrl = computed(() => `v2box://install-sub?url=${encodeURIComponent(subUrl)}&name=${encodeURIComponent(sId)}`);
|
const v2boxUrl = computed(() => `v2box://install-sub?url=${encodeURIComponent(subUrl)}&name=${encodeURIComponent(sId)}`);
|
||||||
const streisandUrl = computed(() => `streisand://import/${encodeURIComponent(subUrl)}`);
|
const streisandUrl = computed(() => `streisand://import/${encodeURIComponent(subUrl)}`);
|
||||||
const v2raytunUrl = computed(() => subUrl);
|
const v2raytunUrl = computed(() => subUrl);
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ func (a *SUBController) subs(c *gin.Context) {
|
||||||
basePath = "/"
|
basePath = "/"
|
||||||
}
|
}
|
||||||
basePathStr := basePath.(string)
|
basePathStr := basePath.(string)
|
||||||
page := a.subService.BuildPageData(subId, hostHeader, traffic, lastOnline, subs, subURL, subJsonURL, subClashURL, basePathStr)
|
page := a.subService.BuildPageData(subId, hostHeader, traffic, lastOnline, subs, subURL, subJsonURL, subClashURL, basePathStr, a.subTitle, a.subSupportUrl)
|
||||||
a.serveSubPage(c, basePathStr, page)
|
a.serveSubPage(c, basePathStr, page)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1413,25 +1413,27 @@ func searchHost(headers any) string {
|
||||||
// PageData is a view model for subpage.html
|
// PageData is a view model for subpage.html
|
||||||
// PageData contains data for rendering the subscription information page.
|
// PageData contains data for rendering the subscription information page.
|
||||||
type PageData struct {
|
type PageData struct {
|
||||||
Host string
|
Host string
|
||||||
BasePath string
|
BasePath string
|
||||||
SId string
|
SId string
|
||||||
Enabled bool
|
Enabled bool
|
||||||
Download string
|
Download string
|
||||||
Upload string
|
Upload string
|
||||||
Total string
|
Total string
|
||||||
Used string
|
Used string
|
||||||
Remained string
|
Remained string
|
||||||
Expire int64
|
Expire int64
|
||||||
LastOnline int64
|
LastOnline int64
|
||||||
Datepicker string
|
Datepicker string
|
||||||
DownloadByte int64
|
DownloadByte int64
|
||||||
UploadByte int64
|
UploadByte int64
|
||||||
TotalByte int64
|
TotalByte int64
|
||||||
SubUrl string
|
SubUrl string
|
||||||
SubJsonUrl string
|
SubJsonUrl string
|
||||||
SubClashUrl string
|
SubClashUrl string
|
||||||
Result []string
|
SubTitle string
|
||||||
|
SubSupportUrl string
|
||||||
|
Result []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResolveRequest extracts scheme and host info from request/headers consistently.
|
// ResolveRequest extracts scheme and host info from request/headers consistently.
|
||||||
|
|
@ -1545,7 +1547,7 @@ func (s *SubService) joinPathWithID(basePath, subId string) string {
|
||||||
|
|
||||||
// BuildPageData parses header and prepares the template view model.
|
// BuildPageData parses header and prepares the template view model.
|
||||||
// BuildPageData constructs page data for rendering the subscription information page.
|
// BuildPageData constructs page data for rendering the subscription information page.
|
||||||
func (s *SubService) BuildPageData(subId string, hostHeader string, traffic xray.ClientTraffic, lastOnline int64, subs []string, subURL, subJsonURL, subClashURL string, basePath string) PageData {
|
func (s *SubService) BuildPageData(subId string, hostHeader string, traffic xray.ClientTraffic, lastOnline int64, subs []string, subURL, subJsonURL, subClashURL string, basePath string, subTitle string, subSupportUrl string) PageData {
|
||||||
download := common.FormatTraffic(traffic.Down)
|
download := common.FormatTraffic(traffic.Down)
|
||||||
upload := common.FormatTraffic(traffic.Up)
|
upload := common.FormatTraffic(traffic.Up)
|
||||||
total := "∞"
|
total := "∞"
|
||||||
|
|
@ -1563,25 +1565,27 @@ func (s *SubService) BuildPageData(subId string, hostHeader string, traffic xray
|
||||||
}
|
}
|
||||||
|
|
||||||
return PageData{
|
return PageData{
|
||||||
Host: hostHeader,
|
Host: hostHeader,
|
||||||
BasePath: basePath,
|
BasePath: basePath,
|
||||||
SId: subId,
|
SId: subId,
|
||||||
Enabled: traffic.Enable,
|
Enabled: traffic.Enable,
|
||||||
Download: download,
|
Download: download,
|
||||||
Upload: upload,
|
Upload: upload,
|
||||||
Total: total,
|
Total: total,
|
||||||
Used: used,
|
Used: used,
|
||||||
Remained: remained,
|
Remained: remained,
|
||||||
Expire: traffic.ExpiryTime / 1000,
|
Expire: traffic.ExpiryTime / 1000,
|
||||||
LastOnline: lastOnline,
|
LastOnline: lastOnline,
|
||||||
Datepicker: datepicker,
|
Datepicker: datepicker,
|
||||||
DownloadByte: traffic.Down,
|
DownloadByte: traffic.Down,
|
||||||
UploadByte: traffic.Up,
|
UploadByte: traffic.Up,
|
||||||
TotalByte: traffic.Total,
|
TotalByte: traffic.Total,
|
||||||
SubUrl: subURL,
|
SubUrl: subURL,
|
||||||
SubJsonUrl: subJsonURL,
|
SubJsonUrl: subJsonURL,
|
||||||
SubClashUrl: subClashURL,
|
SubClashUrl: subClashURL,
|
||||||
Result: subs,
|
SubTitle: subTitle,
|
||||||
|
SubSupportUrl: subSupportUrl,
|
||||||
|
Result: subs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue