From 8c4adb418838737e45295bd728a04dbf67726637 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Mon, 4 Aug 2025 20:27:55 +0200 Subject: [PATCH] milestone 4g: manyfold.sh auto-generate experience.zip index.json on change (template: download zip) --- manyfold/cli/manyfold.sh | 2 +- .../inotify_DELETE,ISDIR/cleanup_package.sh | 3 + .../inotify_MODIFY/package_experience.sh | 7 +- .../src/app/app/views/models/show.html.erb | 211 ++++++++++++++++++ 4 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 manyfold/root/hook.d/inotify_DELETE,ISDIR/cleanup_package.sh create mode 100644 manyfold/usr/src/app/app/views/models/show.html.erb diff --git a/manyfold/cli/manyfold.sh b/manyfold/cli/manyfold.sh index 9659a5d..8b57103 100755 --- a/manyfold/cli/manyfold.sh +++ b/manyfold/cli/manyfold.sh @@ -142,7 +142,7 @@ set_theme(){ set_modelpath(){ echocolor "[$APPNAME]" "enforcing modelpath" - debug sqlite3 /config/manyfold.sqlite3 "UPDATE settings SET value = replace('--- \"{creator}/{modelName}\"\n','\n',char(10)) WHERE var == 'model_path_template';" + debug sqlite3 /config/manyfold.sqlite3 "UPDATE settings SET value = replace('--- \"{creator}/{modelId}\"\n','\n',char(10)) WHERE var == 'model_path_template';" } rename_app(){ diff --git a/manyfold/root/hook.d/inotify_DELETE,ISDIR/cleanup_package.sh b/manyfold/root/hook.d/inotify_DELETE,ISDIR/cleanup_package.sh new file mode 100644 index 0000000..842d5a3 --- /dev/null +++ b/manyfold/root/hook.d/inotify_DELETE,ISDIR/cleanup_package.sh @@ -0,0 +1,3 @@ +#!/bin/sh +test -f "$1".zip && rm "$1".zip +echo "[cleanup_package.sh] deleting $dir.zip" diff --git a/manyfold/root/hook.d/inotify_MODIFY/package_experience.sh b/manyfold/root/hook.d/inotify_MODIFY/package_experience.sh index 9dac4aa..bcc0b0d 100755 --- a/manyfold/root/hook.d/inotify_MODIFY/package_experience.sh +++ b/manyfold/root/hook.d/inotify_MODIFY/package_experience.sh @@ -1,5 +1,6 @@ #!/bin/sh echo "$1" | grep datapackage || exit 0 # nothing to do -cd $(dirname $1) -zip experience.zip *.glb -ln -s datapackage.json index.json +dir=$(dirname $1) +cd "$dir" +echo "[package_experience.sh] zipping $dir.zip" +zip -r "$dir".zip $dir/* diff --git a/manyfold/usr/src/app/app/views/models/show.html.erb b/manyfold/usr/src/app/app/views/models/show.html.erb new file mode 100644 index 0000000..db0d207 --- /dev/null +++ b/manyfold/usr/src/app/app/views/models/show.html.erb @@ -0,0 +1,211 @@ +<% content_for :head do %> + <%= tag.meta property: "og:type", content: "website" %> + <%= tag.meta property: "og:image", content: model_model_file_url(@model, @model.preview_file, format: @model.preview_file.extension) if @model.preview_file&.is_image? && !@model.sensitive %> + <%= tag.meta name: "description", content: truncate(sanitize(@model.notes), length: 80) if @model.notes.present? %> + <%= tag.meta name: "fediverse:creator", content: @model.creator.federails_actor.at_address if @model.creator %> + <%= tag.link rel: "alternate", type: Mime[:oembed], href: model_url(@model, format: :oembed), title: @model.name %> +<% end %> + +
+ <%= turbo_stream_from @model %> +

+ + <%= @model.name %> + + <%= link_to icon("search", t(".search")), + "https://yeggi.com/q/#{ERB::Util.url_encode(@model.name)}/", + class: "btn btn-outline", target: "manyfold_search", rel: "noreferrer" %> +

+ +
+
+ <% if @locked_files > 0 %> +
<%= t(".preview", count: @locked_files) %>
+ <% end %> + + <%= render "image_carousel", images: @images %> + + <%= card(:secondary) do %> +

<%= markdownify @model.notes %>

+ <% end if @model.notes.present? %> + + <% if @num_files > 0 %> +

<%= t(".files") %>

+
+ <%= render partial: "file", collection: @groups.delete(nil) %> +
+ <% @groups.each_pair do |group, files| %> +

<%= group.strip.careful_titleize %>*

+
+ <%= render partial: "file", collection: files %> +
+ <% end %> + <% end %> +
+ +
+