fix(market): search your zone by a coarse prefix, not the exact cell
Discovery searched the full 5-char geohash (~2.4 km) with an exact Nostr tag match, so two devices in adjacent cells never found each other even though publish emits the full NIP-52 prefix ladder. Search now coarsens the area to a configurable precision (SocialSettings.searchPrecision, default 4 ~20 km) via searchPrefix(), with a human-worded 'how far' selector (Very close / Around here / My region -> 5/4/3) in the market setup sheet. Also: surface a clear 'couldn't reach the servers' message when no relay accepts a share (instead of 'shared 0'), and add wss://relay.comunes.org as the first default relay (reliable community home; public relays are backup). Tests: settings precision (default/clamp/roundtrip), searchPrefix helper, neighbour-cell discovery regression (offers_cubit + commons_core nostr transports), and the range-selector widget test.
This commit is contained in:
parent
1fb8e37536
commit
97b9223cb2
16 changed files with 268 additions and 10 deletions
|
|
@ -48,6 +48,35 @@ void main() {
|
|||
await bobT.close();
|
||||
});
|
||||
|
||||
test('a coarser search prefix matches, an adjacent full cell does not',
|
||||
() async {
|
||||
// Alice publishes at 'sp3e9'. A neighbour searching the precision-4
|
||||
// prefix 'sp3e' finds her (the publish ladder emits 'sp3e'); searching
|
||||
// the adjacent full cell 'sp3e8' finds nothing (exact tag match).
|
||||
final alice = await idFor(1);
|
||||
final bob = await idFor(2);
|
||||
final aliceT = NostrOfferTransport(await connFor(alice));
|
||||
final bobT = NostrOfferTransport(await connFor(bob));
|
||||
await aliceT.publish(Offer(
|
||||
id: 'tomate-1',
|
||||
authorPubkeyHex: alice.publicKeyHex,
|
||||
summary: 'Tomate rosa',
|
||||
type: OfferType.gift,
|
||||
approxGeohash: 'sp3e9',
|
||||
));
|
||||
|
||||
final wide = await bobT
|
||||
.discoverUntilEose(const DiscoveryQuery(geohashPrefix: 'sp3e'));
|
||||
expect(wide, hasLength(1));
|
||||
|
||||
final adjacent = await bobT
|
||||
.discoverUntilEose(const DiscoveryQuery(geohashPrefix: 'sp3e8'));
|
||||
expect(adjacent, isEmpty);
|
||||
|
||||
await aliceT.close();
|
||||
await bobT.close();
|
||||
});
|
||||
|
||||
test('exact geohash never leaves the device (coarsened on the wire)',
|
||||
() async {
|
||||
final alice = await idFor(1);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue