diff --git a/Chats.md b/Chats.md index ce8d89d..603e241 100644 --- a/Chats.md +++ b/Chats.md @@ -1,97 +1,71 @@ -# Chats +# Responder citando -> ⚠ Rama experimental, no oficial. El Oasis oficial es -> https://github.com/epsylon/oasis · [Volver a la portada](Home) +> Lo único que esta rama cambia en los chats. Cómo funcionan los chats de Oasis está +> en [su wiki](https://wiki.solarnethub.com/socialnet/overview) · +> [Volver a la portada](Home) -Los chats de Oasis son **salas cifradas que sí se guardan**: cada mensaje se publica -firmado en tu registro SSB y se replica a quien te siga. Son lo contrario de -[Karvan](Karvan), que no guarda nada. +En el Oasis oficial, dentro de un chat se escribe y ya. Si diez mensajes después +alguien contesta a algo de arriba, no hay forma de saber a qué. -Esta rama no cambia cómo funcionan. Le añade una cosa: **responder citando** un -mensaje anterior. +Esta rama añade **una flecha en cada burbuja**. --- -## 1. La lista - - - -Está en la categoría **Community**, junto a Karvan. - -Los seis botones de arriba son filtros: **ALL**, **MINE**, **RECENT**, **FAVORITES**, -**OPEN** y **CLOSED**. El activo se queda en amarillo claro. - -Debajo, **Create Chat** y un buscador por texto. - -
- -## 2. Cada chat es una tarjeta - - - -Con su imagen, su título, su descripción y tres etiquetas de estado: - -- **✓ OPEN** — admite gente nueva. El otro estado es CLOSED. -- **🔒 E2E** — los mensajes van cifrados de extremo a extremo. -- **<2w** — actividad reciente; sirve para ver de un vistazo qué chats están vivos. - -Y **Participants**, cuánta gente hay dentro. - -Arriba de la tarjeta están los botones de siempre de Oasis: propagar, favorito, -reportar, seguir. - -
- -## 3. Dentro del chat - -Los mensajes en burbujas, con la fecha separando los días y la hora en cada uno. +Al tocar la **↩** de un mensaje, el formulario de abajo se prepara para responderle: +sale una cita con el autor y el principio del texto, y una **✕** para cancelar. -**La flecha ↩ de cada burbuja es lo que añade esta rama.** Al tocarla, el formulario -de abajo se prepara para responder a ese mensaje: aparece una cita con el autor y el -principio del texto, y una **✕** para cancelar. +Al enviar, la respuesta lleva la cita dentro —la barra amarilla de la última burbuja de +la captura—, así que se ve a qué contesta sin buscarlo. -Al enviar, la respuesta sale con la cita dentro —la barra amarilla de la última -burbuja de la captura—, así que se ve a qué contesta sin tener que buscarlo. +Y ya está. No hay hilos, ni notificaciones, ni nada más: solo saber a qué se responde.
-### Cómo está hecho +## Cómo está hecho, que es la parte interesante -Sin JavaScript, como el resto de Oasis. El botón ↩ es un enlace a -`?replyTo=#chat-compose`; el backend lee ese parámetro, la vista pinta la cita y -mete un campo oculto en el formulario; al enviar, el identificador viaja con el -mensaje y se guarda en él. +**Sin una línea de JavaScript en el cliente.** Oasis funciona sin JS a propósito y esto +no iba a ser la excepción: -Al pintar el hilo, la vista arma un índice de mensajes por identificador y resuelve -cada cita contra él. Si el mensaje citado ya no está —se borró, o es más viejo que lo -que se carga—, la burbuja simplemente sale sin cita. +1. La **↩** es un enlace normal a `?replyTo=#chat-compose`. +2. El backend lee ese parámetro y se lo pasa a la vista. +3. La vista pinta la cita sobre el formulario y mete un campo oculto `replyTo`. +4. Al enviar, el identificador viaja con el mensaje y **se guarda dentro de él**. +5. Al pintar el hilo, la vista arma un índice de mensajes por identificador y resuelve + cada cita contra él. -## 4. Adjuntar una imagen +Si el mensaje citado ya no está —se borró, o es más viejo que lo que se carga—, la +burbuja sale sin cita en vez de romperse. + +> Este arreglo salió de probarlo, no de leer el código: el identificador **se guardaba +> pero no se pintaba**, porque el modelo no lo copiaba al construir el mensaje. La cita +> aparecía al escribir y desaparecía al enviar. + +## Adjuntar imágenes -**Upload media (max-size: 50MB)** abre el selector de fotos de Android. +Funciona, y en la APK oficial no: su envoltorio no implementa el método que abre el +selector de ficheros del sistema, así que el botón no hace nada. El de esta rama sí. +Ver [Compilar la APK](Compilar). -Que esto funcione depende de otro método del envoltorio, -`WebChromeClient.onShowFileChooser`. Sin él, tocar el botón no abre nada: es lo que le -pasaba a una versión anterior del envoltorio de esta rama, y está arreglado. - -> Las fotos se suben **sin sus metadatos**: la ubicación GPS, la marca del móvil y el -> número de serie se quitan antes de guardarlas. Solo se conserva la orientación. +Las fotos suben **sin sus metadatos**: la ubicación GPS, la marca del móvil y el número +de serie se quitan antes de guardarlas.
--- -## Cuándo usar cada cosa +## Chats o Karvan -| | [Chats](Chats) | [Karvan](Karvan) | +Son dos cosas distintas y conviene no confundirlas: + +| | Chats | [Karvan](Karvan) | |---|---|---| | Dónde viven los mensajes | En tu registro SSB, en disco | Solo en memoria | | Cuánto duran | Para siempre | Hasta que vence la sala | | Se replican a la red | Sí | No | -| Quién puede entrar | Miembros del chat | Quien tenga el enlace | +| Quién entra | Miembros del chat | Quien tenga el enlace | | Llamadas | No | Sí | -| Sirve para | Lo que quieres conservar | Lo que no | +| Para qué | Lo que quieres conservar | Lo que no | diff --git a/Home.md b/Home.md index 6ea243b..ccc0cd6 100644 --- a/Home.md +++ b/Home.md @@ -1,104 +1,77 @@ -# Oasis Mobile — rama de desarrollo experimental +# Oasis Mobile — qué añade esta rama -> # ⚠ ESTO NO ES OASIS OFICIAL -> -> Esta wiki documenta una **rama de desarrollo experimental** mantenida por el -> hacklab, **sin afiliación** con el proyecto original. -> -> ## El Oasis oficial es el de epsylon: https://github.com/epsylon/oasis -> -> Si quieres **usar Oasis de verdad, instala el oficial**. Lo que se documenta aquí -> puede romperse, cambiar de forma incompatible o desaparecer sin aviso. No está -> auditado y no tiene garantía de ninguna clase. -> -> **Los fallos de esta rama se reportan aquí, nunca a epsylon.** +> **⚠ No es Oasis oficial.** Es una rama experimental del hacklab sobre +> [el Oasis de epsylon](https://github.com/epsylon/oasis), sin afiliación con él. +> Si quieres usar Oasis de verdad, **instala el oficial**. Los fallos de aquí se +> reportan aquí, nunca a epsylon. Base: **0.9.5**. Rama: `PRUEBAS`. -Versión base: **Oasis 0.9.5**. Rama: `PRUEBAS`. +![Las cuatro novedades](img/00-novedades.png) + +**Esta wiki solo cuenta lo que esta rama hace distinto.** Lo demás —qué es SSB, cómo +funcionan los pubs, para qué sirve cada módulo de Oasis— está en la +[wiki del proyecto oficial](https://wiki.solarnethub.com/socialnet/overview), y no +tiene sentido repetirlo peor. --- -## Qué es esto +## Lo que no existe en el Oasis oficial -Una rama que sigue de cerca las versiones de epsylon y añade dos cosas: una interfaz -pensada para el móvil y un módulo de **salas efímeras con llamadas**. +| | Oficial | Esta rama | +|---|---|---| +| **[Salas efímeras](Karvan)** | — | Karvan: mensajes que solo viven en memoria y se autodestruyen | +| **[Videollamadas](Llamadas)** | — | Audio y vídeo por WebRTC, sin servidores de terceros | +| **[Interfaz de móvil](Interfaz)** | El menú de escritorio en una pantalla pequeña | Panal de hexágonos, filtros y barra de accesos rápidos | +| **[Varias identidades](Identidades)** | Una por instalación | Varias en el mismo móvil, con aviso si dos comparten clave | +| **[Respuesta citada](Chats)** | — | Responder a un mensaje concreto dentro de un chat | +| **[Envoltorio Android propio](Compilar)** | APK sin permisos de cámara ni micrófono | Proyecto Gradle: permisos, subida de ficheros y servicio que sobrevive | +| **Metadatos de las fotos** | Se quitan solo si está `sharp`; en Android **nunca** | Se quitan siempre: GPS, marca, modelo, número de serie | +| **Servidor STUN** | Uno de Google, por defecto | Ninguno. TURN propio si lo configuras | -Todas las capturas de esta wiki están tomadas de la APK de la rama funcionando en un -Pixel 9 (Android 16). No hay ningún montaje: es lo que se ve al usarla. +## Y lo que cambia de lo que ya había -| Página | De qué va | +- **Los nombres de las categorías son los suyos** (Community, Library, Multiverse). La + rama llegó a cambiarlos y se revirtió: separarse de upstream en algo tan visible no + compensa. +- **Traducido a los 11 idiomas** de Oasis, también todo lo nuevo. +- Cuatro fallos de la propia rama, encontrados probando y arreglados: están en + [Si algo va mal](Problemas). + +--- + +## Por dónde empezar + +| Página | Qué cuenta | |---|---| -| **[La interfaz](Interfaz)** | Hexágonos, filtros, barra de accesos rápidos, botón por botón | -| **[Karvan](Karvan)** | Salas que viven solo en memoria y se autodestruyen | -| **[Llamadas](Llamadas)** | Audio y vídeo sobre WebRTC, y por qué la APK oficial no puede hacerlo | -| **[Chats](Chats)** | Los chats cifrados de Oasis, con respuesta citada | -| **[Módulos](Modulos)** | Encender y apagar partes de la aplicación | -| **[Identidades](Identidades)** | Varias cuentas en el mismo móvil, y el aviso que evita perder una | -| **[Compilar la APK](Compilar)** | Cómo se construye, de dónde sale cada pieza | +| **[Karvan](Karvan)** | Salas efímeras: crear, invitar, cuánto viven, qué protege y qué no | +| **[Llamadas](Llamadas)** | Cómo se llama, por qué la APK oficial no puede, y el TURN | +| **[La interfaz](Interfaz)** | El panal, los filtros y la barra, botón por botón | +| **[Identidades](Identidades)** | Varias cuentas, y el aviso que evita perder una | +| **[Chats](Chats)** | Lo único que cambia ahí: responder citando | +| **[Compilar la APK](Compilar)** | Cómo se construye y cómo se publica una versión | | **[Estructura del código](Estructura)** | Dónde vive cada fichero y por qué ahí | -| **[Si algo va mal](Problemas)** | Los fallos que han pasado de verdad, y su arreglo | -| **[Estado y hoja de ruta](Roadmap)** | Qué funciona, qué no, y qué está bloqueado | +| **[Si algo va mal](Problemas)** | Los fallos que han pasado de verdad | | **[Qué NO tiene](Limitaciones)** | Lo que falta respecto al oficial, sin adornos | +| **[Estado](Roadmap)** | Qué está probado y qué no | + +Todas las capturas están tomadas de la APK funcionando en un Pixel 9 con Android 16. +No hay ningún montaje. --- -## La pantalla principal +## Instalar - +La APK **no está en ninguna tienda**: se descarga de las *releases* de este repositorio +y se instala a mano, con "orígenes desconocidos" activado. -Al abrir la aplicación hay tres zonas, y no cambian nunca de sitio: +Se instala **junto al Oasis oficial** sin pisarlo —el identificador de aplicación es +`net.laenre.oasis`, distinto del suyo—, así que puedes tener los dos y comparar. -**Arriba** — el logo (vuelve al inicio), los dos filtros **Personal** y **Social**, -y tu avatar (lleva a tu perfil). +Necesita **unos 350 MB libres**. El primer arranque tarda entre 15 y 60 segundos +porque descomprime el servidor; mientras, enseña una pantalla con un contador. -**En medio** — el panal de hexágonos. Cada hexágono es una categoría; al tocarlo se -abre su rejilla de módulos. Debajo, el mismo menú en forma de lista desplegable, que -es el que aparece en el resto de páginas. - -**Abajo** — la barra de accesos rápidos, con hasta cuatro módulos elegidos por ti, el -botón **Edit** para cambiarlos, y **Peers** e **Invites** siempre a mano. - -Está explicado botón a botón en **[La interfaz](Interfaz)**. - -
- ---- - -## Cómo se instala - -La APK **no está en ninguna tienda**. Se descarga de las *releases* de este -repositorio y se instala a mano, con "orígenes desconocidos" activado. - -Se instala **junto al Oasis oficial** sin pisarlo: el identificador de aplicación es -`net.laenre.oasis`, distinto del oficial. Puedes tener los dos y comparar. - -> **Verifica siempre la huella de la firma** antes de instalar una APK descargada de -> un servidor propio. La huella de cada versión se publica en su release. - -Necesita **unos 350 MB libres**: la APK ocupa 112 MB y el backend se descomprime -dentro de los datos de la aplicación la primera vez que arranca. Si no hay sitio, la -instalación falla con `INSTALL_FAILED_INSUFFICIENT_STORAGE`. - -**El primer arranque tarda.** Se descomprime el backend y se levanta SSB: entre 10 y -60 segundos según el móvil. Mientras, la aplicación enseña una pantalla de estado con -los segundos que lleva esperando; no está colgada. - ---- - -## Las fotos suben sin tus metadatos - -Al subir una imagen se le quitan los metadatos **antes** de guardarla: la ubicación -GPS, la marca y el modelo del móvil, el número de serie, la fecha. Vale para JPEG, PNG -y WebP. - -Solo se conserva la **orientación** —para que las fotos verticales no salgan -tumbadas— y el perfil de color. Los píxeles no se tocan: no se recomprime nada. - -Esto estuvo roto en Android durante un tiempo, y merece la pena saber por qué: el -limpiador dependía de una biblioteca con binarios nativos que **no se empaqueta en el -móvil**, y cuando no está, devolvía la imagen intacta sin decir nada. Ahora el -limpiador no depende de nada. - ---- +> **Verifica la huella de la firma** antes de instalar una APK bajada de un servidor +> propio. La de cada versión se publica en su release y se comprueba con +> `apksigner verify --print-certs`. ## Licencia diff --git a/Interfaz.md b/Interfaz.md index e3f29a2..9276e0b 100644 --- a/Interfaz.md +++ b/Interfaz.md @@ -57,7 +57,7 @@ Volver a tocar el hexágono cierra la rejilla. Lo mismo con **Personal**: Avatar, CV, Agenda, Favorites, **Modules** y **Settings**. Por aquí se llega a la pantalla de módulos, que es donde se encienden y apagan las -partes de la aplicación. Ver [Módulos](Modulos). +partes de la aplicación, incluido [Karvan](Karvan).
diff --git a/Karvan.md b/Karvan.md index 855088c..0260200 100644 --- a/Karvan.md +++ b/Karvan.md @@ -126,6 +126,33 @@ contra un adversario que ya controla tu dispositivo o el servidor.** --- +## Apagarlo + + + +Karvan es un módulo como los demás: aparece en **Personal → Modules**, entre *Jobs* y +*L.A.R.P.*, y se apaga desde ahí. + +Apagarlo lo quita del menú y de la barra de accesos rápidos, y su ruta pasa a devolver +un error. Las salas que hubiera abiertas se pierden, igual que al reiniciar. + +Que esté ahí y no en un sitio propio es deliberado. Un módulo nuevo no se inventa su +forma de existir: + +| Fichero | Qué se añadió | +|---|---| +| `views/modules_view.js` | Una línea en la lista, en orden alfabético | +| `configs/config-manager.js` | `"karvanMod": "on"` en la configuración por defecto | +| `views/main_views.js` | `renderKarvanLink()`, calcado de `renderPollsLink()` | +| `backend/karvan_routes.js` | Las rutas, todas detrás de `checkMod(ctx, 'karvanMod')` | + +Esa última comprobación es la que hace que apagarlo apague de verdad: cada ruta +pregunta por el módulo antes de responder, igual que las de upstream. + +
+ +--- + ## Lo mismo en el ordenador Karvan está también en diff --git a/Modulos.md b/Modulos.md deleted file mode 100644 index c37d877..0000000 --- a/Modulos.md +++ /dev/null @@ -1,56 +0,0 @@ -# Módulos - -> ⚠ Rama experimental, no oficial. El Oasis oficial es -> https://github.com/epsylon/oasis · [Volver a la portada](Home) - -Oasis trae 48 módulos y no todo el mundo quiere los 48. La pantalla de módulos los -enciende y apaga uno a uno; lo que apagas desaparece del menú y su ruta deja de -responder. - -Se llega por el hexágono **Personal** → **Modules**. - ---- - -## La pantalla - - - -Arriba, dos botones que aplican un conjunto entero de golpe: - -- **MOBILE** — deja encendido lo que tiene sentido en un móvil. -- **FULL** — enciende todo. - -Debajo, la tabla: nombre, para qué sirve y una casilla. El nombre es un enlace a ese -módulo. Al final de la tabla está **Save settings**, que es lo que guarda los cambios. - -
- -## Karvan en la lista - - - -**Karvan** aparece entre Jobs y L.A.R.P., en su sitio alfabético, con la misma forma -que los demás: *"Ephemeral rooms: messages live only in memory and self-destruct."* - -Apagarlo hace desaparecer el módulo del menú y de la barra de accesos rápidos, y su -ruta pasa a devolver un error. Las salas que hubiera abiertas se pierden, como se -pierden al reiniciar. - -
- ---- - -## Cómo está declarado - -Un módulo nuevo no se inventa una forma propia de existir: se declara donde están los -demás. - -| Fichero | Qué se añadió | -|---|---| -| `src/views/modules_view.js` | Una línea en la lista, en orden alfabético | -| `src/configs/config-manager.js` | `"karvanMod": "on"` en la configuración por defecto | -| `src/views/main_views.js` | `renderKarvanLink()`, calcado de `renderPollsLink()` | -| `src/backend/fork_routes.js` | Las rutas, todas detrás de `checkMod(ctx, 'karvanMod')` | - -Esa última comprobación es la que hace que apagarlo apague de verdad: cada ruta -pregunta por el módulo antes de responder, igual que hacen las rutas de upstream. diff --git a/_Sidebar.md b/_Sidebar.md index 787e38c..908c6b6 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -10,7 +10,6 @@ - [Karvan · salas efímeras](Karvan) - [Llamadas](Llamadas) - [Chats](Chats) -- [Módulos](Modulos) - [Identidades](Identidades) - [Compilar la APK](Compilar) - [Estructura del código](Estructura) diff --git a/img/00-novedades.png b/img/00-novedades.png new file mode 100644 index 0000000..ea37899 Binary files /dev/null and b/img/00-novedades.png differ diff --git a/img/16-chats-lista.png b/img/16-chats-lista.png deleted file mode 100644 index 5ed1fd6..0000000 Binary files a/img/16-chats-lista.png and /dev/null differ diff --git a/img/17-chat-tarjeta.png b/img/17-chat-tarjeta.png deleted file mode 100644 index 8bf7e03..0000000 Binary files a/img/17-chat-tarjeta.png and /dev/null differ diff --git a/img/22-modules.png b/img/22-modules.png deleted file mode 100644 index 7c19b05..0000000 Binary files a/img/22-modules.png and /dev/null differ