Coder Social home page Coder Social logo

noobishsvk / fm-dx-webserver Goto Github PK

View Code? Open in Web Editor NEW
25.0 4.0 18.0 1.18 MB

FM-DX Webserver is a cross-platform web server designed for FM DXers who want to control their radio receivers through a web interface.

License: GNU General Public License v3.0

JavaScript 64.15% CSS 9.77% EJS 26.08%
fm tef6686 airspy rtl-sdr sdr xdr

fm-dx-webserver's Introduction

Welcome to my GitHub profile! ⚡

Hello, and welcome to my portfolio! My name is Marek Farkaš (you can call me Noobish though!) and I am a jack of all trades IT person, however I specialize in front-end web & desktop app development using raw HTML/CSS/JS, Electron & NodeJS.

I hope you enjoy exploring my GitHub profile, and if you have any questions or would like to work with me, please don't hesitate to contact me. I'm always open to new opportunities and challenges, and I'd love to hear from you! 🤗

Languages

I can speak the following languages:

🇸🇰 Slovak | 🇨🇿 Czech | 🇬🇧 English | 🇵🇱 Polish

Contact

If you're interested in working with me or have any questions, don't hesitate to reach out! You can contact me via e-mail. I look forward to hearing from you! ✨

Buy Me A Coffee

fm-dx-webserver's People

Contributors

bkram avatar hyperdx avatar kkonradpl avatar mrwish7 avatar noobishsvk avatar stailus avatar tgcfabian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

fm-dx-webserver's Issues

Help needed - transmitter info dissapeared

I don't know why but transmitter info from database suddenly dissapeared from my server, I tried to clean everything and setup from scratch and still empty :(
Console log doesn't show any errors or warnings and other functions works correctly.
Have someone some idea how to trace this issue?

Cannot tune with a password if the tuner is locked.

bilde

It may appear that I do not have the opportunity to tune when I am logged in with the tune password or admin password when the tuner is locked.
This is either if it is locked to admin or if you have not ticked the option "allow tuner control without password"

EBU special characters

redsea has no problem with the letter č

{"pi":"0x9202","group":"2A","radiotext":"Več kot radio","prog_type":"Varied","tp":true}

but the radiotext on the webserver produces a line break here:

grafik

And German Umlaut Ö is missing

Jetzt in �1: Anklang (Wiederholung von 10:05 Uhr)    
�1 Club: (01) 501 70 370 (Mo-Fr, 9-17 Uhr)                      

Sound is boosted twice

Something is wrong with audio - it starts at normal volume but after while (~1s) sounds like double boost and it overdrive with lot of thd.

Settings panel and Setup / Admin page: Checkable elements are not exposed as checkboxes to screen readers

In both the settings panel and Admin page there are checkable elements that aren't exposed as checkboxes to screen readers. Please, consider making all such elements exposed either via ARIA: checkbox role or converting them to native HTML checkboxes.

Examples in the Settings panel:

  • ADD DECIMALS MANUALLY
  • ADD UNDERSCORES TO RDS PS
  • SMOOTH SIGNAL

Examples in the Admin page:

  • PUBLIC TUNER (NO PASSWORD)✓
  • ADMIN LOCK [ONLY ADMINS CAN TUNE]
  • AUTO-SHUTDOWN

Edit: Please also make sure, all these elements get focus when using Tab / Shift+Tab to navigate across the interface.

More about implementing:
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/checkbox_role

Make Play/stop button more visible

Some users overlooked the play/stop button. Maybe, make it in a round shape at the topcorner of the screen. Don't use a pause sign, but a stop sign when stream is disabled by the user.

Default frequency at startup issue

At startup, the tuner goes to the default frequency even if the option in the setup is not activated. The tuner is set to the default frequency (88.8 Mhz in my case), but it shows 87.5 Mhz

image

image

image

3LAS stream

Current implementation of sound works but very unstable and mono, I've modified to stereo but still it is unstable too much sound drops on chrome and firefox.

Disappearing PI-Code

The PI Code disappears (TEF connected to webserver without explicit xdrd)

See https://discord.com/channels/1053804249651359765/1170013490661048411/1199101291754963026

Video

Bildschirmaufzeichnung.vom.22.01.2024.22.19.19.webm

Reason

because the PI that comes from xdrd gets overwritten by the PI from the librdsparser library, which is empty

Replaced datahandler.js by the following patched debug version:
datahandler.zip

The PI code is not always 4 digits

[INFO] a540
[INFO] 
[INFO] 
[INFO] a540
[INFO] a5
[INFO] 
[INFO] 

Can't run it on Arch linux

Hi,

I'm trying run this code on Arch linux but libraries are not compatible, I have so many errors like that:

`fm-dx-webserver]$ npm install

npm WARN deprecated [email protected]: this library is no longer supported
npm WARN deprecated [email protected]: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: request has been deprecated, see request/request#3142
npm ERR! code 1
npm ERR! path /home/tescik/aur/fm-dx-webserver/node_modules/ffi-napi
npm ERR! command failed
npm ERR! command sh -c node-gyp-build
npm ERR! make: Wejście do katalogu '/home/tescik/aur/fm-dx-webserver/node_modules/ffi-napi/build'
npm ERR! CC(target) Release/obj.target/nothing/../node-addon-api/nothing.o
npm ERR! rm -f Release/obj.target/../node-addon-api/nothing.a Release/obj.target/../node-addon-api/nothing.a.ar-file-list; mkdir -p dirname Release/obj.target/../node-addon-api/nothing.a
npm ERR! ar crs Release/obj.target/../node-addon-api/nothing.a @Release/obj.target/../node-addon-api/nothing.a.ar-file-list
npm ERR! COPY Release/nothing.a
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/prep_cif.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/types.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/raw_api.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/java_raw_api.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/closures.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/x86/ffiw64.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/x86/unix64.o
npm ERR! CC(target) Release/obj.target/ffi/deps/libffi/src/x86/win64.o
npm ERR! rm -f Release/obj.target/deps/libffi/libffi.a Release/obj.target/deps/libffi/libffi.a.ar-file-list; mkdir -p dirname Release/obj.target/deps/libffi/libffi.a
npm ERR! ar crs Release/obj.target/deps/libffi/libffi.a @Release/obj.target/deps/libffi/libffi.a.ar-file-list
npm ERR! COPY Release/libffi.a
npm ERR! CXX(target) Release/obj.target/ffi_bindings/src/ffi.o
npm ERR! make: Opuszczenie katalogu '/home/tescik/aur/fm-dx-webserver/node_modules/ffi-napi/build'
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using [email protected]
npm ERR! gyp info using [email protected] | linux | x64
npm ERR! gyp info find Python using Python version 3.11.6 found at "/usr/bin/python3"
npm ERR! gyp http GET https://nodejs.org/download/release/v21.6.0/node-v21.6.0-headers.tar.gz
npm ERR! gyp http 200 https://nodejs.org/download/release/v21.6.0/node-v21.6.0-headers.tar.gz
npm ERR! gyp http GET https://nodejs.org/download/release/v21.6.0/SHASUMS256.txt
npm ERR! gyp http 200 https://nodejs.org/download/release/v21.6.0/SHASUMS256.txt
npm ERR! gyp info spawn /usr/bin/python3
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args '/usr/lib/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args 'binding.gyp',
npm ERR! gyp info spawn args '-f',
npm ERR! gyp info spawn args 'make',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/home/tescik/aur/fm-dx-webserver/node_modules/ffi-napi/build/config.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/usr/lib/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/home/tescik/.cache/node-gyp/21.6.0/include/node/common.gypi',
npm ERR! gyp info spawn args '-Dlibrary=shared_library',
npm ERR! gyp info spawn args '-Dvisibility=default',
npm ERR! gyp info spawn args '-Dnode_root_dir=/home/tescik/.cache/node-gyp/21.6.0',
npm ERR! gyp info spawn args '-Dnode_gyp_dir=/usr/lib/node_modules/node-gyp',
npm ERR! gyp info spawn args '-Dnode_lib_file=/home/tescik/.cache/node-gyp/21.6.0/<(target_arch)/node.lib',
npm ERR! gyp info spawn args '-Dmodule_root_dir=/home/tescik/aur/fm-dx-webserver/node_modules/ffi-napi',
npm ERR! gyp info spawn args '-Dnode_engine=v8',
npm ERR! gyp info spawn args '--depth=.',
npm ERR! gyp info spawn args '--no-parallel',
npm ERR! gyp info spawn args '--generator-output',
npm ERR! gyp info spawn args 'build',
npm ERR! gyp info spawn args '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp info spawn make
npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! ../deps/libffi/src/java_raw_api.c: In function ‘ffi_java_raw_call’:
npm ERR! ../deps/libffi/src/java_raw_api.c:317:3: warning: ‘ffi_java_raw_to_ptrarray’ is deprecated [-Wdeprecated-declarations]
npm ERR! 317 | ffi_java_raw_to_ptrarray (cif, raw, avalue);
npm ERR! | ^~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c:76:1: note: declared here
npm ERR! 76 | ffi_java_raw_to_ptrarray (ffi_cif cif, ffi_java_raw raw, void *args)
npm ERR! | ^~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c: In function ‘ffi_java_translate_args’:
npm ERR! ../deps/libffi/src/java_raw_api.c:328:3: warning: ‘ffi_java_raw_size’ is deprecated [-Wdeprecated-declarations]
npm ERR! 328 | ffi_java_raw raw = (ffi_java_raw)alloca (ffi_java_raw_size (cif));
npm ERR! | ^~~~~~~~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c:45:1: note: declared here
npm ERR! 45 | ffi_java_raw_size (ffi_cif cif)
npm ERR! | ^~~~~~~~~~~~~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c:331:3: warning: ‘ffi_java_ptrarray_to_raw’ is deprecated [-Wdeprecated-declarations]
npm ERR! 331 | ffi_java_ptrarray_to_raw (cif, avalue, raw);
npm ERR! | ^~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c:157:1: note: declared here
npm ERR! 157 | ffi_java_ptrarray_to_raw (ffi_cif cif, void *args, ffi_java_raw raw)
npm ERR! | ^~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c: In function ‘ffi_prep_java_raw_closure’:
npm ERR! ../deps/libffi/src/java_raw_api.c:369:3: warning: ‘ffi_prep_java_raw_closure_loc’ is deprecated [-Wdeprecated-declarations]
npm ERR! 369 | return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl);
npm ERR! | ^~~~~~
npm ERR! ../deps/libffi/src/java_raw_api.c:337:1: note: declared here
npm ERR! 337 | ffi_prep_java_raw_closure_loc (ffi_java_raw_closure
cl,
npm ERR! | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! ../deps/libffi/src/closures.c: In function ‘allocate_space’:
npm ERR! ../deps/libffi/src/closures.c:748:29: warning: comparison of integer expressions of different signedness: ‘off_t’ {aka ‘long int’} and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
npm ERR! 748 | off_t to_write = (len < page_size) ? len : page_size;
npm ERR! | ^
npm ERR! ../deps/libffi/src/closures.c:748:44: warning: operand of ‘?:’ changes signedness from ‘off_t’ {aka ‘long int’} to ‘size_t’ {aka ‘long unsigned int’} due to unsignedness of other operand [-Wsign-compare]
npm ERR! 748 | off_t to_write = (len < page_size) ? len : page_size;
npm ERR! | ^~~
npm ERR! ../deps/libffi/src/x86/ffi64.c: In function ‘classify_argument’:
npm ERR! ../deps/libffi/src/x86/ffi64.c:200:25: warning: suggest braces around empty body in an ‘else’ statement [-Wempty-body]
npm ERR! 200 | FFI_ASSERT (0);
npm ERR! | ^
npm ERR! ../deps/libffi/src/x86/ffi64.c:175:7: warning: this statement may fall through [-Wimplicit-fallthrough=]
npm ERR! 175 | {
npm ERR! | ^
npm ERR! ../deps/libffi/src/x86/ffi64.c:202:5: note: here
npm ERR! 202 | case FFI_TYPE_FLOAT:
npm ERR! | ^~~~
npm ERR! In file included from ../src/ffi.cc:5:
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/get-uv-event-loop-napi-h/include/get-uv-event-loop-napi.h: In function ‘uv_loop_t
get_uv_event_loop(napi_env)’:
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/get-uv-event-loop-napi-h/include/get-uv-event-loop-napi.h:26:30: error: invalid conversion from ‘napi_status (
)(node_api_nogc_env, uv_loop_s
)’ {aka ‘napi_status (
)(const napi_env__
, uv_loop_s**)’} to ‘get_uv_event_loop_fn’ {aka ‘napi_status ()(napi_env__, uv_loop_s**)’} [-fpermissive]
npm ERR! 26 | napi_get_uv_event_loop__ = &napi_get_uv_event_loop;
npm ERR! | ^~~~~~~~~~~~~~~~~~~~~~~
npm ERR! | |
npm ERR! | napi_status ()(node_api_nogc_env, uv_loop_s**) {aka napi_status ()(const napi_env__, uv_loop_s**)}
npm ERR! In file included from /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi.h:2725,
npm ERR! from ../src/ffi.h:2,
npm ERR! from ../src/ffi.cc:3:
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h: In instantiation of ‘napi_status Napi::details::AttachData(napi_env, napi_value, FreeType
, napi_finalize, void*) [with FreeType = CallbackData<Napi::Value ()(const Napi::CallbackInfo&), Napi::Value>; napi_env = napi_env__; napi_value = napi_value__; napi_finalize = void ()(napi_env__, void, void*)]’:
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h:1965:39: required from ‘napi_status Napi::CreateFunction(napi_env, const char*, napi_callback, CbData*, napi_value__) [with CbData = details::CallbackData<Value ()(const CallbackInfo&), Value>; napi_env = napi_env__; napi_callback = napi_value__* ()(napi_env__, napi_callback_info__); napi_value = napi_value__]’
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h:2021:38: required from ‘static Napi::Function Napi::Function::New(napi_env, Callable, const char*, void*) [with Callable = Napi::Value ()(const Napi::CallbackInfo&); napi_env = napi_env__]’
npm ERR! ../src/ffi.cc:58:41: required from here
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h:63:47: error: invalid conversion from ‘napi_finalize’ {aka ‘void ()(napi_env__, void*, void*)’} to ‘node_api_nogc_finalize’ {aka ‘void ()(const napi_env__, void*, void*)’} [-fpermissive]
npm ERR! 63 | status = napi_add_finalizer(env, obj, data, finalizer, hint, nullptr);
npm ERR! | ^~~~~~~~~
npm ERR! | |
npm ERR! | napi_finalize {aka void ()(napi_env__, void*, void*)}
npm ERR! In file included from /home/tescik/.cache/node-gyp/21.6.0/include/node/node_api.h:12,
npm ERR! from /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi.h:4:
npm ERR! /home/tescik/.cache/node-gyp/21.6.0/include/node/js_native_api.h:516:43: note: initializing argument 4 of ‘napi_status napi_add_finalizer(napi_env, napi_value, void*, node_api_nogc_finalize, void*, napi_ref__
)’
npm ERR! 516 | node_api_nogc_finalize finalize_cb,
npm ERR! | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h: In instantiation of ‘napi_status Napi::details::AttachData(napi_env, napi_value, FreeType*, napi_finalize, void*) [with FreeType = CallbackData<void ()(const Napi::CallbackInfo&), void>; napi_env = napi_env__; napi_value = napi_value__; napi_finalize = void ()(napi_env__, void, void*)]’:
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h:1965:39: required from ‘napi_status Napi::CreateFunction(napi_env, const char*, napi_callback, CbData*, napi_value__) [with CbData = details::CallbackData<void ()(const CallbackInfo&), void>; napi_env = napi_env__; napi_callback = napi_value__* ()(napi_env__, napi_callback_info__); napi_value = napi_value__]’
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h:2021:38: required from ‘static Napi::Function Napi::Function::New(napi_env, Callable, const char*, void*) [with Callable = void ()(const Napi::CallbackInfo&); napi_env = napi_env__]’
npm ERR! ../src/ffi.cc:60:37: required from here
npm ERR! /home/tescik/aur/fm-dx-webserver/node_modules/node-addon-api/napi-inl.h:63:47: error: invalid conversion from ‘napi_finalize’ {aka ‘void ()(napi_env__, void*, void*)’} to ‘node_api_nogc_finalize’ {aka ‘void ()(const napi_env__, void*, void*)’} [-fpermissive]
npm ERR! 63 | status = napi_add_finalizer(env, obj, data, finalizer, hint, nullptr);
npm ERR! | ^~~~~~~~~
npm ERR! | |
npm ERR! | napi_finalize {aka void ()(napi_env__, void*, void*)}
npm ERR! /home/tescik/.cache/node-gyp/21.6.0/include/node/js_native_api.h:516:43: note: initializing argument 4 of ‘napi_status napi_add_finalizer(napi_env, napi_value, void*, node_api_nogc_finalize, void*, napi_ref__
)’
npm ERR! 516 | node_api_nogc_finalize finalize_cb,
npm ERR! | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
npm ERR! make: *** [ffi_bindings.target.mk:117: Release/obj.target/ffi_bindings/src/ffi.o] Błąd 1
npm ERR! gyp ERR! build error
npm ERR! gyp ERR! stack Error: make failed with exit code: 2
npm ERR! gyp ERR! stack at ChildProcess. (/usr/lib/node_modules/node-gyp/lib/build.js:209:23)
npm ERR! gyp ERR! System Linux 6.6.12-1-lts
npm ERR! gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd /home/tescik/aur/fm-dx-webserver/node_modules/ffi-napi
npm ERR! gyp ERR! node -v v21.6.0
npm ERR! gyp ERR! node-gyp -v v10.0.1
npm ERR! gyp ERR! not ok

npm ERR! A complete log of this run can be found in: /home/tescik/.npm/_logs/2024-01-20T19_12_33_662Z-debug-0.log
`

Maybe u can help me with this issue?

Failed to load shared library: wrong ELF class: ELFCLASS64

I tested fm-dx-webserver on hardware ARM platform (CPU: Allwinner H3, Quad-core Cortex-A7, Nano Pi device). Unfortunately, with Debian 12 or Armbian, when I start the server with "node ." I get the following error. It seems to be a problem with Koffi, possibly due to a difference between 32 or 64-bit libraries. Tnx

/home/cristian/FM-DX-Webserver/node_modules/koffi/index.js:562
  let lib = load(...args);
            ^

Error: Failed to load shared library: wrong ELF class: ELFCLASS64
    at module.exports.load (/home/cristian/FM-DX-Webserver/node_modules/koffi/index.js:562:13)
    at Object.<anonymous> (/home/cristian/FM-DX-Webserver/datahandler.js:9:19)
    at Module._compile (node:internal/modules/cjs/loader:1356:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1414:10)
    at Module.load (node:internal/modules/cjs/loader:1197:32)
    at Module._load (node:internal/modules/cjs/loader:1013:12)
    at Module.require (node:internal/modules/cjs/loader:1225:19)
    at require (node:internal/modules/helpers:177:18)
    at Object.<anonymous> (/home/cristian/FM-DX-Webserver/index.js:14:21)
    at Module._compile (node:internal/modules/cjs/loader:1356:14)
   

Disconnecting - Unhandled 'error' event in node.js

This error refers to /usr/share/nodejs/events/events.js

andreas@E535:~/apps/fm-dx-webserver$ node .
[23:10] [INFO] Web server is running at http://0.0.0.0:8080.
[23:10] [INFO] Connection to xdrd established successfully.
[23:10] [INFO] Authentication with xdrd successful.
[23:10] [INFO] Web client connected (192.168.43.252) [1]
[23:13] [DEBUG] Received message from client: 94.8
events.js:291
      throw er; // Unhandled 'error' event
      ^

Error: read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
Emitted 'error' event on Socket instance at:
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'ECONNRESET',
  code: 'ECONNRESET',
  syscall: 'read'
}

I hope the information is enough.

Volume change not effective on playback restart

When adjusting the volume via the server interface slider, the adjustment is not effective when you stop and start the playback again until you move the slider.

Steps to reproduce

  1. Start the playback,
  2. adjust the volume using the slider to a much lower value, e.g. zero or something close to it,
  3. stop the playback and start it again.
  4. The playback starts with the full volume.
  5. Move the slider a bit and the volume returns to the value coresponding to the slider position.

Tested in current Firefox and Chrome-based browsers.

Improve the locking / unlocking accessibility when using screen readers

  1. Currently it is not possible to lock / unlock server from the main screen when using a screen reader. You could either make it a HTML button as planned, or use the ARIA role button. When you go for the HTML button version, I suggest you would make the label dynamic: "Lock server" when unlocked and "Unlock server" when locked.
  2. Also it would be helpful if the window title would change in locked state by prepending something like 🔒 or 🔑. For example: "🔒 FM-DX Webserver [Server Name]"

Task list

We can use this issue to discuss the current tasks.

These tasks are currently planned:

  • Make AF list clickable
  • Add RF+/IF+ (iQ/EMS)
  • Add 3LAS support (Low-Latency audio stream)
  • Pack the entire project into a single binary so node.js isn't needed
  • Make screenshots possible with a button/keypress
  • Add password auth
  • Improve auto frequency rounding on FM
  • Modify frequency steps for AM and OIRT
  • Improve UI for mobile devices
  • Make RT copyable
  • Refactor code
  • Reset RDS (on R press)
  • Accessibility features (for visually impaired people)
  • Custom scrollbar (for the AF bar)
  • Web setup
  • Broadcast on all IPs by default
  • Add admin password for remote settings management
  • Add warning/info messages for xdrd authentication
  • Add a link to Discord in the settings modal

Ignore keyboard shortcuts also in the Frequency edit box

Currently it's not possible to use the keyboard arrows in the Frequency edit box to move through numbers without also changing the frequency. Consider ignoring the keyboard shortcuts in this edit box, just like in the Chat area edit boxes or on the volume slider.

Cleanup some button labels for better screen reader accessibility

I've compiled multiple similar issues into one. I believe these are pretty easy to fix.

  1. "Play / Stop Button" label still present on full screen / maximized window. Just "Play / Stop" is enough.
  2. "Tune down by 100 KHz" & "Tune up by 100 KHz": Just Tune down & Tune up would be enough, I believe, As there are various steps for various bands and purposes.
  3. The chat button needs a proper label. Currently it's just " (0)"or whatever number of unread messages there is. Example solution: "Chat (0 unread)".
  4. The Online users button should have a number of users as part of the label. It's impossible for the screen reader user to access this information on mobile, and on PC it's also cumbersome at best.
  5. The Send button in the chat area lacks the label alltogether. I recommend labelling it as "Send".

Frequency at first start always 87.5 MHz

see https://discord.com/channels/1053804249651359765/1170013490661048411/1199129935286124646 and below.

At the first start, the shown frequency is always 87.5 MHz, and not the tuned frequency, although there is a T-Line:

grafik

zlwncigaiccimbrz
67bb5dc9eeacde1d4a75578491d3aefdd270c5e3
x
o1,0
Ss53.1, 3, 29
Pa213
R2000496e646900
OK
T102900
Ss53.1, 4, 29
Pa213
R8003f2058c4e00
Ss53.0, 3, 29
Pa213
R001887a1202000
Ss53.0, 3, 29
Pa213
Ss53.0, 3, 29
Pa213
R2001652d506f00

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.