diff --git a/database.go b/database.go index 198da7d..6a405dc 100644 --- a/database.go +++ b/database.go @@ -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 diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d749a24..a3b86f5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -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": { diff --git a/frontend/package.json b/frontend/package.json index 5c2109b..1fca704 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -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" diff --git a/gotify.go b/gotify.go index c68f738..13e84be 100644 --- a/gotify.go +++ b/gotify.go @@ -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) diff --git a/httpserver.go b/httpserver.go index d6abcfc..76a6ebc 100644 --- a/httpserver.go +++ b/httpserver.go @@ -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() diff --git a/spot.go b/spot.go index 39001e2..05a0d98 100644 --- a/spot.go +++ b/spot.go @@ -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 { diff --git a/spotprocessor.go b/spotprocessor.go index 697d074..71736ee 100644 --- a/spotprocessor.go +++ b/spotprocessor.go @@ -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) +} diff --git a/watchlist.go b/watchlist.go index 3e90821..2583d09 100644 --- a/watchlist.go +++ b/watchlist.go @@ -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() diff --git a/watchlist.json b/watchlist.json index b5e5b52..185eb32 100644 --- a/watchlist.json +++ b/watchlist.json @@ -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 } ] \ No newline at end of file