added ruby hook package_xrf.rb

This commit is contained in:
Leon van Kammen 2025-10-27 14:05:07 +01:00
parent a19c45cea7
commit 34f6e052da

View file

@ -0,0 +1,90 @@
#!/usr/bin/env ruby
require 'json'
extensions = ['.glb', '.gltf', '.blend', '.usdz', '.obj', '.dae']
# Check if a filename is provided
if ARGV.length != 1
puts "Usage: #{$0} <filename>"
exit 1
end
def log_message(message, filename, reset = false)
# Empty the log file if reset is true
if reset
File.open(filename, 'w') do |file|
timestamp = Time.now.strftime('%Y-%m-%d %H:%M')
file.write("#{timestamp}\n\n")
end
end
# Create the full log entry
# Append the log entry to the log file
File.open(filename, 'a') do |file|
file.write("#{message}\n")
end
puts("#{message}\n")
end
filename = ARGV[0]
begin
# Read and parse the JSON file
data = JSON.parse(File.read(filename))
logfile = File.join( File.dirname(filename), "xrfragment.txt" )
log_message("✔ starting XR fragments check", logfile, true)
# Extract the desired field (assuming the field is named 'model_file')
thumb_file = data['image']
log_message("✔ 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
extensions.each do |ext|
# Construct the filename with the current extension
filename = "#{base_name}#{ext}"
# Check if the file exists
if File.exist?(filename)
log_message("✔ 3D file '#{filename}' detected", logfile)
model_file = 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
log_message("⚠️ 3D file '#{filename}' not detected", logfile)
end
end
# Check if a model file was found after the loop
if model_file
log_message("✅ Final model file: '#{model_file}'", logfile)
else
log_message("❌ No suitable 3D file found for XR Fragments-compatible experience", logfile)
end
# Construct the output filename
output_file = "#{File.basename(model_file, File.extname(model_file))}.blend"
# Execute the system call
puts("assimp", model_file, output_file)
system("assimp", model_file, output_file)
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
log_message("", logfile)