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.
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
