Define a dirwatch to monitor new audio files from any directory.

@for (dirwatch of dirwatches; track dirwatch; let i = $index) { drag_indicator {{ dirwatch.value.directory || 'NewDirwatch' }} @if (dirwatch.invalid) { error }

Disabled
Disable the dirwatch.

Delete After
Delete the audio file after being ingested. If activated, all pre-existing audio files will be ingested and deleted as soon as the server starts. If not activated, pre-existing audio files are neither ingested nor deleted.

Type
Dirwatch type defines how the metadata are obtained.

- Default - Extract the metadata from a custom mask.
- DSDPlus Fast Lane - Extract the metadata from the file path.
- SDR Trunk - Extract the metadata from the MP3 tags defined on the SDR Trunk's aliases tab.
- Trunk Recorder - Extract the metadata from the json file.

Default DSDPlus Fast Lane SDR Trunk Trunk Recorder

Directory
Path of the @switch (dirwatch.get('type')?.value) { @case ('dsdplus') { Record, 1R-Record or VC-Record } @case ('sdr-trunk') { Recordings } @case ('trunk-recorder') { captureDir } @default { local } } directory to monitor for file ingestion. Note that dirwatch is not compatible with networked disk.

@if (dirwatch.get('directory')?.hasError('required')) { Directory is required } @if (dirwatch.get('directory')?.hasError('duplicate')) { Directory is already defined } @if (dirwatch.get('directory')?.hasError('network')) { Incompatible network folder }
@if (['default','dsdplus','trunk-recorder'].includes(dirwatch.get('type')?.value)) {

Extension
The audio call extension to monitor without the period. Ex.: "mp3", "wav".

@if (dirwatch.get('extension')?.hasError('invalid')) { Invalid extension }
} @if (['default','dsdplus'].includes(dirwatch.get('type')?.value)) {

System
System to where the audio files should go.

@for (system of systems; track system) { @if (system.value.id > 0) { {{ system.value.label }} } } @if (dirwatch.get('systemId')?.hasError('required')) { System is required }
} @if (['default','dsdplus'].includes(dirwatch.get('type')?.value)) {

Site
Site to where the audio files should go.

@for (site of sites[dirwatch.value.systemId] || []; track site) { @if (site.value.id > 0) { {{ site.value.label }} } }
} @if (['default','dsdplus'].includes(dirwatch.get('type')?.value)) {

Talkgroup
Talkgroup to where the audio files should go.

@for (talkgroup of talkgroups[dirwatch.value.systemId] || []; track talkgroup) { @if (talkgroup.value.id > 0) { {{ talkgroup.value.label }} } } @if (dirwatch.get('talkgroupId')?.hasError('required')) { Talkgroup is required }
} @if (['default'].includes(dirwatch.get('type')?.value)) {

Mask
Some metadata can be extracted from the file name of the audio file using specific META tags. Possible META tags:

- #DATE - extract the date like 20201231 (YYYYMMMDD), 2020-12-31 (YYYY-MM-DD) or 2020_12_31 (YYYY_MM_DD).
- #GROUP - extract the group label.
- #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.
- #SITE - extract the site id like 1.
- #SITELBL - extract the site label.
- #SYS - extract the system id like 11.
- #SYSLBL - extract the system label.
- #TAG - extract the tag label.
- #TG - extract the talkgroup id like 1457 in decimal format.
- #TGAFS - extract the talkgroup id like 11-061 in AFS (agency-fleet-subfleet) format.
- #TGHZ - extract the frequency in hertz like 119100000 and set the talkgroup id to 119100.
- #TGKHZ - extract the frequency in kilohertz like 119100.000 or 119100 and set the talkgroup id to 119100.
- #TGLBL - extract the talkgroup label.
- #TGMHZ - extract the frequency in megahertz like 119.100000 or 119 and set the talkgroup id to 119100.
- #TIME - extract the local time like 0853439 (HHMMSS), 08-34-39 (HH-MM-SS) or 08:34:39 (HH:MM:SS).
- #UNIT - extract the unit id like 4424001.
- #UNITLBL - extract the unit label. Also requires #UNIT.
- #ZTIME - extract the zulu time like 0453439 (HHMMSS), 08-34-39 (HH-MM-SS) or 04:34:39 (HH:MM:SS).

Example: cymx_#TG_#DATE_#TIME_#HZ @if (dirwatch.get('mask')?.hasError('invalid')) { Invalid mask }
} @if (['default'].includes(dirwatch.get('type')?.value)) {

Frequency
Fake frequency in hertz displayed on the main screen.

@if (dirwatch.get('frequency')?.errors) { Invalid frequency }
} @if (['default'].includes(dirwatch.get('type')?.value)) {

Delay
Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a delay value in milliseconds for the audio file to settle before ingesting it.

@if (dirwatch.get('delay')?.hasError('min')) { Delay value cannot be less than 2000 milliseconds. }
}
}