From 1ec2a550edc1118ca6851c369dfa59f47b2819d1 Mon Sep 17 00:00:00 2001 From: Vincent Hagen Date: Sat, 19 Aug 2023 15:28:31 +0200 Subject: [PATCH] Add support for Deco and Events --- package.json | 2 +- src/redux/dive/types.ts | 4 ++-- .../divecomputer/descriptor/selectors.ts | 7 +++--- src/services/parsing/diveSampleParser.ts | 22 ++++++++++++++++--- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 446717c..9a71064 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "dive-downloader", "description": "Download dives from any divecomputer with an electron app", "productName": "dive-downloader", - "version": "0.1.6", + "version": "0.2.0", "main": ".webpack/main", "scripts": { "lint": "eslint src --ext .js,.jsx,.ts,.tsx", diff --git a/src/redux/dive/types.ts b/src/redux/dive/types.ts index 0635589..334f5f5 100644 --- a/src/redux/dive/types.ts +++ b/src/redux/dive/types.ts @@ -26,8 +26,8 @@ export interface ISample { Heartbeat?: number; Gasmix?: number; Pressure?: { Pressure: number; Tank: number }[]; - Deco?: { depth: number; time: number; type: number }; - Events?: { type: SampleEventType; flags: number; value: number }[]; + Deco?: { Depth: number; Time: number; Type: number }; + Events?: { Type: SampleEventType; Flags: number; Value: number }[]; } export interface Dive { diff --git a/src/redux/divecomputer/descriptor/selectors.ts b/src/redux/divecomputer/descriptor/selectors.ts index fd9aa98..3037ced 100644 --- a/src/redux/divecomputer/descriptor/selectors.ts +++ b/src/redux/divecomputer/descriptor/selectors.ts @@ -2,9 +2,10 @@ import { createSelector } from 'reselect'; import { compareDescriptor, descriptorId } from './helpers'; import { DescriptorState } from './types'; -export const allDescriptorsSelector = (state: { - descriptors: DescriptorState; -}) => state.descriptors.all.slice().sort(compareDescriptor); +export const allDescriptorsSelector = createSelector( + (state: { descriptors: DescriptorState }) => state.descriptors.all, + (descriptors) => descriptors.slice().sort(compareDescriptor) +); export const selectedDescriptorSelector = (state: { descriptors: DescriptorState; diff --git a/src/services/parsing/diveSampleParser.ts b/src/services/parsing/diveSampleParser.ts index 3fe02f4..fe1d973 100644 --- a/src/services/parsing/diveSampleParser.ts +++ b/src/services/parsing/diveSampleParser.ts @@ -1,4 +1,4 @@ -import { Sample, SampleType } from 'libdivecomputerjs'; +import { Sample, SampleEventType, SampleType } from 'libdivecomputerjs'; import { ISample } from '../../redux/dive'; interface ISampleAggregates { @@ -117,11 +117,18 @@ export default class DiveSampleParser { this.addNumerical(sample.type, sample.value); break; case SampleType.Deco: - this.workingSample.Deco = sample.value; + this.workingSample.Deco = { + Depth: sample.value.depth, + Time: sample.value.time, + Type: sample.value.type + }; break; case SampleType.Pressure: this.addPressure(sample.value); break; + case SampleType.Event: + this.addEvent(sample.value.type, sample.value.value, sample.value.flags); + break; default: } } @@ -177,11 +184,20 @@ export default class DiveSampleParser { this.aggregates.tanks[pressureValue.tank] = tankValue; } - private addNumerical(sampleType: NumericalSamplesTypes, value: number) { + private addNumerical(sampleType: NumericalSamplesTypes, value: number): void { const fieldName = DiveSampleParser.SampleTypeToFieldName(sampleType); this.workingSample[fieldName] = value; } + private addEvent(type: SampleEventType, value: number, flags: number): void { + this.workingSample.Events = this.workingSample.Events ?? []; + this.workingSample.Events.push({ + Type: type, + Value: value, + Flags: flags + }) + } + public finalize(): void { this.samples.push(this.workingSample); this.isFinalized = true;