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

View File

@ -51,15 +51,18 @@ func RecordStreamMFC(
time.Sleep(5 * time.Second)
}
if job != nil && strings.TrimSpace(mfc.AvatarURL) != "" {
if job != nil {
img := strings.TrimSpace(mfc.PreviewImageURL())
if img != "" {
jobsMu.Lock()
job.ModelImageURL = strings.TrimSpace(mfc.AvatarURL)
job.Avatar = strings.TrimSpace(mfc.AvatarURL)
job.ModelImageURL = img
job.Avatar = img
job.PreviewState = "public"
jobsMu.Unlock()
_ = publishJobSnapshot(job.ID)
}
}
// ✅ erst jetzt die Video URL holen (weil public)
stream, err := mfc.GetSelectedStream(ctx, false, hc.userAgent)
@ -82,9 +85,9 @@ func RecordStreamMFC(
job.PreviewCookie = ""
job.PreviewUA = hc.userAgent
if strings.TrimSpace(mfc.AvatarURL) != "" {
job.ModelImageURL = strings.TrimSpace(mfc.AvatarURL)
job.Avatar = strings.TrimSpace(mfc.AvatarURL)
if img := strings.TrimSpace(mfc.PreviewImageURL()); img != "" {
job.ModelImageURL = img
job.Avatar = img
job.PreviewState = "public"
}
@ -109,6 +112,9 @@ type MyFreeCams struct {
ServerID string
Phase string
AvatarURL string
RawUserID int
SnapURL string
}
type mfcUsernameLookupResp struct {
@ -121,11 +127,58 @@ type mfcUsernameLookupResp struct {
Sessions []struct {
ServerName string `json:"server_name"`
Phase string `json:"phase"`
SnapURL string `json:"snap_url"`
} `json:"sessions"`
} `json:"user"`
} `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 {
var b strings.Builder
for _, r := range strings.TrimSpace(s) {
@ -320,6 +373,7 @@ func (m *MyFreeCams) GetStatus(ctx context.Context, userAgent string) (Status, e
return StatusNotExist, nil
}
m.RawUserID = data.Result.User.ID
m.AvatarURL = strings.TrimSpace(data.Result.User.Avatar)
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)
}
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
if modelID < 100000000 {
modelID += 100000000