xrforge/manyfold/root/hook.d/experience_updated/300-package_xrf.rb

61 lines
1.7 KiB
Ruby
Raw Normal View History

2025-10-27 14:05:07 +01:00
#!/usr/bin/env ruby
require 'json'
2025-10-27 15:03:17 +01:00
require_relative './../../xrforge.rb'
2025-10-27 14:05:07 +01:00
# Check if a filename is provided
if ARGV.length != 1
puts "Usage: #{$0} <path/to/experience/somefile.xxx>"
2025-10-27 14:05:07 +01:00
exit 1
end
filename = ARGV[0]
2025-10-27 14:05:07 +01:00
begin
2025-10-30 13:13:32 +01:00
# Change the directory
dir = File.dirname(filename)
Dir.chdir( dir )
2025-10-27 14:05:07 +01:00
# Read and parse the JSON file
2025-10-30 13:13:32 +01:00
data = JSON.parse( File.read( "datapackage.json" ) )
2025-10-27 14:05:07 +01:00
logfile = File.join( File.dirname(filename), ".xrforge/log.txt" )
2025-10-30 13:13:32 +01:00
XRForge.log("✅ starting XR fragments check", logfile)
2025-10-27 14:05:07 +01:00
model_file = XRForge.getExperienceFile(data,dir,logfile)
2025-10-27 14:05:07 +01:00
# Check if a model file was found after the loop
if ! model_file
XRForge.log("❌ No suitable 3D file found for XR Fragments-compatible experience", logfile)
exit 0
2025-10-27 14:05:07 +01:00
end
# Check if a model file was found after the loop
if model_file
2025-10-28 17:57:34 +01:00
XRForge.log("✅ Final model file: '#{model_file}'", logfile)
# update datapackage
data['main'] = model_file
if ! data['keywords'].include?('xrfragments')
data['keywords'].push('xrfragments')
end
File.write("datapackage.json", JSON.pretty_generate(data) )
system("assimp export #{model_file} .xrforge/scene.gltf")
2025-10-27 14:05:07 +01:00
else
2025-10-28 17:57:34 +01:00
XRForge.log("❌ No suitable 3D file found for XR Fragments-compatible experience", logfile)
# update datapackage
if data['keywords'].include?('xrfragments')
data['keywords'].delete('xrfragments')
File.write("datapackage.json", JSON.pretty_generate(data) )
end
2025-10-27 14:05:07 +01:00
end
XRForge.log("✅ updating xrfragment tag", logfile)
2025-10-27 14:05:07 +01:00
2025-10-28 17:57:34 +01:00
XRForge.log(" ", logfile)
2025-10-27 14:05:07 +01:00
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