浏览代码

sub template enhancements

Alireza Ahmadi 16 小时之前
父节点
当前提交
bc0518391e
共有 2 个文件被更改,包括 19 次插入49 次删除
  1. 4 2
      sub/subController.go
  2. 15 47
      sub/subService.go

+ 4 - 2
sub/subController.go

@@ -2,6 +2,7 @@ package sub
 
 import (
 	"encoding/base64"
+	"fmt"
 	"strings"
 	"x-ui/config"
 
@@ -59,7 +60,7 @@ func (a *SUBController) initRouter(g *gin.RouterGroup) {
 func (a *SUBController) subs(c *gin.Context) {
 	subId := c.Param("subid")
 	scheme, host, hostWithPort, hostHeader := a.subService.ResolveRequest(c)
-	subs, header, lastOnline, err := a.subService.GetSubs(subId, host)
+	subs, lastOnline, traffic, err := a.subService.GetSubs(subId, host)
 	if err != nil || len(subs) == 0 {
 		c.String(400, "Error!")
 	} else {
@@ -73,7 +74,7 @@ func (a *SUBController) subs(c *gin.Context) {
 		if strings.Contains(strings.ToLower(accept), "text/html") || c.Query("html") == "1" || strings.EqualFold(c.Query("view"), "html") {
 			// Build page data in service
 			subURL, subJsonURL := a.subService.BuildURLs(scheme, hostWithPort, a.subPath, a.subJsonPath, subId)
-			page := a.subService.BuildPageData(subId, hostHeader, header, lastOnline, subs, subURL, subJsonURL)
+			page := a.subService.BuildPageData(subId, hostHeader, traffic, lastOnline, subs, subURL, subJsonURL)
 			c.HTML(200, "subscription.html", gin.H{
 				"title":        "subscription.title",
 				"cur_ver":      config.GetVersion(),
@@ -99,6 +100,7 @@ func (a *SUBController) subs(c *gin.Context) {
 		}
 
 		// Add headers
+		header := fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", traffic.Up, traffic.Down, traffic.Total, traffic.ExpiryTime/1000)
 		a.ApplyCommonHeaders(c, header, a.updateInterval, a.subTitle)
 
 		if a.subEncrypt {

+ 15 - 47
sub/subService.go

@@ -37,20 +37,19 @@ func NewSubService(showInfo bool, remarkModel string) *SubService {
 	}
 }
 
-func (s *SubService) GetSubs(subId string, host string) ([]string, string, int64, error) {
+func (s *SubService) GetSubs(subId string, host string) ([]string, int64, xray.ClientTraffic, error) {
 	s.address = host
 	var result []string
-	var header string
 	var traffic xray.ClientTraffic
 	var lastOnline int64
 	var clientTraffics []xray.ClientTraffic
 	inbounds, err := s.getInboundsBySubId(subId)
 	if err != nil {
-		return nil, "", 0, err
+		return nil, 0, traffic, err
 	}
 
 	if len(inbounds) == 0 {
-		return nil, "", 0, common.NewError("No inbounds found with ", subId)
+		return nil, 0, traffic, common.NewError("No inbounds found with ", subId)
 	}
 
 	s.datepicker, err = s.settingService.GetDatepicker()
@@ -108,8 +107,7 @@ func (s *SubService) GetSubs(subId string, host string) ([]string, string, int64
 			}
 		}
 	}
-	header = fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", traffic.Up, traffic.Down, traffic.Total, traffic.ExpiryTime/1000)
-	return result, header, lastOnline, nil
+	return result, lastOnline, traffic, nil
 }
 
 func (s *SubService) getInboundsBySubId(subId string) ([]*model.Inbound, error) {
@@ -1090,45 +1088,15 @@ func (s *SubService) BuildURLs(scheme, hostWithPort, subPath, subJsonPath, subId
 }
 
 // BuildPageData parses header and prepares the template view model.
-func (s *SubService) BuildPageData(subId, hostHeader, header string, lastOnline int64, subs []string, subURL, subJsonURL string) PageData {
-	// Parse header values
-	var uploadByte, downloadByte, totalByte, expire int64
-	parts := strings.Split(header, ";")
-	for _, p := range parts {
-		kv := strings.Split(strings.TrimSpace(p), "=")
-		if len(kv) != 2 {
-			continue
-		}
-		key := strings.ToLower(strings.TrimSpace(kv[0]))
-		val := strings.TrimSpace(kv[1])
-		switch key {
-		case "upload":
-			if v, err := parseInt64(val); err == nil {
-				uploadByte = v
-			}
-		case "download":
-			if v, err := parseInt64(val); err == nil {
-				downloadByte = v
-			}
-		case "total":
-			if v, err := parseInt64(val); err == nil {
-				totalByte = v
-			}
-		case "expire":
-			if v, err := parseInt64(val); err == nil {
-				expire = v
-			}
-		}
-	}
-
-	download := common.FormatTraffic(downloadByte)
-	upload := common.FormatTraffic(uploadByte)
+func (s *SubService) BuildPageData(subId string, hostHeader string, traffic xray.ClientTraffic, lastOnline int64, subs []string, subURL, subJsonURL string) PageData {
+	download := common.FormatTraffic(traffic.Down)
+	upload := common.FormatTraffic(traffic.Up)
 	total := "∞"
-	used := common.FormatTraffic(uploadByte + downloadByte)
+	used := common.FormatTraffic(traffic.Up + traffic.Down)
 	remained := ""
-	if totalByte > 0 {
-		total = common.FormatTraffic(totalByte)
-		left := totalByte - (uploadByte + downloadByte)
+	if traffic.Total > 0 {
+		total = common.FormatTraffic(traffic.Total)
+		left := traffic.Total - (traffic.Up + traffic.Down)
 		if left < 0 {
 			left = 0
 		}
@@ -1149,12 +1117,12 @@ func (s *SubService) BuildPageData(subId, hostHeader, header string, lastOnline
 		Total:        total,
 		Used:         used,
 		Remained:     remained,
-		Expire:       expire,
+		Expire:       traffic.ExpiryTime / 1000,
 		LastOnline:   lastOnline,
 		Datepicker:   datepicker,
-		DownloadByte: downloadByte,
-		UploadByte:   uploadByte,
-		TotalByte:    totalByte,
+		DownloadByte: traffic.Down,
+		UploadByte:   traffic.Up,
+		TotalByte:    traffic.Total,
 		SubUrl:       subURL,
 		SubJsonUrl:   subJsonURL,
 		Result:       subs,