2 Estructura
SITO edited this page 2026-08-20 00:14:38 +02:00

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.


Arquitectura

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, y los mismos nombres: *_model.js para modelos, *_view.js para vistas, *_views.js cuando son varias.

Los 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/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
src/views/hive_views.js La interfaz de móvil main_views.js

Ese último está aquí sin dibujar nada: sus funciones empiezan con if (process.env.OASIS_MOBILE !== '1') return "";. Vive en los dos repositorios para que main_views.js sea idéntico y las actualizaciones de upstream se apliquen una sola vez. Ver Diferencias con la versión de móvil.

Y lo que se toca de lo suyo

Enganches de una línea, casi siempre:

// main_views.js
renderKarvanLink()          // calcado de renderPollsLink()

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 entra en conflicto cada vez.

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 a una existente, y por un motivo medible.

Por qué las traducciones son un overlay

Upstream tiene once ficheros oasis_XX.js y los reescribe enteros en cada versión. i18n_fork.js lleva las claves de la rama aparte, y i18n.js las mezcla con tres líneas. Dentro va solo lo propio: los nombres de las categorías no están, porque son los de epsylon.

Por qué Karvan trae su propia hoja de estilos

Igual que highlight.css en upstream: define la forma —las burbujas, los botones redondos de llamada, la rejilla de vídeo— y no los colores de la interfaz, que los pone el tema. Ver Temas.


Lo que se ha quitado por sobrar

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

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