mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-04 03:37:21 +00:00
fix: transponder filters - mutual exclusion and beacon-free fallback
Two correctness fixes for the FM/Linear/SSTV filters: 1. Satellite type picker: virtual transponder types (AMSAT Live FM, AMSAT Live Linear, Live SSTV) are now mutually exclusive with the regular TLE-source types - ticking a virtual type clears Amateur/ CubeSat/etc and vice versa, so selecting 'AMSAT Live FM' no longer unions in hundreds of non-transponder satellites. Virtual types still combine with each other. Also: an empty virtual-type resolve now yields an empty list instead of falling back to 'show all'. 2. Mutual-match fallback: when the AMSAT lists are empty (first run / sync failure) the DB mode filter used downlinkMode alone, so any downlink-only beacon sharing a mode label was misclassified (ISS/IO-86 CW beacons into Linear, FO-29's FM Digitalker into FM). New getIdsWithModesAndUplink() requires uplinkLow IS NOT NULL, matching real transponders only. SSTV filter keeps the old query (SSTV sats are often downlink-only). Shared virtual-type names moved to Sources.virtualTypeNames.
This commit is contained in:
1 parent
b295500d14
commit
cf1e2b99b4
12 files changed
+66
-7
No files matched your search
+5
@@ -70,4 +70,9 @@ interface ISatelliteRepo {
|
||||
* Empty modes -> empty result; used to filter the mutual-match satellite
|
||||
* set to transponder satellites (FM voice / linear). */
|
||||
suspend fun getSatelliteIdsWithModes(modes: List<String>): List<Int>
|
||||
|
||||
/** Like [getSatelliteIdsWithModes] but only matches records with an uplink
|
||||
* (real transponders), excluding downlink-only beacons/telemetry that share
|
||||
* the same mode label. Used by the FM/Linear fallback filter. */
|
||||
suspend fun getSatelliteIdsWithModesAndUplink(modes: List<String>): List<Int>
|
||||
}
|
||||
@@ -29,6 +29,7 @@ interface ILocalSource {
|
||||
suspend fun insertEntries(entries: List<OrbitalData>)
|
||||
suspend fun deleteEntries()
|
||||
suspend fun getIdsWithModes(modes: List<String>): List<Int>
|
||||
suspend fun getIdsWithModesAndUplink(modes: List<String>): List<Int>
|
||||
suspend fun getRadiosTotal(): Int
|
||||
suspend fun getRadiosWithId(id: Int): List<SatRadio>
|
||||
suspend fun insertRadios(radios: List<SatRadio>, isCustom: Boolean = false)
|
||||
|
||||
@@ -62,4 +62,10 @@ object Sources {
|
||||
"FM" to "https://www.amsat.org/live-fm-satellites/",
|
||||
"Linear" to "https://www.amsat.org/live-linear-satellites/"
|
||||
)
|
||||
|
||||
/** Virtual satellite-selection types: transponder/activity filters shown
|
||||
* at the top of the type picker. They resolve to live lists (AMSAT pages
|
||||
* or mode=SSTV radios) instead of persisted per-type IDs, and are
|
||||
* mutually exclusive with the regular TLE-source types in the picker. */
|
||||
val virtualTypeNames = listOf("AMSAT Live FM", "AMSAT Live Linear", "Live SSTV")
|
||||
}
|
||||
Reference in new issue
Block a user