Table of Contents
Cómo está organizado el código
⚠ Rama experimental, no oficial. El Oasis oficial es https://github.com/epsylon/oasis · Volver a la portada
Esta rama tiene que hacer dos cosas a la vez: añadir funciones y seguir el ritmo de epsylon, que publica una versión cada pocos días. Lo segundo solo sale bien si el código propio se distingue del suyo y no le estorba.
Esta página explica dónde vive cada cosa y por qué ahí.
La regla
Upstream no usa ni un solo subdirectorio en src/views, src/backend,
src/models, src/client/assets/styles ni src/client/assets/translations: 66 vistas
y 67 modelos, todos planos. La rama sigue esa misma forma. Nada de carpetas propias.
Y los nombres, los suyos: *_model.js para modelos, *_view.js para vistas,
*_views.js cuando son varias.
Los diez ficheros propios
| Fichero | Qué es | A qué se parece en upstream |
|---|---|---|
src/models/karvan_model.js |
Las salas efímeras y su ciclo de vida | polls_model.js |
src/views/karvan_view.js |
La lista de salas y la sala | chats_view.js |
src/backend/karvan_routes.js |
Las rutas del módulo | — (ver abajo) |
src/client/public/js/karvan.js |
El cliente WebRTC del navegador | pdf-viewer.js |
src/client/assets/styles/karvan.css |
Los estilos del módulo | highlight.css |
src/views/hive_views.js |
El panal, la topbar y la barra inferior | main_views.js |
src/views/identities_view.js |
El selector de identidades | cualquier *_view.js |
src/backend/accounts.js |
Encontrar y elegir identidades | nameCache.js |
src/backend/turnCredentials.js |
Credenciales efímeras para TURN | wallet_addresses.js |
src/client/assets/translations/i18n_fork.js |
Los textos de la rama | junto a i18n.js |
Y lo que se toca de lo suyo
+247 líneas repartidas en 21 ficheros — una media de once líneas por fichero. Casi todo son enganches de una línea:
// main_views.js: la interfaz de móvil se llama, no se escribe aquí
const forkNav = require('./hive_views')({ i18n });
La excepción es OasisMobile.css, con unas mil líneas: es el tema de la rama, y un
tema es un fichero entero por definición.
Las tres decisiones que no son obvias
Por qué las rutas van aparte
Upstream mete 625 rutas en backend.js, en una sola cadena. Ese fichero se
reescribe en cada versión: +833/-286 líneas en la 0.9.2, +266/-31 en la 0.9.1.
Una ruta añadida en medio de esa cadena entra en conflicto cada vez. Por eso las
del módulo viven en karvan_routes.js, montadas en un router propio que se inserta
antes del de upstream: lo que no casa cae a next() y sigue su curso.
Es la única pieza que no imita una existente, y por un motivo medible.
Por qué la interfaz de móvil está en un fichero suelto
hive_views.js no se limita a agrupar: existe para que main_views.js no crezca.
Ese fichero cambia mucho entre versiones, y tener el panal dentro obligaría a rehacerlo
en cada integración.
Sus tres funciones empiezan igual:
if (process.env.OASIS_MOBILE !== '1') return "";
Así el mismo main_views.js sirve para las dos ramas: en escritorio no dibujan nada.
Por eso OASIS_LINUX puede llevarlo
idéntico sin heredar la interfaz de móvil.
Por qué las traducciones son un overlay
Upstream tiene once ficheros oasis_XX.js y los reescribe enteros en cada versión.
Añadir claves dentro significaría perderlas cada vez.
i18n_fork.js las lleva aparte y i18n.js las mezcla con un enganche de tres líneas:
try {
const overlay = require('./i18n_fork.js');
languages.forEach(l => Object.assign(i18n[l] = i18n[l] || {}, overlay[l] || overlay.en || {}));
} catch (e) {}
Dentro va solo lo de la rama. Los nombres de las categorías, por ejemplo, no están: son los de epsylon y se leen de los suyos.
Lo que se ha quitado por sobrar
Revisando esto salieron cosas que no deberían haber estado:
| Qué | Por qué sobraba |
|---|---|
views/fork/ y translations/fork/ |
Subdirectorios propios; upstream no tiene ninguno |
Una segunda ruta /legacy/export |
Copia exacta de la del dev, en otro fichero |
media-favorites.js y su JSON |
De una versión anterior; nadie lo requería |
El campo subtopic en el foro |
Resto de unos subtemas propios que se descartaron |
Los subtemas de verdad son los de upstream, con sus rutas y sus vistas.
Cómo comprobarlo
Contra un clon de upstream de la misma versión:
# ficheros propios de la rama
for d in src/backend src/models src/views; do
diff <(ls ../oasis/$d) <(ls $d) | grep '^>'
done
# subdirectorios que upstream no tiene (no debería salir ninguno)
find src/views src/backend src/models -maxdepth 1 -type d | tail -n +2
# líneas añadidas sobre cada fichero suyo
for f in $(git ls-files 'src/**/*.js'); do
[ -f ../oasis/$f ] && n=$(diff ../oasis/$f $f | grep -c '^>') && [ $n -gt 0 ] && echo "$n $f"
done | sort -rn
Oasis Mobile · rama PRUEBAS
⚠ No es Oasis oficial El oficial es este
Oasis en general
Esta rama
- La interfaz
- Karvan · salas efímeras
- Llamadas
- Chats
- Identidades
- Compilar la APK
- Estructura del código