From bd7ef1260297547ffeada1b002f26477dc4cadbf Mon Sep 17 00:00:00 2001 From: Chrystian Huot Date: Sun, 6 Sep 2020 13:58:29 -0400 Subject: [PATCH] Documentation update --- README.md | 2 +- docs/api.md | 42 +++++----- docs/config.md | 181 +++++++++++++++++++---------------------- docs/install-docker.md | 38 ++++----- docs/install-github.md | 32 ++++---- docs/webapp.md | 60 +++++++------- 6 files changed, 170 insertions(+), 185 deletions(-) diff --git a/README.md b/README.md index 64a3613..772b310 100644 --- a/README.md +++ b/README.md @@ -54,4 +54,4 @@ If you like [Rdio Scanner](https://github.com/chuot/rdio-scanner) please conside If you use [Rdio Scanner](https://github.com/chuot/rdio-scanner) for commercial purposes or derive income from it, please consider [sponsoring this project](https://github.com/sponsors/chuot) to help support continued development. -**Happy Rdio scanning !** \ No newline at end of file +**Happy Rdio scanning !** diff --git a/docs/api.md b/docs/api.md index deed50c..f59037e 100644 --- a/docs/api.md +++ b/docs/api.md @@ -10,7 +10,7 @@ This API is used by the **downstream** feature to received audio files from othe However, this API can be used for purposes other than **downstream**, as long as the API key gives access to the systems/talkgroups on which you wish to upload the audio file. -``` bash +```bash $ curl https://other-rdio-scanner.example.com/api/call-upload \ -F "key=d2079382-07df-4aa9-8940-8fb9e4ef5f2e" \ -F "audio=@/recordings/audio.wav" \ @@ -27,33 +27,33 @@ Call imported successfully - **key** - API key on the receiving host, see `config.json`. - **audio** - Full path to your audio file. The path **must be prefixed** with the **@ sign**. - **dateTime** - Audio date and time in JSON format. -- **frequencies** - (optional) A JSON string. Inspired by *Trunk Recorder*, the JSON structure is: - ``` typescript - { - errorCount: number; - freq: number; // in hertz - len: number; // in seconds - pos: number; // in seconds - spikeCount: number; - }[] - ``` +- **frequencies** - (optional) A JSON string. Inspired by _Trunk Recorder_, the JSON structure is: + ```typescript + { + errorCount: number; + freq: number; // in hertz + len: number; // in seconds + pos: number; // in seconds + spikeCount: number; + }[]; + ``` - **frequency** - (optional) The frequency at which the call was recorded. - **source** - (optional) The unit ID. -- **sources** - (optional) A JSON string. Inspired by *Trunk Recorder*. the JSON string structure is: - ``` typescript - { - pos: number; // in seconds - src: number; // the unit ID - }[] - ``` +- **sources** - (optional) A JSON string. Inspired by _Trunk Recorder_. the JSON string structure is: + ```typescript + { + pos: number; // in seconds + src: number; // the unit ID + }[]; + ``` - **system** - The system ID to attach this audio file. - **talkgroup** - The talkgroup ID to attach this audio file. ## Trunk Recorder API - /api/trunk-recorder-call-upload -This API is used by *Trunk Recorder upload-script* where a JSON file is also available for metadata. +This API is used by _Trunk Recorder upload-script_ where a JSON file is also available for metadata. -``` bash +```bash $ curl https://rdio-scanner.other.instance/api/trunk-recorder-call-upload \ -F "key=d2079382-07df-4aa9-8940-8fb9e4ef5f2e" \ -F "audio=@/recordings/audio.wav" \ @@ -65,4 +65,4 @@ Call imported successfully - **key** - API key on the receiving host, see `config.json`. - **audio** - Full path to your audio file. The path **must be prefixed** with the **@ sign**. - **meta** - Full path to your audio metadata. the path **must be prefixed** with the **@ sign**. -- **system** - The system ID to link this audio file. \ No newline at end of file +- **system** - The system ID to link this audio file. diff --git a/docs/config.md b/docs/config.md index f31d21d..289ee34 100644 --- a/docs/config.md +++ b/docs/config.md @@ -8,7 +8,7 @@ This file is at the heart of [Rdio Scanner](https://github.com/chuot/rdio-scanne **Structure** -``` js +```js { "nodejs": { // (string) "development" or "production". Default is "production". @@ -108,7 +108,7 @@ It is possible to run [Rdio Scanner](https://github.com/chuot/rdio-scanner) in S If you don't have a certificate, you can generate one yourself like this: -``` bash +```bash $ openssl req -nodes -new -x509 -keyout server.key -out server.cert Generating a RSA private key ..........+++++ @@ -133,7 +133,7 @@ Email Address []: Then add the files to your configuration: -``` json +```json "nodejs": { "sslCert": "server.cert", "sslKey": "server.key" @@ -150,7 +150,7 @@ When used, the user will be prompted once for their password. It is then stored **Structure of the rdioScanner.access object** -``` typescript +```typescript access: null | string | string[] | { code: string; systems: number | number[] | { @@ -167,42 +167,34 @@ Default value is `null` . **Examples** -* No access control, access to all systems/talkgroups +- No access control, access to all systems/talkgroups - - -``` json +```json "access": null - ``` +``` -* Single unique password, access to all systems/talkgroups +- Single unique password, access to all systems/talkgroups - - -``` json +```json "access": "password" - ``` +``` - or +or - - -``` json +```json "access": { "code": "password", "systems": "*" } - ``` +``` -* Complex access control +- Complex access control `password1` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003. `password2` and `password3` give access to all systems/talkgroups. - - -``` json +```json "access": [ { "code": "password1", @@ -230,7 +222,7 @@ Default value is `null` . }, "password3" ] - ``` +``` ## API keys - rdioScanner.apiKeys @@ -242,7 +234,7 @@ It is also possible to restrict these API keys to specific systems/talkgroups. **Structure of the rdioScanner.apiKeys object** -``` typescript +```typescript apiKeys: null | string | string[] | { key: string; systems: number | number[] | { @@ -259,34 +251,28 @@ Default value is an empty array `[]` . **Examples** -* Single API key which allows upload to any systems/talkgroups +- Single API key which allows upload to any systems/talkgroups - - -``` json +```json "apiKeys": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e" - ``` +``` - or +or - - -``` json +```json "access": { "key": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e", "systems": "*" } - ``` +``` -* Complex API keys definition +- Complex API keys definition API key `d2079382-07df-4aa9-8940-8fb9e4ef5f2e` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003. API keys `cfcfa7d5-897c-4b96-b974-2fec80c3f775` and `a3ac707e-eaf9-4951-a9d5-c52186fa5093` give access to all systems/talkgroups. - - -``` json +```json "apiKeys": [ { "key": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e", @@ -314,7 +300,7 @@ Default value is an empty array `[]` . }, "a3ac707e-eaf9-4951-a9d5-c52186fa5093" ] - ``` +``` ## DirWatch - rdioScanner.dirWatch @@ -322,14 +308,14 @@ You can also define a `dirWatch` to monitor new audio files from any directory. **Structure** -``` typescript +```typescript dirWatch: { delay?: number; // optional, value is in ms deleteAfter?: boolean; // default is false directory: string; // mandatory, unique extension: string; // mandatory frequency?: number; // optional, value is in hertz - mask?: string; // optional, see possible values below + mask?: string | string[]; // optional, see possible values below system?: number | string; // optional talkgroup?: number | string; // optional type?: "default" | "trunk-recorder"; // optional, default is default @@ -337,26 +323,26 @@ dirWatch: { }[] ``` -* **delay** - Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a timeout value in *milliseconds* for the audio file to settle before ingesting it. -* **deleteAfter** - You may want the audio file to be deleted after being ingested. If this value is *true*, all pre-existing audio files will be ingested and deleted as soon as [Rdio Scanner](https://github.com/chuot/rdio-scanner) starts. When this parameter is *false*, pre-existing audio files are neither ingested nor deleted. -* **directory** - Absolute or relatives to [Rdio Scanner](https://github.com/chuot/rdio-scanner)'s. Path of the directory to be monitored. **This value must be unique**. -* **extension** - The audio call extension to monitor without the period. Ex.: "mp3", "wav". -* **frequency** - You may want to fake the frequency which will be displayed on *Rdio Scanner*. Let say that you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency. -* **frequency** - You may want to simulate the frequency that will be displayed. Say you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency. -* **mask** - Some metadata can be extracted from the file name of the audio file using specific META tags. Here is the list: - + **#DATE** - extract the date like *20200608* or *2020-06-08*. - + **#HZ** - extract the frequency in hertz like *119100000*. - + **#KHZ** - extract the frequency in kilohertz like *119100*. - + **#MHZ** - extract the frequency in megahertz like *119.100*. - + **#TIME** - extract the *local* time like *0853439* or *08:34:39*. - + **#SYS** - extract the system id like *11*. - + **#TG** - extract the talkgroup id like *54241*. - + **#UNIT** - extract the unit id like *4424001*. - + **#ZTIME** - extract the *zulu* time like *0453439* or *04:34:39*. -* **system** - A valid system id defined in **rdioScanner.systems**. -* **talkgroup** - A valid talkgroup id defined in **rdioScanner.systems**. -* **type** - In case of *Trunk Recorder*, the metadata of the *JSON file* will be used. -* **usePolling** - When monitoring a network folder, you must use Polling for dirWatch to work. However, this is very CPU intensive and should be used with care. You can also try values greater than 1000 to decrease CPU consumption. +- **delay** - Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a timeout value in _milliseconds_ for the audio file to settle before ingesting it. +- **deleteAfter** - You may want the audio file to be deleted after being ingested. If this value is _true_, all pre-existing audio files will be ingested and deleted as soon as [Rdio Scanner](https://github.com/chuot/rdio-scanner) starts. When this parameter is _false_, pre-existing audio files are neither ingested nor deleted. +- **directory** - Absolute or relatives to [Rdio Scanner](https://github.com/chuot/rdio-scanner)'s. Path of the directory to be monitored. **This value must be unique**. +- **extension** - The audio call extension to monitor without the period. Ex.: "mp3", "wav". +- **frequency** - You may want to fake the frequency which will be displayed on _Rdio Scanner_. Let say that you are recording an AM frequency from _RTLSDR-Airband_, here you would put that frequency. +- **frequency** - You may want to simulate the frequency that will be displayed. Say you are recording an AM frequency from _RTLSDR-Airband_, here you would put that frequency. +- **mask** - Some metadata can be extracted from the file name of the audio file using specific META tags. You may define a simple mask for the dirWatch or an array of masks. Here is the list of possible META tags: + - **#DATE** - extract the date like _20200608_ or _2020-06-08_. + - **#HZ** - extract the frequency in hertz like _119100000_. + - **#KHZ** - extract the frequency in kilohertz like _119100_. + - **#MHZ** - extract the frequency in megahertz like _119.100_. + - **#TIME** - extract the _local_ time like _0853439_ or _08:34:39_. + - **#SYS** - extract the system id like _11_. + - **#TG** - extract the talkgroup id like _54241_. + - **#UNIT** - extract the unit id like _4424001_. + - **#ZTIME** - extract the _zulu_ time like _0453439_ or _04:34:39_. +- **system** - A valid system id defined in **rdioScanner.systems**. It can also be a regexp string to extract the system id. +- **talkgroup** - A valid talkgroup id defined in **rdioScanner.systems**. It can also be a regexp string to extract the talkgroup id. +- **type** - In case of _Trunk Recorder_, the metadata of the _JSON file_ will be used. +- **usePolling** - When monitoring a network folder, you must use Polling for dirWatch to work. However, this is very CPU intensive and should be used with care. You can also try values greater than 1000 to decrease CPU consumption. > Note that [Rdio Scanner](https://github.com/chuot/rdio-scanner) must know the **system id** and the **talkgroup id** for the call to be ingested. These two values must be specified either by **dirWatch.system**, **dirWatch.talkgroup**, **dirWatch.mask** or a mix of them. **dirWatch.system** and **dirWatch.talkgroup** have priority over **dirWatch.mask**. @@ -364,11 +350,9 @@ Default value is an empty array `[]` . **Examples** -* Ingest audio files from **Trunk Recorder** +- Ingest audio files from **Trunk Recorder** - - -``` json +```json "dirWatch": [ { "deleteAfter": true, @@ -385,13 +369,11 @@ Default value is an empty array `[]` . "type": "trunk-recorder" } ] - ``` +``` -* Ingest audio files from **RTLSDR-Airband** +- Ingest audio files from **RTLSDR-Airband** - - -``` json +```json "dirWatch": [ { "deleteAfter": true, @@ -403,22 +385,25 @@ Default value is an empty array `[]` . "type": "trunk-recorder" } ] - ``` +``` -* Ingest audio files from **SDRTrunk** +- Ingest audio files from **SDRTrunk** - - -``` json +```json "dirWatch": [ { "deleteAfter": true, "directory": "/home/radio/SDRTrunk/recordings", "extension": "mp3", - "mask": "#DATE_#TIMERSP25MTL_#SYS_TRAFFIC__TO_#TG_FROM_#UNIT" + "frequency": 772531250, + "mask": [ + "#DATE_#TIMERSP25MTL1_TRAFFIC__TO_#TG_FROM_#UNIT", + "#DATE_#TIMERSP25MTL1_TRAFFIC__TO_#TG" + ], + "system": 11 } ] - ``` +``` ## Downstreams - rdioScanner.downstreams @@ -430,7 +415,7 @@ This is handy if you want to build a mesh of [Rdio Scanner](https://github.com/c **Structure of the rdioScanner.downstreams object** -``` typescript +```typescript downstreams: { apiKey: string; disabled: boolean; @@ -449,7 +434,7 @@ Default value is an empty array `[]` . **Examples** -``` json +```json "downstreams": [ { "apiKey": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e", @@ -498,7 +483,7 @@ Each button press can emit a specific beep depending on whether a function is ac **Structure of the rdioScanner.options.keypadBeeps object** -``` typescript +```typescript options: { keypadBeeps: false | 1 | 2 | { // false = disabled, 1 = uniden, 2 = whistler, object = custom activate: { // beeps sequence when a function is activated @@ -527,7 +512,7 @@ options: { Setting `options.keypadBeeps` to `1` set the keypadBeeps to Uniden style. It is equivalent to: -``` json +```json "options": { "keypadBeeps": { "activate": [ @@ -572,7 +557,7 @@ Setting `options.keypadBeeps` to `1` set the keypadBeeps to Uniden style. It is Setting `options.keypadBeeps` to `2` set the keypadBeeps to Whistler style. It is equivalent to: -``` json +```json "options": { "keypadBeeps": { "activate": [ @@ -627,7 +612,7 @@ The heart of [Rdio Scanner](https://github.com/chuot/rdio-scanner) where all you **Definitions of the rdioScanner.systems object** -``` typescript +```typescript systems: { id: number; label: string; @@ -648,18 +633,18 @@ systems: { }[] ``` -* **id** - System ID. -* **label** - System label shown on the left side of second row. -* **led** - Optional LED color for the whole system. By default the LED is *green*. -* **talkgroups** - Talkgroups for the system. - + **id** - Talkgroup ID. - + **label** - Talkgroup label shown on the left side of third row. - + **name** - Talkgroup name shown on the fouth row. - + **patches** - Array of talkgroup ID to include in this talkgroup. - + **tag** - Talkgroup tag shown on the right side of second row. -* **units** - Unit aliases. - + **id** - Unit ID. - + **label** - Unit label shown on the right side of six sixth row. +- **id** - System ID. +- **label** - System label shown on the left side of second row. +- **led** - Optional LED color for the whole system. By default the LED is _green_. +- **talkgroups** - Talkgroups for the system. + - **id** - Talkgroup ID. + - **label** - Talkgroup label shown on the left side of third row. + - **name** - Talkgroup name shown on the fouth row. + - **patches** - Array of talkgroup ID to include in this talkgroup. + - **tag** - Talkgroup tag shown on the right side of second row. +- **units** - Unit aliases. + - **id** - Unit ID. + - **label** - Unit label shown on the right side of six sixth row. ## Load a system from RadioReference.com or talkgroups from Trunk Recorder CSV file @@ -669,8 +654,8 @@ You can choose any `system_id` you want to refer to this system. If you choose a See examples in the installation documents: -* [Install from the Docker Image](./install-docker.md) -* [Install from the GitHub Repository](./install-github.md) +- [Install from the Docker Image](./install-docker.md) +- [Install from the GitHub Repository](./install-github.md) > Note that [Rdio Scanner](https://github.com/chuot/rdio-scanner) has been designed to resemble old school radio scanners where each talkgroup has its own toggle button on the **SELECT TG** panel. Loading too many systems/talkgroups will make the web application very slow. Depending on your use case, you may want to have no more than 400 talkgroups. diff --git a/docs/install-docker.md b/docs/install-docker.md index e3cfd40..97aece9 100644 --- a/docs/install-docker.md +++ b/docs/install-docker.md @@ -6,19 +6,19 @@ The [Rdio Scanner Docker Image](https://hub.docker.com/r/chuot/rdio-scanner) is Do `docker pull chuot/rdio-scanner:latest` like this: -``` bash +```bash $ docker pull chuot/rdio-scanner:latest latest: Pulling from chuot/rdio-scanner -cbdbe7a5bc2a: Already exists -bd07af9ed1a4: Pull complete -3556ccf180b2: Pull complete -089d4748da74: Pull complete -d461af9c0a5f: Pull complete -b13fa0022c33: Pull complete -af86cf4eebc5: Pull complete -dbbf263c046e: Pull complete -adf8257900e9: Pull complete -9716c9a06d21: Pull complete +cbdbe7a5bc2a: Already exists +bd07af9ed1a4: Pull complete +3556ccf180b2: Pull complete +089d4748da74: Pull complete +d461af9c0a5f: Pull complete +b13fa0022c33: Pull complete +af86cf4eebc5: Pull complete +dbbf263c046e: Pull complete +adf8257900e9: Pull complete +9716c9a06d21: Pull complete Digest: sha256:1264d0a9dc682e2057d7d6b89fee98164212fc0763ad3f40eb3193da75c64c75 Status: Downloaded newer image for chuot/rdio-scanner:latest docker.io/chuot/rdio-scanner:latest @@ -28,7 +28,7 @@ docker.io/chuot/rdio-scanner:latest We now need to initialize the config.json file and the database. But first we need to determine where these files will be located on your host. We will use `~/.rdio-scanner` in the following example, but you can choose any location you want. We will then pass this location via the `--volume` option. -``` bash +```bash $ mkdir ~/.rdio-scanner $ docker run -it --rm --user $(id -u):$(id -g) --volume ~/.rdio-scanner:/app/data chuot/rdio-scanner:latest init @@ -47,7 +47,7 @@ The `config.json` is preloaded with 2 systems, which you probably don't want. Th If your [Rdio Scanner](https://github.com/chuot/rdio-scanner) is already running, be sure to restart it every time you make changes to the `config.json` file. -``` bash +```bash $ docker restart rdio-scanner rdio-scanner ``` @@ -60,7 +60,7 @@ First download the CSV file for all talkgroups from a trunked system. Then move You can choose any `system_id` you want to refer to this system. If you choose an existing `system_id` in `config.json`, you will replace it with the new one. -``` bash +```bash $ mv ~/Downloads/trs_tg_7537.csv ~/.rdio-scanner $ docker run -it --rm chuot/rdio-scanner:latest load-rrdb @@ -74,7 +74,7 @@ $ rm ~/.rdio-scanner/trs_tg_7537.csv # 5. Load talkgroups from a Trunk Recorder CSV file (optional) -``` bash +```bash $ mv ~/Downloads/tgs.csv ~/.rdio-scanner $ docker run -it --rm chuot/rdio-scanner:latest load-tr @@ -92,8 +92,8 @@ By default, [Rdio Scanner](https://github.com/chuot/rdio-scanner) runs on port 3 However, we will stick to port 3000 in this example. -``` bash -$ docker run --detach --name rdio-scanner --publish 3000:3000 --restart always --user $(id -u):$(id -g) --volume ~/.rdio-scanner:/app/data chuot/rdio-scanner:latest +```bash +$ docker run --detach --env TZ=America/Toronto --name rdio-scanner --publish 3000:3000 --restart always --user $(id -u):$(id -g) --volume ~/.rdio-scanner:/app/data chuot/rdio-scanner:latest 520cdbf51fca11d8bacea12d81245f1cb4d984f80d2be2e3039727b59533a6a9 $ docker logs rdio-scanner @@ -104,7 +104,7 @@ Server is running at http://0.0.0.0:3000 Even if your instance of [Rdio Scanner](https://github.com/chuot/rdio-scanner) is preconfigured with a new random UUID for your API keys, you may want to generate others. The following command will generate a new UUID which you can copy/paste into the `config.json` file. -``` bash +```bash $ docker run -it --rm chuot/rdio-scanner:latest random-uuid aaf366c5-fa20-40a7-b617-dc7587c792fd @@ -120,7 +120,7 @@ dc50e0d6-c635-436b-bb70-b46d99f12df9 If a newer version of [Rdio Scanner Docker Image](https://hub.docker.com/r/chuot/rdio-scanner) is released, you can easily update it like this: -``` bash +```bash $ docker pull chuot/rdio-scanner:latest ... diff --git a/docs/install-github.md b/docs/install-github.md index 3cf219d..2f74ee5 100644 --- a/docs/install-github.md +++ b/docs/install-github.md @@ -6,15 +6,15 @@ Sometimes you don't want to run a Docker image, so you can follow these instruct Make sure your operating system is **fully updated** and that the prerequisites are installed. Also make sure that you have enough memory to compile the Angular web application. -* [build-essential](https://packages.ubuntu.com/search?keywords=build-essential) on *Ubuntu* or its equivalent specific to your Linux distribution -* [curl](https://git-scm.com/downloads) -* [ffmpeg](https://www.ffmpeg.org/) -* [git](https://git-scm.com/downloads) -* [Node.js LTS or higher](https://nodejs.org/en/download/) (get it [here](https://github.com/nodesource/distributions) if your distro doesn't have the required package) -* [npm](https://www.npmjs.com/get-npm) -* [SQLite 3](https://www.sqlite.org/download.html) +- [build-essential](https://packages.ubuntu.com/search?keywords=build-essential) on _Ubuntu_ or its equivalent specific to your Linux distribution +- [curl](https://git-scm.com/downloads) +- [ffmpeg](https://www.ffmpeg.org/) +- [git](https://git-scm.com/downloads) +- [Node.js LTS or higher](https://nodejs.org/en/download/) (get it [here](https://github.com/nodesource/distributions) if your distro doesn't have the required package) +- [npm](https://www.npmjs.com/get-npm) +- [SQLite 3](https://www.sqlite.org/download.html) -``` bash +```bash $ which curl ffmpeg gcc g++ git make node npm sqlite3 /usr/bin/curl /usr/bin/ffmpeg @@ -42,12 +42,12 @@ Resolving deltas: 100% (752/752), done. # 3. Database and configuration initialization -Note that the first time [Rdio Scanner](https://github.com/chuot/rdio-scanner) will start, it will take longer as it has to install required node modules and build the progressive web application. +Note that the first time [Rdio Scanner](https://github.com/chuot/rdio-scanner) will start, it will take longer as it has to install required node modules and build the progressive web application. -``` bash +```bash $ cd rdio-scanner -$ node run init +$ node run init Installing node modules... done Building client app... done Configuration and database initialized @@ -80,7 +80,7 @@ First download the CSV file for all talkgroups from a trunked system. Here we wi You can choose any `system_id` you want to refer to this system. If you choose an existing `system_id` in `config.json`, you will replace it with the new one. -``` bash +```bash $ node server load-rrdb USAGE: load-rrdb @@ -90,7 +90,7 @@ File /home/radio/Downloads/trs_tg_7537.csv imported successfully into system 11 # 5. Load talkgroups from a Trunk Recorder CSV file (optional) -``` bash +```bash $ node server load-tr USAGE: load-tr @@ -100,7 +100,7 @@ File /home/radio/Downloads/tgs.csv imported successfully into system 12 # 6. Start Rdio Scanner -``` bash +```bash $ node run server Server is running at http://0.0.0.0:3000 ``` @@ -109,7 +109,7 @@ Server is running at http://0.0.0.0:3000 Even if your instance of [Rdio Scanner](https://github.com/chuot/rdio-scanner) is preconfigured with a new random UUID for your API keys, you may want to generate others. The following command will generate a new UUID which you can copy/paste into the `server/config.json` file. -``` bash +```bash $ node server random-uuid aaf366c5-fa20-40a7-b617-dc7587c792fd @@ -125,7 +125,7 @@ dc50e0d6-c635-436b-bb70-b46d99f12df9 If new commits have been pushed to the [Rdio Scanner GitHub repository](https://github.com/chuot/rdio-scanner), you can easily update like this: -``` bash +```bash $ node update Pulling new version from github... done Updating node modules... done diff --git a/docs/webapp.md b/docs/webapp.md index 1c1478c..6f721d8 100644 --- a/docs/webapp.md +++ b/docs/webapp.md @@ -10,7 +10,7 @@ The LED is illuminated when there is active audio and it blinks if audio is paused. -The color is *green* by default, but can be customized in `config.json` by the system or by the talkgroup. +The color is _green_ by default, but can be customized in `config.json` by the system or by the talkgroup. ### Display Area @@ -28,7 +28,7 @@ The color is *green* by default, but can be customized in `config.json` by the s - Fourth row - **YMX Security Dispatch** - Talkgroup full name - Fifth row - - **F: 774 031 250 Hz** - Call frequency on which the audio file was recorded + - **F: 774 031 250 Hz** - Call frequency on which the audio file was recorded. The name of the audio file will be displayed instead. - **TGID: 56204** - Talkgroup ID - Sixth row - **E: 0** - Recorder's decoding errors @@ -42,17 +42,17 @@ The color is *green* by default, but can be customized in `config.json` by the s ![Control Area](./images/rdio_scanner_control.png?raw=true "Control Area") -| Button | Description | -| --- | --- | -| ![LIVE FEED](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED") | When active, incoming audio will be played according to the active systems/talkgroups on the **SELECT TG** panel. The LED can also be *yellow* if playing audio from the archive while **LIVE FEED** is inactive, this is called **offline playback mode**. Disabling **LIVE FEED** will also stop any playing audio and will clear the listening queue. | -| ![HOLD SYS](./images/rdio_scanner_control_holdsys.png?raw=true "HOLD SYS") | Temporarily maintain the current system in live feed mode. | -| ![HOLD TG](./images/rdio_scanner_control_holdtg.png?raw=true "HOLD TG") | Temporarily maintain the current talkgroup in live feed mode. | -| ![REPLAY LAST](./images/rdio_scanner_control_replay.png?raw=true "REPLAY LAST") | Replay the current audio from the beginning or the previous one if there is none active. | -| ![SKIP NEXT](./images/rdio_scanner_control_skip.png?raw=true "SKIP NEXT") | Stop the audio currently playing and play the next one in the listening queue. This is useful when playing boring or encrypted sound. | -| ![AVOID](./images/rdio_scanner_control_avoid.png?raw=true "AVOID") | Activate and deactivate the talkgroup from the current or previous audio. | -| ![SEARCH CALL](./images/rdio_scanner_control_search.png?raw=true "SEARCH CALL") | Display the archived audio panel. | -| ![PAUSE](./images/rdio_scanner_control_pause.png?raw=true "PAUSE") | Stop playing queue audio. Useful if you have to answer the phone without losing what's queued up for playing. | -| ![SELECT TG](./images/rdio_scanner_control_select.png?raw=true "SELECT TG") | Display the systems/talkgroups selection panel where you decide which audio you want to listen to in **LIVE FEED* (not in offline playback mode). | +| Button | Description | +| ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![LIVE FEED](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED") | When active, incoming audio will be played according to the active systems/talkgroups on the **SELECT TG** panel. The LED can also be _yellow_ if playing audio from the archive while **LIVE FEED** is inactive, this is called **offline playback mode**. Disabling **LIVE FEED** will also stop any playing audio and will clear the listening queue. | +| ![HOLD SYS](./images/rdio_scanner_control_holdsys.png?raw=true "HOLD SYS") | Temporarily maintain the current system in live feed mode. | +| ![HOLD TG](./images/rdio_scanner_control_holdtg.png?raw=true "HOLD TG") | Temporarily maintain the current talkgroup in live feed mode. | +| ![REPLAY LAST](./images/rdio_scanner_control_replay.png?raw=true "REPLAY LAST") | Replay the current audio from the beginning or the previous one if there is none active. | +| ![SKIP NEXT](./images/rdio_scanner_control_skip.png?raw=true "SKIP NEXT") | Stop the audio currently playing and play the next one in the listening queue. This is useful when playing boring or encrypted sound. | +| ![AVOID](./images/rdio_scanner_control_avoid.png?raw=true "AVOID") | Activate and deactivate the talkgroup from the current or previous audio. | +| ![SEARCH CALL](./images/rdio_scanner_control_search.png?raw=true "SEARCH CALL") | Display the archived audio panel. | +| ![PAUSE](./images/rdio_scanner_control_pause.png?raw=true "PAUSE") | Stop playing queue audio. Useful if you have to answer the phone without losing what's queued up for playing. | +| ![SELECT TG](./images/rdio_scanner_control_select.png?raw=true "SELECT TG") | Display the systems/talkgroups selection panel where you decide which audio you want to listen to in \*_LIVE FEED_ (not in offline playback mode). | ### Systems/Talkgroups selection panel @@ -68,13 +68,13 @@ Here you select which systems/talkgroups/groups you want to listen to while in * The first section concerns group selection. This section can be disabled from the configuration file, but is active by default. Each button has three states: -| Button | State | -| --- | --- | -| ![ON](./images/rdio_scanner_select_group_on.png?raw=true "ON") | All talkgroups, from any systems, that correspond to this group are actives. If you press it while it is active, it will make these talkgroups inactives. | -| ![OFF](./images/rdio_scanner_select_group_off.png?raw=true "OFF") | All talkgroups, from any systems, that correspond to this group are inactives. If you press it while it is inactive, it will make these talkgroups actives. | +| Button | State | +| ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![ON](./images/rdio_scanner_select_group_on.png?raw=true "ON") | All talkgroups, from any systems, that correspond to this group are actives. If you press it while it is active, it will make these talkgroups inactives. | +| ![OFF](./images/rdio_scanner_select_group_off.png?raw=true "OFF") | All talkgroups, from any systems, that correspond to this group are inactives. If you press it while it is inactive, it will make these talkgroups actives. | | ![PARTIAL](./images/rdio_scanner_select_group_partial.png?raw=true "PARTIAL") | Some talkgroups, from any systems, that correspond to this group are actives and some are inactives. If you press it while it is active, it will make all these talkgroups active. | -| ![ALL OFF](./images/rdio_scanner_select_alloff.png?raw=true "PARTIAL") | Make every groups inactives, thereby disabling all talkgroups. | -| ![ALL ON](./images/rdio_scanner_select_allon.png?raw=true "PARTIAL") | Make every groups active, thereby enaabling all talkgroups. | +| ![ALL OFF](./images/rdio_scanner_select_alloff.png?raw=true "PARTIAL") | Make every groups inactives, thereby disabling all talkgroups. | +| ![ALL ON](./images/rdio_scanner_select_allon.png?raw=true "PARTIAL") | Make every groups active, thereby enaabling all talkgroups. | #### Systems/Talkgroups selection section @@ -82,12 +82,12 @@ The first section concerns group selection. This section can be disabled from th This is much like the group selection section, but for each system. There is also just states for each button: -| Button | State | -| --- | --- | -| ![ON](./images/rdio_scanner_select_system_on.png?raw=true "ON") | The talkgroup from this system is active. If you press it while it is active, it will make the talkgroup inactive. | -| ![OFF](./images/rdio_scanner_select_system_off.png?raw=true "OFF") | The talkgroup from this system is inactive. If you press it while it is inactive, it will make the talkgroup active. | -| ![ALL OFF](./images/rdio_scanner_select_alloff.png?raw=true "PARTIAL") | Make inactive every talkgroups from this system. | -| ![ALL ON](./images/rdio_scanner_select_allon.png?raw=true "PARTIAL") | Make active every talkgroups from this system. | +| Button | State | +| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| ![ON](./images/rdio_scanner_select_system_on.png?raw=true "ON") | The talkgroup from this system is active. If you press it while it is active, it will make the talkgroup inactive. | +| ![OFF](./images/rdio_scanner_select_system_off.png?raw=true "OFF") | The talkgroup from this system is inactive. If you press it while it is inactive, it will make the talkgroup active. | +| ![ALL OFF](./images/rdio_scanner_select_alloff.png?raw=true "PARTIAL") | Make inactive every talkgroups from this system. | +| ![ALL ON](./images/rdio_scanner_select_allon.png?raw=true "PARTIAL") | Make active every talkgroups from this system. | ### Archived audio panel @@ -99,12 +99,12 @@ This is much like the group selection section, but for each system. There is als This section presents the list of archived audio files. Depending on the **LIVE FEED** mode you are at, the replay function behaves differently: -| Mode | Function | -| --- | --- | -| ![LIVE FEED ON](./images/rdio_scanner_control_livefeed.png?raw=true "LIVE FEED ON") | while **LIVE FEED** is active, press the **PLAY** button to play this audio file. If another audio file is playing, it will be stopped and the one you just selected will be played instead. After playback finishes, the listening queue will resume as normal. | +| Mode | Function | +| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![LIVE FEED ON](./images/rdio_scanner_control_livefeed.png?raw=true "LIVE FEED ON") | while **LIVE FEED** is active, press the **PLAY** button to play this audio file. If another audio file is playing, it will be stopped and the one you just selected will be played instead. After playback finishes, the listening queue will resume as normal. | | ![LIVE FEED PARTIAL](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED PARTIAL") | This is the **offline playback mode** which can be activated only if **LIVE FEED** is inactive. Press the **PLAY** button to play this audio file. After playback is finishes, the next audio file from in list is played. While the audio is playing, pressing the **STOP** button will cancel the offline playback mode. | -At the bottom right of this section is the *paginator* to browse the whole database. This *paginator* is disabled while in offline playback mode. +At the bottom right of this section is the _paginator_ to browse the whole database. This _paginator_ is disabled while in offline playback mode. > Note that offline playback mode always requires your web application to be online. It is called like that because it plays archived audio files. @@ -120,4 +120,4 @@ There is also a small slider that changes the **PLAY** buttons to **DOWNLOAD** b ### Finally -Happy Rdio scanning ! \ No newline at end of file +Happy Rdio scanning !