upstream: integrar Oasis 1.3.1
Base del merge a tres bandas: git 0.9.5 de epsylon, esta rama y el src de la
APK oficial 1.3.1 (la variante movil: OASIS_MOBILE, regex sin \p{}, audio y
video de Android). Corre en el mismo nodejs-mobile 18.20.4 que ya usabamos.
Se conserva de la rama: Karvan, identidades y multicuenta, topbar y barra
inferior, borrado de EXIF sin sharp, filtro hot del foro, RTC sin STUN y los
modulos apagados en movil (wallet, banking, torrents).
Se toma de upstream lo que ya hace de serie: respuesta citada en chats, ssb-lan
en movil, configuracion en ~/.ssb/oasis (sobrevive a reinstalar el backend).
El asistente de bienvenida deja elegir workflow tambien en movil.
This commit is contained in:
parent
8d838dd8b1
commit
c332afd6ea
265 changed files with 80970 additions and 29167 deletions
112
src/configs/state-manager.js
Normal file
112
src/configs/state-manager.js
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
const path = require('path');
|
||||
|
||||
const LEGACY_CONFIG_DIR = __dirname;
|
||||
const ROOT = 'oasis';
|
||||
|
||||
const FOLDERS = {
|
||||
'wallet-addresses.json': 'banking',
|
||||
'banking-address-book.json': 'banking',
|
||||
'banking-allocations.json': 'banking',
|
||||
'banking-eco-history.json': 'banking',
|
||||
'banking-epochs.json': 'banking',
|
||||
'banking-ubi-notice.json': 'banking',
|
||||
'banking-confirm-notice.json': 'banking',
|
||||
'banking-ubi-paid.json': 'banking',
|
||||
'banking-funds-history.json': 'banking',
|
||||
'content_favorites.json': 'content',
|
||||
'blob-access.json': 'content',
|
||||
'follow_state.json': 'content',
|
||||
'invites-used.json': 'content',
|
||||
'agenda-config.json': 'content',
|
||||
'AI-history.json': 'ai',
|
||||
'AI-vectors.json': 'ai',
|
||||
'AI-search-vectors.json': 'ai',
|
||||
'fediverse-accounts.json': 'multiverse',
|
||||
'nextcloud-account.json': 'multiverse',
|
||||
'oasis-backup.json': 'backup',
|
||||
'oasis-first-contact': 'flags',
|
||||
'oasis-mentions-seen': 'flags',
|
||||
'oasis-inbox-read': 'flags',
|
||||
'oasis-inbox-archived': 'flags',
|
||||
'oasis-political-seen': 'flags',
|
||||
'gossip_unfollowed.json': 'peers',
|
||||
'lan-peers.json': 'peers',
|
||||
'peer-health.json': 'peers',
|
||||
'phone-history.json': 'phone',
|
||||
'phone-seen.json': 'phone',
|
||||
'snapshot.oasissn': 'content',
|
||||
'snapshot-recent.oasissn': 'content'
|
||||
};
|
||||
|
||||
const ALIASES = {
|
||||
'oasis-backup.json': ['backup.json']
|
||||
};
|
||||
|
||||
const ssbDir = () => {
|
||||
try {
|
||||
const resolved = require('../server/ssb_config').statePath('.');
|
||||
if (resolved) return path.resolve(resolved);
|
||||
} catch (_) {}
|
||||
if (process.env.OASIS_STATE_DIR) return process.env.OASIS_STATE_DIR;
|
||||
return path.join(os.homedir(), '.ssb');
|
||||
};
|
||||
|
||||
const stateDir = (name) => path.join(ssbDir(), ROOT, FOLDERS[name] || '');
|
||||
|
||||
const statePath = (name) => {
|
||||
const dir = stateDir(name);
|
||||
const target = path.join(dir, name);
|
||||
try {
|
||||
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
||||
if (!fs.existsSync(target)) {
|
||||
const candidates = [name, ...(ALIASES[name] || [])]
|
||||
.flatMap(n => [path.join(ssbDir(), n), path.join(LEGACY_CONFIG_DIR, n)]);
|
||||
const legacy = candidates.find(p => fs.existsSync(p));
|
||||
if (legacy) {
|
||||
try { fs.renameSync(legacy, target); }
|
||||
catch (_) { fs.copyFileSync(legacy, target); try { fs.unlinkSync(legacy); } catch (_) {} }
|
||||
}
|
||||
}
|
||||
} catch (_) {}
|
||||
return target;
|
||||
};
|
||||
|
||||
const keysDir = (base = null) => {
|
||||
const root = ssbDir();
|
||||
if (base && path.resolve(base) !== root) return path.join(base, 'keys');
|
||||
const target = path.join(root, ROOT, 'keys');
|
||||
try {
|
||||
if (!fs.existsSync(target)) {
|
||||
fs.mkdirSync(path.dirname(target), { recursive: true });
|
||||
const legacy = path.join(root, 'keys');
|
||||
if (fs.existsSync(legacy)) fs.renameSync(legacy, target);
|
||||
else fs.mkdirSync(target, { recursive: true, mode: 0o700 });
|
||||
}
|
||||
} catch (_) {}
|
||||
return target;
|
||||
};
|
||||
|
||||
const migrateAll = () => {
|
||||
for (const name of Object.keys(FOLDERS)) {
|
||||
try {
|
||||
const legacy = [name, ...(ALIASES[name] || [])]
|
||||
.flatMap(n => [path.join(ssbDir(), n), path.join(LEGACY_CONFIG_DIR, n)])
|
||||
.find(p => fs.existsSync(p));
|
||||
if (legacy) statePath(name);
|
||||
} catch (_) {}
|
||||
}
|
||||
for (const name of Object.keys(FOLDERS)) {
|
||||
if (FOLDERS[name] !== 'flags' || name.endsWith('.json')) continue;
|
||||
const legacy = path.join(ssbDir(), name);
|
||||
const target = path.join(stateDir(name), name);
|
||||
try { if (fs.existsSync(legacy) && fs.existsSync(target)) fs.unlinkSync(legacy); } catch (_) {}
|
||||
}
|
||||
for (const leftover of ['keys', 'node_modules']) {
|
||||
const dir = path.join(ssbDir(), leftover);
|
||||
try { if (fs.statSync(dir).isDirectory() && fs.readdirSync(dir).length === 0) fs.rmdirSync(dir); } catch (_) {}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { statePath, stateDir, ssbDir, keysDir, migrateAll };
|
||||
Loading…
Add table
Add a link
Reference in a new issue