repo: janusweb
action: commit
revision: 
path_from: 
revision_from: f8b0379f29d89d7a949484491b11eeb7967cbb37:
path_to: 
revision_to: 
git.thebackupbox.net
janusweb
git clone git://git.thebackupbox.net/janusweb
commit f8b0379f29d89d7a949484491b11eeb7967cbb37
Author: James Baicoianu 
Date:   Fri Oct 4 17:32:39 2024 -0700

    Support RPM API V2 + gendered animations

diff --git a/media/assets/webui/apps/avatar/avatar.js b/media/assets/webui/apps/avatar/avatar.js
index 39b1e504f4cb627ef508ea32f9eb3371360e2cdd..
index ..f4dff38b13d8b2e3ace2e856283c518539c914ed 100644
--- a/media/assets/webui/apps/avatar/avatar.js
+++ b/media/assets/webui/apps/avatar/avatar.js
@@ -67,7 +67,7 @@ elation.elements.define('janus-avatar-picker', class extends elation.elements.ba
             
           
           
-            
+            
           
         
       `;
@@ -226,20 +226,54 @@ this.appendChild(this.previewwindow);
   }
   handleWindowMessage(ev) {
     if (ev.origin.match(/https:\/\/.*\.readyplayer\.me/)) {
-      let avatarurl = ev.data;
-      let avatarstr = `
-
-  
-    
-    
-  
-  
-    
-  
-
-`;
-      player.setAvatar(avatarstr);
-      this.handleAvatarSelect({data: { url: 'data:text/plain,' + avatarstr } });
+      if (ev.data.indexOf('https:') == 0) {
+        // raw URL
+        let avatarurl = ev.data;
+        let avatarstr = `
+  
+    
+      
+      
+    
+    
+      
+    
+  
+  `;
+        player.setAvatar(avatarstr);
+        this.handleAvatarSelect({data: { url: 'data:text/plain,' + avatarstr } });
+      } else if (ev.data[0] == '{') {
+        // frame API
+        let apimsg = JSON.parse(ev.data);
+        let frame = this.querySelector('iframe'); // FIXME - hacky
+        if (apimsg.eventName == 'v1.frame.ready') {
+           frame.contentWindow.postMessage(JSON.stringify({
+              target: 'readyplayerme',
+              type: 'subscribe',
+              eventName: 'v2.**'
+            }), '*');
+        } else if (apimsg.eventName == 'v2.avatar.exported') {
+          let avatarurl = apimsg.data.url;
+          let animurl = 'https://assets.metacade.com/james/readyplayerme/animations.glb';
+          if (apimsg.data.metadata.gender == 'female') {
+            animurl = 'https://assets.metacade.com/james/readyplayerme/animations-rpm-female.glb';
+          }
+          // TODO - select avatar pack based on metadata.gender
+          let avatarstr = `
+    
+      
+        
+        
+      
+      
+        
+      
+    
+    `;
+          player.setAvatar(avatarstr);
+          this.handleAvatarSelect({data: { url: 'data:text/plain,' + avatarstr } });
+        }
+      }
     }
   }
 });

-----END OF PAGE-----