Compare commits

...

1927 commits

Author SHA1 Message Date
DJ2LS 0e81bddedd
Merge pull request #702 from DJ2LS/dependabot/npm_and_yarn/gui/vite-5.1.7
Bump vite from 5.1.3 to 5.1.7 in /gui
2024-04-13 17:28:22 +02:00
dependabot[bot] e09b257936
Bump vite from 5.1.3 to 5.1.7 in /gui
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.1.3 to 5.1.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.1.7/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-03 17:14:53 +00:00
Mashintime fbd625cf5b Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-03-30 00:09:39 -04:00
DJ2LS eccd0e12a7 some fixes... 2024-03-27 19:55:19 +01:00
DJ2LS c2ff18b111
Merge pull request #694 from DJ2LS/main-cf-autofix
Apply fixes from CodeFactor
2024-03-27 17:02:10 +01:00
DJ2LS 83d06259a7
Merge pull request #695 from DJ2LS/main
forgot changing branch...
2024-03-27 10:50:55 +01:00
codefactor-io bea6c086af
[CodeFactor] Apply fixes to commit b110735 2024-03-27 09:49:41 +00:00
DJ2LS b11073521b
Merge pull request #693 from DJ2LS/dev-calculate-grid-distance
calculate grid distance
2024-03-27 10:49:25 +01:00
DJ2LS 329ce9dc20 add distance information to heard stations and events 2024-03-27 10:16:14 +01:00
DJ2LS b0e46fb998
Merge pull request #692 from DJ2LS/dev-add-grid-to-event
add gridsquare to event
2024-03-27 09:45:44 +01:00
DJ2LS 33f0d2a160
Merge pull request #691 from DJ2LS/dev-interface-tests
Socket interface prototype
2024-03-27 09:45:25 +01:00
DJ2LS 7811aae324 add gridsquare to event if available 2024-03-27 09:34:06 +01:00
DJ2LS f5d0b90eda fixing a test 2024-03-27 09:20:24 +01:00
Mashintime 5f1597c27f Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-03-25 19:46:05 -04:00
DJ2LS bdd8888f1b enable/disable socket interface 2024-03-25 19:29:30 +01:00
DJ2LS e24a64ba25 Merge branch 'develop' into dev-interface-tests 2024-03-25 19:04:37 +01:00
DJ2LS ef4ea345fd fixed explorer 2024-03-25 08:28:02 +01:00
DJ2LS ea27044d91
Merge pull request #667 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vitest-1.3.1 2024-03-24 15:33:33 -07:00
DJ2LS cb70ed8445
Merge pull request #690 from DJ2LS/dev-max-bandwidth
set maximum bandwidth
2024-03-24 14:17:30 -07:00
DJ2LS 9fe59ffaa1
Merge pull request #688 from DJ2LS/main-cf-autofix
Apply fixes from CodeFactor
2024-03-24 13:48:20 -07:00
DJ2LS 6fb092dd58 fixed test 2024-03-24 21:47:48 +01:00
DJ2LS 3cb329b379 check for max bandwidth on session open 2024-03-24 21:39:44 +01:00
DJ2LS 8c224ab7dc define maximum used bandwidth during transmission 2024-03-24 21:17:07 +01:00
DJ2LS 577da699a8
Merge pull request #689 from DJ2LS/dev-arq
adjusted ping and qrv
2024-03-24 12:58:09 -07:00
DJ2LS b28ee0aa85 adjusted cq and ping 2024-03-24 20:17:11 +01:00
DJ2LS cc6b3eb958 pep related improvements to ARQ 2024-03-24 20:07:18 +01:00
DJ2LS ff6ef4b130 increased ARQ data timeout 2024-03-24 19:30:56 +01:00
DJ2LS b0c0940e5d respond to CQ and PING if not in ARQ session 2024-03-24 19:29:28 +01:00
DJ2LS e57d3cf665 saved latest dev state.. 2024-03-24 19:16:19 +01:00
Mashintime 6ed283a5eb Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-03-22 16:32:19 -04:00
DJ2LS f308134276 added rx part for larger data 2024-03-19 22:16:27 +01:00
DJ2LS bb8da6f5d8 first attempt with arq session inside connection 2024-03-19 22:10:58 +01:00
DJ2LS aaa2084bfd adjusted tests 2024-03-19 13:19:13 +01:00
DJ2LS 9da3fb80f0 adjusted tests 2024-03-19 13:01:25 +01:00
DJ2LS 5ed11d771f added data and command queues 2024-03-19 11:19:13 +01:00
DJ2LS adb0c82332 Merge branch 'develop' into dev-interface-tests 2024-03-17 16:28:21 +01:00
DJ2LS 8d74566b6c rigctld hotfix 2024-03-17 10:14:56 -04:00
DJ2LS 363b90da07 rigctld hotfix 2024-03-17 12:04:58 +01:00
codefactor-io 34747356c9
[CodeFactor] Apply fixes to commit 03cc026 2024-03-16 17:19:30 +00:00
Mashintime 03cc026965 Remove references to unused components. 2024-03-16 13:17:00 -04:00
DJ2LS 6178454250
Merge pull request #686 from DJ2LS/develop 2024-03-16 10:07:28 -07:00
DJ2LS 40f7337b6c bump version 2024-03-16 16:24:24 +01:00
DJ2LS 0beb4aea23 small cleanup 2024-03-16 16:23:41 +01:00
DJ2LS 6562a44175 adjusted response part for commands 2024-03-16 16:11:38 +01:00
DJ2LS d2b3f3a36e adjusted response part for commands 2024-03-16 15:52:14 +01:00
DJ2LS 0f3611fb15 testing first response 2024-03-16 13:57:48 +01:00
DJ2LS 4d3a0832d5 bind p2p connection to interface 2024-03-16 13:44:58 +01:00
DJ2LS 24f41edb63 add state and event manager instaces to command and data handler 2024-03-16 11:14:48 +01:00
DJ2LS 7714c7aeb6 added socket interface to modem 2024-03-16 10:29:13 +01:00
DJ2LS 6b4bdb4d7d Merge branch 'develop' into dev-interface-tests 2024-03-16 09:34:03 +01:00
DJ2LS cbc928f117 added dummy functions for continuing work on... 2024-03-15 14:33:06 +01:00
DJ2LS 216799fe2b added disconnect 2024-03-15 14:25:46 +01:00
DJ2LS 01b1977630 avoid event queue overflow 2024-03-15 13:28:21 +01:00
DJ2LS 41d9642eb1 adjusted server shutdown and transmitting state 2024-03-15 09:45:51 +01:00
DJ2LS 787cb2d862 don't restart modem on input overflow for now for checking if callback mode solved problems 2024-03-13 22:06:59 +01:00
DJ2LS fbf4e68d9a
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vitest-1.3.1 2024-03-13 12:26:53 -07:00
DJ2LS 791e9ab9c6
Merge pull request #685 from DJ2LS/gui-fixes
Gui fixes
2024-03-13 02:15:36 -07:00
DJ2LS 98dada2af5
Merge pull request #684 from DJ2LS/dev-audio-callback 2024-03-13 00:30:45 -07:00
Mashintime 4f4c678eac Clicking a heard station populates ping textboxs 2024-03-12 21:37:44 -04:00
Mashintime f5de99a25b Fix 18m freq selection 2024-03-12 20:40:35 -04:00
DJ2LS c8fa826e60 fixed tx buffer delay 2024-03-12 19:54:07 +01:00
DJ2LS 7bed6041f3 restructured modem part 2024-03-12 19:48:50 +01:00
DJ2LS b58749a8a5 restructured modem part 2024-03-12 18:39:30 +01:00
DJ2LS dd703b4bbd using audio transmit callback 2024-03-12 16:33:40 +01:00
DJ2LS 6b7146e02c more clean server shutdown 2024-03-11 20:07:15 +01:00
DJ2LS 2b32fb740c restart server on input overflow 2024-03-11 19:52:03 +01:00
DJ2LS e4744a113f build fix 2024-03-11 19:27:09 +01:00
dependabot[bot] 9eb3e3f889
Bump vitest from 1.2.2 to 1.3.1 in /gui
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 1.2.2 to 1.3.1.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v1.3.1/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 10:05:53 +00:00
DJ2LS 6dc09c4d1b
Merge pull request #683 from DJ2LS/develop
0.14.3
2024-03-11 03:05:25 -07:00
DJ2LS 919b9c6eeb
Merge pull request #669 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vue-3.4.21
Bump vue from 3.4.15 to 3.4.21 in /gui
2024-03-11 03:03:48 -07:00
DJ2LS 71c62a2f2c
Merge pull request #670 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-vue-9.22.0
Bump eslint-plugin-vue from 9.20.1 to 9.22.0 in /gui
2024-03-11 03:03:43 -07:00
DJ2LS 6d8f81ea89
Merge pull request #681 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-29.1.1
Bump electron from 28.2.2 to 29.1.1 in /gui
2024-03-11 03:03:29 -07:00
DJ2LS de25c95a05 bump version 2024-03-11 11:03:11 +01:00
dependabot[bot] 3a095a00ae
Bump electron from 28.2.2 to 29.1.1 in /gui
Bumps [electron](https://github.com/electron/electron) from 28.2.2 to 29.1.1.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v28.2.2...v29.1.1)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 10:02:12 +00:00
DJ2LS 69672482b3
Merge pull request #682 from DJ2LS/dev-remove-info-screen
removing info screen from gui
2024-03-11 02:59:11 -07:00
DJ2LS c4ab8dfe4a small cleanup of dependencies 2024-03-11 10:58:54 +01:00
codefactor-io 09a87ab9d5
[CodeFactor] Apply fixes 2024-03-11 09:50:49 +00:00
DJ2LS 248bc596cc removed info screen 2024-03-11 10:46:59 +01:00
DJ2LS e5215a838e attempt fixing audio input overflow 2024-03-10 18:37:27 +01:00
DJ2LS d48f457fd5 attempt fixing audio input overflow 2024-03-09 18:11:00 +01:00
DJ2LS d5eea3c99c fixed bug and version bump 2024-03-09 14:31:32 +01:00
DJ2LS ec6b16b672
Merge pull request #680 from DJ2LS/dev-audio-debugging 2024-03-09 05:26:22 -08:00
DJ2LS 4de818f3a6
Merge branch 'develop' into dev-audio-debugging 2024-03-09 05:26:16 -08:00
DJ2LS dc67b5632d
Merge pull request #679 from DJ2LS/dev-cleanup
code cleanup
2024-03-09 02:44:04 -08:00
DJ2LS 6b7327df3d added some audio debugging and reduced a not needed thread in demodulator 2024-03-09 11:42:40 +01:00
DJ2LS 0bd6f6c9f9 code cleanup 2024-03-09 11:06:20 +01:00
DJ2LS 20b1fe7e2d WIP p2p 2024-03-09 10:47:27 +01:00
DJ2LS 1599eb1515
Merge pull request #678 from DJ2LS/dev-beacon-adjustments
adjusted beacon
2024-03-07 07:56:49 -08:00
DJ2LS 61e861ee06
Merge pull request #677 from DJ2LS/dev-gui-autoscroll
fix message auto scroll
2024-03-07 06:47:21 -08:00
DJ2LS 0e07697a98 removed beacon interval change, send beacon when enabling it 2024-03-07 15:33:42 +01:00
DJ2LS 11e51afe07 Merge remote-tracking branch 'origin/dev-gui-autoscroll' into dev-gui-autoscroll 2024-03-07 15:14:49 +01:00
DJ2LS f63c597e80 send messages only if modem running 2024-03-07 15:14:07 +01:00
codefactor-io 454c4758d0
[CodeFactor] Apply fixes 2024-03-07 13:50:47 +00:00
DJ2LS 184caf57ab adjusted message scrolling 2024-03-07 14:48:13 +01:00
DJ2LS e65e3a984c adjusted CORS for server 2024-03-07 13:40:24 +01:00
DJ2LS e9ee0e600d adjusted macos python lookup path 2024-03-07 13:30:17 +01:00
dependabot[bot] dd964474ee
Bump vue from 3.4.15 to 3.4.21 in /gui
Bumps [vue](https://github.com/vuejs/core) from 3.4.15 to 3.4.21.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.4.15...v3.4.21)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-04 15:15:52 +00:00
DJ2LS 6b693c6759 bump version info 2024-03-04 16:15:46 +01:00
DJ2LS d2ee01479a
Merge pull request #675 from DJ2LS/dev-fix-modem-port
support different server ports
2024-03-04 07:14:56 -08:00
DJ2LS 9520bb4689
Merge pull request #673 from DJ2LS/dev-nsis-installer
NSIS Installer for Windows
2024-03-04 07:14:36 -08:00
DJ2LS 90790bd8e0 support different server ports 2024-03-04 15:50:08 +01:00
DJ2LS de82f649b1 Merge remote-tracking branch 'origin/dev-nsis-installer' into dev-nsis-installer 2024-03-04 11:55:09 +01:00
DJ2LS d078394af4 fixes #672 2024-03-04 11:55:00 +01:00
codefactor-io a258f4b16f
[CodeFactor] Apply fixes 2024-03-04 10:42:55 +00:00
DJ2LS eeb72faf83 introduced store for serial and audio devices for fixing audio related problems 2024-03-04 11:36:44 +01:00
DJ2LS 0240c6cd1d possible test fix, possible fix of startmenu items 2024-03-03 11:51:43 +01:00
DJ2LS 7e1d6f6100 added version to Installer name, add start menu entries, refresh audio devices on request 2024-03-03 11:09:29 +01:00
DJ2LS 01f3cefe55 typescript fix 2024-03-03 10:08:32 +01:00
DJ2LS 659b1c0c56 adjusted uninstaller and fixed a icon 2024-03-03 09:53:55 +01:00
DJ2LS 1c6109a25a don't delete config on update, adjusted audio device fetching 2024-03-03 09:49:21 +01:00
DJ2LS f6170604a6 adjusted config fetching 2024-03-02 18:24:14 +01:00
DJ2LS ffb3db775f get all settings when clicking settings 2024-03-02 11:51:09 +01:00
DJ2LS d90ac7cec0 get config when clicking settings 2024-03-02 11:44:23 +01:00
DJ2LS 34dcdd5d8a fixed copy and paste error 2024-03-02 11:38:09 +01:00
DJ2LS bab8aad126 bug fix and added install-deps command 2024-03-02 10:41:07 +01:00
DJ2LS d4275642d7 adjusted server startup and stopping 2024-03-02 10:33:44 +01:00
DJ2LS 7ff95571c3 adjusted database and config paths 2024-03-01 21:29:11 +01:00
DJ2LS 297be826dd this one should work... 2024-03-01 17:55:42 +01:00
dependabot[bot] e529bbb395
Bump eslint-plugin-vue from 9.20.1 to 9.22.0 in /gui
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 9.20.1 to 9.22.0.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v9.20.1...v9.22.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-01 16:20:24 +00:00
DJ2LS 1b927ad183 adjusted lookup path and updated gh action 2024-03-01 17:04:15 +01:00
DJ2LS 8081a44e92 adjusted server lookup path 2024-03-01 15:37:39 +01:00
DJ2LS 470503eb5c adjusted server lookup path 2024-03-01 15:14:18 +01:00
DJ2LS e221637394 adjusted lookup path and updated gh action 2024-03-01 12:10:49 +01:00
DJ2LS 14cbd46a88 adjusted lookup path 2024-03-01 10:39:10 +01:00
DJ2LS 2ee4776693 adjusted lookup path 2024-03-01 09:44:57 +01:00
DJ2LS b2657bcbbd adjusted codec2 file search path 2024-02-29 20:34:27 +01:00
DJ2LS 515f895ed3 more error handling 2024-02-29 19:33:12 +01:00
DJ2LS 6c9439ac70 adjusted server lookup path 2024-02-29 17:46:34 +01:00
DJ2LS 2f21dc6abc adjusted server lookup path 2024-02-29 17:45:40 +01:00
DJ2LS 2ea6a4fe13 removed updater, auto start server 2024-02-29 16:46:56 +01:00
DJ2LS 84504f734f removed updater, auto start server 2024-02-29 16:36:56 +01:00
DJ2LS 100c871cd9 first attempt creating a full bundle 2024-02-29 15:27:39 +01:00
DJ2LS e1b5872e26 first attempt creating a full bundle 2024-02-29 15:05:54 +01:00
DJ2LS 744ed425c3
Merge pull request #666 from DJ2LS/develop
0.14.0
2024-02-28 21:19:47 +01:00
DJ2LS 2b21aab26b bump version 2024-02-28 21:18:43 +01:00
DJ2LS c369037deb
Merge pull request #665 from DJ2LS/dev-arq
mode gear shifting
2024-02-28 20:18:19 +01:00
DJ2LS c8e6e11d84 removed ujson dependency 2024-02-28 20:01:26 +01:00
DJ2LS 05a274edeb attempt fixing macos server build 2024-02-28 19:44:50 +01:00
DJ2LS bdaed0e873 fixed test 2024-02-28 19:41:06 +01:00
DJ2LS 6566412d64 Merge remote-tracking branch 'origin/dev-arq' into dev-arq 2024-02-28 09:56:33 +01:00
DJ2LS 25de300970 fixed test 2024-02-28 09:56:28 +01:00
codefactor-io 2f07441fc6
[CodeFactor] Apply fixes 2024-02-28 08:27:09 +00:00
DJ2LS fd9fb81fa2 adjusted stats 2024-02-27 22:39:45 +01:00
DJ2LS 9706260933 adjust speed level with info ack 2024-02-25 21:23:15 +01:00
DJ2LS 4a34386c26 small adjustments to api validation, hopefully catching mygrid 4/6 error 2024-02-25 21:08:45 +01:00
DJ2LS 419f7732df more try/except for schedule manager 2024-02-25 20:44:05 +01:00
DJ2LS 59778165bf fixed some tests 2024-02-24 22:27:01 +01:00
DJ2LS 0c322bacf8 WIP gui stats 2024-02-24 22:10:41 +01:00
DJ2LS e7ce198fa1 WIP gui stats 2024-02-24 22:01:15 +01:00
DJ2LS dd4ca1903b added session statistics 2024-02-24 21:49:53 +01:00
DJ2LS 956cede593 try except for schedule manager 2024-02-24 20:34:53 +01:00
DJ2LS 374f400f30 adding fallback speed level 2024-02-23 15:21:52 +01:00
DJ2LS 36890fe131 adding fallback speed level 2024-02-23 14:38:08 +01:00
DJ2LS d3d09d4019 attempt of sending in previous speed level 2024-02-23 13:59:47 +01:00
DJ2LS f307ed779f attempt of sending in previous speed level 2024-02-23 13:55:15 +01:00
DJ2LS 7ecccabcc0 fixed arq burst 2024-02-23 08:59:03 +01:00
DJ2LS 33ad50fbe2 moved from upshift downshift to speed level int 2024-02-22 21:49:57 +01:00
DJ2LS 3574f76a79 moved from upshift downshift to speed level int 2024-02-22 21:15:43 +01:00
DJ2LS 0100104afb fixed missing arq abort state 2024-02-22 16:03:28 +01:00
DJ2LS 89f61c15fd adjusted gear shifting 2024-02-22 15:46:15 +01:00
DJ2LS 7eb9fa1dc5 adjusted gear shifting 2024-02-22 15:39:18 +01:00
DJ2LS 451ec404e9 adjusted gear shifting 2024-02-22 15:30:21 +01:00
DJ2LS e64d71b135 set initial speed level 2024-02-22 15:18:25 +01:00
DJ2LS 22f0226600 gear shifting test 2024-02-22 15:05:54 +01:00
DJ2LS 836f4b99d8 fixed toasts z index 2024-02-22 13:02:23 +01:00
DJ2LS c64ea890d1
Merge pull request #660 from DJ2LS/develop
adjusted rigctld and config handling
2024-02-22 12:51:38 +01:00
DJ2LS 6c147106df bump version 2024-02-22 10:59:51 +01:00
DJ2LS 6f64b61ea5 adjusted config setting for avoiding restart 2024-02-22 10:58:28 +01:00
DJ2LS e284a58db9 iterate through all rigctld binaries 2024-02-22 10:49:30 +01:00
DJ2LS 8ccff438d0 hopefully fixed rigctld fetching 2024-02-22 10:26:18 +01:00
DJ2LS cf06bbffea Prettified Code! 2024-02-21 16:46:47 +00:00
DJ2LS a6eec88337
Merge pull request #656 from DJ2LS/develop
several arq related fixes
2024-02-21 17:46:32 +01:00
DJ2LS f33222794b
Merge pull request #657 from DJ2LS/dev-radio-control
adjusted radio control and some more fixes
2024-02-21 17:19:50 +01:00
DJ2LS 9db78d1031 arq adjustments 2024-02-21 17:05:28 +01:00
DJ2LS 0349cf1b7c callsign related adustments... 2024-02-21 16:55:45 +01:00
DJ2LS fbcc49019f fixed missing updater 2024-02-21 16:52:26 +01:00
DJ2LS 8b65b6240b added updater 2024-02-21 11:18:57 +01:00
DJ2LS 98d8812571 fixed modals in background 2024-02-21 11:10:24 +01:00
DJ2LS c42ac793b9 added error check to gui 2024-02-21 11:01:24 +01:00
DJ2LS 2156a8fa8f added updater placeholder... 2024-02-20 11:05:57 +01:00
DJ2LS ba5fbd3a71 introduced radioHandler.ts 2024-02-20 10:05:13 +01:00
DJ2LS 5c232a2165 forgot a 0 ... 2024-02-20 09:52:26 +01:00
DJ2LS 31a93b3183 adjusted state fetching and rf power setting 2024-02-20 09:39:47 +01:00
DJ2LS fea294b26f fixed radio api 2024-02-20 09:13:34 +01:00
DJ2LS f76dc5da14 first attempt fixing radio mode related problems by separating parameters 2024-02-20 08:09:05 +01:00
DJ2LS f1971cdf4f Merge remote-tracking branch 'origin/develop' into develop 2024-02-19 20:08:11 +01:00
DJ2LS 1337a4a0c8 fixed more tests 2024-02-19 20:08:05 +01:00
DJ2LS 347a916a34
Merge pull request #645 from DJ2LS/dependabot/npm_and_yarn/gui/develop/socket.io-4.7.4 2024-02-19 11:46:05 +01:00
DJ2LS b1a1a40e97
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/socket.io-4.7.4 2024-02-19 11:46:00 +01:00
DJ2LS 4405293a90
Merge pull request #644 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.2 2024-02-19 11:45:50 +01:00
DJ2LS d95bea09a8
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.2 2024-02-19 11:45:43 +01:00
DJ2LS b7563040ef only retry first result 2024-02-19 11:06:15 +01:00
DJ2LS 30de19f729 possibly fixed repeating message 2024-02-19 10:59:53 +01:00
DJ2LS 2c24545e68 possibly fixed repeating message 2024-02-19 10:53:44 +01:00
DJ2LS 35276b01ef improved message tests which went stuck 2024-02-19 08:37:16 +01:00
DJ2LS 10be8db7d0 improved arq tests which went stuck 2024-02-19 08:27:40 +01:00
DJ2LS 1cfae172bb
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/socket.io-4.7.4 2024-02-19 07:48:03 +01:00
DJ2LS 4a3a0e4893
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.2 2024-02-19 07:47:59 +01:00
DJ2LS fde3de12d6
Merge pull request #643 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vitejs/plugin-vue-5.0.4 2024-02-19 07:44:57 +01:00
DJ2LS b002e7136e
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vitejs/plugin-vue-5.0.4 2024-02-19 07:44:10 +01:00
dependabot[bot] 25bd486f8e
Bump vite-plugin-electron from 0.28.0 to 0.28.2 in /gui
Bumps [vite-plugin-electron](https://github.com/electron-vite/vite-plugin-electron) from 0.28.0 to 0.28.2.
- [Release notes](https://github.com/electron-vite/vite-plugin-electron/releases)
- [Changelog](https://github.com/electron-vite/vite-plugin-electron/blob/main/CHANGELOG.md)
- [Commits](https://github.com/electron-vite/vite-plugin-electron/compare/v0.28.0...v0.28.2)

---
updated-dependencies:
- dependency-name: vite-plugin-electron
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 06:24:03 +00:00
DJ2LS 9969b214d9
Merge pull request #642 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-prettier-5.1.3 2024-02-19 07:23:31 +01:00
DJ2LS 084c1143ee
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-prettier-5.1.3 2024-02-19 07:23:22 +01:00
DJ2LS 67a3ab31e7
Merge pull request #654 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vite-5.1.3 2024-02-19 07:22:15 +01:00
DJ2LS 91941eec7b
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-5.1.3 2024-02-19 07:22:03 +01:00
Mashintime 6db6c486a3 Remove print (accidentally committed) 2024-02-18 15:46:40 -05:00
Mashintime d87579f9ac Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-02-18 15:39:08 -05:00
Mashintime ee6ca66602
Merge pull request #655 from DJ2LS/dev-message-auto-repeat
message auto repeat
2024-02-18 15:37:37 -05:00
Mashintime 0213e538fa
Merge pull request #653 from DJ2LS/dev-arq
arq adjustments
2024-02-18 15:37:04 -05:00
Mashintime 796d1c0566 Only restart modem if config is valid 2024-02-18 15:34:10 -05:00
Mashintime 47242fb33e Remove duplicate setting 2024-02-18 15:33:42 -05:00
Mashintime 70228054fd Remove unused setting 2024-02-18 15:33:29 -05:00
DJ2LS f8bff53eae updated example config and typo 2024-02-18 21:31:08 +01:00
DJ2LS 2bfc8c345a Merge remote-tracking branch 'origin/dev-arq' into dev-message-auto-repeat 2024-02-18 21:19:21 +01:00
DJ2LS 7d33c0aad9 Merge remote-tracking branch 'origin/dev-arq' into dev-arq 2024-02-18 21:18:37 +01:00
DJ2LS dbc959d06e added config related parts 2024-02-18 21:15:33 +01:00
DJ2LS 3a84ec0bbb Merge remote-tracking branch 'origin/dev-arq' into dev-message-auto-repeat 2024-02-18 21:11:06 +01:00
DJ2LS 7a09f94767 added config related parts 2024-02-18 21:08:14 +01:00
DJ2LS 25dedfde6c Merge remote-tracking branch 'origin/develop' into dev-message-auto-repeat 2024-02-18 20:38:55 +01:00
DJ2LS e90d1f7716 adjusted config 2024-02-18 20:31:01 +01:00
Mashintime 273914d714 Extra serial port in config.py 2024-02-18 13:57:53 -05:00
Mashintime 44d24123b1 Remove enable_fft from gui settingstore 2024-02-18 13:57:16 -05:00
Mashintime d7bd9c86a8 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-02-18 12:43:09 -05:00
DJ2LS 303ac0d6ef
Merge branch 'develop' into dev-arq 2024-02-18 16:16:24 +01:00
dependabot[bot] b52d55285c
Bump vite from 5.0.12 to 5.1.3 in /gui
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.12 to 5.1.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-18 14:08:57 +00:00
DJ2LS 5ef97720b0
Merge pull request #652 from DJ2LS/dev-update-config
auto update server config
2024-02-18 15:07:33 +01:00
DJ2LS c329070606
Merge pull request #651 from DJ2LS/more-rigctl
Rigctl argument tweaks
2024-02-18 15:07:15 +01:00
DJ2LS 7f86ab2ece arq adjustments and attempt fixing tests 2024-02-18 15:06:13 +01:00
Mashintime 5bee82a17c Further adjustment 2024-02-17 16:57:54 -05:00
DJ2LS 657a6a8967 default values as list 2024-02-17 20:45:51 +01:00
DJ2LS 404585ebe0 auto update server config 2024-02-17 20:42:07 +01:00
Mashintime c26f9cb9ba Incr Next Version 2024-02-17 12:55:10 -05:00
Mashintime 7eaac1cc29 Fix typos/remove rts 2024-02-17 11:03:59 -05:00
Mashintime a07249213e
Merge branch 'develop' into more-rigctl 2024-02-17 10:53:04 -05:00
Mashintime b69e485f10 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-02-17 10:48:44 -05:00
Mashintime fc055671cb Adjustments to rigctld arguments 2024-02-17 10:41:56 -05:00
DJ2LS 916c2a4a63 delete beacons older than 2 days 2024-02-17 10:41:33 -05:00
DJ2LS 8d47d4890e removed rigctld typo 2024-02-17 10:41:33 -05:00
DJ2LS b569cbc315 adjusted a rigctld command 2024-02-17 10:41:33 -05:00
DJ2LS 4f50b802ac adjusted state manager in data type handler 2024-02-17 10:41:33 -05:00
DJ2LS 0e1986b2da removed possibly obsolete arq state at wrong position 2024-02-17 10:41:33 -05:00
DJ2LS 390817caa7 repeat message when beacon received 2024-02-16 11:02:10 +01:00
DJ2LS 11a27bcbd7
Merge pull request #650 from DJ2LS/dev-arq 2024-02-14 22:57:32 +01:00
DJ2LS 877b517b72 delete beacons older than 2 days 2024-02-14 16:45:19 +01:00
DJ2LS 9a8ebfef77 removed rigctld typo 2024-02-14 16:29:18 +01:00
DJ2LS b017f39133 adjusted a rigctld command 2024-02-14 16:20:00 +01:00
DJ2LS 6dd78bf8fc adjusted state manager in data type handler 2024-02-14 09:27:20 +01:00
DJ2LS fffc59b0a6 removed possibly obsolete arq state at wrong position 2024-02-14 09:13:39 +01:00
Mashintime 12d1010da9 Bump version 2024-02-12 16:17:24 -05:00
Mashintime 3b505d24f2
Merge pull request #648 from DJ2LS/develop
Develop
2024-02-12 16:14:46 -05:00
Mashintime fc9e848f1f
Merge branch 'main' into develop 2024-02-12 16:14:20 -05:00
DJ2LS f437b2a01b
Merge pull request #647 from DJ2LS/rigctld-win
Internal rigctld tweaks for windows users
2024-02-11 21:38:24 +01:00
DJ2LS 0738fe1454 removed 32bit hamlib build 2024-02-11 20:59:29 +01:00
Mashintime 321dda3fd9 Include custom args when starting rigctld 2024-02-11 13:09:51 -05:00
Mashintime 37bc01e426 Check Program Files on Windows for Hamlib 2024-02-11 13:07:48 -05:00
Mashintime f11c61c8a6 Remove default settings from example config 2024-02-11 13:05:03 -05:00
dependabot[bot] acb2bb4e9b
Bump socket.io from 4.7.2 to 4.7.4 in /gui
Bumps [socket.io](https://github.com/socketio/socket.io) from 4.7.2 to 4.7.4.
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/4.7.2...4.7.4)

---
updated-dependencies:
- dependency-name: socket.io
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-11 10:20:01 +00:00
dependabot[bot] 910690178e
Bump @vitejs/plugin-vue from 5.0.3 to 5.0.4 in /gui
Bumps [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue) from 5.0.3 to 5.0.4.
- [Release notes](https://github.com/vitejs/vite-plugin-vue/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-vue/commits/plugin-vue@5.0.4/packages/plugin-vue)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-vue"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-11 10:19:32 +00:00
dependabot[bot] 950eab71fe
Bump eslint-plugin-prettier from 5.0.1 to 5.1.3 in /gui
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.0.1 to 5.1.3.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.0.1...v5.1.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-11 10:19:21 +00:00
DJ2LS 38c54b575a
Merge pull request #640 from DJ2LS/develop
start rigctld automatically & fix for missing gui config
2024-02-11 11:18:31 +01:00
DJ2LS c15e489b1c
Merge pull request #630 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-n-16.6.2
Bump eslint-plugin-n from 16.1.0 to 16.6.2 in /gui
2024-02-11 10:07:35 +01:00
DJ2LS 923ab36668
Merge pull request #631 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vitest-1.2.2
Bump vitest from 1.0.2 to 1.2.2 in /gui
2024-02-11 10:07:26 +01:00
DJ2LS 21ab92f873
Merge pull request #632 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-config-standard-with-typescript-43.0.1
Bump eslint-config-standard-with-typescript from 43.0.0 to 43.0.1 in /gui
2024-02-11 10:07:19 +01:00
DJ2LS 75c5227536
Merge pull request #634 from DJ2LS/dependabot/npm_and_yarn/gui/develop/typescript-eslint/eslint-plugin-6.21.0
Bump @typescript-eslint/eslint-plugin from 6.19.1 to 6.21.0 in /gui
2024-02-11 10:07:07 +01:00
DJ2LS fa9d684853
Merge pull request #635 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-28.2.2
Bump electron from 28.1.3 to 28.2.2 in /gui
2024-02-11 10:07:00 +01:00
DJ2LS a0525ef01b adjusted dependabot 2024-02-11 10:06:47 +01:00
DJ2LS bb668a1ac9 fixed control check 2024-02-11 10:00:57 +01:00
dependabot[bot] 8332690c67
Bump electron from 28.1.3 to 28.2.2 in /gui
Bumps [electron](https://github.com/electron/electron) from 28.1.3 to 28.2.2.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v28.1.3...v28.2.2)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-11 08:58:09 +00:00
DJ2LS 139bdc7699 version update 2024-02-11 09:57:07 +01:00
DJ2LS 2ccabc28bc
Merge pull request #639 from DJ2LS/dev-start-rigctld-process
start rigctld from local binary
2024-02-11 09:56:37 +01:00
codefactor-io 8525a7a321
[CodeFactor] Apply fixes 2024-02-11 08:55:56 +00:00
DJ2LS 045cb38a63 fixed healthcheck 2024-02-11 09:54:18 +01:00
DJ2LS 9734ce9a1c fixed healthcheck 2024-02-11 09:21:08 +01:00
DJ2LS 64e5e35b6f added internal/external hamlib 2024-02-11 09:17:52 +01:00
DJ2LS c3d558a07a
Merge pull request #638 from arodland/patch-1
fix loading default config
2024-02-11 09:02:29 +01:00
DJ2LS a955d45518 adjusted settings 2024-02-11 08:48:49 +01:00
Andrew Rodland 7099d2e379
fix loading default config
without this change, if the user doesn't have a valid config on disk, they just get a white screen on startup due to `nconf.required` throwing an exception.
2024-02-10 23:13:53 -05:00
DJ2LS 5093abc1dc use system wide path as well for lookup 2024-02-10 21:44:02 +01:00
DJ2LS 704186c3c2 added downloading windwos hamlib releases for nsis 2024-02-10 21:36:14 +01:00
DJ2LS f239a1a3be first attempt using rigctld... 2024-02-10 21:28:07 +01:00
DJ2LS fd63cc7fa7
Merge pull request #637 from DJ2LS/develop
Config related adjustments and build process update
2024-02-10 14:01:21 +01:00
codefactor-io 74d79204ec
[CodeFactor] Apply fixes to commit ec34a69 2024-02-10 12:57:33 +00:00
DJ2LS ec34a690e9 improved gui reconnecting 2024-02-10 13:57:18 +01:00
DJ2LS 17bce4b0db version update 2024-02-10 11:05:55 +01:00
DJ2LS d38b3bc672 reduced explorer interval 2024-02-10 11:05:10 +01:00
DJ2LS c89a809e6d adjusted some default config 2024-02-10 11:02:13 +01:00
DJ2LS d906d9ab5e adjusted artifact names 2024-02-10 07:06:16 +01:00
DJ2LS a6c671e113
Merge pull request #636 from DJ2LS/main-cf-autofix
Apply fixes from CodeFactor
2024-02-08 22:18:41 +01:00
codefactor-io 2f977e748b
[CodeFactor] Apply fixes to commit ba8a8bc 2024-02-08 21:05:57 +00:00
DJ2LS ba8a8bc7b9
Merge pull request #628 from DJ2LS/develop 2024-02-08 22:05:38 +01:00
DJ2LS 3b52312150 Merge remote-tracking branch 'origin/develop' into develop 2024-02-08 19:37:13 +01:00
DJ2LS f4b4f6b398 version update 2024-02-08 19:37:08 +01:00
codefactor-io 34101b8a20
[CodeFactor] Apply fixes to commit 3c9c115 2024-02-08 12:39:36 +00:00
DJ2LS 3c9c115931 adjusted health status check 2024-02-08 13:39:18 +01:00
DJ2LS 13e5f98b06 callsign lookup if not present in frame 2024-02-08 13:15:46 +01:00
DJ2LS e58cc7a073 Merge remote-tracking branch 'origin/develop' into develop 2024-02-08 10:18:15 +01:00
DJ2LS c650b3c94b adjusted raspberrpi emoji package, closes #485 2024-02-08 10:18:10 +01:00
codefactor-io 6b0e06481c
[CodeFactor] Apply fixes 2024-02-08 09:14:40 +00:00
DJ2LS beb8317f94 added ping message to gui 2024-02-08 10:13:25 +01:00
DJ2LS 4cf8097c83 added ping message to gui 2024-02-08 10:12:49 +01:00
DJ2LS 96a300ada5 removed type length check for message attachments 2024-02-08 10:06:46 +01:00
codefactor-io 4b225ce6f4
[CodeFactor] Apply fixes 2024-02-07 22:33:55 +00:00
DJ2LS 3773ccb657 Merge remote-tracking branch 'origin/develop' into develop 2024-02-07 23:33:37 +01:00
DJ2LS 526911b54f fixed ts checker 2024-02-07 23:33:33 +01:00
codefactor-io dfdd639073
[CodeFactor] Apply fixes to commit e658de3 2024-02-07 22:17:38 +00:00
DJ2LS e658de3811 fixed emojipicker 2024-02-07 23:17:21 +01:00
DJ2LS 88c13c8129 Merge remote-tracking branch 'origin/develop' into develop 2024-02-07 23:04:00 +01:00
DJ2LS ff624a4c9a adjusted message handler 2024-02-07 23:03:55 +01:00
codefactor-io c8ae7487f7
[CodeFactor] Apply fixes to commit c33d23f 2024-02-07 21:47:01 +00:00
DJ2LS c33d23f326 possible fix of stuck file input 2024-02-07 22:46:45 +01:00
DJ2LS 8be087e4fc Merge remote-tracking branch 'origin/develop' into develop 2024-02-07 22:23:55 +01:00
DJ2LS 0e111e628b possible fix for stuck radio control 2024-02-07 22:23:49 +01:00
codefactor-io 33465a1169
[CodeFactor] Apply fixes to commit 9e617b2 2024-02-07 19:38:07 +00:00
DJ2LS 9e617b2da5 possible layout fix for smaller screens 2024-02-07 20:37:43 +01:00
DJ2LS 1371cadc02 added cli line for debugging 2024-02-07 19:56:57 +01:00
DJ2LS 8fefc11380 fixed more tests 2024-02-07 19:54:54 +01:00
DJ2LS 8ef8744ba1 fixed database test 2024-02-07 19:49:00 +01:00
DJ2LS 0a9ce0d202 fixed message transmission status 2024-02-07 19:43:10 +01:00
codefactor-io 127f4db1a1
[CodeFactor] Apply fixes 2024-02-07 09:23:56 +00:00
DJ2LS 634cb35048 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/components/chat.vue
#	gui/src/components/chat_conversations.vue
#	gui/src/components/chat_messages.vue
2024-02-07 10:23:30 +01:00
DJ2LS 0502506b90 moved file selection 2024-02-07 10:23:14 +01:00
codefactor-io 6670e0a6d1
[CodeFactor] Apply fixes to commit 1449869 2024-02-06 21:50:14 +00:00
DJ2LS 1449869c0f adjusted chat navbars 2024-02-06 22:49:55 +01:00
codefactor-io cb8d17d006
[CodeFactor] Apply fixes 2024-02-06 21:09:05 +00:00
DJ2LS d21100a14b Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/messagesHandler.ts
2024-02-06 22:08:29 +01:00
DJ2LS 6cce06eb2e fiex ts error 2024-02-06 22:08:17 +01:00
codefactor-io 6a58807227
[CodeFactor] Apply fixes to commit 01e4385 2024-02-06 20:06:13 +00:00
DJ2LS 01e4385c40 file input fixes 2024-02-06 21:05:57 +01:00
DJ2LS f526a9adb3 cleanup and fix for empty message body 2024-02-06 20:33:36 +01:00
DJ2LS 09a0bf0c0d added attachment counter, cleanup 2024-02-06 20:20:52 +01:00
codefactor-io 1f38267626
[CodeFactor] Apply fixes to commit 8d62550 2024-02-06 19:09:39 +00:00
DJ2LS 8d62550775 first attempt with adding and downloading message attachments 2024-02-06 20:09:20 +01:00
dependabot[bot] 8d7b961f4e
Bump @typescript-eslint/eslint-plugin from 6.19.1 to 6.21.0 in /gui
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.19.1 to 6.21.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.21.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-06 16:51:39 +00:00
DJ2LS 463a1766f1 adjusted db model, made databse handlers more modular 2024-02-06 09:41:56 +01:00
DJ2LS b5bb7acab6 adjusted db model, made databse handlers more modular 2024-02-06 09:25:03 +01:00
DJ2LS e445d23968 adjusted db model, made databse handlers more modular 2024-02-06 09:22:55 +01:00
DJ2LS 77d95baf00 dont delete callsign anymore for nsis 2024-02-05 22:21:38 +01:00
DJ2LS cf37622365 adjusted callsign regex 2024-02-05 21:57:56 +01:00
dependabot[bot] 4f3b4b2762
Bump eslint-config-standard-with-typescript in /gui
Bumps [eslint-config-standard-with-typescript](https://github.com/mightyiam/eslint-config-standard-with-typescript) from 43.0.0 to 43.0.1.
- [Release notes](https://github.com/mightyiam/eslint-config-standard-with-typescript/releases)
- [Changelog](https://github.com/mightyiam/eslint-config-standard-with-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mightyiam/eslint-config-standard-with-typescript/compare/v43.0.0...v43.0.1)

---
updated-dependencies:
- dependency-name: eslint-config-standard-with-typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 16:34:47 +00:00
dependabot[bot] 243dc771fd
Bump vitest from 1.0.2 to 1.2.2 in /gui
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 1.0.2 to 1.2.2.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v1.2.2/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 16:34:38 +00:00
dependabot[bot] a99bece107
Bump eslint-plugin-n from 16.1.0 to 16.6.2 in /gui
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.1.0 to 16.6.2.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.1.0...16.6.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 16:34:23 +00:00
DJ2LS d81305d019 updated default config 2024-02-04 20:36:23 +01:00
DJ2LS 34e4578633 added priority column to database. 2024-02-04 20:27:29 +01:00
Mashintime 4b1b351711 GUI heap overflow fix 2024-02-04 10:43:06 -05:00
DJ2LS a25419275b
Merge pull request #625 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron/universal-2.0.1 2024-02-04 14:23:47 +01:00
DJ2LS 8865897260
Merge pull request #624 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vueuse/electron-10.7.2 2024-02-04 14:23:37 +01:00
DJ2LS 5ec2cd4dc6
Merge pull request #623 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vue-3.4.15 2024-02-04 14:23:24 +01:00
dependabot[bot] 127e5a4120
Bump @vueuse/electron from 10.7.1 to 10.7.2 in /gui
Bumps [@vueuse/electron](https://github.com/vueuse/vueuse/tree/HEAD/packages/electron) from 10.7.1 to 10.7.2.
- [Release notes](https://github.com/vueuse/vueuse/releases)
- [Commits](https://github.com/vueuse/vueuse/commits/v10.7.2/packages/electron)

---
updated-dependencies:
- dependency-name: "@vueuse/electron"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-04 12:49:46 +00:00
dependabot[bot] 6c8e03c297
Bump @electron/universal from 2.0.0 to 2.0.1 in /gui
Bumps [@electron/universal](https://github.com/electron/universal) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/electron/universal/releases)
- [Changelog](https://github.com/electron/universal/blob/main/.releaserc.json)
- [Commits](https://github.com/electron/universal/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: "@electron/universal"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-04 12:49:40 +00:00
dependabot[bot] fb8e4b5170
Bump vue from 3.3.12 to 3.4.15 in /gui
Bumps [vue](https://github.com/vuejs/core) from 3.3.12 to 3.4.15.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.3.12...v3.4.15)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-04 12:49:40 +00:00
DJ2LS eaffe29512
Merge pull request #627 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-log-5.1.1
Bump electron-log from 5.0.3 to 5.1.1 in /gui
2024-02-04 13:49:07 +01:00
DJ2LS eae7edddb4
Merge pull request #626 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron/notarize-2.2.1
Bump @electron/notarize from 2.2.0 to 2.2.1 in /gui
2024-02-04 13:48:43 +01:00
DJ2LS dbd0081cf6 adjusted nsis installer 2024-02-04 13:44:03 +01:00
Mashintime b2f6464645 Modem update script for windows 2024-02-03 14:46:26 -05:00
Mashintime 39b401f848 Clean up windows batch files out of tools 2024-02-03 14:46:04 -05:00
DJ2LS 74f6482bb0 adjusted nsis stuff 2024-02-03 20:44:49 +01:00
DJ2LS b7e0e20829 adjusted nsis stuff 2024-02-03 20:27:55 +01:00
DJ2LS 0f5736cdcc Merge remote-tracking branch 'origin/develop' into develop 2024-02-03 15:01:08 +01:00
DJ2LS f003855e8a adjusted database and added attempts and is_read 2024-02-03 15:01:01 +01:00
codefactor-io cb095ebae5
[CodeFactor] Apply fixes 2024-02-03 13:22:28 +00:00
DJ2LS b389ca4e7f Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/messagesHandler.ts
2024-02-03 14:22:04 +01:00
DJ2LS 22f8ea1ce8 retransmit message 2024-02-03 14:16:23 +01:00
codefactor-io 4ebcd1c7f6
[CodeFactor] Apply fixes 2024-02-03 13:04:38 +00:00
DJ2LS f13f06c795 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/messagesHandler.ts
2024-02-03 14:04:16 +01:00
DJ2LS 4a6e87efd7 fixed message parsing after api change 2024-02-03 14:04:05 +01:00
codefactor-io ba6f07407c
[CodeFactor] Apply fixes 2024-02-03 12:55:30 +00:00
DJ2LS 08c2b7809a smaller gui fixes, return all messages as valid json 2024-02-03 13:53:31 +01:00
DJ2LS d42b25d6eb reduced errors, heard stations still needs a fix 2024-02-03 13:34:22 +01:00
DJ2LS c6eb7b71b2 reduced errors, beacon chart now working again 2024-02-03 13:27:14 +01:00
DJ2LS d50b3b4db7 fix selected callsign missiing 2024-02-03 12:09:57 +01:00
DJ2LS b619e8506a some gui adjustments 2024-02-03 11:40:07 +01:00
DJ2LS cf35520526 forgot setting connection attempts to 10 2024-02-03 11:13:15 +01:00
DJ2LS b7567ac33e version update 2024-02-03 11:02:41 +01:00
DJ2LS 7dc113948d version update 2024-02-03 10:58:51 +01:00
DJ2LS 81e9559dba beacon to database, beacon endpoint, database index 2024-02-03 10:57:56 +01:00
DJ2LS cd4ccd5cf7 fixed tests 2024-02-02 19:50:16 +01:00
DJ2LS b70a209899 introduced schedule manager 2024-02-02 19:37:02 +01:00
DJ2LS 6a352e63b7 don't publish default callsign 2024-02-02 07:26:01 +01:00
dependabot[bot] 93eea0bd8b
Bump electron-log from 5.0.3 to 5.1.1 in /gui
Bumps [electron-log](https://github.com/megahertz/electron-log) from 5.0.3 to 5.1.1.
- [Changelog](https://github.com/megahertz/electron-log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/megahertz/electron-log/compare/v5.0.3...v5.1.1)

---
updated-dependencies:
- dependency-name: electron-log
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-01 16:21:34 +00:00
DJ2LS 21ccd4dde1 gui version update 2024-01-31 15:59:43 +01:00
DJ2LS b78d96bd66 adjusted installer name 2024-01-31 12:11:43 +01:00
DJ2LS 87d7e73615 set first selected callsign 2024-01-31 12:01:24 +01:00
DJ2LS 12b1f9e436 adjusted message status 2024-01-31 11:38:17 +01:00
DJ2LS 92039f63df fixed failing message 2024-01-31 11:38:02 +01:00
DJ2LS 79471dc151 added components part to nsis 2024-01-31 11:01:46 +01:00
DJ2LS a979b84339 another attempt with nsis.. 2024-01-31 10:21:54 +01:00
DJ2LS 1bba117db2 another attempt with nsis.. 2024-01-31 10:19:27 +01:00
DJ2LS 718ffd5ee7 another attempt with nsis.. 2024-01-31 10:19:07 +01:00
DJ2LS d06cdd5649 another attempt with nsis.. 2024-01-30 22:19:00 +01:00
DJ2LS 9d44a47317 another attempt with nsis.. 2024-01-30 22:12:45 +01:00
DJ2LS 058eacd07a attempt with nsis installer 2024-01-30 21:41:53 +01:00
DJ2LS f4e11f190c attempt with nsis installer 2024-01-30 21:41:25 +01:00
DJ2LS d86d36a16e get ping dxcallsign from database 2024-01-30 21:22:04 +01:00
DJ2LS f8c3423018 arq session type: from string to enum 2024-01-30 09:30:13 +01:00
DJ2LS 03adceca23 forgot changing connectien attempts... 2024-01-30 09:03:02 +01:00
DJ2LS e279f45229 added arq transmission failed state 2024-01-29 17:50:28 +01:00
dependabot[bot] 8f5b4d67fe
Bump @electron/notarize from 2.2.0 to 2.2.1 in /gui
Bumps [@electron/notarize](https://github.com/electron/notarize) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/electron/notarize/releases)
- [Changelog](https://github.com/electron/notarize/blob/main/.releaserc.json)
- [Commits](https://github.com/electron/notarize/compare/v2.2.0...v2.2.1)

---
updated-dependencies:
- dependency-name: "@electron/notarize"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 16:49:29 +00:00
DJ2LS f5a3f96520 temporary fix for callsign validation. We still need to improve our regex 2024-01-29 09:25:12 +01:00
DJ2LS 89faf52e57 adjusted regex for allowing all types of callsigns 2024-01-28 22:48:28 +01:00
DJ2LS 4ccc509992 small gui added modem busy state while ARQ 2024-01-28 21:29:56 +01:00
DJ2LS dde0a6e812 small gui adjustments 2024-01-28 20:07:15 +01:00
DJ2LS 4aaf91d187 make new chat callsign uppercase 2024-01-28 12:41:21 +01:00
DJ2LS 31363c9de2 update messages on click on chat 2024-01-28 12:36:54 +01:00
DJ2LS 1bbfa6f22b delete messages 2024-01-28 12:32:16 +01:00
DJ2LS 69a7705043 additional message endpoints and tests 2024-01-28 12:08:55 +01:00
DJ2LS a66e875be2 disabled options, not yet supported 2024-01-28 09:52:07 +01:00
DJ2LS b994a2ae4f adjusted message sorting 2024-01-28 09:50:20 +01:00
DJ2LS 041b477a4a show received and sent messags 2024-01-28 09:46:04 +01:00
DJ2LS 20dd7cda2c
Merge pull request #611 from DJ2LS/dependabot/npm_and_yarn/gui/develop/emoji-picker-element-1.21.0
Bump emoji-picker-element from 1.20.1 to 1.21.0 in /gui
2024-01-28 09:26:36 +01:00
DJ2LS 9c33b28fdb
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/emoji-picker-element-1.21.0 2024-01-28 09:26:30 +01:00
DJ2LS 70b73b0f7d
Merge pull request #613 from DJ2LS/dependabot/npm_and_yarn/gui/develop/bootstrap-icons-1.11.3
Bump bootstrap-icons from 1.11.2 to 1.11.3 in /gui
2024-01-28 09:26:23 +01:00
DJ2LS eea52c55b6
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/emoji-picker-element-1.21.0 2024-01-28 09:26:11 +01:00
DJ2LS b4bb4ef241
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/bootstrap-icons-1.11.3 2024-01-28 09:26:08 +01:00
DJ2LS eec3f42ce0
Merge pull request #621 from DJ2LS/dependabot/npm_and_yarn/gui/develop/typescript-eslint/eslint-plugin-6.19.1
Bump @typescript-eslint/eslint-plugin from 6.17.0 to 6.19.1 in /gui
2024-01-28 09:26:01 +01:00
DJ2LS ce87464d23
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/emoji-picker-element-1.21.0 2024-01-28 09:25:37 +01:00
DJ2LS 5f61991ab8
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/bootstrap-icons-1.11.3 2024-01-28 09:25:31 +01:00
dependabot[bot] c067967d21
Bump @typescript-eslint/eslint-plugin from 6.17.0 to 6.19.1 in /gui
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.17.0 to 6.19.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.19.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-28 08:25:23 +00:00
DJ2LS 0fb6f40ee6
Merge pull request #612 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vitejs/plugin-vue-5.0.3
Bump @vitejs/plugin-vue from 4.5.2 to 5.0.3 in /gui
2024-01-28 09:24:19 +01:00
DJ2LS 39d28291bd
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vitejs/plugin-vue-5.0.3 2024-01-28 09:23:38 +01:00
DJ2LS fdcaf7815a updated package.json 2024-01-28 09:23:27 +01:00
DJ2LS 2e9344bba7 cleanup and first implementation of server side message sytem 2024-01-27 17:44:18 +01:00
DJ2LS 30bb0ba828 additional error message 2024-01-27 12:17:31 +01:00
DJ2LS 6104799d78 version update 2024-01-27 12:15:37 +01:00
DJ2LS b1d25bdc44 fixed missing event manager 2024-01-27 12:15:12 +01:00
DJ2LS 5d4544f436 adjusted api in case of 0 messages in db 2024-01-27 12:09:59 +01:00
DJ2LS 2685c7d5d5 adjusted some db related things 2024-01-27 12:07:07 +01:00
DJ2LS beec229360 removed memory database for real testing.. 2024-01-25 15:54:11 +01:00
DJ2LS bc0e0fceb5 some fixes to transmit messages.. 2024-01-25 15:49:37 +01:00
DJ2LS 2a98731b5d some fixes to transmit messages.. 2024-01-25 15:48:00 +01:00
DJ2LS eb3a74e146 crazy commit with --memory-- database stuff... 2024-01-25 15:17:38 +01:00
DJ2LS 01714c7691
Merge pull request #619 from DJ2LS/dev-send-message 2024-01-25 08:28:43 +01:00
DJ2LS 5a9e7efd7b
Merge branch 'develop' into dev-send-message 2024-01-25 07:13:01 +01:00
DJ2LS a847648b51 Merge remote-tracking branch 'origin/dev-send-message' into dev-send-message
# Conflicts:
#	modem/command_message_send.py
2024-01-25 07:10:58 +01:00
Pedro Monteiro 6928ab14cc Remove compression from MessageP2P payload from/to methods. 2024-01-25 07:09:54 +01:00
Pedro 7a9ee28bf7 Add MessageP2P attachment encoding/decoding 2024-01-25 07:09:54 +01:00
Pedro 67001ac842 Add P2P send message command. 2024-01-25 07:09:54 +01:00
DJ2LS 5128a8c9f4
Merge pull request #609 from DJ2LS/dependabot/github_actions/develop/actions/setup-python-5
Bump actions/setup-python from 4 to 5
2024-01-25 07:08:24 +01:00
DJ2LS a37498d84e
Merge branch 'develop' into dependabot/github_actions/develop/actions/setup-python-5 2024-01-25 07:08:16 +01:00
DJ2LS aa3034411d
Merge pull request #620 from DJ2LS/dev-fix-gui-tests
Fixing gui tests
2024-01-25 07:07:56 +01:00
Pedro 1f28074566 Use arq_data_type_handler when sending P2P messages 2024-01-24 17:45:21 +01:00
Pedro Monteiro b62d3e3dc9 Remove compression from MessageP2P payload from/to methods. 2024-01-24 08:16:17 +01:00
Pedro ac77e1edbd Add MessageP2P attachment encoding/decoding 2024-01-24 08:16:17 +01:00
Pedro 53fcc6cc56 Add P2P send message command. 2024-01-24 08:16:17 +01:00
DJ2LS 90b0ff06e1 Merge remote-tracking branch 'origin/dev-fix-gui-tests' into dev-fix-gui-tests 2024-01-23 19:12:10 +01:00
DJ2LS f4de64d3be attempt fixing gui build process 2024-01-23 19:12:04 +01:00
codefactor-io 53a34eaaa2
[CodeFactor] Apply fixes 2024-01-23 10:44:34 +00:00
DJ2LS 9d2332477f attempt fixing github test 2024-01-23 11:42:47 +01:00
DJ2LS 965dd5e29d attempt fixing github test 2024-01-23 11:39:16 +01:00
DJ2LS 83ecc2bca1 Merge remote-tracking branch 'origin/main' into develop 2024-01-23 11:26:46 +01:00
DJ2LS 5402f4d9b1
Merge pull request #617 from DJ2LS/dependabot/npm_and_yarn/gui/vite-5.0.12 2024-01-23 09:47:53 +01:00
DJ2LS e7cbb7b514
Merge pull request #618 from DJ2LS/dev-data-dispatcher 2024-01-23 09:28:44 +01:00
DJ2LS f83751cc80 removed data formatter 2024-01-23 07:32:03 +01:00
DJ2LS 857916285d changed dispatcher to a data type handler 2024-01-21 20:34:01 +01:00
DJ2LS 26478ef0a4 adjusted and splitted dispatcher 2024-01-20 21:47:21 +01:00
DJ2LS 47363b2521 small adjustments 2024-01-20 14:35:04 +01:00
DJ2LS a31fce3301 work on data dispatcher 2024-01-20 13:52:35 +01:00
dependabot[bot] 8d81e89d09
Bump vite from 5.0.10 to 5.0.12 in /gui
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.10 to 5.0.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.0.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.12/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-19 22:28:45 +00:00
DJ2LS cd1a37ddbe
Merge pull request #615 from DJ2LS/hotfix
Hotfix: load GUI config
2024-01-17 20:00:02 +01:00
codefactor-io 552a5a9ac8
[CodeFactor] Apply fixes 2024-01-17 18:49:14 +00:00
DJ2LS 98f48295d0 removed hamlib response 2024-01-17 19:48:14 +01:00
DJ2LS f0a8b92d1b fixed missing config for bundles 2024-01-17 19:44:39 +01:00
DJ2LS fadb14ad2f Merge remote-tracking branch 'origin/main' 2024-01-17 13:58:19 +01:00
DJ2LS 2e2444eb47 version update 2024-01-17 13:57:55 +01:00
DJ2LS 23d260a351 Prettified Code! 2024-01-17 12:57:38 +00:00
dependabot[bot] 334bfa5281
Bump bootstrap-icons from 1.11.2 to 1.11.3 in /gui
Bumps [bootstrap-icons](https://github.com/twbs/icons) from 1.11.2 to 1.11.3.
- [Release notes](https://github.com/twbs/icons/releases)
- [Commits](https://github.com/twbs/icons/compare/v1.11.2...v1.11.3)

---
updated-dependencies:
- dependency-name: bootstrap-icons
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-17 12:23:26 +00:00
dependabot[bot] 9d9f54a006
Bump @vitejs/plugin-vue from 4.5.2 to 5.0.3 in /gui
Bumps [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue) from 4.5.2 to 5.0.3.
- [Release notes](https://github.com/vitejs/vite-plugin-vue/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-vue/commits/plugin-vue@5.0.3/packages/plugin-vue)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-vue"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-17 12:23:10 +00:00
dependabot[bot] 49dc83553e
Bump emoji-picker-element from 1.20.1 to 1.21.0 in /gui
Bumps [emoji-picker-element](https://github.com/nolanlawson/emoji-picker-element) from 1.20.1 to 1.21.0.
- [Changelog](https://github.com/nolanlawson/emoji-picker-element/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolanlawson/emoji-picker-element/compare/v1.20.1...v1.21.0)

---
updated-dependencies:
- dependency-name: emoji-picker-element
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-17 12:22:55 +00:00
dependabot[bot] c5b0378a80
Bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-17 12:22:15 +00:00
DJ2LS 236fb17376
Merge pull request #522 from DJ2LS/develop 2024-01-17 13:21:45 +01:00
DJ2LS 10ab050346
Merge pull request #608 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-log-5.0.3 2024-01-17 13:21:31 +01:00
DJ2LS a4aac80fac
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-log-5.0.3 2024-01-17 13:21:24 +01:00
DJ2LS 2fa50ccc8a
Merge pull request #607 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vue-tsc-1.8.27 2024-01-17 13:21:14 +01:00
DJ2LS 9d86bb69bf
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-log-5.0.3 2024-01-17 13:21:06 +01:00
DJ2LS 789ae8ea79
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vue-tsc-1.8.27 2024-01-17 13:21:02 +01:00
DJ2LS ef79fc620a
Merge pull request #606 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-8.56.0 2024-01-17 13:20:56 +01:00
DJ2LS cc7dd28447
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-log-5.0.3 2024-01-17 13:20:50 +01:00
DJ2LS 9020f78af9
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vue-tsc-1.8.27 2024-01-17 13:20:46 +01:00
DJ2LS a306914e8b
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-8.56.0 2024-01-17 13:20:42 +01:00
DJ2LS 03d1fb5dcb
Merge pull request #605 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-vue-9.20.1 2024-01-17 13:20:30 +01:00
DJ2LS 85dccb2962
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-log-5.0.3 2024-01-17 13:20:22 +01:00
DJ2LS c2387e0bf2
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vue-tsc-1.8.27 2024-01-17 13:20:18 +01:00
DJ2LS c64e68bc38
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-8.56.0 2024-01-17 13:20:12 +01:00
DJ2LS 04c9dd31fa
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-vue-9.20.1 2024-01-17 13:19:59 +01:00
DJ2LS 0de2b4ca44
Merge pull request #604 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-28.1.3 2024-01-17 12:11:28 +01:00
DJ2LS 2f0f7da8f4
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-log-5.0.3 2024-01-17 11:53:59 +01:00
DJ2LS c5aa759af8
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vue-tsc-1.8.27 2024-01-17 11:53:52 +01:00
DJ2LS 6b61dbc3c4
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-8.56.0 2024-01-17 11:53:46 +01:00
DJ2LS e6f08d25cc
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-vue-9.20.1 2024-01-17 11:53:39 +01:00
DJ2LS fe4312007c
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-28.1.3 2024-01-17 11:53:33 +01:00
DJ2LS 4562f173d3 bug fixes 2024-01-17 11:06:33 +01:00
Mashintime 6bc3564a5e Save grid enabled state and a few other tweaks to grid enable 2024-01-15 13:49:39 -05:00
dependabot[bot] ef9ec3903a
Bump electron-log from 5.0.0 to 5.0.3 in /gui
Bumps [electron-log](https://github.com/megahertz/electron-log) from 5.0.0 to 5.0.3.
- [Changelog](https://github.com/megahertz/electron-log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/megahertz/electron-log/compare/v5.0.0...v5.0.3)

---
updated-dependencies:
- dependency-name: electron-log
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 16:27:19 +00:00
dependabot[bot] 60453f5348
Bump vue-tsc from 1.4.2 to 1.8.27 in /gui
Bumps [vue-tsc](https://github.com/vuejs/language-tools/tree/HEAD/packages/tsc) from 1.4.2 to 1.8.27.
- [Release notes](https://github.com/vuejs/language-tools/releases)
- [Changelog](https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/language-tools/commits/v1.8.27/packages/tsc)

---
updated-dependencies:
- dependency-name: vue-tsc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 16:27:05 +00:00
dependabot[bot] 4778ff9a81
Bump eslint from 8.50.0 to 8.56.0 in /gui
Bumps [eslint](https://github.com/eslint/eslint) from 8.50.0 to 8.56.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.50.0...v8.56.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 16:26:50 +00:00
dependabot[bot] 5117104049
Bump eslint-plugin-vue from 9.19.2 to 9.20.1 in /gui
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 9.19.2 to 9.20.1.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v9.19.2...v9.20.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 16:26:33 +00:00
dependabot[bot] abd06ac114
Bump electron from 28.0.0 to 28.1.3 in /gui
Bumps [electron](https://github.com/electron/electron) from 28.0.0 to 28.1.3.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v28.0.0...v28.1.3)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 16:26:15 +00:00
DJ2LS 66e23be799
Merge pull request #599 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vueuse/electron-10.7.1
Bump @vueuse/electron from 10.4.1 to 10.7.1 in /gui
2024-01-15 17:00:32 +01:00
DJ2LS 6f39c720dc
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vueuse/electron-10.7.1 2024-01-15 17:00:04 +01:00
DJ2LS 7a95885009
Merge pull request #602 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.0
Bump vite-plugin-electron from 0.15.5 to 0.28.0 in /gui
2024-01-15 16:59:59 +01:00
DJ2LS 0a84f35fdf
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.0 2024-01-15 16:59:38 +01:00
DJ2LS b6aea495cb
Merge pull request #601 from DJ2LS/dependabot/npm_and_yarn/gui/develop/typescript-5.3.3
Bump typescript from 5.2.2 to 5.3.3 in /gui
2024-01-15 16:59:31 +01:00
DJ2LS 2d8416e34e
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vueuse/electron-10.7.1 2024-01-15 16:59:24 +01:00
DJ2LS 05ca724374
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.0 2024-01-15 16:59:19 +01:00
DJ2LS 8ae107393e
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/typescript-5.3.3 2024-01-15 16:59:14 +01:00
DJ2LS ebca695503
Merge pull request #600 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vue-chartjs-5.3.0
Bump vue-chartjs from 5.2.0 to 5.3.0 in /gui
2024-01-15 16:59:04 +01:00
DJ2LS e40007c755
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vueuse/electron-10.7.1 2024-01-15 16:56:48 +01:00
DJ2LS 9b407d5e96
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.28.0 2024-01-15 16:56:41 +01:00
DJ2LS 318a3498bb
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/typescript-5.3.3 2024-01-15 16:56:38 +01:00
DJ2LS 1bf1b5a1c3
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vue-chartjs-5.3.0 2024-01-15 16:56:34 +01:00
DJ2LS cefa80b647 adjusted build process 2024-01-15 16:34:41 +01:00
DJ2LS 9ce6f5726e adjusted build process 2024-01-15 16:27:53 +01:00
DJ2LS 64e115d4f3 fixed crcengine deprecation 2024-01-15 16:16:33 +01:00
DJ2LS 49c34773d6 attempt uploading server as artifact 2024-01-15 16:10:28 +01:00
DJ2LS 76ab882d0f ARQ WIP - delete outdated arq session after specific age, added statistics, added more ARQ tests 2024-01-15 16:04:11 +01:00
DJ2LS 518a739f21 ARQ WIP - only run one ARQ session at a time 2024-01-15 11:16:33 +01:00
Mashintime 467f015cf1 Allow locking of grid 2024-01-14 19:24:03 -05:00
DJ2LS 022d7ef258 ARQ WIP - check if frame is for us 2024-01-14 23:33:06 +01:00
DJ2LS b941eda41a starting flask inline 2024-01-14 21:05:53 +01:00
Mashintime 33e2d63de1 Allow sending blank message if an attachment is present 2024-01-14 11:47:43 -05:00
codefactor-io eb3fb5e222
[CodeFactor] Apply fixes to commit 0c7fc3e 2024-01-14 16:07:32 +00:00
Mashintime 0c7fc3ebf2 Scrollable settings 2024-01-14 11:06:37 -05:00
codefactor-io d5567220f7
[CodeFactor] Apply fixes to commit da9301c 2024-01-14 09:16:10 +00:00
Mashintime da9301c211 Add scatter grid widget 2024-01-14 04:15:24 -05:00
codefactor-io 8b0ce23beb
[CodeFactor] Apply fixes 2024-01-14 07:10:30 +00:00
Mashintime c2f9edae30 Remove db maint from exp settings 2024-01-14 02:09:51 -05:00
Mashintime 3a82e51a4f Message progress bar and footer updates 2024-01-14 02:09:38 -05:00
DJ2LS e47b644bf9 Merge remote-tracking branch 'origin/develop' into develop 2024-01-13 20:43:23 +01:00
DJ2LS 8778c17d88 added exception to explorer stopping 2024-01-13 20:43:08 +01:00
Mashintime de42481e24 Remove some debug logging 2024-01-13 13:58:54 -05:00
DJ2LS cce39a161f adjusted build process with nuitka 2024-01-13 19:22:54 +01:00
codefactor-io 3c353f51e3
[CodeFactor] Apply fixes to commit fe01b06 2024-01-13 18:19:50 +00:00
Mashintime fe01b064c3 Add audio level settings to settings 2024-01-13 13:19:22 -05:00
codefactor-io 7d79a3b74b
[CodeFactor] Apply fixes 2024-01-13 18:08:54 +00:00
Mashintime 8fb5f51ae0 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-13 13:08:21 -05:00
Mashintime f67f62f3ad Validate call sign before sending to modem. 2024-01-13 13:08:12 -05:00
codefactor-io 64b5c2aa1a
[CodeFactor] Apply fixes 2024-01-13 16:32:09 +00:00
Mashintime 1c4402094a Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-13 11:31:28 -05:00
Mashintime 1a0e1fde1e Adjust tune button 2024-01-13 11:31:20 -05:00
Mashintime 95cf9c2056 Adjust grid 2024-01-13 11:31:11 -05:00
Mashintime 6773fee6eb Update rig list and sorted by name. 2024-01-13 11:23:38 -05:00
codefactor-io 78f5c9d460
[CodeFactor] Apply fixes 2024-01-13 15:58:15 +00:00
Mashintime 3713018f25 Update win launch script 2024-01-13 10:54:17 -05:00
Mashintime 3eb09c5ac0 Remove theme setting from GUI 2024-01-13 10:51:47 -05:00
Mashintime 0ca8ee854a Remove fancy graphics setting 2024-01-13 10:08:25 -05:00
Mashintime e75992869d Remove received files setting 2024-01-13 10:03:19 -05:00
Mashintime e7431249e1 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-13 09:55:10 -05:00
DJ2LS ef449d3ec3 ability of running server directly with python3 server.py 2024-01-13 11:28:45 +01:00
Mashintime d071075c55 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-12 17:27:16 -05:00
DJ2LS 640959ffa5 Merge remote-tracking branch 'origin/develop' into develop 2024-01-12 23:25:57 +01:00
DJ2LS bcddc20f33 calculate fft after audio level adjustment 2024-01-12 23:25:50 +01:00
Mashintime 8736613277 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-12 17:16:29 -05:00
codefactor-io f9c92fcbe9
[CodeFactor] Apply fixes 2024-01-12 22:07:06 +00:00
DJ2LS c5214bc083 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/components/main_modals.vue
2024-01-12 23:06:18 +01:00
DJ2LS 7b126afd35 audio tune now working 2024-01-12 23:04:30 +01:00
codefactor-io f4326e196c
[CodeFactor] Apply fixes to commit 667b0f7 2024-01-12 21:53:19 +00:00
DJ2LS 667b0f7f15 added tune button 2024-01-12 22:52:56 +01:00
DJ2LS 6f39d434a7 fix manual frequency selection 2024-01-12 22:12:43 +01:00
DJ2LS ff34ef2d0d Merge remote-tracking branch 'origin/develop' into develop 2024-01-12 21:44:36 +01:00
DJ2LS db07de5b2d small explorer fix 2024-01-12 21:44:31 +01:00
codefactor-io fc38f79674
[CodeFactor] Apply fixes to commit 5ae2ec9 2024-01-12 20:40:52 +00:00
DJ2LS 5ae2ec9d28 changed some settings 2024-01-12 21:40:27 +01:00
DJ2LS a1164eea60 RADIO MANAGER - WIP implemented s-meter - possibly broken 2024-01-12 20:34:07 +01:00
DJ2LS 87002745a5 RADIO MANAGER - WIP fixed set mode and power 2024-01-12 20:21:22 +01:00
DJ2LS f85e032e2f Merge remote-tracking branch 'origin/develop' into develop 2024-01-12 17:00:34 +01:00
DJ2LS 4a1b2849fa RADIO MANAGER - WIP adjusted rigctld - set mode broken 2024-01-12 17:00:28 +01:00
codefactor-io e63775f433
[CodeFactor] Apply fixes to commit baae3a5 2024-01-12 15:29:45 +00:00
DJ2LS baae3a5bb4 RADIO MANAGER - WIP added radio api endpoints 2024-01-12 16:29:22 +01:00
DJ2LS 543cbbdff8 RADIO MANAGER - WIP initial release 2024-01-12 15:51:23 +01:00
DJ2LS 9ad9e9b8c8 fixing stopping of explorer 2024-01-12 14:08:07 +01:00
Mashintime e23c2e5cdd Remove batch files from gui dir, opps 2024-01-11 17:35:41 -05:00
DJ2LS cbfc141c89 adjusted beacon 2024-01-11 14:56:45 +01:00
DJ2LS a4dd5a25cf improved explorer publising using sched 2024-01-11 14:39:53 +01:00
DJ2LS a1c92a0a03 start/stop explorer publising in correlation with modem 2024-01-11 14:22:00 +01:00
DJ2LS eff0383202 moved bat files to tools... 2024-01-11 14:16:10 +01:00
DJ2LS 80b21e6bef fixed callsign check if ssid_list empty 2024-01-11 14:03:00 +01:00
Mashintime 7159b0e86b Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-10 22:27:16 -05:00
Mashintime 22382a182b Fix TS 2024-01-10 22:27:07 -05:00
codefactor-io ad7bfb2e41
[CodeFactor] Apply fixes 2024-01-11 03:22:21 +00:00
Mashintime db64b34e09 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2024-01-10 22:21:48 -05:00
Mashintime 0be22c33dd Grid tweaks 2024-01-10 22:18:34 -05:00
Mashintime b5b1db99a1 Grid preset 2024-01-10 22:18:15 -05:00
codefactor-io da881d8bd2
[CodeFactor] Apply fixes 2024-01-11 02:21:54 +00:00
Mashintime 8e78111b67 Move api logging to debug level for easier filtering 2024-01-10 21:21:19 -05:00
Mashintime 7cc5841d83 New smaller call sign grid widget 2024-01-10 21:20:52 -05:00
Mashintime 3e54a57e24 New beacon grid widget 2024-01-10 21:20:35 -05:00
Mashintime 368afc0501 Grid tweaks 2024-01-10 21:20:20 -05:00
Mashintime 1a927f66c7 Fix stop grid widget. 2024-01-10 19:47:10 -05:00
Mashintime 8fa3fbea56 Update windows batch files 2024-01-10 19:34:47 -05:00
codefactor-io 20b9988bb9
[CodeFactor] Apply fixes to commit 1637b7b 2024-01-09 09:20:14 +00:00
DJ2LS 1637b7bd59 slightly adjusted connection state 2024-01-09 10:19:55 +01:00
codefactor-io 15d6ba4fca
[CodeFactor] Apply fixes to commit a246a11 2024-01-08 22:01:50 +00:00
Mashintime a246a11d53 GUI Build Fix? 2024-01-08 17:01:26 -05:00
dependabot[bot] bd406b0f67
Bump vite-plugin-electron from 0.15.5 to 0.28.0 in /gui
Bumps [vite-plugin-electron](https://github.com/electron-vite/vite-plugin-electron) from 0.15.5 to 0.28.0.
- [Release notes](https://github.com/electron-vite/vite-plugin-electron/releases)
- [Changelog](https://github.com/electron-vite/vite-plugin-electron/blob/main/CHANGELOG.md)
- [Commits](https://github.com/electron-vite/vite-plugin-electron/compare/v0.15.5...v0.28.0)

---
updated-dependencies:
- dependency-name: vite-plugin-electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 16:19:39 +00:00
dependabot[bot] 15b186f404
Bump typescript from 5.2.2 to 5.3.3 in /gui
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.2.2 to 5.3.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v5.2.2...v5.3.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 16:19:21 +00:00
dependabot[bot] 7c22d2f44b
Bump vue-chartjs from 5.2.0 to 5.3.0 in /gui
Bumps [vue-chartjs](https://github.com/apertureless/vue-chartjs) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/apertureless/vue-chartjs/releases)
- [Changelog](https://github.com/apertureless/vue-chartjs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apertureless/vue-chartjs/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: vue-chartjs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 16:18:54 +00:00
dependabot[bot] e3f158079c
Bump @vueuse/electron from 10.4.1 to 10.7.1 in /gui
Bumps [@vueuse/electron](https://github.com/vueuse/vueuse/tree/HEAD/packages/electron) from 10.4.1 to 10.7.1.
- [Release notes](https://github.com/vueuse/vueuse/releases)
- [Commits](https://github.com/vueuse/vueuse/commits/v10.7.1/packages/electron)

---
updated-dependencies:
- dependency-name: "@vueuse/electron"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 16:18:32 +00:00
Mashintime 20c9c49b9c Add 18m to frequency list 2024-01-07 00:27:43 -05:00
Mashintime a26d152d92 Fix TS Issues 2024-01-07 00:16:39 -05:00
Mashintime 1cfd8ab911 Fix TS error 2024-01-07 00:07:42 -05:00
Mashintime 9f41476a85 Fix TS error 2024-01-07 00:06:35 -05:00
Mashintime a3821a14ad Fix TS error 2024-01-07 00:05:01 -05:00
DJ2LS a94bad4a67 added bookworm codec2 2024-01-06 21:55:19 +01:00
DJ2LS 67211949ca Merge remote-tracking branch 'origin/develop' into develop 2024-01-06 15:43:22 +01:00
DJ2LS dfd76eb1cd fix tests 2024-01-06 15:43:16 +01:00
codefactor-io 1694472d60
[CodeFactor] Apply fixes 2024-01-06 08:31:31 +00:00
DJ2LS 19e0848211 Merge remote-tracking branch 'origin/develop' into develop 2024-01-06 09:31:11 +01:00
DJ2LS 7285145071 moved stop button to grid 2024-01-06 09:31:06 +01:00
codefactor-io c081261cfb
[CodeFactor] Apply fixes 2024-01-06 08:10:55 +00:00
DJ2LS 750d6676d3 Merge remote-tracking branch 'origin/develop' into develop 2024-01-06 09:10:25 +01:00
DJ2LS 072450ecc4 adjusted grdi 2024-01-06 09:10:20 +01:00
codefactor-io 366fad678d
[CodeFactor] Apply fixes 2024-01-05 23:01:08 +00:00
DJ2LS 678c4ae09e Merge remote-tracking branch 'origin/develop' into develop 2024-01-06 00:00:47 +01:00
DJ2LS c5f7238f5e cleanup 2024-01-06 00:00:41 +01:00
DJ2LS ad40c595b6
Merge pull request #594 from DJ2LS/dependabot/npm_and_yarn/gui/develop/mime-4.0.1
Bump mime from 4.0.0 to 4.0.1 in /gui
2024-01-05 23:48:29 +01:00
DJ2LS 366a871f86
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/mime-4.0.1 2024-01-05 23:48:21 +01:00
DJ2LS 2481bd4deb
Merge pull request #597 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-n-16.6.1
Bump eslint-plugin-n from 16.1.0 to 16.6.1 in /gui
2024-01-05 23:48:12 +01:00
DJ2LS 6877c61482
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/mime-4.0.1 2024-01-05 23:48:04 +01:00
DJ2LS 9be1685746
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-n-16.6.1 2024-01-05 23:47:56 +01:00
DJ2LS accde1fda3
Merge pull request #596 from DJ2LS/dependabot/npm_and_yarn/gui/develop/typescript-eslint/eslint-plugin-6.17.0
Bump @typescript-eslint/eslint-plugin from 6.7.4 to 6.17.0 in /gui
2024-01-05 23:47:14 +01:00
DJ2LS 5bc53c39f0
Merge pull request #595 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.15.5
Bump vite-plugin-electron from 0.15.4 to 0.15.5 in /gui
2024-01-05 23:47:09 +01:00
DJ2LS 387a72f6f3
Merge pull request #591 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-import-2.29.1
Bump eslint-plugin-import from 2.28.1 to 2.29.1 in /gui
2024-01-05 23:47:01 +01:00
DJ2LS f4b5be5b49
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-n-16.6.1 2024-01-05 23:46:43 +01:00
DJ2LS dba2e5a3b2
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/typescript-eslint/eslint-plugin-6.17.0 2024-01-05 23:46:39 +01:00
DJ2LS d20e9e7494
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.15.5 2024-01-05 23:46:34 +01:00
DJ2LS 57d69f88a1
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/mime-4.0.1 2024-01-05 23:46:29 +01:00
DJ2LS 3092fc5202
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-import-2.29.1 2024-01-05 23:46:24 +01:00
DJ2LS bdce742dcf Merge remote-tracking branch 'origin/develop' into develop 2024-01-05 23:36:48 +01:00
DJ2LS d11e1fe0e1 cleanup 2024-01-05 23:36:40 +01:00
DJ2LS cc92fcc214
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-n-16.6.1 2024-01-05 23:31:56 +01:00
DJ2LS b579cdb8c3
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/typescript-eslint/eslint-plugin-6.17.0 2024-01-05 23:31:52 +01:00
DJ2LS 210ec62ba3
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-plugin-electron-0.15.5 2024-01-05 23:31:48 +01:00
DJ2LS d673d20a01
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/mime-4.0.1 2024-01-05 23:31:44 +01:00
DJ2LS 06f8bc64ac
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-import-2.29.1 2024-01-05 23:31:40 +01:00
codefactor-io ee1cff9588
[CodeFactor] Apply fixes 2024-01-05 22:30:28 +00:00
DJ2LS bc286b36a2 Merge remote-tracking branch 'origin/develop' into develop 2024-01-05 23:30:08 +01:00
DJ2LS 3d9a9c90b2 fixing some typescript errors 2024-01-05 23:30:03 +01:00
codefactor-io 7ce160da69
[CodeFactor] Apply fixes 2024-01-05 22:20:45 +00:00
DJ2LS f56790dbc3 Merge remote-tracking branch 'origin/develop' into develop 2024-01-05 23:20:26 +01:00
DJ2LS 2ccf41f674 fixing some typescript errors 2024-01-05 23:20:21 +01:00
codefactor-io 013fa6ab2e
[CodeFactor] Apply fixes to commit 7ee4f6b 2024-01-05 20:27:33 +00:00
DJ2LS 7ee4f6b61f playing a bit with grid.. 2024-01-05 21:27:11 +01:00
codefactor-io 05e44d7983
[CodeFactor] Apply fixes 2024-01-05 15:52:38 +00:00
DJ2LS a2c53b5496 adapted message system to new server 2024-01-05 16:52:16 +01:00
DJ2LS 7f81de7ea2 ARQ WIP - fixed received data 2024-01-05 16:25:34 +01:00
DJ2LS 966821cef8 ARQ WIP - fixed mode not decoding 2024-01-05 16:25:14 +01:00
DJ2LS a1b2258bd2 adjusted modem blocksize for avoiding audio underruns 2024-01-05 15:58:42 +01:00
DJ2LS 5a42033a89 Merge remote-tracking branch 'origin/develop' into develop 2024-01-05 15:57:32 +01:00
DJ2LS e2eed4d428 adjusted modem blocksize for avoiding audio underruns 2024-01-05 15:57:27 +01:00
codefactor-io be592e49ae
[CodeFactor] Apply fixes 2024-01-05 14:52:59 +00:00
DJ2LS 01123e9998 adjusted events 2024-01-05 15:52:29 +01:00
DJ2LS 60c1b14116 adjusted demod error handling 2024-01-05 15:52:22 +01:00
codefactor-io 54ddb69083
[CodeFactor] Apply fixes to commit 02e88f7 2024-01-05 14:40:02 +00:00
DJ2LS 02e88f70fe fixed audio device selection 2024-01-05 15:39:37 +01:00
DJ2LS ef8b309fa6 better error handling for config 2024-01-05 15:10:46 +01:00
DJ2LS e22736ae02 fixed ping 2024-01-05 10:49:25 +01:00
DJ2LS ff777b212c adjusted events - still a WIP 2024-01-04 21:44:59 +01:00
codefactor-io 79130edbe9
[CodeFactor] Apply fixes 2024-01-04 20:14:16 +00:00
DJ2LS 27fc465a3a Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/eventHandler.js
2024-01-04 21:13:40 +01:00
DJ2LS dc832b8edd adjusted events - still a WIP 2024-01-04 21:13:32 +01:00
codefactor-io ca789cfcdc
[CodeFactor] Apply fixes 2024-01-04 19:59:10 +00:00
DJ2LS 996e2b4200 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/eventHandler.js
2024-01-04 20:58:34 +01:00
DJ2LS 6495336400 adjusted events - gui events are broken 2024-01-04 20:55:33 +01:00
codefactor-io 9dacf64601
[CodeFactor] Apply fixes to commit 85b81bb 2024-01-04 14:47:19 +00:00
DJ2LS 85b81bb0dd using event manager instead event queue for most parts 2024-01-04 15:46:58 +01:00
DJ2LS 8967d2ac91 ARQ WIP - session closing 2024-01-04 10:01:29 +01:00
dependabot[bot] ebf7e821fe
Bump eslint-plugin-n from 16.1.0 to 16.6.1 in /gui
Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.1.0 to 16.6.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.1.0...16.6.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-02 16:39:59 +00:00
dependabot[bot] c5aaeb61e1
Bump @typescript-eslint/eslint-plugin from 6.7.4 to 6.17.0 in /gui
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 6.7.4 to 6.17.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.17.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-02 16:39:25 +00:00
dependabot[bot] f4f4f33d91
Bump vite-plugin-electron from 0.15.4 to 0.15.5 in /gui
Bumps [vite-plugin-electron](https://github.com/electron-vite/vite-plugin-electron) from 0.15.4 to 0.15.5.
- [Release notes](https://github.com/electron-vite/vite-plugin-electron/releases)
- [Changelog](https://github.com/electron-vite/vite-plugin-electron/blob/main/CHANGELOG.md)
- [Commits](https://github.com/electron-vite/vite-plugin-electron/compare/v0.15.4...v0.15.5)

---
updated-dependencies:
- dependency-name: vite-plugin-electron
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 16:32:51 +00:00
dependabot[bot] 86d818fccd
Bump mime from 4.0.0 to 4.0.1 in /gui
Bumps [mime](https://github.com/broofa/mime) from 4.0.0 to 4.0.1.
- [Changelog](https://github.com/broofa/mime/blob/main/CHANGELOG.md)
- [Commits](https://github.com/broofa/mime/compare/v4.0.0...v4.0.1)

---
updated-dependencies:
- dependency-name: mime
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 16:32:41 +00:00
dependabot[bot] 4aeba647f2
Bump eslint-plugin-import from 2.28.1 to 2.29.1 in /gui
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.28.1 to 2.29.1.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.28.1...v2.29.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 16:31:52 +00:00
DJ2LS 7eb8242964 Merge remote-tracking branch 'origin/develop' into develop 2023-12-31 13:56:52 +01:00
DJ2LS 46f125ea17 Merge remote-tracking branch 'origin/main' into develop
# Conflicts:
#	.github/workflows/build_multiplatform.yml
2023-12-31 13:56:26 +01:00
DJ2LS 98765ab2a4
Merge pull request #578 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vite-5.0.10
Bump vite from 5.0.4 to 5.0.10 in /gui
2023-12-31 13:45:40 +01:00
DJ2LS 471255ede8
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-5.0.10 2023-12-31 13:45:28 +01:00
DJ2LS 566f74b88a
Merge pull request #580 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron/notarize-2.2.0
Bump @electron/notarize from 2.1.0 to 2.2.0 in /gui
2023-12-31 13:45:15 +01:00
DJ2LS b7633ff7d9
Merge pull request #579 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-builder-24.9.1
Bump electron-builder from 24.6.3 to 24.9.1 in /gui
2023-12-31 13:45:07 +01:00
DJ2LS 908f111128
Merge pull request #577 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-vue-9.19.2
Bump eslint-plugin-vue from 9.17.0 to 9.19.2 in /gui
2023-12-31 13:44:59 +01:00
DJ2LS e5c5e87449
Merge pull request #576 from DJ2LS/dependabot/npm_and_yarn/gui/develop/gridstack-10.0.1
Bump gridstack from 10.0.0 to 10.0.1 in /gui
2023-12-31 13:44:55 +01:00
DJ2LS 64fc26ae8e
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron/notarize-2.2.0 2023-12-31 13:42:52 +01:00
DJ2LS 3e85268f39
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-builder-24.9.1 2023-12-31 13:42:49 +01:00
DJ2LS 88bf8dbc7a
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/vite-5.0.10 2023-12-31 13:42:45 +01:00
DJ2LS f33b7f7bae
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-vue-9.19.2 2023-12-31 13:42:40 +01:00
DJ2LS 0801d0ac4d
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/gridstack-10.0.1 2023-12-31 13:42:35 +01:00
DJ2LS ec13228efb cemetry cleanup 2023-12-31 13:36:37 +01:00
DJ2LS 0272fa3ee3 updated modem tests 2023-12-31 13:27:17 +01:00
DJ2LS 2680d5d365 removed node14 support 2023-12-31 13:25:35 +01:00
DJ2LS bb1965481d updated build process 2023-12-31 13:23:48 +01:00
DJ2LS a016d07466 updated build process 2023-12-31 13:22:54 +01:00
DJ2LS e40ff05190 ARQ WIP - data event on IRS 2023-12-30 23:00:27 +01:00
DJ2LS 424f4738c5 ARQ WIP - channel busy detection 2023-12-30 22:50:15 +01:00
DJ2LS cec7403491 ARQ WIP - channel busy detection 2023-12-30 22:47:34 +01:00
DJ2LS 884927cacd ARQ WIP - channel busy detection 2023-12-30 22:44:18 +01:00
DJ2LS f1f9620c7a ARQ WIP - channel busy detection 2023-12-30 21:48:00 +01:00
DJ2LS 7549e34d45 ARQ WIP - channel busy detection 2023-12-30 21:47:16 +01:00
DJ2LS ca46949653 added precompiled libcodec2 for easier build process 2023-12-30 13:20:08 +01:00
DJ2LS 90ba20411a added precompiled libcodec2 for easier build process 2023-12-30 13:10:38 +01:00
DJ2LS 8a164a6b89 ARQ WIP - adjusted session closing 2023-12-29 19:29:30 +01:00
DJ2LS 06ec029ee7 ARQ WIP - adjusted session closing 2023-12-29 19:25:59 +01:00
DJ2LS ee0e3e4ad3 ARQ WIP - introduced tests for session closing 2023-12-28 22:47:17 +01:00
DJ2LS 5ac7e22b0b ARQ WIP - work on session closing 2023-12-28 22:27:49 +01:00
DJ2LS 9b0cbf7eea fixed wrong mode for cq/qrv 2023-12-28 21:49:31 +01:00
Pedro 13064cea1a Add transmission time to end-to-end ARQ tests 2023-12-26 20:52:06 +00:00
codefactor-io fae47151cb
[CodeFactor] Apply fixes to commit fbc319a 2023-12-25 13:07:13 +00:00
DJ2LS fbc319a09a ARQ WIP - adjusted events 2023-12-25 14:06:53 +01:00
DJ2LS ca7e7f6558 ARQ WIP - added more events 2023-12-25 13:26:51 +01:00
DJ2LS d91b7763e8 ARQ WIP - prepared data frame factory for compression flags 2023-12-25 12:27:48 +01:00
DJ2LS 43fdd83178 some modem related work 2023-12-25 10:31:00 +01:00
DJ2LS 98f1f3c5ca ARQ WIP - session aborting 2023-12-24 16:15:37 +01:00
DJ2LS 7cd1be6588 ARQ WIP - session aborting 2023-12-24 13:29:54 +01:00
DJ2LS 1d5a0970c6 ARQ WIP - session aborting 2023-12-24 13:27:24 +01:00
DJ2LS cc60391d26 ARQ WIP - session aborting 2023-12-24 13:20:51 +01:00
DJ2LS 2db37adf21 ARQ WIP - Timeout adjustments and added state to logging for debugging... 2023-12-24 09:58:20 +01:00
DJ2LS 137ac189fc possible fix of broken tci module 2023-12-21 19:48:30 +01:00
DJ2LS 23c60e80e8 possible fix of broken tci module 2023-12-21 19:42:35 +01:00
DJ2LS a2ee95e53a possible fix of broken tci module 2023-12-21 19:32:42 +01:00
DJ2LS 0b43cc8e48 possible fix of broken tci module 2023-12-21 17:50:56 +01:00
DJ2LS e91cf49f21 make beacon a service 2023-12-21 17:47:48 +01:00
DJ2LS bfc0c88154 Merge remote-tracking branch 'origin/develop' into develop 2023-12-21 15:45:00 +01:00
DJ2LS d30f071c99 ARQ WIP - session closing 2023-12-21 15:44:54 +01:00
codefactor-io 67483c6dc4
[CodeFactor] Apply fixes to commit 53955a8 2023-12-21 14:05:44 +00:00
DJ2LS 53955a8107 ARQ WIP - session closing 2023-12-21 15:05:22 +01:00
Pedro 2faf398e4b Small improvements 2023-12-21 02:19:42 +00:00
DJ2LS c81698a698 ARQ WIP - session closing 2023-12-20 19:30:38 +01:00
dependabot[bot] 60a899c2ba
Bump @electron/notarize from 2.1.0 to 2.2.0 in /gui
Bumps [@electron/notarize](https://github.com/electron/notarize) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/electron/notarize/releases)
- [Changelog](https://github.com/electron/notarize/blob/main/.releaserc.json)
- [Commits](https://github.com/electron/notarize/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: "@electron/notarize"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 16:08:59 +00:00
dependabot[bot] 38ce7a9843
Bump electron-builder from 24.6.3 to 24.9.1 in /gui
Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 24.6.3 to 24.9.1.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v24.9.1/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 16:08:44 +00:00
dependabot[bot] fa658ae52e
Bump vite from 5.0.4 to 5.0.10 in /gui
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.4 to 5.0.10.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.10/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 16:08:24 +00:00
dependabot[bot] c9436ddf19
Bump eslint-plugin-vue from 9.17.0 to 9.19.2 in /gui
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 9.17.0 to 9.19.2.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v9.17.0...v9.19.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 16:08:01 +00:00
dependabot[bot] 4e404c0de6
Bump gridstack from 10.0.0 to 10.0.1 in /gui
Bumps [gridstack](https://github.com/gridstack/gridstack.js) from 10.0.0 to 10.0.1.
- [Release notes](https://github.com/gridstack/gridstack.js/releases)
- [Changelog](https://github.com/gridstack/gridstack.js/blob/master/doc/CHANGES.md)
- [Commits](https://github.com/gridstack/gridstack.js/compare/v10.0.0...v10.0.1)

---
updated-dependencies:
- dependency-name: gridstack
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 16:07:45 +00:00
DJ2LS 7b712b9369 Merge remote-tracking branch 'origin/develop' into develop 2023-12-20 16:51:04 +01:00
DJ2LS 5b39540ab5 ARQ WIP - restored packet loss propablity 2023-12-20 16:50:59 +01:00
DJ2LS ac5e87bdcf
Merge pull request #573 from DJ2LS/dependabot/npm_and_yarn/gui/develop/bootstrap-icons-1.11.2
Bump bootstrap-icons from 1.10.5 to 1.11.2 in /gui
2023-12-20 16:47:46 +01:00
DJ2LS 085fd0c668
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/bootstrap-icons-1.11.2 2023-12-20 16:47:39 +01:00
dependabot[bot] 9392d8f2e1
Bump bootstrap-icons from 1.10.5 to 1.11.2 in /gui
Bumps [bootstrap-icons](https://github.com/twbs/icons) from 1.10.5 to 1.11.2.
- [Release notes](https://github.com/twbs/icons/releases)
- [Commits](https://github.com/twbs/icons/compare/v1.10.5...v1.11.2)

---
updated-dependencies:
- dependency-name: bootstrap-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-20 15:47:03 +00:00
DJ2LS bc4f7e7ef1
Merge pull request #571 from DJ2LS/dependabot/npm_and_yarn/gui/develop/emoji-picker-element-data-1.6.0
Bump emoji-picker-element-data from 1.4.0 to 1.6.0 in /gui
2023-12-20 16:46:56 +01:00
DJ2LS 3c3c6a9ae9
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/emoji-picker-element-data-1.6.0 2023-12-20 16:46:48 +01:00
DJ2LS 6ab29ad687
Merge pull request #572 from DJ2LS/dependabot/npm_and_yarn/gui/develop/uuid-9.0.1
Bump uuid from 9.0.0 to 9.0.1 in /gui
2023-12-20 16:46:36 +01:00
DJ2LS a9cdd75f95
Merge pull request #574 from DJ2LS/dependabot/npm_and_yarn/gui/develop/bootswatch-5.3.2
Bump bootswatch from 5.3.1 to 5.3.2 in /gui
2023-12-20 16:46:17 +01:00
DJ2LS 55fed0a954
Merge pull request #575 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-plugin-prettier-5.0.1
Bump eslint-plugin-prettier from 5.0.0 to 5.0.1 in /gui
2023-12-20 16:45:59 +01:00
DJ2LS d5e7f92333
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/eslint-plugin-prettier-5.0.1 2023-12-20 16:45:44 +01:00
DJ2LS 0fffe86f05 ARQ WIP - introduced flags 2023-12-20 16:43:08 +01:00
DJ2LS 674dd2e383 fix typo 2023-12-20 11:28:06 +01:00
codefactor-io 6dd1c396fc
[CodeFactor] Apply fixes 2023-12-20 02:59:33 +00:00
Mashintime d9f9c724ea Fix errors and reduce logging 2023-12-19 21:29:53 -05:00
Mashintime 00888c4b59 Fancy graphics on WF 2023-12-19 21:29:35 -05:00
Mashintime b73756541b Cleanup log messages 2023-12-19 21:23:22 -05:00
Mashintime 25aa026f08 Fix updater error 2023-12-19 21:23:01 -05:00
codefactor-io 6830d9dcb2
[CodeFactor] Apply fixes to commit 1f38a59 2023-12-20 01:19:47 +00:00
Mashintime 1f38a59bb8 Fix serial device ignore 2023-12-19 20:19:22 -05:00
Pedro 1027ea1b98 Fix hangs on ARQ sessions 2023-12-19 23:32:04 +01:00
Pedro 5d8554df08 Close ARQ test channels on end-to-end tests 2023-12-19 23:01:18 +01:00
dependabot[bot] 2143a2a5b9
Bump eslint-plugin-prettier from 5.0.0 to 5.0.1 in /gui
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-19 17:08:50 +00:00
dependabot[bot] ecfc3ef643
Bump bootswatch from 5.3.1 to 5.3.2 in /gui
Bumps [bootswatch](https://github.com/thomaspark/bootswatch) from 5.3.1 to 5.3.2.
- [Commits](https://github.com/thomaspark/bootswatch/commits)

---
updated-dependencies:
- dependency-name: bootswatch
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-19 17:08:31 +00:00
dependabot[bot] 534291671e
Bump uuid from 9.0.0 to 9.0.1 in /gui
Bumps [uuid](https://github.com/uuidjs/uuid) from 9.0.0 to 9.0.1.
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v9.0.0...v9.0.1)

---
updated-dependencies:
- dependency-name: uuid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-19 17:07:51 +00:00
dependabot[bot] 026c929fc0
Bump emoji-picker-element-data from 1.4.0 to 1.6.0 in /gui
Bumps [emoji-picker-element-data](https://github.com/nolanlawson/emoji-picker-element-data) from 1.4.0 to 1.6.0.
- [Commits](https://github.com/nolanlawson/emoji-picker-element-data/compare/v1.4.0...v1.6.0)

---
updated-dependencies:
- dependency-name: emoji-picker-element-data
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-19 17:07:29 +00:00
Pedro 073966122f Add ARQ session ABORTED state 2023-12-19 17:19:55 +01:00
Pedro 0a59c4f616 Eliminate IRS session hangs 2023-12-19 17:19:12 +01:00
Pedro a3b48d2bd9 Add client events to ARQ sessions 2023-12-19 15:35:07 +01:00
Pedro 726385361e Improve ARQ session states using Enum 2023-12-19 15:01:08 +01:00
DJ2LS 6a596f1087 helper functions for bitwise flag setting 2023-12-19 14:08:16 +01:00
codefactor-io 169990ed58
[CodeFactor] Apply fixes 2023-12-19 03:09:17 +00:00
Mashintime e3d9e7e24c Info screen adjustments 2023-12-18 22:08:02 -05:00
Mashintime 1db19df71b Fix grid bottom clipping 2023-12-18 21:22:34 -05:00
Mashintime fda687308b fix up some settings 2023-12-18 21:17:02 -05:00
Mashintime 8d704ff7f7 Remove local fft setting since config is set by modem 2023-12-18 21:16:01 -05:00
Mashintime d919696d24 Include api in audio device text 2023-12-18 20:55:21 -05:00
Mashintime 5558173181 Serial device settings improvement 2023-12-18 20:46:19 -05:00
Mashintime 377048b90a Rename function 2023-12-18 20:09:43 -05:00
DJ2LS 6f2c5ac5f3
Merge pull request #564 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-config-prettier-9.1.0 2023-12-18 21:16:44 +01:00
dependabot[bot] 91a0f90a1e
Bump eslint-config-prettier from 9.0.0 to 9.1.0 in /gui
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.0.0 to 9.1.0.
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.0.0...v9.1.0)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 19:53:38 +00:00
DJ2LS 9474220e45
Merge pull request #561 from DJ2LS/dependabot/npm_and_yarn/gui/develop/bootstrap-5.3.2 2023-12-18 20:51:39 +01:00
DJ2LS 64f09b1b41
Merge pull request #563 from DJ2LS/dependabot/npm_and_yarn/gui/develop/pinia-2.1.7 2023-12-18 20:51:28 +01:00
DJ2LS f87d19ca4a
Merge pull request #569 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vue-3.3.12 2023-12-18 20:51:14 +01:00
DJ2LS d60e555193
Merge pull request #570 from DJ2LS/dependabot/npm_and_yarn/gui/develop/eslint-config-standard-with-typescript-43.0.0 2023-12-18 20:51:04 +01:00
DJ2LS 28bf27b2f0
Merge pull request #567 from DJ2LS/dependabot/github_actions/actions/upload-artifact-4 2023-12-18 20:50:51 +01:00
DJ2LS b6f5528b29
Merge pull request #566 from DJ2LS/dependabot/github_actions/github/codeql-action-3 2023-12-18 20:50:39 +01:00
DJ2LS 88606131a7
Merge pull request #568 from DJ2LS/dependabot/github_actions/actions/download-artifact-4 2023-12-18 20:50:27 +01:00
dependabot[bot] 8815fff6a7
Bump eslint-config-standard-with-typescript in /gui
Bumps [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) from 40.0.0 to 43.0.0.
- [Release notes](https://github.com/standard/eslint-config-standard-with-typescript/releases)
- [Changelog](https://github.com/standard/eslint-config-standard-with-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/standard/eslint-config-standard-with-typescript/compare/v40.0.0...v43.0.0)

---
updated-dependencies:
- dependency-name: eslint-config-standard-with-typescript
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 16:42:27 +00:00
dependabot[bot] 0da364828b
Bump vue from 3.3.4 to 3.3.12 in /gui
Bumps [vue](https://github.com/vuejs/core) from 3.3.4 to 3.3.12.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.3.4...v3.3.12)

---
updated-dependencies:
- dependency-name: vue
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 16:35:26 +00:00
Pedro 8bc8cdffcc Change timeouts and retries in ARQ sessions. 2023-12-18 13:56:49 +01:00
codefactor-io 5786f1f1dd
[CodeFactor] Apply fixes to commit ff91eb8 2023-12-17 17:59:32 +00:00
Mashintime ff91eb888c Small adjustment to freq grid widget 2023-12-17 12:59:09 -05:00
Mashintime a849c83e1e Save/restore grid layout from config 2023-12-17 10:58:19 -05:00
DJ2LS b07e96302a WIP ARQ - changed ack/nack transmitting so its as before 2023-12-17 12:54:25 +01:00
DJ2LS 8a731e7604 cleanup of old tests 2023-12-17 12:35:21 +01:00
DJ2LS 8d70378fc9 WIP ARQ - reduced timeout a bit 2023-12-17 12:31:58 +01:00
DJ2LS 7b09894a4b WIP ARQ - added tests for large payload 2023-12-17 12:31:44 +01:00
DJ2LS 6f28f4ef32 WIP ARQ - set to fixed speed level for now 2023-12-17 12:16:51 +01:00
DJ2LS 5789c7a65f WIP ARQ - small logging fix which caused an error 2023-12-17 12:14:24 +01:00
Pedro 9b6647c29e Move decode mode setting to demodulator. Fix ARQ tests. 2023-12-17 01:43:23 +01:00
DJ2LS 02deab90b7 Merge remote-tracking branch 'origin/develop' into develop 2023-12-16 18:04:10 +01:00
DJ2LS 6042263523 WIP ARQ - fixed wrong byte length calculation 2023-12-16 18:04:04 +01:00
codefactor-io ec99882497
[CodeFactor] Apply fixes 2023-12-16 16:57:29 +00:00
Mashintime 4dfb36f572 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-16 11:57:00 -05:00
Mashintime de4eb9355b Updated mycall & freq widget 2023-12-16 11:56:55 -05:00
DJ2LS b2a83568e1 WIP ARQ - adjustments to timeout 2023-12-16 17:52:38 +01:00
DJ2LS 6b7df9d0a6 WIP ARQ - attempt fixing wrong crc 2023-12-16 17:42:51 +01:00
DJ2LS 8b41139b48 Merge remote-tracking branch 'origin/develop' into develop 2023-12-16 17:21:13 +01:00
DJ2LS e26d512951 WIP ARQ - fixed wrong payload 2023-12-16 17:21:07 +01:00
codefactor-io 19eb6ee6e9
[CodeFactor] Apply fixes 2023-12-16 16:12:03 +00:00
Mashintime 436420f854 Grid updates 2023-12-16 11:11:16 -05:00
Mashintime 85689a4d37 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-16 09:14:54 -05:00
DJ2LS 32317b373f WIP ARQ - speed level fix 2023-12-16 14:54:34 +01:00
DJ2LS 2f2f9d956a WIP ARQ - speed level fix 2023-12-16 14:51:50 +01:00
DJ2LS 31c833135e WIP ARQ - speed level fix 2023-12-16 14:44:06 +01:00
DJ2LS 0457297200 WIP ARQ - speed level fix 2023-12-16 14:40:02 +01:00
DJ2LS 2de4d32cbb WIP ARQ - speed level fix 2023-12-16 14:38:58 +01:00
DJ2LS 0d3ec7aa4b WIP ARQ - enable audio decoding of signalling 2023-12-16 14:36:14 +01:00
DJ2LS a7b02a400f WIP ARQ - audio fix 2023-12-16 14:31:57 +01:00
DJ2LS 00e46c02ef WIP ARQ - modem stuff ... a bit weird 2023-12-16 14:29:47 +01:00
DJ2LS 6f7166201f WIP ARQ - fixed tests 2023-12-16 12:54:16 +01:00
DJ2LS 6d80d15859 WIP ARQ - attempt fixing some tests 2023-12-16 11:33:10 +01:00
DJ2LS 681bc5703f WIP ARQ - moved calculate_fft to audio 2023-12-16 11:05:53 +01:00
DJ2LS 7394e8b31b WIP ARQ - removed fsk 2023-12-16 10:35:06 +01:00
DJ2LS b3519eef56 WIP ARQ - removed sig0/1 2023-12-16 10:32:07 +01:00
DJ2LS ad6f913aab WIP ARQ - cleanup and fixes 2023-12-16 10:28:30 +01:00
Mashintime ada8072ee9 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-15 22:14:49 -05:00
Pedro 30996c03b6 Eliminate modem TX queues and change transmit() to a blocking call 2023-12-16 00:51:57 +01:00
Mashintime 4036eb8e9b Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-15 15:46:53 -05:00
Pedro 1640f6c66e Eliminate the modem modoutqueue 2023-12-15 18:25:01 +01:00
dependabot[bot] 2f197225a9
Bump actions/download-artifact from 3 to 4
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 16:29:48 +00:00
dependabot[bot] d600d999d2
Bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 16:29:44 +00:00
DJ2LS 8b7f7c47aa WIP ARQ - more fixes 2023-12-15 17:01:03 +01:00
DJ2LS 4d59311f66 WIP ARQ - more fixes 2023-12-15 16:40:05 +01:00
DJ2LS a970f96165 WIP ARQ - more fixes 2023-12-15 16:22:38 +01:00
DJ2LS b5268ec4f0 WIP ARQ - more fixes 2023-12-15 14:58:53 +01:00
DJ2LS 22e98a816f WIP ARQ - more fixes 2023-12-15 14:56:35 +01:00
DJ2LS c4dbe0caef WIP ARQ - cleanup and modem fix 2023-12-15 14:41:11 +01:00
DJ2LS 16f37677d5 WIP ARQ - speed level 2023-12-14 22:53:32 +01:00
Mashintime b03a882cfa Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-14 15:44:00 -05:00
Pedro b42c40dd78 ARQ WIP 2023-12-14 17:57:58 +01:00
Pedro a3d05f3521 Improve ARQ setting of failed state 2023-12-14 17:41:57 +01:00
Pedro fd33ccbe1e Correct end of transfer on ISS side 2023-12-14 17:33:43 +01:00
Pedro 0014462c63 ARQ refactor with explicit states 2023-12-14 17:29:04 +01:00
DJ2LS 3bb9dd3991 WIP ARQ - WIP data ack nack 2023-12-14 09:19:46 +01:00
DJ2LS 62ea8fa9b2 WIP ARQ - changed frame types, introduced data ack nack 2023-12-14 09:07:46 +01:00
Mashintime 02c9710b92 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-13 21:14:39 -05:00
DJ2LS cefd1b3efc WIP ARQ - cleanup 2023-12-13 23:53:39 +01:00
DJ2LS 4b87d95670 WIP ARQ - decrease speed level after two attempts --> WIP! 2023-12-13 23:37:40 +01:00
DJ2LS 864589b647 WIP ARQ - moved old data to cementry 2023-12-13 23:37:00 +01:00
DJ2LS e357c6a1dc WIP ARQ - final crc check 2023-12-13 23:07:06 +01:00
DJ2LS 463c8c3829 WIP ARQ - introduced additional info state 2023-12-13 22:25:22 +01:00
Mashintime 55d8b554aa Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-13 16:00:03 -05:00
Pedro 9bbdaa055a ARQ progress 2023-12-13 18:27:55 +01:00
dependabot[bot] 672ec7a4a1
Bump github/codeql-action from 2 to 3
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-13 16:23:45 +00:00
Pedro c98b37db96 ARQ progress 2023-12-13 16:56:11 +01:00
Pedro bef2e80acc Successful ARQ v2 transfer for the 1st time 2023-12-13 15:35:16 +01:00
Pedro ba846013e8 ARQ progress 2023-12-13 14:59:22 +01:00
Pedro ed469ee035 ARQ WIP 2023-12-13 14:33:09 +01:00
Pedro 48260f2c09 ARQ WIP 2023-12-13 11:51:54 +01:00
Pedro 4eec0b969a Change overflow exception 2023-12-13 10:05:14 +01:00
Pedro 3060940808 Add test for burst data frame overflow 2023-12-13 10:00:42 +01:00
Pedro d17878b123 ARQ WIP - Burst Frame tests ok 2023-12-13 09:56:58 +01:00
Pedro 227bc40a00 ARQ WIP - Fix data factory tests! 2023-12-13 09:24:43 +01:00
Mashintime ec06389507 Grid: PTT 2023-12-12 17:20:48 -05:00
Pedro 4c3b3d79af ARQ WIP 2023-12-12 22:33:17 +01:00
Mashintime 94f23d47b7 Broadcasts grid items 2023-12-12 16:20:02 -05:00
Pedro e839453806 ARQ WIP 2023-12-12 22:05:32 +01:00
Mashintime a0759139ec Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-12 15:45:55 -05:00
Pedro 8f1894da50 ARQ WIP 2023-12-12 21:33:57 +01:00
Pedro 18534a87aa ARQ WIP 2023-12-12 21:20:03 +01:00
Pedro d35860cc54 ARQ WIP 2023-12-12 20:46:22 +01:00
Pedro 2189f99918 WIP ARQ 2023-12-12 20:22:34 +01:00
Pedro 0368c57d87 Improve ARQ specs 2023-12-12 16:13:35 +01:00
Pedro ac790c118c Improve ARQ docs 2023-12-12 15:41:01 +01:00
Pedro 214d9b1efc Add ARQ documentation 2023-12-12 15:37:30 +01:00
DJ2LS 69c5050060 WIP ARQ 2023-12-12 09:46:22 +01:00
DJ2LS a30d42f11b WIP ARQ 2023-12-12 09:43:03 +01:00
DJ2LS 2e02186ea6 changed freq_offset to frequency_offset for equal naming 2023-12-12 09:41:08 +01:00
Mashintime 90a5dba302 Proof of concept no longer needed 2023-12-11 15:52:27 -05:00
Mashintime 7823321559 Adjust grid close button 2023-12-11 15:51:16 -05:00
Pedro cefaea2369 WIP ARQ 2023-12-11 19:02:50 +01:00
dependabot[bot] 00585db9b8
Bump pinia from 2.1.6 to 2.1.7 in /gui
Bumps [pinia](https://github.com/vuejs/pinia) from 2.1.6 to 2.1.7.
- [Release notes](https://github.com/vuejs/pinia/releases)
- [Commits](https://github.com/vuejs/pinia/compare/pinia@2.1.6...pinia@2.1.7)

---
updated-dependencies:
- dependency-name: pinia
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 16:40:32 +00:00
dependabot[bot] aefca6e175
Bump bootstrap from 5.3.1 to 5.3.2 in /gui
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.3.1...v5.3.2)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 16:39:51 +00:00
codefactor-io ee41286ff7
[CodeFactor] Apply fixes 2023-12-10 20:58:12 +00:00
Mashintime 6e16a1bc07 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-10 15:56:41 -05:00
Mashintime ae1dc1ccb8 Rework waterfall data and theme support 2023-12-10 15:53:07 -05:00
Mashintime e1d04fe3ee Rework waterfall theme 2023-12-10 15:52:40 -05:00
Mashintime 7ed5e617f1 Load default grid if not loaded from config 2023-12-10 15:51:38 -05:00
Mashintime 0ca35be688 Save GUI local settings to config/config.json 2023-12-10 15:51:19 -05:00
codefactor-io 2abe3da834
[CodeFactor] Apply fixes to commit 4ea01f3 2023-12-10 15:50:07 +00:00
Mashintime 4ea01f39b4 Stats fixes 2023-12-10 10:49:42 -05:00
DJ2LS edfe2f3064 WIP adding arq data frame 2023-12-10 14:58:49 +01:00
DJ2LS 5b89ab5e53 WIP adding arq data frame 2023-12-10 14:38:19 +01:00
DJ2LS 6980aa4e2f Merge remote-tracking branch 'origin/develop' into develop 2023-12-10 09:59:09 +01:00
DJ2LS 17504e194c WIP adding arq data frame 2023-12-10 09:59:02 +01:00
codefactor-io ac9c46680d
[CodeFactor] Apply fixes 2023-12-10 08:01:20 +00:00
Mashintime 4f98929446 More grid work 2023-12-10 03:00:39 -05:00
Mashintime 63cdd7759e Validate callsign in ping api 2023-12-10 02:05:48 -05:00
Mashintime 474d1d0bac Fix ping in grid broadcasts 2023-12-10 02:05:12 -05:00
Mashintime bb5ee9a374 Typo 2023-12-09 11:42:49 -05:00
codefactor-io 00991eb93c
[CodeFactor] Apply fixes 2023-12-09 16:37:39 +00:00
Mashintime 41e13770b8 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-09 11:36:04 -05:00
Mashintime d90fd7c243 Fix ts error 2023-12-09 11:34:46 -05:00
Mashintime 46eef7a3b5 Add ping toast 2023-12-09 11:34:25 -05:00
DJ2LS e3bca5bdc7 WIP adding arq data frame 2023-12-09 14:16:53 +01:00
DJ2LS 73f6bba630 WIP adding arq data frame 2023-12-09 13:31:19 +01:00
DJ2LS f28e47f441 WIP adding arq data frame 2023-12-09 13:28:32 +01:00
DJ2LS d8df718645 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/package.json
2023-12-09 12:31:20 +01:00
DJ2LS 9b820f6562 WIP adding arq data frame 2023-12-09 12:31:08 +01:00
codefactor-io 30710fbb7e
[CodeFactor] Apply fixes to commit bdc21d1 2023-12-09 10:22:14 +00:00
Mashintime bdc21d1c53 Dynamic widget picker 2023-12-09 05:21:47 -05:00
Mashintime 305aaf1626 Move grid items to subfolder 2023-12-09 01:18:16 -05:00
codefactor-io 929f470988
[CodeFactor] Apply fixes to commit b4170f5 2023-12-09 06:08:53 +00:00
Mashintime b4170f5329 Grid changes 2023-12-09 01:08:15 -05:00
DJ2LS c80917187e
Merge pull request #559 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-updater-6.1.7 2023-12-08 23:11:09 +01:00
DJ2LS 2b722c184a
Merge pull request #558 from DJ2LS/dependabot/npm_and_yarn/gui/develop/chart.js-4.4.1 2023-12-08 23:10:59 +01:00
dependabot[bot] cfb26f88e4
Bump electron-updater from 6.1.6 to 6.1.7 in /gui
Bumps [electron-updater](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-updater) from 6.1.6 to 6.1.7.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-updater@6.1.7/packages/electron-updater)

---
updated-dependencies:
- dependency-name: electron-updater
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-08 22:10:53 +00:00
DJ2LS 740c319a36
Merge pull request #557 from DJ2LS/dependabot/npm_and_yarn/gui/develop/vitest-1.0.2 2023-12-08 23:10:47 +01:00
DJ2LS 031749218c
Merge pull request #556 from DJ2LS/dependabot/github_actions/actions/setup-python-5 2023-12-08 23:10:28 +01:00
DJ2LS 6380fb7110
Merge pull request #555 from DJ2LS/dependabot/npm_and_yarn/gui/develop/electron-28.0.0 2023-12-08 23:10:10 +01:00
DJ2LS acf47f8f96
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/electron-28.0.0 2023-12-08 23:10:03 +01:00
DJ2LS 9612106717
Merge pull request #560 from DJ2LS/dependabot/npm_and_yarn/gui/develop/emoji-picker-element-1.20.1 2023-12-08 23:09:29 +01:00
DJ2LS bd4e9bc233
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/emoji-picker-element-1.20.1 2023-12-08 23:09:16 +01:00
codefactor-io ed7dc955c8
[CodeFactor] Apply fixes to commit ae6d69a 2023-12-08 21:20:41 +00:00
DJ2LS ae6d69ac2e adjusted grid item selection 2023-12-08 22:20:19 +01:00
dependabot[bot] 0527cc65f5
Bump electron from 27.1.3 to 28.0.0 in /gui
Bumps [electron](https://github.com/electron/electron) from 27.1.3 to 28.0.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v27.1.3...v28.0.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-08 20:55:12 +00:00
Mashintime b4bbab67fc bump plugin-vue version 2023-12-08 15:52:37 -05:00
dependabot[bot] f60725ce98
Bump emoji-picker-element from 1.18.3 to 1.20.1 in /gui
Bumps [emoji-picker-element](https://github.com/nolanlawson/emoji-picker-element) from 1.18.3 to 1.20.1.
- [Changelog](https://github.com/nolanlawson/emoji-picker-element/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nolanlawson/emoji-picker-element/compare/v1.18.3...v1.20.1)

---
updated-dependencies:
- dependency-name: emoji-picker-element
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-08 16:56:22 +00:00
dependabot[bot] 49e25d6cc3
Bump chart.js from 4.3.3 to 4.4.1 in /gui
Bumps [chart.js](https://github.com/chartjs/Chart.js) from 4.3.3 to 4.4.1.
- [Release notes](https://github.com/chartjs/Chart.js/releases)
- [Commits](https://github.com/chartjs/Chart.js/compare/v4.3.3...v4.4.1)

---
updated-dependencies:
- dependency-name: chart.js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-08 16:56:03 +00:00
dependabot[bot] 2206ed2e44
Bump vitest from 0.34.6 to 1.0.2 in /gui
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 0.34.6 to 1.0.2.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v1.0.2/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-08 16:51:53 +00:00
DJ2LS a8a6a183c6 updated package.json 2023-12-08 17:49:44 +01:00
DJ2LS 5842519e2a WIP adding arq data frame 2023-12-08 11:42:38 +01:00
DJ2LS 71ad71d0bf renamed deprecated files so its clear which are new and old 2023-12-08 11:08:02 +01:00
DJ2LS 14a6dab29e better naming for ARQ session / connection 2023-12-08 10:25:26 +01:00
dependabot[bot] 1b47882a1d
Bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 16:13:22 +00:00
Pedro a290c854d5 ARQ WIP 2023-12-06 11:59:35 +01:00
Pedro bb0fc79b4f Improve ARQ logging 2023-12-06 11:51:10 +01:00
Pedro c689b93ee1 Improve ARQ tests and log messages 2023-12-06 11:47:47 +01:00
Pedro 9074e8e5eb Set frame loss probability to 50% 2023-12-06 11:34:31 +01:00
Pedro 0b35d393f5 Add frame loss probability to arq tests 2023-12-06 11:33:25 +01:00
codefactor-io a55e9ba9f8
[CodeFactor] Apply fixes 2023-12-06 03:11:59 +00:00
Mashintime 7a9fa80a1f Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-05 22:10:10 -05:00
Mashintime 26d815067a Activities grid widget 2023-12-05 22:10:04 -05:00
Mashintime c2d09902d7 Grid widget tweaks 2023-12-05 22:09:52 -05:00
Mashintime d752314a67 Removed border 2023-12-05 22:07:56 -05:00
Pedro 462e4162c4 Progress on ARQ TDD 2023-12-05 19:12:21 +01:00
Pedro bf89828c75 ARQ WIP 2023-12-05 19:01:48 +01:00
Pedro 1fab9f8e53 ARQ WIP 2023-12-05 18:50:39 +01:00
Pedro 000702740f WIP ARQ 2023-12-05 15:40:19 +01:00
codefactor-io ad11332d16
[CodeFactor] Apply fixes 2023-12-05 03:27:35 +00:00
Mashintime 54cf0bef3f Local HSL state 2023-12-04 22:25:24 -05:00
Mashintime 83fc9c50fe Grid improvements 2023-12-04 22:24:58 -05:00
Mashintime ed1070be79 Ping ack and gen HSL 2023-12-04 22:24:30 -05:00
Mashintime e7586ac967 Update to use hsl 2023-12-04 22:23:28 -05:00
Mashintime 8c69b74fd8 Activity grid widget 2023-12-04 22:23:06 -05:00
Pedro 5e90c2e823 Correct name of TestProtocols class 2023-12-04 17:30:07 +01:00
Pedro 4c08d5d04e Change the order of tests 2023-12-04 16:03:22 +01:00
Pedro 22912c9c1e Add protocol test for CQ - QRV 2023-12-04 16:01:18 +01:00
Pedro a2edf4967a Improve protocol tests 2023-12-04 15:52:50 +01:00
Pedro 5a58ef97bb Add first protocol test for ping - ping ack 2023-12-04 15:04:14 +01:00
Pedro 6877e950ad Just use structlog on Command classes 2023-12-04 11:54:03 +01:00
Pedro 1917ec077d Remove some unused global queues 2023-12-04 11:36:50 +01:00
Pedro 0aa3b7c249 Use the specified params on making a modem queue item 2023-12-04 11:34:31 +01:00
Pedro 3fd2c402af Get rid of the DATA_QUEUE_TRANSMIT (there is still the MODEM_TRANSMIT_QUEUE) 2023-12-04 11:05:45 +01:00
codefactor-io 645b159d73
[CodeFactor] Apply fixes 2023-12-04 03:49:02 +00:00
Mashintime ce12679f2d Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-12-03 22:48:09 -05:00
Mashintime e6782b6aac Working spectrum in grid 2023-12-03 22:43:48 -05:00
Mashintime db579504f0 Small responsive tweak 2023-12-03 18:59:52 -05:00
Mashintime c06bb4abfa Some local settings work 2023-12-03 18:54:44 -05:00
Mashintime e569e352ad Waterfall theme 2023-12-03 18:41:42 -05:00
Mashintime 5c6f486efd More grid work 2023-12-03 18:39:06 -05:00
Mashintime fbc4e807cf Explorer tweaks 2023-12-03 13:16:09 -05:00
Mashintime 1881079f4a Grid updates 2023-12-03 13:02:40 -05:00
Mashintime 7a5a2c1f63 Stats grid widget - wip 2023-12-03 13:02:07 -05:00
Mashintime c1852a4d5f Grid HSL updates/testing 2023-12-03 13:01:46 -05:00
Mashintime aafa3cd5ba Dbfs grid widget 2023-12-03 13:00:44 -05:00
Mashintime 90730a01df Audio grid widget 2023-12-03 13:00:18 -05:00
Mashintime 04a9f72de1 S-Meter grid widget 2023-12-03 13:00:04 -05:00
Mashintime a6630234d8 Activities in GUI 2023-12-03 11:49:56 -05:00
Pedro 1e787d8c82 Fix the CQFrameHandler base class. 2023-12-03 15:30:30 +01:00
Pedro efb1a8e61b Move reset_data_sync() to Demodulator 2023-12-03 15:05:44 +01:00
DJ2LS b29c539d5f saving thoughts regarding to processing arq commands... 2023-12-03 14:11:43 +01:00
DJ2LS e7f8dc73e0 fixed typo 2023-12-03 10:42:54 +01:00
DJ2LS dc17d4c034 fixed typo 2023-12-03 10:41:20 +01:00
DJ2LS f01cc38e64 moved frame activity to frame handler 2023-12-03 10:40:31 +01:00
DJ2LS 7a88875309 changed super class 2023-12-01 19:54:46 +01:00
DJ2LS 6829a9df85 ensure callsign in correct format 2023-12-01 19:54:07 +01:00
DJ2LS 97bc309bb6 fixed activities list, disabled heard stations again 2023-12-01 17:02:42 +01:00
DJ2LS 75dfa4d28a adjusted activities for rx'ed frames 2023-12-01 16:57:59 +01:00
DJ2LS 72658837c9 added activities list 2023-12-01 16:39:52 +01:00
DJ2LS 0290c1a28c removed python 3.7 support 2023-12-01 10:21:57 +01:00
DJ2LS 2f4bb6378b Merge remote-tracking branch 'origin/develop' into develop 2023-12-01 10:18:27 +01:00
DJ2LS fe70516788 removed python 3.7 support 2023-12-01 10:18:12 +01:00
DJ2LS 038e6acc4b
Merge pull request #550 from DJ2LS/dependabot/npm_and_yarn/gui/develop/mime-4.0.0
Bump mime from 3.0.0 to 4.0.0 in /gui
2023-12-01 10:11:12 +01:00
DJ2LS 8eb81b8a36
Merge branch 'develop' into dependabot/npm_and_yarn/gui/develop/mime-4.0.0 2023-12-01 10:11:04 +01:00
DJ2LS 53355ef4a0 remove ctest 2023-12-01 10:09:19 +01:00
dependabot[bot] 539e838b2a
Bump mime from 3.0.0 to 4.0.0 in /gui
Bumps [mime](https://github.com/broofa/mime) from 3.0.0 to 4.0.0.
- [Changelog](https://github.com/broofa/mime/blob/main/CHANGELOG.md)
- [Commits](https://github.com/broofa/mime/compare/v3.0.0...v4.0.0)

---
updated-dependencies:
- dependency-name: mime
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-01 09:07:30 +00:00
DJ2LS d91d9cc90d
Merge branch 'main' into develop 2023-12-01 10:05:30 +01:00
DJ2LS 0599ba1593
Update dependabot.yml 2023-12-01 10:03:37 +01:00
codefactor-io 01801766b6
[CodeFactor] Apply fixes 2023-12-01 09:01:58 +00:00
DJ2LS d126117bd3 Merge remote-tracking branch 'origin/develop' into develop 2023-12-01 10:01:38 +01:00
DJ2LS ea409bd888 first attempt making build steps easier 2023-12-01 10:01:31 +01:00
codefactor-io 7619c5de8c
[CodeFactor] Apply fixes 2023-12-01 03:09:25 +00:00
Mashintime 2578b2eaf0 More gui event handling 2023-11-30 22:08:42 -05:00
Mashintime b960dea9c2 GUI scatter 2023-11-30 21:12:04 -05:00
Mashintime b7b51ad469 PTT updates 2023-11-30 16:50:10 -05:00
Mashintime ab43314619 Initial gui event api handler 2023-11-30 16:49:43 -05:00
DJ2LS 02062e3e18 some more frame porting 2023-11-30 20:35:07 +01:00
Pedro ca1257bab7 Remove comments about old data_queue_received format 2023-11-30 10:55:51 +01:00
Pedro 4d0bef497b Deliver frequency offset info to frame handler 2023-11-30 10:54:37 +01:00
Pedro 16786d4a7e Switch to new frame dispatcher process data with new class based frame handlers. 2023-11-30 09:24:36 +01:00
Pedro 32e1aa7edb Improve frame handler event broadcast 2023-11-30 08:44:18 +01:00
Pedro 63273b7f02 Add PingFrameHandler 2023-11-30 00:15:16 +01:00
Pedro f4b00ce68a Add inheritance based frame handling on rx 2023-11-29 22:53:50 +01:00
Pedro b901b8efaa Handle exception on frame deconstruction 2023-11-29 21:30:09 +01:00
Pedro bf4855aa63 Fix ping receive handling 2023-11-29 19:09:01 +01:00
Pedro 06e79e627e Fix beacon rx handling 2023-11-29 18:51:30 +01:00
Pedro 6020b69527 Fix received CQ handling. Ping receive still broken. 2023-11-29 18:25:32 +01:00
Pedro 2dbf6883a0 Add previously forgotten Demodulator 2023-11-29 18:24:42 +01:00
Pedro b5b5170a67 Add CQ tests for DataFrameFactory 2023-11-29 17:42:44 +01:00
Pedro c27c6db199 Fix DataFrameFactory tests 2023-11-29 17:39:35 +01:00
Pedro d5a1a74f1a Separate demodulation code 2023-11-29 17:35:23 +01:00
Mashintime d24a67d813 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-28 17:47:02 -05:00
Mashintime f044b64ace Audio dbfs support 2023-11-28 17:46:55 -05:00
codefactor-io c78d30f9ef
[CodeFactor] Apply fixes to commit bf31ca5 2023-11-28 22:29:27 +00:00
Mashintime bf31ca5891 Busy slot states 2023-11-28 17:29:01 -05:00
DJ2LS 99e6c86220 implemented some arq commands 2023-11-28 20:43:41 +01:00
DJ2LS 27e05d2d8e added more arq frames 2023-11-28 20:34:33 +01:00
DJ2LS 618bf3ae4b some code adjustments 2023-11-28 20:00:39 +01:00
DJ2LS 3e3d96a4bb
Merge branch 'main' into develop 2023-11-28 17:51:20 +01:00
DJ2LS 85a13bd77e
Merge pull request #542 from DJ2LS/dependabot/npm_and_yarn/gui/eslint-config-standard-with-typescript-40.0.0 2023-11-28 17:51:04 +01:00
DJ2LS 7d7dbf1ba0
Merge pull request #545 from DJ2LS/dependabot/npm_and_yarn/gui/vite-5.0.2 2023-11-28 17:50:40 +01:00
Pedro f5415ce7cd Improve DataFrameFactory and tests 2023-11-27 23:08:00 +01:00
Pedro e9c07731b7 Add DataFrameFactory tests 2023-11-27 19:22:16 +01:00
codefactor-io 705b8fa292
[CodeFactor] Apply fixes 2023-11-27 03:00:29 +00:00
Mashintime e57856d328 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-26 21:59:34 -05:00
Mashintime ead5169dfa Waterfall fixes 2023-11-26 21:37:28 -05:00
Mashintime c22122cdb4 Grid footer tests 2023-11-26 21:33:49 -05:00
Mashintime 00afc9d611 Request modem status after connecting to ws's 2023-11-26 20:44:58 -05:00
Pedro 5202a93676 Delete old ping tx code 2023-11-26 23:00:55 +01:00
DJ2LS e398eaa413 Merge remote-tracking branch 'origin/develop' into develop 2023-11-26 22:36:40 +01:00
DJ2LS 018add39d2 trying to fix a error without testing it... 2023-11-26 22:36:35 +01:00
Pedro 8f2f464846 Move Beacon from data_handler_broadcasts to modem 2023-11-26 22:24:09 +01:00
Pedro ff0e4c25a2 Improve beacon 2023-11-26 21:51:43 +01:00
codefactor-io 7c5cdc1290
[CodeFactor] Apply fixes 2023-11-26 19:14:36 +00:00
Mashintime 47e5cf6958 GUI Home adjustments and other fixes 2023-11-26 14:14:06 -05:00
Mashintime 5c582173f5 Audio component fixes 2023-11-26 14:11:50 -05:00
Mashintime c97f3c158d Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-26 13:54:46 -05:00
Mashintime eb0cf4a4a1 Radio mode handling in state data 2023-11-26 13:54:28 -05:00
codefactor-io 02efa9bc21
[CodeFactor] Apply fixes to commit 2e8fa11 2023-11-26 18:52:04 +00:00
Mashintime 2e8fa11b37 Testing new heard station list grid items 2023-11-26 13:32:42 -05:00
Mashintime d2eb4ffd09 Missed a variable 2023-11-26 12:24:19 -05:00
Mashintime 12e5d2ff7a Fix dynamic control of FFT data stream 2023-11-26 12:22:22 -05:00
Mashintime 16af549274 Typo 2023-11-26 12:10:22 -05:00
Pedro 1db9d1fca6 Refactor beacon 2023-11-26 15:45:41 +01:00
Pedro 0f10d73a61 Refactor beacon 2023-11-26 15:23:20 +01:00
Pedro 851cef2b9b Small code improvements 2023-11-26 14:51:58 +01:00
Pedro c164faae21 Fix "send test frame" 2023-11-26 14:25:14 +01:00
Pedro 766342a866 Fix Command log message 2023-11-26 13:11:45 +01:00
Pedro e3e486b5fc Fix PingCommand 2023-11-26 12:53:28 +01:00
Pedro e0bd7c5e09 Fix several errors to get server to start again. 2023-11-26 12:45:51 +01:00
DJ2LS 9872b52741 first attempt using frame deconstructor 2023-11-26 11:41:37 +01:00
DJ2LS 8883616e67 first attempt using frame templates 2023-11-26 10:33:06 +01:00
DJ2LS b5ee39b2d2 first attempt using frame templates 2023-11-26 10:25:13 +01:00
codefactor-io 6dc0a739c4
[CodeFactor] Apply fixes 2023-11-26 06:07:52 +00:00
Mashintime a5c9014a15 GUI startup fixes if modem is not running 2023-11-26 01:07:04 -05:00
Mashintime 750d01bc92 Further refinements to grid test 2023-11-26 01:02:16 -05:00
Mashintime 596fe53bb8 adjustment to close icon 2023-11-25 22:33:30 -05:00
Pedro 8670646ca7 Implement more commands and remove old code 2023-11-26 00:11:39 +01:00
Pedro dea132203b Make modem transmit queue item format more explicit 2023-11-25 23:39:35 +01:00
Pedro cf50e69e3a Implement fec and fec wake up frames 2023-11-25 23:22:31 +01:00
Pedro f96c566223 Move codec2 functions to codec2 interface 2023-11-25 23:14:49 +01:00
Pedro bfaa284837 WIP 2023-11-25 19:05:42 +01:00
Pedro e8a2a5d12a WIP 2023-11-25 18:21:41 +01:00
codefactor-io 2d6af962b5
[CodeFactor] Apply fixes to commit 006dec9 2023-11-25 06:18:18 +00:00
Mashintime 006dec976a Grid layout system proof of concept demo 2023-11-25 01:17:45 -05:00
Pedro 395e505b84 Work in progress 2023-11-24 10:46:51 +01:00
DJ2LS dbd1cf1d98 first prototype of registering arq session 2023-11-23 23:10:53 +01:00
Pedro 5bb25c3d45 Refactoring of tx commands - WIP 2023-11-23 16:59:53 +01:00
Pedro 5c34ef40da Add DataFrameFactory with the different frame types 2023-11-23 16:11:47 +01:00
DJ2LS 1cf6d5914a test with frame dispatcher 2023-11-23 10:14:11 +01:00
codefactor-io 2422f1dab5
[CodeFactor] Apply fixes 2023-11-23 06:31:28 +00:00
Mashintime 01ae2748c8 Fix some issues with check modal and modem refresh btn 2023-11-23 01:04:04 -05:00
Mashintime 22e2f2f08a Enable fft when client connects to fft ws 2023-11-23 01:02:56 -05:00
Mashintime 28e7694545 Fix websockets not sending data 2023-11-23 01:01:29 -05:00
Pedro a5ebf2d0fc Improve threading.Event() usage on transmission 2023-11-22 21:54:50 +01:00
Pedro 8dfae3b35a Remove beacon state handling from data transmission queue 2023-11-22 18:07:30 +01:00
Pedro 06dd1637cd Set beacon directly on modem state 2023-11-22 18:05:31 +01:00
Pedro 8c2c6a8ce0 Explicit args on modem primitive methods. API error format. 2023-11-22 14:57:51 +01:00
Pedro eda5580f83 Isolate websocket management 2023-11-22 12:04:07 +01:00
dependabot[bot] dd3695d07a
Bump vite from 4.5.0 to 5.0.2 in /gui
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.0 to 5.0.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-21 16:52:52 +00:00
DJ2LS 6b79f826eb updated tests, added gui test 2023-11-20 20:19:18 +01:00
DJ2LS bed858117b updated tests, added gui test 2023-11-20 20:18:57 +01:00
dependabot[bot] 019f5f7226
Bump eslint-config-standard-with-typescript in /gui
Bumps [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) from 39.1.1 to 40.0.0.
- [Release notes](https://github.com/standard/eslint-config-standard-with-typescript/releases)
- [Changelog](https://github.com/standard/eslint-config-standard-with-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/standard/eslint-config-standard-with-typescript/compare/v39.1.1...v40.0.0)

---
updated-dependencies:
- dependency-name: eslint-config-standard-with-typescript
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 17:01:37 +00:00
DJ2LS 9d96e1ee37 adjusted pyinstaller conf 2023-11-20 16:02:22 +01:00
DJ2LS 53c9f2a668 adjusted modem test 2023-11-20 16:02:13 +01:00
DJ2LS e2c615b4ed first test running tests in github actions 2023-11-20 15:50:48 +01:00
DJ2LS e05ec46b66 first test running tests in github actions 2023-11-20 15:33:26 +01:00
DJ2LS d6c182964b first test running tests in github actions 2023-11-20 15:31:33 +01:00
DJ2LS 73704ea206 first test running tests in github actions 2023-11-20 15:27:56 +01:00
Pedro 0f08b6525f Add first GUI test using vitest 2023-11-20 14:24:45 +01:00
DJ2LS 8847ffdd40 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	modem/data_handler_helpers.py
2023-11-20 09:00:20 +01:00
DJ2LS 083a98263b adjusted arq classes 2023-11-20 09:00:07 +01:00
Pedro 5e6d343eda Fix forgotten code outside of comment 2023-11-20 08:52:11 +01:00
DJ2LS 670a1703de move some functions to a helper file 2023-11-20 07:39:54 +01:00
DJ2LS 5426cb3a1b first test with CQ ... setting handling still bad 2023-11-19 23:17:43 +01:00
DJ2LS 81f6ce4636 more work on ARQ modules.. 2023-11-19 22:44:16 +01:00
DJ2LS b1d8810bcf splitting ARQ into subclasses 2023-11-19 22:12:30 +01:00
DJ2LS d94399e07c moved arq stuff to own module... 2023-11-19 17:09:47 +01:00
DJ2LS 0be61e75c4 Merge remote-tracking branch 'origin/develop' into develop 2023-11-19 14:56:36 +01:00
DJ2LS d8ce1d456f splitted data handler... broken! 2023-11-19 14:56:29 +01:00
codefactor-io dab78fe190
[CodeFactor] Apply fixes to commit 442a041 2023-11-19 13:04:10 +00:00
DJ2LS 442a041952 attempt fixing some callsign related stuff...aaargh 2023-11-19 14:03:48 +01:00
DJ2LS 225af9e8b5 fixed explorer publishing 2023-11-19 12:31:56 +01:00
DJ2LS 129b7f6029 fixed receiving qrv 2023-11-19 10:22:38 +01:00
DJ2LS 6670f36ad8 read config after hot reload 2023-11-19 09:56:00 +01:00
Mashintime e1bb03f4d9 Go Go CQ CQ 2023-11-19 02:34:43 -05:00
Mashintime a804ff94af More work on ping and beacons 2023-11-19 02:30:47 -05:00
Mashintime 96efa8fb25 Add snr to dispatcher 2023-11-19 02:29:40 -05:00
Mashintime 4210c8c035 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-18 23:17:51 -05:00
Mashintime a73904549e Fix iscodec2 data indicator 2023-11-18 23:17:43 -05:00
codefactor-io 8792d3b0f2
[CodeFactor] Apply fixes 2023-11-19 04:08:43 +00:00
Mashintime 36e71f44f7 Fix up beacons 2023-11-18 23:06:03 -05:00
Mashintime ade05024cc Fig hamlib port in check modal 2023-11-18 22:25:13 -05:00
Mashintime 50b92d813e Use correct format for mycallsign 2023-11-18 17:55:05 -05:00
Mashintime 7c73e131a5 Some rig control work 2023-11-18 17:50:40 -05:00
Pedro 2f1132cec5 Fix "Tune" on GUI 2023-11-18 19:06:29 +01:00
Pedro fec578b1d7 Fix invalid mycallsign decoding (it is now a string and not a byte array) 2023-11-18 18:43:52 +01:00
Pedro 4a650e66c1 Fix ping API endpoint and caller 2023-11-18 18:14:23 +01:00
Pedro 477c93570c Fix config.ini.example settings 2023-11-18 18:06:40 +01:00
Pedro 1104d6b2f1 Correct ping API call 2023-11-18 18:06:40 +01:00
codefactor-io ab7f03a9e6
[CodeFactor] Apply fixes 2023-11-18 17:05:57 +00:00
Mashintime 3b33ce9a62 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-18 12:05:28 -05:00
Mashintime 45c221b9fa Fix some startup check items 2023-11-18 11:58:34 -05:00
Mashintime daa8604c7b Fix a few cfg items in modem.py 2023-11-18 11:55:49 -05:00
DJ2LS 05a7bcfa42 fixed default config 2023-11-18 17:27:26 +01:00
codefactor-io 2582972c34
[CodeFactor] Apply fixes 2023-11-18 16:12:05 +00:00
Pedro a2130fab5e Remove unused file 2023-11-18 17:11:29 +01:00
Pedro 860c70649e Fix rebase errors 2023-11-18 17:10:01 +01:00
Pedro a6d2a34b58 Setup audio device fields in main check form 2023-11-18 17:03:00 +01:00
Pedro befdb15f41 Change config.ini.example to match config changes 2023-11-18 17:00:09 +01:00
Pedro c7d94b3b63 Handle audio and serial devices for dynamic options 2023-11-18 16:59:22 +01:00
Pedro 4f7972b546 Simplify and fix broken settings. 2023-11-18 16:59:19 +01:00
Pedro 03be0db844 Fix field value type handling 2023-11-18 16:58:21 +01:00
Pedro 60b68612ab Fix things. Simplify field value change handling. 2023-11-18 16:58:21 +01:00
Pedro c6871dbf52 More progress.. 2023-11-18 16:58:21 +01:00
Pedro 312df72f8b Improve GUI rigcontrol settings 2023-11-18 16:58:21 +01:00
Pedro 851f1f6072 Improve station settings handling 2023-11-18 16:58:21 +01:00
Pedro e861dde9c8 Eliminate multiple GET /config requests 2023-11-18 16:58:17 +01:00
Pedro 381c0d7813 Improve handle of settings 2023-11-18 16:56:39 +01:00
Pedro 51360b8458 WIP GUI settings handling 2023-11-18 16:53:54 +01:00
Mashintime b837c0f854 Delay initial explorer report incase of bugs/issues 2023-11-18 03:49:32 -05:00
Mashintime dc843276c2 get_crc, check if input is not bytes 2023-11-18 03:28:43 -05:00
DJ2LS 07e6c33e89 and another global has been eliminated.. 2023-11-17 23:33:30 +01:00
DJ2LS 108851fb78 and another global has been eliminated.. 2023-11-17 23:07:24 +01:00
DJ2LS 5121cb5a14 and another global has been eliminated.. 2023-11-17 23:05:41 +01:00
DJ2LS 145ac1533a Merge remote-tracking branch 'origin/develop' into develop 2023-11-17 22:45:20 +01:00
DJ2LS 0489db4292 and another global has been eliminated.. 2023-11-17 22:45:10 +01:00
codefactor-io 2e4b06732e
[CodeFactor] Apply fixes 2023-11-17 21:36:37 +00:00
Mashintime d84dc12fb0 Fix config errors 2023-11-17 16:36:12 -05:00
Mashintime f2befd29f2 Add support for /modem/state rest 2023-11-17 16:35:52 -05:00
Mashintime 5cc05d26e7 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-17 16:05:09 -05:00
DJ2LS cbe05caea2 and another global has been eliminated.. 2023-11-17 20:03:03 +01:00
DJ2LS f912841f5a and another global has been eliminated.. 2023-11-17 18:20:51 +01:00
Mashintime c684cd58e0 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-17 06:54:26 -05:00
DJ2LS 6682bf360a and another global has been eliminated.. 2023-11-17 11:07:29 +01:00
DJ2LS 27209ff843 and another global has been eliminated.. 2023-11-17 10:58:07 +01:00
DJ2LS d7755b147a and another global has been eliminated.. 2023-11-17 10:37:50 +01:00
DJ2LS 4e14eeecb7 and another global has been eliminated.. 2023-11-17 10:22:45 +01:00
DJ2LS ee709b32ef reducing another global... 2023-11-17 09:53:51 +01:00
Mashintime 4318902f5a Send state on new connection instead of fixed period 2023-11-16 20:39:04 -05:00
Mashintime 0e53b34ed6 Colorize check modal icon based on healtth 2023-11-16 20:26:32 -05:00
Mashintime c19586369e Send state messages semi-frequently even if there's no changes 2023-11-15 17:34:26 -05:00
codefactor-io cf522bd41e
[CodeFactor] Apply fixes 2023-11-15 22:04:48 +00:00
Mashintime 2416a13812 Wired up update stuff in check modal 2023-11-15 17:04:18 -05:00
Mashintime fa0557da46 Fix up some errors and set env var if update is available 2023-11-15 17:00:54 -05:00
Mashintime 6e78b4d37c Update list_audio_devices tool with new id algo 2023-11-15 16:34:20 -05:00
Mashintime 0916ef4ce7 Fix audio test error message 2023-11-15 16:33:49 -05:00
Pedro 924871859f Fix identification of audio devices 2023-11-15 21:14:56 +01:00
Pedro be10ffd564 Handle integer on rx_buffer_size setting 2023-11-15 18:47:52 +01:00
codefactor-io 230aaf041d
[CodeFactor] Apply fixes to commit 8397871 2023-11-15 17:44:38 +00:00
Pedro 839787134c Improve boolean handling on checkboxes 2023-11-15 18:43:46 +01:00
Pedro 7a2d1be134 Improve data types on GUI settings. Still not good. 2023-11-15 18:24:42 +01:00
Pedro af80565acd Improve value error exception message 2023-11-15 17:06:51 +01:00
Pedro 1ed281e7c4 Convert and validate server side config data 2023-11-15 16:49:16 +01:00
codefactor-io e8a126f299
[CodeFactor] Apply fixes to commit 5e7ceeb 2023-11-15 03:01:19 +00:00
Mashintime 5e7ceebe32 Add rig control to check modal 2023-11-14 22:00:04 -05:00
DJ2LS 1ca3703420
Merge branch 'main' into develop 2023-11-14 21:39:33 +01:00
DJ2LS c32b435cee
Merge pull request #539 from DJ2LS/dependabot/npm_and_yarn/gui/electron/universal-2.0.0 2023-11-14 21:39:21 +01:00
DJ2LS 6c8720d636
Merge pull request #535 from DJ2LS/dependabot/npm_and_yarn/gui/vite-plugin-electron-0.15.4 2023-11-14 21:39:12 +01:00
DJ2LS 03738bcb8f attempt with disabled portaudio termination 2023-11-14 19:35:11 +01:00
DJ2LS d74dda0bc5 config fixes and adjustments 2023-11-14 19:26:11 +01:00
DJ2LS 131ec6fa63 fix audio devices in gui 2023-11-14 15:49:07 +01:00
DJ2LS 9d8c736917 websocket non blocking multi client support 2023-11-14 15:01:01 +01:00
DJ2LS d92c4a4a90 fix audio devices 2023-11-13 23:05:51 +01:00
DJ2LS 781a086c8f fix some settings 2023-11-13 22:58:47 +01:00
DJ2LS 4af574cd43 fixed explorer publishing 2023-11-13 22:54:57 +01:00
codefactor-io d257f9fe90
[CodeFactor] Apply fixes 2023-11-13 21:36:18 +00:00
DJ2LS c1f516babb Merge remote-tracking branch 'origin/develop' into develop 2023-11-13 22:36:01 +01:00
DJ2LS 237318b268 fixed explorer publishing 2023-11-13 22:35:54 +01:00
codefactor-io 937c7b1f4b
[CodeFactor] Apply fixes to commit 87f531a 2023-11-13 21:30:22 +00:00
Mashintime 87f531a575 Small updates to startup modal 2023-11-13 15:18:59 -05:00
Mashintime a5259bd463 Some additional hardcoded websocket addresses 2023-11-13 15:11:50 -05:00
Mashintime ac34904ea9 Fix saving modem host/port to gui config 2023-11-13 15:02:41 -05:00
DJ2LS c47ef5fa47 Merge remote-tracking branch 'origin/develop' into develop 2023-11-13 20:26:36 +01:00
DJ2LS fa73706af5 some more reducing of globals.. 2023-11-13 20:26:27 +01:00
codefactor-io 5cb1e3f661
[CodeFactor] Apply fixes to commit b74218a 2023-11-13 19:22:37 +00:00
Mashintime b74218abab Fix hard coded websocket address 2023-11-13 14:22:11 -05:00
codefactor-io ee0d559d94
[CodeFactor] Apply fixes 2023-11-13 19:12:09 +00:00
Mashintime cf0e9de0ea Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-13 14:09:13 -05:00
Mashintime 349ded60d1 use modem host/port from config in gui 2023-11-13 14:07:51 -05:00
Mashintime 1c7feccc3a Small fixes to check modal 2023-11-13 14:07:31 -05:00
Mashintime 52e646683c Various small fixes for prep of startup modal 2023-11-13 14:05:01 -05:00
Mashintime e04b5e4a89 Update default modem port to 5000 2023-11-13 14:04:15 -05:00
codefactor-io da38532635
[CodeFactor] Apply fixes 2023-11-13 18:02:04 +00:00
Mashintime 1dc06d0aa4 Merge branch 'develop' of github.com:DJ2LS/FreeDATA into develop 2023-11-13 12:50:52 -05:00
Mashintime 30a25b76fb Show version info in check modal 2023-11-13 12:50:46 -05:00
DJ2LS 5f8192d5cf Merge remote-tracking branch 'origin/develop' into develop 2023-11-13 18:12:02 +01:00
DJ2LS 1852458cf5 remove globals 2023-11-13 18:11:55 +01:00
codefactor-io dba125fc87
[CodeFactor] Apply fixes 2023-11-13 16:41:56 +00:00
Mashintime 7092a5d447 Explorer fixes 2023-11-13 11:40:46 -05:00
Mashintime 5e2f2b6958 Fix element issues in settings-->Modem 2023-11-13 11:40:21 -05:00
Mashintime 9c0cc0a427 Modem control in startup check 2023-11-13 11:30:23 -05:00
Mashintime 9627f269fb Convert to json 2023-11-13 11:28:00 -05:00
DJ2LS 5301cd3b05 remove globals 2023-11-13 16:48:59 +01:00
Mashintime 3aaf28cb3b Fix crash on windows 2023-11-13 08:19:48 -05:00
codefactor-io a272b6fc2c
[CodeFactor] Apply fixes to commit 2579d16 2023-11-13 12:48:24 +00:00
DJ2LS 2579d167e7 start pre check on app start 2023-11-13 13:48:02 +01:00
codefactor-io 9c745167ac
[CodeFactor] Apply fixes 2023-11-13 08:48:47 +00:00
DJ2LS 6487776bcd Merge remote-tracking branch 'origin/develop' into develop 2023-11-13 09:48:30 +01:00
DJ2LS d5c05d90e4 updated check screen for better explanation 2023-11-13 09:48:24 +01:00
codefactor-io 1f7f6c4714
[CodeFactor] Apply fixes to commit 05a31be 2023-11-13 08:39:34 +00:00
DJ2LS 05a31be2e5 updated check screen for better explanation 2023-11-13 09:39:15 +01:00
DJ2LS a3aa3f8bb2 Merge remote-tracking branch 'origin/develop' into develop 2023-11-13 09:19:48 +01:00
DJ2LS 9fdeeff921 some small cleanup 2023-11-13 09:19:42 +01:00
codefactor-io f34f7d317e
[CodeFactor] Apply fixes 2023-11-13 06:21:13 +00:00
DJ2LS 1a27458d14 implemented test with check 2023-11-13 07:20:46 +01:00
DJ2LS 8f2637c39f first test with event sock connection state 2023-11-13 07:20:06 +01:00
DJ2LS 26be304699 fixed typo 2023-11-13 07:19:32 +01:00
DJ2LS e0c1ec1121 fixed tests 2023-11-12 23:39:49 +01:00
DJ2LS f1e84c2728 fixed another missing variable 2023-11-12 23:30:30 +01:00
DJ2LS 9130d97cae fixed a wrong config 2023-11-12 23:28:10 +01:00
codefactor-io 3cb9724d93
[CodeFactor] Apply fixes to commit 5962450 2023-11-12 22:23:20 +00:00
DJ2LS 5962450be7 more cleanup 2023-11-12 23:22:53 +01:00
codefactor-io 3c8e77a237
[CodeFactor] Apply fixes 2023-11-12 21:35:32 +00:00
DJ2LS 3349d09654 Merge remote-tracking branch 'origin/develop' into develop 2023-11-12 22:35:15 +01:00
DJ2LS b76726c4a5 show popup when modem restarting 2023-11-12 22:35:10 +01:00
codefactor-io 11ae37f3b9
[CodeFactor] Apply fixes to commit aef44b1 2023-11-12 18:56:33 +00:00
DJ2LS aef44b1536 first test with states 2023-11-12 19:56:15 +01:00
DJ2LS 5a10a07e21 adjusted modem and trigger states 2023-11-11 20:52:29 +01:00
codefactor-io abb4d0000d
[CodeFactor] Apply fixes to commit 87f2cbf 2023-11-11 19:47:05 +00:00
DJ2LS 87f2cbff2a add first attempt of state handler 2023-11-11 20:46:49 +01:00
DJ2LS 78b545dff0 updated settings 2023-11-11 20:38:13 +01:00
codefactor-io 498a5c2e3c
[CodeFactor] Apply fixes to commit 476597e 2023-11-11 19:32:54 +00:00
DJ2LS 476597e792 fixing callsign 2023-11-11 20:32:36 +01:00
codefactor-io 4fe9f82b40
[CodeFactor] Apply fixes 2023-11-11 19:28:24 +00:00
DJ2LS 05f631e4b4 Merge remote-tracking branch 'origin/develop' into develop 2023-11-11 20:28:00 +01:00
DJ2LS 8b777a3ad2 changed some gui settings....broken settings now I think.. 2023-11-11 20:27:54 +01:00
codefactor-io ced26da1a1
[CodeFactor] Apply fixes 2023-11-11 19:02:37 +00:00
DJ2LS a009f6dd3c Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	modem/server.py
2023-11-11 20:02:08 +01:00
DJ2LS bd2e173620 introduced state manager and changed config.ini 2023-11-11 20:01:15 +01:00
Mashintime 92c4831761 Fix modem not starting 2023-11-11 12:35:35 -05:00
Mashintime e95c9f1ff7 Fix duplicate function name 2023-11-11 12:35:10 -05:00
Mashintime 95cecd2834 Update audio util to show crc id 2023-11-11 12:23:58 -05:00
DJ2LS 9f7bdfbc2b some server command related adjustments 2023-11-11 13:37:18 +01:00
DJ2LS 42b206536d reduced more variables from global store 2023-11-11 11:09:19 +01:00
DJ2LS e82592bab7 possible fix of crashing audio device 2023-11-11 10:53:01 +01:00
DJ2LS 722f1ef785 adjusted modem startup and audio tests 2023-11-11 10:41:16 +01:00
Mashintime a7ef928d0f Store and use real index of audio devices 2023-11-10 22:59:14 -05:00
dependabot[bot] b73aedd079
Bump @electron/universal from 1.5.1 to 2.0.0 in /gui
Bumps [@electron/universal](https://github.com/electron/universal) from 1.5.1 to 2.0.0.
- [Release notes](https://github.com/electron/universal/releases)
- [Changelog](https://github.com/electron/universal/blob/main/.releaserc.json)
- [Commits](https://github.com/electron/universal/compare/v1.5.1...v2.0.0)

---
updated-dependencies:
- dependency-name: "@electron/universal"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-10 16:38:30 +00:00
codefactor-io 7ba7a435ef
[CodeFactor] Apply fixes to commit 4cf915c 2023-11-10 15:09:18 +00:00
DJ2LS 4cf915c399 audio device check before starting modem 2023-11-10 16:02:38 +01:00
codefactor-io fbf6853c96
[CodeFactor] Apply fixes 2023-11-09 21:12:32 +00:00
DJ2LS 55a17b793b Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/api.js
2023-11-09 22:12:06 +01:00
DJ2LS e7c976f5f4 start-stop modem via command 2023-11-09 22:11:53 +01:00
codefactor-io e5779c84ae
[CodeFactor] Apply fixes to commit 9e802db 2023-11-09 18:46:53 +00:00
DJ2LS 9e802db6d3 introduced api module 2023-11-09 19:46:29 +01:00
DJ2LS 49430f65d2 Merge remote-tracking branch 'origin/develop' into develop 2023-11-09 19:35:44 +01:00
DJ2LS 8b49fc4f8e improved multiclient support and reconnecting 2023-11-09 19:35:38 +01:00
codefactor-io d8b7889401
[CodeFactor] Apply fixes to commit 3b9db29 2023-11-09 17:00:30 +00:00
DJ2LS 3b9db2980c attempt using ptt 2023-11-09 18:00:12 +01:00
codefactor-io 304b35da1f
[CodeFactor] Apply fixes 2023-11-09 16:15:12 +00:00
DJ2LS 3ae0fc5b42 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	gui/src/js/event_sock.js
2023-11-09 17:14:44 +01:00
DJ2LS 3616e131f7 attempt using waerfall with websockets 2023-11-09 17:14:22 +01:00
codefactor-io 7ee6707047
[CodeFactor] Apply fixes 2023-11-09 14:48:51 +00:00
DJ2LS 165fb9588b Merge remote-tracking branch 'origin/develop' into develop 2023-11-09 15:48:20 +01:00
DJ2LS 1dc766e70e tests with ping and beacon 2023-11-09 15:48:10 +01:00
codefactor-io c6104a9dbc
[CodeFactor] Apply fixes to commit 24ad550 2023-11-09 13:15:29 +00:00
DJ2LS 24ad55081c fix audio device selection 2023-11-09 14:15:11 +01:00
codefactor-io 119eb4ed88
[CodeFactor] Apply fixes 2023-11-09 12:52:47 +00:00
DJ2LS a6aabd1bc4 adjusted some command handling 2023-11-09 13:52:27 +01:00
DJ2LS bb73d897f9 fixed modem error when selectin audio devices 2023-11-09 13:52:03 +01:00
DJ2LS 7705723fe0 fixed modem error when selectin audio devices 2023-11-09 13:50:24 +01:00
codefactor-io ec6a83ebd1
[CodeFactor] Apply fixes to commit 2eb47cf 2023-11-09 09:38:12 +00:00
DJ2LS 2eb47cf57f first test doing a CQ via POST 2023-11-09 10:37:45 +01:00
DJ2LS c170a938d1 updated dependabot 2023-11-08 20:23:27 +01:00
codefactor-io 368fe13201
[CodeFactor] Apply fixes 2023-11-08 19:19:13 +00:00
DJ2LS 282dc84364 Merge remote-tracking branch 'origin/develop' into develop 2023-11-08 20:18:48 +01:00
DJ2LS c3d5494f4c fetching most of important settings, also saving them via POST 2023-11-08 20:18:41 +01:00
Pedro 2f7c3bc73c Add commented draft of modem endpoints 2023-11-08 19:21:36 +01:00
Pedro bf866a73e6 Integrate the modem event queue in other modules 2023-11-08 18:49:38 +01:00
Pedro 08f35903af Connect modem events to /events websocket 2023-11-08 17:46:15 +01:00
dependabot[bot] 0a8178508d
Bump vite-plugin-electron from 0.14.1 to 0.15.4 in /gui
Bumps [vite-plugin-electron](https://github.com/electron-vite/vite-plugin-electron) from 0.14.1 to 0.15.4.
- [Release notes](https://github.com/electron-vite/vite-plugin-electron/releases)
- [Changelog](https://github.com/electron-vite/vite-plugin-electron/blob/main/CHANGELOG.md)
- [Commits](https://github.com/electron-vite/vite-plugin-electron/compare/v0.14.1...v0.15.4)

---
updated-dependencies:
- dependency-name: vite-plugin-electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-08 16:12:45 +00:00
Pedro a4f4b7b052 Refactor modem.py init 2023-11-08 14:24:54 +01:00
Pedro 697cb7610a Improve modem audio device logging info 2023-11-08 14:03:35 +01:00
codefactor-io 67a2bc8f98
[CodeFactor] Apply fixes 2023-11-08 10:25:25 +00:00
DJ2LS 0e21c33376 first test with fetching settings 2023-11-08 11:24:52 +01:00
DJ2LS 8bbfa57304 updated requirements 2023-11-08 10:54:27 +01:00
DJ2LS c38175f83f added CORS support 2023-11-08 10:54:08 +01:00
Pedro 045fcb1e4b Use audio device name crc as the id. Detect and match crc to find the correct device. 2023-11-07 15:20:09 +01:00
Pedro 61636fe473 Modem running inside the server for the first time. 2023-11-07 11:36:49 +01:00
Pedro 760585f9a6 Add endpoints GET /devices/audio and GET /devices/serial 2023-11-06 21:44:36 +01:00
Pedro 3b5131d63e Add POST /config with tests 2023-11-06 20:52:33 +01:00
Pedro 24cfc8f691 Improve config write method. Add tests. 2023-11-06 19:04:35 +01:00
Pedro 13ad59ae6e Add correct config path to helper script 2023-11-06 15:39:59 +01:00
Pedro 25a1e3b495 Add working GET /config to the API 2023-11-06 15:37:33 +01:00
Pedro 2a954830ce Add option --use-config cli argument for a custom config file. 2023-11-06 15:20:09 +01:00
Pedro cc182059bd Add rest API server 2023-11-06 13:54:38 +01:00
Pedro 0102220271 Add write() method to config and created first tests. 2023-11-06 11:30:37 +01:00
Pedro 8d99b0bfa2 Only use config for modem settings 2023-11-06 08:47:28 +01:00
DJ2LS 28fcd69846
Merge pull request #529 from DJ2LS/qm-develop-gui
Some fixes, tweaks
2023-11-05 15:31:58 +01:00
Mashintime dcfff32fcc Function descriptions 2023-11-04 14:56:25 -04:00
Mashintime 9a39d2246e Use clearer function name 2023-11-04 14:55:18 -04:00
Mashintime d88d89373f Remove comments 2023-11-04 14:44:06 -04:00
DJ2LS 22e92af2ac
Merge branch 'develop' into qm-develop-gui 2023-11-04 14:33:09 +01:00
DJ2LS 1c90711411
Merge pull request #510 from DJ2LS/ls-arq 2023-11-04 14:32:50 +01:00
DJ2LS 96e5e875b8
Merge branch 'develop' into ls-arq 2023-11-04 14:32:33 +01:00
Mashintime d018627e9e Fix message window height being too large and pushing new message area off screen. 2023-11-04 00:18:43 -04:00
Mashintime 85044465aa Attempt at fixing new chat not working 2023-11-04 00:13:47 -04:00
Mashintime 3cbd8532b1 One less error message in console 2023-11-03 22:31:32 -04:00
Mashintime 7e3e315f06 Waterfall theme support 2023-11-03 22:12:06 -04:00
Mashintime 331031c0b9 Sort heard stations descending by timestamp 2023-11-03 21:54:29 -04:00
Mashintime 7eb65dd91e Move sort functions for freedata.js for use elsewhere, add a sort desc function as well. 2023-11-03 21:50:28 -04:00
Mashintime 39b28884bf Remove text from frequency dropdown 2023-11-03 21:44:39 -04:00
Mashintime 8015ce88c6 Fix kHz label 2023-11-03 21:43:07 -04:00
Mashintime d7fa0a6039 Dont allow creation of blank callsigns in chat. 2023-11-03 21:41:23 -04:00
DJ2LS 026f78eb82
Merge pull request #528 from DJ2LS/chat-hotfix
partially fix for chat not opening
2023-11-03 22:41:59 +01:00
codefactor-io b6da01969f
[CodeFactor] Apply fixes 2023-11-03 21:12:27 +00:00
DJ2LS a1a0486507 partially fixing #526 2023-11-03 22:08:29 +01:00
DJ2LS 3afdcbe6c7
Merge branch 'develop' into ls-arq 2023-11-03 17:11:09 +01:00
codefactor-io 7b0d909c9a
[CodeFactor] Apply fixes 2023-11-03 14:40:01 +00:00
Pedro 9a19c56af0 Improve audio settings and modem state handling 2023-11-03 15:38:41 +01:00
Pedro 99043037d9 Move modem control to modem settings area 2023-11-03 13:32:52 +01:00
Pedro fd6e364e40 Set top nav bar always present 2023-11-03 13:32:05 +01:00
DJ2LS c9884b76ce
Merge branch 'develop' into ls-arq 2023-11-02 18:59:06 +01:00
ptsmonteiro 6cc5a0f6c5
Merge pull request #519 from DJ2LS/hamlib-radio-model-text-settings
Display radio model name on hamlib radio model settings
2023-11-02 18:51:13 +01:00
ptsmonteiro 4e22335181
Merge pull request #525 from DJ2LS/only-one-main-screen
Only one main screen
2023-11-02 18:50:53 +01:00
Pedro b6e8cb2df5 Move Rig Control to active view. Remove default view. Only active view now. 2023-11-02 16:43:16 +01:00
Pedro d0a2eca8be Add rig control settings to settings area 2023-11-02 16:43:16 +01:00
Pedro 5f76a0d283 Move updater to info screen 2023-11-02 16:43:13 +01:00
ptsmonteiro 146abb3994
Merge pull request #521 from DJ2LS/move-updater-to-info
Move updater to infoScreen
2023-11-02 16:35:27 +01:00
DJ2LS e95f9a1d6a make channel opener more random 2023-11-02 15:07:36 +01:00
DJ2LS 0c23ca0561 make channel opener more random 2023-11-02 15:02:47 +01:00
DJ2LS e5766e1324 moved updater to info screen 2023-11-01 22:37:30 +01:00
ptsmonteiro ae03bb6012
Merge pull request #520 from DJ2LS/move-audio-dev-settings-to-modem-settings
Move audio device settings to modem settings area.
2023-11-01 21:34:42 +01:00
Pedro Monteiro 59188d71eb Move audio device settings to modem settings area. 2023-11-01 18:45:02 +01:00
Pedro bc292a66e6 Display radio model name on hamlib radio model settings 2023-11-01 17:12:08 +01:00
ptsmonteiro 3582beb6a0
Merge pull request #518 from DJ2LS/move-radio-port-settings
Move radio port setting to hamlib settings
2023-11-01 17:11:22 +01:00
ptsmonteiro 97dd0e96fb
Merge pull request #517 from DJ2LS/move-station-settings
Move station settings to the settings area
2023-11-01 17:09:59 +01:00
Pedro Monteiro 362e2e6829 Move radio port setting to hamlib settings 2023-11-01 16:22:15 +01:00
Pedro Monteiro 0f6ee30389 Move station settings to the settings area 2023-11-01 15:36:24 +01:00
DJ2LS 5d7508dbed test with early retransmit of NACK 2023-10-31 22:28:19 +01:00
DJ2LS b0d2c195ae fixed daemon startup 2023-10-31 16:45:18 +01:00
DJ2LS 6268a4f5eb
Merge branch 'main' into ls-arq 2023-10-31 16:34:24 +01:00
DJ2LS 5632310b8c added rx audio level and moved from linear to dB 2023-10-31 15:29:33 +01:00
DJ2LS 34ed96aec8
Merge pull request #515 from DJ2LS/ls-gui-single-pager
possible fix for reading chat list from undefined
2023-10-31 14:43:15 +01:00
DJ2LS dfa3ad74fa
Merge branch 'main' into ls-gui-single-pager 2023-10-31 14:26:49 +01:00
codefactor-io 28590809d3
[CodeFactor] Apply fixes to commit cac6288 2023-10-31 13:26:31 +00:00
DJ2LS cac628817d possible fix for reading chat list from undefined 2023-10-31 14:25:56 +01:00
DJ2LS 3f49b63930 adjusted arq timeouts... 2023-10-31 14:00:03 +01:00
DJ2LS e445fbb3a3
Merge branch 'main' into ls-arq 2023-10-31 09:54:19 +01:00
DJ2LS 5d111cac5b enable / disable morse identifier 2023-10-31 09:53:31 +01:00
LA3QMA d9ea2e941f github.com/DJ2LS/FreeDATA/issue/513
Fixed the missing SSID
2023-10-31 09:20:59 +01:00
DJ2LS 4a47c3f58c adjusted morse module 2023-10-29 23:10:12 +01:00
DJ2LS b2a068dbfe
Merge branch 'main' into ls-arq 2023-10-29 20:16:48 +01:00
DJ2LS a7b32369b6 fixed mac build 2023-10-29 20:14:55 +01:00
DJ2LS 49c56bd8b5 moving back from universal 2023-10-29 18:33:13 +01:00
DJ2LS 75581144bb well and another attempt 2023-10-29 17:21:16 +01:00
DJ2LS 648bfabbdf well and another attempt 2023-10-29 17:20:37 +01:00
DJ2LS 9cafc7b786 possible build hotfix... 2023-10-29 16:51:55 +01:00
DJ2LS 9e1720eb4f improved channel busy handler 2023-10-29 15:05:53 +01:00
DJ2LS f59ccd5ae5 improved channel busy handler 2023-10-28 23:42:29 +02:00
DJ2LS dff5b8e3cd improved channel opening 2023-10-28 22:37:15 +02:00
DJ2LS be6035e159 version update 2023-10-28 20:13:27 +02:00
DJ2LS 1bb18e1e98
Merge pull request #504 from DJ2LS/ls-gui-single-pager
GUI Adjustments
2023-10-28 20:12:07 +02:00
codefactor-io 01c42e8d77
[CodeFactor] Apply fixes 2023-10-28 17:31:45 +00:00
DJ2LS 68e3d79260 some improvements to frequency selector 2023-10-28 19:31:24 +02:00
DJ2LS 24cab2285e dirty disabling of typescript errors... 2023-10-28 19:27:20 +02:00
codefactor-io 270e0d06d9
[CodeFactor] Apply fixes to commit 6f28598 2023-10-28 13:36:29 +00:00
DJ2LS 6f28598e6f updated failed message handler 2023-10-28 15:36:10 +02:00
codefactor-io cd7b0f6045
[CodeFactor] Apply fixes 2023-10-28 13:14:47 +00:00
DJ2LS 4d3873a08f Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager
# Conflicts:
#	gui/src/js/chatHandler.ts
2023-10-28 15:14:14 +02:00
DJ2LS 5a942492ef adjusted frequency selection 2023-10-28 15:14:04 +02:00
codefactor-io 0ffdded569
[CodeFactor] Apply fixes to commit f575488 2023-10-28 08:45:24 +00:00
DJ2LS f575488d82 added ei7ig 2023-10-28 10:45:05 +02:00
DJ2LS 6a97a354dd added vk5dgr 2023-10-27 23:43:04 +02:00
DJ2LS c68c952f13 some more gui polising 2023-10-27 23:26:54 +02:00
DJ2LS 44a49a84a3 adjusted daemon process starting 2023-10-27 22:58:11 +02:00
DJ2LS 66137f1f68 adjusted daemon process starting 2023-10-27 22:57:43 +02:00
DJ2LS 33094fa7a4 adjusted daemon process starting 2023-10-27 22:50:21 +02:00
DJ2LS 3e19428beb adjusted daemon process starting 2023-10-27 22:47:10 +02:00
DJ2LS a48c7f08f1 adjusted daemon process starting 2023-10-27 22:03:11 +02:00
DJ2LS b81bcb2c9f attempt with subprocess.run 2023-10-27 14:25:11 +02:00
DJ2LS e30d71a85e attempt with rigctld watchdog 2023-10-26 20:04:57 +02:00
DJ2LS 36d6f061b2
Merge branch 'main' into ls-gui-single-pager 2023-10-26 16:03:52 +02:00
DJ2LS 5d09de0b62
Merge pull request #496 from DJ2LS/dependabot/npm_and_yarn/gui/electron-log-5.0.0
Bump electron-log from 4.4.8 to 5.0.0 in /gui
2023-10-26 16:03:38 +02:00
codefactor-io 70142708e2
[CodeFactor] Apply fixes 2023-10-26 13:50:20 +00:00
DJ2LS 0b50d7aa12 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager
# Conflicts:
#	gui/src/js/sock.js
2023-10-26 14:40:37 +02:00
DJ2LS eada33df2f temporary fix for starting the modem 2023-10-26 14:40:28 +02:00
codefactor-io c32051054a
[CodeFactor] Apply fixes to commit e041772 2023-10-26 12:34:42 +00:00
DJ2LS e041772bb3 set wrong audio level just once 2023-10-26 14:33:47 +02:00
codefactor-io efae8fe06e
[CodeFactor] Apply fixes to commit 4851d31 2023-10-26 12:14:17 +00:00
DJ2LS 4851d3113e added a fancy grayscale view 2023-10-26 14:13:52 +02:00
DJ2LS 3cf6374a96 fixed infoscreen 2023-10-26 14:05:21 +02:00
DJ2LS dc2d7f454e added kt4wo 2023-10-26 14:04:29 +02:00
codefactor-io 36b53fe963
[CodeFactor] Apply fixes to commit e2b8d3d 2023-10-26 11:37:37 +00:00
DJ2LS e2b8d3d846 adjusted info 2023-10-26 13:37:13 +02:00
codefactor-io 48bddd4557
[CodeFactor] Apply fixes 2023-10-26 11:28:22 +00:00
DJ2LS 0863ce7829 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager 2023-10-26 13:27:51 +02:00
DJ2LS 5e1bd05146 adjusted components 2023-10-26 13:27:44 +02:00
codefactor-io d0591d2b86
[CodeFactor] Apply fixes 2023-10-26 10:12:53 +00:00
DJ2LS 1c82677063 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager
# Conflicts:
#	gui/src/js/sock.js
2023-10-26 11:56:09 +02:00
DJ2LS df3f6f37cf adjusted message state management and displaying of failed messages 2023-10-26 11:55:57 +02:00
codefactor-io d1754c01c0
[CodeFactor] Apply fixes 2023-10-26 09:19:49 +00:00
DJ2LS c299c3e82b set tx audio level 2023-10-26 11:19:21 +02:00
DJ2LS fc76844362 better sock handling for modem 2023-10-26 10:48:03 +02:00
DJ2LS f9c281eb54 important catch error for network 2023-10-26 09:44:05 +02:00
DJ2LS 5b8a6201f5 repaired preload main 2023-10-25 22:51:40 +02:00
DJ2LS 12ef947272 adjusted contributors srolling 2023-10-25 22:13:34 +02:00
DJ2LS e551091c74 adjusted contributors 2023-10-25 22:05:37 +02:00
DJ2LS bdc44aec9b
Merge branch 'main' into ls-gui-single-pager 2023-10-25 22:04:34 +02:00
codefactor-io 31e2fbb421
[CodeFactor] Apply fixes 2023-10-25 20:04:01 +00:00
DJ2LS 6f04901aa2 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager
# Conflicts:
#	gui/src/components/info.vue
2023-10-25 22:03:18 +02:00
DJ2LS 55b03e8161 improved contributors 2023-10-25 22:03:02 +02:00
codefactor-io f78802fe7f
[CodeFactor] Apply fixes to commit 38a5495 2023-10-25 15:23:27 +00:00
DJ2LS 38a5495b18 some gui adjustments 2023-10-25 17:20:39 +02:00
DJ2LS d4cf192266
Merge branch 'main' into dependabot/npm_and_yarn/gui/electron-log-5.0.0 2023-10-25 14:30:16 +02:00
DJ2LS d2c5c9b166
Merge pull request #501 from DJ2LS/ls-github
work on universal builds for macOS - possibly not working yet
2023-10-25 14:29:55 +02:00
DJ2LS b457bb0d64
Merge branch 'main' into ls-github 2023-10-25 14:29:37 +02:00
DJ2LS 8c46578d52
Merge pull request #502 from DJ2LS/ls-gui-single-pager
added 11m frequency to quick selection
2023-10-25 14:29:11 +02:00
DJ2LS c98999190e
Merge branch 'main' into ls-github 2023-10-25 13:21:45 +02:00
DJ2LS 719e8f760d test with new version 2023-10-25 13:21:03 +02:00
DJ2LS 18faafc968
Merge branch 'main' into ls-gui-single-pager 2023-10-25 12:58:20 +02:00
DJ2LS 0f0efc1d40 another attempt not merging ASARs 2023-10-25 12:54:29 +02:00
codefactor-io 96506de85a
[CodeFactor] Apply fixes to commit 2519375 2023-10-25 10:30:44 +00:00
DJ2LS 25193756e1 added additional channel to 11m 2023-10-25 12:30:20 +02:00
DJ2LS 528f8431f7 test with @electron/universal package 2023-10-25 12:24:46 +02:00
DJ2LS 7a8d1e9dd1 adjusted path to mode inside asar 2023-10-24 23:44:43 +02:00
DJ2LS 287826831b move modem to asar 2023-10-24 23:41:17 +02:00
DJ2LS 147b11e6fe attempt not merkging ASARs 2023-10-24 23:30:25 +02:00
DJ2LS 706511ae7b
Merge pull request #503 from DJ2LS/ls-mesh
mesh hotfix
2023-10-24 23:27:54 +02:00
DJ2LS 9aa0b7c7a0
Merge branch 'main' into ls-mesh 2023-10-24 23:27:26 +02:00
DJ2LS 005519c6c1 mesh hotfix 2023-10-24 22:18:18 +02:00
DJ2LS 5c33091257 just wildcard for x64ArchFiles 2023-10-24 22:09:01 +02:00
DJ2LS cd8df0c57a no wildcard for x64ArchFiles 2023-10-24 22:06:48 +02:00
DJ2LS 204c34ba0c and another x64ArchFiles change 2023-10-24 22:05:38 +02:00
DJ2LS 809c2ffa77 added 11m frequency to quick selection 2023-10-24 21:32:57 +02:00
DJ2LS a6a685f6c1 another test with x64ArchFiles folder 2023-10-24 21:29:36 +02:00
DJ2LS f46366de2a "x64ArchFiles": "x64/**/*", 2023-10-24 21:02:38 +02:00
DJ2LS 00bdcff28d test with universal build 2023-10-24 20:18:17 +02:00
DJ2LS a9468a9fd5 version update 2023-10-24 19:41:54 +02:00
DJ2LS 86a38e94ef version update 2023-10-24 19:41:17 +02:00
LA3QMA 72702294c7 Changed "tnc" to "modem" 2023-10-24 19:15:32 +02:00
dependabot[bot] 84613e6eb2
Bump electron-log from 4.4.8 to 5.0.0 in /gui
Bumps [electron-log](https://github.com/megahertz/electron-log) from 4.4.8 to 5.0.0.
- [Changelog](https://github.com/megahertz/electron-log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/megahertz/electron-log/compare/v4.4.8...v5.0.0)

---
updated-dependencies:
- dependency-name: electron-log
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-24 16:34:16 +00:00
DJ2LS 0a8cc3ade7 version update 2023-10-24 17:47:59 +02:00
DJ2LS c417886b8b
Merge pull request #490 from DJ2LS/dependabot/github_actions/actions/setup-node-4
Bump actions/setup-node from 3 to 4
2023-10-23 21:06:12 +02:00
DJ2LS 342213d2f2
Merge branch 'main' into dependabot/github_actions/actions/setup-node-4 2023-10-23 21:06:02 +02:00
DJ2LS 3bcb21326c
Merge pull request #495 from DJ2LS/ls-modem
fix error where stopping the modem wasnt possible
2023-10-23 21:05:48 +02:00
DJ2LS 03e5fe5001
Merge pull request #489 from DJ2LS/ls-gui-single-pager
fix #487
2023-10-23 21:05:37 +02:00
DJ2LS f7da708519 remove git parameters from npm start 2023-10-23 21:04:48 +02:00
DJ2LS e41d6d6ea2
Merge branch 'main' into dependabot/github_actions/actions/setup-node-4 2023-10-23 21:02:31 +02:00
DJ2LS ea4d0f21f9
Merge branch 'main' into ls-modem 2023-10-23 21:02:21 +02:00
DJ2LS bd35c2c8bc
Merge branch 'main' into ls-gui-single-pager 2023-10-23 21:02:05 +02:00
DJ2LS cd0b2132fd
Merge pull request #488 from DJ2LS/ls-github-action
publish modem data as draft
2023-10-23 21:01:47 +02:00
DJ2LS 8de7303543
Merge branch 'main' into ls-github-action 2023-10-23 21:01:11 +02:00
codefactor-io ba95ef2d64
[CodeFactor] Apply fixes to commit 4d40b59 2023-10-23 18:56:11 +00:00
DJ2LS 4d40b59303 fix error where stopping the modem wasnt possible 2023-10-23 20:55:22 +02:00
DJ2LS 5b093256fb
Merge pull request #494 from DJ2LS/ls-mesh
mesh bug fixes
2023-10-23 20:43:57 +02:00
DJ2LS 31cbdbeaf0 closes 471 2023-10-23 20:42:20 +02:00
DJ2LS e2da509898 closes 492 2023-10-23 20:16:02 +02:00
dependabot[bot] ee3dc8f853
Bump actions/setup-node from 3 to 4
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 16:55:16 +00:00
DJ2LS b7fed0c095 fix closes #487 2023-10-23 15:01:04 +02:00
DJ2LS 38caea01f5 publish modem data as draft 2023-10-23 14:39:43 +02:00
DJ2LS 9cb5134737 version update 2023-10-23 13:36:10 +02:00
DJ2LS 8f1d7d2918
Merge pull request #486 from DJ2LS/ls-github-action
adjustment to build process
2023-10-23 13:35:28 +02:00
DJ2LS a473199954 await arm builds before continuing 2023-10-23 13:06:55 +02:00
DJ2LS 5fbb256969 added arm64 arch 2023-10-23 13:00:24 +02:00
DJ2LS ef3fa71982 test with universal builds 2023-10-23 12:34:58 +02:00
DJ2LS 053215a6bb final build test 2023-10-23 12:24:38 +02:00
DJ2LS 4dc5a482e0 tried to disable default notarization 2023-10-23 12:01:18 +02:00
DJ2LS 1efd6d5439 another tool test 2023-10-23 12:00:52 +02:00
DJ2LS ef98046313 moved back to default 2023-10-23 11:59:36 +02:00
DJ2LS 920e46754b adjusted electorn builder config 2023-10-23 11:21:02 +02:00
DJ2LS 6be61b8706 test with notarize options in electron builder 2023-10-23 10:14:50 +02:00
DJ2LS 5d6f677a5e adjusted build step again 2023-10-23 09:46:56 +02:00
DJ2LS f153b1dbf1 forgot to use new build step 2023-10-23 09:19:16 +02:00
DJ2LS 56de66e68e test with universal support 2023-10-23 09:17:44 +02:00
DJ2LS c6e3d9169e adjustment to build process 2023-10-23 08:52:26 +02:00
DJ2LS 37702af344 Prettified Code! 2023-10-22 22:23:23 +00:00
DJ2LS 4f2671c359
Merge pull request #473 from DJ2LS/ls-gui-single-pager
GUI sidebar & GUI single pager & VueJS + Vite + Typescript
2023-10-23 00:22:52 +02:00
DJ2LS f869bc9db2 "tool: notarytool" for notarize 2023-10-23 00:22:25 +02:00
DJ2LS 890bceeb0b "tool: notarytool" for notarize 2023-10-22 23:54:13 +02:00
DJ2LS 377b3bc211 "tool: notarytool" for notarize 2023-10-22 23:40:02 +02:00
DJ2LS 351283b776 added team id for notarization 2023-10-22 22:46:13 +02:00
DJ2LS 01d242a53c adjusted electron builder 2023-10-22 22:23:07 +02:00
DJ2LS 260a6850de adjusted electron builder 2023-10-22 22:21:19 +02:00
DJ2LS dd4e158586 adjusted electron builder 2023-10-22 22:01:25 +02:00
DJ2LS ec83edeb1f adjusted electron builder 2023-10-22 21:55:34 +02:00
DJ2LS 7f411d6365 test with new notarization for macos 2023-10-22 21:42:29 +02:00
DJ2LS 462db658b6 fixed daemon process handler 2023-10-22 21:32:28 +02:00
DJ2LS 3baaf127b0 another testing some manual building 2023-10-22 21:06:34 +02:00
DJ2LS 27f7cef2b3 another testing some manual building 2023-10-22 20:51:21 +02:00
DJ2LS a22f6fb4a4 revert testing some manual building 2023-10-22 20:10:43 +02:00
DJ2LS 33b7b395e5 testing some manual building 2023-10-22 19:49:20 +02:00
DJ2LS 85fa22fd78 testing some manual building 2023-10-22 19:43:22 +02:00
DJ2LS 95f50e84aa testing some manual building 2023-10-22 19:37:25 +02:00
DJ2LS f6c37ff6f5 some github action adjustments 2023-10-22 18:51:07 +02:00
DJ2LS f1c2fad8c4 some typescript fixing 2023-10-22 15:52:30 +02:00
codefactor-io af5b1a2d8e
[CodeFactor] Apply fixes to commit 739f8c4 2023-10-22 13:44:32 +00:00
DJ2LS 739f8c4e13 and even more linting... 2023-10-22 15:44:05 +02:00
codefactor-io fee05653c1
[CodeFactor] Apply fixes to commit 783c47f 2023-10-22 13:24:34 +00:00
DJ2LS 783c47f9ef much more linting... 2023-10-22 15:24:02 +02:00
codefactor-io bdf7f546a8
[CodeFactor] Apply fixes 2023-10-22 12:51:07 +00:00
DJ2LS fabec55605 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager
# Conflicts:
#	gui/src/js/sock.js
2023-10-22 14:50:22 +02:00
DJ2LS bc62355f10 improved message stats 2023-10-22 14:49:33 +02:00
codefactor-io ec67ec6f72
[CodeFactor] Apply fixes to commit bb9d29d 2023-10-22 10:54:41 +00:00
DJ2LS bb9d29d3b4 even more linting 2023-10-22 12:54:11 +02:00
codefactor-io d373660502
[CodeFactor] Apply fixes 2023-10-22 10:31:56 +00:00
DJ2LS 685575be77 ctest bug fix 2023-10-22 12:28:32 +02:00
DJ2LS 381da4c98a linting... 2023-10-22 12:17:58 +02:00
DJ2LS fe575eb31b added @popperjs/core 2023-10-22 12:08:14 +02:00
DJ2LS cf36f72660 fixed some ctests 2023-10-22 12:03:22 +02:00
DJ2LS 67849c8069 fixed some ctests 2023-10-22 11:55:22 +02:00
DJ2LS 1463224318 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager 2023-10-22 11:22:28 +02:00
DJ2LS a06bc031d4 some more linting.. 2023-10-22 11:22:21 +02:00
codefactor-io c07d7c106f
[CodeFactor] Apply fixes to commit 290a026 2023-10-22 09:19:58 +00:00
DJ2LS 290a026932 some more linting.. 2023-10-22 11:19:25 +02:00
DJ2LS 36a50fa02b some mire linting.. 2023-10-22 11:13:02 +02:00
DJ2LS 09786e8b28 adjusted build action for macos m1 runner 2023-10-22 10:50:15 +02:00
DJ2LS 45e6430bff add mac entitlements.plist 2023-10-22 10:34:44 +02:00
DJ2LS 009087f27a more tnc to modem renaming 2023-10-22 10:32:23 +02:00
DJ2LS dfb5dd2903 more tnc to modem renaming 2023-10-22 10:31:14 +02:00
DJ2LS ff82b0e0f4 renamed gui_vue to gui 2023-10-22 10:20:32 +02:00
DJ2LS 2684d3be39 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager 2023-10-22 10:16:56 +02:00
DJ2LS 777e9d0182 more code linting 2023-10-22 10:15:43 +02:00
codefactor-io 3620fe93aa
[CodeFactor] Apply fixes to commit 115a59d 2023-10-22 08:15:23 +00:00
DJ2LS 115a59d275 some ts fix after linting 2023-10-22 10:14:42 +02:00
codefactor-io 90401e7df5
[CodeFactor] Apply fixes 2023-10-22 08:12:00 +00:00
DJ2LS c39af3f830 moved from TODO: to TODO 2023-10-22 10:04:10 +02:00
DJ2LS 8e46485d8a fixed some tests 2023-10-22 10:00:37 +02:00
DJ2LS 9e1b4b6c25 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager 2023-10-22 09:52:29 +02:00
DJ2LS c43524d2d8 fixed ctest folder 2023-10-22 09:50:17 +02:00
Mashintime 0d659afdf2 Revert change made 2023-10-22 03:40:04 -04:00
DJ2LS 4f780f3c2b bigger default screen size 2023-10-22 09:37:01 +02:00
DJ2LS e90f819cb2 bigger default screen size 2023-10-22 09:36:34 +02:00
DJ2LS 22becd5485 bigger default screen size 2023-10-22 09:35:40 +02:00
Mashintime ca726288af Update gitignore 2023-10-22 03:00:37 -04:00
Mashintime 47af62d006 Fix a few issues with chat handler and indexes 2023-10-22 02:45:36 -04:00
Mashintime 8bf17da934 Rigctl tweaks, open rigcltd in own window on win 2023-10-21 22:04:32 -04:00
Mashintime cfb4719fec daemon.ts 2023-10-21 21:11:37 -04:00
Mashintime 872c37d681 Prepare for ts conversion of daemon.js 2023-10-21 21:09:44 -04:00
Mashintime 929211c7e2 Added ignore option to rigctl device port 2023-10-21 18:00:48 -04:00
Mashintime 72255f7959 Only display info if libcodec2 can't be loaded 2023-10-21 16:51:40 -04:00
DJ2LS 99414af31d some more typescript conversion 2023-10-21 13:44:42 +02:00
DJ2LS c07e0e05db more typescript cheating... 2023-10-21 13:34:26 +02:00
DJ2LS fc35d5265a adjusted databse functions 2023-10-21 13:05:50 +02:00
DJ2LS 080b63191e implemented auto response 2023-10-21 12:59:26 +02:00
DJ2LS e4642fc49d possible fix of broadcast 2023-10-21 12:11:06 +02:00
DJ2LS df3be3134d preselect rigctld device 2023-10-21 11:51:54 +02:00
DJ2LS df95f4b82c preselect tx/rx audio device 2023-10-21 11:45:45 +02:00
DJ2LS 3df0265ffc changed builder output 2023-10-20 21:59:54 +02:00
DJ2LS fd172c1962 fixed daemon startup on app launch 2023-10-20 21:58:03 +02:00
DJ2LS 487d89f9f3 updated build config 2023-10-20 21:26:59 +02:00
DJ2LS 1adb4f1890 updated github action 2023-10-20 21:13:55 +02:00
DJ2LS bb512c123e adjusted electron builder process 2023-10-20 21:11:09 +02:00
DJ2LS badb521b8b fixed auto updater 2023-10-20 20:56:52 +02:00
DJ2LS a7eada0649 js to ts conversion... 2023-10-20 19:02:40 +02:00
Mashintime 6c07eb596f Typo fix 2023-10-20 10:45:11 -04:00
DJ2LS 5a867d7508 forgot a tnc to modem change .. 2023-10-20 14:29:24 +02:00
DJ2LS c16bc45c53 forgot a tnc to modem change .. 2023-10-20 14:19:31 +02:00
DJ2LS b0ed3d2474 forgot a tnc to modem change .. 2023-10-20 14:14:17 +02:00
DJ2LS 5d0d008cdc deleted tnc folder, moved to modem folder 2023-10-20 14:12:20 +02:00
DJ2LS b11e820ebc gui related renaning TNC -> Modem 2023-10-20 13:47:42 +02:00
Mashintime 0cb16805bd Toast tweaks 2023-10-19 21:41:09 -04:00
Mashintime 7856b4df10 Tooltip tweaks 2023-10-19 21:40:54 -04:00
DJ2LS 678c69732c some gui polishing 2023-10-19 16:54:24 +02:00
Mashintime aa8abf021e Fix message sorting 2023-10-18 23:55:24 -04:00
Mashintime c55595484b Shorten freq in footer navbar 2023-10-18 23:50:52 -04:00
DJ2LS ba695aae7d small gui update 2023-10-18 21:36:38 +02:00
DJ2LS f6c7226dac updated dependabot 2023-10-18 21:26:09 +02:00
DJ2LS eae42e9b5a first attempt of saving data 2023-10-18 21:19:18 +02:00
DJ2LS 1b878089d4 updated toasts 2023-10-18 14:40:33 +02:00
DJ2LS 34a4b30f10 redesign of message transmission, implement retransmit 2023-10-18 14:29:51 +02:00
DJ2LS 1a6c41a479 attempt making unread message counter working 2023-10-18 13:45:57 +02:00
DJ2LS 053eec4340 adjusted database cleanup 2023-10-17 15:47:30 +02:00
DJ2LS f87c6e61b4 adjusted busy slot visualisation 2023-10-17 15:32:28 +02:00
DJ2LS 854b2a464a fixed a blocking state for starting processes 2023-10-17 14:49:13 +02:00
DJ2LS f6b97e3f31 fixed a blocking state for starting processes 2023-10-17 14:47:03 +02:00
DJ2LS 5f48dff549 fixed dataclass handling and process states 2023-10-17 14:30:34 +02:00
DJ2LS 7304246f69 fixed rigctld daemon port 2023-10-17 12:11:27 +02:00
DJ2LS 77fc7bdd2f combine git pull, npm i with npm start 2023-10-17 11:26:58 +02:00
DJ2LS 704f136aff run dependabot for vue js gui 2023-10-17 08:49:54 +02:00
DJ2LS 29ddfa2f84
Merge branch 'main' into ls-gui-single-pager 2023-10-16 21:16:01 +02:00
DJ2LS ec414b91c0
Merge pull request #483 from DJ2LS/dependabot/npm_and_yarn/gui/electron-27.0.0 2023-10-16 21:15:44 +02:00
DJ2LS 447bc4dd3b some more beacon histogram adjustment 2023-10-16 18:47:01 +02:00
DJ2LS d8f70c2c6e slightly adjusted beacon histogram 2023-10-16 18:44:09 +02:00
DJ2LS b93a6a57f2 message info for received messages 2023-10-16 17:26:28 +02:00
Mashintime 9184565d3f Fix duplicate messages. 2023-10-15 21:36:56 -04:00
Mashintime 59fb66dc0b Allow pressing enter to send chat messages. 2023-10-15 21:33:03 -04:00
Mashintime 8cba7b6486 submit new dx chat with enter 2023-10-15 21:03:12 -04:00
DJ2LS 6aa58d5837 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager 2023-10-15 09:57:46 +02:00
DJ2LS 2ef289221c implementing databse cleanup on startup 2023-10-15 09:57:35 +02:00
Mashintime 0b087daed0 Fix typo 2023-10-15 03:56:26 -04:00
Mashintime 6d59b79876 Rigctld launching fixes 2023-10-15 03:32:44 -04:00
DJ2LS c453b599c0 use sub menu for deleting chats 2023-10-15 08:25:58 +02:00
DJ2LS e1df2ab141 adjusted rigcontrol settings 2023-10-15 07:37:28 +02:00
DJ2LS 8e79ba4c33 disabled settings not yet implemented 2023-10-15 07:37:15 +02:00
DJ2LS bdc9ddf50b show message info 2023-10-14 15:32:30 +02:00
DJ2LS cae51b2ad4 adjusted receiving of new message 2023-10-11 20:39:35 +02:00
DJ2LS 219f53208d fixed tnc startup 2023-10-11 20:26:50 +02:00
DJ2LS 7a381bf46d first attempt requesting buffer data from tnc 2023-10-11 20:26:44 +02:00
DJ2LS 4761140ba9 adjusted message output 2023-10-11 11:22:29 +02:00
DJ2LS 4e667d37b7 adjusted beacon histogram 2023-10-11 11:18:48 +02:00
Mashintime cdcaa044cd Fix for new messages not showing--needs testing 2023-10-10 22:28:53 -04:00
Mashintime a0886e1937 Re-arrange updateallchat() logic re: beacon_list 2023-10-10 16:45:10 -04:00
Mashintime d96c6a818e Less logging 2023-10-10 16:28:35 -04:00
Mashintime fd12e37622 Fix beacon chart in updateallchat() 2023-10-10 16:25:03 -04:00
Mashintime c62ded9a79 Disable chat filter for now 2023-10-10 16:21:12 -04:00
dependabot[bot] d0d51a6823
Bump electron from 26.3.0 to 27.0.0 in /gui
Bumps [electron](https://github.com/electron/electron) from 26.3.0 to 27.0.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v26.3.0...v27.0.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-10 16:53:18 +00:00
DJ2LS 7ff2e55d11 first working waterfall 2023-10-09 16:11:01 +02:00
DJ2LS 4cd857902c possibly fixed background problem 2023-10-09 10:20:52 +02:00
DJ2LS a321f75f80 improved rigctld command stack 2023-10-08 23:24:06 +02:00
DJ2LS 73910afd2d added early version of rigctld command stack 2023-10-08 23:11:07 +02:00
DJ2LS c36933d622 adjusted daemon for starting rigctld 2023-10-08 22:09:09 +02:00
DJ2LS 53dd156a3d allow tnc starting and stopping rigctld 2023-10-08 21:09:30 +02:00
DJ2LS 17d012db9d possibly implemented auto updater 2023-10-08 19:58:35 +02:00
Mashintime 69dba4487f Merge branch 'ls-gui-single-pager' of github.com:DJ2LS/FreeDATA into ls-gui-single-pager 2023-10-08 09:09:46 -04:00
DJ2LS 30d4d70b75 fixed app icon for ubuntu 2023-10-08 10:41:51 +02:00
DJ2LS b35f8811ae fixed preload icon 2023-10-08 10:37:14 +02:00
DJ2LS 9fc3eca63b fixed app data folder when running in build environment 2023-10-08 10:33:54 +02:00
DJ2LS 1f8d0800ba adjusted build process and made freedata imports working 2023-10-08 09:57:03 +02:00
Mashintime 6ef8fbefb4 Version info and clicable links in about section 2023-10-06 23:45:53 -04:00
Mashintime 3a4de02569 Added a few more modes to rig contrl mode dropdown 2023-10-05 22:51:00 -04:00
Mashintime df59c814f2 Fix dbfs_level meter value not updating 2023-10-05 22:32:34 -04:00
Mashintime eb7122dc0f Some helper scripts for windows 2023-10-05 22:31:46 -04:00
DJ2LS a09cfd89e9 preparings for builder 2023-10-04 23:34:36 +02:00
DJ2LS c55585919c finally all linting ready for doing build tests 2023-10-04 22:38:55 +02:00
DJ2LS b248bd6e88 and even more linting... 2023-10-04 22:12:51 +02:00
DJ2LS dc40c6d5a2 fix package json 2023-10-04 21:54:10 +02:00
DJ2LS 21c4613c93 linting 2023-10-04 20:08:40 +02:00
DJ2LS 67d7588688 adjusted build system 2023-10-04 19:54:50 +02:00
DJ2LS 80c61eab04 and more linting related changes 2023-10-03 21:28:24 +02:00
DJ2LS 4f080d2640 more linting fixes 2023-10-03 21:04:37 +02:00
DJ2LS a75c6d72f0 added eslint conf 2023-10-03 15:16:51 +02:00
DJ2LS 37c176ff41 some code linting 2023-10-03 15:15:17 +02:00
DJ2LS b49c223dd2 implemented stop transmissions 2023-10-03 10:34:25 +02:00
DJ2LS 2cd8eb7584 implemented stop transmissions 2023-10-03 10:32:01 +02:00
DJ2LS 14e4ba136a code cleanup 2023-10-02 20:50:24 +02:00
DJ2LS 96a868aad2 and another attempt with stats 2023-10-02 20:23:02 +02:00
DJ2LS bc60f61eaa adjusted stats 2023-10-02 20:16:07 +02:00
DJ2LS 4b23e40aae adjusted stats 2023-10-02 20:02:56 +02:00
DJ2LS e3a4989223 adjusting modals 2023-10-02 15:18:29 +02:00
DJ2LS 8470f412df fixed size calculation for empty charts 2023-10-02 14:55:43 +02:00
DJ2LS 05fe23564f ignore default callsign 2023-10-02 14:50:39 +02:00
DJ2LS 5909f6912c attempt fixing charts 2023-10-02 14:45:47 +02:00
DJ2LS 43162ff476 first working attempt of updating chat message status 2023-10-02 09:50:52 +02:00
DJ2LS 593c15f48f first working beacon to chart attempt 2023-10-01 13:24:54 +02:00
DJ2LS 43cd15ecc6 timeout indicator now functional 2023-09-30 21:57:23 +02:00
DJ2LS 87388268e3 several adjustments to beacon and progressbars 2023-09-30 20:30:19 +02:00
DJ2LS 0deb074df7 increased tnc version and added timeleft for timeout indicator 2023-09-30 20:29:55 +02:00
DJ2LS 0de71f4e6c saving idea of beacon displaying - not functional yet 2023-09-29 12:27:38 +02:00
DJ2LS 5d75e62998 implementing scatter and speedChart - not yet working correctly 2023-09-29 10:26:27 +02:00
DJ2LS 35689284d5 broadcast transmission stuff 2023-09-27 16:55:57 +02:00
DJ2LS 5c551812e6 add broadcast message components 2023-09-27 14:51:33 +02:00
DJ2LS 627a090910 adjusted chat buttons 2023-09-27 14:30:47 +02:00
DJ2LS 3064075efa
Merge branch 'main' into ls-gui-single-pager 2023-09-27 11:25:26 +02:00
DJ2LS 4349c5f013
Merge pull request #476 from DJ2LS/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-09-27 11:25:13 +02:00
DJ2LS 9e836c765b
Merge branch 'main' into ls-gui-single-pager 2023-09-27 11:24:29 +02:00
DJ2LS edde2fbc91 Prettified Code! 2023-09-27 09:24:26 +00:00
DJ2LS 89abba8150
Merge pull request #463 from DJ2LS/ls-hmac-signing
token based hmac signing

Merging this, but needs some updates later after VueJS PR has been merged
2023-09-27 11:24:07 +02:00
Mashintime b3e1315db1 Ignore gui_vue/node_modules 2023-09-23 00:56:48 -04:00
Mashintime 14798a4be8 Tweaks to s-meter and audio dbfs meter. Also small tweak to footer busy icon. 2023-09-23 00:47:36 -04:00
DJ2LS 8fa79c2bf8 first deleting of messages 2023-09-22 23:21:44 +02:00
DJ2LS 6924c31b04 first disaplaying of files in messages 2023-09-21 23:04:12 +02:00
DJ2LS 06b7a79b6f adjusted file attachment 2023-09-21 14:17:03 +02:00
DJ2LS 80a06026ee slightly adjusted callsign list 2023-09-20 20:59:29 +02:00
DJ2LS ab7a9598ac fixing progressbars 2023-09-20 20:38:21 +02:00
DJ2LS be702cc92a adjusted footer navbar 2023-09-20 19:19:50 +02:00
DJ2LS e26963770e working toasts 2023-09-20 19:19:10 +02:00
DJ2LS 3d2a13f1aa first attempt with saving received messages 2023-09-20 14:06:16 +02:00
DJ2LS 90a28484c0 hide modules not ready 2023-09-20 07:37:32 +02:00
DJ2LS d8e392ddba first success with storing messages 2023-09-20 06:46:37 +02:00
DJ2LS 3d5cd58e9b busy detection in footer navbar as well 2023-09-16 13:45:43 +02:00
DJ2LS e68a2aab2a adjusted chat 2023-09-14 22:45:29 +02:00
DJ2LS 4e796909c7 delete chat messages 2023-09-14 21:45:07 +02:00
DJ2LS a3fb40bc82 adjusted chat messages 2023-09-14 21:17:05 +02:00
DJ2LS 8f41752c1d first success with displaying messages 2023-09-13 23:28:20 +02:00
DJ2LS a8e6cb889b fixed tnc startup 2023-09-13 19:33:03 +02:00
DJ2LS 8b2c407725 first test with displaying sorted messages 2023-09-12 22:49:41 +02:00
DJ2LS 0f2b48419d first test run with chat module 2023-09-12 17:52:16 +02:00
DJ2LS f1b3e2937d fixed heard stations 2023-09-12 14:10:19 +02:00
DJ2LS 7bc7e155e9 fixed busy state 2023-09-11 17:13:15 +02:00
DJ2LS b4eafeae3c updated busy state 2023-09-11 17:08:56 +02:00
DJ2LS 85fccc9ca7 fixed rig control 2023-09-11 16:53:24 +02:00
DJ2LS c7b07411d7 fixed audio tuning and recording 2023-09-11 16:09:17 +02:00
DJ2LS d579dcf60a fixed typo 2023-09-10 15:07:12 +02:00
DJ2LS 278d0750ff added functionality to ping, beacon, cq 2023-09-10 15:05:28 +02:00
DJ2LS 0a808ea69a fixed start/stop 2023-09-10 14:23:26 +02:00
DJ2LS 5de47ce6b8 fixing wrong daemon port 2023-09-10 08:47:12 +02:00
DJ2LS 0ce6a7b2d4 using dependabot for vuejs 2023-09-10 08:46:51 +02:00
DJ2LS 48b0acbc60 adjusted top navbar 2023-09-10 08:23:40 +02:00
DJ2LS 56d2cd7ca4 added waterfall to assets list 2023-09-09 20:29:47 +02:00
DJ2LS 8493ff18ea and more changes... 2023-09-09 20:15:02 +02:00
DJ2LS 38cbd8d503 more modular code 2023-09-09 19:01:19 +02:00
DJ2LS af513864a2 more modular code 2023-09-09 19:01:10 +02:00
DJ2LS f5a9528534 added heard stations first test 2023-09-09 18:48:35 +02:00
DJ2LS 2b7cb3c428 adjustment to footer info bar 2023-09-09 18:29:32 +02:00
DJ2LS d41a9acbad adjusted remote tnc connection 2023-09-09 07:48:29 +02:00
DJ2LS 591d29cc20 add build files 2023-09-07 16:12:04 +02:00
DJ2LS 5eee5633d5 added rig control and more modularity to footer navbar 2023-09-07 10:47:33 +02:00
DJ2LS 98bcfacdbc start/stop tnc 2023-09-06 23:04:24 +02:00
DJ2LS 3283717a59 fixed radiocontrol 2023-09-06 22:20:18 +02:00
DJ2LS 4f984c1364 fixed settings 2023-09-06 21:03:23 +02:00
DJ2LS 03778ba002 use only memory settings instead for daemon and sock 2023-09-06 15:36:54 +02:00
DJ2LS 6c661d9863 save settings to file on change 2023-09-06 14:48:45 +02:00
DJ2LS c5262bb165 adjusted settings 2023-09-06 12:23:20 +02:00
DJ2LS 8652643f5b smaller gui updates 2023-09-05 21:06:48 +02:00
DJ2LS 9b502fa50c fancy startup animation 2023-09-05 20:32:12 +02:00
DJ2LS 16b445afc2 first working state toggle for tnc connection 2023-09-05 20:20:24 +02:00
DJ2LS 00a4803f00 first attempt getting sock working 2023-09-05 19:35:54 +02:00
DJ2LS e9d8b786b1 file cleanup 2023-09-05 15:30:02 +02:00
DJ2LS 56f2fdeb89 improved main screen, reduced errors 2023-09-05 15:28:58 +02:00
DJ2LS 020e4cb033 first test using pinia 2023-09-05 11:22:00 +02:00
dependabot[bot] bbede074e9
Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 16:48:16 +00:00
DJ2LS 08756650c2 updated package json 2023-09-02 14:11:06 +02:00
DJ2LS 6567b34fb2 first VueJS code splitting attempt... 2023-09-02 14:03:50 +02:00
DJ2LS 40461517e9 added vuejs test 2023-09-02 13:37:03 +02:00
DJ2LS a5387c0e4d removed logviewer 2023-09-01 17:44:12 +02:00
DJ2LS 6d019d78c3 fix main not starting 2023-08-30 17:02:08 +02:00
DJ2LS 9a1fca513d smaller gui fixes 2023-08-27 21:23:40 +02:00
DJ2LS 5311585db6 fixed dark mode 2023-08-27 21:19:02 +02:00
DJ2LS e1c66c09e7 delete chat without reload entire screen 2023-08-27 21:10:11 +02:00
DJ2LS c39af02e97 cleanup 2023-08-27 21:05:51 +02:00
DJ2LS 0a0e89a1bc attempt fixing unread message indicator 2023-08-27 20:57:51 +02:00
DJ2LS 8cee9a5833 fixed IPC requests 2023-08-27 20:41:25 +02:00
DJ2LS 8585ed7d88 fixed emoji picker 2023-08-27 20:32:28 +02:00
DJ2LS 37e38e9be9 update fft only if data available 2023-08-27 20:20:11 +02:00
DJ2LS 67774765f5 adjusted settings 2023-08-27 19:19:07 +02:00
DJ2LS 67e4e4c142 adjusted info screen 2023-08-27 19:09:19 +02:00
DJ2LS ea4dfba4c6 small chat cleanup 2023-08-27 18:39:54 +02:00
DJ2LS 819bda5963 moved toast for global availability 2023-08-27 18:19:37 +02:00
DJ2LS ba6989159b moved stop button 2023-08-27 17:45:19 +02:00
DJ2LS 2f3912c1bf removed network module 2023-08-27 17:17:02 +02:00
DJ2LS ca07e2393d moved log module 2023-08-27 17:15:14 +02:00
DJ2LS 4d9415213b moved mesh module 2023-08-27 17:13:55 +02:00
DJ2LS 6b67c93420 adjusted icons 2023-08-27 16:57:25 +02:00
DJ2LS e3ab15fe50 Merge remote-tracking branch 'origin/ls-gui-single-pager' into ls-gui-single-pager 2023-08-27 15:52:28 +02:00
DJ2LS e97d3724a5
Merge branch 'main' into ls-gui-single-pager 2023-08-27 15:51:39 +02:00
DJ2LS d74ff49b55 first attempt moving chat to main - still broken 2023-08-27 15:47:10 +02:00
DJ2LS 67584af06b
Merge branch 'main' into ls-hmac-signing 2023-08-27 15:13:55 +02:00
DJ2LS 8919e45967 Prettified Code! 2023-08-27 13:13:49 +00:00
DJ2LS c4ce7d4e82
Merge branch 'main' into ls-gui-single-pager 2023-08-27 15:13:42 +02:00
DJ2LS e225e14c84
Merge pull request #472 from DJ2LS/qm-bugs
Various bug fixes
2023-08-27 15:13:33 +02:00
DJ2LS f3e9a54216 adjusted footer bar 2023-08-27 15:12:24 +02:00
DJ2LS 279c1bbf14 moved settings, info, network 2023-08-27 15:04:22 +02:00
DJ2LS ae10f27a05 initial test with sidebar 2023-08-27 14:17:31 +02:00
Mashintime eb76b1aa2e Merge branch 'main' into qm-bugs 2023-08-26 23:37:16 -04:00
Mashintime 19697da88b Set channel_busy if not set and codec2 data is detected 2023-08-26 23:32:38 -04:00
Mashintime a637a7f8ee Rework channel busy delay logic 2023-08-26 23:15:22 -04:00
DJ2LS 48e5252a7c fixed a bug with attempts and chat index 2023-08-26 17:27:21 +02:00
DJ2LS 5da63c197f fixed gui for saving hmac state 2023-08-26 17:05:24 +02:00
DJ2LS d10cfe43ec more file related fixes 2023-08-26 16:56:45 +02:00
DJ2LS a1e32cca1b adjusted filepath lookup 2023-08-26 16:41:08 +02:00
DJ2LS 8b09b7afaf adjusted filepath lookup 2023-08-26 16:36:24 +02:00
DJ2LS 48c41bb3dc fixed wrong file name for tokenfile 2023-08-26 16:18:53 +02:00
DJ2LS 4e185ea612 improved logging 2023-08-26 16:16:48 +02:00
DJ2LS 9a9f636562 improved logging 2023-08-26 16:13:51 +02:00
DJ2LS b382d37f20 adjusted token generator 2023-08-26 15:52:29 +02:00
DJ2LS d40742bc08 fixed handling hmac bool for network message 2023-08-24 07:50:44 +02:00
DJ2LS d2da32a8dc adjusted mesh timing table 2023-08-20 14:09:05 +02:00
DJ2LS 8c9be9e9f3 possible mesh fix... 2023-08-20 14:08:49 +02:00
DJ2LS cff449cfad adjusted gui for hmac 2023-08-19 11:10:04 +02:00
DJ2LS a0754b3f94 updated logging 2023-08-19 10:54:39 +02:00
DJ2LS 4d605106c8 updated logging 2023-08-19 10:54:36 +02:00
DJ2LS 6efde55a3b enable hmac by default 2023-08-19 10:42:53 +02:00
DJ2LS 45a8b19d60 updated hmac creation tool 2023-08-19 10:41:02 +02:00
DJ2LS 3aa4123596 adjusted version 2023-08-19 10:34:06 +02:00
DJ2LS 2bd8a30812 check for filesize and if empty 2023-08-19 10:32:53 +02:00
DJ2LS 0107ce569f
Merge branch 'main' into ls-hmac-signing 2023-08-19 10:19:22 +02:00
DJ2LS 54fe725876
Merge pull request #467 from DJ2LS/dependabot/npm_and_yarn/gui/electron-26.0.0
Bump electron from 25.5.0 to 26.0.0 in /gui
2023-08-19 10:19:14 +02:00
DJ2LS 943cfafe61 disable pylint fixme for data_handler 2023-08-18 08:29:26 +02:00
DJ2LS 93d2714298 fixed testing code... 2023-08-18 08:16:48 +02:00
DJ2LS c33522870e moved hmac keys to hmac subfolder 2023-08-18 08:10:17 +02:00
DJ2LS a42bb325a1
Merge branch 'main' into ls-hmac-signing 2023-08-16 10:15:07 +02:00
DJ2LS cf5e359c3e first working hmac signing 2023-08-16 09:58:49 +02:00
dependabot[bot] 1cf29d7141
Bump electron from 25.5.0 to 26.0.0 in /gui
Bumps [electron](https://github.com/electron/electron) from 25.5.0 to 26.0.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v25.5.0...v26.0.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-15 16:51:18 +00:00
Mashintime 389e1e7676 Pasted comment in the wrong spot 2023-08-12 10:43:08 -04:00
Mashintime 299ae1e44d Check for waitingmsgs on ipcrenderer message instead of when adding to chat window to prevent refresh causing waitingmsgs to be triggered 2023-08-11 22:21:11 -04:00
Mashintime c03b4b0cd9 Update logging in check for waitingmsgs 2023-08-09 21:56:09 -04:00
Mashintime f29efac943 Fix for #466 2023-08-08 21:11:10 -04:00
Mashintime ccce4cfe63 Fix for messages not resetting when stuck in transmitting 2023-08-08 16:32:35 -04:00
DJ2LS 3b7914eed7
Update dependabot.yml
attempt for updating package.json via dependabot
2023-08-08 08:37:16 +02:00
DJ2LS cb813ba402 improved logging 2023-08-08 08:27:22 +02:00
DJ2LS 1bdf070dfe fixed filenames 2023-08-07 20:28:19 +02:00
DJ2LS 467c6af913
Merge branch 'main' into ls-hmac-signing 2023-08-07 19:38:18 +02:00
Mashintime ed4901830d Version bump 2023-08-07 13:12:28 -04:00
Mashintime 62620f4f9c Prettified Code! 2023-08-07 17:04:04 +00:00
Mashintime 41554904e5
Merge pull request #464 from DJ2LS/actions2
gui updates and github actions
2023-08-07 13:03:42 -04:00
DJ2LS 3a47375855 udpated hmac code signing - stil not working I guess 2023-08-07 17:03:39 +02:00
DJ2LS 52b4478f22 udpated hmac code signing - stil not working I guess 2023-08-07 16:59:59 +02:00
Mashintime 70c56487f4 Try fixing mac build 2023-08-07 10:53:12 -04:00
DJ2LS 338dbc1d92 first code for using hmac token based signing for data 2023-08-06 23:08:55 +02:00
Mashintime 25148be751 Try forcing a specifc version of node 2023-08-06 16:47:11 -04:00
Mashintime 9ef9f1b556 Reset speed level to current value if chan is busy. 2023-08-06 13:48:42 -04:00
Mashintime 4b1c19a1f6 Update gui package requirements 2023-08-06 13:47:52 -04:00
DJ2LS 18f4f699f4 updated python to 3.11 2023-08-04 09:25:46 +02:00
Mashintime 8b5a0d9c02 Fix branch checkout name 2023-07-30 12:39:38 -04:00
Mashintime 484dc5fa59 Fix another 1.1 reference 2023-07-30 12:33:46 -04:00
Mashintime 4b016e0303 Update build for codec1.2 2023-07-30 12:27:01 -04:00
Mashintime 5f3050c3db Make release versions of codec2 2023-07-30 12:19:49 -04:00
Mashintime 321e241ddd Less logging 2023-07-30 10:46:02 -04:00
Mashintime d293d424dc No uuid on opening messages. 2023-07-30 00:40:02 -04:00
Mashintime 7d61873bf2 Update check to only trigger if message is older than 6 hours 2023-07-30 00:38:49 -04:00
Mashintime 129a6bd612 Fix messages stuck in transmitting and at 100% 2023-07-29 09:57:42 -04:00
Mashintime 144f03f997 Include bc in chat filter 2023-07-29 09:53:14 -04:00
Mashintime d6ae766cf4 Move updatechat to dcomcontentloaded event 2023-07-29 09:52:04 -04:00
Mashintime 7332b6d1b3 Download logging tweaks 2023-07-29 09:49:09 -04:00
DJ2LS 0f1ab97444 Merge remote-tracking branch 'origin/main' 2023-07-11 08:38:34 +02:00
DJ2LS 36f6e21679 Prettified Code! 2023-07-11 06:38:14 +00:00
DJ2LS ac631bda1d version update 2023-07-11 08:37:50 +02:00
DJ2LS 1377e93e69
Merge pull request #458 from DJ2LS/ls-mesh
adjusting mesh signalling ping
2023-07-11 08:36:40 +02:00
DJ2LS 8ddf3d259b
Merge branch 'main' into ls-mesh 2023-07-11 08:32:52 +02:00
DJ2LS 0e0620deee interrupt mesh dispatcher while in arq state 2023-07-10 16:42:34 +02:00
DJ2LS 5055c65838 adjusted signalling table 2023-07-10 16:14:28 +02:00
DJ2LS 47cb81cb93 adjusted signalling table 2023-07-10 16:07:52 +02:00
DJ2LS 91f6031d1d ignore unwanted packages 2023-07-10 12:21:56 +02:00
DJ2LS 9913b07de9 adjusted mesh ping frametype 2023-07-10 12:17:11 +02:00
DJ2LS ecf061571c adjusted mesh ping frametype 2023-07-10 12:03:06 +02:00
DJ2LS 9f3a3633e4 Prettified Code! 2023-07-10 08:22:44 +00:00
DJ2LS ee396ed58e
Merge pull request #457 from DJ2LS/ls-gui 2023-07-10 10:22:17 +02:00
DJ2LS 68a7187be6 check for origin when updating entry 2023-07-09 19:15:25 +02:00
DJ2LS 1b4720b293 fixed missing origin for update entries 2023-07-09 14:15:53 +02:00
DJ2LS af21b1292f adjusted time list for avoiding weird toggle situations 2023-07-09 10:06:35 +02:00
DJ2LS bb787bfab5 adjusted origin callsign reverse lookup 2023-07-09 09:59:15 +02:00
DJ2LS e3a3a252e5 version update 2023-07-09 09:57:23 +02:00
DJ2LS 9304b9fb34 changed router to origin 2023-07-09 09:53:20 +02:00
DJ2LS afed031baf changed router to origin 2023-07-09 09:51:18 +02:00
DJ2LS 6ec7397eef changed router to origin 2023-07-09 09:48:50 +02:00
Mashintime 6c1d8a1415 Fix blank hash/call in mesh tables 2023-07-08 11:32:07 -04:00
Mashintime 9aa819abf3 Reorganize mesh module page 2023-07-08 11:31:23 -04:00
Mashintime 48bd2ca460 Merge branch 'qm-bugfix' into ls-gui 2023-07-07 19:59:26 -04:00
DJ2LS a1421cffbb fixed a problem with callsign appending 2023-07-07 12:04:57 +02:00
DJ2LS 02793575d0 initial test with callsign reverse lookup 2023-07-07 11:56:27 +02:00
Mashintime 09222cfc45 Clear dbclean spinner if cancel is clicked 2023-07-05 16:24:47 -04:00
Mashintime 1d8ad819da Fix dx info response being sent to wrong station 2023-07-05 16:23:24 -04:00
Mashintime 43b46cb99b Version 0.10.0-alpha.2 2023-07-05 12:52:50 -04:00
Mashintime 104db8830e Prettified Code! 2023-07-05 16:43:56 +00:00
Mashintime 59fbee8893 One more extra /div tag 2023-07-05 12:42:26 -04:00
Mashintime a72531a41b Remove extra /DIV tag 2023-07-05 12:26:54 -04:00
Mashintime febf4f5d86 Version 0.10.0-alpha.1 2023-07-05 12:19:11 -04:00
DJ2LS 9205d23390
Merge pull request #449 from DJ2LS/ls-mesh 2023-07-05 17:57:34 +02:00
Mashintime 92908b0a63 Change timeout value for messages stuck in transmit 2023-07-05 11:30:55 -04:00
Mashintime 31be9a66bc Add spinner for database maintenance 2023-07-04 13:49:23 -04:00
Mashintime b4c658165d Fix failed progressbar rendering 2023-07-04 13:34:22 -04:00
Mashintime 692d1c7b84 Reset status on old messages in transmit status 2023-07-04 13:29:56 -04:00
Mashintime 8268dfd419 Fix message chat progress bars 2023-07-04 12:49:20 -04:00
Mashintime 17926354e8 May receive data without uuid, check for it 2023-07-04 12:04:54 -04:00
Mashintime f1410e49af Fix logic 2023-07-04 12:02:54 -04:00
Mashintime a3ed906051 Update low bandwidth labels 2023-07-04 11:36:52 -04:00
DJ2LS fa0e7e15ac updated version info for merging 2023-07-04 08:23:41 +02:00
DJ2LS 08173b6650 adjusted sending ping ack 2023-07-04 08:11:21 +02:00
DJ2LS 4ba5688447 adjusted sending ping ack 2023-07-04 07:47:39 +02:00
DJ2LS 3d1b995b5a adjusted timing and forwarding/forwared state 2023-07-04 07:38:50 +02:00
DJ2LS 6414d01cc3 reset attempts if already ack or failed 2023-07-04 06:42:12 +02:00
DJ2LS 6f8c5bf7c6 fixed a setting problem 2023-07-04 06:41:56 +02:00
DJ2LS 2a1b10a214
Merge pull request #452 from DJ2LS/sourcery/ls-mesh
WIP: mesh networking prototype/experiment (Sourcery refactored)
2023-07-03 18:41:52 +02:00
Sourcery AI b553bef026 'Refactored by Sourcery' 2023-07-03 16:36:42 +00:00
DJ2LS 92b728f082 adjusted mesh logging 2023-07-03 18:35:04 +02:00
DJ2LS 2b23abaec8 introduced mesh timing list 2023-07-03 18:14:50 +02:00
DJ2LS 2c355f744b fixed mesh startup 2023-07-03 17:54:24 +02:00
DJ2LS 50a41046cd Merge remote-tracking branch 'origin/ls-mesh' into ls-mesh 2023-07-03 11:27:17 +02:00
DJ2LS 2918b9cc33 removed outdated function from chat 2023-07-03 11:19:40 +02:00
DJ2LS 81bd1f94f1
Merge pull request #451 from DJ2LS/sourcery/ls-mesh
WIP: mesh networking prototype/experiment (Sourcery refactored)
2023-07-03 10:04:00 +02:00
Sourcery AI dff6d387c3 'Refactored by Sourcery' 2023-07-03 08:01:35 +00:00
DJ2LS 2e3b2c8787 updated version info 2023-07-03 09:59:54 +02:00
DJ2LS 5fb1df2c71 removed outdated function 2023-07-03 09:38:28 +02:00
DJ2LS 90a77a55d1 adjusted enable/disable mesh setting 2023-07-03 09:29:52 +02:00
DJ2LS 9728f847ec adjusted enable/disable mesh setting 2023-07-03 09:26:42 +02:00
Mashintime 023221408f Add --mesh option to TNC 2023-07-03 00:32:46 -04:00
Mashintime ebee998e25 Redid mesh enablement and add support for passing --mesh to tnc 2023-07-03 00:31:48 -04:00
Mashintime 139ea334fc Allow enabling/disabling mesh features. 2023-07-02 11:33:53 -04:00
Mashintime 3317b07c41 Merge branch 'main' into ls-mesh 2023-07-02 10:37:37 -04:00
Mashintime 23ed5be2d8 Bump version 2023-07-02 09:47:14 -04:00
Mashintime 95be2f339c Prettified Code! 2023-07-02 13:43:54 +00:00
Mashintime f0d7685a96 Fix prettier action 2023-07-02 09:43:13 -04:00
DJ2LS e471ac081c
Merge branch 'main' into ls-mesh 2023-07-02 07:23:16 +02:00
DJ2LS 43856ef115 enabled 24h attempts 2023-06-16 12:02:56 +02:00
DJ2LS 78753b4f92 increased attempts and timeout 2023-06-16 10:27:38 +02:00
DJ2LS fabc86962c fixed timestamp for transmission time 2023-06-16 09:45:20 +02:00
DJ2LS a9a2b63650 adjusted attempt timing 2023-06-13 17:06:56 +02:00
DJ2LS 3736f12712 adjusted mesh ack 2023-06-13 15:15:42 +02:00
DJ2LS 4c556e61fd introduced mesh state table 2023-06-13 14:03:36 +02:00
DJ2LS f3d244e90c Merge remote-tracking branch 'origin/qm-newmsg' into ls-mesh 2023-06-11 09:13:34 +02:00
DJ2LS 35576bb760 first mesh ping tx part 2023-06-11 09:12:40 +02:00
DJ2LS 415ff0c777 improved logging 2023-05-30 08:40:43 +02:00
DJ2LS 6244070e3c transmit mesh table only if channel not busy and we are in correct state 2023-05-30 08:38:25 +02:00
DJ2LS 82c6e6462e updated version 2023-05-29 18:55:37 +02:00
DJ2LS 85d9036ed3 always enable datac4 2023-05-29 18:51:19 +02:00
DJ2LS 579d1b0c47 added datetime 2023-05-29 18:49:50 +02:00
DJ2LS 692ce3592e fixed mesh table order 2023-05-29 18:47:58 +02:00
DJ2LS 9428d37319 introduced route score 2023-05-29 18:39:45 +02:00
DJ2LS e288136175 enable/disable mesh via gui 2023-05-28 17:33:24 +02:00
DJ2LS a77f8f5c03 added mesh gui view 2023-05-28 17:19:21 +02:00
DJ2LS bdfb1658ba fixed network crash 2023-05-28 16:06:07 +02:00
DJ2LS 5a5d7ac55d and some more networkrelated tests 2023-05-28 12:48:57 +02:00
DJ2LS 1343d6e7ea fixed network based decoding of string 2023-05-28 12:33:43 +02:00
DJ2LS f160775ec0 hopefully fixes neTwork 2023-05-28 12:23:36 +02:00
DJ2LS ece6873ac7 version udpate 2023-05-28 12:20:14 +02:00
DJ2LS 9d01fd75a0 Merge remote-tracking branch 'origin/main' into ls-mesh
# Conflicts:
#	tnc/static.py
2023-05-28 12:19:11 +02:00
DJ2LS 06d38c2585 added routing table to tnc state 2023-05-28 12:16:01 +02:00
DJ2LS be4d158c37 get routing table via network 2023-05-28 12:13:19 +02:00
DJ2LS e75c92c27c fixed wrong heard station data fetching 2023-05-28 09:46:46 +02:00
DJ2LS 204cedd7e2 improved logging 2023-05-28 09:30:54 +02:00
DJ2LS f4896837ac improved logging 2023-05-28 09:24:52 +02:00
DJ2LS b2ee1a6a98 improved logging 2023-05-28 09:23:01 +02:00
DJ2LS f836f9197c hopefully fixed logging 2023-05-27 21:00:46 +02:00
DJ2LS ecc6312bc3 fixed encoding 2023-05-27 21:00:01 +02:00
DJ2LS 8a85dfd150 added exp-indentificator 2023-05-27 19:53:17 +02:00
DJ2LS 783ff06cb0 fixed missing logging module 2023-05-27 19:52:09 +02:00
DJ2LS ff322c2ea4 check if callsign as already available in routing table 2023-05-27 14:26:42 +02:00
DJ2LS 36c03fa308 check if callsign as already available in routing table 2023-05-27 14:23:46 +02:00
DJ2LS dc22051fef added integer conversion 2023-05-27 13:47:04 +02:00
DJ2LS 8216aa08f2 improved error handling 2023-05-27 12:56:33 +02:00
DJ2LS 0a62046441 adde config.ini to .gitignore 2023-05-26 18:15:21 +02:00
DJ2LS f8c0cf9884 some more mesh additions 2023-05-26 15:36:05 +02:00
DJ2LS 24392a62dd some more mesh additions 2023-05-26 14:25:48 +02:00
DJ2LS c174a543fd initial work on mesh prototype 2023-05-24 09:00:54 +02:00
293 changed files with 22849 additions and 32588 deletions

View file

@ -6,16 +6,19 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
interval: "monthly"
target-branch: "develop"
# Maintain dependencies for npm
- package-ecosystem: "npm"
directory: "/"
directory: "/gui"
schedule:
interval: "daily"
interval: "monthly"
target-branch: "develop"
# Maintain dependencies for pip
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "daily"
interval: "monthly"
target-branch: "develop"

37
.github/workflows/build_gui.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: build_gui
on: [push]
jobs:
build_i686_x64_release:
name: Build FreeDATA GUI
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-latest, windows-latest]
include:
- os: ubuntu-20.04
electron_parameters: "-p always"
- os: macos-latest
electron_parameters: "-p always"
- os: windows-latest
electron_parameters: "-p always --x64 --ia32"
steps:
- name: Checkout code for ${{ matrix.platform.name }}
uses: actions/checkout@v4
with:
repository: DJ2LS/FreeDATA
- name: Electron Builder
env: # Setting environment variables for the entire job
GH_TOKEN: ${{ secrets.github_token }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
working-directory: gui
run: |
npm i
npm run release

View file

@ -1,413 +0,0 @@
name: Build_Multiplatform
on: [push]
jobs:
BUILD_AMD64:
name: Build codec2 for x86/x64 devices
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, ubuntu-22.04, macos-11, macos-12]
platform: [{name: "native"}, {name: "Windows", file: "dll"}]
architecture: [i686-w64-mingw32, x86_64-w64-mingw32]
include:
- os: ubuntu-20.04
libcodec2_name: libcodec2.so.1.1
libcodec2_os_name: libcodec2_ubuntu-2004
libcodec2_filetype: so
generator: Unix Makefiles
shell: bash
- os: ubuntu-22.04
libcodec2_name: libcodec2.so.1.1
libcodec2_os_name: libcodec2_ubuntu-2204
libcodec2_filetype: so
generator: Unix Makefiles
shell: bash
- os: macos-11
libcodec2_name: libcodec2.1.1.dylib
libcodec2_os_name: libcodec2_macos-11
libcodec2_filetype: dylib
generator: Unix Makefiles
shell: bash
- os: macos-12
libcodec2_name: libcodec2.1.1.dylib
libcodec2_os_name: libcodec2_macos-12
libcodec2_filetype: dylib
generator: Unix Makefiles
shell: bash
steps:
- name: Build codec2 on ${{ matrix.os }} for ${{ matrix.platform.name }}
if: ${{startsWith(matrix.platform.name, 'native') }}
run: |
git clone https://github.com/drowe67/codec2.git
cd codec2
mkdir build
mkdir tempfiles
cd build
cmake ../
make
mv src/${{ matrix.libcodec2_name }} ../tempfiles/libcodec2_${{ matrix.os }}_${{ matrix.platform.name }}.${{ matrix.libcodec2_filetype }}
- name: LIST ALL FILES ${{ github.workspace }}
run: ls -R ${{ github.workspace }}
- uses: actions/upload-artifact@v3
if: ${{startsWith(matrix.platform.name, 'native') }}
with:
name: libcodec2_${{ matrix.os }}_${{ matrix.platform.name }}.${{ matrix.libcodec2_filetype }}
# path: ${{ github.workspace }}/codec2/tempfiles/libcodec2_${{ matrix.os }}_${{ matrix.platform.name }}.${{ matrix.libcodec2_filetype }}
path: ${{ github.workspace }}/codec2/tempfiles/
- name: Build codec2 ${{ matrix.platform.name }} ${{ matrix.architecture }}
if: ${{startsWith(matrix.os, 'ubuntu-20') && !startsWith(matrix.platform.name, 'native') }}
run: |
sudo apt install build-essential mingw-w64 g++-mingw-w64 make cmake
git clone https://github.com/drowe67/codec2.git
cd codec2
mkdir tempfiles
mkdir build_w32
cd build_w32
echo 'set(CMAKE_SYSTEM_NAME ${{ matrix.platform.name }})' > toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_C_COMPILER ${{ matrix.architecture }}-gcc)' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_CXX_COMPILER ${{ matrix.architecture }}-g++)' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_RC_COMPILER ${{ matrix.architecture }}-windres)' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_FIND_ROOT_PATH /usr/${{ matrix.architecture }})' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)' >> toolchain-ubuntu-mingw32.cmake
echo 'set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")' >> toolchain-ubuntu-mingw32.cmake
cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain-ubuntu-mingw32.cmake ..
make
mv src/libcodec2.${{ matrix.platform.file }} ../tempfiles/libcodec2_${{ matrix.platform.name }}_${{ matrix.architecture }}.${{ matrix.platform.file }}
- uses: actions/upload-artifact@v3
if: ${{startsWith(matrix.os, 'ubuntu-20') && !startsWith(matrix.platform.name, 'native') }}
with:
name: libcodec2_${{ matrix.os }}_${{ matrix.platform.name }}_${{ matrix.architecture }}.${{ matrix.platform.file }}
path: codec2/tempfiles/*
BUILD_ARM:
# The host should always be linux
runs-on: ubuntu-latest
name: Build codec2 for ARM devices
# Run steps on a matrix of 2 arch/distro combinations
strategy:
matrix:
include:
- arch: armv7
distro: bullseye
libcodec2_os_name: libcodec2_bullseye_armv7.so
- arch: armv7
distro: ubuntu_latest
libcodec2_os_name: libcodec2_ubuntu_latest_armv7.so
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- uses: uraimo/run-on-arch-action@v2
name: Build artifact
id: build
with:
arch: ${{ matrix.arch }}
distro: ${{ matrix.distro }}
# Not required, but speeds up builds
githubToken: ${{ github.token }}
# Create an artifacts directory
setup: |
mkdir -p "${PWD}/artifacts"
# Mount the artifacts directory as /artifacts in the container
dockerRunArgs: |
--volume "${PWD}/artifacts:/artifacts"
# Pass some environment variables to the container
env: | # YAML, but pipe character is necessary
artifact_name: ${{ matrix.libcodec2_os_name }}
# The shell to run commands with in the container
shell: /bin/sh
# Install some dependencies in the container. This speeds up builds if
# you are also using githubToken. Any dependencies installed here will
# be part of the container image that gets cached, so subsequent
# builds don't have to re-install them. The image layer is cached
# publicly in your project's package repository, so it is vital that
# no secrets are present in the container state or logs.
install: |
case "${{ matrix.distro }}" in
ubuntu*|jessie|stretch|buster|bullseye)
apt-get update -q -y
apt-get install -q -y git build-essential cmake gcc g++
cmake --version
;;
fedora*)
dnf -y update
dnf -y install git which make cmake gcc-c++ gcc
cmake --version
;;
alpine*)
apk update
apk add git cmake gcc g++
cmake --version
;;
esac
# Produce a binary artifact and place it in the mounted volume
run: |
git clone https://github.com/drowe67/codec2.git
cd codec2
git checkout master
mkdir build
cd build
cmake ../
make
mv ./src/libcodec2.so.1.1 /artifacts/${artifact_name}
- name: Show recursive PWD/artifacts
# Items placed in /artifacts in the container will be in
# ${PWD}/artifacts on the host.
run: ls -al "${PWD}/artifacts"
- uses: actions/upload-artifact@v3
with:
name: ${{ matrix.libcodec2_os_name }}
#path: $GITHUB_WORKSPACE/codec2/artifacts/*
path: artifacts/*
build_i686_x64_release:
needs: [BUILD_AMD64]
name: Build FreeDATA packages
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-11, windows-latest]
include:
- os: ubuntu-20.04
zip_name: ubuntu_tnc
generator: Unix Makefiles
daemon_binary_name: freedata-daemon
tnc_binary_name: freedata-tnc
electron_parameters: "-p always"
- os: macos-11
zip_name: macos_tnc
generator: Unix Makefiles
daemon_binary_name: freedata-daemon
tnc_binary_name: freedata-tnc
electron_parameters: "-p always"
- os: windows-latest
zip_name: windows_tnc
generator: Visual Studio 16 2019
daemon_binary_name: freedata-daemon.exe
tnc_binary_name: freedata-tnc.exe
electron_parameters: "-p always --x64 --ia32"
steps:
- name: Checkout code for ${{ matrix.platform.name }}
uses: actions/checkout@v3
with:
repository: DJ2LS/FreeDATA
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install Node.js, NPM and Yarn
uses: actions/setup-node@v3
with:
node-version: 18
- name: Create tnc/dist
working-directory: tnc
run: |
mkdir -p dist
- name: Create tnc/dist/tnc
working-directory: tnc
run: |
mkdir -p dist/tnc
##- name: Download libcodec2 artifact TNC DIST
## uses: actions/download-artifact@v3
## with:
## path: tnc/dist/codec2
- name: create tnc/lib/codec2
working-directory: tnc/lib/
run: |
mkdir codec2
- name: Download libcodec2 artifact TNC LIB
uses: actions/download-artifact@v3
with:
path: tnc/lib/codec2
- name: Install Linux dependencies
# if: matrix.os == 'ubuntu-20.04'
if: ${{startsWith(matrix.os, 'ubuntu')}}
run: |
sudo apt install -y portaudio19-dev libhamlib-dev libhamlib-utils build-essential cmake python3-libhamlib2 patchelf
- name: Install MacOS pyAudio
if: ${{startsWith(matrix.os, 'macos')}}
run: |
brew install portaudio
python -m pip install --upgrade pip
pip3 install pyaudio
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Add MacOS certs
if: ${{startsWith(matrix.os, 'macos')}}
run: chmod +x add-osx-cert.sh && ./add-osx-cert.sh
env:
CERTIFICATE_OSX_APPLICATION: ${{ secrets.CERTIFICATE_OSX_APPLICATION }}
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
- name: Build binaries macOS
if: ${{startsWith(matrix.os, 'macos')}}
working-directory: tnc
run: |
# now build tnc binaries
pyinstaller -y freedata.spec
# and to some final cleanup
# cp -r -f dist/tnc/* dist/
# rm -r dist/tnc
- name: Build binaries Linux and Windows
if: ${{!startsWith(matrix.os, 'macos')}}
working-directory: tnc
run: |
# pyinstaller freedata.spec
# python3 -m nuitka --enable-plugin=numpy --assume-yes-for-downloads --onefile daemon.py -o ${{ matrix.daemon_binary_name }}
# python3 -m nuitka --enable-plugin=numpy --assume-yes-for-downloads --onefile main.py -o ${{ matrix.tnc_binary_name }}
python3 -m nuitka --enable-plugin=numpy --assume-yes-for-downloads --standalone daemon.py
python3 -m nuitka --enable-plugin=numpy --assume-yes-for-downloads --standalone main.py
- name: Copy binaries - Linux
if: ${{startsWith(matrix.os, 'ubuntu')}}
working-directory: tnc
run: |
cp -r -f daemon.dist/* dist/tnc
cp -r -f main.dist/* dist/tnc
- name: Copy binaries - Windows
if: ${{startsWith(matrix.os, 'windows')}}
working-directory: tnc
# These are powershell aliases, not UNIX commands.
run: |
cp -r -Force daemon.dist/* dist/tnc
cp -r -Force main.dist/* dist/tnc
- name: Rename tnc binaries
# we don't need renaming for pyinstaller builds as output name is defined
if: ${{!startsWith(matrix.os, 'macos')}}
working-directory: tnc
run: |
mv dist/tnc/daemon* dist/tnc/${{ matrix.daemon_binary_name }}
mv dist/tnc/main* dist/tnc/${{ matrix.tnc_binary_name }}
- uses: actions/download-artifact@v3
with:
path: tnc/dist/tnc
- name: LIST ALL FILES
run: ls -R
- name: Download Portaudio binaries Linux macOS
if: ${{!startsWith(matrix.os, 'windows')}}
working-directory: tnc
run: |
if ! test -d "dist/tnc/_sounddevice_data"; then
git clone https://github.com/spatialaudio/portaudio-binaries dist/tnc/_sounddevice_data/portaudio-binaries
fi
- name: Download Portaudio binaries Windows
if: ${{startsWith(matrix.os, 'windows')}}
working-directory: tnc
run: |
if(Test-Path -Path "dist/tnc/_sounddevice_data"){
echo "sounddevice folder already exists"
} else {
git clone https://github.com/spatialaudio/portaudio-binaries dist/tnc/_sounddevice_data/portaudio-binaries
}
- name: LIST ALL FILES
run: ls -R
- name: cleanup on macos before code signing
if: ${{startsWith(matrix.os, 'macos')}}
run: |
ls -l
# find . -type d -name .git -exec rm -r {} \;
find . -type d -o -name ".git" -delete
- name: Build/release Electron app
uses: samuelmeuli/action-electron-builder@v1
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
with:
package_root: "./gui/"
github_token: ${{ secrets.github_token }}
# If the commit is tagged with a version (e.g. "v1.0.0"),
# release the app after building
release: ${{ startsWith(github.ref, 'refs/tags/v') }}
args: ${{ matrix.electron_parameters }}
max_attempts: 3
- name: Compress TNC
uses: thedoctor0/zip-release@master
with:
type: 'zip'
filename: '${{ matrix.zip_name }}.zip'
# directory: ./tnc/dist/tnc
directory: ./tnc/dist/tnc
path: .
# exclusions: '*.git* /*node_modules/* .editorconfig'
- name: Release TNC
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
files: ./tnc/dist/tnc/${{ matrix.zip_name }}.zip
#files: ./tnc/dist/${{ matrix.zip_name }}.zip
- name: LIST ALL FILES
run: ls -R
#- name: Upload TNC artifacts
# uses: actions/upload-artifact@v3
# if: ${{!startsWith(github.ref, 'refs/tags/v')}}
# with:
# name: ${{ matrix.zip_name }}.zip
# # path: ./tnc/dist/tnc/${{ matrix.zip_name }}.zip
# path: ./tnc/dist/tnc/${{ matrix.zip_name }}.zip#
#- name: Upload App bundle artifacts
# uses: actions/upload-artifact@v3
# if: ${{!startsWith(github.ref, 'refs/tags/v')}}
# with:
# name: app_bundle_${{ matrix.os }}.zip
# # path: ./tnc/dist/tnc/${{ matrix.zip_name }}.zip
# path: ./gui/dist/*

69
.github/workflows/build_nsis_bundle.yml vendored Normal file
View file

@ -0,0 +1,69 @@
name: Build and Release NSIS Installer
on: [push]
jobs:
build-and-release:
runs-on: windows-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Electron Builder
working-directory: gui
run: |
npm i
npm run build
- name: LIST ALL FILES
run: ls -R
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- uses: robinraju/release-downloader@v1.9
with:
repository: "Hamlib/Hamlib"
fileName: " hamlib-w64-*.zip"
latest: true
extract: true
out-file-path: "modem/lib/hamlib/"
- name: Build binaries
working-directory: modem
run: |
python3 -m nuitka --remove-output --assume-yes-for-downloads --follow-imports --include-data-dir=lib=lib --include-data-files=lib/codec2/*=lib/codec2/ --include-data-files=config.ini.example=config.ini --standalone server.py --output-filename=freedata-server
- name: LIST ALL FILES
run: ls -R
- name: Create installer
uses: joncloud/makensis-action@v4.1
with:
script-file: "freedata-nsis-config.nsi"
arguments: '/V3'
- name: LIST ALL FILES
run: ls -R
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: 'FreeDATA-Installer'
path: ./FreeDATA-Installer.exe
- name: Upload Installer to Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
draft: true
files: ./FreeDATA-Installer.exe
tag_name: ${{ github.ref_name }}
name: 'FreeDATA-Installer-${{ github.ref_name }}'

124
.github/workflows/build_server.yml vendored Normal file
View file

@ -0,0 +1,124 @@
name: build_server
on: [push]
jobs:
build_i686_x64_release:
name: Build FreeDATA packages
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-latest, windows-latest]
include:
- os: ubuntu-20.04
zip_name: freedata-server_ubuntu
generator: Unix Makefiles
modem_binary_name: freedata-server
- os: macos-latest
zip_name: freedata-server_macos
generator: Unix Makefiles
modem_binary_name: freedata-server
- os: windows-latest
zip_name: freedata-server_windows
generator: Visual Studio 16 2019
modem_binary_name: freedata-server.exe
steps:
- name: Checkout code for ${{ matrix.platform.name }}
uses: actions/checkout@v4
with:
repository: DJ2LS/FreeDATA
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install Linux dependencies
# if: matrix.os == 'ubuntu-20.04'
if: ${{startsWith(matrix.os, 'ubuntu')}}
run: |
sudo apt install -y portaudio19-dev libhamlib-dev libhamlib-utils build-essential cmake python3-libhamlib2 patchelf
- name: Install MacOS pyAudio
if: ${{startsWith(matrix.os, 'macos')}}
run: |
brew install portaudio
python -m pip install --upgrade pip
pip3 install pyaudio
export PYTHONPATH=/Library/Frameworks/Python.framework/Versions/3.11/lib/:$PYTHONPATH
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Add MacOS certs
if: ${{startsWith(matrix.os, 'macos')}}
run: chmod +x add-osx-cert.sh && ./add-osx-cert.sh
env:
CERTIFICATE_OSX_APPLICATION: ${{ secrets.CERTIFICATE_OSX_APPLICATION }}
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
- name: Build binaries
working-directory: modem
run: |
python3 -m nuitka --remove-output --assume-yes-for-downloads --follow-imports --include-data-dir=lib=lib --include-data-files=lib/codec2/*=lib/codec2/ --include-data-files=config.ini.example=config.ini --standalone server.py --output-filename=freedata-server
#- name: Download Portaudio binaries Linux macOS
# if: ${{!startsWith(matrix.os, 'windows')}}
# working-directory: modem
# run: |
# if ! test -d "server.dist/modem/_sounddevice_data"; then
# git clone https://github.com/spatialaudio/portaudio-binaries dist/modem/_sounddevice_data/portaudio-binaries
# fi
#- name: Download Portaudio binaries Windows
# if: ${{startsWith(matrix.os, 'windows')}}
# working-directory: modem
# run: |
# if(Test-Path -Path "server.dist/modem/_sounddevice_data"){
# echo "sounddevice folder already exists"
# } else {
# git clone https://github.com/spatialaudio/portaudio-binaries dist/modem/_sounddevice_data/portaudio-binaries
# }
- name: LIST ALL FILES
run: ls -R
- name: cleanup on macos before code signing
if: ${{startsWith(matrix.os, 'macos')}}
run: |
ls -l
# find . -type d -name .git -exec rm -r {} \;
find . -type d -o -name ".git" -delete
- name: Compress Modem
uses: thedoctor0/zip-release@master
with:
type: 'zip'
filename: '${{ matrix.zip_name }}.zip'
directory: ./modem/server.dist
path: .
# exclusions: '*.git* /*node_modules/* .editorconfig'
- name: LIST ALL FILES
run: ls -R
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: '${{ matrix.zip_name }}'
path: ./modem/server.dist/${{ matrix.zip_name }}.zip
- name: Release Modem
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
draft: true
files: ./modem/server.dist/${{ matrix.zip_name }}.zip
- name: LIST ALL FILES
run: ls -R

View file

@ -39,13 +39,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@ -56,7 +56,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@ -70,4 +70,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

38
.github/workflows/gui_tests.yml vendored Normal file
View file

@ -0,0 +1,38 @@
name: GUI tests
on: [push]
jobs:
build:
# The CMake configure and build commands are platform-agnostic and should work equally
# well on Windows or Mac. You can convert this to a matrix build if you need
# cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: ubuntu-latest
strategy:
# By default, GitHub will maximize the number of jobs run in parallel
# depending on the available runners on GitHub-hosted virtual machines.
# max-parallel: 8
fail-fast: false
matrix:
include:
- node-version: "16"
- node-version: "18"
- node-version: "20"
steps:
- uses: actions/checkout@v4
- name: Install Node.js, NPM and Yarn
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
working-directory: gui
run: |
npm i
- name: GUI Test
working-directory: gui
run: |
npm run test

View file

@ -1,4 +1,4 @@
name: CTest
name: Modem tests
on: [push]
@ -16,41 +16,34 @@ jobs:
fail-fast: false
matrix:
include:
- python-version: "3.7"
#- python-version: "3.7" EOL
- python-version: "3.8"
- python-version: "3.9"
- python-version: "3.10"
- python-version: "3.11"
#- python-version: "3.12-dev"
#- python-version: "3.12" NOT YET SUPPORTED BY NUITKA!
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install packages
- name: Install system packages
shell: bash
run: |
sudo apt-get update
sudo apt-get install octave octave-common octave-signal sox portaudio19-dev python3-pyaudio
pip3 install psutil crcengine ujson pyserial numpy structlog sounddevice pyaudio requests websocket-client
pip3 install pytest pytest-rerunfailures
sudo apt-get update || true
sudo apt-get install octave octave-common octave-signal sox portaudio19-dev
- name: Build codec2
- name: Install python packages
shell: bash
run: |
git clone https://github.com/drowe67/codec2.git
cd codec2
mkdir -p build_linux && cd build_linux && cmake .. && make
pip3 install -r requirements.txt
- name: run ctests
- name: run config tests
shell: bash
working-directory: ${{github.workspace}}
run: |
mkdir build && cd build
cmake -DCODEC2_BUILD_DIR=$GITHUB_WORKSPACE/codec2/build_linux ..
ctest --output-on-failure
python -m unittest discover tests

View file

@ -4,7 +4,7 @@ name: Prettier
on:
push:
branches:
- master
- main
jobs:
prettier:
@ -12,7 +12,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
# Make sure the actual branch is checked out when running on pull requests
ref: ${{ github.head_ref }}

15
.gitignore vendored
View file

@ -1,5 +1,5 @@
# possible installation of codec2 within tnc
tnc/codec2
# possible installation of codec2 within modem
modem/codec2
# temporary test artifacts
**/build
@ -22,3 +22,14 @@ package-lock.json
*.raw
coverage.sh
coverage.xml
#ignore node_modules
/gui/node_modules/
#Ignore gui build items
/gui/dist
/gui/release
/gui/dist-electron
#Ignore GUI config
/gui/config/config.json

View file

@ -1,218 +0,0 @@
cmake_minimum_required(VERSION 3.0)
project (FreeDATA)
include(CTest)
enable_testing()
# Find codec2
if(CODEC2_BUILD_DIR)
find_package(codec2 REQUIRED
PATHS ${CODEC2_BUILD_DIR}
NO_DEFAULT_PATH
CONFIGS codec2.cmake
)
if(codec2_FOUND)
message(STATUS "Codec2 library found in build tree.")
endif()
else()
find_package(codec2 REQUIRED)
endif()
# test variables
set(FRAMESPERBURST 3)
set(BURSTS 1)
set(TESTFRAMES 3)
add_test(NAME audio_buffer
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_audiobuffer.py")
set_tests_properties(audio_buffer PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
add_test(NAME resampler
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_resample_48_8.py")
set_tests_properties(resampler PROPERTIES PASS_REGULAR_EXPRESSION "PASS")
add_test(NAME tnc_state_machine
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_tnc_states.py")
set_tests_properties(tnc_state_machine PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
add_test(NAME tnc_irs_iss
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_tnc.py")
set_tests_properties(tnc_irs_iss PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
# disabled this test as its actually broken since we introduced session IDs
#add_test(NAME chat_text
# COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
# export PYTHONPATH=../tnc;
# cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
# python3 test_chat_text.py")
# set_tests_properties(chat_text PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
add_test(NAME datac13_frames
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_datac13.py")
set_tests_properties(datac13_frames PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
# disabled this test as its actually broken since we introduced dataclasses
#add_test(NAME datac13_frames_negative
# COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
# export PYTHONPATH=../tnc;
# cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
# python3 test_datac13_negative.py")
# set_tests_properties(datac13_frames_negative PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
add_test(NAME helper_routines
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_helpers.py")
set_tests_properties(helper_routines PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
add_test(NAME py_highsnr_stdio_P_P_multi
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
export BURSTS=${BURSTS};
export FRAMESPERBURST=${FRAMESPERBURST};
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_highsnr_stdio_P_P_multi.py")
set_tests_properties(py_highsnr_stdio_P_P_multi PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: ${BURSTS}/${FRAMESPERBURST} DATAC1: ${BURSTS}/${FRAMESPERBURST} DATAC3: ${BURSTS}/${FRAMESPERBURST}")
add_test(NAME py_highsnr_stdio_P_P_datacx
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
export BURSTS=${BURSTS};
export FRAMESPERBURST=${FRAMESPERBURST};
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_highsnr_stdio_P_P_datacx.py")
set_tests_properties(py_highsnr_stdio_P_P_datacx PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
add_test(NAME py_highsnr_stdio_P_C_datacx
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
export BURSTS=${BURSTS};
export FRAMESPERBURST=${FRAMESPERBURST};
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_highsnr_stdio_P_C_datacx.py")
set_tests_properties(py_highsnr_stdio_P_C_datacx PROPERTIES PASS_REGULAR_EXPRESSION "HELLO WORLD")
add_test(NAME py_highsnr_stdio_C_P_datacx
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
export PYTHONPATH=../tnc;
export BURSTS=${BURSTS};
export FRAMESPERBURST=${FRAMESPERBURST};
export TESTFRAMES=${TESTFRAMES};
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 test_highsnr_stdio_C_P_datacx.py")
set_tests_properties(py_highsnr_stdio_C_P_datacx PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
add_test(NAME highsnr_stdio_P_C_single
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 util_tx.py --mode datac13 --delay 500 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} |
sox -t .s16 -r 48000 -c 1 - -t .s16 -r 8000 -c 1 - |
freedv_data_raw_rx datac13 - - --framesperburst ${FRAMESPERBURST} | hexdump -C")
set_tests_properties(highsnr_stdio_P_C_single PROPERTIES PASS_REGULAR_EXPRESSION "HELLO WORLD")
add_test(NAME highsnr_stdio_C_P_single
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
freedv_data_raw_tx datac13 --testframes ${TESTFRAMES} --bursts ${BURSTS} --framesperburst ${FRAMESPERBURST} /dev/zero - |
sox -t .s16 -r 8000 -c 1 - -t .s16 -r 48000 -c 1 - |
python3 util_rx.py --mode datac13 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS}")
set_tests_properties(highsnr_stdio_C_P_single PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
add_test(NAME highsnr_stdio_P_P_single
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 util_tx.py --mode datac13 --delay 500 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} |
python3 util_rx.py --debug --mode datac13 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS}")
set_tests_properties(highsnr_stdio_P_P_single PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
add_test(NAME highsnr_stdio_P_P_multi
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
python3 util_multimode_tx.py --delay 500 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} |
python3 util_multimode_rx.py --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} --timeout 60")
set_tests_properties(highsnr_stdio_P_P_multi PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: ${BURSTS}/${FRAMESPERBURST} DATAC1: ${BURSTS}/${FRAMESPERBURST} DATAC3: ${BURSTS}/${FRAMESPERBURST}")
# These tests can't run on GitHub actions as we don't have a virtual sound card
if(NOT DEFINED ENV{GITHUB_RUN_ID})
# uses aplay/arecord then pipe to Python
add_test(NAME highsnr_virtual1_P_P_single_alsa
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual1.sh")
set_tests_properties(highsnr_virtual1_P_P_single_alsa PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 5 RECEIVED FRAMES: 10 RX_ERRORS: 0")
# let Python do audio I/O
add_test(NAME highsnr_virtual2_P_P_single
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual2.sh")
set_tests_properties(highsnr_virtual2_P_P_single PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 3 RECEIVED FRAMES: 6 RX_ERRORS: 0")
# Multimode test with Python I/O
add_test(NAME highsnr_virtual3_P_P_multi
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual_mm.sh")
set_tests_properties(highsnr_virtual3_P_P_multi PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: 2/4 DATAC1: 2/4 DATAC3: 2/4")
# let Python do audio I/O via pyaudio callback mode
add_test(NAME highsnr_virtual4_P_P_single_callback
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual3a.sh")
set_tests_properties(highsnr_virtual4_P_P_single_callback PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 3 RECEIVED FRAMES: 6 RX_ERRORS: 0")
# let Python do audio I/O via pyaudio callback mode with code outside of callback
add_test(NAME highsnr_virtual4_P_P_single_callback_outside
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual3b.sh")
set_tests_properties(highsnr_virtual4_P_P_single_callback_outside PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 3 RECEIVED FRAMES: 6 RX_ERRORS: 0")
# let Python do audio I/O via pyaudio callback mode with code outside of callback
add_test(NAME highsnr_virtual5_P_P_multi_callback
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual4a.sh")
set_tests_properties(highsnr_virtual5_P_P_multi_callback PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: 2/4 DATAC1: 2/4 DATAC3: 2/4")
# let Python do audio I/O via pyaudio callback mode with code outside of callback
add_test(NAME highsnr_virtual5_P_P_multi_callback_outside
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
./test_virtual4b.sh")
set_tests_properties(highsnr_virtual5_P_P_multi_callback_outside PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: 2/4 DATAC1: 2/4 DATAC3: 2/4")
endif()

View file

@ -0,0 +1,135 @@
# FreeDATA - Protocols
## ARQ Sessions
An ARQ Session represents a reliable data transmission session from a sending station (A) to a receiving station (B). It uses automatic repeat request on top of different codec2 modes according to the transmission channel conditions.
So lets say A wants to send some data to B. A typical scenario would be like this:
```
ISS->(1)IRS:<datac13> OPEN_REQ(session id, origin, dest)
IRS->(1)ISS:<datac13> OPEN_ACK (session id, proto version, speed level, frames, snr)
ISS->(1)IRS:<datac13> INFO(id, total_bytes, total_crc)
IRS->(1)ISS:<datac13> INFO_ACK(id, total_crc)
ISS->(1)IRS:BURST (ID, offset, payload),(ID, offset, payload),(ID, offset, payload)
IRS->(1)ISS:BURST_ACK (ID, next_offset, speed level, frames, snr)
ISS-->(1)IRS:Lost BURST (total or part)
IRS->(1)ISS:BURST_NACK (ID, next_offset, speed level, frames, snr)
ISS->(1)IRS:BURST (ID, offset, payload),(ID, offset, payload),(ID, offset, payload)
IRS->(1)ISS:DATA ACK NACK (ID, next_offset, speed level, frames, snr)
```
### Frame details
#### SESSION_OPEN_REQ
ISS sends this first
DATAC13 Mode (12 bytes)
| field | bytes |
| --------------- | ----- |
| session id | 1 |
| origin | 6 |
| destination_crc | 3 |
#### SESSION_OPEN_ACK
Sent by the IRS in response to a SESSION_OPEN_REQ
DATAC13 Mode (12 bytes)
| field | bytes |
| ---------------- | ----- |
| session id | 1 |
| origin | 6 |
| destination_crc | 3 |
| protocol version | 1 |
| snr | 1 |
#### SESSION_INFO
ISS sends this in response to a SESSION_OPEN_ACK
DATAC13 Mode (12 bytes)
| field | bytes |
| ----------- | ----- |
| session id | 1 |
| total bytes | 4 |
| total crc | 4 |
| snr | 1 |
#### SESSION_INFO_ACK
IRS sends this in response to a SESSION_INFO
DATAC13 Mode (12 bytes)
| field | bytes |
| ---------------- | ----- |
| session id | 1 |
| total crc | 4 |
| snr | 1 |
| speed level | 1 |
| frames per burst | 1 |
#### Data Burst
ISS sends this to send data to IRS
Mode according to handshake speed level
Frames per burst according to handshake
##### Modulation
Each burst is composed of frames_per_burst frames:
|preamble|f1|f2|f3|...|postamble|
##### Each data frame
| field | bytes |
| ---------- | ------------------------------ |
| session id | 1 |
| offset | 4 |
| payload | (the remaining payload length) |
#### DATA_BURST_ACK
Sent by the IRS following successful decoding of burst.
| field | bytes |
| --------------------- | ----- |
| session id | 1 |
| next offset | 4 |
| next speed level | 1 |
| next frames per burst | 1 |
| snr | 1 |
#### DATA_BURST_NACK
Sent by the IRS following unsuccessful decoding of burst or timeout.
| field | bytes |
| --------------------- | ----- |
| session id | 1 |
| next offset | 4 |
| next speed level | 1 |
| next frames per burst | 1 |
| snr | 1 |
#### DATA ACK NACK
Sent by the IRS after receiving data with a state information.
| field | bytes |
| ---------- | ----- |
| session id | 1 |
| state | 1 |
| snr | 1 |

BIN
documentation/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

132
freedata-nsis-config.nsi Normal file
View file

@ -0,0 +1,132 @@
!include "MUI2.nsh"
; Request administrative rights
RequestExecutionLevel admin
; The name and file name of the installer
Name "FreeDATA Installer"
OutFile "FreeDATA-Installer.exe"
; Default installation directory for the server
InstallDir "$LOCALAPPDATA\FreeDATA"
; Registry key to store the installation directory
InstallDirRegKey HKCU "Software\FreeDATA" "Install_Dir"
; Modern UI settings
!define MUI_ABORTWARNING
; Installer interface settings
!define MUI_ICON "documentation\icon.ico"
!define MUI_UNICON "documentation\icon.ico" ; Icon for the uninstaller
; Define the welcome page text
!define MUI_WELCOMEPAGE_TEXT "Welcome to the FreeDATA Setup Wizard. This wizard will guide you through the installation process."
!define MUI_FINISHPAGE_TEXT "Folder: $INSTDIR"
!define MUI_DIRECTORYPAGE_TEXT_TOP "Please select the installation folder. It's recommended to use the suggested one to avoid permission problems."
; Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "LICENSE"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; Uninstaller
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; Language (you can choose and configure the language(s) you want)
!insertmacro MUI_LANGUAGE "English"
; Installer Sections
Section "FreeData Server" SEC01
; Set output path to the installation directory
SetOutPath $INSTDIR\freedata-server
; Check if "config.ini" exists and back it up
IfFileExists $INSTDIR\freedata-server\config.ini backupConfig
doneBackup:
; Add your application files here
File /r "modem\server.dist\*"
; Restore the original "config.ini" if it was backed up
IfFileExists $INSTDIR\freedata-server\config.ini.bak restoreConfig
; Create a shortcut in the user's desktop
CreateShortCut "$DESKTOP\FreeDATA Server.lnk" "$INSTDIR\freedata-server\freedata-server.exe"
; Create Uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
; Create a Start Menu directory
CreateDirectory "$SMPROGRAMS\FreeDATA"
; Create shortcut in the Start Menu directory
CreateShortCut "$SMPROGRAMS\FreeDATA\FreeDATA Server.lnk" "$INSTDIR\freedata-server\freedata-server.exe"
; Create an Uninstall shortcut
CreateShortCut "$SMPROGRAMS\FreeDATA\Uninstall FreeDATA.lnk" "$INSTDIR\Uninstall.exe"
; Backup "config.ini" before overwriting files
backupConfig:
Rename $INSTDIR\freedata-server\config.ini $INSTDIR\freedata-server\config.ini.bak
Goto doneBackup
; Restore the original "config.ini"
restoreConfig:
Delete $INSTDIR\freedata-server\config.ini
Rename $INSTDIR\freedata-server\config.ini.bak $INSTDIR\freedata-server\config.ini
SectionEnd
Section "FreeData x64 GUI" SEC02
; Set output path to the GUI installation directory
SetOutPath $INSTDIR\freedata-gui
; Add GUI files here
File /r "gui\release\win-unpacked\*"
; Create a shortcut on the desktop for the GUI
CreateShortCut "$DESKTOP\FreeDATA GUI.lnk" "$INSTDIR\freedata-gui\freedata.exe"
; Create a start menu shortcut
CreateShortCut "$SMPROGRAMS\FreeDATA\FreeDATA GUI.lnk" "$INSTDIR\freedata-gui\freedata.exe"
; Create an Uninstall shortcut
CreateShortCut "$SMPROGRAMS\FreeDATA\Uninstall FreeDATA.lnk" "$INSTDIR\Uninstall.exe"
SectionEnd
; Uninstaller Section
Section "Uninstall"
; Delete files and directories for the server
Delete $INSTDIR\freedata-server\*.*
RMDir /r $INSTDIR\freedata-server
; Delete files and directories for the GUI
Delete $INSTDIR\freedata-gui\*.*
RMDir /r $INSTDIR\freedata-gui
; Remove the desktop shortcuts
Delete "$DESKTOP\FreeDATA Server.lnk"
Delete "$DESKTOP\FreeDATA GUI.lnk"
; Remove Start Menu shortcuts
Delete "$SMPROGRAMS\FreeDATA\*.*"
RMDir "$SMPROGRAMS\FreeDATA"
; Attempt to delete the uninstaller itself
Delete $EXEPATH
; Now remove the installation directory if it's empty
RMDir /r $INSTDIR
SectionEnd

23
gui/.eslintrc.json Normal file
View file

@ -0,0 +1,23 @@
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"plugin:prettier/recommended",
"eslint:recommended"
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.json"
},
"plugins": [
"vue"
],
"ignorePatterns": ["**/src/assets/*", "**/src/js/deprecated*", "**/node_modules"],
"rules": {
}
}

104
gui/.gitignore vendored
View file

@ -1,104 +0,0 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# Next.js build output
.next
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port

18
gui/README.md Normal file
View file

@ -0,0 +1,18 @@
# Vue 3 + TypeScript + Vite
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
## Recommended IDE Setup
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
## Type Support For `.vue` Imports in TS
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
1. Disable the built-in TypeScript Extension
1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.

View file

@ -0,0 +1,24 @@
const { notarize } = require('@electron/notarize');
async function notarizing(context) {
const { electronPlatformName, appOutDir } = context;
console.log("Notarization...")
if (electronPlatformName !== 'darwin') {
console.log("--> Platform:" + electronPlatformName + " detected: not a APPLE system. Skipping")
return;
}
console.log("--> Platform:" + electronPlatformName + " detected: Trying to notarize app.")
const appName = context.packager.appInfo.productFilename;
return await notarize({
tool: 'notarytool',
appBundleId: 'app.freedata',
appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_ID_PASSWORD,
teamId: process.env.APPLE_TEAM_ID
});
}
exports.default = notarizing;

10
gui/config/example.json Normal file
View file

@ -0,0 +1,10 @@
{
"local": {
"host": "127.0.0.1",
"port": "5000",
"spectrum": "waterfall",
"wf_theme": 2,
"update_channel": "alpha",
"enable_sys_notification": false
}
}

View file

@ -1,349 +0,0 @@
var net = require("net");
const path = require("path");
const { ipcRenderer } = require("electron");
const log = require("electron-log");
const daemonLog = log.scope("daemon");
// https://stackoverflow.com/a/26227660
var appDataFolder =
process.env.APPDATA ||
(process.platform == "darwin"
? process.env.HOME + "/Library/Application Support"
: process.env.HOME + "/.config");
var configFolder = path.join(appDataFolder, "FreeDATA");
var configPath = path.join(configFolder, "config.json");
const config = require(configPath);
var daemon = new net.Socket();
var socketchunk = ""; // Current message, per connection.
// global to keep track of daemon connection error emissions
var daemonShowConnectStateError = 1;
// global for storing ip information
var daemon_port = config.daemon_port;
var daemon_host = config.daemon_host;
setTimeout(connectDAEMON, 500);
function connectDAEMON() {
if (daemonShowConnectStateError == 1) {
daemonLog.info("connecting to daemon");
}
//clear message buffer after reconnecting or initial connection
socketchunk = "";
if (config.tnclocation == "localhost") {
daemon.connect(3001, "127.0.0.1");
} else {
daemon.connect(daemon_port, daemon_host);
}
//client.setTimeout(5000);
}
daemon.on("connect", function (err) {
daemonLog.info("daemon connection established");
let Data = {
daemon_connection: daemon.readyState,
};
ipcRenderer.send("request-update-daemon-connection", Data);
daemonShowConnectStateError = 1;
});
daemon.on("error", function (err) {
if (daemonShowConnectStateError == 1) {
daemonLog.error("daemon connection error");
daemonLog.info("Make sure the daemon is started.");
daemonLog.info('Run "python daemon.py" in the tnc directory.');
daemonShowConnectStateError = 0;
}
setTimeout(connectDAEMON, 500);
daemon.destroy();
let Data = {
daemon_connection: daemon.readyState,
};
ipcRenderer.send("request-update-daemon-connection", Data);
});
/*
client.on('close', function(data) {
console.log(' TNC connection closed');
setTimeout(connectTNC, 2000)
let Data = {
daemon_connection: daemon.readyState,
};
ipcRenderer.send('request-update-daemon-connection', Data);
});
*/
daemon.on("end", function (data) {
daemonLog.warn("daemon connection ended");
daemon.destroy();
setTimeout(connectDAEMON, 500);
let Data = {
daemon_connection: daemon.readyState,
};
ipcRenderer.send("request-update-daemon-connection", Data);
});
//exports.writeCommand = function(command){
writeDaemonCommand = function (command) {
// we use the writingCommand function to update our TCPIP state because we are calling this function a lot
// if socket opened, we are able to run commands
if (daemon.readyState == "open") {
//uiMain.setDAEMONconnection('open')
daemon.write(command + "\n");
}
if (daemon.readyState == "closed") {
//uiMain.setDAEMONconnection('closed')
}
if (daemon.readyState == "opening") {
//uiMain.setDAEMONconnection('opening')
}
let Data = {
daemon_connection: daemon.readyState,
};
ipcRenderer.send("request-update-daemon-connection", Data);
};
// "https://stackoverflow.com/questions/9070700/nodejs-net-createserver-large-amount-of-data-coming-in"
daemon.on("data", function (socketdata) {
/*
inspired by:
stackoverflow.com questions 9070700 nodejs-net-createserver-large-amount-of-data-coming-in
*/
socketdata = socketdata.toString("utf8"); // convert data to string
socketchunk += socketdata; // append data to buffer so we can stick long data together
// check if we received begin and end of json data
if (socketchunk.startsWith('{"') && socketchunk.endsWith('"}\n')) {
var data = "";
// split data into chunks if we received multiple commands
socketchunk = socketchunk.split("\n");
data = JSON.parse(socketchunk[0]);
// search for empty entries in socketchunk and remove them
for (i = 0; i < socketchunk.length; i++) {
if (socketchunk[i] === "") {
socketchunk.splice(i, 1);
}
}
//iterate through socketchunks array to execute multiple commands in row
for (i = 0; i < socketchunk.length; i++) {
//check if data is not empty
if (socketchunk[i].length > 0) {
//try to parse JSON
try {
data = JSON.parse(socketchunk[i]);
} catch (e) {
console.log(e); // "SyntaxError
daemonLog.error(e);
daemonLog.debug(socketchunk[i]);
socketchunk = "";
}
}
if (data["command"] == "daemon_state") {
let Data = {
input_devices: data["input_devices"],
output_devices: data["output_devices"],
python_version: data["python_version"],
hamlib_version: data["hamlib_version"],
serial_devices: data["serial_devices"],
tnc_running_state: data["daemon_state"][0]["status"],
ram_usage: data["ram"],
cpu_usage: data["cpu"],
version: data["version"],
};
ipcRenderer.send("request-update-daemon-state", Data);
}
if (data["command"] == "test_hamlib") {
let Data = {
hamlib_result: data["result"],
};
ipcRenderer.send("request-update-hamlib-test", Data);
}
}
//finally delete message buffer
socketchunk = "";
}
});
function hexToBytes(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
}
exports.getDaemonState = function () {
//function getDaemonState(){
command = '{"type" : "get", "command" : "daemon_state"}';
writeDaemonCommand(command);
};
// START TNC
// ` `== multi line string
exports.startTNC = function (
mycall,
mygrid,
rx_audio,
tx_audio,
radiocontrol,
devicename,
deviceport,
pttprotocol,
pttport,
serialspeed,
data_bits,
stop_bits,
handshake,
rigctld_ip,
rigctld_port,
enable_fft,
enable_scatter,
low_bandwidth_mode,
tuning_range_fmin,
tuning_range_fmax,
enable_fsk,
tx_audio_level,
respond_to_cq,
rx_buffer_size,
enable_explorer,
explorer_stats,
auto_tune,
tx_delay,
tci_ip,
tci_port
) {
var json_command = JSON.stringify({
type: "set",
command: "start_tnc",
parameter: [
{
mycall: mycall,
mygrid: mygrid,
rx_audio: rx_audio,
tx_audio: tx_audio,
radiocontrol: radiocontrol,
devicename: devicename,
deviceport: deviceport,
pttprotocol: pttprotocol,
pttport: pttport,
serialspeed: serialspeed,
data_bits: data_bits,
stop_bits: stop_bits,
handshake: handshake,
rigctld_port: rigctld_port,
rigctld_ip: rigctld_ip,
enable_scatter: enable_scatter,
enable_fft: enable_fft,
enable_fsk: enable_fsk,
low_bandwidth_mode: low_bandwidth_mode,
tuning_range_fmin: tuning_range_fmin,
tuning_range_fmax: tuning_range_fmax,
tx_audio_level: tx_audio_level,
respond_to_cq: respond_to_cq,
rx_buffer_size: rx_buffer_size,
enable_explorer: enable_explorer,
enable_stats: explorer_stats,
enable_auto_tune: auto_tune,
tx_delay: tx_delay,
tci_ip: tci_ip,
tci_port: tci_port,
},
],
});
daemonLog.debug(json_command);
writeDaemonCommand(json_command);
};
// STOP TNC
exports.stopTNC = function () {
command = '{"type" : "set", "command": "stop_tnc" , "parameter": "---" }';
writeDaemonCommand(command);
};
// TEST HAMLIB
exports.testHamlib = function (
radiocontrol,
devicename,
deviceport,
serialspeed,
pttprotocol,
pttport,
data_bits,
stop_bits,
handshake,
rigctld_ip,
rigctld_port
) {
var json_command = JSON.stringify({
type: "get",
command: "test_hamlib",
parameter: [
{
radiocontrol: radiocontrol,
devicename: devicename,
deviceport: deviceport,
pttprotocol: pttprotocol,
pttport: pttport,
serialspeed: serialspeed,
data_bits: data_bits,
stop_bits: stop_bits,
handshake: handshake,
rigctld_port: rigctld_port,
rigctld_ip: rigctld_ip,
},
],
});
daemonLog.debug(json_command);
writeDaemonCommand(json_command);
};
//Save myCall
exports.saveMyCall = function (callsign) {
command =
'{"type" : "set", "command": "mycallsign" , "parameter": "' +
callsign +
'"}';
writeDaemonCommand(command);
};
// Save myGrid
exports.saveMyGrid = function (grid) {
command =
'{"type" : "set", "command": "mygrid" , "parameter": "' + grid + '"}';
writeDaemonCommand(command);
};
ipcRenderer.on("action-update-daemon-ip", (event, arg) => {
daemon.destroy();
let Data = {
busy_state: "-",
arq_state: "-",
//channel_state: "-",
frequency: "-",
mode: "-",
bandwidth: "-",
dbfs_level: 0,
};
ipcRenderer.send("request-update-tnc-state", Data);
daemon_port = arg.port;
daemon_host = arg.adress;
connectDAEMON();
});

View file

@ -0,0 +1,61 @@
/**
* @see https://www.electron.build/configuration/configuration
*/
{
"$schema": "https://raw.githubusercontent.com/electron-userland/electron-builder/master/packages/app-builder-lib/scheme.json",
"appId": "app.freedata",
"asar": true,
"afterSign": "build/notarize_macos.js",
"productName": "FreeDATA",
"directories": {
"output": "release"
},
"asarUnpack": [
"**/*.wav"
],
"files": [
"dist",
"dist-electron",
],
"mac": {
"target": [
{
"target": "default",
//"arch": ["universal"],
"arch": ["arm64", "x64"],
}
],
"notarize": "false",
"icon": "build/icon.png",
"hardenedRuntime": true,
"entitlements": "build/entitlements.plist",
"entitlementsInherit": "build/entitlements.plist",
"gatekeeperAssess": false,
"mergeASARs": true,
"x64ArchFiles": "**/*",
"artifactName": "${productName}-GUI-Mac-${version}.${ext}"
},
"win": {
"icon": "build/icon.png",
"target": [
{
"target": "portable",
"arch": ["arm64", "x64"]
}
],
"artifactName": "${productName}-GUI-Windows-${version}.${ext}"
},
"linux": {
"category": "Development",
"target": [
"AppImage"
],
"artifactName": "${productName}-GUI-Linux-${version}.${ext}"
}
}

11
gui/electron/electron-env.d.ts vendored Normal file
View file

@ -0,0 +1,11 @@
/// <reference types="vite-plugin-electron/electron-env" />
declare namespace NodeJS {
interface ProcessEnv {
VSCODE_DEBUG?: 'true'
DIST_ELECTRON: string
DIST: string
/** /dist/ or /public/ */
VITE_PUBLIC: string
}
}

223
gui/electron/main/index.ts Normal file
View file

@ -0,0 +1,223 @@
import { app, BrowserWindow, shell, ipcMain } from "electron";
import { release, platform } from "os";
import { join, dirname } from "path";
import { existsSync } from "fs";
import { spawn } from "child_process";
// The built directory structure
//
// ├─┬ dist-electron
// │ ├─┬ main
// │ │ └── index.js > Electron-Main
// │ └─┬ preload
// │ └── index.js > Preload-Scripts
// ├─┬ dist
// │ └── index.html > Electron-Renderer
//
process.env.DIST_ELECTRON = join(__dirname, "..");
process.env.DIST = join(process.env.DIST_ELECTRON, "../dist");
process.env.VITE_PUBLIC = process.env.VITE_DEV_SERVER_URL
? join(process.env.DIST_ELECTRON, "../public")
: process.env.DIST;
// Disable GPU Acceleration for Windows 7
if (release().startsWith("6.1")) app.disableHardwareAcceleration();
// Set application name for Windows 10+ notifications
if (process.platform === "win32") app.setAppUserModelId(app.getName());
if (!app.requestSingleInstanceLock()) {
close_sub_processes();
app.quit();
process.exit(0);
}
// Remove electron security warnings
// This warning only shows in development mode
// Read more on https://www.electronjs.org/docs/latest/tutorial/security
// process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
// set daemon process var
var serverProcess = null;
let win: BrowserWindow | null = null;
// Here, you can also use other preload
const preload = join(__dirname, "../preload/index.js");
const url = process.env.VITE_DEV_SERVER_URL;
const indexHtml = join(process.env.DIST, "index.html");
async function createWindow() {
win = new BrowserWindow({
title: "FreeDATA",
width: 1200,
height: 670,
icon: join(process.env.VITE_PUBLIC, "icon_cube_border.png"),
autoHideMenuBar: true,
webPreferences: {
preload,
backgroundThrottling: false,
// Warning: Enable nodeIntegration and disable contextIsolation is not secure in production
// Consider using contextBridge.exposeInMainWorld
// Read more on https://www.electronjs.org/docs/latest/tutorial/context-isolation
nodeIntegration: true,
contextIsolation: false,
},
});
if (process.env.VITE_DEV_SERVER_URL) {
// electron-vite-vue#298
win.loadURL(url);
// Open devTool if the app is not packaged
win.webContents.openDevTools();
} else {
win.loadFile(indexHtml);
}
// Test actively push message to the Electron-Renderer
//win.webContents.on("did-finish-load", () => {
// win?.webContents.send("main-process-message", new Date().toLocaleString());
//});
// Make all links open with the browser, not with the application
win.webContents.setWindowOpenHandler(({ url }) => {
if (url.startsWith("https:")) shell.openExternal(url);
return { action: "deny" };
});
// win.webContents.on('will-navigate', (event, url) => { }) #344
win.once("ready-to-show", () => {
//
});
}
//app.whenReady().then(
app.whenReady().then(() => {
createWindow();
console.log(platform());
//Generate daemon binary path
var serverPath = "";
console.log(process.env);
// Attempt to find Installation Folder
console.log(app.getAppPath());
console.log(join(app.getAppPath(), "..", ".."));
console.log(join(app.getAppPath(), "..", "..", ".."));
//var basePath = join(app.getAppPath(), '..', '..', '..') || join(process.env.PWD, '..') || join(process.env.INIT_CWD, '..') || join(process.env.DIST, '..', '..', '..');
var basePath = join(app.getAppPath(), "..", "..", "..");
switch (platform().toLowerCase()) {
//case "darwin":
//serverPath = join(basePath, "freedata-server", "freedata-server.exe");
//serverProcess = spawn(serverPath, [], { detached: true });
//serverProcess.unref(); // Allow the server process to continue running independently of the parent process
// break;
//case "linux":
//serverPath = join(basePath, "freedata-server", "freedata-server.exe");
//serverProcess = spawn(serverPath, [], { detached: true });
//serverProcess.unref(); // Allow the server process to continue running independently of the parent process
// break;
case "win32":
serverPath = join(basePath, "freedata-server", "freedata-server.exe");
console.log(`Starting server with path: ${serverPath}`);
serverProcess = spawn(
"cmd.exe",
["/c", "start", "cmd.exe", "/c", serverPath],
{ shell: true },
);
console.log(`Started server | PID: ${serverProcess.pid}`);
break;
default:
console.log("Unhandled OS Platform: ", platform());
serverProcess = null;
serverPath = null;
break;
}
serverProcess.on("error", (err) => {
console.error("Failed to start server process:", err);
serverProcess = null;
serverPath = null;
});
serverProcess.stdout.on("data", (data) => {
//console.log(`stdout: ${data}`);
});
serverProcess.stderr.on("data", (data) => {
console.error(`stderr: ${data}`);
});
});
app.on("before-quit", () => {
close_sub_processes();
});
app.on("window-all-closed", () => {
win = null;
if (process.platform !== "darwin") app.quit();
});
app.on("second-instance", () => {
if (win) {
// Focus on the main window if the user tried to open another
if (win.isMinimized()) win.restore();
win.focus();
}
});
app.on("activate", () => {
const allWindows = BrowserWindow.getAllWindows();
if (allWindows.length) {
allWindows[0].focus();
} else {
createWindow();
}
});
// New window example arg: new windows url
ipcMain.handle("open-win", (_, arg) => {
const childWindow = new BrowserWindow({
webPreferences: {
preload,
nodeIntegration: true,
contextIsolation: false,
},
});
if (process.env.VITE_DEV_SERVER_URL) {
childWindow.loadURL(`${url}#${arg}`);
} else {
childWindow.loadFile(indexHtml, { hash: arg });
}
});
function close_sub_processes() {
console.log("Closing sub processes...");
if (serverProcess != null) {
try {
console.log(`Killing server process with PID: ${serverProcess.pid}`);
switch (platform().toLowerCase()) {
//case "darwin":
// process.kill(serverProcess.pid);
// break;
//case "linux":
// process.kill(serverProcess.pid);
// break;
case "win32":
// For Windows, use taskkill to ensure all child processes are also terminated
spawn("taskkill", ["/pid", serverProcess.pid.toString(), "/f", "/t"]);
break;
default:
console.log("Unhandled OS Platform: ", platform());
serverProcess = null;
serverPath = null;
break;
}
} catch (error) {
console.error(`Error killing server process: ${error}`);
}
}
}

View file

@ -0,0 +1,114 @@
import { ipcRenderer } from "electron";
function domReady(
condition: DocumentReadyState[] = ["complete", "interactive"],
) {
return new Promise((resolve) => {
if (condition.includes(document.readyState)) {
resolve(true);
} else {
document.addEventListener("readystatechange", () => {
if (condition.includes(document.readyState)) {
resolve(true);
}
});
}
});
}
const safeDOM = {
append(parent: HTMLElement, child: HTMLElement) {
if (!Array.from(parent.children).find((e) => e === child)) {
return parent.appendChild(child);
}
},
remove(parent: HTMLElement, child: HTMLElement) {
if (Array.from(parent.children).find((e) => e === child)) {
return parent.removeChild(child);
}
},
};
/**
* https://tobiasahlin.com/spinkit
* https://connoratherton.com/loaders
* https://projects.lukehaas.me/css-loaders
* https://matejkustec.github.io/SpinThatShit
*/
function useLoading() {
const className = `loaders-css__square-spin`;
const styleContent = `
@keyframes square-spin {
0% {
transform: rotate(0deg);
background-image: url('icon_cube_border.png'); /* Replace with the URL of your image */
background-size: cover; /* Scale the image to cover the entire container */
}
25% { transform: perspective(100px) rotateX(180deg) rotateY(0);
background-image: url('icon_cube_border.png'); /* Replace with the URL of your image */
background-size: cover; /* Scale the image to cover the entire container */
}
50% { transform: perspective(100px) rotateX(180deg) rotateY(180deg);
background-image: url('icon_cube_border.png'); /* Replace with the URL of your image */
background-size: cover; /* Scale the image to cover the entire container */
}
75% { transform: perspective(100px) rotateX(0) rotateY(180deg);
background-image: url('icon_cube_border.png'); /* Replace with the URL of your image */
background-size: cover; /* Scale the image to cover the entire container */
}
100% { transform: perspective(100px) rotateX(0) rotateY(0);
background-image: url('icon_cube_border.png'); /* Replace with the URL of your image */
background-size: cover; /* Scale the image to cover the entire container */
}
}
.${className} > div {
animation-fill-mode: both;
width: 50px;
height: 50px;
background: #fff;
animation: square-spin 6s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite;
}
.app-loading-wrap {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: #282c34;
z-index: 99999;
}
`;
const oStyle = document.createElement("style");
const oDiv = document.createElement("div");
oStyle.id = "app-loading-style";
oStyle.innerHTML = styleContent;
oDiv.className = "app-loading-wrap";
oDiv.innerHTML = `<div class="${className}"><div></div></div>`;
return {
appendLoading() {
safeDOM.append(document.head, oStyle);
safeDOM.append(document.body, oDiv);
},
removeLoading() {
safeDOM.remove(document.head, oStyle);
safeDOM.remove(document.body, oDiv);
},
};
}
// ----------------------------------------------------------------------
const { appendLoading, removeLoading } = useLoading();
domReady().then(appendLoading);
window.onmessage = (ev) => {
ev.data.payload === "removeLoading" && removeLoading();
};
setTimeout(removeLoading, 3999);

View file

@ -1,37 +0,0 @@
const fs = require("fs");
const { ipcRenderer } = require("electron");
/**
* Save config and update config setting globally
* @param {string} config - config data
* @param {string} configPath
*/
exports.saveConfig = function (config, configPath) {
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
ipcRenderer.send("set-config-global", config);
};
/**
* Binary to ASCII replacement
* @param {string} data in normal/usual utf-8 format
* @returns base64 encoded string
*/
exports.btoa_FD = function (data) {
return Buffer.from(data, "utf-8").toString("base64");
};
/**
* ASCII to Binary replacement
* @param {string} data in base64 encoding
* @returns utf-8 normal/usual string
*/
exports.atob_FD = function (data) {
return Buffer.from(data, "base64").toString("utf-8");
};
/**
* UTF8 to ASCII btoa
* @param {string} data in base64 encoding
* @returns base64 bota compatible data for use in browser
*/
exports.atob = function (data) {
return window.btoa(Buffer.from(data, "base64").toString("utf8"));
};

40
gui/index.html Normal file
View file

@ -0,0 +1,40 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
http-equiv="Content-Security-Policy"
content="script-src 'self' 'unsafe-inline';"
/>
<title>FreeDATA</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
<script type="module">
// debugging code for figuring out correct folder structure in build environment
console.log(process.env);
import { readdir } from "node:fs/promises";
import { readdirSync } from "fs";
import { join } from "path";
function walk(dir) {
return readdirSync(dir, { withFileTypes: true }).flatMap((file) =>
file.isDirectory() ? walk(join(dir, file.name)) : join(dir, file.name),
);
}
if (process.env["NODE_ENV"] == "production") {
console.log(walk(process.env["APPDIR"]));
console.log(walk(process.env["DIST"]));
console.log(walk(process.env["DIST_ELECTRON"]));
} else {
console.log("running in " + process.env["NODE_ENV"]);
}
</script>

File diff suppressed because it is too large Load diff

View file

@ -1,110 +1,84 @@
{
"name": "FreeDATA",
"version": "0.9.3-alpha.2",
"description": "FreeDATA ",
"main": "main.js",
"description": "FreeDATA Client application for connecting to FreeDATA server",
"private": true,
"version": "0.14.5-alpha",
"main": "dist-electron/main/index.js",
"scripts": {
"start": "electron .",
"test": "echo \"Error: no test specified\" && exit 1"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=9.0.0"
"start": "vite",
"dev": "vite",
"test": "vitest --run",
"check": "vue-tsc --noEmit",
"build": "vue-tsc --noEmit && vite build && electron-builder -p never",
"release": "vue-tsc --noEmit && vite build && electron-builder -p onTag",
"preview": "vite preview",
"lint": "eslint --ext .js,.vue src",
"lint-fix": "eslint --ext .js,.vue --fix src",
"install-deps": "npm install && npm update"
},
"repository": {
"type": "git",
"url": "https://github.com/DJ2LS/FreeDATA.git"
},
"keywords": [
"TNC",
"Modem",
"GUI",
"FreeDATA",
"codec2"
],
"author": "DJ2LS",
"license": "LGPL-2.1",
"license": "GPL-3.0",
"bugs": {
"url": "https://github.com/DJ2LS/FreeDATA/issues"
},
"homepage": "https://freedata.app",
"dependencies": {
"@electron/asar": "^3.2.3",
"@electron/osx-sign": "^1.0.4",
"@popperjs/core": "^2.11.6",
"blob-util": "^2.0.2",
"bootstrap": "^5.3.0",
"bootstrap-icons": "^1.10.5",
"bootswatch": "^5.2.3",
"browser-image-compression": "^2.0.0",
"chart.js": "^4.2.1",
"chartjs-plugin-annotation": "^2.1.2",
"electron-log": "^4.4.8",
"electron-updater": "^5.3.0",
"emoji-picker-element": "^1.15.1",
"emoji-picker-element-data": "^1.3.0",
"express-pouchdb": "^4.2.0",
"mime": "^3.0.0",
"pouchdb": "^8.0.1",
"pouchdb-browser": "^8.0.1",
"pouchdb-express-router": "^0.0.11",
"pouchdb-find": "^8.0.1",
"pouchdb-replication": "^8.0.1",
"pouchdb-upsert": "^2.2.0",
"qth-locator": "^2.1.0",
"utf8": "^3.0.0",
"uuid": "^9.0.0"
"@electron/notarize": "2.2.1",
"@electron/universal": "2.0.1",
"@popperjs/core": "2.11.8",
"@vueuse/electron": "10.7.2",
"blob-util": "2.0.2",
"bootstrap": "5.3.2",
"bootstrap-icons": "1.11.3",
"browser-image-compression": "2.0.2",
"chart.js": "4.4.1",
"chartjs-plugin-annotation": "3.0.1",
"electron-log": "5.1.1",
"emoji-picker-element": "1.21.0",
"emoji-picker-element-data": "1.6.0",
"file-saver": "2.0.5",
"gridstack": "10.0.1",
"mime": "4.0.1",
"nconf": "^0.12.1",
"noto-color-emoji": "^1.0.1",
"pinia": "2.1.7",
"qth-locator": "2.1.0",
"socket.io": "4.7.4",
"uuid": "^9.0.1",
"vue": "3.4.21",
"vue-chartjs": "5.3.0",
"vuemoji-picker": "0.2.0"
},
"devDependencies": {
"@electron/notarize": "^1.2.3",
"electron": "^23.0.0",
"electron-builder": "^23.6.0",
"electron-builder-notarize": "^1.5.1"
},
"build": {
"productName": "FreeDATA",
"appId": "app.freedata",
"afterSign": "electron-builder-notarize",
"npmRebuild": "false",
"directories": {
"buildResources": "build",
"output": "dist"
},
"mac": {
"target": [
"default"
],
"icon": "build/icon.png",
"hardenedRuntime": true,
"entitlements": "build/entitlements.plist",
"entitlementsInherit": "build/entitlements.plist",
"gatekeeperAssess": false
},
"win": {
"icon": "build/icon.png",
"target": [
"nsis"
]
},
"linux": {
"icon": "build/icon.png",
"target": [
"AppImage"
],
"category": "Development"
},
"publish": {
"provider": "github",
"releaseType": "release"
},
"extraResources": [
{
"from": "../tnc/dist/tnc/",
"to": "tnc",
"filter": [
"**/*",
"!**/.git"
]
}
]
"@types/nconf": "^0.10.6",
"@typescript-eslint/eslint-plugin": "6.21.0",
"@vitejs/plugin-vue": "5.0.4",
"electron": "28.2.6",
"electron-builder": "24.9.1",
"eslint": "8.56.0",
"eslint-config-prettier": "9.1.0",
"eslint-config-standard-with-typescript": "43.0.1",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-n": "16.6.2",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.22.0",
"typescript": "5.3.3",
"vite": "5.1.7",
"vite-plugin-electron": "0.28.2",
"vite-plugin-electron-renderer": "0.14.5",
"vitest": "1.3.1",
"vue": "3.4.21",
"vue-tsc": "1.8.27"
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,186 +0,0 @@
const path = require("path");
const { ipcRenderer } = require("electron");
// https://stackoverflow.com/a/26227660
var appDataFolder =
process.env.APPDATA ||
(process.platform == "darwin"
? process.env.HOME + "/Library/Application Support"
: process.env.HOME + "/.config");
var configFolder = path.join(appDataFolder, "FreeDATA");
var configPath = path.join(configFolder, "config.json");
const config = require(configPath);
// WINDOW LISTENER
window.addEventListener("DOMContentLoaded", () => {
document
.getElementById("enable_filter_info")
.addEventListener("click", () => {
if (document.getElementById("enable_filter_info").checked) {
display_class("table-info", true);
} else {
display_class("table-info", false);
}
});
document
.getElementById("enable_filter_debug")
.addEventListener("click", () => {
if (document.getElementById("enable_filter_debug").checked) {
display_class("table-debug", true);
} else {
display_class("table-debug", false);
}
});
document
.getElementById("enable_filter_warning")
.addEventListener("click", () => {
if (document.getElementById("enable_filter_warning").checked) {
display_class("table-warning", true);
} else {
display_class("table-warning", false);
}
});
document
.getElementById("enable_filter_error")
.addEventListener("click", () => {
if (document.getElementById("enable_filter_error").checked) {
display_class("table-danger", true);
} else {
display_class("table-danger", false);
}
});
});
function display_class(class_name, state) {
var collection = document.getElementsByClassName(class_name);
console.log(collection);
for (let i = 0; i < collection.length; i++) {
if (state == true) {
collection[i].style.display = "table-row";
} else {
collection[i].style.display = "None";
}
}
}
ipcRenderer.on("action-update-log", (event, arg) => {
var entry = arg.entry;
// remove ANSI characters from string, caused by color logging
// https://stackoverflow.com/a/29497680
entry = entry.replace(
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,
""
);
var tbl = document.getElementById("log");
var row = document.createElement("tr");
var timestamp = document.createElement("td");
var timestampText = document.createElement("span");
//datetime = new Date();
//timestampText.innerText = datetime.toISOString();
timestampText.innerText = entry.slice(0, 19);
timestamp.appendChild(timestampText);
var type = document.createElement("td");
var typeText = document.createElement("span");
// typeText.innerText = entry.slice(10, 30).match(/[\[](.*)[^\]]/g);
console.log(entry.match(/\[[^\]]+\]/g));
try {
typeText.innerText = entry.match(/\[[^\]]+\]/g)[0];
} catch (e) {
typeText.innerText = "-";
}
// let res = str.match(/[\[](.*)[^\]]/g);
type.appendChild(typeText);
var area = document.createElement("td");
var areaText = document.createElement("span");
//areaText.innerText = entry.slice(10, 50).match(/[\] \[](.*)[^\]]/g);
//areaText.innerText = entry.match(/\[[^\]]+\]/g)[1];
try {
areaText.innerText = entry.match(/\[[^\]]+\]/g)[1];
} catch (e) {
areaText.innerText = "-";
}
area.appendChild(areaText);
var logEntry = document.createElement("td");
var logEntryText = document.createElement("span");
try {
logEntryText.innerText = entry.split("]")[2];
} catch (e) {
logEntryText.innerText = "-";
}
logEntry.appendChild(logEntryText);
row.appendChild(timestamp);
row.appendChild(type);
row.appendChild(area);
row.appendChild(logEntry);
//row.classList.add("table-blablubb");
/*
if (logEntryText.innerText.includes('ALSA lib pcm')) {
row.classList.add("table-secondary");
}
*/
if (typeText.innerText.includes("info")) {
row.classList.add("table-info");
}
if (typeText.innerText.includes("debug")) {
row.classList.add("table-secondary");
}
if (typeText.innerText.includes("warning")) {
row.classList.add("table-warning");
}
if (typeText.innerText.includes("error")) {
row.classList.add("table-danger");
}
if (document.getElementById("enable_filter_info").checked) {
row.style.display = "table-row";
display_class("table-info", true);
} else {
row.style.display = "None";
display_class("table-info", false);
}
if (document.getElementById("enable_filter_debug").checked) {
row.style.display = "table-row";
display_class("table-secondary", true);
} else {
row.style.display = "None";
display_class("table-secondary", false);
}
if (document.getElementById("enable_filter_warning").checked) {
row.style.display = "table-row";
display_class("table-warning", true);
} else {
row.style.display = "None";
display_class("table-warning", false);
}
if (document.getElementById("enable_filter_error").checked) {
row.style.display = "table-row";
display_class("table-danger", true);
} else {
row.style.display = "None";
display_class("table-danger", false);
}
tbl.appendChild(row);
// scroll to bottom of page
// https://stackoverflow.com/a/11715670
window.scrollTo(0, document.body.scrollHeight);
});

File diff suppressed because it is too large Load diff

View file

Before

Width:  |  Height:  |  Size: 590 KiB

After

Width:  |  Height:  |  Size: 590 KiB

14
gui/setup.md Normal file
View file

@ -0,0 +1,14 @@
https://getbootstrap.com/docs/5.3/getting-started/vite/
https://vuejs.org/guide/essentials/event-handling.html#inline-handlers
https://linuxhint.com/install-use-bootstrap-with-vue-js/
https://github.com/electron-vite
https://github.com/electron-vite/electron-vite-vue
https://github.com/vuejs/create-vue
https://vue-community.org/guide/ecosystem/desktop-apps.html#electron
https://blog.logrocket.com/building-app-electron-vue/
Folder structure
dist-electron: Automatically compiled source from vite
electron: Source code folder for Electron stuff
public: Public data
src: VueJS source code

View file

@ -1,928 +0,0 @@
var net = require("net");
const path = require("path");
const { ipcRenderer } = require("electron");
const FD = require("./freedata");
const log = require("electron-log");
const socketLog = log.scope("tnc");
//const utf8 = require("utf8");
// https://stackoverflow.com/a/26227660
var appDataFolder =
process.env.APPDATA ||
(process.platform == "darwin"
? process.env.HOME + "/Library/Application Support"
: process.env.HOME + "/.config");
var configFolder = path.join(appDataFolder, "FreeDATA");
var configPath = path.join(configFolder, "config.json");
const config = require(configPath);
var client = new net.Socket();
var socketchunk = ""; // Current message, per connection.
// split character
const split_char = "\0;\1;";
// globals for getting new data only if available so we are saving bandwidth
var rxBufferLengthTnc = 0;
var rxBufferLengthGui = 0;
//var rxMsgBufferLengthTnc = 0;
//var rxMsgBufferLengthGui = 0;
// global to keep track of TNC connection error emissions
var tncShowConnectStateError = 1;
// global for storing ip information
var tnc_port = config.tnc_port;
var tnc_host = config.tnc_host;
// network connection Timeout
setTimeout(connectTNC, 2000);
function connectTNC() {
//exports.connectTNC = function(){
//socketLog.info('connecting to TNC...')
//clear message buffer after reconnecting or initial connection
socketchunk = "";
if (config.tnclocation == "localhost") {
client.connect(3000, "127.0.0.1");
} else {
client.connect(tnc_port, tnc_host);
}
}
client.on("connect", function (data) {
socketLog.info("TNC connection established");
let Data = {
busy_state: "-",
arq_state: "-",
//channel_state: "-",
frequency: "-",
mode: "-",
bandwidth: "-",
dbfs_level: 0,
};
ipcRenderer.send("request-update-tnc-state", Data);
// also update tnc connection state
ipcRenderer.send("request-update-tnc-connection", {
tnc_connection: client.readyState,
});
tncShowConnectStateError = 1;
});
client.on("error", function (data) {
if (tncShowConnectStateError == 1) {
socketLog.error("TNC connection error");
tncShowConnectStateError = 0;
}
setTimeout(connectTNC, 500);
client.destroy();
let Data = {
tnc_connection: client.readyState,
busy_state: "-",
arq_state: "-",
//channel_state: "-",
frequency: "-",
mode: "-",
bandwidth: "-",
dbfs_level: 0,
};
ipcRenderer.send("request-update-tnc-state", Data);
ipcRenderer.send("request-update-tnc-connection", {
tnc_connection: client.readyState,
});
});
/*
client.on('close', function(data) {
socketLog.info(' TNC connection closed');
setTimeout(connectTNC, 2000)
});
*/
client.on("end", function (data) {
socketLog.info("TNC connection ended");
ipcRenderer.send("request-update-tnc-connection", {
tnc_connection: client.readyState,
});
client.destroy();
setTimeout(connectTNC, 500);
});
writeTncCommand = function (command) {
//socketLog.info(command)
// we use the writingCommand function to update our TCPIP state because we are calling this function a lot
// if socket opened, we are able to run commands
if (client.readyState == "open") {
client.write(command + "\n");
}
if (client.readyState == "closed") {
socketLog.info("CLOSED!");
}
if (client.readyState == "opening") {
socketLog.info("connecting to TNC...");
}
};
client.on("data", function (socketdata) {
ipcRenderer.send("request-update-tnc-connection", {
tnc_connection: client.readyState,
});
/*
inspired by:
stackoverflow.com questions 9070700 nodejs-net-createserver-large-amount-of-data-coming-in
*/
socketdata = socketdata.toString("utf8"); // convert data to string
socketchunk += socketdata; // append data to buffer so we can stick long data together
// check if we received begin and end of json data
if (socketchunk.startsWith('{"') && socketchunk.endsWith('"}\n')) {
var data = "";
// split data into chunks if we received multiple commands
socketchunk = socketchunk.split("\n");
//don't think this is needed anymore
//data = JSON.parse(socketchunk[0])
// search for empty entries in socketchunk and remove them
for (i = 0; i < socketchunk.length; i++) {
if (socketchunk[i] === "") {
socketchunk.splice(i, 1);
}
}
//iterate through socketchunks array to execute multiple commands in row
for (i = 0; i < socketchunk.length; i++) {
//check if data is not empty
if (socketchunk[i].length > 0) {
//try to parse JSON
try {
data = JSON.parse(socketchunk[i]);
} catch (e) {
socketLog.info("Throwing away data!!!!\n" + e); // "SyntaxError
//socketLog.info(e); // "SyntaxError
socketLog.info(socketchunk[i]);
socketchunk = "";
//If we're here, I don't think we want to process any data that may be in data variable
continue;
}
}
if (data["command"] == "tnc_state") {
//socketLog.info(data)
// set length of RX Buffer to global variable
rxBufferLengthTnc = data["rx_buffer_length"];
//rxMsgBufferLengthTnc = data["rx_msg_buffer_length"];
let Data = {
mycallsign: data["mycallsign"],
mygrid: data["mygrid"],
ptt_state: data["ptt_state"],
busy_state: data["tnc_state"],
arq_state: data["arq_state"],
arq_session: data["arq_session"],
//channel_state: data['CHANNEL_STATE'],
frequency: data["frequency"],
speed_level: data["speed_level"],
mode: data["mode"],
bandwidth: data["bandwidth"],
dbfs_level: data["audio_dbfs"],
fft: data["fft"],
channel_busy: data["channel_busy"],
channel_busy_slot: data["channel_busy_slot"],
scatter: data["scatter"],
info: data["info"],
rx_buffer_length: data["rx_buffer_length"],
rx_msg_buffer_length: data["rx_msg_buffer_length"],
tx_n_max_retries: data["tx_n_max_retries"],
arq_tx_n_frames_per_burst: data["arq_tx_n_frames_per_burst"],
arq_tx_n_bursts: data["arq_tx_n_bursts"],
arq_tx_n_current_arq_frame: data["arq_tx_n_current_arq_frame"],
arq_tx_n_total_arq_frames: data["arq_tx_n_total_arq_frames"],
arq_rx_frame_n_bursts: data["arq_rx_frame_n_bursts"],
arq_rx_n_current_arq_frame: data["arq_rx_n_current_arq_frame"],
arq_n_arq_frames_per_data_frame:
data["arq_n_arq_frames_per_data_frame"],
arq_bytes_per_minute: data["arq_bytes_per_minute"],
arq_seconds_until_finish: data["arq_seconds_until_finish"],
arq_compression_factor: data["arq_compression_factor"],
total_bytes: data["total_bytes"],
arq_transmission_percent: data["arq_transmission_percent"],
stations: data["stations"],
beacon_state: data["beacon_state"],
hamlib_status: data["hamlib_status"],
listen: data["listen"],
audio_recording: data["audio_recording"],
speed_list: data["speed_list"],
strength: data["strength"],
is_codec2_traffic: data["is_codec2_traffic"],
//speed_table: [{"bpm" : 5200, "snr": -3, "timestamp":1673555399},{"bpm" : 2315, "snr": 12, "timestamp":1673555500}],
};
ipcRenderer.send("request-update-tnc-state", Data);
//continue to next for loop iteration, nothing else needs to be done here
continue;
}
// ----------- catch tnc messages START -----------
if (data["freedata"] == "tnc-message") {
switch (data["fec"]) {
case "is_writing":
// RX'd FECiswriting
ipcRenderer.send("request-show-fec-toast-iswriting", {
data: [data],
});
break;
case "broadcast":
// RX'd FEC BROADCAST
var encoded_data = FD.atob_FD(data["data"]);
var splitted_data = encoded_data.split(split_char);
var messageArray = [];
if (splitted_data[0] == "m") {
messageArray.push(data);
console.log(data);
}
let Messages = {
data: messageArray,
};
ipcRenderer.send("request-new-msg-received", Messages);
break;
}
switch (data["cq"]) {
case "transmitting":
// CQ TRANSMITTING
ipcRenderer.send("request-show-cq-toast-transmitting", {
data: [data],
});
break;
case "received":
// CQ RECEIVED
ipcRenderer.send("request-show-cq-toast-received", {
data: [data],
});
break;
}
switch (data["qrv"]) {
case "transmitting":
// QRV TRANSMITTING
ipcRenderer.send("request-show-qrv-toast-transmitting", {
data: [data],
});
break;
case "received":
// QRV RECEIVED
ipcRenderer.send("request-show-qrv-toast-received", {
data: [data],
});
break;
}
switch (data["beacon"]) {
case "transmitting":
// BEACON TRANSMITTING
ipcRenderer.send("request-show-beacon-toast-transmitting", {
data: [data],
});
break;
case "received":
// BEACON RECEIVED
ipcRenderer.send("request-show-beacon-toast-received", {
data: [data],
});
ipcRenderer.send("request-new-msg-received", { data: [data] });
break;
}
switch (data["ping"]) {
case "transmitting":
// PING TRANSMITTING
ipcRenderer.send("request-show-ping-toast-transmitting", {
data: [data],
});
break;
case "received":
// PING RECEIVED
ipcRenderer.send("request-show-ping-toast-received", {
data: [data],
});
ipcRenderer.send("request-new-msg-received", { data: [data] });
break;
case "acknowledge":
// PING ACKNOWLEDGE
ipcRenderer.send("request-show-ping-toast-received-ack", {
data: [data],
});
ipcRenderer.send("request-new-msg-received", { data: [data] });
break;
}
// ARQ SESSION && freedata == tnc-message
if (data["arq"] == "session") {
switch (data["status"]) {
case "connecting":
// ARQ Open
ipcRenderer.send("request-show-arq-toast-session-connecting", {
data: [data],
});
break;
case "connected":
// ARQ Opening
ipcRenderer.send("request-show-arq-toast-session-connected", {
data: [data],
});
break;
case "waiting":
// ARQ Opening
ipcRenderer.send("request-show-arq-toast-session-waiting", {
data: [data],
});
break;
case "close":
// ARQ Closing
ipcRenderer.send("request-show-arq-toast-session-close", {
data: [data],
});
break;
case "failed":
// ARQ Failed
ipcRenderer.send("request-show-arq-toast-session-failed", {
data: [data],
});
break;
}
}
// ARQ TRANSMISSION && freedata == tnc-message
if (data["arq"] == "transmission") {
switch (data["status"]) {
case "opened":
// ARQ Open
ipcRenderer.send("request-show-arq-toast-datachannel-opened", {
data: [data],
});
break;
case "opening":
// ARQ Opening IRS/ISS
if (data["irs"] == "False") {
ipcRenderer.send("request-show-arq-toast-datachannel-opening", {
data: [data],
});
ipcRenderer.send("request-update-transmission-status", {
data: [data],
});
} else {
ipcRenderer.send(
"request-show-arq-toast-datachannel-received-opener",
{ data: [data] }
);
ipcRenderer.send("request-update-reception-status", {
data: [data],
});
}
break;
case "waiting":
// ARQ waiting
ipcRenderer.send("request-show-arq-toast-datachannel-waiting", {
data: [data],
});
break;
case "receiving":
// ARQ RX
ipcRenderer.send("request-update-reception-status", {
data: [data],
});
break;
case "failed":
// ARQ TX Failed
if (data["reason"] == "protocol version missmatch") {
ipcRenderer.send(
"request-show-arq-toast-transmission-failed-ver",
{ data: [data] }
);
} else {
ipcRenderer.send("request-show-arq-toast-transmission-failed", {
data: [data],
});
}
switch (data["irs"]) {
case "True":
ipcRenderer.send("request-update-reception-status", {
data: [data],
});
break;
default:
ipcRenderer.send("request-update-transmission-status", {
data: [data],
});
break;
}
break;
case "received":
// ARQ Received
ipcRenderer.send("request-show-arq-toast-transmission-received", {
data: [data],
});
ipcRenderer.send("request-update-reception-status", {
data: [data],
});
dataArray = [];
messageArray = [];
socketLog.info(data);
// we need to encode here to do a deep check for checking if file or message
//var encoded_data = atob(data['data'])
var encoded_data = FD.atob_FD(data["data"]);
var splitted_data = encoded_data.split(split_char);
if (splitted_data[0] == "f") {
dataArray.push(data);
}
if (splitted_data[0] == "m") {
messageArray.push(data);
console.log(data);
}
rxBufferLengthGui = dataArray.length;
let Files = {
data: dataArray,
};
ipcRenderer.send("request-update-rx-buffer", Files);
ipcRenderer.send("request-new-msg-received", Files);
//rxMsgBufferLengthGui = messageArray.length;
let Messages = {
data: messageArray,
};
ipcRenderer.send("request-new-msg-received", Messages);
break;
case "transmitting":
// ARQ transmitting
ipcRenderer.send(
"request-show-arq-toast-transmission-transmitting",
{ data: [data] }
);
ipcRenderer.send("request-update-transmission-status", {
data: [data],
});
break;
case "transmitted":
// ARQ transmitted
ipcRenderer.send(
"request-show-arq-toast-transmission-transmitted",
{ data: [data] }
);
ipcRenderer.send("request-update-transmission-status", {
data: [data],
});
break;
}
}
}
// ----------- catch tnc info messages END -----------
// if we manually checking for the rx buffer we are getting an array of multiple data
if (data["command"] == "rx_buffer") {
socketLog.info(data);
// iterate through buffer list and sort it to file or message array
dataArray = [];
messageArray = [];
for (i = 0; i < data["data-array"].length; i++) {
try {
// we need to encode here to do a deep check for checking if file or message
//var encoded_data = atob(data['data-array'][i]['data'])
var encoded_data = FD.atob_FD(data["data-array"][i]["data"]);
var splitted_data = encoded_data.split(split_char);
if (splitted_data[0] == "f") {
dataArray.push(data["data-array"][i]);
}
if (splitted_data[0] == "m") {
messageArray.push(data["data-array"][i]);
}
} catch (e) {
socketLog.info(e);
}
}
rxBufferLengthGui = dataArray.length;
let Files = {
data: dataArray,
};
ipcRenderer.send("request-update-rx-buffer", Files);
//rxMsgBufferLengthGui = messageArray.length;
let Messages = {
data: messageArray,
};
//ipcRenderer.send('request-update-rx-msg-buffer', Messages);
ipcRenderer.send("request-new-msg-received", Messages);
}
}
//finally delete message buffer
socketchunk = "";
}
});
function hexToBytes(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
}
//Get TNC State
exports.getTncState = function () {
command = '{"type" : "get", "command" : "tnc_state"}';
writeTncCommand(command);
};
//Get DATA State
exports.getDataState = function () {
command = '{"type" : "get", "command" : "data_state"}';
//writeTncCommand(command)
};
// Send Ping
exports.sendPing = function (dxcallsign) {
command =
'{"type" : "ping", "command" : "ping", "dxcallsign" : "' +
dxcallsign +
'"}';
writeTncCommand(command);
};
// Send CQ
exports.sendCQ = function () {
command = '{"type" : "broadcast", "command" : "cqcqcq"}';
writeTncCommand(command);
};
// Set AUDIO Level
exports.setTxAudioLevel = function (value) {
command =
'{"type" : "set", "command" : "tx_audio_level", "value" : "' + value + '"}';
writeTncCommand(command);
};
// Send File
exports.sendFile = function (
dxcallsign,
mode,
frames,
filename,
filetype,
data,
checksum
) {
socketLog.info(data);
socketLog.info(filetype);
socketLog.info(filename);
var datatype = "f";
data =
datatype +
split_char +
filename +
split_char +
filetype +
split_char +
checksum +
split_char +
data;
socketLog.info(data);
//socketLog.info(btoa(data))
//Btoa / atob will not work with charsets > 8 bits (i.e. the emojis); should probably move away from using it
//TODO: Will need to update anyother occurences and throughly test
//data = btoa(data)
data = FD.btoa_FD(data);
command =
'{"type" : "arq", "command" : "send_raw", "parameter" : [{"dxcallsign" : "' +
dxcallsign +
'", "mode" : "' +
mode +
'", "n_frames" : "' +
frames +
'", "data" : "' +
data +
'"}]}';
writeTncCommand(command);
};
// Send Message
exports.sendMessage = function (
dxcallsign,
mode,
frames,
data,
checksum,
uuid,
command
) {
data = FD.btoa_FD(
"m" +
split_char +
command +
split_char +
checksum +
split_char +
uuid +
split_char +
data
);
command =
'{"type" : "arq", "command" : "send_raw", "uuid" : "' +
uuid +
'", "parameter" : [{"dxcallsign" : "' +
dxcallsign +
'", "mode" : "' +
mode +
'", "n_frames" : "' +
frames +
'", "data" : "' +
data +
'", "attempts": "10"}]}';
socketLog.info(command);
socketLog.info("-------------------------------------");
writeTncCommand(command);
};
// Send Request message
//It would be then „m + split + request + split + request-type“
function sendRequest(dxcallsign, mode, frames, data, command) {
data = FD.btoa_FD("m" + split_char + command + split_char + data);
command =
'{"type" : "arq", "command" : "send_raw", "parameter" : [{"dxcallsign" : "' +
dxcallsign +
'", "mode" : "' +
mode +
'", "n_frames" : "' +
frames +
'", "data" : "' +
data +
'", "attempts": "10"}]}';
socketLog.info(command);
socketLog.info("--------------REQ--------------------");
writeTncCommand(command);
}
// Send Response message
//It would be then „m + split + request + split + request-type“
function sendResponse(dxcallsign, mode, frames, data, command) {
data = FD.btoa_FD("m" + split_char + command + split_char + data);
command =
'{"type" : "arq", "command" : "send_raw", "parameter" : [{"dxcallsign" : "' +
dxcallsign +
'", "mode" : "' +
mode +
'", "n_frames" : "' +
frames +
'", "data" : "' +
data +
'", "attempts": "10"}]}';
socketLog.info(command);
socketLog.info("--------------RES--------------------");
writeTncCommand(command);
}
//Send station info request
exports.sendRequestInfo = function (dxcallsign) {
//Command 0 = user/station information
//Command 1 = shared folder list
//Command 2 = shared file transfer
sendRequest(dxcallsign, 255, 1, "0", "req");
};
//Send shared folder file list request
exports.sendRequestSharedFolderList = function (dxcallsign) {
//Command 0 = user/station information
//Command 1 = shared folder list
//Command 2 = shared file transfer
sendRequest(dxcallsign, 255, 1, "1", "req");
};
//Send shared file request
exports.sendRequestSharedFile = function (dxcallsign, file) {
//Command 0 = user/station information
//Command 1 = shared folder list
//Command 2 = shared file transfer
sendRequest(dxcallsign, 255, 1, "2" + file, "req");
};
//Send station info response
exports.sendResponseInfo = function (dxcallsign, userinfo) {
//Command 0 = user/station information
//Command 1 = shared folder list
//Command 2 = shared file transfer
sendResponse(dxcallsign, 255, 1, userinfo, "res-0");
};
//Send shared folder response
exports.sendResponseSharedFolderList = function (dxcallsign, sharedFolderList) {
//Command 0 = user/station information
//Command 1 = shared folder list
//Command 2 = shared file transfer
sendResponse(dxcallsign, 255, 1, sharedFolderList, "res-1");
};
//Send shared file response
exports.sendResponseSharedFile = function (
dxcallsign,
sharedFile,
sharedFileData
) {
console.log(
"In sendResponseSharedFile",
dxcallsign,
sharedFile,
sharedFileData
);
//Command 0 = user/station information
//Command 1 = shared folder list
//Command 2 = shared file transfer
sendResponse(dxcallsign, 255, 1, sharedFile + "/" + sharedFileData, "res-2");
};
//STOP TRANSMISSION
exports.stopTransmission = function () {
command = '{"type" : "arq", "command": "stop_transmission"}';
writeTncCommand(command);
};
// Get RX BUffer
exports.getRxBuffer = function () {
command = '{"type" : "get", "command" : "rx_buffer"}';
// call command only if new data arrived
if (rxBufferLengthGui != rxBufferLengthTnc) {
writeTncCommand(command);
}
};
// START BEACON
exports.startBeacon = function (interval) {
command =
'{"type" : "broadcast", "command" : "start_beacon", "parameter": "' +
interval +
'"}';
writeTncCommand(command);
};
// STOP BEACON
exports.stopBeacon = function () {
command = '{"type" : "broadcast", "command" : "stop_beacon"}';
writeTncCommand(command);
};
// OPEN ARQ SESSION
exports.connectARQ = function (dxcallsign) {
command =
'{"type" : "arq", "command" : "connect", "dxcallsign": "' +
dxcallsign +
'", "attempts": "10"}';
writeTncCommand(command);
};
// CLOSE ARQ SESSION
exports.disconnectARQ = function () {
command = '{"type" : "arq", "command" : "disconnect"}';
writeTncCommand(command);
};
// SEND TEST FRAME
exports.sendTestFrame = function () {
command = '{"type" : "set", "command" : "send_test_frame"}';
writeTncCommand(command);
};
// SEND FEC
exports.sendFEC = function (mode, payload) {
command =
'{"type" : "fec", "command" : "transmit", "mode" : "' +
mode +
'", "payload" : "' +
payload +
'"}';
writeTncCommand(command);
};
// SEND FEC IS WRITING
exports.sendFecIsWriting = function (mycallsign) {
command =
'{"type" : "fec", "command" : "transmit_is_writing", "mycallsign" : "' +
mycallsign +
'"}';
writeTncCommand(command);
};
// SEND FEC TO BROADCASTCHANNEL
exports.sendBroadcastChannel = function (channel, data_out, uuid) {
let checksum = "";
let command = "";
let data = FD.btoa_FD(
"m" +
split_char +
channel +
//split_char +
//checksum +
split_char +
uuid +
split_char +
data_out
);
console.log(data.length);
let payload = data;
command =
'{"type" : "fec", "command" : "transmit", "mode": "datac4", "wakeup": "True", "payload" : "' +
payload +
'"}';
writeTncCommand(command);
};
// RECORD AUDIO
exports.record_audio = function () {
command = '{"type" : "set", "command" : "record_audio"}';
writeTncCommand(command);
};
// SET FREQUENCY
exports.set_frequency = function (frequency) {
command =
'{"type" : "set", "command" : "frequency", "frequency": ' + frequency + "}";
writeTncCommand(command);
};
// SET MODE
exports.set_mode = function (mode) {
command = '{"type" : "set", "command" : "mode", "mode": "' + mode + '"}';
console.log(command);
writeTncCommand(command);
};
ipcRenderer.on("action-update-tnc-ip", (event, arg) => {
client.destroy();
let Data = {
busy_state: "-",
arq_state: "-",
//channel_state: "-",
frequency: "-",
mode: "-",
bandwidth: "-",
dbfs_level: 0,
};
ipcRenderer.send("request-update-tnc-state", Data);
tnc_port = arg.port;
tnc_host = arg.adress;
connectTNC();
});
// https://stackoverflow.com/a/50579690
// crc32 calculation
//console.log(crc32('abc'));
//console.log(crc32('abc').toString(16).toUpperCase()); // hex
var crc32 = function (r) {
for (var a, o = [], c = 0; c < 256; c++) {
a = c;
for (var f = 0; f < 8; f++) a = 1 & a ? 3988292384 ^ (a >>> 1) : a >>> 1;
o[c] = a;
}
for (var n = -1, t = 0; t < r.length; t++)
n = (n >>> 8) ^ o[255 & (n ^ r.charCodeAt(t))];
return (-1 ^ n) >>> 0;
};

7
gui/src/App.vue Normal file
View file

@ -0,0 +1,7 @@
<script setup lang="ts">
import FreeDATAMain from "./components/main.vue";
</script>
<template>
<FreeDATAMain />
</template>

File diff suppressed because it is too large Load diff

View file

@ -1,844 +0,0 @@
<!DOCTYPE html>
<html lang="en" data-bs-theme="light">
<head>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Content-Security-Policy" content="script-src 'self';" />
<!-- Bootstrap CSS -->
<link
rel="stylesheet"
id="bootstrap_theme"
href="../node_modules/bootstrap/dist/css/bootstrap.min.css"
/>
<link
rel="stylesheet"
href="../node_modules/bootstrap-icons/font/bootstrap-icons.css"
/>
<!-- Custom CSS -->
<link rel="stylesheet" type="text/css" href="styles.css" />
<title>FreeDATA - CHAT</title>
</head>
<body>
<!-- bootstrap -->
<script src="../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<!-- chart.js -->
<script src="../node_modules/chart.js/dist/chart.umd.js"></script>
<!--<script src="../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.min.js"></script>-->
<!--<script type="module" src="../node_modules/emoji-picker-element/index.js"></script>-->
<script
type="module"
src="../node_modules/emoji-picker-element/picker.js"
></script>
<script
type="module"
src="../node_modules/emoji-picker-element/database.js"
></script>
<div
class="position-absolute container w-100 h-100 bottom-0 end-0 mb-5"
style="z-index: 100; display: none"
id="emojipickercontainer"
>
<emoji-picker
locale="en"
class="position-absolute bottom-0 end-0 p-1 mb-2"
data-source="../node_modules/emoji-picker-element-data/en/emojibase/data.json"
></emoji-picker>
</div>
<div class="container-fluid">
<div class="row h-100">
<div class="col-4 p-2">
<! ------Chats area ---------------------------------------------------------------------->
<div class="container-fluid m-0 p-0">
<div class="input-group bottom-0 m-0 w-100">
<input
class="form-control w-50"
maxlength="9"
style="text-transform: uppercase"
id="chatModuleNewDxCall"
placeholder="DX CALL"
/>
<button
class="btn btn-sm btn-success"
id="createNewChatButton"
type="button"
title="Start a new chat (enter dx call sign first)"
>
<i class="bi bi-pencil-square" style="font-size: 1.2rem"></i>
</button>
<button
type="button"
id="userModalButton"
data-bs-toggle="modal"
data-bs-target="#userModal"
class="btn btn-sm btn-primary ms-2"
title="My station info"
>
<i class="bi bi-person" style="font-size: 1.2rem"></i>
</button>
<button
type="button"
id="sharedFolderButton"
data-bs-toggle="modal"
data-bs-target="#sharedFolderModal"
class="btn btn-sm btn-primary"
title="My shared folder"
>
<i class="bi bi-files" style="font-size: 1.2rem"></i>
</button>
</div>
</div>
<hr class="m-2" />
<div class="overflow-auto vh-100">
<div
class="list-group overflow-auto"
id="list-tab"
role="tablist"
style="height: calc(100vh - 70px)"
></div>
</div>
</div>
<div class="col-8 border vh-100 p-0">
<! ------ chat navbar ---------------------------------------------------------------------->
<div class="container-fluid m-2 p-0">
<div class="input-group bottom-0">
<button
class="btn btn-sm btn-outline-secondary me"
id="ping"
type="button"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Ping remote station"
>
Ping
</button>
<button
type="button"
id="userModalDXButton"
data-bs-toggle="modal"
data-bs-target="#userModalDX"
class="btn btn-sm btn-outline-secondary"
title="Request remote station's information"
>
<i class="bi bi-person" style="font-size: 1.2rem"></i>
</button>
<button
type="button"
id="sharedFolderDXButton"
data-bs-toggle="modal"
data-bs-target="#sharedFolderModalDX"
class="btn btn-sm btn-outline-secondary me-2"
title="Request remote station's shared files"
>
<i class="bi bi-files" style="font-size: 1.2rem"></i>
</button>
<button
type="button"
class="btn btn-small btn-outline-primary dropdown-toggle me-2"
data-bs-toggle="dropdown"
aria-expanded="false"
data-bs-auto-close="outside"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Message filter"
>
<i class="bi bi-funnel-fill"></i>
</button>
<form class="dropdown-menu p-4" id="frmFilter">
<div class="mb-1">
<div class="form-check">
<input
checked="true"
type="checkbox"
class="form-check-input"
id="chkMessage"
/>
<label class="form-check-label" for="chkMessage">
All Messages
</label>
</div>
</div>
<div class="mb-1">
<div class="form-check">
<input
checked="false"
type="checkbox"
class="form-check-input"
id="chkNewMessage"
/>
<label class="form-check-label" for="chkNewMessage">
Unread Messages
</label>
</div>
</div>
<div class="mb-1">
<div class="form-check">
<input
type="checkbox"
class="form-check-input"
id="chkPing"
/>
<label class="form-check-label" for="chkPing">
Pings
</label>
</div>
</div>
<div class="mb-1">
<div class="form-check">
<input
checked="true"
type="checkbox"
class="form-check-input"
id="chkPingAck"
/>
<label class="form-check-label" for="chkPingAck">
Ping-Acks
</label>
</div>
</div>
<div class="mb-1">
<div class="form-check">
<input
type="checkbox"
class="form-check-input"
id="chkBeacon"
/>
<label class="form-check-label" for="chkBeacon">
Beacons
</label>
</div>
</div>
<div class="mb-1">
<div class="form-check">
<input
type="checkbox"
class="form-check-input"
id="chkRequest"
/>
<label class="form-check-label" for="chkRequest">
Requests
</label>
</div>
</div>
<div class="mb-1">
<div class="form-check">
<input
type="checkbox"
class="form-check-input"
id="chkResponse"
/>
<label class="form-check-label" for="chkResponse">
Responses
</label>
</div>
</div>
<button type="button" class="btn btn-primary" id="btnFilter">
Refresh
</button>
</form>
<button
id="chatSettingsDropDown"
type="button"
class="btn btn-outline-secondary dropdown-toggle"
data-bs-toggle="dropdown"
aria-expanded="false"
title="More options...."
>
<i class="bi bi-three-dots-vertical"></i>
</button>
<ul class="dropdown-menu" aria-labelledby="chatSettingsDropDown">
<li>
<a
class="dropdown-item bg-danger text-white"
id="delete_selected_chat"
href="#"
><i
class="bi bi-person-x"
style="font-size: 1rem"
></i>
Delete chat</a>
</li>
<div class="dropdown-divider"></div>
<li>
<button
class="dropdown-item"
id="openHelpModalchat"
data-bs-toggle="modal"
data-bs-target="#chatHelpModal"
>
<i
class="bi bi-question-circle"
style="font-size: 1rem"
></i>
Help
</button>
</li>
</ul>
<span
class="input-group-text ms-2"
id="txtConnectedWithChat"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
title="Connected with"
>------</span>
</div>
</div>
<hr class="m-0" />
<! ------messages area ---------------------------------------------------------------------->
<div
class="container overflow-auto"
id="message-container"
style="height: calc(100% - 150px)"
>
<div class="tab-content" id="nav-tabContent"></div>
<!--<div class="container position-absolute bottom-0">-->
</div>
<!-- </div>-->
<div class="container-fluid mt-2 p-0">
<input
type="checkbox"
id="expand_textarea"
class="btn-check"
autocomplete="off"
/>
<label
class="btn d-flex justify-content-center"
id="expand_textarea_label"
for="expand_textarea"
><i
id="expand_textarea_button"
class="bi bi-chevron-compact-up"
></i
></label>
<div class="input-group bottom-0 ms-2">
<!--<input class="form-control" maxlength="8" style="max-width: 6rem; text-transform:uppercase; display:none" id="chatModuleDxCall" placeholder="DX CALL"></input>-->
<!--<button class="btn btn-sm btn-primary me-2" id="emojipickerbutton" type="button">-->
<div class="input-group-text">
<i
id="emojipickerbutton"
class="bi bi-emoji-smile p-0"
style="font-size: 1rem"
></i>
</div>
<textarea
class="form-control"
rows="1"
id="chatModuleMessage"
placeholder="Message - Send with [Enter]"
></textarea>
<div class="input-group-text me-3">
<i
class="bi bi-paperclip"
style="font-size: 1rem"
id="selectFilesButton"
></i>
<button
class="btn btn-sm btn-secondary d-none invisible"
id="sendMessage"
type="button"
>
<i class="bi bi-send" style="font-size: 1.2rem"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- user modal -->
<div
class="modal fade"
id="userModal"
tabindex="-1"
aria-labelledby="userModalLabel"
aria-hidden="true"
>
<div class="modal-dialog" style="max-width: 600px">
<div class="modal-content">
<div class="card mb-1 border-0">
<div class="row g-0">
<div class="col-md-4">
<div class="row position-relative p-0 m-0">
<div class="col p-0 m-0">
<img
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktcGVyc29uLWJvdW5kaW5nLWJveCIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNMS41IDFhLjUuNSAwIDAgMC0uNS41djNhLjUuNSAwIDAgMS0xIDB2LTNBMS41IDEuNSAwIDAgMSAxLjUgMGgzYS41LjUgMCAwIDEgMCAxaC0zek0xMSAuNWEuNS41IDAgMCAxIC41LS41aDNBMS41IDEuNSAwIDAgMSAxNiAxLjV2M2EuNS41IDAgMCAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDEtLjUtLjV6TS41IDExYS41LjUgMCAwIDEgLjUuNXYzYS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAwIDEgMCAxaC0zQTEuNSAxLjUgMCAwIDEgMCAxNC41di0zYS41LjUgMCAwIDEgLjUtLjV6bTE1IDBhLjUuNSAwIDAgMSAuNS41djNhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0zYS41LjUgMCAwIDEgMC0xaDNhLjUuNSAwIDAgMCAuNS0uNXYtM2EuNS41IDAgMCAxIC41LS41eiIvPgogIDxwYXRoIGQ9Ik0zIDE0cy0xIDAtMS0xIDEtNCA2LTQgNiAzIDYgNC0xIDEtMSAxSDN6bTgtOWEzIDMgMCAxIDEtNiAwIDMgMyAwIDAgMSA2IDB6Ii8+Cjwvc3ZnPg=="
class="img-fluid rounded-start w-100"
alt="..."
id="user_info_image"
/>
</div>
<div
class="col position-absolute image-overlay text-white justify-content-center align-items-center d-flex align-middle h-100 opacity-0"
id="userImageSelector"
>
<i class="bi bi-upload" style="font-size: 2.2rem"></i>
</div>
</div>
</div>
<div class="col-md-8">
<div class="card-body">
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-pass"></i
></span>
<input
type="text"
class="form-control"
placeholder="Callsign"
id="user_info_callsign"
aria-label="Call"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-person-vcard"></i
></span>
<input
type="text"
class="form-control"
placeholder="name"
id="user_info_name"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-sunrise"></i
></span>
<input
type="text"
class="form-control"
placeholder="age"
id="user_info_age"
aria-label="age"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-house"></i
></span>
<input
type="text"
class="form-control"
placeholder="Location"
id="user_info_location"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-pin-map"></i
></span>
<input
type="text"
class="form-control"
placeholder="Grid"
id="user_info_gridsquare"
aria-label="Name"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-projector"></i
></span>
<input
type="text"
class="form-control"
placeholder="Radio"
id="user_info_radio"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-broadcast-pin"></i
></span>
<input
type="text"
class="form-control"
placeholder="Antenna"
id="user_info_antenna"
aria-label="Name"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-envelope"></i
></span>
<input
type="text"
class="form-control"
placeholder="Email"
id="user_info_email"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-globe"></i
></span>
<input
type="text"
class="form-control"
placeholder="Website"
id="user_info_website"
aria-label="Name"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-info-circle"></i
></span>
<input
type="text"
class="form-control"
placeholder="Comments"
id="user_info_comments"
aria-label="Comments"
aria-describedby="basic-addon1"
/>
</div>
</div>
</div>
</div>
</div>
<button
type="button"
class="btn btn-primary"
data-bs-dismiss="modal"
aria-label="Close"
id="userInfoSave"
>
Save & Close
</button>
</div>
</div>
</div>
<!-- dx user modal -->
<div
class="modal fade"
id="userModalDX"
tabindex="-1"
aria-labelledby="userModalDXLabel"
aria-hidden="true"
>
<div class="modal-dialog" style="max-width: 600px">
<div class="modal-content">
<div class="card mb-1 border-0">
<div class="row g-0">
<div class="col-md-4">
<img
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktcGVyc29uLWJvdW5kaW5nLWJveCIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNMS41IDFhLjUuNSAwIDAgMC0uNS41djNhLjUuNSAwIDAgMS0xIDB2LTNBMS41IDEuNSAwIDAgMSAxLjUgMGgzYS41LjUgMCAwIDEgMCAxaC0zek0xMSAuNWEuNS41IDAgMCAxIC41LS41aDNBMS41IDEuNSAwIDAgMSAxNiAxLjV2M2EuNS41IDAgMCAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDEtLjUtLjV6TS41IDExYS41LjUgMCAwIDEgLjUuNXYzYS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAwIDEgMCAxaC0zQTEuNSAxLjUgMCAwIDEgMCAxNC41di0zYS41LjUgMCAwIDEgLjUtLjV6bTE1IDBhLjUuNSAwIDAgMSAuNS41djNhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0zYS41LjUgMCAwIDEgMC0xaDNhLjUuNSAwIDAgMCAuNS0uNXYtM2EuNS41IDAgMCAxIC41LS41eiIvPgogIDxwYXRoIGQ9Ik0zIDE0cy0xIDAtMS0xIDEtNCA2LTQgNiAzIDYgNC0xIDEtMSAxSDN6bTgtOWEzIDMgMCAxIDEtNiAwIDMgMyAwIDAgMSA2IDB6Ii8+Cjwvc3ZnPg=="
class="img-fluid rounded-start w-100"
alt="..."
id="dx_user_info_image"
/>
</div>
<div class="col-md-8">
<div class="card-body">
<h5>
<span
class="badge bg-secondary"
id="dx_user_info_callsign"
></span>
-
<span
class="badge bg-secondary"
id="dx_user_info_name"
></span>
<span
class="badge bg-secondary"
id="dx_user_info_age"
></span>
</h5>
<ul class="card-text list-unstyled">
<li>
<strong class="col"><i class="bi bi-house"></i> </strong
><span id="dx_user_info_location"></span> (<span
id="dx_user_info_gridsquare"
></span
>)
</li>
<li>
<strong class="col"
><i class="bi bi-envelope"></i> </strong
><span id="dx_user_info_email"></span>
</li>
<li>
<strong class="col"><i class="bi bi-globe"></i> </strong
><span id="dx_user_info_website"></span>
</li>
<li>
<strong class="col"
><i class="bi bi-broadcast-pin"></i> </strong
><span id="dx_user_info_antenna"></span>
</li>
<li>
<strong class="col"
><i class="bi bi-projector"></i> </strong
><span id="dx_user_info_radio"></span>
</li>
<li>
<strong class="col"
><i class="bi bi-info-circle"></i> </strong
><span id="dx_user_info_comments"></span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="input-group input-group-sm m-0 p-0">
<button
type="button"
class="btn btn-warning w-75"
aria-label="Request"
id="requestUserInfo"
>
Request user data (about 20kBytes!)
</button>
<button
type="button"
class="btn btn-primary w-25"
data-bs-dismiss="modal"
aria-label="Close"
>
Close
</button>
</div>
</div>
</div>
</div>
<!-- user shared folder -->
<div
class="modal fade"
id="sharedFolderModal"
tabindex="-1"
aria-labelledby="sharedFolderModalLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="sharedFolderModalLabel">
My Shared folder
<button
type="button"
class="btn btn-primary"
id="openSharedFilesFolder"
>
<i class="bi bi-archive"></i>
</button>
</h1>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="container-fluid p-0">
<div class="center mb-1">
<div class="badge text-bg-info">
<i class="bi bi-info"></i> Change folder in settings!
</div>
</div>
<div class="table-responsive">
<!-- START OF TABLE FOR SHARED FOLDER -->
<table
class="table table-sm table-hover table-bordered align-middle"
>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Size</th>
</tr>
</thead>
<tbody id="sharedFolderTable"></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- HELP MODAL -->
<div
class="modal fade"
data-bs-backdrop="static"
tabindex="-1"
id="chatHelpModal"
>
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Chat Help</h5>
<button
type="button"
class="btn btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="card mb-3">
<div class="card-body">
<p class="card-text">
Welcome to the chat window. Heard stations are listed in the
list on the left. Clicking on a station will show messages
sent and/or received from the selected station. Additional
help is available on various extra features below.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button type="button" class="btn btn-sm btn-primary ms-2">
<i class="bi bi-person" style="font-size: 1.2rem"></i>
</button>
<p class="card-text">
Set your station information and picture. This information can
be requested by a remote station and can be enabled/disabled
via settings.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button
type="button"
class="btn btn-sm btn-outline-secondary ms-2"
>
<i class="bi bi-person" style="font-size: 1.2rem"></i>
</button>
<p class="card-text">
Request the selected station's information.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button
type="button"
class="btn btn-sm btn-outline-secondary ms-2"
>
<i class="bi bi-files" style="font-size: 1.2rem"></i>
</button>
<p class="card-text">
Request the selected station's shared file(s) list. Clicking
<button type="button" class="btn btn-sm btn-primary ms-2">
<i class="bi bi-files" style="font-size: 1.2rem"></i>
</button>
will allow you to preview your shared files. Shared file can
be enabled/disabled in settings.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button
type="button"
class="btn btn-small btn-outline-primary dropdown-toggle me-2"
>
<i class="bi bi-funnel-fill"></i>
</button>
<p class="card-text">
The filter button allows you to show or hide certain types of
messages. A lot of data is logged and this allows you to
modify what is shown. By default sent and received messages
and ping acknowlegements are displayed.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- dx user shared folder -->
<div
class="modal fade"
id="sharedFolderModalDX"
tabindex="-1"
aria-labelledby="sharedFolderModalDXLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="sharedFolderModalDXLabel">
Shared folder
</h1>
<button
type="button"
class="btn btn-primary m-2"
aria-label="Request"
id="requestSharedFolderList"
>
<i class="bi bi-arrow-repeat"></i>
</button>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="table-responsive">
<!-- START OF TABLE FOR SHARED FOLDER DX -->
<table
class="table table-sm table-hover table-bordered align-middle"
>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Size</th>
</tr>
</thead>
<tbody id="sharedFolderTableDX"></tbody>
</table>
</div>
</div>
<div class="modal-footer">
<div class="input-group input-group-sm m-0 p-0"></div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

647
gui/src/components/chat.vue Normal file
View file

@ -0,0 +1,647 @@
<script setup lang="ts">
// @ts-nocheck
// disable typescript check beacuse of error with beacon histogram options
import chat_conversations from "./chat_conversations.vue";
import chat_messages from "./chat_messages.vue";
import chat_new_message from "./chat_new_message.vue";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useChatStore } from "../store/chatStore.js";
const chat = useChatStore(pinia);
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
PointElement,
Title,
Tooltip,
Legend,
BarElement,
} from "chart.js";
import { Bar } from "vue-chartjs";
import { watch, nextTick, ref, computed } from "vue";
import annotationPlugin from "chartjs-plugin-annotation";
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
Title,
Tooltip,
Legend,
BarElement,
annotationPlugin,
);
var beaconHistogramOptions = {
type: "bar",
bezierCurve: false, //remove curves from your plot
scaleShowLabels: false, //remove labels
tooltipEvents: [], //remove trigger from tooltips so they will'nt be show
pointDot: false, //remove the points markers
scaleShowGridLines: true, //set to false to remove the grids background
maintainAspectRatio: true,
plugins: {
legend: {
display: false,
},
annotation: {
annotations: [
{
type: "line",
mode: "horizontal",
scaleID: "y",
value: 0,
borderColor: "darkgrey", // Set the color to dark grey for the zero line
borderWidth: 0.5, // Set the line width
},
],
},
},
scales: {
x: {
position: "bottom",
display: false,
min: -10,
max: 15,
ticks: {
display: false,
},
},
y: {
display: false,
min: -5,
max: 10,
ticks: {
display: false,
},
},
},
};
const beaconHistogramData = computed(() => ({
labels: chat.beaconLabelArray,
datasets: [
{
data: chat.beaconDataArray,
tension: 0.1,
borderColor: "rgb(0, 255, 0)",
backgroundColor: function (context) {
var value = context.dataset.data[context.dataIndex];
return value >= 0 ? "green" : "red";
},
},
],
}));
const messagesContainer = ref(null);
watch(
() => chat.scrollTrigger,
(newVal, oldVal) => {
//console.log("Trigger changed from", oldVal, "to", newVal); // Debugging line
nextTick(() => {
if (messagesContainer.value) {
messagesContainer.value.scrollTop =
messagesContainer.value.scrollHeight;
}
});
},
);
</script>
<template>
<div class="container-fluid m-0 p-0">
<div class="row h-100 ms-0 mt-0 me-1">
<div class="col-3 m-0 p-0 h-100 bg-light">
<!------Chats area ---------------------------------------------------------------------->
<div class="container-fluid vh-100 overflow-auto m-0 p-0">
<chat_conversations />
</div>
<div class="h-100">
<div
class="list-group overflow-auto"
id="list-tab-chat"
role="tablist"
style="height: calc(100vh - 70px)"
></div>
</div>
</div>
<div class="col-9 border-start vh-100 p-0">
<div class="d-flex flex-column vh-100">
<!-- Top Navbar -->
<nav class="navbar sticky-top z-0 bg-body-tertiary shadow">
<div class="input-group mb-0 p-0 w-25">
<button type="button" class="btn btn-outline-secondary" disabled>
Beacons
</button>
<div
class="form-floating border border-secondary-subtle border-1 rounded-end"
>
<Bar
:data="beaconHistogramData"
:options="beaconHistogramOptions"
width="300"
height="50"
/>
</div>
</div>
</nav>
<!-- Chat Messages Area -->
<div class="flex-grow-1 overflow-auto" ref="messagesContainer">
<chat_messages />
</div>
<chat_new_message />
</div>
<!------ new message area ---------------------------------------------------------------------->
</div>
</div>
</div>
<!-- user modal -->
<div
class="modal fade"
id="userModal"
tabindex="-1"
aria-labelledby="userModalLabel"
aria-hidden="true"
>
<div class="modal-dialog" style="max-width: 600px">
<div class="modal-content">
<div class="card mb-1 border-0">
<div class="row g-0">
<div class="col-md-4">
<div class="row position-relative p-0 m-0">
<div class="col p-0 m-0">
<img
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktcGVyc29uLWJvdW5kaW5nLWJveCIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNMS41IDFhLjUuNSAwIDAgMC0uNS41djNhLjUuNSAwIDAgMS0xIDB2LTNBMS41IDEuNSAwIDAgMSAxLjUgMGgzYS41LjUgMCAwIDEgMCAxaC0zek0xMSAuNWEuNS41IDAgMCAxIC41LS41aDNBMS41IDEuNSAwIDAgMSAxNiAxLjV2M2EuNS41IDAgMCAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDEtLjUtLjV6TS41IDExYS41LjUgMCAwIDEgLjUuNXYzYS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAwIDEgMCAxaC0zQTEuNSAxLjUgMCAwIDEgMCAxNC41di0zYS41LjUgMCAwIDEgLjUtLjV6bTE1IDBhLjUuNSAwIDAgMSAuNS41djNhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0zYS41LjUgMCAwIDEgMC0xaDNhLjUuNSAwIDAgMCAuNS0uNXYtM2EuNS41IDAgMCAxIC41LS41eiIvPgogIDxwYXRoIGQ9Ik0zIDE0cy0xIDAtMS0xIDEtNCA2LTQgNiAzIDYgNC0xIDEtMSAxSDN6bTgtOWEzIDMgMCAxIDEtNiAwIDMgMyAwIDAgMSA2IDB6Ii8+Cjwvc3ZnPg=="
class="img-fluid rounded-start w-100"
alt="..."
id="user_info_image"
/>
</div>
<div
class="col position-absolute image-overlay text-white justify-content-center align-items-center d-flex align-middle h-100 opacity-0"
id="userImageSelector"
>
<i class="bi bi-upload" style="font-size: 2.2rem"></i>
</div>
</div>
</div>
<div class="col-md-8">
<div class="card-body">
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-pass"></i
></span>
<input
type="text"
class="form-control"
placeholder="Callsign"
id="user_info_callsign"
aria-label="Call"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-person-vcard"></i
></span>
<input
type="text"
class="form-control"
placeholder="name"
id="user_info_name"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-sunrise"></i
></span>
<input
type="text"
class="form-control"
placeholder="age"
id="user_info_age"
aria-label="age"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-house"></i
></span>
<input
type="text"
class="form-control"
placeholder="Location"
id="user_info_location"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-pin-map"></i
></span>
<input
type="text"
class="form-control"
placeholder="Grid"
id="user_info_gridsquare"
aria-label="Name"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-projector"></i
></span>
<input
type="text"
class="form-control"
placeholder="Radio"
id="user_info_radio"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-broadcast-pin"></i
></span>
<input
type="text"
class="form-control"
placeholder="Antenna"
id="user_info_antenna"
aria-label="Name"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-envelope"></i
></span>
<input
type="text"
class="form-control"
placeholder="Email"
id="user_info_email"
aria-label="Name"
aria-describedby="basic-addon1"
/>
<span class="input-group-text"
><i class="bi bi-globe"></i
></span>
<input
type="text"
class="form-control"
placeholder="Website"
id="user_info_website"
aria-label="Name"
aria-describedby="basic-addon1"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text"
><i class="bi bi-info-circle"></i
></span>
<input
type="text"
class="form-control"
placeholder="Comments"
id="user_info_comments"
aria-label="Comments"
aria-describedby="basic-addon1"
/>
</div>
</div>
</div>
</div>
</div>
<button
type="button"
class="btn btn-primary"
data-bs-dismiss="modal"
aria-label="Close"
id="userInfoSave"
>
Save & Close
</button>
</div>
</div>
</div>
<!-- dx user modal -->
<div
class="modal fade"
id="userModalDX"
tabindex="-1"
aria-labelledby="userModalDXLabel"
aria-hidden="true"
>
<div class="modal-dialog" style="max-width: 600px">
<div class="modal-content">
<div class="card mb-1 border-0">
<div class="row g-0">
<div class="col-md-4">
<img
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktcGVyc29uLWJvdW5kaW5nLWJveCIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNMS41IDFhLjUuNSAwIDAgMC0uNS41djNhLjUuNSAwIDAgMS0xIDB2LTNBMS41IDEuNSAwIDAgMSAxLjUgMGgzYS41LjUgMCAwIDEgMCAxaC0zek0xMSAuNWEuNS41IDAgMCAxIC41LS41aDNBMS41IDEuNSAwIDAgMSAxNiAxLjV2M2EuNS41IDAgMCAxLTEgMHYtM2EuNS41IDAgMCAwLS41LS41aC0zYS41LjUgMCAwIDEtLjUtLjV6TS41IDExYS41LjUgMCAwIDEgLjUuNXYzYS41LjUgMCAwIDAgLjUuNWgzYS41LjUgMCAwIDEgMCAxaC0zQTEuNSAxLjUgMCAwIDEgMCAxNC41di0zYS41LjUgMCAwIDEgLjUtLjV6bTE1IDBhLjUuNSAwIDAgMSAuNS41djNhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0zYS41LjUgMCAwIDEgMC0xaDNhLjUuNSAwIDAgMCAuNS0uNXYtM2EuNS41IDAgMCAxIC41LS41eiIvPgogIDxwYXRoIGQ9Ik0zIDE0cy0xIDAtMS0xIDEtNCA2LTQgNiAzIDYgNC0xIDEtMSAxSDN6bTgtOWEzIDMgMCAxIDEtNiAwIDMgMyAwIDAgMSA2IDB6Ii8+Cjwvc3ZnPg=="
class="img-fluid rounded-start w-100"
alt="..."
id="dx_user_info_image"
/>
</div>
<div class="col-md-8">
<div class="card-body">
<h5>
<span
class="badge bg-secondary"
id="dx_user_info_callsign"
></span>
-
<span
class="badge bg-secondary"
id="dx_user_info_name"
></span>
<span class="badge bg-secondary" id="dx_user_info_age"></span>
</h5>
<ul class="card-text list-unstyled">
<li>
<strong class="col"><i class="bi bi-house"></i> </strong
><span id="dx_user_info_location"></span> (<span
id="dx_user_info_gridsquare"
></span
>)
</li>
<li>
<strong class="col"><i class="bi bi-envelope"></i> </strong
><span id="dx_user_info_email"></span>
</li>
<li>
<strong class="col"><i class="bi bi-globe"></i> </strong
><span id="dx_user_info_website"></span>
</li>
<li>
<strong class="col"
><i class="bi bi-broadcast-pin"></i> </strong
><span id="dx_user_info_antenna"></span>
</li>
<li>
<strong class="col"><i class="bi bi-projector"></i> </strong
><span id="dx_user_info_radio"></span>
</li>
<li>
<strong class="col"
><i class="bi bi-info-circle"></i> </strong
><span id="dx_user_info_comments"></span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="input-group input-group-sm m-0 p-0">
<button
type="button"
class="btn btn-warning w-75"
aria-label="Request"
id="requestUserInfo"
>
Request user data (about 20kBytes!)
</button>
<button
type="button"
class="btn btn-primary w-25"
data-bs-dismiss="modal"
aria-label="Close"
>
Close
</button>
</div>
</div>
</div>
</div>
<!-- user shared folder -->
<div
class="modal fade"
id="sharedFolderModal"
tabindex="-1"
aria-labelledby="sharedFolderModalLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="sharedFolderModalLabel">
My Shared folder
<button
type="button"
class="btn btn-primary"
id="openSharedFilesFolder"
>
<i class="bi bi-archive"></i>
</button>
</h1>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="container-fluid p-0">
<div class="center mb-1">
<div class="badge text-bg-info">
<i class="bi bi-info"></i> Change folder in settings!
</div>
</div>
<div class="table-responsive">
<!-- START OF TABLE FOR SHARED FOLDER -->
<table
class="table table-sm table-hover table-bordered align-middle"
>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Size</th>
</tr>
</thead>
<tbody id="sharedFolderTable"></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- HELP MODAL -->
<div
class="modal fade"
data-bs-backdrop="static"
tabindex="-1"
id="chatHelpModal"
>
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Chat Help</h5>
<button
type="button"
class="btn btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="card mb-3">
<div class="card-body">
<p class="card-text">
Welcome to the chat window. Heard stations are listed in the
list on the left. Clicking on a station will show messages sent
and/or received from the selected station. Additional help is
available on various extra features below.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button type="button" class="btn btn-sm btn-primary ms-2">
<i class="bi bi-person" style="font-size: 1.2rem"></i>
</button>
<p class="card-text">
Set your station information and picture. This information can
be requested by a remote station and can be enabled/disabled via
settings.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button
type="button"
class="btn btn-sm btn-outline-secondary ms-2"
>
<i class="bi bi-person" style="font-size: 1.2rem"></i>
</button>
<p class="card-text">
Request the selected station's information.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button
type="button"
class="btn btn-sm btn-outline-secondary ms-2"
>
<i class="bi bi-files" style="font-size: 1.2rem"></i>
</button>
<p class="card-text">
Request the selected station's shared file(s) list. Clicking
<button type="button" class="btn btn-sm btn-primary ms-2">
<i class="bi bi-files" style="font-size: 1.2rem"></i>
</button>
will allow you to preview your shared files. Shared file can be
enabled/disabled in settings.
</p>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<button
type="button"
class="btn btn-small btn-outline-primary dropdown-toggle me-2"
>
<i class="bi bi-funnel-fill"></i>
</button>
<p class="card-text">
The filter button allows you to show or hide certain types of
messages. A lot of data is logged and this allows you to modify
what is shown. By default sent and received messages and ping
acknowlegements are displayed.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- dx user shared folder -->
<div
class="modal fade"
id="sharedFolderModalDX"
tabindex="-1"
aria-labelledby="sharedFolderModalDXLabel"
aria-hidden="true"
>
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="sharedFolderModalDXLabel">
Shared folder
</h1>
<button
type="button"
class="btn btn-primary m-2"
aria-label="Request"
id="requestSharedFolderList"
>
<i class="bi bi-arrow-repeat"></i>
</button>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="table-responsive">
<!-- START OF TABLE FOR SHARED FOLDER DX -->
<table
class="table table-sm table-hover table-bordered align-middle"
>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Size</th>
</tr>
</thead>
<tbody id="sharedFolderTableDX"></tbody>
</table>
</div>
</div>
<div class="modal-footer">
<div class="input-group input-group-sm m-0 p-0"></div>
</div>
</div>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,96 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useChatStore } from "../store/chatStore.js";
import { getBeaconDataByCallsign } from "../js/api.js";
import { ref, computed } from "vue";
const chat = useChatStore(pinia);
function chatSelected(callsign) {
chat.selectedCallsign = callsign.toUpperCase();
// scroll message container to bottom
chat.triggerScrollToBottom();
processBeaconData(callsign);
}
async function processBeaconData(callsign) {
// fetch beacon data when selecting a callsign
let beacons = await getBeaconDataByCallsign(callsign);
chat.beaconLabelArray = beacons.map((entry) => entry.timestamp);
chat.beaconDataArray = beacons.map((entry) => entry.snr);
}
function getDateTime(timestamp) {
let date = new Date(timestamp);
let hours = date.getHours().toString().padStart(2, "0");
let minutes = date.getMinutes().toString().padStart(2, "0");
let seconds = date.getSeconds().toString().padStart(2, "0");
return `${hours}:${minutes}`;
}
const newChatCall = ref(null);
function newChat() {
let callsign = this.newChatCall.value;
callsign = callsign.toUpperCase().trim();
if (callsign === "") return;
this.newChatCall.value = "";
}
</script>
<template>
<nav class="navbar sticky-top bg-body-tertiary shadow">
<button
class="btn btn-outline-primary w-100"
data-bs-target="#newChatModal"
data-bs-toggle="modal"
>
<i class="bi bi-pencil-square"> Start a new chat</i>
</button>
</nav>
<div
class="list-group bg-body-tertiary m-0 p-1"
id="chat-list-tab"
role="chat-tablist"
>
<template
v-for="(details, callsign, key) in chat.callsign_list"
:key="callsign"
>
<a
class="list-group-item list-group-item-action list-group-item-secondary rounded-2 border-0 mb-2"
:class="{ active: key == 0 }"
:id="`list-chat-list-${callsign}`"
data-bs-toggle="list"
:href="`#list-${callsign}-messages`"
role="tab"
aria-controls="list-{{callsign}}-messages"
@click="chatSelected(callsign)"
>
<div class="row">
<div class="col-9 text-truncate">
<strong>{{ callsign }}</strong>
<br />
<small> {{ details.body }} </small>
</div>
<div class="col-3">
<small> {{ getDateTime(details.timestamp) }} </small>
<button
class="btn btn-sm btn-outline-secondary ms-2 border-0"
data-bs-target="#deleteChatModal"
data-bs-toggle="modal"
@click="chatSelected(callsign)"
>
<i class="bi bi-three-dots-vertical"></i>
</button>
</div>
</div>
</a>
</template>
</div>
</template>

View file

@ -0,0 +1,90 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useChatStore } from "../store/chatStore.js";
const chat = useChatStore(pinia);
import SentMessage from "./chat_messages_sent.vue"; // Import the chat_messages_sent component
import ReceivedMessage from "./chat_messages_received.vue"; // Import the chat_messages_sent component
import ReceivedBroadcastMessage from "./chat_messages_broadcast_received.vue"; // Import the chat_messages_sent component for broadcasts
import SentBroadcastMessage from "./chat_messages_broadcast_sent.vue"; // Import the chat_messages_sent component for broadcasts
//helper function for saving the last messages day for disaplying the day based divider
var prevChatMessageDay = "";
function getDateTime(timestampRaw) {
let date = new Date(timestampRaw);
let year = date.getFullYear();
let month = (date.getMonth() + 1).toString().padStart(2, "0"); // Months are zero-indexed
let day = date.getDate().toString().padStart(2, "0");
return `${year}-${month}-${day}`;
}
</script>
<template>
<div class="tab-content p-3" id="nav-tabContent-chat-messages">
<template
v-for="(details, callsign, key) in chat.callsign_list"
:key="callsign"
>
<div
class="tab-pane fade show"
:class="{ active: key == 0 }"
:id="`list-${callsign}-messages`"
role="tabpanel"
:aria-labelledby="`list-chat-list-${callsign}`"
>
<template v-for="item in chat.sorted_chat_list[callsign]">
<div v-if="prevChatMessageDay !== getDateTime(item.timestamp)">
<div class="separator my-2">
{{ (prevChatMessageDay = getDateTime(item.timestamp)) }}
</div>
</div>
<div v-if="item.direction === 'transmit'">
<sent-message :message="item" />
</div>
<div v-else-if="item.direction === 'receive'">
<received-message :message="item" />
</div>
<!--
<div v-if="item.type === 'broadcast_transmit'">
<sent-broadcast-message :message="item" />
</div>
<div v-else-if="item.type === 'broadcast_received'">
<received-broadcast-message :message="item" />
</div>
-->
</template>
</div>
</template>
</div>
</template>
<style>
/* https://stackoverflow.com/a/26634224 */
.separator {
display: flex;
align-items: center;
text-align: center;
color: #6c757d;
}
.separator::before,
.separator::after {
content: "";
flex: 1;
border-bottom: 1px solid #adb5bd;
}
.separator:not(:empty)::before {
margin-right: 0.25em;
}
.separator:not(:empty)::after {
margin-left: 0.25em;
}
</style>

View file

@ -0,0 +1,48 @@
<template>
<div class="message-actions-menu">
<!-- Add your action buttons here (e.g., Delete, Copy, Quote) -->
<button @click="onDelete">Delete</button>
<button @click="onCopy">Copy</button>
<button @click="onQuote">Quote</button>
</div>
</template>
<script>
export default {
methods: {
onDelete() {
// Implement delete action
this.$emit("delete");
},
onCopy() {
// Implement copy action
this.$emit("copy");
},
onQuote() {
// Implement quote action
this.$emit("quote");
},
},
};
</script>
<style scoped>
/* Style the message actions menu as needed */
.message-actions-menu {
position: absolute;
top: 50%;
transform: translateY(-50%);
display: none; /* Initially hidden */
/* Add styling for buttons and menu */
}
/* Style individual action buttons */
.message-actions-menu button {
/* Add button styles here */
}
/* Style menu display on hover */
.card:hover .message-actions-menu {
display: block;
}
</style>

View file

@ -0,0 +1,96 @@
<template>
<div class="row justify-content-start mb-2">
<div :class="messageWidthClass">
<div class="card bg-light border-0 text-dark">
<div class="card-header" v-if="getFileContent['filesize'] !== 0">
<p class="card-text">
{{ getFileContent["filename"] }} |
{{ getFileContent["filesize"] }} Bytes |
{{ getFileContent["filetype"] }}
</p>
</div>
<div class="card-body">
<p class="card-text">{{ message.msg }}</p>
</div>
<div class="card-footer p-0 bg-light border-top-0">
<p class="text-muted p-0 m-0 me-1 text-end">{{ getDateTime }}</p>
<!-- Display formatted timestamp in card-footer -->
</div>
<span
class="position-absolute top-0 start-100 translate-middle badge rounded-1 bg-secondary border border-white"
>
{{ message.broadcast_sender }}
</span>
</div>
</div>
<!-- Delete button outside of the card -->
<div class="col-auto">
<button class="btn btn-outline-secondary border-0" @click="deleteMessage">
<i class="bi bi-trash"></i>
</button>
</div>
</div>
</template>
<script>
import { deleteMessageFromDB } from "../js/chatHandler";
export default {
props: {
message: Object,
},
computed: {
getFileContent() {
try {
var filename = Object.keys(this.message._attachments)[0];
var filesize = this.message._attachments[filename]["length"];
var filetype = filename.split(".")[1];
// ensure filesize is 0 for hiding message header if no data is available
if (
typeof filename === "undefined" ||
filename === "" ||
filename === "-" ||
filename === "null"
) {
filesize = 0;
}
return { filename: filename, filesize: filesize, filetype: filetype };
} catch (e) {
console.log("file not loaded from database - empty?");
// we are only checking against filesize for displaying attachments
return { filesize: 0 };
}
},
messageWidthClass() {
// Calculate a Bootstrap grid class based on message length
// Adjust the logic as needed to fit your requirements
if (this.message.msg.length <= 50) {
return "col-4";
} else if (this.message.msg.length <= 100) {
return "col-6";
} else {
return "col-9";
}
},
deleteMessage() {
deleteMessageFromDB(this.message._id);
},
getDateTime() {
var datetime = new Date(this.message.timestamp * 1000).toLocaleString(
navigator.language,
{
hour: "2-digit",
minute: "2-digit",
},
);
return datetime;
},
},
};
</script>

View file

@ -0,0 +1,114 @@
<template>
<div class="row justify-content-end mb-2">
<!-- control area -->
<div class="col-auto p-0 m-0">
<button
class="btn btn-outline-secondary border-0 me-1"
@click="repeatMessage"
>
<i class="bi bi-arrow-repeat"></i>
</button>
<button class="btn btn-outline-secondary border-0" @click="deleteMessage">
<i class="bi bi-trash"></i>
</button>
</div>
<!-- message area -->
<div :class="messageWidthClass">
<div class="card bg-primary text-white">
<div class="card-header" v-if="getFileContent['filesize'] !== 0">
<p class="card-text">
{{ getFileContent["filename"] }} |
{{ getFileContent["filesize"] }} Bytes |
{{ getFileContent["filetype"] }}
</p>
</div>
<div class="card-body">
<p class="card-text">{{ message.msg }}</p>
</div>
<div class="card-footer p-0 bg-primary border-top-0">
<p class="text p-0 m-0 me-1 text-end">{{ getDateTime }}</p>
<!-- Display formatted timestamp in card-footer -->
</div>
<div class="card-footer p-0 border-top-0" v-if="message.percent < 100">
<div class="progress bg-secondary" :style="{ height: '10px' }">
<div
class="progress-bar progress-bar-striped overflow-visible"
role="progressbar"
:style="{ width: message.percent + '%', height: '10px' }"
:aria-valuenow="message.percent"
aria-valuemin="0"
aria-valuemax="100"
>
{{ message.percent }} % with {{ message.bytesperminute }} bpm (
{{ message.status }} )
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {
repeatMessageTransmission,
deleteMessageFromDB,
} from "../js/chatHandler";
export default {
props: {
message: Object,
},
computed: {
getFileContent() {
var filename = Object.keys(this.message._attachments)[0];
var filesize = this.message._attachments[filename]["length"];
var filetype = filename.split(".")[1];
// ensure filesize is 0 for hiding message header if no data is available
if (
typeof filename === "undefined" ||
filename === "" ||
filename === "-" ||
filename === "null"
) {
filesize = 0;
}
return { filename: filename, filesize: filesize, filetype: filetype };
},
messageWidthClass() {
// Calculate a Bootstrap grid class based on message length
// Adjust the logic as needed to fit your requirements
if (this.message.msg.length <= 50) {
return "col-4";
} else if (this.message.msg.length <= 100) {
return "col-6";
} else {
return "col-9";
}
},
repeatMessage() {
repeatMessageTransmission(this.message._id);
},
deleteMessage() {
deleteMessageFromDB(this.message._id);
},
getDateTime() {
var datetime = new Date(this.message.timestamp * 1000).toLocaleString(
navigator.language,
{
hour: "2-digit",
minute: "2-digit",
},
);
return datetime;
},
},
};
</script>

View file

@ -0,0 +1,141 @@
<template>
<div class="row justify-content-start mb-2">
<div :class="messageWidthClass">
<div class="card bg-light border-0 text-dark">
<div
v-for="attachment in message.attachments"
:key="attachment.id"
class="card-header"
>
<div class="btn-group w-100" role="group">
<button class="btn btn-light text-truncate" disabled>
{{ attachment.name }}
</button>
<button
@click="
downloadAttachment(attachment.hash_sha512, attachment.name)
"
class="btn btn-light w-25"
>
<i class="bi bi-download strong"></i>
</button>
</div>
</div>
<div class="card-body">
<p class="card-text">{{ message.body }}</p>
</div>
<div class="card-footer p-0 bg-light border-top-0">
<p class="text-muted p-0 m-0 me-1 text-end">{{ getDateTime }}</p>
<!-- Display formatted timestamp in card-footer -->
</div>
</div>
</div>
<!-- Delete button outside of the card -->
<div class="col-auto">
<button
disabled
class="btn btn-outline-secondary border-0 me-1"
@click="showMessageInfo"
data-bs-target="#messageInfoModal"
data-bs-toggle="modal"
>
<i class="bi bi-info-circle"></i>
</button>
<button class="btn btn-outline-secondary border-0" @click="deleteMessage">
<i class="bi bi-trash"></i>
</button>
</div>
</div>
</template>
<script>
import {
deleteMessageFromDB,
requestMessageInfo,
getMessageAttachment,
} from "../js/messagesHandler";
import { atob_FD } from "../js/freedata";
// pinia store setup
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useChatStore } from "../store/chatStore.js";
const chat = useChatStore(pinia);
export default {
props: {
message: Object,
},
methods: {
showMessageInfo() {
requestMessageInfo(this.message.id);
//let infoModal = Modal.getOrCreateInstance(document.getElementById('messageInfoModal'))
//console.log(this.infoModal)
//this.infoModal.show()
},
deleteMessage() {
deleteMessageFromDB(this.message.id);
},
async downloadAttachment(hash_sha512, fileName) {
try {
const jsondata = await getMessageAttachment(hash_sha512);
const byteCharacters = atob(jsondata.data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += 512) {
const slice = byteCharacters.slice(offset, offset + 512);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: jsondata.type });
const url = URL.createObjectURL(blob);
// Creating a temporary anchor element to download the file
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = fileName;
document.body.appendChild(anchor);
anchor.click();
// Cleanup
document.body.removeChild(anchor);
URL.revokeObjectURL(url);
} catch (error) {
console.error("Failed to download the attachment:", error);
}
},
},
computed: {
messageWidthClass() {
// Calculate a Bootstrap grid class based on message length
// Adjust the logic as needed to fit your requirements
if (this.message.body.length <= 50) {
return "col-4";
} else if (this.message.body.length <= 100) {
return "col-6";
} else {
return "col-9";
}
},
getDateTime() {
let date = new Date(this.message.timestamp);
let hours = date.getHours().toString().padStart(2, "0");
let minutes = date.getMinutes().toString().padStart(2, "0");
let seconds = date.getSeconds().toString().padStart(2, "0");
return `${hours}:${minutes}:${seconds}`;
},
},
};
</script>

View file

@ -0,0 +1,186 @@
<template>
<div class="row justify-content-end mb-2">
<!-- control area -->
<div class="col-auto p-0 m-0">
<button
class="btn btn-outline-secondary border-0 me-1"
@click="repeatMessage"
>
<i class="bi bi-arrow-repeat"></i>
</button>
<button
disabled
class="btn btn-outline-secondary border-0 me-1"
@click="showMessageInfo"
data-bs-target="#messageInfoModal"
data-bs-toggle="modal"
>
<i class="bi bi-info-circle"></i>
</button>
<button class="btn btn-outline-secondary border-0" @click="deleteMessage">
<i class="bi bi-trash"></i>
</button>
</div>
<!-- message area -->
<div :class="messageWidthClass">
<div class="card bg-secondary text-white">
<div
v-for="attachment in message.attachments"
:key="attachment.id"
class="card-header"
>
<div class="btn-group w-100" role="group">
<button class="btn btn-light text-truncate" disabled>
{{ attachment.name }}
</button>
<button
@click="
downloadAttachment(attachment.hash_sha512, attachment.name)
"
class="btn btn-light w-25"
>
<i class="bi bi-download strong"></i>
</button>
</div>
</div>
<div class="card-body">
<p class="card-text">{{ message.body }}</p>
</div>
<div class="card-footer p-0 bg-secondary border-top-0">
<p class="text p-0 m-0 me-1 text-end">
{{ message.status }} | {{ getDateTime }}
</p>
<!-- Display formatted timestamp in card-footer -->
</div>
<div
class="card-footer p-0 border-top-0"
v-if="message.percent < 100 || message.status === 'failed'"
>
<div
class="progress rounded-0 rounded-bottom"
hidden
:style="{ height: '10px' }"
v-bind:class="{
'bg-danger': message.status == 'failed',
'bg-primary': message.status == 'transmitting',
'bg-secondary': message.status == 'transmitted',
}"
>
<div
class="progress-bar progress-bar-striped overflow-visible"
role="progressbar"
:style="{ width: message.percent + '%', height: '10px' }"
:aria-valuenow="message.percent"
aria-valuemin="0"
aria-valuemax="100"
>
{{ message.percent }} % with {{ message.bytesperminute }} bpm (
{{ message.status }} )
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { atob_FD } from "../js/freedata";
import {
repeatMessageTransmission,
deleteMessageFromDB,
requestMessageInfo,
getMessageAttachment,
} from "../js/messagesHandler";
// pinia store setup
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useChatStore } from "../store/chatStore.js";
const chat = useChatStore(pinia);
export default {
props: {
message: Object,
},
methods: {
repeatMessage() {
repeatMessageTransmission(this.message.id);
},
deleteMessage() {
deleteMessageFromDB(this.message.id);
},
showMessageInfo() {
console.log("requesting message info.....");
requestMessageInfo(this.message.id);
//let infoModal = Modal.getOrCreateInstance(document.getElementById('messageInfoModal'))
//console.log(this.infoModal)
//this.infoModal.show()
},
async downloadAttachment(hash_sha512, fileName) {
try {
const jsondata = await getMessageAttachment(hash_sha512);
const byteCharacters = atob(jsondata.data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += 512) {
const slice = byteCharacters.slice(offset, offset + 512);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
const blob = new Blob(byteArrays, { type: jsondata.type });
const url = URL.createObjectURL(blob);
// Creating a temporary anchor element to download the file
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = fileName;
document.body.appendChild(anchor);
anchor.click();
// Cleanup
document.body.removeChild(anchor);
URL.revokeObjectURL(url);
} catch (error) {
console.error("Failed to download the attachment:", error);
}
},
},
computed: {
messageWidthClass() {
// Calculate a Bootstrap grid class based on message length
// Adjust the logic as needed to fit your requirements
if (this.message.body.length <= 50) {
return "col-4";
} else if (this.message.body.length <= 100) {
return "col-6";
} else {
return "col-9";
}
},
getDateTime() {
let date = new Date(this.message.timestamp);
let hours = date.getHours().toString().padStart(2, "0");
let minutes = date.getMinutes().toString().padStart(2, "0");
let seconds = date.getSeconds().toString().padStart(2, "0");
return `${hours}:${minutes}:${seconds}`;
},
},
};
</script>

View file

@ -0,0 +1,313 @@
<script setup lang="ts">
// @ts-nocheck
import { setActivePinia } from 'pinia';
import pinia from '../store/index';
setActivePinia(pinia);
import { useStateStore } from '../store/stateStore.js';
const state = useStateStore(pinia);
import { useChatStore } from '../store/chatStore.js';
const chat = useChatStore(pinia);
import chat_navbar from './chat_navbar.vue'
import chat_conversations from './chat_conversations.vue'
import chat_messages from './chat_messages.vue'
import { newMessage } from '../js/messagesHandler.ts'
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend
} from 'chart.js'
import { Line } from 'vue-chartjs'
import { ref, computed, nextTick } from 'vue';
import { VuemojiPicker, EmojiClickEventDetail } from 'vuemoji-picker'
const handleEmojiClick = (detail: EmojiClickEventDetail) => {
chat.inputText += detail.unicode
}
const chatModuleMessage=ref(null);
// Function to trigger the hidden file input
function triggerFileInput() {
fileInput.value.click();
}
// Use a ref for storing multiple files
const selectedFiles = ref([]);
const fileInput = ref(null);
function handleFileSelection(event) {
// Reset previously selected files
selectedFiles.value = [];
// Process each file
for (let file of event.target.files) {
const reader = new FileReader();
reader.onload = () => {
// Convert file content to base64
const base64Content = btoa(reader.result); // Adjust this line if necessary
selectedFiles.value.push({
name: file.name,
size: file.size,
type: file.type,
content: base64Content, // Store base64 encoded content
});
};
reader.readAsBinaryString(file); // Read the file content as binary string
}
}
function removeFile(index) {
selectedFiles.value.splice(index, 1);
// Check if the selectedFiles array is empty
if (selectedFiles.value.length === 0) {
// Reset the file input if there are no files left
resetFile();
}
}
function transmitNewMessage() {
// Check if a callsign is selected, default to the first one if not
if (typeof(chat.selectedCallsign) === 'undefined') {
chat.selectedCallsign = Object.keys(chat.callsign_list)[0];
}
chat.inputText = chat.inputText.trim();
// Proceed only if there is text or files selected
if (chat.inputText.length === 0 && selectedFiles.value.length === 0) return;
const attachments = selectedFiles.value.map(file => {
return {
name: file.name,
type: file.type,
data: file.content
};
});
if (chat.selectedCallsign.startsWith("BC-")) {
// Handle broadcast message differently if needed
return "new broadcast";
} else {
// If there are attachments, send them along with the message
if (attachments.length > 0) {
newMessage(chat.selectedCallsign, chat.inputText, attachments);
} else {
// Send text only if no attachments are selected
newMessage(chat.selectedCallsign, chat.inputText);
}
}
// Cleanup after sending message
chat.inputText = '';
chatModuleMessage.value = "";
resetFile()
}
function resetFile(event){
if (fileInput.value) {
fileInput.value.value = ''; // Reset the file input
}
// Clear the selected files array to reset the state of attachments
selectedFiles.value = [];
}
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend
)
// calculate time needed for transmitting a file
function calculateTimeNeeded(){
var calculatedSpeedPerMinutePER0 = []
var calculatedSpeedPerMinutePER25 = []
var calculatedSpeedPerMinutePER75 = []
// bpm vs snr with PER == 0
var snrList = [
{snr: -10, bpm: 100},
{snr: -5, bpm: 300},
{snr: 0, bpm: 800},
{snr: 5, bpm: 2500},
{snr: 10, bpm: 5300}
];
for (let i = 0; i < snrList.length; i++) {
var result = snrList.find(obj => {
return obj.snr === snrList[i].snr
})
calculatedSpeedPerMinutePER0.push(totalSize / result.bpm)
calculatedSpeedPerMinutePER25.push(totalSize / (result.bpm * 0.75))
calculatedSpeedPerMinutePER75.push(totalSize / (result.bpm * 0.25))
}
chat.chartSpeedPER0 = calculatedSpeedPerMinutePER0
chat.chartSpeedPER25 = calculatedSpeedPerMinutePER25
chat.chartSpeedPER75 = calculatedSpeedPerMinutePER75
}
const speedChartData = computed(() => ({
labels: ['-10', '-5', '0', '5', '10'],
datasets: [
{ data: chat.chartSpeedPER0, label: 'PER 0%' ,tension: 0.1, borderColor: 'rgb(0, 255, 0)' },
{ data: chat.chartSpeedPER25, label: 'PER 25%' ,tension: 0.1, borderColor: 'rgb(255, 255, 0)'},
{ data: chat.chartSpeedPER75, label: 'PER 75%' ,tension: 0.1, borderColor: 'rgb(255, 0, 0)' }
]
}
));
</script>
<template>
<nav class="navbar sticky-bottom bg-body-tertiary border-top mb-5">
<div class="container-fluid p-0">
<!-- Hidden file input -->
<input type="file" multiple ref="fileInput" @change="handleFileSelection" style="display: none;" />
<div class="container-fluid px-0">
<div class="d-flex flex-row overflow-auto bg-light">
<div v-for="(file, index) in selectedFiles" :key="index" class="pe-2">
<div class="card" style=" min-width: 10rem; max-width: 10rem;">
<!-- Card Header with Remove Button -->
<div class="card-header d-flex justify-content-between align-items-center">
<span class="text-truncate">{{ file.name }}</span>
<button class="btn btn-close" @click="removeFile(index)"></button>
</div>
<div class="card-body">
<p class="card-text">...</p>
</div>
<div class="card-footer text-muted">
{{ file.type }}
</div>
<div class="card-footer text-muted">
{{ file.size }} bytes
</div>
</div>
</div>
</div>
</div>
<!--
<Line :data="speedChartData" />
-->
<div class="input-group bottom-0 ms-2">
<button type="button" class="btn btn-outline-secondary border-0 rounded-pill me-1"
data-bs-toggle="modal" data-bs-target="#emojiPickerModal"
data-bs-backdrop="false"
>
<i
id="emojipickerbutton"
class="bi bi-emoji-smile p-0"
style="font-size: 1rem"
></i>
</button>
<!-- trigger file selection modal -->
<button type="button" class="btn btn-outline-secondary border-0 rounded-pill me-1" @click="triggerFileInput">
<i class="bi bi-paperclip" style="font-size: 1.2rem"></i>
</button>
<textarea
class="form-control border rounded-pill"
rows="1"
ref="chatModuleMessage"
placeholder="Message - Send with [Enter]"
v-model="chat.inputText"
@keyup.enter.exact="transmitNewMessage()"
></textarea>
<button
class="btn btn-sm btn-secondary ms-1 me-2 rounded-pill"
@click="transmitNewMessage()"
type="button"
>
<i
class="bi bi-send ms-4 me-4"
style="font-size: 1.2rem"
></i>
</button>
</div>
</div>
</nav>
<!-- Emoji Picker Modal -->
<div class="modal fade" id="emojiPickerModal" aria-hidden="true" >
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content">
<div class="modal-body p-0">
<VuemojiPicker @emojiClick="handleEmojiClick"/>
</div>
</div>
</div>
</div>
</template>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,15 @@
<script setup lang="ts">
const props = defineProps(["btnText", "btnID"]);
function emitClick() {
window.dispatchEvent(new CustomEvent("add-widget", { detail: props.btnID }));
}
</script>
<template>
<button
class="btn btn-small btn-outline-secondary mb-1"
v-on:click="emitClick"
>
{{ btnText }}
</button>
</template>

View file

@ -0,0 +1,17 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { sendModemCQ } from "../../js/api.js";
</script>
<template>
<div class="fill h-100" style="width: calc(100% - 24px)">
<a
class="btn btn-sm btn-secondary d-flex justify-content-center align-items-center object-fill border rounded w-100 h-100"
@click="sendModemCQ"
title="Send a CQ call!"
>CQ</a
>
</div>
</template>

View file

@ -0,0 +1,140 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
</script>
<template>
<div class="card w-100 h-100">
<div class="card-header p-0 mb-1">
<i class="bi bi-volume-up" style="font-size: 1rem"></i>&nbsp;
<strong>Audio</strong>
</div>
<div class="card-body pt-0 pb-0">
<div class="container-wide">
<div class="row">
<div class="col-lg-6">
<div
class="progress mb-0 rounded-0 rounded-top"
style="height: 22px"
>
<div
class="progress-bar progress-bar-striped bg-primary force-gpu"
id="noise_level"
role="progressbar"
:style="{ width: state.s_meter_strength_percent + '%' }"
aria-valuenow="{{state.s_meter_strength_percent}}"
aria-valuemin="0"
aria-valuemax="100"
></div>
<p
class="justify-content-center d-flex position-absolute w-100"
id="noise_level_value"
>
S-Meter(dB): {{ state.s_meter_strength_raw }}
</p>
</div>
<div
class="progress mb-0 rounded-0 rounded-bottom"
style="height: 8px"
>
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 1%"
aria-valuenow="1"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar bg-success"
role="progressbar"
style="width: 89%"
aria-valuenow="50"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 20%"
aria-valuenow="20"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-danger"
role="progressbar"
style="width: 29%"
aria-valuenow="29"
aria-valuemin="0"
aria-valuemax="100"
></div>
</div>
</div>
<div class="col-lg-6">
<div
class="progress mb-0 rounded-0 rounded-top"
style="height: 22px"
>
<div
class="progress-bar progress-bar-striped bg-primary force-gpu"
id="dbfs_level"
role="progressbar"
:style="{ width: state.dbfs_level_percent + '%' }"
aria-valuenow="0"
aria-valuemin="0"
aria-valuemax="100"
></div>
<p
class="justify-content-center d-flex position-absolute w-100"
id="dbfs_level_value"
>
{{ state.dbfs_level }} dBFS
</p>
</div>
<div
class="progress mb-0 rounded-0 rounded-bottom"
style="height: 8px"
>
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 1%"
aria-valuenow="1"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar bg-success"
role="progressbar"
style="width: 89%"
aria-valuenow="50"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 20%"
aria-valuenow="20"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-danger"
role="progressbar"
style="width: 29%"
aria-valuenow="29"
aria-valuemin="0"
aria-valuemax="100"
></div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,93 @@
<script setup lang="ts">
import { ref } from "vue";
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
import { sendModemCQ, sendModemPing, setModemBeacon } from "../../js/api.js";
function transmitPing() {
sendModemPing(dxcallPing.value.toUpperCase());
}
function startStopBeacon() {
if (state.beacon_state === true) {
setModemBeacon(false);
} else {
setModemBeacon(true);
}
}
var dxcallPing = ref("");
window.addEventListener(
"stationSelected",
function (eventdata) {
let evt = <CustomEvent>eventdata;
dxcallPing.value = evt.detail;
},
false,
);
</script>
<template>
<div class="card h-100">
<div class="card-header p-0">
<i class="bi bi-broadcast" style="font-size: 1.2rem"></i>&nbsp;
<strong>Broadcasts</strong>
</div>
<div class="card-body overflow-auto p-0">
<div class="input-group input-group-sm mb-0">
<input
type="text"
class="form-control"
style="max-width: 6rem; min-width: 3rem; text-transform: uppercase"
placeholder="DXcall"
pattern="[A-Z]*"
maxlength="11"
aria-label="Input group"
aria-describedby="btnGroupAddon"
v-model="dxcallPing"
/>
<button
class="btn btn-sm btn-outline-secondary"
id="sendPing"
type="button"
data-bs-placement="bottom"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Send a ping request to a remote station"
@click="transmitPing()"
>
Ping
</button>
<button
class="btn btn-sm btn-outline-secondary ms-1"
id="sendCQ"
type="button"
title="Send a CQ to the world"
@click="sendModemCQ()"
>
Call CQ
</button>
<button
type="button"
id="startBeacon"
class="btn btn-sm ms-1"
@click="startStopBeacon()"
v-bind:class="{
'btn-success': state.beacon_state === true,
'btn-outline-secondary': state.beacon_state === false,
}"
title="Toggle beacon mode. The interval can be set in settings. While sending a beacon, you can receive ping requests and open a datachannel. If a datachannel is opened, the beacon pauses."
>
Toggle beacon
</button>
</div>
<!-- end of row-->
</div>
</div>
</template>

View file

@ -0,0 +1,105 @@
<script setup lang="ts">
import { ref } from "vue";
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
import { sendModemCQ, sendModemPing, setModemBeacon } from "../../js/api.js";
function transmitPing() {
sendModemPing(dxcallPing.value.toUpperCase());
}
function startStopBeacon() {
if (state.beacon_state === true) {
setModemBeacon(false);
} else {
setModemBeacon(true);
}
}
var dxcallPing = ref("");
window.addEventListener(
"stationSelected",
function (eventdata) {
let evt = <CustomEvent>eventdata;
dxcallPing.value = evt.detail;
},
false,
);
</script>
<template>
<div class="card h-100">
<div class="card-header p-0">
<i class="bi bi-broadcast" style="font-size: 1.2rem"></i>&nbsp;
<strong>Broadcasts</strong>
</div>
<div class="card-body overflow-auto p-0">
<div class="container text-center">
<div class="row mb-2 mt-2">
<div class="col-sm-8">
<div class="input-group w-100">
<div class="form-floating">
<input
type="text"
class="form-control"
style="text-transform: uppercase"
id="floatingInput"
placeholder="dx-callsign"
v-model="dxcallPing"
maxlength="11"
pattern="[A-Z]*"
/>
<label for="floatingInput">DX-Callsign</label>
</div>
<button
class="btn btn-sm btn-outline-secondary"
id="sendPing"
type="button"
data-bs-placement="bottom"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Send a ping request to a remote station"
@click="transmitPing()"
>
<strong>Ping</strong>
</button>
</div>
</div>
<div class="col">
<div class="form-check form-switch">
<input
class="form-check-input"
type="checkbox"
role="switch"
id="flexSwitchBeacon"
v-model="state.beacon_state"
@click="startStopBeacon()"
/>
<label class="form-check-label" for="flexSwitchBeacon"
>Beacon</label
>
</div>
</div>
</div>
<div class="row">
<div class="col">
<button
class="btn btn-sm btn-outline-secondary w-100"
id="sendCQ"
type="button"
title="Send a CQ to the world"
@click="sendModemCQ()"
>
<h3>CQ CQ CQ</h3>
</button>
</div>
</div>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,94 @@
<script setup lang="ts">
// @ts-nocheck
const { distance } = require("qth-locator");
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../../store/settingsStore.js";
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
function getDateTime(timestampRaw) {
var datetime = new Date(timestampRaw * 1000).toLocaleString(
navigator.language,
{
hourCycle: "h23",
year: "2-digit",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
},
);
return datetime;
}
function getMaidenheadDistance(dxGrid) {
try {
return parseInt(distance(settings.remote.STATION.mygrid, dxGrid));
} catch (e) {
//
}
}
function pushToPing(origin)
{
window.dispatchEvent(new CustomEvent("stationSelected", {bubbles:true, detail: origin }));
}
</script>
<template>
<div class="card h-100">
<!--325px-->
<div class="card-header p-0">
<i class="bi bi-list-columns-reverse" style="font-size: 1.2rem"></i>&nbsp;
<strong>Heard stations</strong>
</div>
<div class="card-body overflow-auto p-0">
<div class="table-responsive">
<!-- START OF TABLE FOR HEARD STATIONS -->
<table class="table table-sm table-striped" id="tblHeardStationList">
<thead>
<tr>
<th scope="col" id="thTime">Time</th>
<th scope="col" id="thFreq">Freq</th>
<th scope="col" id="thDxcall">DXCall</th>
<th scope="col" id="thDxgrid">Grid</th>
<th scope="col" id="thDist">Dist</th>
<th scope="col" id="thType">Type</th>
<th scope="col" id="thSnr">SNR</th>
<!--<th scope="col">Off</th>-->
</tr>
</thead>
<tbody id="gridHeardStations">
<!--https://vuejs.org/guide/essentials/list.html-->
<tr v-for="item in state.heard_stations" :key="item.origin" @click="pushToPing(item.origin)">
<td>
{{ getDateTime(item.timestamp) }}
</td>
<td>{{ item.frequency / 1000 }} kHz</td>
<td>
{{ item.origin }}
</td>
<td>
{{ item.gridsquare }}
</td>
<td>{{ getMaidenheadDistance(item.gridsquare) }} km</td>
<td>
{{ item.activity_type }}
</td>
<td>
{{ item.snr }}
</td>
</tr>
</tbody>
</table>
</div>
<!-- END OF HEARD STATIONS TABLE -->
</div>
</div>
</template>

View file

@ -0,0 +1,78 @@
<script setup lang="ts">
// @ts-nocheck
const { distance } = require("qth-locator");
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../../store/settingsStore.js";
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
function getDateTime(timestampRaw) {
var datetime = new Date(timestampRaw * 1000).toLocaleString(
navigator.language,
{
hourCycle: "h23",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
},
);
return datetime;
}
function getMaidenheadDistance(dxGrid) {
try {
return parseInt(distance(settings.remote.STATION.mygrid, dxGrid));
} catch (e) {
//
}
}
function pushToPing(origin)
{
window.dispatchEvent(new CustomEvent("stationSelected", {bubbles:true, detail: origin }));
}
</script>
<template>
<div class="card h-100">
<div class="card-header p-0">
<i class="bi bi-list-columns-reverse" style="font-size: 1.2rem"></i>&nbsp;
<strong>Heard stations</strong>
</div>
<div class="card-body overflow-auto p-0">
<div class="table-responsive">
<!-- START OF TABLE FOR HEARD STATIONS -->
<table class="table table-sm table-striped" id="tblHeardStationList">
<thead>
<tr>
<th scope="col" id="thTime">Time</th>
<th scope="col" id="thDxcall">DXCall</th>
</tr>
</thead>
<tbody id="miniHeardStations">
<!--https://vuejs.org/guide/essentials/list.html-->
<tr v-for="item in state.heard_stations" :key="item.origin" @click="pushToPing(item.origin)">
<td>
<span class="fs-6">{{ getDateTime(item.timestamp) }}</span>
</td>
<td>
<span>{{ item.origin }}</span>
</td>
<!--<td>{{ item.offset }}</td>-->
</tr>
</tbody>
</table>
</div>
<!-- END OF HEARD STATIONS TABLE -->
</div>
</div>
</template>

View file

@ -0,0 +1,102 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
import { setRadioParametersFrequency, setRadioParametersMode, setRadioParametersRFLevel } from "../../js/api";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
function set_radio_parameter_frequency(){
setRadioParametersFrequency(state.new_frequency)
}
function set_radio_parameter_mode(){
setRadioParametersMode(state.mode)
}
function set_radio_parameter_rflevel(){
setRadioParametersRFLevel(state.rf_level)
}
</script>
<template>
<div class="card h-100">
<div class="card-header p-0">
<i class="bi bi-house-door" style="font-size: 1.2rem"></i>&nbsp;
<strong>Radio control</strong>
</div>
<div class="card-body overflow-auto p-0">
<div class="input-group input-group-sm bottom-0 m-0">
<div class="me-2">
<div class="input-group input-group-sm">
<span class="input-group-text">QRG</span>
<span class="input-group-text"
>{{ state.frequency / 1000 }} kHz</span
>
<button
class="btn btn-secondary dropdown-toggle"
v-bind:class="{
disabled: state.hamlib_status === 'disconnected',
}"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#offcanvasFrequency"
aria-controls="offcanvasExample"
></button>
</div>
</div>
<div class="me-2">
<div class="input-group input-group-sm">
<span class="input-group-text">Mode</span>
<select
class="form-control"
v-model="state.mode"
@click="set_radio_parameter_mode()"
v-bind:class="{
disabled: state.hamlib_status === 'disconnected',
}"
>
<option selected value="">---</option>
<option value="USB">USB</option>
<option value="USB-D">USB-D</option>
<option value="PKTUSB">PKT-U</option>
</select>
</div>
</div>
<div class="me-2">
<div class="input-group input-group-sm">
<span class="input-group-text">% Power</span>
<select
class="form-control"
v-model="state.rf_level"
@click="set_radio_parameter_rflevel()"
v-bind:class="{
disabled: state.hamlib_status === 'disconnected',
}"
>
<option value="0">-</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="40">40</option>
<option value="50">50</option>
<option value="60">60</option>
<option value="70">70</option>
<option value="80">80</option>
<option value="90">90</option>
<option value="100">100</option>
</select>
</div>
</div>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,363 @@
<script setup lang="ts">
// @ts-nocheck
// reason for no check is, that we have some mixing of typescript and chart js which seems to be not to be fixed that easy
import { ref, computed, onMounted, nextTick } from "vue";
import { initWaterfall, setColormap } from "../../js/waterfallHandler.js";
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../../store/settingsStore.js";
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend,
} from "chart.js";
import { Line, Scatter } from "vue-chartjs";
const localSpectrumView = ref("waterfall");
function selectStatsControl(item) {
switch (item) {
case "wf":
localSpectrumView.value = "waterfall";
break;
case "scatter":
localSpectrumView.value = "scatter";
break;
case "chart":
localSpectrumView.value = "chart";
break;
default:
localSpectrumView.value = "waterfall";
}
//saveSettingsToFile();
}
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend,
);
// https://www.chartjs.org/docs/latest/samples/line/segments.html
const skipped = (speedCtx, value) =>
speedCtx.p0.skip || speedCtx.p1.skip ? value : undefined;
const down = (speedCtx, value) =>
speedCtx.p0.parsed.y > speedCtx.p1.parsed.y ? value : undefined;
var transmissionSpeedChartOptions = {
//type: "line",
responsive: true,
animations: true,
maintainAspectRatio: false,
cubicInterpolationMode: "monotone",
tension: 0.4,
scales: {
SNR: {
type: "linear",
ticks: { beginAtZero: false, color: "rgb(255, 99, 132)" },
position: "right",
},
SPEED: {
type: "linear",
ticks: { beginAtZero: false, color: "rgb(120, 100, 120)" },
position: "left",
grid: {
drawOnChartArea: false, // only want the grid lines for one axis to show up
},
},
x: { ticks: { beginAtZero: true } },
},
};
const transmissionSpeedChartData = computed(() => ({
labels: state.arq_speed_list_timestamp,
datasets: [
{
type: "line",
label: "SNR[dB]",
data: state.arq_speed_list_snr,
borderColor: "rgb(75, 192, 192, 1.0)",
pointRadius: 1,
segment: {
borderColor: (speedCtx) =>
skipped(speedCtx, "rgb(0,0,0,0.4)") ||
down(speedCtx, "rgb(192,75,75)"),
borderDash: (speedCtx) => skipped(speedCtx, [3, 3]),
},
spanGaps: true,
backgroundColor: "rgba(75, 192, 192, 0.2)",
order: 1,
yAxisID: "SNR",
},
{
type: "bar",
label: "Speed[bpm]",
data: state.arq_speed_list_bpm,
borderColor: "rgb(120, 100, 120, 1.0)",
backgroundColor: "rgba(120, 100, 120, 0.2)",
order: 0,
yAxisID: "SPEED",
},
],
}));
const scatterChartOptions = {
responsive: true,
maintainAspectRatio: false,
scales: {
x: {
type: "linear",
position: "bottom",
grid: {
display: true,
lineWidth: 1, // Set the line width for x-axis grid lines
},
ticks: {
display: false,
},
},
y: {
type: "linear",
position: "left",
grid: {
display: true,
lineWidth: 1, // Set the line width for y-axis grid lines
},
ticks: {
display: false,
},
},
},
plugins: {
legend: {
display: false,
},
tooltip: {
enabled: false,
},
},
};
// dummy data
//state.scatter = [{"x":"166","y":"46"},{"x":"-193","y":"-139"},{"x":"-165","y":"-291"},{"x":"311","y":"-367"},{"x":"389","y":"199"},{"x":"78","y":"372"},{"x":"242","y":"-431"},{"x":"-271","y":"-248"},{"x":"28","y":"-130"},{"x":"-20","y":"187"},{"x":"74","y":"362"},{"x":"-316","y":"-229"},{"x":"-180","y":"261"},{"x":"321","y":"360"},{"x":"438","y":"-288"},{"x":"378","y":"-94"},{"x":"462","y":"-163"},{"x":"-265","y":"248"},{"x":"210","y":"314"},{"x":"230","y":"-320"},{"x":"261","y":"-244"},{"x":"-283","y":"-373"}]
const scatterChartData = computed(() => ({
datasets: [
{
type: "scatter",
fill: true,
data: state.scatter,
label: "Scatter",
tension: 0.1,
borderColor: "rgb(0, 255, 0)",
},
],
}));
var localSpectrum;
//Define and generate a unique ID for canvas
const localSpectrumID = ref("");
localSpectrumID.value =
"gridwfid-" + (Math.random() + 1).toString(36).substring(7);
onMounted(() => {
// This code will be executed after the component is mounted to the DOM
// You can access DOM elements or perform other initialization here
//const myElement = this.$refs.waterfall; // Access the DOM element with ref
// init waterfall
localSpectrum = initWaterfall(localSpectrumID.value);
});
</script>
<template>
<div class="card h-100">
<div class="card-header p-1">
<div class="btn-group" role="group">
<div
class="list-group bg-body-tertiary list-group-horizontal"
id="list-tab"
role="tablist"
>
<a
class="py-0 list-group-item list-group-item-dark list-group-item-action"
data-bs-toggle="list"
role="tab"
aria-controls="list-waterfall"
v-bind:class="{
active: localSpectrumView == 'waterfall',
}"
@click="selectStatsControl('wf')"
><strong><i class="bi bi-water"></i></strong
></a>
<a
class="py-0 list-group-item list-group-item-dark list-group-item-action"
data-bs-toggle="list"
role="tab"
aria-controls="list-scatter"
v-bind:class="{
active: localSpectrumView == 'scatter',
}"
@click="selectStatsControl('scatter')"
><strong><i class="bi bi-border-outer"></i></strong
></a>
<a
class="py-0 list-group-item list-group-item-dark list-group-item-action"
data-bs-toggle="list"
role="tab"
aria-controls="list-chart"
v-bind:class="{ active: localSpectrumView == 'chart' }"
@click="selectStatsControl('chart')"
><strong><i class="bi bi-graph-up-arrow"></i></strong
></a>
</div>
</div>
<div class="btn-group" role="group" aria-label="Busy indicators">
<button
class="btn btn-sm ms-1 p-1 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-warning': state.channel_busy_slot[0] === true,
'btn-outline-secondary': state.channel_busy_slot[0] === false,
}"
title="Channel busy state: <strong class='text-success'>not busy</strong> / <strong class='text-danger'>busy </strong>"
>
S1
</button>
<button
class="btn btn-sm p-1 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-warning': state.channel_busy_slot[1] === true,
'btn-outline-secondary': state.channel_busy_slot[1] === false,
}"
title="Channel busy state: <strong class='text-success'>not busy</strong> / <strong class='text-danger'>busy </strong>"
>
S2
</button>
<button
class="btn btn-sm p-1 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-warning': state.channel_busy_slot[2] === true,
'btn-outline-secondary': state.channel_busy_slot[2] === false,
}"
title="Channel busy state: <strong class='text-success'>not busy</strong> / <strong class='text-danger'>busy </strong>"
>
S3
</button>
<button
class="btn btn-sm p-1 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-warning': state.channel_busy_slot[3] === true,
'btn-outline-secondary': state.channel_busy_slot[3] === false,
}"
title="Channel busy state: <strong class='text-success'>not busy</strong> / <strong class='text-danger'>busy </strong>"
>
S4
</button>
<button
class="btn btn-sm p-1 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-warning': state.channel_busy_slot[4] === true,
'btn-outline-secondary': state.channel_busy_slot[4] === false,
}"
title="Channel busy state: <strong class='text-success'>not busy</strong> / <strong class='text-danger'>busy </strong>"
>
S5
</button>
<button
class="btn btn-sm p-1 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
title="Recieving data: illuminates <strong class='text-success'>green</strong> if receiving codec2 data"
v-bind:class="{
'btn-success': state.is_codec2_traffic === true,
'btn-outline-secondary': state.is_codec2_traffic === false,
}"
>
data
</button>
</div>
</div>
<div class="card-body w-100 h-100 overflow-auto p-2">
<div class="tab-content h-100 w-100" id="nav-stats-tabContent">
<div
class="tab-pane fade h-100 w-100"
v-bind:class="{
'show active': localSpectrumView == 'waterfall',
}"
role="stats_tabpanel"
aria-labelledby="list-waterfall-list"
>
<canvas v-bind:id="localSpectrumID" class="force-gpu"></canvas>
</div>
<div
class="tab-pane fade h-100 w-100"
v-bind:class="{
'show active': localSpectrumView == 'scatter',
}"
role="tabpanel"
aria-labelledby="list-scatter-list"
>
<Scatter :data="scatterChartData" :options="scatterChartOptions" />
</div>
<div
class="tab-pane fade h-100 w-100"
v-bind:class="{ 'show active': localSpectrumView == 'chart' }"
role="tabpanel"
aria-labelledby="list-chart-list"
>
<Line
:data="transmissionSpeedChartData"
:options="transmissionSpeedChartOptions"
/>
</div>
</div>
<!--278px-->
</div>
</div>
</template>

View file

@ -0,0 +1,43 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
function getDateTime(timestampRaw) {
var datetime = new Date(timestampRaw * 1000).toLocaleString(
navigator.language,
{
hourCycle: "h23",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
},
);
return datetime;
}
</script>
<template>
<div class="card h-100">
<div class="card-header p-0">
<i class="bi bi-card-list" style="font-size: 1.2rem"></i>&nbsp;
<strong>Activity</strong>
</div>
<div class="card-body overflow-auto m-0 p-0" style="align-items: start">
<div v-for="item in state.activities" :key="item[0]">
<h6 style="text-align: start" class="mb-0">
{{ item[1].origin }} -
<span>{{ getDateTime(item[1].timestamp) }}</span>
</h6>
<p class="mb-2" style="text-align: start; font-size: smaller">
{{ item[1].activity_type }} - {{ item[1].direction }}
</p>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,36 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { setModemBeacon } from "../../js/api.js";
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
function startStopBeacon() {
if (state.beacon_state === true) {
setModemBeacon(false);
} else {
setModemBeacon(true);
}
}
</script>
<template>
<div class="fill h-100" style="width: calc(100% - 24px)">
<a
class="btn btn-sm btn-secondary d-flex justify-content-center align-items-center object-fill border rounded w-100 h-100"
@click="startStopBeacon"
title="Enable/disable periodic beacons"
>Beacon&nbsp;
<span
class=""
role="status"
v-bind:class="{
'spinner-grow spinner-grow-sm': state.beacon_state === true,
disabled: state.beacon_state === false,
}"
>
</span>
</a>
</div>
</template>

View file

@ -0,0 +1,61 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
</script>
<template>
<div class="progress mb-0 me-4 rounded-0 rounded-top" style="height: 22px">
<div
class="progress-bar progress-bar-striped bg-primary force-gpu"
id="dbfs_level"
role="progressbar"
:style="{ width: state.dbfs_level_percent + '%' }"
aria-valuenow="0"
aria-valuemin="0"
aria-valuemax="100"
></div>
<p
class="justify-content-center d-flex position-absolute w-100"
id="dbfs_level_value"
>
{{ state.dbfs_level }} dBFS
</p>
</div>
<div class="progress mb-0 me-4 rounded-0 rounded-bottom" style="height: 8px">
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 1%"
aria-valuenow="1"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar bg-success"
role="progressbar"
style="width: 89%"
aria-valuenow="50"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 20%"
aria-valuenow="20"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-danger"
role="progressbar"
style="width: 29%"
aria-valuenow="29"
aria-valuemin="0"
aria-valuemax="100"
></div>
</div>
</template>

View file

@ -0,0 +1,17 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
</script>
<template>
<a
class="d-flex justify-content-center align-items-center object-fill border rounded w-100 h-100 link-underline link-underline-opacity-0 link-underline-opacity-75-hover text-bg-light"
data-bs-toggle="offcanvas"
data-bs-target="#offcanvasFrequency"
>
{{ state.frequency / 1000 }} kHz
</a>
</template>

View file

@ -0,0 +1,30 @@
<script setup lang="ts">
import { reactive, ref } from "vue";
import { setActivePinia } from "pinia";
import { setConfig } from "../../js/api";
import pinia from "../../store/index";
setActivePinia(pinia);
import { settingsStore } from "../../store/settingsStore.js";
</script>
<template>
<div class="w-100">
<div class="input-group input-group-sm" style="width: calc(100% - 24px)">
<input
type="text"
class="form-control"
disabled
style="min-width: 3em; background-color: transparent"
v-model="settingsStore.remote.STATION.mycall"
/>
<span class="input-group-text">-</span>
<input
type="text"
class="form-control"
disabled
style="min-width: 2em; max-width: 2.5em; background-color: transparent"
v-model="settingsStore.remote.STATION.myssid"
/>
</div>
</div>
</template>

View file

@ -0,0 +1,20 @@
<script setup lang="ts">
import { reactive, ref } from "vue";
import { setActivePinia } from "pinia";
import { setConfig } from "../../js/api";
import pinia from "../../store/index";
setActivePinia(pinia);
import { settingsStore } from "../../store/settingsStore.js";
</script>
<template>
<div
class="d-flex justify-content-center align-items-center object-fill border rounded w-100 h-100"
>
<h2>
{{ settingsStore.remote.STATION.mycall }}-{{
settingsStore.remote.STATION.myssid
}}
</h2>
</div>
</template>

View file

@ -0,0 +1,53 @@
<script setup lang="ts">
import { ref } from "vue";
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
import { sendModemPing } from "../../js/api.js";
const state = useStateStore(pinia);
function transmitPing() {
sendModemPing(dxcallPing.value.toUpperCase());
}
var dxcallPing = ref("");
window.addEventListener(
"stationSelected",
function (eventdata) {
let evt = <CustomEvent>eventdata;
dxcallPing.value = evt.detail;
},
false,
);
</script>
<template>
<div class="input-group" style="width: calc(100% - 24px)">
<input
type="text"
class="form-control"
style="min-width: 3rem; text-transform: uppercase; height: 31px"
placeholder="DXcall"
pattern="[A-Z]*"
maxlength="11"
aria-label="Input group"
aria-describedby="btnGroupAddon"
v-model="dxcallPing"
/>
<a
class="btn btn-sm btn-secondary"
style="max-width: 3em"
id="sendPing"
type="button"
data-bs-placement="bottom"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Send a ping request to a remote station"
@click="transmitPing()"
>
Ping
</a>
</div>
</template>

View file

@ -0,0 +1,16 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
</script>
<template>
<div
class="d-flex justify-content-center align-items-center object-fill border rounded w-100 h-100"
:class="state.ptt_state === true ? 'text-bg-warning' : 'text-bg-white'"
>
<h2>ON AIR</h2>
</div>
</template>

View file

@ -0,0 +1,61 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
</script>
<template>
<div class="progress mb-0 me-4 rounded-0 rounded-top" style="height: 22px">
<div
class="progress-bar progress-bar-striped bg-primary force-gpu"
id="noise_level"
role="progressbar"
:style="{ width: state.s_meter_strength_percent + '%' }"
aria-valuenow="{{state.s_meter_strength_percent}}"
aria-valuemin="0"
aria-valuemax="100"
></div>
<p
class="justify-content-center d-flex position-absolute w-100"
id="noise_level_value"
>
S-Meter(dB): {{ state.s_meter_strength_raw }}
</p>
</div>
<div class="progress mb-0 me-4 rounded-0 rounded-bottom" style="height: 8px">
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 1%"
aria-valuenow="1"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar bg-success"
role="progressbar"
style="width: 89%"
aria-valuenow="50"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-warning"
role="progressbar"
style="width: 20%"
aria-valuenow="20"
aria-valuemin="0"
aria-valuemax="100"
></div>
<div
class="progress-bar progress-bar-striped bg-danger"
role="progressbar"
style="width: 29%"
aria-valuenow="29"
aria-valuemin="0"
aria-valuemax="100"
></div>
</div>
</template>

View file

@ -0,0 +1,91 @@
<script setup lang="ts">
// @ts-nocheck
// reason for no check is, that we have some mixing of typescript and chart js which seems to be not to be fixed that easy
import { computed, onMounted } from "vue";
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { useStateStore } from "../../store/stateStore.js";
const state = useStateStore(pinia);
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend,
} from "chart.js";
import { Scatter } from "vue-chartjs";
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
LineElement,
Title,
Tooltip,
Legend,
);
// https://www.chartjs.org/docs/latest/samples/line/segments.html
const scatterChartOptions = {
responsive: true,
maintainAspectRatio: false,
scales: {
x: {
type: "linear",
position: "bottom",
grid: {
display: true,
lineWidth: 1, // Set the line width for x-axis grid lines
},
ticks: {
display: true,
},
},
y: {
type: "linear",
position: "left",
grid: {
display: true,
lineWidth: 1, // Set the line width for y-axis grid lines
},
ticks: {
display: true,
},
},
},
plugins: {
legend: {
display: false,
},
tooltip: {
enabled: false,
},
},
};
const scatterChartData = computed(() => ({
datasets: [
{
type: "scatter",
fill: true,
data: state.scatter,
label: "Scatter",
tension: 0.1,
borderColor: "rgb(0, 255, 0)",
},
],
}));
</script>
<template>
<div class="w-100 h-100">
<Scatter :data="scatterChartData" :options="scatterChartOptions" />
</div>
<!--278px-->
</template>

View file

@ -0,0 +1,25 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
import { stopTransmission } from "../../js/api";
function stopAllTransmissions() {
console.log("stopping transmissions");
stopTransmission();
}
</script>
<template>
<a
class="btn btn-outline-danger d-flex border justify-content-center align-items-center object-fill rounded w-100 h-100"
id="stop_transmission_connection"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
@click="stopAllTransmissions()"
title="Abort session and stop transmissions"
>
<i class="bi bi-sign-stop-fill h1"></i>
</a>
</template>

View file

@ -0,0 +1,18 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../../store/index";
setActivePinia(pinia);
</script>
<template>
<div class="fill h-100" style="width: calc(100% - 24px)">
<a
class="btn btn-sm btn-secondary d-flex justify-content-center align-items-center object-fill border rounded w-100 h-100"
data-bs-trigger="hover"
data-bs-html="false"
data-bs-toggle="modal"
data-bs-target="#audioModal"
title="Tune"
>Tune</a
>
</div>
</template>

384
gui/src/components/main.vue Normal file
View file

@ -0,0 +1,384 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import main_modals from "./main_modals.vue";
import main_top_navbar from "./main_top_navbar.vue";
import settings_view from "./settings.vue";
import main_footer_navbar from "./main_footer_navbar.vue";
import chat from "./chat.vue";
import main_modem_healthcheck from "./main_modem_healthcheck.vue";
import Dynamic_components from "./dynamic_components.vue";
import { getFreedataMessages } from "../js/api";
import { getRemote } from "../store/settingsStore.js";
import { loadAllData } from "../js/eventHandler";
</script>
<template>
<!-------------------------------- INFO TOASTS ---------------->
<div aria-live="polite" aria-atomic="true" class="position-relative z-3">
<div
class="toast-container position-absolute top-0 end-0 p-3"
id="mainToastContainer"
></div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-1 p-0 bg-body-secondary border-end">
<div
class="d-flex flex-sm-column flex-row flex-nowrap align-items-center sticky-top"
>
<div
class="list-group bg-body-secondary"
id="main-list-tab"
role="tablist"
style="margin-top: 100px"
@click="loadAllData"
>
<main_modem_healthcheck />
<a
class="list-group-item list-group-item-dark list-group-item-action border-0 rounded-3 mb-2 active"
id="list-grid-list"
data-bs-toggle="list"
href="#list-grid"
role="tab"
aria-controls="list-grid"
title="Grid"
><i class="bi bi-grid h3"></i
></a>
<a
class="list-group-item list-group-item-dark list-group-item-action border-0 rounded-3 mb-2"
id="list-chat-list"
data-bs-toggle="list"
href="#list-chat"
role="tab"
aria-controls="list-chat"
title="Chat"
@click="getFreedataMessages"
><i class="bi bi-chat-text h3"></i
></a>
<a
class="list-group-item list-group-item-dark list-group-item-action d-none border-0 rounded-3 mb-2"
id="list-mesh-list"
data-bs-toggle="list"
href="#list-mesh"
role="tab"
aria-controls="list-mesh"
><i class="bi bi-rocket h3"></i
></a>
<a
class="list-group-item list-group-item-dark list-group-item-action d-none border-0 rounded-3 mb-2"
id="list-logger-list"
data-bs-toggle="list"
href="#list-logger"
role="tab"
aria-controls="list-logger"
><i class="bi bi-activity h3"></i
></a>
<a
class="list-group-item list-group-item-dark list-group-item-action border-0 rounded-3 mb-2"
id="list-settings-list"
data-bs-toggle="list"
href="#list-settings"
role="tab"
aria-controls="list-settings"
title="Settings"
@click="loadAllData"
><i class="bi bi-gear-wide-connected h3"></i
></a>
</div>
</div>
</div>
<div class="col-11 min-vh-100 m-0 p-0">
<!-- content -->
<!-- TODO: Remove the top navbar entirely if not needed
<main_top_navbar />
-->
<div class="tab-content" id="nav-tabContent-settings">
<div
class="tab-pane fade"
id="list-home"
role="tabpanel"
aria-labelledby="list-home-list"
>
<!-- TOP NAVBAR -->
<div
id="blurdiv"
style="
-webkit-filter: blur(0px);
filter: blur(0px);
height: 100vh;
"
>
<!--beginn of blur div -->
<!-------------------------------- MAIN AREA ---------------->
<!------------------------------------------------------------------------------------------>
</div>
</div>
<div
class="tab-pane fade d-none"
id="list-mesh"
role="tabpanel"
aria-labelledby="list-mesh-list"
>
<div class="container">
<nav>
<div class="nav nav-tabs" id="nav-tab-mesh" role="tablist-mesh">
<button
class="nav-link active"
id="nav-route-tab"
data-bs-toggle="tab"
data-bs-target="#nav-route"
type="button"
role="tab"
aria-controls="nav-route"
aria-selected="true"
>
Routes
</button>
<button
class="nav-link"
id="nav-signaling-tab"
data-bs-toggle="tab"
data-bs-target="#nav-signaling"
type="button"
role="tab"
aria-controls="nav-signaling"
aria-selected="false"
>
Signaling
</button>
<button
class="nav-link"
id="nav-actions-tab"
data-bs-toggle="tab"
data-bs-target="#nav-actions"
type="button"
role="tab"
aria-controls="nav-actions"
aria-selected="false"
>
Actions
</button>
</div>
</nav>
<div class="tab-content d-none" id="nav-tabContent-Mesh">
<div
class="tab-pane fade show active vw-100 vh-90 overflow-auto"
id="nav-route"
role="tabpanel"
aria-labelledby="nav-route-tab"
>
<div class="container-fluid">
<div
class="table-responsive overflow-auto"
style="max-width: 99vw; max-height: 99vh"
>
<table class="table table-hover table-sm">
<thead>
<tr>
<th scope="col">Timestamp</th>
<th scope="col">DXCall</th>
<th scope="col">Router</th>
<th scope="col">Hops</th>
<th scope="col">Score</th>
<th scope="col">SNR</th>
</tr>
</thead>
<tbody id="mesh-table"></tbody>
</table>
</div>
</div>
</div>
<div
class="tab-pane fade"
id="nav-signaling"
role="tabpanel"
aria-labelledby="nav-signaling-tab"
>
<div class="container-fluid">
<div
class="table-responsive overflow-auto"
style="max-width: 99vw; max-height: 99vh"
>
<table class="table table-hover table-sm">
<thead>
<tr>
<th scope="col">Timestamp</th>
<th scope="col">Destination</th>
<th scope="col">Origin</th>
<th scope="col">Frametype</th>
<th scope="col">Payload</th>
<th scope="col">Attempt</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody id="mesh-signalling-table"></tbody>
</table>
</div>
</div>
</div>
<div
class="tab-pane fade"
id="nav-actions"
role="tabpanel-mesh"
aria-labelledby="nav-actions-tab"
>
<div class="input-group mt-1">
<input
type="text"
class="form-control"
style="max-width: 6rem; text-transform: uppercase"
placeholder="DXcall"
pattern="[A-Z]*"
id="dxCallMesh"
maxlength="11"
aria-label="Input group"
aria-describedby="btnGroupAddon"
/>
<button
id="transmit_mesh_ping"
type="button"
class="btn btn-primary"
>
mesh ping
</button>
</div>
</div>
</div>
</div>
</div>
<div
class="tab-pane fade show active"
id="list-grid"
role="tabpanel"
aria-labelledby="list-grid-list"
>
<Dynamic_components />
</div>
<div
class="tab-pane fade"
id="list-chat"
role="tabpanel"
aria-labelledby="list-chat-list"
>
<chat />
</div>
<div
class="tab-pane fade"
id="list-logger"
role="tabpanel"
aria-labelledby="list-logger-list"
>
<div class="container">
<nav
class="navbar fixed-top bg-body-tertiary border-bottom"
style="margin-left: 87px"
>
<div class="container-fluid">
<input
type="checkbox"
class="btn-check"
id="enable_filter_info"
autocomplete="off"
checked
/>
<label class="btn btn-outline-info" for="enable_filter_info"
>info</label
>
<input
type="checkbox"
class="btn-check"
id="enable_filter_debug"
autocomplete="off"
/>
<label
class="btn btn-outline-primary"
for="enable_filter_debug"
>debug</label
>
<input
type="checkbox"
class="btn-check"
id="enable_filter_warning"
autocomplete="off"
/>
<label
class="btn btn-outline-warning"
for="enable_filter_warning"
>warning</label
>
<input
type="checkbox"
class="btn-check"
id="enable_filter_error"
autocomplete="off"
/>
<label
class="btn btn-outline-danger"
for="enable_filter_error"
>error</label
>
</div>
</nav>
<div class="container-fluid mt-5">
<div class="tableFixHead">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Timestamp</th>
<th scope="col">Type</th>
<th scope="col">Area</th>
<th scope="col">Log entry</th>
</tr>
</thead>
<tbody id="log">
<!--
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
-->
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<settings_view />
<!---------------------------------------------------------------------- FOOTER AREA ------------------------------------------------------------>
<div class="container">
<main_footer_navbar />
</div>
</div>
</div>
</div>
<main_modals />
</template>

View file

@ -0,0 +1,279 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useStateStore } from "../store/stateStore.js";
const state = useStateStore(pinia);
</script>
<template>
<div class="container-fluid">
<div class="row">
<div class="col-1">123</div>
<div class="col-11">
<nav
class="navbar fixed-bottom navbar-expand-xl bg-body-tertiary border-top p-2"
>
<div class="col">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group btn-group-sm me-1" role="group">
<button
class="btn btn-sm btn-secondary me-1"
v-bind:class="{
'btn-danger': state.ptt_state == true,
'btn-secondary': state.ptt_state == false,
}"
id="ptt_state"
type="button"
style="pointer-events: auto"
disabled
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-title="PTT trigger state"
>
<i class="bi bi-broadcast-pin" style="font-size: 0.8rem"></i>
</button>
<button
class="btn btn-sm btn-secondary me-1"
id="busy_state"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-danger': state.busy_state === true,
'btn-secondary': state.busy_state === false,
}"
data-bs-title="Modem state"
disabled
style="pointer-events: auto"
>
<i class="bi bi-cpu" style="font-size: 0.8rem"></i>
</button>
<!--
<button
class="btn btn-sm btn-secondary me-1"
id="arq_session"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-secondary': state.arq_session_state === 'disconnected',
'btn-warning': state.arq_session_state === 'connected',
}"
disabled
style="pointer-events: auto"
data-bs-title="Session state"
>
<i class="bi bi-arrow-left-right" style="font-size: 0.8rem"></i>
</button>
-->
<!--
<button
class="btn btn-sm btn-secondary me-1"
id="arq_state"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-title="Data channel state"
v-bind:class="{
'btn-secondary': state.arq_state === 'False',
'btn-warning': state.arq_state === 'True',
}"
disabled
style="pointer-events: auto"
>
<i class="bi bi-file-earmark-binary" style="font-size: 0.8rem"></i>
</button>
-->
<!--
<button
class="btn btn-sm btn-secondary me-1"
id="rigctld_state"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
title="rigctld state: <strong class='text-success'>CONNECTED</strong> / <strong class='text-secondary'>UNKNOWN</strong>"
>
<i class="bi bi-usb-symbol" style="font-size: 0.8rem"></i>
</button>
-->
<!--
<button
class="btn btn-sm btn-secondary disabled me-3"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
v-bind:class="{
'btn-warning': state.channel_busy === true,
'btn-secondary': state.channel_busy === false,
}"
style="pointer-events: auto"
data-bs-title="Channel busy"
>
<i class="bi bi-hourglass"></i>
</button>
-->
</div>
<div class="btn-group btn-group-sm me-1" role="group">
<button
class="btn btn-sm btn-secondary me-4 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-title="What's the frequency, Kenneth?"
style="pointer-events: auto"
>
{{ state.frequency / 1000 }} kHz
</button>
</div>
<div class="btn-group btn-group-sm me-1" role="group">
<button
class="btn btn-sm btn-secondary me-0"
type="button"
title="Speed level"
>
<i class="bi bi-speedometer2" style="font-size: 1rem"></i>
</button>
<button
class="btn btn-sm btn-secondary me-4 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
data-bs-titel="speed level"
>
<i
class="bi"
style="font-size: 1rem"
v-bind:class="{
'bi-reception-0': state.speed_level == 0,
'bi-reception-1': state.speed_level == 1,
'bi-reception-2': state.speed_level == 2,
'bi-reception-3': state.speed_level == 3,
'bi-reception-4': state.speed_level == 4,
}"
></i>
</button>
</div>
<div class="btn-group btn-group-sm me-1" role="group">
<button
class="btn btn-sm btn-secondary me-0"
type="button"
title="Bytes transfered"
>
<i
class="bi bi-file-earmark-binary"
style="font-size: 1rem"
></i>
</button>
<button
class="btn btn-sm btn-secondary me-4 disabled"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
data-bs-title="total bytes of transmission"
>
{{ state.arq_total_bytes }}
</button>
</div>
<div class="btn-group btn-group-sm me-1" role="group">
<button
class="btn btn-sm btn-secondary me-0"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
data-bs-title="Current or last connected with station"
>
<i
class="bi bi-file-earmark-binary"
style="font-size: 1rem"
></i>
</button>
<button
class="btn btn-sm btn-secondary disabled me-1"
type="button"
data-bs-placement="top"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
data-bs-title="the dxcallsign of the connected station"
>
{{ state.dxcallsign }}
</button>
</div>
</div>
</div>
<div class="col-lg-4">
<div style="margin-right: 2px">
<div
class="progress w-100"
style="height: 20px; min-width: 200px"
>
<div
class="progress-bar progress-bar-striped bg-primary force-gpu"
id="transmission_progress"
role="progressbar"
:style="{ width: state.arq_transmission_percent + '%' }"
aria-valuenow="0"
aria-valuemin="0"
aria-valuemax="100"
></div>
<p
class="justify-content-center m-0 d-flex position-absolute w-100 text-dark"
>
Message Progress
</p>
</div>
<div
hidden
class="progress mb-0 rounded-0 rounded-bottom"
style="height: 10px"
>
<div
class="progress-bar progress-bar-striped bg-warning"
id="transmission_timeleft"
role="progressbar"
:style="{
width: state.arq_seconds_until_timeout_percent + '%',
}"
aria-valuenow="0"
aria-valuemin="0"
aria-valuemax="100"
>
<p
class="justify-content-center m-0 d-flex position-absolute w-100 text-dark"
>
timeout in {{ state.arq_seconds_until_timeout }}s
</p>
</div>
</div>
</div>
</div>
</nav>
</div>
</div>
</div>
</template>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,27 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useStateStore } from "../store/stateStore.js";
const state = useStateStore(pinia);
import { getOverallHealth } from "../js/eventHandler.js";
</script>
<template>
<a
class="btn border btn-outline-secondary list-group-item mb-5"
data-bs-html="false"
data-bs-toggle="modal"
data-bs-target="#modemCheck"
title="Check FreeDATA status"
:class="
getOverallHealth() > 4
? 'bg-danger'
: getOverallHealth() < 2
? ''
: 'bg-warning'
"
><i class="bi bi-activity h3"></i>
</a>
</template>

View file

@ -0,0 +1,431 @@
<script setup lang="ts">
import { Modal } from "bootstrap";
import { onMounted } from "vue";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
import { sendModemCQ } from "../js/api.js";
import { useStateStore } from "../store/stateStore.js";
const state = useStateStore(pinia);
import { useAudioStore } from "../store/audioStore";
const audioStore = useAudioStore();
import { useSerialStore } from "../store/serialStore";
const serialStore = useSerialStore();
import {
getVersion,
setConfig,
startModem,
stopModem,
getModemState,
} from "../js/api";
const version = import.meta.env.PACKAGE_VERSION;
// start modemCheck modal once on startup
onMounted(() => {
getVersion().then((res) => {
state.modem_version = res;
});
new Modal("#modemCheck", {}).show();
});
function getModemStateLocal() {
// Returns active/inactive if modem is running for modem status label
if (state.is_modem_running == true) return "Active";
else return "Inactive";
}
function getNetworkState() {
// Returns active/inactive if modem is running for modem status label
if (state.modem_connection === "connected") return "Connected";
else return "Disconnected";
}
function getRigControlStuff() {
switch (settings.remote.RADIO.control) {
case "disabled":
return true;
case "rigctld":
case "rigctld_bundle":
case "tci":
return state.radio_status;
default:
console.error(
"Unknown radio control mode " + settings.remote.RADIO.control,
);
return "Unknown control type" + settings.remote.RADIO.control;
}
}
function testHamlib() {
sendModemCQ();
}
</script>
<template>
<div
class="modal modal-lg fade"
id="modemCheck"
data-bs-backdrop="static"
data-bs-keyboard="false"
tabindex="-1"
aria-hidden="true"
>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">Modem check</h1>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<div class="accordion" id="startupCheckAccordion">
<!-- Network Section -->
<div class="accordion-item">
<h2 class="accordion-header">
<button
class="accordion-button collapsed"
type="button"
data-bs-target="#networkStatusCollapse"
data-bs-toggle="collapse"
>
Network
<span
class="badge ms-2 bg-success"
:class="
state.modem_connection === 'connected'
? 'bg-success'
: 'bg-danger'
"
>{{ getNetworkState() }}</span
>
</button>
</h2>
<div
id="networkStatusCollapse"
class="accordion-collapse collapse"
>
<div class="accordion-body">
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-25">Modem port</span>
<input
type="text"
class="form-control"
placeholder="modem port (def 5000)"
id="modem_port"
maxlength="5"
max="65534"
min="1025"
v-model="settings.local.port"
@change="onChange"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-25">Modem host</span>
<input
type="text"
class="form-control"
placeholder="modem host (default 127.0.0.1)"
id="modem_port"
v-model="settings.local.host"
@change="onChange"
/>
</div>
</div>
</div>
</div>
<!-- Modem Section -->
<div class="accordion-item">
<h2 class="accordion-header">
<button
class="accordion-button collapsed"
type="button"
data-bs-target="#modemStatusCollapse"
data-bs-toggle="collapse"
>
Modem
<span
class="badge ms-2"
:class="
state.is_modem_running === true
? 'bg-success'
: 'bg-danger'
"
>{{ getModemStateLocal() }}</span
>
</button>
</h2>
<div id="modemStatusCollapse" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50"
>Manual modem restart</label
>
<label class="input-group-text">
<button
type="button"
id="startModem"
class="btn btn-sm btn-outline-success"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Start the Modem. Please set your audio and radio settings first!"
@click="startModem"
v-bind:class="{
disabled: state.is_modem_running === true,
}"
>
<i class="bi bi-play-fill"></i>
</button> </label
><label class="input-group-text">
<button
type="button"
id="stopModem"
class="btn btn-sm btn-outline-danger"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Stop the Modem."
@click="stopModem"
v-bind:class="{
disabled: state.is_modem_running === false,
}"
>
<i class="bi bi-stop-fill"></i>
</button>
</label>
</div>
<!-- Audio Input Device -->
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50"
>Audio Input device</label
>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
@change="onChange"
v-model="settings.remote.AUDIO.input_device"
>
<option
v-for="device in audioStore.audioInputs"
:value="device.id"
>
{{ device.name }} [{{ device.api }}]
</option>
</select>
</div>
<!-- Audio Output Device -->
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50"
>Audio Output device</label
>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
@change="onChange"
v-model="settings.remote.AUDIO.output_device"
>
<option
v-for="device in audioStore.audioOutputs"
:value="device.id"
>
{{ device.name }} [{{ device.api }}]
</option>
</select>
</div>
</div>
</div>
</div>
<!-- Radio Control Section -->
<div class="accordion-item">
<h2 class="accordion-header">
<button
class="accordion-button collapsed"
type="button"
data-bs-target="#radioControlCollapse"
data-bs-toggle="collapse"
>
Radio control
<span
class="badge ms-2"
:class="
getRigControlStuff() === true ? 'bg-success' : 'bg-danger'
"
>{{
getRigControlStuff() === true ? "Online" : "Offline"
}}</span
>
</button>
</h2>
<div
id="radioControlCollapse"
class="accordion-collapse collapse"
>
<div class="accordion-body">
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px"
>Rig control method</span
>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="rigcontrol_radiocontrol"
@change="onChange"
v-model="settings.remote.RADIO.control"
>
<option selected value="disabled">
Disabled (no rig control; use with VOX)
</option>
<option selected value="rigctld">
Rigctld (external Hamlib)
</option>
<option selected value="rigctld_bundle">
Rigctld (internal Hamlib)
</option>
<option selected value="tci">TCI</option>
</select>
</div>
<div
:class="
settings.remote.RADIO.control == 'rigctld_bundle'
? ''
: 'd-none'
"
>
<!-- Shown when rigctld is selected-->
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px"
>Radio port</span
>
<select
@change="onChange"
v-model="settings.remote.RADIO.serial_port"
class="form-select form-select-sm"
>
<option
v-for="device in serialStore.serialDevices"
:value="device.port"
:key="device.port"
>
{{ device.description }}
</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-25">Rigctld Test</label>
<label class="input-group-text">
<button
type="button"
id="testHamlib"
class="btn btn-sm btn-outline-secondary"
data-bs-placement="bottom"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="true"
@click="testHamlib"
title="Test your hamlib settings and toggle PTT once. Button will become <strong class='text-success'>green</strong> on success and <strong class='text-danger'>red</strong> if fails."
>
Send a CQ
</button>
</label>
</div>
</div>
<div
:class="
settings.remote.RADIO.control == 'tci' ? '' : 'd-none'
"
>
<!-- Shown when tci is selected-->
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-25">TCI IP address</span>
<input
type="text"
class="form-control"
placeholder="TCI IP"
id="rigcontrol_tci_ip"
aria-label="Device IP"
v-model="settings.remote.TCI.tci_ip"
@change="onChange"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-25">TCI port</span>
<input
type="text"
class="form-control"
placeholder="TCI port"
id="rigcontrol_tci_port"
aria-label="Device Port"
v-model="settings.remote.TCI.tci_port"
@change="onChange"
/>
</div>
</div>
</div>
</div>
</div>
<!-- Version Section -->
<div class="accordion-item">
<h2 class="accordion-header">
<button
class="accordion-button collapsed"
type="button"
data-bs-target="#versionCheckCollapse"
data-bs-toggle="collapse"
>
Version
</button>
</h2>
<div
id="versionCheckCollapse"
class="accordion-collapse collapse"
>
<div class="accordion-body">
<button
class="btn btn-secondary btn-sm ms-1 me-1"
type="button"
disabled
>
GUI version | {{ version }}
</button>
<button
class="btn btn-secondary btn-sm ms-1 me-1"
type="button"
disabled
>
Modem version | {{ state.modem_version }}
</button>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">
Continue
</button>
</div>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,26 @@
<script setup lang="ts">
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useStateStore } from "../store/stateStore.js";
const state = useStateStore(pinia);
import { settingsStore as settings } from "../store/settingsStore.js";
</script>
<template>
<nav class="navbar bg-body-tertiary border-bottom z-0">
<div class="mx-auto">
<span class="badge bg-secondary me-4">
Modem Connection {{ state.modem_connection }}
</span>
<span class="badge bg-secondary me-4">
Modem {{ state.is_modem_running }}
</span>
<span class="badge bg-secondary me-4">
RIG Control {{ state.rigctld_started }}
</span>
</div>
</nav>
</template>

View file

@ -0,0 +1,204 @@
<script setup lang="ts">
import settings_station from "./settings_station.vue";
import settings_gui from "./settings_gui.vue";
import settings_chat from "./settings_chat.vue";
import settings_rigcontrol from "./settings_rigcontrol.vue";
import settings_modem from "./settings_modem.vue";
import settings_web from "./settings_web.vue";
import settings_exp from "./settings_exp.vue";
</script>
<template>
<div
class="tab-pane fade"
id="list-settings"
role="tabpanel"
aria-labelledby="list-settings-list"
>
<div class="container">
<div class="card text-center">
<div class="card-header">
<!-- SETTINGS Nav tabs -->
<ul class="nav nav-tabs card-header-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button
class="nav-link active"
id="station-tab"
data-bs-toggle="tab"
data-bs-target="#station"
type="button"
role="tab"
aria-controls="home"
aria-selected="true"
>
Station
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="gui-tab"
data-bs-toggle="tab"
data-bs-target="#gui"
type="button"
role="tab"
aria-controls="home"
aria-selected="true"
>
GUI
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="chat-tab"
data-bs-toggle="tab"
data-bs-target="#chat"
type="button"
role="tab"
aria-controls="home"
aria-selected="true"
>
Chat
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="rigcontrol-tab"
data-bs-toggle="tab"
data-bs-target="#rigcontrol"
type="button"
role="tab"
aria-controls="profile"
aria-selected="false"
>
Rig Control
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="modem-tab"
data-bs-toggle="tab"
data-bs-target="#modem"
type="button"
role="tab"
aria-controls="profile"
aria-selected="false"
>
Modem
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="web-tab"
data-bs-toggle="tab"
data-bs-target="#web"
type="button"
role="tab"
aria-controls="messages"
aria-selected="false"
>
Web
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="experiments-tab"
data-bs-toggle="tab"
data-bs-target="#experiments"
type="button"
role="tab"
aria-controls="settings"
aria-selected="false"
>
Exp
</button>
</li>
</ul>
</div>
<div
class="card-body overflow-auto"
style="height: calc(100vh - 105px)"
>
<!-- SETTINGS Nav Tab panes -->
<!-- Station tab contents-->
<div class="tab-content">
<div
class="tab-pane active"
id="station"
role="tabpanel"
aria-labelledby="station-tab"
tabindex="0"
>
<settings_station />
</div>
<!-- GUI tab contents-->
<div
class="tab-pane"
id="gui"
role="tabpanel"
aria-labelledby="gui-tab"
tabindex="0"
>
<settings_gui />
</div>
<div
class="tab-pane"
id="chat"
role="tabpanel"
aria-labelledby="chat-tab"
tabindex="0"
>
<settings_chat />
</div>
<div
class="tab-pane"
id="rigcontrol"
role="tabpanel"
aria-labelledby="rigcontrol-tab"
tabindex="0"
>
<settings_rigcontrol />
</div>
<div
class="tab-pane"
id="modem"
role="tabpanel"
aria-labelledby="modem-tab"
tabindex="0"
>
<settings_modem />
</div>
<div
class="tab-pane"
id="web"
role="tabpanel"
aria-labelledby="web-tab"
tabindex="0"
>
<settings_web />
</div>
<div
class="tab-pane"
id="experiments"
role="tabpanel"
aria-labelledby="experiments-tab"
tabindex="0"
>
<settings_exp />
</div>
</div>
</div>
</div>
</div>
</div>
</template>

View file

@ -0,0 +1,28 @@
<script setup lang="ts">
import { setConfig } from "../js/api";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
</script>
<template>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Enable message auto repeat</label>
<label class="input-group-text w-50">
<div class="form-check form-switch form-check-inline ms-2">
<input
class="form-check-input"
type="checkbox"
@change="onChange"
v-model="settings.remote.MESSAGES.enable_auto_repeat"
/>
<label class="form-check-label" for="enableMessagesAutoRepeatSwitch"
>Re-send message on beacon</label
>
</div>
</label>
</div>
</template>

View file

@ -0,0 +1,35 @@
<script setup lang="ts">
import { setConfig } from "../js/api";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../store/settingsStore.js";
</script>
<template>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Enable MESH protocol</label>
<label class="input-group-text w-50">
<div class="form-check form-switch form-check-inline ms-2">
<input
class="form-check-input"
type="checkbox"
id="enableMeshSwitch"
@change="setConfig"
v-model="settings.remote.MESH.enable_protocol"
/>
<label class="form-check-label" for="enableMeshSwitch"
>experimental! REALLY!</label
>
</div>
</label>
</div>
<div class="center">
<div class="badge text-bg-danger">
<i class="bi bi-shield-exclamation"></i> These options may not work and
are for experienced users only!
</div>
</div>
</template>

View file

@ -0,0 +1,63 @@
<script setup lang="ts">
import { setColormap } from "../js/waterfallHandler";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../store/settingsStore.js";
function saveSettings() {
//saveSettingsToFile();
setColormap();
}
</script>
<template>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-50">Waterfall theme</span>
<select
class="form-select form-select-sm w-50"
id="wftheme_selector"
@change="saveSettings"
v-model="settings.local.wf_theme"
>
<option value="2">Default</option>
<option value="0">Turbo</option>
<option value="1">Fosphor</option>
<option value="3">Inferno</option>
<option value="4">Magma</option>
<option value="5">Jet</option>
<option value="6">Binary</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-50">Update channel</span>
<select
class="form-select form-select-sm w-50"
id="update_channel_selector"
@change="saveSettings"
v-model="settings.local.update_channel"
>
<option value="latest">Stable</option>
<option value="beta">Beta</option>
<option value="alpha">Alpha</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Enable notifications</label>
<label class="input-group-text w-50">
<div class="form-check form-switch form-check-inline">
<input
class="form-check-input"
type="checkbox"
id="NotificationSwitch"
@change="saveSettings"
v-model="settings.local.enable_sys_notification"
/>
<label class="form-check-label" for="NotificationSwitch"
>Show system pop-ups</label
>
</div>
</label>
</div>
</template>

View file

@ -0,0 +1,531 @@
<script setup lang="ts">
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
import { useSerialStore } from "../store/serialStore";
const serialStore = useSerialStore();
</script>
<template>
<hr class="m-2" />
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Rigctld IP</span>
<input
type="text"
class="form-control"
placeholder="rigctld IP"
id="hamlib_rigctld_ip"
aria-label="Device IP"
@change="onChange"
v-model="settings.remote.RIGCTLD.ip"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Rigctld port</span>
<input
type="number"
class="form-control"
placeholder="rigctld port"
id="hamlib_rigctld_port"
aria-label="Device Port"
@change="onChange"
v-model.number="settings.remote.RIGCTLD.port"
/>
</div>
<hr class="m-2" />
<div
:class="settings.remote.RADIO.control == 'rigctld_bundle' ? '' : 'd-none'"
>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Radio model</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_deviceid"
@change="onChange"
v-model.number="settings.remote.RADIO.model_id"
>
<option selected value="0">-- ignore --</option>
<option value="1">Hamlib Dummy</option>
<option value="2">Hamlib NET rigctl</option>
<option value="4">FLRig FLRig</option>
<option value="5">TRXManager TRXManager 5.7.630+</option>
<option value="6">Hamlib Dummy No VFO</option>
<option value="29001">ADAT www.adat.ch (29001)</option>
<option value="25016">AE9RB Si570 (25016)</option>
<option value="25017">AE9RB Si570 (25017)</option>
<option value="17001">Alinco DX-77 (17001)</option>
<option value="17002">Alinco DX-SR8 (17002)</option>
<option value="25006">AmQRP DDS-60 (25006)</option>
<option value="25013">AMSAT-UK FUNcube (25013)</option>
<option value="25018">AMSAT-UK FUNcube (25018)</option>
<option value="5008">AOR AR2700 (5008)</option>
<option value="5006">AOR AR3000A (5006)</option>
<option value="5005">AOR AR3030 (5005)</option>
<option value="5004">AOR AR5000 (5004)</option>
<option value="5014">AOR AR5000A (5014)</option>
<option value="5003">AOR AR7030 (5003)</option>
<option value="5015">AOR AR7030 (5015)</option>
<option value="5002">AOR AR8000 (5002)</option>
<option value="5001">AOR AR8200 (5001)</option>
<option value="5013">AOR AR8600 (5013)</option>
<option value="5016">AOR SR2200 (5016)</option>
<option value="32001">Barrett 2050 (32001)</option>
<option value="32003">Barrett 4050 (32003)</option>
<option value="32002">Barrett 950 (32002)</option>
<option value="34001">CODAN Envoy (34001)</option>
<option value="34002">CODAN NGT (34002)</option>
<option value="25003">Coding Technologies (25003)</option>
<option value="31002">Dorji DRA818U (31002)</option>
<option value="31001">Dorji DRA818V (31001)</option>
<option value="9002">Drake R-8A (9002)</option>
<option value="9003">Drake R-8B (9003)</option>
<option value="23003">DTTS Microwave (23003)</option>
<option value="23004">DTTS Microwave (23004)</option>
<option value="33001">ELAD FDM-DUO (33001)</option>
<option value="2021">Elecraft K2 (2021)</option>
<option value="2029">Elecraft K3 (2029)</option>
<option value="2043">Elecraft K3S (2043)</option>
<option value="2047">Elecraft K4 (2047)</option>
<option value="2044">Elecraft KX2 (2044)</option>
<option value="2045">Elecraft KX3 (2045)</option>
<option value="2038">Elecraft XG3 (2038)</option>
<option value="25001">Elektor Elektor (25001)</option>
<option value="25007">Elektor Elektor (25007)</option>
<option value="25012">FiFi FiFi-SDR (25012)</option>
<option value="2036">FlexRadio 6xxx (2036)</option>
<option value="23001">Flex-radio SDR-1000 (23001)</option>
<option value="2048">FlexRadio/ANAN PowerSDR/Thetis (2048)</option>
<option value="25015">Funkamateur FA-SDR (25015)</option>
<option value="35001">GOMSPACE GS100 (35001)</option>
<option value="2046">Hilberling PT-8000A (2046)</option>
<option value="25019">HobbyPCB RS-HFIQ (25019)</option>
<option value="3054">Icom IC (3054)</option>
<option value="3002">Icom IC-1275 (3002)</option>
<option value="3003">Icom IC-271 (3003)</option>
<option value="3072">Icom IC-2730 (3072)</option>
<option value="3004">Icom IC-275 (3004)</option>
<option value="3005">Icom IC-375 (3005)</option>
<option value="3006">Icom IC-471 (3006)</option>
<option value="3007">Icom IC-475 (3007)</option>
<option value="3008">Icom IC-575 (3008)</option>
<option value="3060">Icom IC-7000 (3060)</option>
<option value="3055">Icom IC-703 (3055)</option>
<option value="3085">Icom IC-705 (3085)</option>
<option value="3009">Icom IC-706 (3009)</option>
<option value="3010">Icom IC-706MkII (3010)</option>
<option value="3011">Icom IC-706MkIIG (3011)</option>
<option value="3012">Icom IC-707 (3012)</option>
<option value="3070">Icom IC-7100 (3070)</option>
<option value="3013">Icom IC-718 (3013)</option>
<option value="3061">Icom IC-7200 (3061)</option>
<option value="3014">Icom IC-725 (3014)</option>
<option value="3015">Icom IC-726 (3015)</option>
<option value="3016">Icom IC-728 (3016)</option>
<option value="3017">Icom IC-729 (3017)</option>
<option value="3073">Icom IC-7300 (3073)</option>
<option value="3019">Icom IC-735 (3019)</option>
<option value="3020">Icom IC-736 (3020)</option>
<option value="3021">Icom IC-737 (3021)</option>
<option value="3022">Icom IC-738 (3022)</option>
<option value="3067">Icom IC-7410 (3067)</option>
<option value="3023">Icom IC-746 (3023)</option>
<option value="3046">Icom IC-746PRO (3046)</option>
<option value="3024">Icom IC-751 (3024)</option>
<option value="3026">Icom IC-756 (3026)</option>
<option value="3027">Icom IC-756PRO (3027)</option>
<option value="3047">Icom IC-756PROII (3047)</option>
<option value="3057">Icom IC-756PROIII (3057)</option>
<option value="3063">Icom IC-7600 (3063)</option>
<option value="3028">Icom IC-761 (3028)</option>
<option value="3078">Icom IC-7610 (3078)</option>
<option value="3029">Icom IC-765 (3029)</option>
<option value="3062">Icom IC-7700 (3062)</option>
<option value="3030">Icom IC-775 (3030)</option>
<option value="3045">Icom IC-78 (3045)</option>
<option value="3056">Icom IC-7800 (3056)</option>
<option value="3031">Icom IC-781 (3031)</option>
<option value="3075">Icom IC-7850/7851 (3075)</option>
<option value="3032">Icom IC-820H (3032)</option>
<option value="3034">Icom IC-821H (3034)</option>
<option value="3044">Icom IC-910 (3044)</option>
<option value="3068">Icom IC-9100 (3068)</option>
<option value="3065">Icom IC-92D (3065)</option>
<option value="3035">Icom IC-970 (3035)</option>
<option value="3081">Icom IC-9700 (3081)</option>
<option value="3086">Icom IC-F8101 (3086)</option>
<option value="30001">Icom IC-M700PRO (30001)</option>
<option value="30003">Icom IC-M710 (30003)</option>
<option value="30002">Icom IC-M802 (30002)</option>
<option value="30004">Icom IC-M803 (30004)</option>
<option value="4002">Icom IC-PCR100 (4002)</option>
<option value="4001">Icom IC-PCR1000 (4001)</option>
<option value="4003">Icom IC-PCR1500 (4003)</option>
<option value="4004">Icom IC-PCR2500 (4004)</option>
<option value="3036">Icom IC-R10 (3036)</option>
<option value="3058">Icom IC-R20 (3058)</option>
<option value="3080">Icom IC-R30 (3080)</option>
<option value="3077">Icom IC-R6 (3077)</option>
<option value="3040">Icom IC-R7000 (3040)</option>
<option value="3037">Icom IC-R71 (3037)</option>
<option value="3041">Icom IC-R7100 (3041)</option>
<option value="3038">Icom IC-R72 (3038)</option>
<option value="3039">Icom IC-R75 (3039)</option>
<option value="3042">Icom ICR-8500 (3042)</option>
<option value="3079">Icom IC-R8600 (3079)</option>
<option value="3043">Icom IC-R9000 (3043)</option>
<option value="3066">Icom IC-R9500 (3066)</option>
<option value="3069">Icom IC-RX7 (3069)</option>
<option value="3083">Icom ID-31 (3083)</option>
<option value="3082">Icom ID-4100 (3082)</option>
<option value="3084">Icom ID-51 (3084)</option>
<option value="3071">Icom ID-5100 (3071)</option>
<option value="6001">JRC JST-145 (6001)</option>
<option value="6002">JRC JST-245 (6002)</option>
<option value="6005">JRC NRD-525 (6005)</option>
<option value="6006">JRC NRD-535D (6006)</option>
<option value="6007">JRC NRD-545 (6007)</option>
<option value="18001">Kachina 505DSP (18001)</option>
<option value="2015">Kenwood R-5000 (2015)</option>
<option value="2033">Kenwood TH-D72A (2033)</option>
<option value="2042">Kenwood TH-D74 (2042)</option>
<option value="2017">Kenwood TH-D7A (2017)</option>
<option value="2019">Kenwood TH-F6A (2019)</option>
<option value="2020">Kenwood TH-F7E (2020)</option>
<option value="2023">Kenwood TH-G71 (2023)</option>
<option value="2026">Kenwood TM-D700 (2026)</option>
<option value="2034">Kenwood TM-D710(G) (2034)</option>
<option value="2027">Kenwood TM-V7 (2027)</option>
<option value="2035">Kenwood TM-V71(A) (2035)</option>
<option value="2030">Kenwood TRC-80 (2030)</option>
<option value="2025">Kenwood TS-140S (2025)</option>
<option value="2014">Kenwood TS-2000 (2014)</option>
<option value="2002">Kenwood TS-440S (2002)</option>
<option value="2003">Kenwood TS-450S (2003)</option>
<option value="2028">Kenwood TS-480 (2028)</option>
<option value="2001">Kenwood TS-50S (2001)</option>
<option value="2004">Kenwood TS-570D (2004)</option>
<option value="2016">Kenwood TS-570S (2016)</option>
<option value="2031">Kenwood TS-590S (2031)</option>
<option value="2037">Kenwood TS-590SG (2037)</option>
<option value="2024">Kenwood TS-680S (2024)</option>
<option value="2005">Kenwood TS-690S (2005)</option>
<option value="2006">Kenwood TS-711 (2006)</option>
<option value="2007">Kenwood TS-790 (2007)</option>
<option value="2008">Kenwood TS-811 (2008)</option>
<option value="2009">Kenwood TS-850 (2009)</option>
<option value="2010">Kenwood TS-870S (2010)</option>
<option value="2041">Kenwood TS-890S (2041)</option>
<option value="2022">Kenwood TS-930 (2022)</option>
<option value="2011">Kenwood TS-940S (2011)</option>
<option value="2012">Kenwood TS-950S (2012)</option>
<option value="2013">Kenwood TS-950SDX (2013)</option>
<option value="2039">Kenwood TS-990S (2039)</option>
<option value="25011">KTH-SDR kit (25011)</option>
<option value="2050">Lab599 TX-500 (2050)</option>
<option value="10004">Lowe HF-235 (10004)</option>
<option value="1045">M0NKA mcHF (1045)</option>
<option value="2049">Malachite DSP (2049)</option>
<option value="3074">Microtelecom Perseus (3074)</option>
<option value="25008">mRS miniVNA (25008)</option>
<option value="25014">N2ADR HiQSDR (25014)</option>
<option value="2040">OpenHPSDR PiHPSDR (2040)</option>
<option value="3053">Optoelectronics OptoScan456 (3053)</option>
<option value="3052">Optoelectronics OptoScan535 (3052)</option>
<option value="28001">Philips/Simoco PRM8060 (28001)</option>
<option value="11005">Racal RA3702 (11005)</option>
<option value="11003">Racal RA6790/GM (11003)</option>
<option value="8004">Radio Shack (8004)</option>
<option value="24001">RFT EKD-500 (24001)</option>
<option value="27002">Rohde&Schwarz EB200 (27002)</option>
<option value="27004">Rohde&Schwarz EK895/6 (27004)</option>
<option value="27001">Rohde&Schwarz ESMC (27001)</option>
<option value="27003">Rohde&Schwarz XK2100 (27003)</option>
<option value="25002">SAT-Schneider DRT1 (25002)</option>
<option value="2051">SDRPlay SDRUno (2051)</option>
<option value="2032">SigFox Transfox (2032)</option>
<option value="14004">Skanti TRP (14004)</option>
<option value="14002">Skanti TRP8000 (14002)</option>
<option value="25009">SoftRock Si570 (25009)</option>
<option value="22001">TAPR DSP-10 (22001)</option>
<option value="3064">Ten-Tec Delta (3064)</option>
<option value="3051">Ten-Tec Omni (3051)</option>
<option value="16003">Ten-Tec RX-320 (16003)</option>
<option value="16012">Ten-Tec RX-331 (16012)</option>
<option value="16004">Ten-Tec RX-340 (16004)</option>
<option value="16005">Ten-Tec RX-350 (16005)</option>
<option value="16007">Ten-Tec TT-516 (16007)</option>
<option value="16002">Ten-Tec TT-538 (16002)</option>
<option value="16001">Ten-Tec TT-550 (16001)</option>
<option value="16008">Ten-Tec TT-565 (16008)</option>
<option value="16009">Ten-Tec TT-585 (16009)</option>
<option value="16011">Ten-Tec TT-588 (16011)</option>
<option value="16013">Ten-Tec TT-599 (16013)</option>
<option value="8002">Uniden BC245xlt (8002)</option>
<option value="8006">Uniden BC250D (8006)</option>
<option value="8001">Uniden BC780xlt (8001)</option>
<option value="8003">Uniden BC895xlt (8003)</option>
<option value="8012">Uniden BC898T (8012)</option>
<option value="8010">Uniden BCD-396T (8010)</option>
<option value="8011">Uniden BCD-996T (8011)</option>
<option value="1033">Vertex Standard (1033)</option>
<option value="26001">Video4Linux SW/FM (26001)</option>
<option value="26002">Video4Linux2 SW/FM (26002)</option>
<option value="12004">Watkins-Johnson WJ-8888 (12004)</option>
<option value="15001">Winradio WR-1000 (15001)</option>
<option value="15002">Winradio WR-1500 (15002)</option>
<option value="15003">Winradio WR-1550 (15003)</option>
<option value="15004">Winradio WR-3100 (15004)</option>
<option value="15005">Winradio WR-3150 (15005)</option>
<option value="15006">Winradio WR-3500 (15006)</option>
<option value="15007">Winradio WR-3700 (15007)</option>
<option value="15009">Winradio WR-G313 (15009)</option>
<option value="3088">Xiegu G90 (3088)</option>
<option value="3076">Xiegu X108G (3076)</option>
<option value="3089">Xiegu X5105 (3089)</option>
<option value="3087">Xiegu X6100 (3087)</option>
<option value="1017">Yaesu FRG-100 (1017)</option>
<option value="1019">Yaesu FRG-8800 (1019)</option>
<option value="1018">Yaesu FRG-9600 (1018)</option>
<option value="1021">Yaesu FT-100 (1021)</option>
<option value="1003">Yaesu FT-1000D (1003)</option>
<option value="1024">Yaesu FT-1000MP (1024)</option>
<option value="1029">Yaesu FT-2000 (1029)</option>
<option value="1027">Yaesu FT-450 (1027)</option>
<option value="1046">Yaesu FT-450D (1046)</option>
<option value="1039">Yaesu FT-600 (1039)</option>
<option value="1047">Yaesu FT-650 (1047)</option>
<option value="1049">Yaesu FT-710 (1049)</option>
<option value="1010">Yaesu FT-736R (1010)</option>
<option value="1005">Yaesu FT-747GX (1005)</option>
<option value="1006">Yaesu FT-757GX (1006)</option>
<option value="1007">Yaesu FT-757GXII (1007)</option>
<option value="1009">Yaesu FT-767GX (1009)</option>
<option value="1020">Yaesu FT-817 (1020)</option>
<option value="1041">Yaesu FT-818 (1041)</option>
<option value="1011">Yaesu FT-840 (1011)</option>
<option value="1001">Yaesu FT-847 (1001)</option>
<option value="1038">Yaesu FT-847UNI (1038)</option>
<option value="1022">Yaesu FT-857 (1022)</option>
<option value="1015">Yaesu FT-890 (1015)</option>
<option value="1036">Yaesu FT-891 (1036)</option>
<option value="1023">Yaesu FT-897 (1023)</option>
<option value="1043">Yaesu FT-897D (1043)</option>
<option value="1013">Yaesu FT-900 (1013)</option>
<option value="1014">Yaesu FT-920 (1014)</option>
<option value="1028">Yaesu FT-950 (1028)</option>
<option value="1031">Yaesu FT-980 (1031)</option>
<option value="1016">Yaesu FT-990 (1016)</option>
<option value="1048">Yaesu FT-990 (1048)</option>
<option value="1035">Yaesu FT-991 (1035)</option>
<option value="1042">Yaesu FTDX-10 (1042)</option>
<option value="1040">Yaesu FTDX-101D (1040)</option>
<option value="1044">Yaesu FTDX-101MP (1044)</option>
<option value="1034">Yaesu FTDX-1200 (1034)</option>
<option value="1037">Yaesu FTDX-3000 (1037)</option>
<option value="1032">Yaesu FTDX-5000 (1032)</option>
<option value="1030">Yaesu FTDX-9000 (1030)</option>
<option value="1004">Yaesu MARK-V (1004)</option>
<option value="1025">Yaesu MARK-V (1025)</option>
<option value="1026">Yaesu VR-5000 (1026)</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Radio port</span>
<select
@change="onChange"
v-model="settings.remote.RADIO.serial_port"
class="form-select form-select-sm"
>
<option
v-for="device in serialStore.serialDevices"
:value="device.port"
:key="device.port"
>
{{ device.description }}
</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Serial speed</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_serialspeed"
@change="onChange"
v-model.number="settings.remote.RADIO.serial_speed"
>
<option selected value="0">-- ignore --</option>
<option value="1200">1200</option>
<option value="2400">2400</option>
<option value="4800">4800</option>
<option value="9600">9600</option>
<option value="14400">14400</option>
<option value="19200">19200</option>
<option value="28800">28800</option>
<option value="38400">38400</option>
<option value="57600">57600</option>
<option value="115200">115200</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Data bits</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_data_bits"
@change="onChange"
v-model.number="settings.remote.RADIO.data_bits"
>
<option selected value="0">-- ignore --</option>
<option value="7">7</option>
<option value="8">8</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Stop bits</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_stop_bits"
@change="onChange"
v-model.number="settings.remote.RADIO.stop_bits"
>
<option selected value="0">-- ignore --</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px"
>Serial handshake</span
>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_handshake"
@change="onChange"
v-model="settings.remote.RADIO.serial_handshake"
>
<option selected value="ignore">-- ignore --</option>
<option value="None">None (Default)</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">PTT device port</span>
<select
@change="onChange"
v-model="settings.remote.RADIO.ptt_port"
class="form-select form-select-sm"
>
<option
v-for="device in serialStore.serialDevices"
:value="device.port"
:key="device.port"
>
{{ device.description }}
</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">PTT type</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_pttprotocol"
style="width: 0.5rem"
@change="onChange"
v-model="settings.remote.RADIO.ptt_type"
>
<option selected value="ignore">-- ignore --</option>
<option value="NONE">NONE</option>
<option value="RIG">RIG</option>
<option value="USB">USB</option>
<option value="RTS">Serial RTS</option>
<option value="PARALLEL">Rig PARALLEL</option>
<option value="MICDATA">Rig MICDATA</option>
<option value="CM108">Rig CM108</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">DCD</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_dcd"
style="width: 0.5rem"
@change="onChange"
v-model="settings.remote.RADIO.serial_dcd"
>
<option selected value="ignore">-- ignore --</option>
<option value="NONE">NONE</option>
<option value="RIG">RIG/CAT</option>
<option value="DSR">DSR</option>
<option value="CTS">CTS</option>
<option value="CD">CD</option>
<option value="PARALLEL">PARALLEL</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">DTR</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="hamlib_dtrstate"
style="width: 0.5rem"
@change="onChange"
v-model="settings.remote.RADIO.serial_dtr"
>
<option selected value="ignore">-- ignore --</option>
<option value="OFF">OFF</option>
<option value="ON">ON</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Rigctld command</span>
<input
type="text"
class="form-control"
id="hamlib_rigctld_command"
aria-label="Device Port"
aria-describedby="basic-addon1"
disabled
placeholder="auto populated from above settings"
/>
<button
class="btn btn-outline-secondary"
type="button"
id="btnHamlibCopyCommand"
>
<i id="btnHamlibCopyCommandBi" class="bi bi-clipboard"></i>
</button>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px"
>Rigctld custom arguments</span
>
<input
type="text"
class="form-control"
placeholder="not typically needed"
id="hamlib_rigctld_custom_args"
aria-label="Custom arguments"
aria-describedby="basic-addon1"
@change="onChange"
v-model="settings.remote.RIGCTLD.arguments"
/>
</div>
</div>
</template>

View file

@ -0,0 +1,196 @@
<script setup lang="ts">
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
import pinia from "../store/index";
import { useStateStore } from "../store/stateStore.js";
const state = useStateStore(pinia);
import { startModem, stopModem } from "../js/api.js";
import { useAudioStore } from "../store/audioStore";
const audioStore = useAudioStore();
</script>
<template>
<div>
<button
type="button"
id="startModem"
class="btn btn-sm btn-outline-success"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Start the Modem. Please set your audio and radio settings first!"
@click="startModem"
v-bind:class="{ disabled: state.is_modem_running === true }"
>
<i class="bi bi-play-fill"></i>
<span class="ms-2">start modem</span>
</button>
<button
type="button"
id="stopModem"
class="btn btn-sm btn-outline-danger"
data-bs-toggle="tooltip"
data-bs-trigger="hover"
data-bs-html="false"
title="Stop the Modem."
@click="stopModem"
v-bind:class="{ disabled: state.is_modem_running === false }"
>
<i class="bi bi-stop-fill"></i>
<span class="ms-2">stop modem</span>
</button>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Modem port</span>
<input
type="number"
class="form-control"
placeholder="modem port"
id="modem_port"
maxlength="5"
max="65534"
min="1025"
v-model.number="settings.local.port"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Modem host</span>
<input
type="text"
class="form-control"
placeholder="modem host"
id="modem_port"
v-model="settings.local.host"
/>
</div>
<!-- Audio Input Device -->
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Audio Input device</label>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
@change="onChange"
v-model="settings.remote.AUDIO.input_device"
>
<option v-for="device in audioStore.audioInputs" :value="device.id">
{{ device.name }} [{{ device.api }}]
</option>
</select>
</div>
<!-- Audio Output Device -->
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Audio Output device</label>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
@change="onChange"
v-model="settings.remote.AUDIO.output_device"
>
<option v-for="device in audioStore.audioOutputs" :value="device.id">
{{ device.name }} [{{ device.api }}]
</option>
</select>
</div>
<!-- Audio rx level-->
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-25">RX Audio Level</span>
<span class="input-group-text w-25">{{
settings.remote.AUDIO.rx_audio_level
}}</span>
<span class="input-group-text w-50">
<input
type="range"
class="form-range"
min="-30"
max="20"
step="1"
id="audioLevelRX"
@change="onChange"
v-model.number="settings.remote.AUDIO.rx_audio_level"
/></span>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text w-25">TX Audio Level</span>
<span class="input-group-text w-25">{{
settings.remote.AUDIO.tx_audio_level
}}</span>
<span class="input-group-text w-50">
<input
type="range"
class="form-range"
min="-30"
max="20"
step="1"
id="audioLevelTX"
@change="onChange"
v-model.number="settings.remote.AUDIO.tx_audio_level"
/></span>
</div>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">TX delay in ms</label>
<select
class="form-select form-select-sm"
id="tx_delay"
@change="onChange"
v-model.number="settings.remote.MODEM.tx_delay"
>
<option value="0">0</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="150">150</option>
<option value="200">200</option>
<option value="250">250</option>
<option value="300">300</option>
<option value="350">350</option>
<option value="400">400</option>
<option value="450">450</option>
<option value="500">500</option>
<option value="550">550</option>
<option value="600">600</option>
<option value="650">650</option>
<option value="700">700</option>
<option value="750">750</option>
<option value="800">800</option>
<option value="850">850</option>
<option value="900">900</option>
<option value="950">950</option>
<option value="1000">1000</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Maximum used bandwidth</label>
<select
class="form-select form-select-sm"
id="maximum_bandwidth"
@change="onChange"
v-model.number="settings.remote.MODEM.maximum_bandwidth"
>
<option value="250">250 Hz</option>
<option value="563">563 Hz</option>
<option value="1700">1700 Hz</option>
</select>
</div>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Respond to CQ</label>
<label class="input-group-text w-50">
<div class="form-check form-switch form-check-inline">
<input
class="form-check-input"
type="checkbox"
id="respondCQSwitch"
v-model="settings.remote.MODEM.respond_to_cq"
@change="onChange"
/>
<label class="form-check-label" for="respondCQSwitch">QRV</label>
</div>
</label>
</div>
</template>

View file

@ -0,0 +1,79 @@
<script setup lang="ts">
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
import settings_hamlib from "./settings_hamlib.vue";
import settings_tci from "./settings_tci.vue";
</script>
<template>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Rig Control</span>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm"
id="rigcontrol_radiocontrol"
@change="onChange"
v-model="settings.remote.RADIO.control"
>
<option selected value="disabled">
Disabled / VOX (no rig control - use with VOX)
</option>
<option selected value="rigctld">Rigctld (external Hamlib)</option>
<option selected value="rigctld_bundle">Rigctld (internal Hamlib)</option>
<option selected value="tci">TCI</option>
</select>
</div>
<hr class="m-2" />
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<button
class="nav-link active"
id="nav-home-tab"
data-bs-toggle="tab"
data-bs-target="#nav-hamlib"
type="button"
role="tab"
aria-controls="nav-home"
aria-selected="true"
>
Hamlib
</button>
<button
class="nav-link"
id="nav-profile-tab"
data-bs-toggle="tab"
data-bs-target="#nav-tci"
type="button"
role="tab"
aria-controls="nav-profile"
aria-selected="false"
>
TCI
</button>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
<div
class="tab-pane fade show active"
id="nav-hamlib"
role="tabpanel"
aria-labelledby="nav-hamlib-tab"
tabindex="0"
>
<settings_hamlib />
</div>
<div
class="tab-pane fade"
id="nav-tci"
role="tabpanel"
aria-labelledby="nav-tci-tab"
tabindex="0"
>
<settings_tci />
</div>
</div>
<hr class="m-2" />
</template>

View file

@ -0,0 +1,85 @@
<script setup lang="ts">
import {
settingsStore as settings,
onChange,
getRemote,
} from "../store/settingsStore.js";
import {
validateCallsignWithSSID,
validateCallsignWithoutSSID,
} from "../js/freedata";
function validateCall() {
//ensure callsign is uppercase:
let call = settings.remote.STATION.mycall;
settings.remote.STATION.mycall = call.toUpperCase();
if (validateCallsignWithoutSSID(settings.remote.STATION.mycall))
//Send new callsign to modem if valid
onChange();
//Reload settings from modem as invalid callsign was passed in
else getRemote();
}
</script>
<template>
<!-- station callsign -->
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px"
>Your station callsign</span
>
<input
type="text"
class="form-control"
style="text-transform: uppercase"
placeholder="Enter your callsign and save it"
id="myCall"
aria-label="Station Callsign"
aria-describedby="basic-addon1"
v-model="settings.remote.STATION.mycall"
@change="validateCall"
/>
</div>
<!-- station ssid -->
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Call SSID</span>
<select
class="form-select form-select-sm w-50"
id="myCallSSID"
@change="onChange"
v-model.number="settings.remote.STATION.myssid"
>
<option selected value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
</select>
</div>
<!-- station grid locator -->
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">Grid Locator</span>
<input
type="text"
class="form-control"
placeholder="Your grid locator"
id="myGrid"
maxlength="6"
aria-label="Station Grid Locator"
aria-describedby="basic-addon1"
@change="onChange"
v-model="settings.remote.STATION.mygrid"
/>
</div>
</template>

View file

@ -0,0 +1,33 @@
<script setup lang="ts">
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
</script>
<template>
<hr class="m-2" />
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">TCI IP Address</span>
<input
type="text"
class="form-control"
placeholder="TCI IP"
id="rigcontrol_tci_ip"
aria-label="Device IP"
@change="onChange"
v-model="settings.remote.TCI.tci_ip"
/>
</div>
<div class="input-group input-group-sm mb-1">
<span class="input-group-text" style="width: 180px">TCI port</span>
<input
type="text"
class="form-control"
placeholder="TCI port"
id="rigcontrol_tci_port"
aria-label="Device Port"
@change="onChange"
v-model="settings.remote.TCI.tci_port"
/>
</div>
</template>

View file

@ -0,0 +1,44 @@
<script setup lang="ts">
import { setConfig } from "../js/api";
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings, onChange } from "../store/settingsStore.js";
</script>
<template>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Explorer publishing</label>
<label class="input-group-text w-50">
<div class="form-check form-switch form-check-inline">
<input
class="form-check-input"
type="checkbox"
id="ExplorerSwitch"
@change="onChange"
v-model="settings.remote.STATION.enable_explorer"
/>
<label class="form-check-label" for="ExplorerSwitch">Publish</label>
</div>
</label>
</div>
<div class="input-group input-group-sm mb-1">
<label class="input-group-text w-50">Explorer stats publishing</label>
<label class="input-group-text w-50">
<div class="form-check form-switch form-check-inline">
<input
class="form-check-input"
type="checkbox"
id="ExplorerStatsSwitch"
@change="onChange"
v-model="settings.remote.STATION.enable_stats"
/>
<label class="form-check-label" for="ExplorerStatsSwitch"
>Publish stats</label
>
</div>
</label>
</div>
</template>

View file

@ -1,285 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!--<meta http-equiv="Content-Security-Policy" content="script-src 'self';">-->
<!-- Bootstrap CSS -->
<link
rel="stylesheet"
href="../node_modules/bootstrap/dist/css/bootstrap.min.css"
/>
<title>Send & Receive Data</title>
</head>
<body>
<div class="container-fluid">
<div class="container mt-1">
<div class="row mb-1">
<div class="col">
<div class="card text-dark bg-light mb-0">
<div class="card-header">Select data</div>
<div class="card-body">
<div class="input-group input-group-sm mb-0">
<input
type="file"
class="form-control"
id="inputGroupFile02"
/>
<label class="input-group-text" for="inputGroupFile02"
>kB</label
>
</div>
</div>
</div>
</div>
<!--col-->
</div>
<!--row-->
<div class="row mb-2">
<div class="col">
<div class="card text-dark bg-light mb-0">
<div class="card-header">Transmission</div>
<div class="card-body">
<div class="row mb-2">
<div class="col-auto">
<div class="input-group input-group-sm">
<input
type="text"
class="form-control"
style="max-width: 6rem"
placeholder="DX Call"
id="dxCall"
maxlength="6"
aria-label="Input group example"
aria-describedby="btnGroupAddon"
/>
<button
type="button"
id="sendPing"
class="btn btn-primary"
>
Ping
</button>
<span class="input-group-text" id="tnc_running_state"
>ACK</span
>
<span class="input-group-text" id="tnc_running_state"
>0000 km</span
>
<span class="input-group-text" id="tnc_running_state"
>0 dB</span
>
</div>
</div>
</div>
<div class="row">
<div class="col-auto">
<div class="input-group input-group-sm">
<span class="input-group-text" id="basic-addon1"
>Mode</span
>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm example"
id="hamlib_deviceport"
>
<option selected value="DATAC1">DATAC1</option>
<option value="DATAC3">DATAC3</option>
</select>
</div>
</div>
<div class="col-auto">
<div class="input-group input-group-sm">
<span class="input-group-text" id="basic-addon1"
>Frames</span
>
<select
class="form-select form-select-sm"
aria-label=".form-select-sm example"
id="hamlib_deviceport"
>
<option selected value="1">1</option>
<option value="2">2</option>
</select>
</div>
</div>
<div class="col">
<div class="input-group input-group-sm">
<button
type="button"
id="startTransmission"
class="btn btn-success"
>
Send
</button>
<!--<button type="button" id="stopTNC"class="btn btn-danger">STOP</button>-->
</div>
</div>
</div>
</div>
</div>
<!--col-->
</div>
<!--row-->
</div>
<div class="row">
<div class="col">
<div class="card text-dark bg-light mb-0">
<div class="card-header">Info</div>
<div class="card-body">123</div>
</div>
</div>
</div>
<div class="row">
<div class="col">
<hr />
</div>
</div>
<!--row-->
</div>
<!--container-->
</div>
<!---------------------------------------------------------------------- FOOTER AREA ------------------------------------------------------------>
<nav class="navbar fixed-bottom navbar-light bg-light">
<div class="container-fluid">
<div
class="btn-toolbar"
role="toolbar"
aria-label="Toolbar with button groups"
>
<div
class="btn-group btn-group-sm me-2"
role="group"
aria-label="First group"
>
<button class="btn btn-secondary" id="ptt_state" type="button">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="currentColor"
class="bi bi-broadcast-pin"
viewBox="0 0 16 16"
>
<path
d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 0 1 .707.707zm2.122 2.122a4 4 0 0 0 0 5.656.5.5 0 1 1-.708.708 5 5 0 0 1 0-7.072.5.5 0 0 1 .708.708zm5.656-.708a.5.5 0 0 1 .708 0 5 5 0 0 1 0 7.072.5.5 0 1 1-.708-.708 4 4 0 0 0 0-5.656.5.5 0 0 1 0-.708zm2.122-2.12a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.313.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707zM6 8a2 2 0 1 1 2.5 1.937V15.5a.5.5 0 0 1-1 0V9.937A2 2 0 0 1 6 8z"
/>
</svg>
</button>
</div>
<div
class="btn-group btn-group-sm me-2"
role="group"
aria-label="Second group"
>
<button class="btn btn-secondary" id="busy_state" type="button">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="currentColor"
class="bi bi-cpu"
viewBox="0 0 16 16"
>
<path
d="M5 0a.5.5 0 0 1 .5.5V2h1V.5a.5.5 0 0 1 1 0V2h1V.5a.5.5 0 0 1 1 0V2h1V.5a.5.5 0 0 1 1 0V2A2.5 2.5 0 0 1 14 4.5h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14a2.5 2.5 0 0 1-2.5 2.5v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14A2.5 2.5 0 0 1 2 11.5H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2A2.5 2.5 0 0 1 4.5 2V.5A.5.5 0 0 1 5 0zm-.5 3A1.5 1.5 0 0 0 3 4.5v7A1.5 1.5 0 0 0 4.5 13h7a1.5 1.5 0 0 0 1.5-1.5v-7A1.5 1.5 0 0 0 11.5 3h-7zM5 6.5A1.5 1.5 0 0 1 6.5 5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3zM6.5 6a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"
/>
</svg>
</button>
</div>
<div
class="btn-group btn-group-sm me-2"
role="group"
aria-label="Second group"
>
<button class="btn btn-secondary" id="arq_state" type="button">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="currentColor"
class="bi bi-arrow-left-right"
viewBox="0 0 16 16"
>
<path
fill-rule="evenodd"
d="M1 11.5a.5.5 0 0 0 .5.5h11.793l-3.147 3.146a.5.5 0 0 0 .708.708l4-4a.5.5 0 0 0 0-.708l-4-4a.5.5 0 0 0-.708.708L13.293 11H1.5a.5.5 0 0 0-.5.5zm14-7a.5.5 0 0 1-.5.5H2.707l3.147 3.146a.5.5 0 1 1-.708.708l-4-4a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 4H14.5a.5.5 0 0 1 .5.5z"
/>
</svg>
</button>
</div>
<div
class="btn-group btn-group-sm me-2"
role="group"
aria-label="Third group"
>
<button
class="btn btn-secondary"
id="signalling_state"
type="button"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="currentColor"
class="bi bi-journal-code"
viewBox="0 0 16 16"
>
<path
fill-rule="evenodd"
d="M8.646 5.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 8 8.646 6.354a.5.5 0 0 1 0-.708zm-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 8l1.647-1.646a.5.5 0 0 0 0-.708z"
/>
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z"
/>
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z"
/>
</svg>
</button>
<button class="btn btn-secondary" id="data_state" type="button">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="currentColor"
class="bi bi-journal-richtext"
viewBox="0 0 16 16"
>
<path
d="M7.5 3.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0zm-.861 1.542 1.33.886 1.854-1.855a.25.25 0 0 1 .289-.047L11 4.75V7a.5.5 0 0 1-.5.5h-5A.5.5 0 0 1 5 7v-.5s1.54-1.274 1.639-1.208zM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0 2a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5z"
/>
<path
d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z"
/>
<path
d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z"
/>
</svg>
</button>
</div>
<div class="input-group input-group-sm me-2">
<span class="input-group-text" id="basic-addon1">Bytes/s</span>
<span class="input-group-text" id="basic-addon1">----</span>
</div>
<div class="progress" style="height: 100%; width: 200px">
<div
class="progress-bar progress-bar-striped bg-primary"
id="arq-progress"
role="progressbar"
style="width: 25%"
aria-valuenow="25"
aria-valuemin="0"
aria-valuemax="100"
>
25%
</div>
</div>
</div>
</div>
</nav>
<script src="../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View file

@ -1,261 +0,0 @@
<option value="1">Hamlib Dummy</option>
<option value="2">Hamlib NET rigctl</option>
<option value="4">FLRig FLRig</option>
<option value="5">TRXManager TRXManager 5.7.630+</option>
<option value="6">Hamlib Dummy No VFO</option>
<option value="1001">Yaesu FT-847</option>
<option value="1003">Yaesu FT-1000D</option>
<option value="1004">Yaesu MARK-V FT-1000MP</option>
<option value="1005">Yaesu FT-747GX</option>
<option value="1006">Yaesu FT-757GX</option>
<option value="1007">Yaesu FT-757GXII</option>
<option value="1009">Yaesu FT-767GX</option>
<option value="1010">Yaesu FT-736R</option>
<option value="1011">Yaesu FT-840</option>
<option value="1013">Yaesu FT-900</option>
<option value="1014">Yaesu FT-920</option>
<option value="1015">Yaesu FT-890</option>
<option value="1016">Yaesu FT-990</option>
<option value="1017">Yaesu FRG-100</option>
<option value="1018">Yaesu FRG-9600</option>
<option value="1019">Yaesu FRG-8800</option>
<option value="1020">Yaesu FT-817</option>
<option value="1021">Yaesu FT-100</option>
<option value="1022">Yaesu FT-857</option>
<option value="1023">Yaesu FT-897</option>
<option value="1024">Yaesu FT-1000MP</option>
<option value="1025">Yaesu MARK-V Field FT-1000MP</option>
<option value="1026">Yaesu VR-5000</option>
<option value="1027">Yaesu FT-450</option>
<option value="1028">Yaesu FT-950</option>
<option value="1029">Yaesu FT-2000</option>
<option value="1030">Yaesu FTDX-9000</option>
<option value="1031">Yaesu FT-980</option>
<option value="1032">Yaesu FTDX-5000</option>
<option value="1033">Vertex Standard VX-1700</option>
<option value="1034">Yaesu FTDX-1200</option>
<option value="1035">Yaesu FT-991</option>
<option value="1036">Yaesu FT-891</option>
<option value="1037">Yaesu FTDX-3000</option>
<option value="1038">Yaesu FT-847UNI</option>
<option value="1039">Yaesu FT-600</option>
<option value="1040">Yaesu FTDX-101D</option>
<option value="1041">Yaesu FT-818</option>
<option value="1042">Yaesu FTDX-10</option>
<option value="1043">Yaesu FT-897D</option>
<option value="1044">Yaesu FTDX-101MP</option>
<option value="2001">Kenwood TS-50S</option>
<option value="2002">Kenwood TS-440S</option>
<option value="2003">Kenwood TS-450S</option>
<option value="2004">Kenwood TS-570D</option>
<option value="2005">Kenwood TS-690S</option>
<option value="2006">Kenwood TS-711</option>
<option value="2007">Kenwood TS-790</option>
<option value="2008">Kenwood TS-811</option>
<option value="2009">Kenwood TS-850</option>
<option value="2010">Kenwood TS-870S</option>
<option value="2011">Kenwood TS-940S</option>
<option value="2012">Kenwood TS-950S</option>
<option value="2013">Kenwood TS-950SDX</option>
<option value="2014">Kenwood TS-2000</option>
<option value="2015">Kenwood R-5000</option>
<option value="2016">Kenwood TS-570S</option>
<option value="2017">Kenwood TH-D7A</option>
<option value="2019">Kenwood TH-F6A</option>
<option value="2020">Kenwood TH-F7E</option>
<option value="2021">Elecraft K2</option>
<option value="2022">Kenwood TS-930</option>
<option value="2023">Kenwood TH-G71</option>
<option value="2024">Kenwood TS-680S</option>
<option value="2025">Kenwood TS-140S</option>
<option value="2026">Kenwood TM-D700</option>
<option value="2027">Kenwood TM-V7</option>
<option value="2028">Kenwood TS-480</option>
<option value="2029">Elecraft K3</option>
<option value="2030">Kenwood TRC-80</option>
<option value="2031">Kenwood TS-590S</option>
<option value="2032">SigFox Transfox</option>
<option value="2033">Kenwood TH-D72A</option>
<option value="2034">Kenwood TM-D710(G)</option>
<option value="2036">FlexRadio 6xxx</option>
<option value="2037">Kenwood TS-590SG</option>
<option value="2038">Elecraft XG3</option>
<option value="2039">Kenwood TS-990s</option>
<option value="2040">OpenHPSDR PiHPSDR</option>
<option value="2041">Kenwood TS-890S</option>
<option value="2042">Kenwood TH-D74</option>
<option value="2043">Elecraft K3S</option>
<option value="2044">Elecraft KX2</option>
<option value="2045">Elecraft KX3</option>
<option value="2046">Hilberling PT-8000A</option>
<option value="2047">Elecraft K4</option>
<option value="2048">FlexRadio/ANAN PowerSDR/Thetis</option>
<option value="2049">Malachite DSP</option>
<option value="3002">Icom IC-1275</option>
<option value="3003">Icom IC-271</option>
<option value="3004">Icom IC-275</option>
<option value="3006">Icom IC-471</option>
<option value="3007">Icom IC-475</option>
<option value="3009">Icom IC-706</option>
<option value="3010">Icom IC-706MkII</option>
<option value="3011">Icom IC-706MkIIG</option>
<option value="3012">Icom IC-707</option>
<option value="3013">Icom IC-718</option>
<option value="3014">Icom IC-725</option>
<option value="3015">Icom IC-726</option>
<option value="3016">Icom IC-728</option>
<option value="3017">Icom IC-729</option>
<option value="3019">Icom IC-735</option>
<option value="3020">Icom IC-736</option>
<option value="3021">Icom IC-737</option>
<option value="3022">Icom IC-738</option>
<option value="3023">Icom IC-746</option>
<option value="3024">Icom IC-751</option>
<option value="3026">Icom IC-756</option>
<option value="3027">Icom IC-756PRO</option>
<option value="3028">Icom IC-761</option>
<option value="3029">Icom IC-765</option>
<option value="3030">Icom IC-775</option>
<option value="3031">Icom IC-781</option>
<option value="3032">Icom IC-820H</option>
<option value="3034">Icom IC-821H</option>
<option value="3035">Icom IC-970</option>
<option value="3036">Icom IC-R10</option>
<option value="3037">Icom IC-R71</option>
<option value="3038">Icom IC-R72</option>
<option value="3039">Icom IC-R75</option>
<option value="3040">Icom IC-R7000</option>
<option value="3041">Icom IC-R7100</option>
<option value="3042">Icom ICR-8500</option>
<option value="3043">Icom IC-R9000</option>
<option value="3044">Icom IC-910</option>
<option value="3045">Icom IC-78</option>
<option value="3046">Icom IC-746PRO</option>
<option value="3047">Icom IC-756PROII</option>
<option value="3051">Ten-Tec Omni VI Plus</option>
<option value="3052">Optoelectronics OptoScan535</option>
<option value="3053">Optoelectronics OptoScan456</option>
<option value="3054">Icom IC ID-1</option>
<option value="3055">Icom IC-703</option>
<option value="3056">Icom IC-7800</option>
<option value="3057">Icom IC-756PROIII</option>
<option value="3058">Icom IC-R20</option>
<option value="3060">Icom IC-7000</option>
<option value="3061">Icom IC-7200</option>
<option value="3062">Icom IC-7700</option>
<option value="3063">Icom IC-7600</option>
<option value="3064">Ten-Tec Delta II</option>
<option value="3065">Icom IC-92D</option>
<option value="3066">Icom IC-R9500</option>
<option value="3067">Icom IC-7410</option>
<option value="3068">Icom IC-9100</option>
<option value="3069">Icom IC-RX7</option>
<option value="3070">Icom IC-7100</option>
<option value="3071">Icom ID-5100</option>
<option value="3072">Icom IC-2730</option>
<option value="3073">Icom IC-7300</option>
<option value="3074">Microtelecom Perseus</option>
<option value="3075">Icom IC-785x</option>
<option value="3076">Xeigu X108G</option>
<option value="3077">Icom IC-R6</option>
<option value="3078">Icom IC-7610</option>
<option value="3079">Icom IC-R8600</option>
<option value="3080">Icom IC-R30</option>
<option value="3081">Icom IC-9700</option>
<option value="3082">Icom ID-4100</option>
<option value="3083">Icom ID-31</option>
<option value="3084">Icom ID-51</option>
<option value="3085">Icom IC-705</option>
<option value="4001">Icom IC-PCR1000</option>
<option value="4002">Icom IC-PCR100</option>
<option value="4003">Icom IC-PCR1500</option>
<option value="4004">Icom IC-PCR2500</option>
<option value="5001">AOR AR8200</option>
<option value="5002">AOR AR8000</option>
<option value="5003">AOR AR7030</option>
<option value="5004">AOR AR5000</option>
<option value="5005">AOR AR3030</option>
<option value="5006">AOR AR3000A</option>
<option value="5008">AOR AR2700</option>
<option value="5013">AOR AR8600</option>
<option value="5014">AOR AR5000A</option>
<option value="5015">AOR AR7030 Plus</option>
<option value="5016">AOR SR2200</option>
<option value="6005">JRC NRD-525</option>
<option value="6006">JRC NRD-535D</option>
<option value="6007">JRC NRD-545 DSP</option>
<option value="8001">Uniden BC780xlt</option>
<option value="8002">Uniden BC245xlt</option>
<option value="8003">Uniden BC895xlt</option>
<option value="8004">Radio Shack PRO-2052</option>
<option value="8006">Uniden BC250D</option>
<option value="8010">Uniden BCD-396T</option>
<option value="8011">Uniden BCD-996T</option>
<option value="8012">Uniden BC898T</option>
<option value="9002">Drake R-8A</option>
<option value="9003">Drake R-8B</option>
<option value="10004">Lowe HF-235</option>
<option value="11003">Racal RA6790/GM</option>
<option value="11005">Racal RA3702</option>
<option value="12004">Watkins-Johnson WJ-8888</option>
<option value="14002">Skanti TRP8000</option>
<option value="14004">Skanti TRP 8255 S R</option>
<option value="15001">Winradio WR-1000</option>
<option value="15002">Winradio WR-1500</option>
<option value="15003">Winradio WR-1550</option>
<option value="15004">Winradio WR-3100</option>
<option value="15005">Winradio WR-3150</option>
<option value="15006">Winradio WR-3500</option>
<option value="15007">Winradio WR-3700</option>
<option value="15009">Winradio WR-G313</option>
<option value="16001">Ten-Tec TT-550</option>
<option value="16002">Ten-Tec TT-538 Jupiter</option>
<option value="16003">Ten-Tec RX-320</option>
<option value="16004">Ten-Tec RX-340</option>
<option value="16005">Ten-Tec RX-350</option>
<option value="16007">Ten-Tec TT-516 Argonaut V</option>
<option value="16008">Ten-Tec TT-565 Orion</option>
<option value="16009">Ten-Tec TT-585 Paragon</option>
<option value="16011">Ten-Tec TT-588 Omni VII</option>
<option value="16012">Ten-Tec RX-331</option>
<option value="16013">Ten-Tec TT-599 Eagle</option>
<option value="17001">Alinco DX-77</option>
<option value="17002">Alinco DX-SR8</option>
<option value="18001">Kachina 505DSP</option>
<option value="22001">TAPR DSP-10</option>
<option value="23001">Flex-radio SDR-1000</option>
<option value="23003">DTTS Microwave Society DttSP IPC</option>
<option value="23004">DTTS Microwave Society DttSP UDP</option>
<option value="24001">RFT EKD-500</option>
<option value="25001">Elektor Elektor 3/04</option>
<option value="25002">SAT-Schneider DRT1</option>
<option value="25003">Coding Technologies Digital World Traveller</option>
<option value="25006">AmQRP DDS-60</option>
<option value="25007">Elektor Elektor SDR-USB</option>
<option value="25008">mRS miniVNA</option>
<option value="25009">SoftRock Si570 AVR-USB</option>
<option value="25011">KTH-SDR kit Si570 PIC-USB</option>
<option value="25012">FiFi FiFi-SDR</option>
<option value="25013">AMSAT-UK FUNcube Dongle</option>
<option value="25014">N2ADR HiQSDR</option>
<option value="25015">Funkamateur FA-SDR</option>
<option value="25016">AE9RB Si570 Peaberry V1</option>
<option value="25017">AE9RB Si570 Peaberry V2</option>
<option value="25018">AMSAT-UK FUNcube Dongle Pro+</option>
<option value="25019">HobbyPCB RS-HFIQ</option>
<option value="26001">Video4Linux SW/FM radio</option>
<option value="26002">Video4Linux2 SW/FM radio</option>
<option value="27001">Rohde&Schwarz ESMC</option>
<option value="27002">Rohde&Schwarz EB200</option>
<option value="27003">Rohde&Schwarz XK2100</option>
<option value="28001">Philips/Simoco PRM8060</option>
<option value="29001">ADAT www.adat.ch ADT-200A</option>
<option value="30001">Icom IC-M700PRO</option>
<option value="30002">Icom IC-M802</option>
<option value="30003">Icom IC-M710</option>
<option value="30004">Icom IC-M803</option>
<option value="31001">Dorji DRA818V</option>
<option value="31002">Dorji DRA818U</option>
<option value="32001">Barrett 2050</option>
<option value="32002">Barrett 950</option>
<option value="33001">ELAD FDM-DUO</option>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 590 KiB

File diff suppressed because it is too large Load diff

192
gui/src/js/api.js Normal file
View file

@ -0,0 +1,192 @@
import { settingsStore as settings } from "../store/settingsStore.js";
import {
validateCallsignWithSSID,
validateCallsignWithoutSSID,
} from "./freedata";
import { processFreedataMessages } from "./messagesHandler";
function buildURL(params, endpoint) {
const url = "http://" + params.host + ":" + params.port + endpoint;
return url;
}
async function apiGet(endpoint) {
try {
const response = await fetch(buildURL(settings.local, endpoint));
if (!response.ok) {
throw new Error(`REST response not ok: ${response.statusText}`);
}
return await response.json();
} catch (error) {
//console.error("Error getting from REST:", error);
}
}
export async function apiPost(endpoint, payload = {}) {
try {
const response = await fetch(buildURL(settings.local, endpoint), {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(`REST response not ok: ${response.statusText}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error("Error posting to REST:", error);
}
}
export async function apiDelete(endpoint, payload = {}) {
try {
const response = await fetch(buildURL(settings.local, endpoint), {
method: "DELETE",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(`REST response not ok: ${response.statusText}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error("Error deleting from REST:", error);
}
}
export async function getVersion() {
let data = await apiGet("/version").then((res) => {
return res;
});
if (typeof data !== "undefined" && typeof data.version !== "undefined") {
return data.version;
}
return 0;
}
export async function getConfig() {
return await apiGet("/config");
}
export async function setConfig(config) {
return await apiPost("/config", config);
}
export async function getAudioDevices() {
return await apiGet("/devices/audio");
}
export async function getSerialDevices() {
return await apiGet("/devices/serial");
}
export async function setModemBeacon(enabled = false) {
return await apiPost("/modem/beacon", { enabled: enabled });
}
export async function sendModemCQ() {
return await apiPost("/modem/cqcqcq");
}
export async function sendModemPing(dxcall) {
if (
validateCallsignWithSSID(dxcall) === false &&
validateCallsignWithoutSSID(dxcall) === true
) {
dxcall = String(dxcall).toUpperCase().trim();
dxcall = dxcall + "-0";
}
dxcall = String(dxcall).toUpperCase().trim();
if (validateCallsignWithSSID(dxcall))
return await apiPost("/modem/ping_ping", { dxcall: dxcall });
}
export async function sendModemARQRaw(mycall, dxcall, data, uuid) {
return await apiPost("/modem/send_arq_raw", {
mycallsign: mycall,
dxcall: dxcall,
data: data,
uuid: uuid,
});
}
export async function stopTransmission() {
return await apiPost("/modem/stop_transmission");
}
export async function sendModemTestFrame() {
return await apiPost("/modem/send_test_frame");
}
export async function startModem() {
return await apiPost("/modem/start");
}
export async function stopModem() {
return await apiPost("/modem/stop");
}
export async function getModemState() {
return await apiGet("/modem/state");
}
export async function setRadioParametersFrequency(frequency) {
return await apiPost("/radio", {
radio_frequency: frequency,
});
}
export async function setRadioParametersMode(mode) {
return await apiPost("/radio", {
radio_mode: mode,
});
}
export async function setRadioParametersRFLevel(rf_level) {
return await apiPost("/radio", {
radio_rf_level: rf_level,
});
}
export async function getRadioStatus() {
return await apiGet("/radio");
}
export async function getFreedataMessages() {
let res = await apiGet("/freedata/messages");
processFreedataMessages(res);
}
export async function getFreedataAttachmentBySha512(data_sha512) {
let res = await apiGet(`/freedata/messages/attachment/${data_sha512}`);
return res;
}
export async function sendFreedataMessage(destination, body, attachments) {
return await apiPost("/freedata/messages", {
destination: destination,
body: body,
attachments: attachments,
});
}
export async function retransmitFreedataMessage(id) {
return await apiPost(`/freedata/messages/${id}`);
}
export async function deleteFreedataMessage(id) {
return await apiDelete(`/freedata/messages/${id}`);
}
export async function getBeaconDataByCallsign(callsign) {
return await apiGet(`/freedata/beacons/${callsign}`);
}

349
gui/src/js/eventHandler.js Normal file
View file

@ -0,0 +1,349 @@
/*
import {
newMessageReceived,
newBeaconReceived,
updateTransmissionStatus,
setStateSuccess,
setStateFailed,
} from "./chatHandler";
*/
import { displayToast } from "./popupHandler";
import { getFreedataMessages, getModemState, getAudioDevices } from "./api";
import { processFreedataMessages } from "./messagesHandler.ts";
import { processRadioStatus } from "./radioHandler.ts";
import { useAudioStore } from "../store/audioStore";
const audioStore = useAudioStore();
import { useSerialStore } from "../store/serialStore";
const serialStore = useSerialStore();
// ----------------- init pinia stores -------------
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { useStateStore } from "../store/stateStore.js";
const stateStore = useStateStore(pinia);
import {
settingsStore as settings,
getRemote,
} from "../store/settingsStore.js";
export function loadAllData() {
getModemState();
getRemote();
getOverallHealth();
audioStore.loadAudioDevices();
serialStore.loadSerialDevices();
getFreedataMessages();
processFreedataMessages();
processRadioStatus();
}
export function connectionFailed(endpoint, event) {
stateStore.modem_connection = "disconnected";
}
export function stateDispatcher(data) {
data = JSON.parse(data);
//Leave commented when not needed, otherwise can lead to heap overflows due to the amount of data logged
//console.debug(data);
if (data["type"] == "state-change" || data["type"] == "state") {
stateStore.modem_connection = "connected";
stateStore.busy_state = data["is_modem_busy"];
stateStore.channel_busy = data["channel_busy"];
stateStore.is_codec2_traffic = data["is_codec2_traffic"];
stateStore.is_modem_running = data["is_modem_running"];
stateStore.dbfs_level = Math.round(data["audio_dbfs"]);
stateStore.dbfs_level_percent = Math.round(
Math.pow(10, data["audio_dbfs"] / 20) * 100,
);
stateStore.s_meter_strength_raw = Math.round(data["s_meter_strength"]);
stateStore.s_meter_strength_percent = Math.round(
Math.pow(10, data["s_meter_strength"] / 20) * 100,
);
stateStore.channel_busy_slot = data["channel_busy_slot"];
stateStore.beacon_state = data["is_beacon_running"];
stateStore.radio_status = data["radio_status"];
stateStore.frequency = data["radio_frequency"];
stateStore.mode = data["radio_mode"];
//Reverse entries so most recent is first
stateStore.activities = Object.entries(data["activities"]).reverse();
build_HSL();
}
}
export function eventDispatcher(data) {
data = JSON.parse(data);
console.debug(data);
if (data["scatter"] !== undefined) {
stateStore.scatter = JSON.parse(data["scatter"]);
return;
}
switch (data["message-db"]) {
case "changed":
console.log("fetching new messages...");
var messages = getFreedataMessages();
processFreedataMessages(messages);
return;
}
switch (data["ptt"]) {
case true:
case false:
// get ptt state as a first test
//console.warn("PTT state true")
stateStore.ptt_state = data.ptt;
return;
}
switch (data["modem"]) {
case "started":
displayToast("success", "bi-arrow-left-right", "Modem started", 5000);
loadAllData();
return;
case "stopped":
displayToast("warning", "bi-arrow-left-right", "Modem stopped", 5000);
return;
case "restarted":
displayToast("secondary", "bi-bootstrap-reboot", "Modem restarted", 5000);
loadAllData();
return;
case "failed":
displayToast(
"danger",
"bi-bootstrap-reboot",
"Modem startup failed | bad config?",
5000,
);
return;
}
var message = "";
switch (data["type"]) {
case "hello-client":
message = "Connected to server";
displayToast("success", "bi-ethernet", message, 5000);
stateStore.modem_connection = "connected";
loadAllData();
return;
switch (data["received"]) {
case "PING":
message = `Ping request from: ${data.dxcallsign}, SNR: ${data.snr}`;
displayToast("success", "bi-check-circle", message, 5000);
return;
case "PING_ACK":
message = `Ping acknowledged from: ${data.dxcallsign}, SNR: ${data.snr}`;
displayToast("success", "bi-check-circle", message, 5000);
return;
}
case "arq":
if (data["arq-transfer-outbound"]) {
switch (data["arq-transfer-outbound"].state) {
case "NEW":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-outbound"].session_id}, DXCall: ${data["arq-transfer-outbound"].dxcall}, Total Bytes: ${data["arq-transfer-outbound"].total_bytes}, State: ${data["arq-transfer-outbound"].state}`;
displayToast("success", "bi-check-circle", message, 5000);
stateStore.dxcallsign = data["arq-transfer-outbound"].dxcall;
stateStore.arq_transmission_percent = 0;
stateStore.arq_total_bytes = 0;
return;
case "OPEN_SENT":
console.info("state OPEN_SENT needs to be implemented");
return;
case "INFO_SENT":
console.info("state INFO_SENT needs to be implemented");
return;
case "BURST_SENT":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-outbound"].session_id}, DXCall: ${data["arq-transfer-outbound"].dxcall}, Received Bytes: ${data["arq-transfer-outbound"].received_bytes}/${data["arq-transfer-outbound"].total_bytes}, State: ${data["arq-transfer-outbound"].state}`;
displayToast("info", "bi-info-circle", message, 5000);
stateStore.arq_transmission_percent =
(data["arq-transfer-outbound"].received_bytes /
data["arq-transfer-outbound"].total_bytes) *
100;
stateStore.arq_total_bytes =
data["arq-transfer-outbound"].received_bytes;
stateStore.arq_speed_list_timestamp =
data["arq-transfer-outbound"].statistics.time_histogram;
stateStore.arq_speed_list_bpm =
data["arq-transfer-outbound"].statistics.bpm_histogram;
stateStore.arq_speed_list_snr =
data["arq-transfer-outbound"].statistics.snr_histogram;
return;
case "ABORTING":
console.info("state ABORTING needs to be implemented");
return;
case "ABORTED":
message = `Type: ${data.type}, Session ID: ${
data["arq-transfer-outbound"].session_id
}, DXCall: ${data["arq-transfer-outbound"].dxcall}, Total Bytes: ${
data["arq-transfer-outbound"].total_bytes
}, Success: ${
data["arq-transfer-outbound"].success ? "Yes" : "No"
}, State: ${data["arq-transfer-outbound"].state}, Data: ${
data["arq-transfer-outbound"].data ? "Available" : "Not Available"
}`;
displayToast("warning", "bi-exclamation-triangle", message, 5000);
return;
case "FAILED":
message = `Type: ${data.type}, Session ID: ${
data["arq-transfer-outbound"].session_id
}, DXCall: ${data["arq-transfer-outbound"].dxcall}, Total Bytes: ${
data["arq-transfer-outbound"].total_bytes
}, Success: ${
data["arq-transfer-outbound"].success ? "Yes" : "No"
}, State: ${data["arq-transfer-outbound"].state}, Data: ${
data["arq-transfer-outbound"].data ? "Available" : "Not Available"
}`;
displayToast("danger", "bi-x-octagon", message, 5000);
return;
}
}
if (data["arq-transfer-inbound"]) {
switch (data["arq-transfer-inbound"].state) {
case "NEW":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-inbound"].session_id}, DXCall: ${data["arq-transfer-inbound"].dxcall}, State: ${data["arq-transfer-inbound"].state}`;
displayToast("info", "bi-info-circle", message, 5000);
stateStore.dxcallsign = data["arq-transfer-inbound"].dxcall;
stateStore.arq_transmission_percent = 0;
stateStore.arq_total_bytes = 0;
stateStore.arq_speed_list_timestamp =
data["arq-transfer-inbound"].statistics.time_histogram;
stateStore.arq_speed_list_bpm =
data["arq-transfer-inbound"].statistics.bpm_histogram;
stateStore.arq_speed_list_snr =
data["arq-transfer-inbound"].statistics.snr_histogram;
return;
case "OPEN_ACK_SENT":
message = `Session ID: ${data["arq-transfer-inbound"].session_id}, DXCall: ${data["arq-transfer-inbound"].dxcall}, Total Bytes: ${data["arq-transfer-inbound"].total_bytes}, State: ${data["arq-transfer-inbound"].state}`;
displayToast("info", "bi-arrow-left-right", message, 5000);
stateStore.arq_transmission_percent =
(data["arq-transfer-inbound"].received_bytes /
data["arq-transfer-inbound"].total_bytes) *
100;
stateStore.arq_total_bytes =
data["arq-transfer-inbound"].received_bytes;
return;
case "INFO_ACK_SENT":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-inbound"].session_id}, DXCall: ${data["arq-transfer-inbound"].dxcall}, Received Bytes: ${data["arq-transfer-inbound"].received_bytes}/${data["arq-transfer-inbound"].total_bytes}, State: ${data["arq-transfer-inbound"].state}`;
displayToast("info", "bi-info-circle", message, 5000);
stateStore.arq_transmission_percent =
(data["arq-transfer-inbound"].received_bytes /
data["arq-transfer-inbound"].total_bytes) *
100;
stateStore.arq_total_bytes =
data["arq-transfer-inbound"].received_bytes;
return;
case "BURST_REPLY_SENT":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-inbound"].session_id}, DXCall: ${data["arq-transfer-inbound"].dxcall}, Received Bytes: ${data["arq-transfer-inbound"].received_bytes}/${data["arq-transfer-inbound"].total_bytes}, State: ${data["arq-transfer-inbound"].state}`;
displayToast("info", "bi-info-circle", message, 5000);
stateStore.arq_transmission_percent =
(data["arq-transfer-inbound"].received_bytes /
data["arq-transfer-inbound"].total_bytes) *
100;
stateStore.arq_total_bytes =
data["arq-transfer-inbound"].received_bytes;
return;
case "ENDED":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-inbound"].session_id}, DXCall: ${data["arq-transfer-inbound"].dxcall}, Received Bytes: ${data["arq-transfer-inbound"].received_bytes}/${data["arq-transfer-inbound"].total_bytes}, State: ${data["arq-transfer-inbound"].state}`;
displayToast("info", "bi-info-circle", message, 5000);
// Forward data to chat module
newMessageReceived(
data["arq-transfer-inbound"].data,
data["arq-transfer-inbound"],
);
stateStore.arq_transmission_percent =
(data["arq-transfer-inbound"].received_bytes /
data["arq-transfer-inbound"].total_bytes) *
100;
stateStore.arq_total_bytes =
data["arq-transfer-inbound"].received_bytes;
return;
case "ABORTED":
console.info("state ABORTED needs to be implemented");
return;
case "FAILED":
message = `Type: ${data.type}, Session ID: ${data["arq-transfer-outbound"].session_id}, DXCall: ${data["arq-transfer-outbound"].dxcall}, Received Bytes: ${data["arq-transfer-outbound"].received_bytes}/${data["arq-transfer-outbound"].total_bytes}, State: ${data["arq-transfer-outbound"].state}`;
displayToast("info", "bi-info-circle", message, 5000);
return;
}
}
return;
}
}
function build_HSL() {
//Use data from activities to build HSL list
for (let i = 0; i < stateStore.activities.length; i++) {
if (
stateStore.activities[i][1].direction != "received" ||
stateStore.activities[i][1].origin == undefined
) {
//Ignore stations without origin and not received type
//console.warn("HSL: Ignoring " + stateStore.activities[i][0]);
continue;
}
let found = false;
for (let ii = 0; ii < stateStore.heard_stations.length; ii++) {
if (
stateStore.heard_stations[ii].origin ==
stateStore.activities[i][1].origin
) {
//Station already in HSL, check if newer than one in HSL
found = true;
if (
stateStore.heard_stations[ii].timestamp <
stateStore.activities[i][1].timestamp
) {
//Update existing entry in HSL
stateStore.heard_stations[ii] = stateStore.activities[i][1];
}
}
}
if (found == false) {
//Station not in HSL, let us add it
stateStore.heard_stations.push(stateStore.activities[i][1]);
}
}
stateStore.heard_stations.sort((a, b) => b.timestamp - a.timestamp); // b - a for reverse sort
}
export function getOverallHealth() {
//Return a number indicating health for icon bg color; lower the number the healthier
let health = 0;
if (stateStore.modem_connection !== "connected") {
health += 5;
stateStore.is_modem_running = false;
stateStore.radio_status = false;
}
if (!stateStore.is_modem_running) health += 3;
if (stateStore.radio_status === false) health += 2;
if (process.env.FDUpdateAvail === "1") health += 1;
return health;
}

56
gui/src/js/event_sock.js Normal file
View file

@ -0,0 +1,56 @@
import {
eventDispatcher,
stateDispatcher,
connectionFailed,
} from "../js/eventHandler.js";
import { addDataToWaterfall } from "../js/waterfallHandler.js";
// ----------------- init pinia stores -------------
import { setActivePinia } from "pinia";
import pinia from "../store/index";
setActivePinia(pinia);
import { settingsStore as settings } from "../store/settingsStore.js";
function connect(endpoint, dispatcher) {
let socket = new WebSocket(
"ws://" + settings.local.host + ":" + settings.local.port + "/" + endpoint,
);
// handle opening
socket.addEventListener("open", function (event) {
//console.log("Connected to the WebSocket server: " + endpoint);
});
// handle data
socket.addEventListener("message", function (event) {
dispatcher(event.data);
return;
});
// handle errors
socket.addEventListener("error", function (event) {
//console.error("WebSocket error:", event);
connectionFailed(endpoint, event);
});
// handle closing and reconnect
socket.addEventListener("close", function (event) {
//console.log("WebSocket connection closed:", event.code);
// Reconnect handler
if (!event.wasClean) {
setTimeout(() => {
//console.log("Reconnecting to websocket");
connect(endpoint, dispatcher);
}, 1000);
}
});
}
// Initial connection attempts to endpoints
export function initConnections() {
connect("states", stateDispatcher);
connect("events", eventDispatcher);
connect("fft", addDataToWaterfall);
}

130
gui/src/js/freedata.ts Normal file
View file

@ -0,0 +1,130 @@
const os = require("os");
const path = require("path");
/**
* Binary to ASCII replacement
* @param {string} data in normal/usual utf-8 format
* @returns base64 encoded string
*/
export function btoa_FD(data) {
//exports.btoa_FD = function (data) {
return Buffer.from(data, "utf-8").toString("base64");
}
/**
* ASCII to Binary replacement
* @param {string} data in base64 encoding
* @returns utf-8 normal/usual string
*/
export function atob_FD(data) {
//exports.atob_FD = function (data) {
return Buffer.from(data, "base64").toString("utf-8");
}
/**
* UTF8 to ASCII btoa
* @param {string} data in base64 encoding
* @returns base64 bota compatible data for use in browser
*/
export function atob(data) {
//exports.atob = function (data) {
return window.btoa(Buffer.from(data, "base64").toString("utf8"));
}
//https://medium.com/@asadise/sorting-a-json-array-according-one-property-in-javascript-18b1d22cd9e9
/**
* Sort a json collection by a property ascending
* @param {string} property property to sort on
* @returns sorted json collection
*/
export function sortByProperty(property) {
return function (a, b) {
if (a[property] > b[property]) return 1;
else if (a[property] < b[property]) return -1;
return 0;
};
}
//https://medium.com/@asadise/sorting-a-json-array-according-one-property-in-javascript-18b1d22cd9e9
/**
* Sort a json collection by a property descending
* @param {string} property property to sort on
* @returns sorted json collection
*/
export function sortByPropertyDesc(property) {
return function (a, b) {
if (a[property] < b[property]) return 1;
else if (a[property] > b[property]) return -1;
return 0;
};
}
/**
* Validate a call sign with ssid
* @param {string} callsign callsign to check
* @returns true or false if callsign appears to be valid with an SSID
*/
export function validateCallsignWithSSID(callsign: string) {
var patt = new RegExp("^[A-Za-z0-9]{1,7}-[0-9]{1,3}$");
callsign = callsign;
if (
callsign === undefined ||
callsign === "" ||
patt.test(callsign) === false
) {
console.error(
"Call sign given is not in correct format or missing; callsign passed is: " +
callsign,
);
return false;
}
return true;
}
/**
* Validate/check if a call sign has an SSID
* @param {string} callsign callsign to check
* @returns true or false if callsign appears to be valid without an SSID
*/
export function validateCallsignWithoutSSID(callsign: string) {
var patt = new RegExp("^[A-Za-z0-9]{1,7}$");
if (
callsign === undefined ||
callsign === "" ||
patt.test(callsign) === false
) {
console.error(
"Call sign given is not in correct format or missing; callsign passed is: " +
callsign,
);
return false;
}
return true;
}
export function getAppDataPath() {
const platform = os.platform();
let appDataPath;
// Check if running in GitHub Actions
const isGitHubActions = process.env.GITHUB_ACTIONS === "true";
if (isGitHubActions) {
return "/home/runner/work/FreeDATA/FreeDATA/gui/config";
}
switch (platform) {
case "darwin": // macOS
appDataPath = path.join(os.homedir(), "Library", "Application Support");
break;
case "win32": // Windows
appDataPath =
process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming");
break;
case "linux": // Linux
appDataPath = path.join(os.homedir(), ".config");
break;
default:
throw new Error("Unsupported platform");
}
return appDataPath;
}

Some files were not shown because too many files have changed in this diff Show more