diff --git a/manyfold/root/hook.d/inotify_MODIFY/package_xrf.rb b/manyfold/root/hook.d/inotify_MODIFY/package_xrf.rb new file mode 100755 index 0000000..5df8c75 --- /dev/null +++ b/manyfold/root/hook.d/inotify_MODIFY/package_xrf.rb @@ -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} " + 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)