5 Commits

8 changed files with 47 additions and 20 deletions

View File

@@ -87,19 +87,19 @@ jobs:
- name: Build Python wheel
run: task wheel
- name: Build Electron App (Linux)
run: task build-electron-linux
- name: Build Electron App (Windows)
run: task build-electron-windows
- name: Build Electron Apps (Linux and Windows)
run: task build-electron-all
- name: Prepare release assets
run: |
mkdir -p release-assets
# Collect artifacts
find dist -type f \( -name "*-linux*.AppImage" -o -name "*-linux*.deb" \) -exec cp {} release-assets/ \;
find dist -type f \( -name "*-win*.exe" -o -name "*-win-portable*.exe" \) -exec cp {} release-assets/ \;
find python-dist -type f -name "*.whl" -exec cp {} release-assets/ \;
# Collect artifacts from dist/
# Linux artifacts
find dist -maxdepth 1 -type f \( -name "*-linux*.AppImage" -o -name "*-linux*.deb" \) -exec cp {} release-assets/ \;
# Windows artifacts
find dist -maxdepth 1 -type f \( -name "*-win*.exe" \) -exec cp {} release-assets/ \;
# Python artifacts
find python-dist -maxdepth 1 -type f -name "*.whl" -exec cp {} release-assets/ \;
# Generate checksums
cd release-assets
@@ -117,6 +117,7 @@ jobs:
if [ -f "$file" ] && [[ "$file" != *.sha256 ]] && [[ "$file" != *release-body.md* ]]; then
filename=$(basename "$file")
if [ -f "release-assets/${filename}.sha256" ]; then
# Extract just the filename and its sha256 (format: <sha256> <filename>)
echo "\`$(cat "release-assets/${filename}.sha256")\`" >> release-body.md
fi
fi

View File

@@ -2,7 +2,7 @@
A [Reticulum MeshChat](https://github.com/liamcottle/reticulum-meshchat) fork from the future.
<video src="showcase/showcase-video-call.mp4" controls="controls" style="max-width: 100%;"></video>
<video src="https://strg.0rbitzer0.net/view/62926a2a-0a9a-4f44-a5f6-000dd60deac1.mp4" controls="controls" style="max-width: 100%;"></video>
This project is seperate from the original Reticulum MeshChat project, and is not affiliated with the original project.

View File

@@ -141,8 +141,7 @@ tasks:
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run build-backend"
- "{{.NPM}} run dist -- --linux AppImage"
- "{{.NPM}} run dist -- --linux deb"
- "{{.NPM}} run dist -- --linux AppImage deb"
build-electron-windows:
desc: Build Windows Electron apps (portable and installer)
@@ -150,8 +149,15 @@ tasks:
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run build-backend"
- "{{.NPM}} run dist -- --win portable"
- "{{.NPM}} run dist -- --win nsis"
- "{{.NPM}} run dist -- --win portable nsis"
build-electron-all:
desc: Build all Electron apps (Linux and Windows)
deps: [build-frontend]
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run build-backend"
- "{{.NPM}} run dist -- --linux AppImage deb --win portable nsis"
dist:
desc: Build distribution (defaults to AppImage)

View File

@@ -91,6 +91,9 @@ from meshchatx.src.version import __version__ as app_version
# https://cx-freeze.readthedocs.io/en/latest/faq.html#using-data-files
# bearer:disable python_lang_path_traversal
def get_file_path(filename):
# Remove trailing slashes for path joining consistency
filename = filename.rstrip("/\\")
if getattr(sys, "frozen", False):
datadir = os.path.dirname(sys.executable)
return os.path.join(datadir, filename)
@@ -1706,6 +1709,15 @@ class ReticulumMeshChat:
},
)
# allow serving manifest.json and service-worker.js directly at root
@routes.get("/manifest.json")
async def manifest(request):
return web.FileResponse(get_file_path("public/manifest.json"))
@routes.get("/service-worker.js")
async def service_worker(request):
return web.FileResponse(get_file_path("public/service-worker.js"))
# serve ping
@routes.get("/api/v1/status")
async def status(request):
@@ -5969,6 +5981,8 @@ class ReticulumMeshChat:
response.headers["Content-Type"] = "text/css; charset=utf-8"
elif path.endswith(".json"):
response.headers["Content-Type"] = "application/json; charset=utf-8"
elif path.endswith(".wasm"):
response.headers["Content-Type"] = "application/wasm"
elif path.endswith(".html"):
response.headers["Content-Type"] = "text/html; charset=utf-8"
return response
@@ -6048,9 +6062,15 @@ class ReticulumMeshChat:
)
app.add_routes(routes)
app.add_routes(
[web.static("/", get_file_path("public/"))],
) # serve anything in public folder
# serve anything else from public folder
# we use add_static here as it's more robust for serving directories
public_dir = get_file_path("public")
if os.path.exists(public_dir):
app.router.add_static("/", public_dir, name="static", follow_symlinks=True)
else:
print(f"Warning: Static files directory not found at {public_dir}")
app.on_shutdown.append(
self.shutdown,
) # need to force close websockets and stop reticulum now

View File

@@ -3,4 +3,4 @@ Auto-generated helper so Python tooling and the Electron build
share the same version string.
"""
__version__ = "3.3.1"
__version__ = "3.3.2"

View File

@@ -1,6 +1,6 @@
{
"name": "reticulum-meshchatx",
"version": "3.3.1",
"version": "3.3.2",
"description": "A simple mesh network communications app powered by the Reticulum Network Stack",
"homepage": "https://git.quad4.io/RNS-Things/MeshChatX",
"author": "Sudo-Ivan",

View File

@@ -1,6 +1,6 @@
[project]
name = "reticulum-meshchatx"
version = "3.3.0"
version = "3.3.2"
description = "A simple mesh network communications app powered by the Reticulum Network Stack"
authors = [
{name = "Sudo-Ivan"}

View File

Binary file not shown.