added real mfc preview

This commit is contained in:
Chris 2026-06-04 23:55:56 +02:00
parent 125a3018ae
commit baa66cabcf
2 changed files with 71 additions and 11 deletions

View File

@ -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

View File

@ -51,14 +51,17 @@ func RecordStreamMFC(
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
} }
if job != nil && strings.TrimSpace(mfc.AvatarURL) != "" { if job != nil {
jobsMu.Lock() img := strings.TrimSpace(mfc.PreviewImageURL())
job.ModelImageURL = strings.TrimSpace(mfc.AvatarURL) if img != "" {
job.Avatar = strings.TrimSpace(mfc.AvatarURL) jobsMu.Lock()
job.PreviewState = "public" job.ModelImageURL = img
jobsMu.Unlock() job.Avatar = img
job.PreviewState = "public"
jobsMu.Unlock()
_ = publishJobSnapshot(job.ID) _ = publishJobSnapshot(job.ID)
}
} }
// ✅ erst jetzt die Video URL holen (weil public) // ✅ erst jetzt die Video URL holen (weil public)
@ -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