fix(platform): unblock UI by deferring P2P mesh startup after session restore

platform.ready() no longer awaits Hyperswarm discovery/contacts or guild
mesh join before returning. Local identity and guild list restore in ~ms;
_finishSessionStartup() runs meshes in the background and emits session-ready.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-21 22:53:12 -04:00
co-authored by Cursor
parent fd4f8a1932
commit 57bed4951b
+12 -5
View File
@@ -158,6 +158,14 @@ class PearcordPlatform extends EventEmitter {
this.userSettings.on('prefs', () => this.emit('user-prefs'))
}
this.guilds = await this.listGuilds()
void this._finishSessionStartup()
}
return this
}
/** Guild mesh + discovery/contacts — background so UI can restore without blocking. */
async _finishSessionStartup () {
try {
if (this.guilds.length && !this.guild && this.mode !== 'dm') {
await this.loadGuild(this.guilds[0].id)
}
@@ -165,8 +173,10 @@ class PearcordPlatform extends EventEmitter {
await this._joinContactsMesh()
await this._joinSettingsMesh()
await this._initDeviceSync()
this.emit('session-ready')
} catch (err) {
this.emit('session-error', err)
}
return this
}
async _initDeviceSync () {
@@ -244,10 +254,7 @@ class PearcordPlatform extends EventEmitter {
await this.boosts.ready()
this._forumTagFilter = null
this.guilds = await this.listGuilds()
await this._joinDiscoveryMesh()
await this._joinContactsMesh()
await this._joinSettingsMesh()
await this._initDeviceSync()
void this._finishSessionStartup()
this.emit('user', user)
return user
}