This commit is contained in:
2025-10-30 23:18:16 +01:00
parent a372296afa
commit cbd11e0c51
9 changed files with 430 additions and 343 deletions

View File

@@ -363,7 +363,7 @@ func (r *Log4OMContactsRepository) GetQSOStats() QSOStats {
func (r *Log4OMContactsRepository) GetDXCCCount() int {
var count int
err := r.db.QueryRow("SELECT COUNT(DISTINCT dxcc) FROM log WHERE dxcc != '' AND dxcc IS NOT NULL").Scan(&count)
err := r.db.QueryRow("SELECT COUNT(DISTINCT dxcc) FROM log WHERE dxcc != '' AND dxcc IS NOT NULL AND dxcc != 0").Scan(&count)
if err != nil {
log.Error("could not get DXCC count:", err)
return 0

View File

@@ -11,12 +11,12 @@
"svelte-virtual-list": "^3.0.1"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@sveltejs/vite-plugin-svelte": "^3.1.2",
"autoprefixer": "^10.4.16",
"postcss": "^8.4.32",
"svelte": "^4.2.8",
"svelte": "^4.2.20",
"tailwindcss": "^3.4.0",
"vite": "^5.0.8"
"vite": "^5.4.21"
}
},
"node_modules/@alloc/quick-lru": {
@@ -544,9 +544,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz",
"integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz",
"integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==",
"cpu": [
"arm"
],
@@ -558,9 +558,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz",
"integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz",
"integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==",
"cpu": [
"arm64"
],
@@ -572,9 +572,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz",
"integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz",
"integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==",
"cpu": [
"arm64"
],
@@ -586,9 +586,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz",
"integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz",
"integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==",
"cpu": [
"x64"
],
@@ -600,9 +600,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz",
"integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz",
"integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==",
"cpu": [
"arm64"
],
@@ -614,9 +614,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz",
"integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz",
"integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==",
"cpu": [
"x64"
],
@@ -628,9 +628,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz",
"integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz",
"integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==",
"cpu": [
"arm"
],
@@ -642,9 +642,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz",
"integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz",
"integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==",
"cpu": [
"arm"
],
@@ -656,9 +656,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz",
"integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz",
"integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==",
"cpu": [
"arm64"
],
@@ -670,9 +670,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz",
"integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz",
"integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==",
"cpu": [
"arm64"
],
@@ -684,9 +684,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz",
"integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz",
"integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==",
"cpu": [
"loong64"
],
@@ -698,9 +698,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz",
"integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz",
"integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==",
"cpu": [
"ppc64"
],
@@ -712,9 +712,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz",
"integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz",
"integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==",
"cpu": [
"riscv64"
],
@@ -726,9 +726,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz",
"integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz",
"integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==",
"cpu": [
"riscv64"
],
@@ -740,9 +740,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz",
"integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz",
"integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==",
"cpu": [
"s390x"
],
@@ -754,9 +754,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz",
"integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz",
"integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==",
"cpu": [
"x64"
],
@@ -768,9 +768,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz",
"integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz",
"integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==",
"cpu": [
"x64"
],
@@ -782,9 +782,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz",
"integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz",
"integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==",
"cpu": [
"arm64"
],
@@ -796,9 +796,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz",
"integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz",
"integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==",
"cpu": [
"arm64"
],
@@ -810,9 +810,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz",
"integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz",
"integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==",
"cpu": [
"ia32"
],
@@ -824,9 +824,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz",
"integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz",
"integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==",
"cpu": [
"x64"
],
@@ -838,9 +838,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz",
"integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz",
"integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==",
"cpu": [
"x64"
],
@@ -1032,9 +1032,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
"version": "2.8.16",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz",
"integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==",
"version": "2.8.20",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz",
"integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -1078,9 +1078,9 @@
}
},
"node_modules/browserslist": {
"version": "4.26.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz",
"integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==",
"version": "4.27.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz",
"integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
"dev": true,
"funding": [
{
@@ -1098,11 +1098,11 @@
],
"license": "MIT",
"dependencies": {
"baseline-browser-mapping": "^2.8.9",
"caniuse-lite": "^1.0.30001746",
"electron-to-chromium": "^1.5.227",
"node-releases": "^2.0.21",
"update-browserslist-db": "^1.1.3"
"baseline-browser-mapping": "^2.8.19",
"caniuse-lite": "^1.0.30001751",
"electron-to-chromium": "^1.5.238",
"node-releases": "^2.0.26",
"update-browserslist-db": "^1.1.4"
},
"bin": {
"browserslist": "cli.js"
@@ -1122,9 +1122,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001750",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz",
"integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==",
"version": "1.0.30001751",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz",
"integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==",
"dev": true,
"funding": [
{
@@ -1316,9 +1316,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
"version": "1.5.234",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.234.tgz",
"integrity": "sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==",
"version": "1.5.241",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.241.tgz",
"integrity": "sha512-ILMvKX/ZV5WIJzzdtuHg8xquk2y0BOGlFOxBVwTpbiXqWIH0hamG45ddU4R3PQ0gYu+xgo0vdHXHli9sHIGb4w==",
"dev": true,
"license": "ISC"
},
@@ -1704,9 +1704,9 @@
"license": "ISC"
},
"node_modules/magic-string": {
"version": "0.30.19",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
"integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
"version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1809,9 +1809,9 @@
}
},
"node_modules/node-releases": {
"version": "2.0.23",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz",
"integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==",
"version": "2.0.26",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz",
"integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==",
"dev": true,
"license": "MIT"
},
@@ -2156,13 +2156,13 @@
}
},
"node_modules/resolve": {
"version": "1.22.10",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
"integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"version": "1.22.11",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
"integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-core-module": "^2.16.0",
"is-core-module": "^2.16.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -2188,9 +2188,9 @@
}
},
"node_modules/rollup": {
"version": "4.52.4",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz",
"integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==",
"version": "4.52.5",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz",
"integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2204,28 +2204,28 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.52.4",
"@rollup/rollup-android-arm64": "4.52.4",
"@rollup/rollup-darwin-arm64": "4.52.4",
"@rollup/rollup-darwin-x64": "4.52.4",
"@rollup/rollup-freebsd-arm64": "4.52.4",
"@rollup/rollup-freebsd-x64": "4.52.4",
"@rollup/rollup-linux-arm-gnueabihf": "4.52.4",
"@rollup/rollup-linux-arm-musleabihf": "4.52.4",
"@rollup/rollup-linux-arm64-gnu": "4.52.4",
"@rollup/rollup-linux-arm64-musl": "4.52.4",
"@rollup/rollup-linux-loong64-gnu": "4.52.4",
"@rollup/rollup-linux-ppc64-gnu": "4.52.4",
"@rollup/rollup-linux-riscv64-gnu": "4.52.4",
"@rollup/rollup-linux-riscv64-musl": "4.52.4",
"@rollup/rollup-linux-s390x-gnu": "4.52.4",
"@rollup/rollup-linux-x64-gnu": "4.52.4",
"@rollup/rollup-linux-x64-musl": "4.52.4",
"@rollup/rollup-openharmony-arm64": "4.52.4",
"@rollup/rollup-win32-arm64-msvc": "4.52.4",
"@rollup/rollup-win32-ia32-msvc": "4.52.4",
"@rollup/rollup-win32-x64-gnu": "4.52.4",
"@rollup/rollup-win32-x64-msvc": "4.52.4",
"@rollup/rollup-android-arm-eabi": "4.52.5",
"@rollup/rollup-android-arm64": "4.52.5",
"@rollup/rollup-darwin-arm64": "4.52.5",
"@rollup/rollup-darwin-x64": "4.52.5",
"@rollup/rollup-freebsd-arm64": "4.52.5",
"@rollup/rollup-freebsd-x64": "4.52.5",
"@rollup/rollup-linux-arm-gnueabihf": "4.52.5",
"@rollup/rollup-linux-arm-musleabihf": "4.52.5",
"@rollup/rollup-linux-arm64-gnu": "4.52.5",
"@rollup/rollup-linux-arm64-musl": "4.52.5",
"@rollup/rollup-linux-loong64-gnu": "4.52.5",
"@rollup/rollup-linux-ppc64-gnu": "4.52.5",
"@rollup/rollup-linux-riscv64-gnu": "4.52.5",
"@rollup/rollup-linux-riscv64-musl": "4.52.5",
"@rollup/rollup-linux-s390x-gnu": "4.52.5",
"@rollup/rollup-linux-x64-gnu": "4.52.5",
"@rollup/rollup-linux-x64-musl": "4.52.5",
"@rollup/rollup-openharmony-arm64": "4.52.5",
"@rollup/rollup-win32-arm64-msvc": "4.52.5",
"@rollup/rollup-win32-ia32-msvc": "4.52.5",
"@rollup/rollup-win32-x64-gnu": "4.52.5",
"@rollup/rollup-win32-x64-msvc": "4.52.5",
"fsevents": "~2.3.2"
}
},
@@ -2566,9 +2566,9 @@
"license": "Apache-2.0"
},
"node_modules/update-browserslist-db": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
"integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
"dev": true,
"funding": [
{
@@ -2604,9 +2604,9 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "5.4.20",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz",
"integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==",
"version": "5.4.21",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -8,12 +8,12 @@
"preview": "vite preview"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@sveltejs/vite-plugin-svelte": "^3.1.2",
"autoprefixer": "^10.4.16",
"postcss": "^8.4.32",
"svelte": "^4.2.8",
"svelte": "^4.2.20",
"tailwindcss": "^3.4.0",
"vite": "^5.0.8"
"vite": "^5.4.21"
},
"dependencies": {
"svelte-virtual-list": "^3.0.1"

View File

@@ -29,28 +29,39 @@ func Gotify(spot FlexSpot) {
}
if spot.NewDXCC && Cfg.Gotify.NewDXCC {
title := "FlexDXCluster New DXCC"
title := "🆕 FlexDXCluster - New DXCC"
gotifyMsg.Title = title
gotifyMsg.Message = message
sendToGotify(gotifyMsg)
return
}
// Notification pour callsign dans watchlist
if spot.InWatchlist && !spot.Worked {
title := "🎯 FlexDXCluster - Watchlist Alert"
gotifyMsg.Title = title
gotifyMsg.Message = message
sendToGotify(gotifyMsg)
return
}
// Autres notifications (conservées pour compatibilité, mais ne seront plus appelées normalement)
if spot.NewBand && spot.NewMode && Cfg.Gotify.NewBandAndMode {
title := "FlexDXCluster New Mode & Band"
title := "📻 FlexDXCluster - New Mode & Band"
gotifyMsg.Title = title
gotifyMsg.Message = message
sendToGotify(gotifyMsg)
}
if spot.NewMode && Cfg.Gotify.NewMode && !spot.NewBand {
title := "FlexDXCluster New Mode"
title := "🔧 FlexDXCluster - New Mode"
gotifyMsg.Title = title
gotifyMsg.Message = message
sendToGotify(gotifyMsg)
}
if spot.NewBand && Cfg.Gotify.NewBand && !spot.NewMode {
title := "FlexDXCluster New Band"
title := "📡 FlexDXCluster - New Band"
gotifyMsg.Title = title
gotifyMsg.Message = message
sendToGotify(gotifyMsg)

View File

@@ -263,7 +263,7 @@ func (s *HTTPServer) sendInitialData(conn *websocket.Conn) {
conn.WriteJSON(WSMessage{Type: "watchlist", Data: watchlist})
// Send initial log data
qsos := s.ContactRepo.GetRecentQSOs("13")
qsos := s.ContactRepo.GetRecentQSOs("19")
conn.WriteJSON(WSMessage{Type: "log", Data: qsos})
logStats := s.ContactRepo.GetQSOStats()
@@ -304,9 +304,9 @@ func (s *HTTPServer) handleBroadcasts() {
func (s *HTTPServer) broadcastUpdates() {
statsTicker := time.NewTicker(1 * time.Second)
logTicker := time.NewTicker(10 * time.Second)
logTicker := time.NewTicker(5 * time.Second)
cleanupTicker := time.NewTicker(5 * time.Minute)
watchlistSaveTicker := time.NewTicker(30 * time.Second)
watchlistSaveTicker := time.NewTicker(20 * time.Second)
defer statsTicker.Stop()
defer logTicker.Stop()
@@ -343,7 +343,7 @@ func (s *HTTPServer) broadcastUpdates() {
}
// Broadcast log data every 10 seconds
qsos := s.ContactRepo.GetRecentQSOs("13")
qsos := s.ContactRepo.GetRecentQSOs("19")
s.broadcast <- WSMessage{Type: "log", Data: qsos}
stats := s.ContactRepo.GetQSOStats()

View File

@@ -269,12 +269,12 @@ func (spot *TelnetSpot) GuessMode(rawSpot string) {
}
case "80M": // 3.500 - 4.000 MHz
if freqInt < 3570 {
if freqInt < 3560 {
spot.Mode = "CW"
} else if freqInt < 3575 {
spot.Mode = "FT4"
} else if freqInt < 3578 {
spot.Mode = "FT8"
} else if freqInt < 3578 {
spot.Mode = "FT4"
} else if freqInt < 3590 {
spot.Mode = "RTTY"
} else {

View File

@@ -113,7 +113,7 @@ func (sp *SpotProcessor) processSpot(spot TelnetSpot) {
}
sp.applySpotColors(&flexSpot, spot)
Gotify(flexSpot)
sp.sendGotifyNotification(flexSpot)
flexSpot.Comment = strings.ReplaceAll(flexSpot.Comment, " ", "\u00A0")
@@ -241,3 +241,27 @@ func (sp *SpotProcessor) sendToFlexRadio(flexSpot FlexSpot, srcFlexSpot *FlexSpo
sp.FlexClient.SendSpot(stringSpot)
}
}
func (sp *SpotProcessor) sendGotifyNotification(flexSpot FlexSpot) {
if !Cfg.Gotify.Enable {
return
}
// Cas 1 : Nouveau DXCC - toujours notifier si activé dans la config
if flexSpot.NewDXCC && Cfg.Gotify.NewDXCC {
Gotify(flexSpot)
Log.Debugf("📢 Gotify notification sent: New DXCC - %s", flexSpot.DX)
return
}
// Cas 2 : Callsign dans la watchlist ET non contacté
if flexSpot.InWatchlist && !flexSpot.Worked {
Gotify(flexSpot)
Log.Debugf("📢 Gotify notification sent: Watchlist match (not worked) - %s", flexSpot.DX)
return
}
// Tous les autres cas : pas de notification
Log.Debugf("🔇 Gotify notification skipped for %s (InWatchlist=%v, Worked=%v, NewDXCC=%v)",
flexSpot.DX, flexSpot.InWatchlist, flexSpot.Worked, flexSpot.NewDXCC)
}

View File

@@ -112,8 +112,7 @@ func (w *Watchlist) Add(callsign string) error {
}
w.entries[callsign] = &WatchlistEntry{
Callsign: callsign,
// ✅ PAS DE NOTES
Callsign: callsign,
AddedAt: time.Now(),
LastSeen: time.Time{},
LastSeenStr: "Never",
@@ -154,9 +153,6 @@ func (w *Watchlist) Remove(callsign string) error {
return nil
}
// ✅ FONCTION SUPPRIMÉE
// func (w *Watchlist) UpdateNotes(callsign, notes string) error { ... }
func (w *Watchlist) UpdateSound(callsign string, playSound bool) error {
w.mutex.Lock()
defer w.mutex.Unlock()

View File

@@ -1,60 +1,20 @@
[
{
"callsign": "EL2BG",
"lastSeen": "2025-10-22T19:26:22.9261316+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:10.2000017+02:00",
"spotCount": 24,
"playSound": true
},
{
"callsign": "6O3T",
"lastSeen": "2025-10-23T03:16:58.042955+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-22T19:31:13.1154881+02:00",
"spotCount": 149,
"playSound": true
},
{
"callsign": "4X6TT",
"lastSeen": "2025-10-21T19:54:01.9678474+02:00",
"lastSeenStr": "23 hours ago",
"addedAt": "2025-10-18T17:18:13.335878+02:00",
"spotCount": 4,
"playSound": true
},
{
"callsign": "XT2AW",
"lastSeen": "2025-10-23T03:02:35.3147181+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:17:27.3839089+02:00",
"spotCount": 96,
"playSound": true
},
{
"callsign": "V85NPV",
"lastSeen": "2025-10-19T15:42:31.3912491+02:00",
"lastSeenStr": "3 days ago",
"addedAt": "2025-10-18T17:18:15.8781583+02:00",
"spotCount": 2,
"playSound": true
},
{
"callsign": "VP8LP",
"lastSeen": "2025-10-23T02:57:40.5700568+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:49.0576187+02:00",
"spotCount": 24,
"playSound": true
},
{
"callsign": "C5LT",
"callsign": "5X2I",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:07.2442738+02:00",
"addedAt": "2025-10-18T17:17:14.6598633+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "5R8IC",
"lastSeen": "2025-10-30T18:56:20.9483579+01:00",
"lastSeenStr": "4 hours ago",
"addedAt": "2025-10-19T18:18:58.8382325+02:00",
"spotCount": 444,
"playSound": true
},
{
"callsign": "Z66IPA",
"lastSeen": "0001-01-01T00:00:00Z",
@@ -63,126 +23,6 @@
"spotCount": 0,
"playSound": true
},
{
"callsign": "TZ4AM",
"lastSeen": "2025-10-23T00:08:32.5194313+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:19:00.3154177+02:00",
"spotCount": 54,
"playSound": true
},
{
"callsign": "E6AD",
"lastSeen": "2025-10-20T20:08:38.1641735+02:00",
"lastSeenStr": "1 day ago",
"addedAt": "2025-10-18T17:17:40.8765179+02:00",
"spotCount": 459,
"playSound": true
},
{
"callsign": "H44MS",
"lastSeen": "2025-10-20T19:29:23.5019952+02:00",
"lastSeenStr": "1 day ago",
"addedAt": "2025-10-18T17:16:49.1572859+02:00",
"spotCount": 1,
"playSound": true
},
{
"callsign": "C8K",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:39.8627992+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "5K0UA",
"lastSeen": "2025-10-23T03:15:28.6989411+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:17:53.7390559+02:00",
"spotCount": 645,
"playSound": true
},
{
"callsign": "XV9",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:24.9155327+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "VP2M",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:17:57.308717+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "5R8IC",
"lastSeen": "2025-10-21T07:25:10.6322383+02:00",
"lastSeenStr": "1 day ago",
"addedAt": "2025-10-19T18:18:58.8382325+02:00",
"spotCount": 61,
"playSound": true
},
{
"callsign": "FW5K",
"lastSeen": "2025-10-22T22:37:24.0393589+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:17:37.9061157+02:00",
"spotCount": 140,
"playSound": true
},
{
"callsign": "D2A",
"lastSeen": "2025-10-23T03:10:56.3998546+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-20T22:11:35.4767205+02:00",
"spotCount": 185,
"playSound": true
},
{
"callsign": "5H3MB",
"lastSeen": "2025-10-22T21:21:06.1309604+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:42.8402097+02:00",
"spotCount": 20,
"playSound": true
},
{
"callsign": "C5R",
"lastSeen": "2025-10-23T03:17:32.0217788+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:04.5006892+02:00",
"spotCount": 318,
"playSound": true
},
{
"callsign": "5X1XA",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:01.2081871+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "9L8MD",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:56.7896868+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "YJ0CA",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:17:33.3921665+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "SU0ERA",
"lastSeen": "0001-01-01T00:00:00Z",
@@ -192,42 +32,130 @@
"playSound": true
},
{
"callsign": "9L9L",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:53.3401773+02:00",
"spotCount": 0,
"callsign": "9U1RU",
"lastSeen": "2025-10-30T23:14:31.9072231+01:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-28T22:43:38.4903514+01:00",
"spotCount": 1,
"playSound": true
},
{
"callsign": "4X6TT",
"lastSeen": "2025-10-30T17:41:20.439115+01:00",
"lastSeenStr": "5 hours ago",
"addedAt": "2025-10-18T17:18:13.335878+02:00",
"spotCount": 10,
"playSound": true
},
{
"callsign": "VP8LP",
"lastSeen": "2025-10-30T12:01:48.3242696+01:00",
"lastSeenStr": "11 hours ago",
"addedAt": "2025-10-18T17:18:49.0576187+02:00",
"spotCount": 46,
"playSound": true
},
{
"callsign": "TZ4AM",
"lastSeen": "2025-10-30T19:38:48.728082+01:00",
"lastSeenStr": "3 hours ago",
"addedAt": "2025-10-18T17:19:00.3154177+02:00",
"spotCount": 110,
"playSound": true
},
{
"callsign": "EL2BG",
"lastSeen": "2025-10-30T23:03:19.171544+01:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:10.2000017+02:00",
"spotCount": 75,
"playSound": true
},
{
"callsign": "DP0GVN",
"lastSeen": "2025-10-23T03:15:01.4248431+02:00",
"lastSeenStr": "Just now",
"lastSeen": "2025-10-30T22:52:36.8132818+01:00",
"lastSeenStr": "11 minutes ago",
"addedAt": "2025-10-20T07:00:51.7088369+02:00",
"spotCount": 90,
"spotCount": 224,
"playSound": true
},
{
"callsign": "5J0EA",
"callsign": "3B8M",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:17:51.0758741+02:00",
"addedAt": "2025-10-18T17:18:32.6851135+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "5X2I",
"callsign": "D2A",
"lastSeen": "2025-10-24T10:08:29.9662677+02:00",
"lastSeenStr": "6 days ago",
"addedAt": "2025-10-20T22:11:35.4767205+02:00",
"spotCount": 536,
"playSound": true
},
{
"callsign": "6O3T",
"lastSeen": "2025-10-30T23:16:21.800653+01:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-22T19:31:13.1154881+02:00",
"spotCount": 1413,
"playSound": true
},
{
"callsign": "VP2M",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:17:14.6598633+02:00",
"addedAt": "2025-10-18T17:17:57.308717+02:00",
"spotCount": 0,
"playSound": false
},
{
"callsign": "C8K",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:39.8627992+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "ZL7IO",
"callsign": "ZC4RH",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:17:30.7153757+02:00",
"addedAt": "2025-10-28T22:43:16.3202825+01:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "XF4B",
"lastSeen": "2025-10-29T20:42:02.8584079+01:00",
"lastSeenStr": "1 day ago",
"addedAt": "2025-10-27T13:11:16.3404549+01:00",
"spotCount": 12,
"playSound": true
},
{
"callsign": "3W9A",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-23T20:42:24.5787678+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "E6AD",
"lastSeen": "2025-10-20T20:08:38.1641735+02:00",
"lastSeenStr": "10 days ago",
"addedAt": "2025-10-18T17:17:40.8765179+02:00",
"spotCount": 459,
"playSound": true
},
{
"callsign": "9L9L",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:53.3401773+02:00",
"spotCount": 0,
"playSound": true
},
@@ -239,6 +167,78 @@
"spotCount": 0,
"playSound": true
},
{
"callsign": "5H3MB",
"lastSeen": "2025-10-30T20:46:29.0427791+01:00",
"lastSeenStr": "2 hours ago",
"addedAt": "2025-10-18T17:18:42.8402097+02:00",
"spotCount": 45,
"playSound": true
},
{
"callsign": "CP7DX",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-28T22:42:54.1867739+01:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "A52AA",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-28T22:44:18.1202597+01:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "YJ0CA",
"lastSeen": "2025-10-23T09:14:00.5419174+02:00",
"lastSeenStr": "7 days ago",
"addedAt": "2025-10-18T17:17:33.3921665+02:00",
"spotCount": 1,
"playSound": true
},
{
"callsign": "7Q1A",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-24T07:36:06.609998+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "5K0UA",
"lastSeen": "2025-10-30T23:16:33.0511291+01:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:17:53.7390559+02:00",
"spotCount": 2069,
"playSound": true
},
{
"callsign": "XV9",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:24.9155327+02:00",
"spotCount": 0,
"playSound": false
},
{
"callsign": "PJ6Y",
"lastSeen": "2025-10-28T14:01:51.7023253+01:00",
"lastSeenStr": "2 days ago",
"addedAt": "2025-10-18T17:17:47.7237081+02:00",
"spotCount": 1333,
"playSound": true
},
{
"callsign": "C5Y",
"lastSeen": "2025-10-30T17:00:04.8264529+01:00",
"lastSeenStr": "6 hours ago",
"addedAt": "2025-10-27T19:34:57.6714115+01:00",
"spotCount": 175,
"playSound": true
},
{
"callsign": "E51MWA",
"lastSeen": "0001-01-01T00:00:00Z",
@@ -248,19 +248,35 @@
"playSound": true
},
{
"callsign": "3B8M",
"callsign": "ZL7IO",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:32.6851135+02:00",
"addedAt": "2025-10-18T17:17:30.7153757+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "PJ6Y",
"lastSeen": "2025-10-23T03:04:56.0468256+02:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:17:47.7237081+02:00",
"spotCount": 872,
"callsign": "5J0EA",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:17:51.0758741+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "FW5K",
"lastSeen": "2025-10-30T19:33:48.0092533+01:00",
"lastSeenStr": "3 hours ago",
"addedAt": "2025-10-18T17:17:37.9061157+02:00",
"spotCount": 336,
"playSound": true
},
{
"callsign": "H44MS",
"lastSeen": "2025-10-30T19:37:48.3569201+01:00",
"lastSeenStr": "3 hours ago",
"addedAt": "2025-10-18T17:16:49.1572859+02:00",
"spotCount": 32,
"playSound": true
},
{
@@ -272,11 +288,51 @@
"playSound": true
},
{
"callsign": "TJ1GD",
"lastSeen": "2025-10-23T00:29:20.5443895+02:00",
"callsign": "C5R",
"lastSeen": "2025-10-30T23:10:52.6266337+01:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:27.6004027+02:00",
"spotCount": 62,
"addedAt": "2025-10-18T17:18:04.5006892+02:00",
"spotCount": 1414,
"playSound": false
},
{
"callsign": "XT2AW",
"lastSeen": "2025-10-24T04:08:09.2640864+02:00",
"lastSeenStr": "6 days ago",
"addedAt": "2025-10-18T17:17:27.3839089+02:00",
"spotCount": 136,
"playSound": true
},
{
"callsign": "V85NPV",
"lastSeen": "2025-10-30T21:58:33.0953332+01:00",
"lastSeenStr": "1 hour ago",
"addedAt": "2025-10-18T17:18:15.8781583+02:00",
"spotCount": 23,
"playSound": true
},
{
"callsign": "5X1XA",
"lastSeen": "0001-01-01T00:00:00Z",
"lastSeenStr": "Never",
"addedAt": "2025-10-18T17:18:01.2081871+02:00",
"spotCount": 0,
"playSound": true
},
{
"callsign": "9L8MD",
"lastSeen": "2025-10-30T23:12:46.7321897+01:00",
"lastSeenStr": "Just now",
"addedAt": "2025-10-18T17:18:56.7896868+02:00",
"spotCount": 253,
"playSound": true
},
{
"callsign": "TJ1GD",
"lastSeen": "2025-10-30T13:11:14.510111+01:00",
"lastSeenStr": "9 hours ago",
"addedAt": "2025-10-18T17:18:27.6004027+02:00",
"spotCount": 337,
"playSound": false
}
]