From 45c17cfaa4d8820f3997676b42c78bb2740fdfad Mon Sep 17 00:00:00 2001
From: 0xboobface <0xboobface@gmail.com>
Date: Wed, 24 Oct 2018 15:47:56 +0200
Subject: [PATCH] Implement live preview for MFC

---
 .../ctbrec/sites/mfc/MyFreeCamsClient.java    |  1 +
 .../ctbrec/sites/mfc/MyFreeCamsModel.java     | 32 +++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java b/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
index 1051b50a..0256b39c 100644
--- a/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
+++ b/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
@@ -513,6 +513,7 @@ public class MyFreeCamsClient {
             if(Objects.equals(state.getNm(), model.getName())) {
                 JsonAdapter<SessionState> adapter = moshi.adapter(SessionState.class).indent("  ");
                 System.out.println(adapter.toJson(state));
+                System.out.println(model.getPreview());
                 System.out.println("#####################");
             }
         }
diff --git a/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java b/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java
index 2a98bdad..89109096 100644
--- a/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java
+++ b/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java
@@ -216,6 +216,13 @@ public class MyFreeCamsModel extends AbstractModel {
         String uid = state.getUid().toString();
         String uidStart = uid.substring(0, 3);
         String previewUrl = "https://img.mfcimg.com/photos2/"+uidStart+'/'+uid+"/avatar.300x300.jpg";
+        if(MyFreeCamsModel.this.state == State.ONLINE) {
+            try {
+                previewUrl = getLivePreviewUrl(state);
+            } catch(Exception e) {
+                LOG.debug("Couldn't get live preview. Falling back to avatar", e);
+            }
+        }
         setPreview(previewUrl);
 
         // tags
@@ -237,6 +244,31 @@ public class MyFreeCamsModel extends AbstractModel {
         viewerCount = Optional.ofNullable(state.getM()).map((m) -> m.getRc()).orElseGet(() -> 0);
     }
 
+    private String getLivePreviewUrl(SessionState state) {
+        String previewUrl;
+        int userChannel = 100000000 + state.getUid();
+        int camserv = state.getU().getCamserv();
+        String server = Integer.toString(camserv);
+        ServerConfig sc = site.getClient().getServerConfig();
+        if(sc.isOnNgServer(state)) {
+            server = sc.ngVideoServers.get(Integer.toString(camserv));
+            camserv = Integer.parseInt(server.replaceAll("video", ""));
+            previewUrl = "https://snap.mfcimg.com/snapimg/" + camserv + "/320x240/mfc_" + state.getU().getPhase()+ '_' + userChannel;
+        } else if(sc.isOnWzObsVideoServer(state)) {
+            server = sc.wsServers.get(Integer.toString(camserv));
+            camserv = Integer.parseInt(server.replaceAll("video", ""));
+            previewUrl = "https://snap.mfcimg.com/snapimg/" + camserv + "/320x240/mfc_" + state.getU().getPhase()+ '_' + userChannel;
+        } else if(sc.isOnHtml5VideoServer(state)) {
+            server = sc.h5Servers.get(Integer.toString(camserv));
+            camserv = Integer.parseInt(server.replaceAll("video", ""));
+            previewUrl = "https://snap.mfcimg.com/snapimg/" + camserv + "/320x240/mfc_" + userChannel;
+        } else {
+            if(camserv > 500) camserv -= 500;
+            previewUrl = "https://snap.mfcimg.com/snapimg/" + camserv + "/320x240/mfc_" + userChannel;
+        }
+        return previewUrl;
+    }
+
     @Override
     public boolean follow() {
         return false;