Una revision a fondo del arbol contra 0.9.5 saco varios fallos, unos heredados y
otros que introdujo la propia integracion. Verificados uno a uno antes de tocar.
Recursos referenciados que no existian (los introduje al adoptar vistas de 0.9.5
que los usan, mientras la rama los habia borrado):
- Los cuatro temas *-SNH.css. settings_view ofrece Dark, Clear, Matrix y Purple,
pero solo estaba OasisMobile: elegir cualquiera daba 404 y la app se quedaba sin
estilos. Ahora los cuatro responden 200.
- pdf.min.mjs, pdf.worker.min.mjs y pdf-viewer.js, referenciados desde seis vistas.
Regresiones revertidas a 0.9.5 verbatim en catorce ficheros. Las de fondo:
- larp_model perdio getGoverningPeriodId, que backend.js llama: el anuncio de
gobierno no salia nunca, con el TypeError tragado por un catch.
- courts_view y search_view tenian selected: false, que hyperscript SI serializa
como atributo y HTML interpreta como seleccionado. La forma de upstream, el
spread condicional, es la correcta.
- pm_model perdio includeDeleted, projects_model la validacion de deadline pasado,
jobs_model el desempate por timestamp, middleware el flag de debug HTTP.
forum_view pasa a 0.9.5 conservando el filtro hot. Esto arregla un fallo activo: la
vista de la rama declaraba un cuarto parametro topic y backend.js llama con cinco
argumentos, asi que al abrir una respuesta el %clave del hilo se colaba como tema y
el hilo salia VACIO. Upstream pasa los mismos cinco argumentos a una firma de tres y
JS los ignora, que es lo correcto.
chats_view pasa a 0.9.5 y se implementa replyTo de verdad. Estaba muerto de punta a
punta: backend.js no leia ctx.query.replyTo ni pasaba el cuarto argumento a
sendMessage, asi que ningun mensaje llegaba a tener replyTo y la cita no se
renderizaba jamas. Ahora la cadena esta completa —modelo, GET, POST y vista— con
indice msgById armado antes de mezclar con las encuestas, y sin gate de movil:
responder a un mensaje no es una funcion de movil.
aria-label: encontrada la causa. No es que hyperaxe lo ignore, es que hyperscript
solo asigna como propiedad y html-element solo serializa atributos de su tabla, en
la que aria-* no esta; data-* si tiene rama propia, por eso las tablas responsive
funcionaban. Se arregla con el escape hatch attrs:{}, sin tocar node_modules.
prepare.sh copia README.md y falla si no esta: backend.js lo lee con readFileSync
sin try/catch, de modo que sin el fichero el backend muere con ENOENT al arrancar.
Verificado con la app en marcha: 17 rutas OK, los cuatro recursos que faltaban
sirviendo 200, aria-label emitido en el HTML, e interfaz intacta (10 categorias,
50 modulos, 7 accesos rapidos, 0 etiquetas vacias).
80 lines
3.4 KiB
Bash
Executable file
80 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Prepara lo que el proyecto Android no lleva en git:
|
|
# - las librerias nativas (libnode.so son 49 MB; no tiene sentido versionarlas)
|
|
# - assets/nodejs-project.zip con el backend Node y sus dependencias
|
|
#
|
|
# Uso: ./scripts/prepare.sh [ruta-a-un-apk-o-directorio-con-lib/arm64-v8a]
|
|
set -euo pipefail
|
|
|
|
HERE="$(cd "$(dirname "$0")/.." && pwd)"
|
|
REPO="$(cd "$HERE/.." && pwd)"
|
|
JNI="$HERE/app/src/main/jniLibs/arm64-v8a"
|
|
ASSETS="$HERE/app/src/main/assets"
|
|
SRC="${1:-}"
|
|
|
|
mkdir -p "$JNI" "$ASSETS"
|
|
|
|
# --- 1) librerias nativas -----------------------------------------------------
|
|
need_libs=(libnode.so libnative-lib.so libc++_shared.so)
|
|
missing=0
|
|
for l in "${need_libs[@]}"; do [ -f "$JNI/$l" ] || missing=1; done
|
|
|
|
if [ "$missing" = "1" ]; then
|
|
if [ -z "$SRC" ]; then
|
|
echo "Faltan las librerias nativas en $JNI"
|
|
echo "Pasa un APK o un directorio que tenga lib/arm64-v8a/, por ejemplo:"
|
|
echo " ./scripts/prepare.sh ../../oasis_mobile"
|
|
exit 1
|
|
fi
|
|
if [ -d "$SRC/lib/arm64-v8a" ]; then
|
|
cp "$SRC/lib/arm64-v8a"/*.so "$JNI/"
|
|
elif [ -f "$SRC" ]; then
|
|
tmp="$(mktemp -d)"; unzip -qo "$SRC" 'lib/arm64-v8a/*' -d "$tmp"
|
|
cp "$tmp/lib/arm64-v8a"/*.so "$JNI/"; rm -rf "$tmp"
|
|
else
|
|
echo "No encuentro librerias en $SRC"; exit 1
|
|
fi
|
|
echo "librerias nativas copiadas:"; ls -la "$JNI" | tail -n +2 | awk '{print " "$NF" ("$5" bytes)"}'
|
|
fi
|
|
|
|
# --- 2) backend + dependencias ---------------------------------------------
|
|
# El node_modules del movil esta podado: son ~137 MB frente a los 1,4 GB de una
|
|
# instalacion de escritorio. En vez de reinstalarlo, se reutiliza el del APK base:
|
|
# comprobado que las 98 dependencias son identicas entre 0.9.1 y 0.9.5.
|
|
BASE_ZIP=""
|
|
if [ -n "$SRC" ] && [ -f "$SRC" ]; then
|
|
tmpz="$(mktemp -d)"; unzip -qo "$SRC" 'assets/nodejs-project.zip' -d "$tmpz" 2>/dev/null || true
|
|
[ -f "$tmpz/assets/nodejs-project.zip" ] && BASE_ZIP="$tmpz/assets/nodejs-project.zip"
|
|
fi
|
|
|
|
work="$(mktemp -d)"
|
|
if [ -n "$BASE_ZIP" ]; then
|
|
( cd "$work" && unzip -q "$BASE_ZIP" )
|
|
mv "$work/nodejs-project/src/server/node_modules" "$work/_nm"
|
|
rm -rf "$work/nodejs-project/src"
|
|
elif [ -d "$REPO/src/server/node_modules" ]; then
|
|
mkdir -p "$work/nodejs-project"
|
|
cp -r "$REPO/src/server/node_modules" "$work/_nm"
|
|
else
|
|
echo "No hay node_modules. Pasa un APK base del que sacarlo, o instalalas:"
|
|
echo " (cd $REPO/src/server && npm install --omit=dev)"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$work/nodejs-project"
|
|
cp -r "$REPO/src" "$work/nodejs-project/"
|
|
# backend.js lee README.md con readFileSync SIN try/catch (linea ~1690):
|
|
# si falta, el backend muere con ENOENT al arrancar.
|
|
cp "$REPO/main.js" "$REPO/package.json" "$REPO/README.md" "$work/nodejs-project/" 2>/dev/null || true
|
|
test -f "$work/nodejs-project/README.md" || { echo "FALTA README.md: el backend no arrancaria"; exit 1; }
|
|
rm -rf "$work/nodejs-project/src/server/node_modules"
|
|
mv "$work/_nm" "$work/nodejs-project/src/server/node_modules"
|
|
|
|
# --- 3) empaquetar ------------------------------------------------------------
|
|
# Con compresion: sin ella el backend son ~145 MB y la APK se iria por encima de 200.
|
|
rm -f "$ASSETS/nodejs-project.zip"
|
|
( cd "$work" && zip -q -r "$ASSETS/nodejs-project.zip" nodejs-project )
|
|
rm -rf "$work" "${tmpz:-/nonexistent}"
|
|
echo "backend empaquetado: $(du -h "$ASSETS/nodejs-project.zip" | cut -f1) en assets/nodejs-project.zip"
|
|
echo
|
|
echo "Listo. Ahora: ./gradlew assembleDebug (o assembleRelease para firmar)"
|