added real mfc preview
This commit is contained in:
parent
125a3018ae
commit
baa66cabcf
@ -1,2 +1,2 @@
|
|||||||
HTTPS_ENABLED=0
|
HTTPS_ENABLED=1
|
||||||
AUTH_RP_ORIGINS=https://l14pbbk95100006.tegdssd.de:9999,https://l14pbbk95100006.tegdssd.de:5173,https://localhost:9999,https://127.0.0.1:9999,https://10.0.1.25:9999,http://localhost:5173,http://127.0.0.1:5173,http://10.0.1.25:5173
|
AUTH_RP_ORIGINS=https://l14pbbk95100006.tegdssd.de:9999,https://l14pbbk95100006.tegdssd.de:5173,https://localhost:9999,https://127.0.0.1:9999,https://10.0.1.25:9999,http://localhost:5173,http://127.0.0.1:5173,http://10.0.1.25:5173
|
||||||
@ -51,15 +51,18 @@ func RecordStreamMFC(
|
|||||||
time.Sleep(5 * time.Second)
|
time.Sleep(5 * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
if job != nil && strings.TrimSpace(mfc.AvatarURL) != "" {
|
if job != nil {
|
||||||
|
img := strings.TrimSpace(mfc.PreviewImageURL())
|
||||||
|
if img != "" {
|
||||||
jobsMu.Lock()
|
jobsMu.Lock()
|
||||||
job.ModelImageURL = strings.TrimSpace(mfc.AvatarURL)
|
job.ModelImageURL = img
|
||||||
job.Avatar = strings.TrimSpace(mfc.AvatarURL)
|
job.Avatar = img
|
||||||
job.PreviewState = "public"
|
job.PreviewState = "public"
|
||||||
jobsMu.Unlock()
|
jobsMu.Unlock()
|
||||||
|
|
||||||
_ = publishJobSnapshot(job.ID)
|
_ = publishJobSnapshot(job.ID)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ✅ erst jetzt die Video URL holen (weil public)
|
// ✅ erst jetzt die Video URL holen (weil public)
|
||||||
stream, err := mfc.GetSelectedStream(ctx, false, hc.userAgent)
|
stream, err := mfc.GetSelectedStream(ctx, false, hc.userAgent)
|
||||||
@ -82,9 +85,9 @@ func RecordStreamMFC(
|
|||||||
job.PreviewCookie = ""
|
job.PreviewCookie = ""
|
||||||
job.PreviewUA = hc.userAgent
|
job.PreviewUA = hc.userAgent
|
||||||
|
|
||||||
if strings.TrimSpace(mfc.AvatarURL) != "" {
|
if img := strings.TrimSpace(mfc.PreviewImageURL()); img != "" {
|
||||||
job.ModelImageURL = strings.TrimSpace(mfc.AvatarURL)
|
job.ModelImageURL = img
|
||||||
job.Avatar = strings.TrimSpace(mfc.AvatarURL)
|
job.Avatar = img
|
||||||
job.PreviewState = "public"
|
job.PreviewState = "public"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,6 +112,9 @@ type MyFreeCams struct {
|
|||||||
ServerID string
|
ServerID string
|
||||||
Phase string
|
Phase string
|
||||||
AvatarURL string
|
AvatarURL string
|
||||||
|
|
||||||
|
RawUserID int
|
||||||
|
SnapURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
type mfcUsernameLookupResp struct {
|
type mfcUsernameLookupResp struct {
|
||||||
@ -121,11 +127,58 @@ type mfcUsernameLookupResp struct {
|
|||||||
Sessions []struct {
|
Sessions []struct {
|
||||||
ServerName string `json:"server_name"`
|
ServerName string `json:"server_name"`
|
||||||
Phase string `json:"phase"`
|
Phase string `json:"phase"`
|
||||||
|
SnapURL string `json:"snap_url"`
|
||||||
} `json:"sessions"`
|
} `json:"sessions"`
|
||||||
} `json:"user"`
|
} `json:"user"`
|
||||||
} `json:"result"`
|
} `json:"result"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func normalizeMFCSnapURL(raw string) string {
|
||||||
|
raw = strings.TrimSpace(raw)
|
||||||
|
if raw == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(raw, "//") {
|
||||||
|
raw = "https:" + raw
|
||||||
|
} else if strings.HasPrefix(raw, "/") {
|
||||||
|
raw = "https://snap.mfcimg.com" + raw
|
||||||
|
} else if !strings.HasPrefix(raw, "http://") && !strings.HasPrefix(raw, "https://") {
|
||||||
|
raw = "https://snap.mfcimg.com/" + strings.TrimLeft(raw, "/")
|
||||||
|
}
|
||||||
|
|
||||||
|
u, err := url.Parse(raw)
|
||||||
|
if err != nil || u.Scheme == "" || u.Host == "" {
|
||||||
|
return raw
|
||||||
|
}
|
||||||
|
|
||||||
|
q := u.Query()
|
||||||
|
q.Set("no-cache", strconv.FormatInt(time.Now().UnixNano(), 10))
|
||||||
|
u.RawQuery = q.Encode()
|
||||||
|
|
||||||
|
return u.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildMFCSnapimgURL(serverID string, rawUserID int) string {
|
||||||
|
serverID = strings.TrimSpace(serverID)
|
||||||
|
if serverID == "" || rawUserID <= 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalizeMFCSnapURL(fmt.Sprintf(
|
||||||
|
"https://snap.mfcimg.com/snapimg/%s/853x480/mfc_%d",
|
||||||
|
serverID,
|
||||||
|
rawUserID,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MyFreeCams) PreviewImageURL() string {
|
||||||
|
if s := strings.TrimSpace(m.SnapURL); s != "" {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(m.AvatarURL)
|
||||||
|
}
|
||||||
|
|
||||||
func mfcDigitsOnly(s string) string {
|
func mfcDigitsOnly(s string) string {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
for _, r := range strings.TrimSpace(s) {
|
for _, r := range strings.TrimSpace(s) {
|
||||||
@ -320,6 +373,7 @@ func (m *MyFreeCams) GetStatus(ctx context.Context, userAgent string) (Status, e
|
|||||||
return StatusNotExist, nil
|
return StatusNotExist, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.RawUserID = data.Result.User.ID
|
||||||
m.AvatarURL = strings.TrimSpace(data.Result.User.Avatar)
|
m.AvatarURL = strings.TrimSpace(data.Result.User.Avatar)
|
||||||
|
|
||||||
if len(data.Result.User.Sessions) == 0 {
|
if len(data.Result.User.Sessions) == 0 {
|
||||||
@ -333,6 +387,12 @@ func (m *MyFreeCams) GetStatus(ctx context.Context, userAgent string) (Status, e
|
|||||||
return StatusUnknown, appErrorf("mfc: server_name ohne server-id: %q", sess.ServerName)
|
return StatusUnknown, appErrorf("mfc: server_name ohne server-id: %q", sess.ServerName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.SnapURL = buildMFCSnapimgURL(serverID, data.Result.User.ID)
|
||||||
|
|
||||||
|
if strings.TrimSpace(m.SnapURL) == "" && strings.TrimSpace(sess.SnapURL) != "" {
|
||||||
|
m.SnapURL = normalizeMFCSnapURL(sess.SnapURL)
|
||||||
|
}
|
||||||
|
|
||||||
modelID := data.Result.User.ID
|
modelID := data.Result.User.ID
|
||||||
if modelID < 100000000 {
|
if modelID < 100000000 {
|
||||||
modelID += 100000000
|
modelID += 100000000
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user