feat(platform): persist discoveryExploreFilter in USER_PREFS

Phase 146 (v0.8.111): setDiscoveryFilter is async and saves query,
sort, minMembers, and tag to discoveryExploreFilter prefs. Restore
on boot via _ingestDiscoveryExploreBaselineFromPrefs. Emits discovery
after filter updates.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-22 15:54:51 -04:00
co-authored by Cursor
parent 9bf4d3c64f
commit 356f6fd9e3
2 changed files with 23 additions and 1 deletions
+1
View File
@@ -60,6 +60,7 @@ Expose a single `EventEmitter` API the UI drives over IPC (`apps/pearcord/index.
|--------|------|
| `joinVoice`, `leaveVoice`, `setVoiceMute` | `pearcord-voice` + guild gossip |
| `setVoiceRosterChannelExpanded(channelId, expanded)` | USER_PREFS `voiceRosterExpandedChannelIds` (v0.8.110) |
| `setDiscoveryFilter({ query, sort, minMembers, tag })` | Persists `discoveryExploreFilter` in USER_PREFS (v0.8.111) |
| Voice/s screen share ingest | `VoiceMediaHub`, `ScreenShareHub` wired in `_openGuild` |
### Views & companion
+22 -1
View File
@@ -1181,7 +1181,7 @@ class PearcordPlatform extends EventEmitter {
return []
}
setDiscoveryFilter ({ query, sort, minMembers, tag }) {
async setDiscoveryFilter ({ query, sort, minMembers, tag }) {
if (query !== undefined) this._discoveryFilter.query = String(query || '').trim()
if (sort === 'members' || sort === 'name' || sort === 'newest') {
this._discoveryFilter.sort = sort
@@ -1192,7 +1192,13 @@ class PearcordPlatform extends EventEmitter {
if (tag !== undefined) {
this._discoveryFilter.tag = String(tag || '').trim().toLowerCase()
}
if (this.userSettings) {
await this.updateUserPrefs({
discoveryExploreFilter: { ...this._discoveryFilter }
})
}
this.refreshDiscoveryListingsFromMesh().catch(() => {})
this.emit('discovery')
return { ...this._discoveryFilter }
}
@@ -1261,6 +1267,21 @@ class PearcordPlatform extends EventEmitter {
prefs.voiceRosterExpandedChannelIds.map((id) => String(id)).filter(Boolean)
)
}
const df = prefs.discoveryExploreFilter
if (df && typeof df === 'object') {
if (df.query !== undefined) {
this._discoveryFilter.query = String(df.query || '').trim()
}
if (df.sort === 'members' || df.sort === 'name' || df.sort === 'newest') {
this._discoveryFilter.sort = df.sort
}
if (df.minMembers !== undefined) {
this._discoveryFilter.minMembers = Math.max(0, Number(df.minMembers) || 0)
}
if (df.tag !== undefined) {
this._discoveryFilter.tag = String(df.tag || '').trim().toLowerCase()
}
}
}
async setVoiceRosterChannelExpanded (channelId, expanded) {