diff --git a/src/.lua/apiSync.lua b/src/.lua/apiSync.lua
index cbee13a..154c00f 100644
--- a/src/.lua/apiSync.lua
+++ b/src/.lua/apiSync.lua
@@ -54,11 +54,6 @@ local apiSync = {
-- runs sync in foreground
app.on('init', function()
- foreach( app.plugin.openbrush.opts, function(k,opt)
- if opt.key == 'app.opts.plugin_openbrush_sync_folder' then
- opt.values = app.cache.dirs
- end
- end)
if util.contains(argv, 'generate') then api.sync(api) end
end)
diff --git a/src/.lua/util.lua b/src/.lua/util.lua
index 619a607..7e71469 100644
--- a/src/.lua/util.lua
+++ b/src/.lua/util.lua
@@ -418,7 +418,7 @@ end
util.hyphenate = function(str)
local str,match = str:lower()
- :gsub("[^%w]", "-")
+ :gsub("[^%w_]", "-")
:gsub("%-+", "-")
:gsub("^%-", "")
:gsub("%-$", "")
@@ -426,7 +426,7 @@ util.hyphenate = function(str)
end
util.dehyphenate = function(str)
- local str,match = str:gsub("_[a-zA-Z0-9]+","") -- remove ids starting with _
+ local str,match = str:gsub("^_[a-zA-Z0-9]+","") -- remove ids starting with _
:gsub("%-%-","-") -- remove double dash
:gsub("-"," ") -- convert to spaces
:gsub("^%s*(.-)%s*$", "%1") -- trim
diff --git a/src/myverse/tronverse/tronverse-icosagallery/README.md b/src/myverse/tronverse/tronverse-icosagallery/README.md
new file mode 100644
index 0000000..3464c2d
--- /dev/null
+++ b/src/myverse/tronverse/tronverse-icosagallery/README.md
@@ -0,0 +1,60 @@
+
Hi there! 👋
+Welcome to this XR experience.
+
+
+
+
+
+
+
+
+
+
+ Keyboard+Mouse
+
+
+ use the WASD-keys and mousedrag to navigate
+
+
+
+
+ AR/VR headset
+
+
+ walk around / use right-longpinch (or thumbstick) for local teleports
+
+
+
+
+ PhoneVR
+
+
+ use gaze or bluetooth/mouse to navigate
+
+
+
+
+ PhoneAR
+
+
+ walk around and tap screen to click
+
+
+
+
+ Mobile
+
+
+ use the WASD-keys and mousedrag to navigate
+
+
+
+
+You've got this!
+
+
+
+This virtual world is generated in realtime via icosa.gallery.
+You can add/create parcels in icosa.gallery, by publishing via OpenBrush, OpenBlocks, or Blender.
+
+> NOTE: Make sure to add hashtag **#tronverse-icosagallery** to the title (and re-run xrforge for fast re-sync).
\ No newline at end of file
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery.jpg b/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery.jpg
new file mode 100644
index 0000000..4e41bc7
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery.jpg differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery/asset.json b/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery/asset.json
new file mode 100644
index 0000000..a14e1d0
--- /dev/null
+++ b/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery/asset.json
@@ -0,0 +1 @@
+{"assetId":"0dycp4HDxf4","authorId":"9Vkr0htmSzc","authorName":"coderofsalvation","createTime":"2026-09-15T13:03:05.314Z","description":"","displayName":"tronverse_floor #overlay #tronverse-icosagallery","formats":[{"formatComplexity":{},"formatType":"GLTF2","isCorsAllowed":true,"isPreferredForDownload":true,"isPreferredForGalleryViewer":true,"resources":[],"role":"USER_SUPPLIED_GLTF","root":{"contentType":"model\/gltf-binary","relativePath":"tronverse_floor.glb","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755050994710086613\/GLTF2\/tronverse_floor.glb"}}],"isCurated":false,"isIcosaGalleryCompatible":true,"license":"CREATIVE_COMMONS_BY","licenseVersion":"4.0","name":"assets\/0dycp4HDxf4","thumbnail":{"relativePath":"preview_image.jpg","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755050994710086613\/preview_image.jpg"},"triangleCount":0,"updateTime":"2026-09-16T11:21:33.683Z","url":"http:\/\/api.icosa.gallery\/v1\/assets\/0dycp4HDxf4","visibility":"PUBLIC"}
\ No newline at end of file
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery/tronverse_floor.glb b/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery/tronverse_floor.glb
new file mode 100644
index 0000000..a47f7f8
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_0dycp4HDxf4-tronverse_floor-overlay-tronverse-icosagallery/tronverse_floor.glb differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery.jpg b/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery.jpg
new file mode 100644
index 0000000..3be4612
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery.jpg differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery/asset.json b/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery/asset.json
new file mode 100644
index 0000000..d00768d
--- /dev/null
+++ b/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery/asset.json
@@ -0,0 +1 @@
+{"assetId":"C9J0_dyCzd8","authorId":"9Vkr0htmSzc","authorName":"coderofsalvation","createTime":"2026-09-15T18:22:06.894Z","description":"copy this asset as a starting point to paint into","displayName":"tronverse_parcel_empty #tronverse-icosagallery","formats":[{"formatComplexity":{},"formatType":"GLTF2","isCorsAllowed":true,"isPreferredForDownload":true,"isPreferredForGalleryViewer":true,"resources":[],"role":"USER_SUPPLIED_GLTF","root":{"contentType":"model\/gltf-binary","relativePath":"tronverse_parcel_empty.glb","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755131280311452630\/GLTF2\/tronverse_parcel_empty.glb"}}],"isCurated":false,"isIcosaGalleryCompatible":true,"license":"CREATIVE_COMMONS_BY","licenseVersion":"4.0","name":"assets\/C9J0_dyCzd8","thumbnail":{"relativePath":"preview_image.jpg","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755131280311452630\/preview_image.jpg"},"triangleCount":0,"updateTime":"2026-09-16T11:21:20.762Z","url":"http:\/\/api.icosa.gallery\/v1\/assets\/C9J0_dyCzd8","visibility":"PUBLIC"}
\ No newline at end of file
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery/tronverse_parcel_empty.glb b/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery/tronverse_parcel_empty.glb
new file mode 100644
index 0000000..ae2bda2
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_C9J0_dyCzd8-tronverse_parcel_empty-tronverse-icosagallery/tronverse_parcel_empty.glb differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery.jpg b/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery.jpg
new file mode 100644
index 0000000..77c8489
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery.jpg differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery/asset.json b/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery/asset.json
new file mode 100644
index 0000000..5a760af
--- /dev/null
+++ b/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery/asset.json
@@ -0,0 +1 @@
+{"assetId":"igTGJIhJcSw","authorId":"9Vkr0htmSzc","authorName":"coderofsalvation","createTime":"2026-09-16T10:16:05.148Z","description":"","displayName":"tronverse_parcel3 #tronverse-icosagallery","formats":[{"formatComplexity":{},"formatType":"GLTF2","isCorsAllowed":true,"isPreferredForDownload":true,"isPreferredForGalleryViewer":true,"resources":[],"role":"USER_SUPPLIED_GLTF","root":{"contentType":"model\/gltf-binary","relativePath":"tronverse_parcel3.glb","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755371354949157841\/GLTF2\/tronverse_parcel3.glb"}}],"isCurated":false,"isIcosaGalleryCompatible":true,"license":"CREATIVE_COMMONS_BY","licenseVersion":"4.0","name":"assets\/igTGJIhJcSw","thumbnail":{"relativePath":"preview_image.jpg","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755371354949157841\/preview_image.jpg"},"triangleCount":0,"updateTime":"2026-09-16T11:20:41.832Z","url":"http:\/\/api.icosa.gallery\/v1\/assets\/igTGJIhJcSw","visibility":"PUBLIC"}
\ No newline at end of file
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery/tronverse_parcel3.glb b/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery/tronverse_parcel3.glb
new file mode 100644
index 0000000..47a82db
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_igTGJIhJcSw-tronverse_parcel3-tronverse-icosagallery/tronverse_parcel3.glb differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery.jpg b/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery.jpg
new file mode 100644
index 0000000..e7cbafd
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery.jpg differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery/asset.json b/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery/asset.json
new file mode 100644
index 0000000..ea5de32
--- /dev/null
+++ b/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery/asset.json
@@ -0,0 +1 @@
+{"assetId":"mRU7wJh9BLQ","authorId":"9Vkr0htmSzc","authorName":"coderofsalvation","createTime":"2026-09-15T11:44:11.217Z","description":"","displayName":"tronverse_parcel1 #tronverse-icosagallery","formats":[{"formatComplexity":{},"formatType":"GLTF2","isCorsAllowed":true,"isPreferredForDownload":true,"isPreferredForGalleryViewer":true,"resources":[],"role":"USER_SUPPLIED_GLTF","root":{"contentType":"model\/gltf-binary","relativePath":"tronverse_parcel1.glb","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755031138472297450\/GLTF2\/tronverse_parcel1.glb"}}],"isCurated":false,"isIcosaGalleryCompatible":true,"license":"CREATIVE_COMMONS_BY","licenseVersion":"4.0","name":"assets\/mRU7wJh9BLQ","thumbnail":{"relativePath":"preview_image.jpg","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755031138472297450\/preview_image.jpg"},"triangleCount":0,"updateTime":"2026-09-16T11:21:48.917Z","url":"http:\/\/api.icosa.gallery\/v1\/assets\/mRU7wJh9BLQ","visibility":"PUBLIC"}
\ No newline at end of file
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery/tronverse_parcel1.glb b/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery/tronverse_parcel1.glb
new file mode 100644
index 0000000..2a9b91b
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_mRU7wJh9BLQ-tronverse_parcel1-tronverse-icosagallery/tronverse_parcel1.glb differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery.jpg b/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery.jpg
new file mode 100644
index 0000000..9e37069
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery.jpg differ
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery/asset.json b/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery/asset.json
new file mode 100644
index 0000000..af66c17
--- /dev/null
+++ b/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery/asset.json
@@ -0,0 +1 @@
+{"assetId":"oiIu1aNn6Ek","authorId":"9Vkr0htmSzc","authorName":"coderofsalvation","createTime":"2026-09-16T10:06:44.019Z","description":"","displayName":"tronverse_parcel2 #overlay #tronverse-icosagallery","formats":[{"formatComplexity":{},"formatType":"GLTF2","isCorsAllowed":true,"isPreferredForDownload":true,"isPreferredForGalleryViewer":true,"resources":[],"role":"USER_SUPPLIED_GLTF","root":{"contentType":"model\/gltf-binary","relativePath":"tronverse_parcel2.glb","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755369001416131548\/GLTF2\/tronverse_parcel2.glb"}}],"isCurated":false,"isIcosaGalleryCompatible":true,"license":"CREATIVE_COMMONS_BY","licenseVersion":"4.0","name":"assets\/oiIu1aNn6Ek","thumbnail":{"relativePath":"preview_image.jpg","url":"https:\/\/s3.us-east-005.backblazeb2.com\/icosa-gallery\/icosa\/28534\/755369001416131548\/preview_image.jpg"},"triangleCount":0,"updateTime":"2026-09-16T11:20:54.904Z","url":"http:\/\/api.icosa.gallery\/v1\/assets\/oiIu1aNn6Ek","visibility":"PUBLIC"}
\ No newline at end of file
diff --git a/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery/tronverse_parcel2.glb b/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery/tronverse_parcel2.glb
new file mode 100644
index 0000000..8721763
Binary files /dev/null and b/src/myverse/tronverse/tronverse-icosagallery/_oiIu1aNn6Ek-tronverse_parcel2-overlay-tronverse-icosagallery/tronverse_parcel2.glb differ
diff --git a/src/page/about.html b/src/page/about.html
index 40cf089..3816bfb 100644
--- a/src/page/about.html
+++ b/src/page/about.html
@@ -62,7 +62,7 @@ div#xrecosystem{
Turn files into AR/VR 🥽 experiences
A static website generator for interconnected XR experiences.
- Optionally runs as server/client too.
+ Generate and manage open virtual worlds, powered by JanusXR & XR Fragments.
@@ -225,7 +225,8 @@ div#xrecosystem{
Auto-compose virtual worlds
Instead of manually composing virtual worlds from multiple assets, XRForge's philosophy is auto-layout and interoperability.
- This means that assets produced in OpenBlocks or OpenBrush can (in)directly get imported (via online 3D stores like icosa.gallery- and manyfold.app).
+ This means that existing RSS/Atom-feeds (from blogs) and partial content from websites can be projected into virtual worlds, via URLs.
+ But also assets produced elsewhere, in OpenBlocks or OpenBrush are synchronized (via online 3D stores like icosa.gallery- and manyfold.app).
This allows for infinitely scalable virtual worlds, yet completely downloadable and portable.
XRForge features layout-engines which allows crowdsourcing virtual worlds via assets using various apps/platforms:
diff --git a/src/page/index.html b/src/page/index.html
index 84cf338..05248d7 100644
--- a/src/page/index.html
+++ b/src/page/index.html
@@ -7,6 +7,8 @@ ${header}
{if defined(item) and item.parent and item.parent.info then
description = item.parent.info
+elseif defined(itemdir) and itemdir.info then
+ description = itemdir.info
else
description = opts.plugin_global_popup_instructions
end}
diff --git a/src/page/janusxr.html b/src/page/janusxr.html
index d5f34e8..1113cf0 100644
--- a/src/page/janusxr.html
+++ b/src/page/janusxr.html
@@ -65,7 +65,7 @@ end}
print(' ')
end
end}
-
+
{if not defined(item) and defined(items) and #items > 0 then
local layout = itemdir.layout or ''
diff --git a/src/plugin/diskscan.lua b/src/plugin/diskscan.lua
index 6e68dba..43585e3 100644
--- a/src/plugin/diskscan.lua
+++ b/src/plugin/diskscan.lua
@@ -79,7 +79,16 @@ return {
v.file.state = nil
end
end)
+
+ -- sort & apply dirs to plugin options
table.sort( app.cache.dirs)
+ foreach( app.plugin, function(k,plugin)
+ foreach( plugin.opts, function(k,opt)
+ if opt.type == 'dir' then
+ opt.values = app.cache.dirs
+ end
+ end)
+ end)
end,
scanDir = function(scandir,parent,seen)
diff --git a/src/plugin/global.lua b/src/plugin/global.lua
index 4415588..e60b3ef 100644
--- a/src/plugin/global.lua
+++ b/src/plugin/global.lua
@@ -108,46 +108,46 @@ Welcome to this XR experience.
-
-
- AR/VR headset
-
-
- walk around / use right-longpinch (or thumbstick) for local teleports
-
-
-
-
- PhoneVR
-
-
- use gaze or bluetooth/mouse to navigate
-
-
-
-
- PhoneAR
-
-
- walk around and tap screen to click
-
-
-
-
- Mobile
-
-
- use the WASD-keys and mousedrag to navigate
-
-
-
-
- Keyboard+Mouse
-
-
- use the WASD-keys and mousedrag to navigate
-
-
+
+
+ Keyboard+Mouse
+
+
+ use the WASD-keys and mousedrag to navigate
+
+
+
+
+ AR/VR headset
+
+
+ walk around / use right-longpinch (or thumbstick) for local teleports
+
+
+
+
+ PhoneVR
+
+
+ use gaze or bluetooth/mouse to navigate
+
+
+
+
+ PhoneAR
+
+
+ walk around and tap screen to click
+
+
+
+
+ Mobile
+
+
+ use the WASD-keys and mousedrag to navigate
+
+
You've got this!
diff --git a/src/plugin/janusxr/layout/portals.lua b/src/plugin/janusxr/layout/portals.lua
index fdcfbf2..bdfb4ea 100644
--- a/src/plugin/janusxr/layout/portals.lua
+++ b/src/plugin/janusxr/layout/portals.lua
@@ -2,13 +2,14 @@ local portals = {
render = function(items)
local jml = ''
for i,v in pairs(items) do
- local width = v.portal_width or tonumber(app.opts.plugin_global_portal_width )
- local center = -((#items*width)/1.3) + (i*width)
local url = v.url
- local thumb = ' shad..er_id="defaultportal"'
+ local width = tonumber(app.opts.plugin_global_portal_width )
+ local thumb = ' shader_id="defaultportal"'
if #v.thumbnail > 0 then
thumb = ' thumb_id="img' .. i .. '" '
+ if v.portal_width then width = tonumber(v.portal_width) end
end
+ local center = -((#items*width)/1.3) + (i*width)
if v.dir then url = url .. "/" end
if v.redirect then url = v.redirect end -- dont wrap standalone glb's in janusxr
jml = jml
diff --git a/src/plugin/openbrush.lua b/src/plugin/openbrush.lua
index 0c31b8f..b109b09 100644
--- a/src/plugin/openbrush.lua
+++ b/src/plugin/openbrush.lua
@@ -20,7 +20,7 @@ local function scanForOpenBrush(exp)
end
foreach( tags, function(k,tag)
tag = tag:gsub("#","")
- if exp.path:match('/' .. tag .. '/') then -- might not be precise enough
+ if exp.path:match('/' .. tag:gsub("-","%%-") .. '/') then -- might not be precise enough
if not exp.parent.janusxr then
exp.parent.janusxr = {}
end
@@ -76,8 +76,8 @@ local plugin = {
key='app.opts.plugin_openbrush_layout_grid_size',
title='Grid size',
info='in square meters (only used for grid layout)',
- default="75",
- placeholder="75",
+ default="74",
+ placeholder="74",
values=''
},
{
@@ -98,9 +98,9 @@ local plugin = {
key='app.opts.plugin_openbrush_sync_folder',
title='Sync to folder',
info='openbrush (icosa.gallery) assets will be saved here',
- placeholder = "openbrush",
- default = app.opts.plugin_diskscan_dir,
- values = {}
+ default = "./myverse/tronverse",
+ type = "dir",
+ values = {} -- populated by plugin/diskscan.lua
},
{
key='app.opts.plugin_openbrush_sync_folder_thumbnail',
@@ -130,8 +130,8 @@ local plugin = {
key='app.opts.plugin_openbrush_sync_hashtag',
title='tags',
info=( sync_URL and 'space-separated tags will generate their own folders' or ''),
- default = "#xrforge",
- placeholder = "#xrforge",
+ default = "#tronverse-icosagallery",
+ placeholder = "#tronverse-icosagallery",
values=''
},
{
@@ -185,8 +185,8 @@ local plugin = {
key='app.opts.plugin_openbrush_sync_maxitems',
title='Max latest items',
info='limit the total amount of result',
- placeholder='3',
- default = "3",
+ placeholder='8',
+ default = "8",
values=""
},
{
@@ -236,6 +236,17 @@ local plugin = {
return DecodeJson(opts.body)
end,
+ ensureREADME = function(tag,file)
+ if not util.fileExist( file ) then
+ util.writefile( file, app.opts.plugin_global_popup_instructions .. '\n'
+ .. [[This virtual world is generated in realtime via icosa.gallery.
+You can add/create parcels in icosa.gallery, by publishing via OpenBrush, OpenBlocks, or Blender.
+
+> NOTE: Make sure to add hashtag **]] .. tag .. [[** to the title (and re-run xrforge for fast re-sync). ]]
+ )
+ end
+ end,
+
-- expected by src/.lua/apiSync.lua
download = function(t,tag)
local me = app.plugin.openbrush
@@ -245,6 +256,7 @@ local plugin = {
local dirname = '_' .. asset.assetId .. '-' .. util.hyphenate( asset.displayName)
local dirnameFull = me.getFolder(tag) .. '/' .. dirname
local jsonfile = dirnameFull .. '/asset.json'
+ local README = me.getFolder(tag) .. '/README.md'
local sync = true
local assetPrevious = false
local f = false
@@ -268,6 +280,8 @@ local plugin = {
os.execute("mkdir -p " .. dirnameFull)
end
+ me.ensureREADME(tag,README)
+
if util.fileExist(jsonfile) then
assetPrevious = DecodeJson( util.readfile(jsonfile) )
if util.parseIsoDate(asset.updateTime) == util.parseIsoDate(assetPrevious.updateTime) then