72 lines
2.3 KiB
Bash
Executable File
72 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# virtual file interface for THREE
|
|
|
|
STATE=/run/THREE
|
|
LOG=~/.fuse.log
|
|
|
|
update(){
|
|
js '
|
|
|
|
let fuse_dir = () => '16877 2 0 0 4096 8'
|
|
let fuse_file = (size) => `33188 1 0 0 ${size||1} 1`
|
|
|
|
function traverseScene(object, path = '/', result = '') {
|
|
const objectName = object.name? object.name : object.id;
|
|
result += `${path}${objectName} ${fuse_dir()}\n`;
|
|
result += `${path}${objectName}/position ${fuse_dir()}\n`;
|
|
result += `${path}${objectName}/position/x ${fuse_file()}\n`;
|
|
result += `${path}${objectName}/position/y ${fuse_file()}\n`;
|
|
result += `${path}${objectName}/position/z ${fuse_file()}\n`;
|
|
result += `${path}${objectName}/rotation ${fuse_dir()}\n`;
|
|
result += `${path}${objectName}/rotation/x ${fuse_file()}\n`;
|
|
result += `${path}${objectName}/rotation/y ${fuse_file()}\n`;
|
|
result += `${path}${objectName}/rotation/z ${fuse_file()}\n`;
|
|
if( object.userData ){
|
|
result += `${path}${objectName}/userData 1 1 1 1\n`;
|
|
for( let k in object.userData )
|
|
result += `${path}${objectName}/userData/${k} 1 1 1 1\n`;
|
|
}
|
|
object.children.forEach(child => {
|
|
result = traverseScene(child, `${path}${objectName}/`, result);
|
|
});
|
|
return result;
|
|
}
|
|
return traverseScene( document.querySelector('a-scene').object3D );
|
|
' > $STATE
|
|
}
|
|
|
|
readdir(){ # print first column [filename] from header
|
|
test -f $STATE || update
|
|
awk '/^#\'$1'/ {
|
|
gsub("^#'$1'[/]?","",$1); # strip dirname
|
|
gsub("\\/.*","",$1); # strip subdirs/files
|
|
if( $1 ) print $1
|
|
}' $STATE | uniq
|
|
}
|
|
|
|
getattr(){ # print column 2 till 7 from header
|
|
awk '$1 == "#'$1'" { print $2" "$3" "$4" "$5" "$6" "$7 }' $STATE
|
|
grep -qE '#$1' $0 || return 2 # FUSE expects -NOENT if file does not exist
|
|
}
|
|
|
|
read(){ # print everything (data) after 7th column
|
|
awk '$1 == "#'$1'" { $1=$2=$3=$4=$5=$6=$7=""; sub(/^ +/, ""); print $0 }' $0
|
|
}
|
|
|
|
getxattr(){ # print xattr value from commentheader
|
|
awk '$1 == "#xattr:'$1'" && $2 == "'$2'" { print $3 }' $STATE
|
|
}
|
|
|
|
setxattr(){ # save xattr value from commentheader
|
|
file=$1 ; key=$2 ; shift; shift
|
|
sed -i "s/^#xattr:\\$key .*/#xattr:\\$key $*" $STATE || echo "#xattr:$file $key $*" >> $0
|
|
}
|
|
|
|
listxattr(){ # list xattr keys
|
|
awk '$1 == "#xattr:'$1'" { printf("%s\0",$2) }' $STATE
|
|
}
|
|
|
|
echo "> $0 $*" >> $LOG
|
|
"$@" | tee -a $LOG
|
|
|