Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 23 additions & 16 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ env:
CCACHE_DIR: /ccache
FLUTTER_VERSION: '3.16.9'
FLUTTER_CHANNEL: 'stable'
MELOS_VERSION: '^6.1.0'
COVERDE_VERSION: '^0.2.0+2'
COVERAGE_VERSION: '^1.8.0'

jobs:
build-firmware:
Expand Down Expand Up @@ -192,7 +195,7 @@ jobs:
defaults:
run:
working-directory:
frontend
dart
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -205,10 +208,11 @@ jobs:
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true

- run: flutter pub get
- run: dart pub global activate melos ${{ env.MELOS_VERSION }}
- run: dart run melos bootstrap

- name: Generate code
run: flutter pub run build_runner build
run: dart run melos run generate_code

- name: Analyze
run: flutter analyze
Expand All @@ -218,7 +222,7 @@ jobs:
defaults:
run:
working-directory:
frontend
dart
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -231,17 +235,18 @@ jobs:
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true

- run: flutter pub get
- run: dart pub global activate melos ${{ env.MELOS_VERSION }}
- run: dart run melos bootstrap

- name: Format
run: dart format -o none --set-exit-if-changed lib test
run: dart format -o none --set-exit-if-changed .

flutter-test:
runs-on: ubuntu-latest
defaults:
run:
working-directory:
frontend
dart
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -254,25 +259,27 @@ jobs:
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true

- run: flutter pub get
- run: dart pub global activate melos ${{ env.MELOS_VERSION }}
- run: dart pub global activate coverde ${{ env.COVERDE_VERSION }}
- run: dart pub global activate coverage ${{ env.COVERAGE_VERSION }}
- run: melos bootstrap

- name: Generate code
run: flutter pub run build_runner build
run: melos run generate_code

- name: Test
run: flutter test --coverage --exclude-tags=api
run: |
dart run melos run test
dart run melos run test-dart

- name: Coverage clean-up
run: >
flutter pub run
remove_from_coverage --remove="\.g\.dart$"
--file=coverage/lcov.info
run: dart run melos run coverage

- name: Coveralls
uses: coverallsapp/github-action@master
with:
path-to-lcov: frontend/coverage/lcov.info
base-path: frontend
path-to-lcov: dart/coverage/filtered.lcov.info
base-path: dart
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel: true
flag-name: "flutter"
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/strictdoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
branches: [ master ]

env:
FLUTTER_VERSION: '3.16.0'
FLUTTER_VERSION: '3.16.9'
FLUTTER_CHANNEL: 'stable'

jobs:
Expand Down Expand Up @@ -54,7 +54,7 @@ jobs:
defaults:
run:
working-directory:
frontend
dart/frontend
steps:
- uses: actions/checkout@v3

Expand All @@ -79,7 +79,7 @@ jobs:
- uses: actions/upload-artifact@v3
with:
name: frontend-docs
path: frontend/doc/api
path: dart/frontend/doc/api
retention-days: 5

deploy:
Expand Down
4 changes: 2 additions & 2 deletions .licenserc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ header:
- '**/*.pbserver.dart'
- '**/*.pb-c.c'
- '**/*.pb-c.h'
- 'frontend/.dart_tool/**'
- 'frontend/linux/flutter/**'
- '**/.dart_tool/**'
- '**/linux/flutter/**'
# Test support files are usually derivatives of third-party library code,
# which is licensed under some other license.
- 'test/support/**'
Expand Down
11 changes: 11 additions & 0 deletions dart/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# https://dart.dev/guides/libraries/private-files
# Created by `dart pub`
.dart_tool/

.idea
*.iml

# https://melos.invertase.dev/getting-started#configure-the-workspace
pubspec_overrides.yaml

coverage
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:logging/logging.dart';
import 'package:shrapnel/main.dart';
import 'package:shrapnel/midi_mapping/model/models.dart';
import 'package:shrapnel_common/api_data/midi_api_message.dart';
import 'package:shrapnel_test_lib/shrapnel_test_lib.dart';

import '../test/firmware_api_test/util.dart';
import '../test/home_page_object.dart';
import '../test/util.dart';

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -20,49 +20,19 @@
import 'dart:async';

import 'package:async/async.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:logging/logging.dart';
import 'package:rxdart/rxdart.dart';

import '../audio_events.dart';
import 'package:shrapnel_common/api_data/api_message.dart';
import 'package:shrapnel_common/api_data/generated/shrapnel.pb.dart'
as shrapnel_pb;
import 'package:shrapnel_common/api_data/proto_extension.dart';
import '../core/message_transport.dart';
import '../core/stream_extensions.dart';
import '../midi_mapping/model/models.dart';
import '../parameter.dart';
import '../presets/model/presets_client.dart';
import '../presets/model/selected_preset_client.dart';
import '../robust_websocket.dart';
import 'generated/shrapnel.pb.dart' as shrapnel_pb;
import 'proto_extension.dart';

part 'api_websocket.freezed.dart';

final _log = Logger('api_websocket');

@freezed
sealed class ApiMessage with _$ApiMessage {
const factory ApiMessage.audioEvent({required AudioEventMessage message}) =
ApiMessageAudioEvent;

const factory ApiMessage.parameterInput({
required ParameterServiceInputMessage message,
}) = ApiMessageParameterInput;

const factory ApiMessage.parameterOutput({
required ParameterServiceOutputMessage message,
}) = ApiMessageParameterOutput;

const factory ApiMessage.midiMapping({required MidiApiMessage message}) =
ApiMessageMidiMapping;

const factory ApiMessage.presets({required PresetsMessage message}) =
ApiMessagePresets;

const factory ApiMessage.selectedPreset({
required SelectedPresetMessage message,
}) = ApiMessageSelectedPreset;
}

class ApiWebsocket
implements ReconnectingMessageTransport<ApiMessage, ApiMessage> {
ApiWebsocket({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,13 @@
*/

import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:logging/logging.dart';
import 'package:pausable_timer/pausable_timer.dart';

part 'audio_events.freezed.dart';
import 'package:shrapnel_common/api_data/audio_event_message.dart';

final _log = Logger('shrapnel.audio_events');

@freezed
sealed class AudioEventMessage with _$AudioEventMessage {
factory AudioEventMessage.inputClipped() = AudioEventMessageInputClipped;

factory AudioEventMessage.outputClipped() = AudioEventMessageOutputClipped;
}

class AudioClippingService extends ChangeNotifier {
AudioClippingService({required Stream<AudioEventMessage> stream}) {
_outputClippingTimer = PausableTimer(
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 2 additions & 0 deletions frontend/lib/main.dart → dart/frontend/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
import 'package:rxdart/rxdart.dart';
import 'package:shrapnel_common/api_data/api_message.dart';
import 'package:shrapnel_common/api_data/parameter_message.dart';

import 'api/api_websocket.dart';
import 'audio_events.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@
import 'dart:async';

import 'package:logging/logging.dart';
import 'package:shrapnel_common/api_data/midi_api_message.dart';
import 'package:state_notifier/state_notifier.dart';

import 'midi_learn_state.dart';
import 'models.dart';
import 'service.dart';

final _log = Logger('shrapnel.midi_mapping.model.midi_learn');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import 'package:freezed_annotation/freezed_annotation.dart';

import 'models.dart';
import 'package:shrapnel_common/api_data/midi_api_message.dart';

part 'midi_learn_state.freezed.dart';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ import 'dart:collection';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:rxdart/rxdart.dart';
import 'package:shrapnel_common/api_data/api_message.dart';
import 'package:shrapnel_common/api_data/midi_api_message.dart';

import '../../api/api_websocket.dart';
import '../../core/message_transport.dart';
import '../../core/stream_extensions.dart';
import '../model/models.dart';

final _log = Logger('midi_mapping_service');

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'package:shrapnel_common/api_data/midi_api_message.dart';
import '../../parameter.dart';
import '../../presets/model/presets.dart';
import '../model/models.dart';
import '../model/service.dart';

const _requiredValueString = 'A value must be selected';
Expand Down
File renamed without changes.
22 changes: 2 additions & 20 deletions frontend/lib/parameter.dart → dart/frontend/lib/parameter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import 'package:flutter/widgets.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:logging/logging.dart';
import 'package:rxdart/rxdart.dart';
import 'package:shrapnel_common/api_data/api_message.dart';
import 'package:shrapnel_common/api_data/parameter_message.dart';

import 'api/api_websocket.dart';
import 'core/message_transport.dart';
Expand Down Expand Up @@ -70,26 +72,6 @@ class AudioParameterDoubleModel {
ValueStream<double> get value => _controller;
}

@freezed
sealed class ParameterServiceOutputMessage
with _$ParameterServiceOutputMessage {
factory ParameterServiceOutputMessage.requestInitialisation() =
ParameterServiceOutputMessageRequestInitialisation;

factory ParameterServiceOutputMessage.parameterUpdate({
required String id,
required double value,
}) = ParameterServiceOutputMessageParameterUpdate;
}

@freezed
sealed class ParameterServiceInputMessage with _$ParameterServiceInputMessage {
factory ParameterServiceInputMessage.parameterUpdate({
required String id,
required double value,
}) = ParameterServiceInputMessageParameterUpdate;
}

class ParameterTransport
implements
ReconnectingMessageTransport<ParameterServiceOutputMessage,
Expand Down
File renamed without changes.
Loading