From 24c747dda3fb96d01ad1dbbafeacbb8a4b90ff7c Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Thu, 30 Oct 2025 13:13:32 +0100 Subject: [PATCH] janusXR works --- .../experience_updated/300-package_janusxr.rb | 100 ++++++++++++++++++ .../experience_updated/300-package_janusxr.sh | 30 ------ .../experience_updated/300-package_xrf.rb | 8 +- 3 files changed, 104 insertions(+), 34 deletions(-) create mode 100755 manyfold/root/hook.d/experience_updated/300-package_janusxr.rb delete mode 100755 manyfold/root/hook.d/experience_updated/300-package_janusxr.sh diff --git a/manyfold/root/hook.d/experience_updated/300-package_janusxr.rb b/manyfold/root/hook.d/experience_updated/300-package_janusxr.rb new file mode 100755 index 0000000..fb8b3b2 --- /dev/null +++ b/manyfold/root/hook.d/experience_updated/300-package_janusxr.rb @@ -0,0 +1,100 @@ +#!/usr/bin/env ruby + +require 'json' +require_relative './../../xrforge.rb' + +# Check if a filename is provided +if ARGV.length != 1 + puts "Usage: #{$0} " + exit 1 +end + +filename = ARGV[0] + +begin + + # Change the directory + dir = File.dirname(filename) + Dir.chdir( File.dirname(filename) ) + # Read and parse the JSON file + data = JSON.parse( File.read( "datapackage.json" ) ) + + logfile = File.join( File.dirname(filename), ".xrforge/log.txt" ) + + XRForge.log("✅ starting build janusXR XR scene", logfile) + + # Extract the desired field (assuming the field is named 'model_file') + thumb_file = data['image'] + + XRForge.log("✅ thumbnail sidecar-file '#{thumb_file}' detected", logfile) + + # Get the base name of the thumbnail file without its extension + base_name = File.basename(thumb_file, File.extname(thumb_file)) + + model_file = nil # Initialize model_file to nil + + # Loop over the list of extensions + XRForge::MODEL_EXT.each do |ext| + # Construct the filename with the current extension + filename = "#{base_name}#{ext}" + + # Check if the file exists + if File.exist?(filename) + XRForge.log("✅ 3D file '#{filename}' detected", logfile) + model_file = "#{dir.gsub("/mnt/","")}/#{filename}" # Store the found filename + break # Stop the loop once a file is found + else + # Log a message for the file that was not found, but don't stop + XRForge.log("⚠️ 3D file '#{filename}' not detected", logfile) + end + end + + # Check if a model file was found after the loop + if model_file + XRForge.log("✅ Final model file: '#{model_file}'", logfile) + else + XRForge.log("❌ No suitable 3D file found for XR Fragments- / JanusXR-compatible experience", logfile) + end + + # Get the value of the environment variable FEDERATE_DRIVE_HOST + federate_drive_host = ENV['FEDERATE_DRIVE_HOST'] + + # Define the HTML content using a multi-line string (heredoc) + # Ruby's heredoc allows for variable interpolation (using #{}) + jml = <<~HTML + + + + janusxr room + + + + + + + + + + + + + + + + HTML + + # Write the content to the specified file + # File.write is the concise equivalent of 'echo "$jml" > filename' + File.write('.xrforge/janusxr.html', jml) + + XRForge.log("✅ written janusxr.html", logfile) + + XRForge.log(" ", logfile) + +rescue Errno::ENOENT + puts "File #{filename} not found" +rescue JSON::ParserError + puts "Error parsing JSON from #{filename}" +rescue => e + puts "An error occurred: #{e.message}" +end diff --git a/manyfold/root/hook.d/experience_updated/300-package_janusxr.sh b/manyfold/root/hook.d/experience_updated/300-package_janusxr.sh deleted file mode 100755 index 7dd5f8b..0000000 --- a/manyfold/root/hook.d/experience_updated/300-package_janusxr.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -dir="$(dirname $1)" -cd "$dir" -echo "[package_janusxr.sh] packing janusxr.html" - -glb=$(ls *.glb | head -n1) # todo: check datapackage.json instead of first match - -jml=' - - - - janusxr room - - - - - - - - - - - - - - - -' - -echo "$jml" > .xrforge/janusxr.html diff --git a/manyfold/root/hook.d/experience_updated/300-package_xrf.rb b/manyfold/root/hook.d/experience_updated/300-package_xrf.rb index 3f76304..04e527b 100755 --- a/manyfold/root/hook.d/experience_updated/300-package_xrf.rb +++ b/manyfold/root/hook.d/experience_updated/300-package_xrf.rb @@ -12,12 +12,12 @@ end filename = ARGV[0] begin + # Change the directory + Dir.chdir( File.dirname(filename) ) # Read and parse the JSON file - data = JSON.parse(File.read(filename)) + data = JSON.parse( File.read( "datapackage.json" ) ) - logfile = File.join( File.dirname(filename), ".xrforge/log.txt" ) - - XRForge.log("✅ starting XR fragments check", logfile, true) + XRForge.log("✅ starting XR fragments check", logfile) # Extract the desired field (assuming the field is named 'model_file') thumb_file = data['image']