feat(cluster): Chase New — a panel for what is new and audible here
PSK Reporter tells you what is actually being decoded in your region, which is a larger set than what somebody chose to spot: nobody spots the FT8 caller running ten watts from a rare square. Almost all of it existed. The MQTT payload already carries frequency, mode, transmitter and both grids; the watcher already drops any report collected further than NearKm from the operator, which is exactly the question worth asking — the station is being heard HERE, not in Japan; and with grid chasing on the subscription is already every band, filtered at the broker by receiver square, measured at 0.2 to 1.2 messages a second. This reads messages that were arriving and being discarded. "New" is not decided here. Every spot goes through ClusterSpotStatuses, the same function the DX cluster grid uses and the same cached index, so the two panels cannot drift apart the way the county columns did. Cost per message is map lookups behind an option cached in an atomic, because the MQTT goroutine must never wait on the settings store. The option is its own, not nested under grid chasing: chasing squares and chasing entities are different wants, and the feed now has three consumers, any one of which brings it up and none of which cuts the others loose when it goes down. The panel says "digital modes only" in its footer. An empty list has to mean "nothing new on FT8/FT4/JS8 near you", not "the band is dead" — it will never show a new entity on CW.
This commit is contained in:
Vendored
+6
@@ -406,8 +406,12 @@ export function GetCatalogCodes():Promise<Array<string>>;
|
||||
|
||||
export function GetChangelog():Promise<Array<main.ChangelogEntry>>;
|
||||
|
||||
export function GetChaseNew():Promise<boolean>;
|
||||
|
||||
export function GetChaseNewGrids():Promise<boolean>;
|
||||
|
||||
export function GetChaseNewSpots():Promise<Array<main.ChaseNewSpot>>;
|
||||
|
||||
export function GetChatHistory(arg1:number):Promise<Array<main.ChatMessage>>;
|
||||
|
||||
export function GetClublogCtyInfo():Promise<main.ClublogCtyInfo>;
|
||||
@@ -992,6 +996,8 @@ export function SetCIVTrace(arg1:boolean):Promise<void>;
|
||||
|
||||
export function SetCWDecoderPitch(arg1:number):Promise<void>;
|
||||
|
||||
export function SetChaseNew(arg1:boolean):Promise<void>;
|
||||
|
||||
export function SetChaseNewGrids(arg1:boolean):Promise<void>;
|
||||
|
||||
export function SetClublogCtyEnabled(arg1:boolean):Promise<void>;
|
||||
|
||||
@@ -754,10 +754,18 @@ export function GetChangelog() {
|
||||
return window['go']['main']['App']['GetChangelog']();
|
||||
}
|
||||
|
||||
export function GetChaseNew() {
|
||||
return window['go']['main']['App']['GetChaseNew']();
|
||||
}
|
||||
|
||||
export function GetChaseNewGrids() {
|
||||
return window['go']['main']['App']['GetChaseNewGrids']();
|
||||
}
|
||||
|
||||
export function GetChaseNewSpots() {
|
||||
return window['go']['main']['App']['GetChaseNewSpots']();
|
||||
}
|
||||
|
||||
export function GetChatHistory(arg1) {
|
||||
return window['go']['main']['App']['GetChatHistory'](arg1);
|
||||
}
|
||||
@@ -1926,6 +1934,10 @@ export function SetCWDecoderPitch(arg1) {
|
||||
return window['go']['main']['App']['SetCWDecoderPitch'](arg1);
|
||||
}
|
||||
|
||||
export function SetChaseNew(arg1) {
|
||||
return window['go']['main']['App']['SetChaseNew'](arg1);
|
||||
}
|
||||
|
||||
export function SetChaseNewGrids(arg1) {
|
||||
return window['go']['main']['App']['SetChaseNewGrids'](arg1);
|
||||
}
|
||||
|
||||
@@ -2131,6 +2131,44 @@ export namespace main {
|
||||
this.fr = source["fr"];
|
||||
}
|
||||
}
|
||||
export class ChaseNewSpot {
|
||||
call: string;
|
||||
band: string;
|
||||
mode: string;
|
||||
freq_hz: number;
|
||||
grid: string;
|
||||
country?: string;
|
||||
cont?: string;
|
||||
dist_km: number;
|
||||
bearing: number;
|
||||
status?: string;
|
||||
new_pfx?: boolean;
|
||||
new_grid?: boolean;
|
||||
lotw?: boolean;
|
||||
at: string;
|
||||
|
||||
static createFrom(source: any = {}) {
|
||||
return new ChaseNewSpot(source);
|
||||
}
|
||||
|
||||
constructor(source: any = {}) {
|
||||
if ('string' === typeof source) source = JSON.parse(source);
|
||||
this.call = source["call"];
|
||||
this.band = source["band"];
|
||||
this.mode = source["mode"];
|
||||
this.freq_hz = source["freq_hz"];
|
||||
this.grid = source["grid"];
|
||||
this.country = source["country"];
|
||||
this.cont = source["cont"];
|
||||
this.dist_km = source["dist_km"];
|
||||
this.bearing = source["bearing"];
|
||||
this.status = source["status"];
|
||||
this.new_pfx = source["new_pfx"];
|
||||
this.new_grid = source["new_grid"];
|
||||
this.lotw = source["lotw"];
|
||||
this.at = source["at"];
|
||||
}
|
||||
}
|
||||
export class ChatMessage {
|
||||
id: number;
|
||||
operator: string;
|
||||
|
||||
Reference in New Issue
Block a user