From 5e2af39af0c930b99d2460cb106dd21c11adba64 Mon Sep 17 00:00:00 2001
From: uvok
Date: Thu, 31 Jul 2025 12:54:38 +0200
Subject: Move connections to package
---
lib/model/connection/device_connection.dart | 27 +++++
.../flutter_blue_plus_device_connection.dart | 112 +++++++++++++++++++++
lib/model/connection/mock_device_connection.dart | 33 ++++++
lib/model/device_connection.dart | 27 -----
lib/model/device_connection_factory.dart | 6 +-
lib/model/flutter_blue_plus_device_connection.dart | 112 ---------------------
lib/model/mock_device_connection.dart | 33 ------
lib/widgets/device_details.dart | 2 +-
lib/widgets/scan_page.dart | 2 +-
9 files changed, 177 insertions(+), 177 deletions(-)
create mode 100644 lib/model/connection/device_connection.dart
create mode 100644 lib/model/connection/flutter_blue_plus_device_connection.dart
create mode 100644 lib/model/connection/mock_device_connection.dart
delete mode 100644 lib/model/device_connection.dart
delete mode 100644 lib/model/flutter_blue_plus_device_connection.dart
delete mode 100644 lib/model/mock_device_connection.dart
(limited to 'lib')
diff --git a/lib/model/connection/device_connection.dart b/lib/model/connection/device_connection.dart
new file mode 100644
index 0000000..81bcbfd
--- /dev/null
+++ b/lib/model/connection/device_connection.dart
@@ -0,0 +1,27 @@
+// Copyright (C) 2025, uvok cheetah
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+
+enum ConnectionStatus { disconnected, connected, error }
+
+abstract class DeviceConnection {
+ Future connect();
+ Future disconnect();
+ ConnectionStatus get status;
+
+ // Future read(String endpoint);
+ // Future write(String endpoint, Uint8List data);
+ // Stream subscribe(String endpoint);
+}
diff --git a/lib/model/connection/flutter_blue_plus_device_connection.dart b/lib/model/connection/flutter_blue_plus_device_connection.dart
new file mode 100644
index 0000000..99d0711
--- /dev/null
+++ b/lib/model/connection/flutter_blue_plus_device_connection.dart
@@ -0,0 +1,112 @@
+// Copyright (C) 2025, uvok cheetah
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+import 'dart:async';
+
+import 'package:flutter_blue_plus/flutter_blue_plus.dart';
+import 'package:logger/logger.dart';
+import 'package:uvok_epaper_badge/first_where_ext.dart';
+import 'package:uvok_epaper_badge/model/connection/device_connection.dart';
+import 'package:uvok_epaper_badge/model/device/flutter_blue_plus_device.dart';
+
+var logger = Logger();
+
+class FlutterBluePlusDeviceConnection implements DeviceConnection {
+ ConnectionStatus _status = ConnectionStatus.disconnected;
+ // Just to have a resonable default subscription?
+ StreamSubscription subs =
+ Stream.empty().listen((e) => ());
+ BluetoothCharacteristic? current;
+ BluetoothCharacteristic? available;
+
+ final FlutterBluePlusDevice device;
+
+ FlutterBluePlusDeviceConnection({required this.device});
+
+ @override
+ Future connect() async {
+ subs.cancel().ignore();
+ final dev = device.scanResult.device;
+ subs = dev.connectionState.listen(_onConnStateChange);
+ // connect timeout doesn't work under Linux
+ await dev.connect().timeout(Duration(seconds: 2));
+ // // ???? WTF ????
+ List svcs = await dev.discoverServices();
+ dev.onServicesReset.listen((_) async {
+ logger.i("Services Reset");
+ // try {
+ // List svcs = dev.servicesList;
+ // findCharac(svcs);
+ // } catch (e) {
+ // logger.e(e);
+ // }
+ });
+
+ logger.i("services discovered");
+
+ findCharac(svcs);
+
+ _status = ConnectionStatus.connected;
+
+ await Future.delayed(Duration(seconds: 5));
+ logger.i("Try re-discover");
+ svcs = await dev.discoverServices();
+ }
+
+ @override
+ Future disconnect() async {
+ _status = ConnectionStatus.disconnected;
+ }
+
+ void dispose() {
+ subs.cancel().ignore();
+ }
+
+ @override
+ ConnectionStatus get status => _status;
+
+ void _onConnStateChange(BluetoothConnectionState event) {
+ logger.i("New conn state: ${event.toString()}");
+ }
+
+ void findCharac(List svcs) {
+ if (svcs.isEmpty) {
+ logger.w("No services found!");
+ return;
+ }
+ logger.i("Services found!");
+ BluetoothService? badgeService = svcs.firstWhereOrNull(
+ (s) => s.serviceUuid.str == "ca260000-b4bb-46b2-bd06-b7b7a61ea990",
+ );
+
+ if (badgeService == null) {
+ } else {
+ logger.i("badge service found");
+ current = badgeService.characteristics.firstWhereOrNull(
+ (c) =>
+ c.characteristicUuid.str == "ca260001-b4bb-46b2-bd06-b7b7a61ea990",
+ );
+ available = badgeService.characteristics.firstWhereOrNull(
+ (c) =>
+ c.characteristicUuid.str == "ca260002-b4bb-46b2-bd06-b7b7a61ea990",
+ );
+ }
+
+ if (current == null || available == null) {
+ } else {
+ logger.i("characteristics found");
+ }
+ }
+}
diff --git a/lib/model/connection/mock_device_connection.dart b/lib/model/connection/mock_device_connection.dart
new file mode 100644
index 0000000..8b8750a
--- /dev/null
+++ b/lib/model/connection/mock_device_connection.dart
@@ -0,0 +1,33 @@
+// Copyright (C) 2025, uvok cheetah
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+import 'package:uvok_epaper_badge/model/connection/device_connection.dart';
+
+class MockDeviceConnection implements DeviceConnection {
+ ConnectionStatus _status = ConnectionStatus.disconnected;
+
+ @override
+ Future connect() async {
+ _status = ConnectionStatus.connected;
+ }
+
+ @override
+ Future disconnect() async {
+ _status = ConnectionStatus.disconnected;
+ }
+
+ @override
+ ConnectionStatus get status => _status;
+}
diff --git a/lib/model/device_connection.dart b/lib/model/device_connection.dart
deleted file mode 100644
index 81bcbfd..0000000
--- a/lib/model/device_connection.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2025, uvok cheetah
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-
-enum ConnectionStatus { disconnected, connected, error }
-
-abstract class DeviceConnection {
- Future connect();
- Future disconnect();
- ConnectionStatus get status;
-
- // Future read(String endpoint);
- // Future write(String endpoint, Uint8List data);
- // Stream subscribe(String endpoint);
-}
diff --git a/lib/model/device_connection_factory.dart b/lib/model/device_connection_factory.dart
index ef845fc..92b2348 100644
--- a/lib/model/device_connection_factory.dart
+++ b/lib/model/device_connection_factory.dart
@@ -14,10 +14,10 @@
// along with this program. If not, see .
import 'package:uvok_epaper_badge/model/device/device.dart';
-import 'package:uvok_epaper_badge/model/device_connection.dart';
+import 'package:uvok_epaper_badge/model/connection/device_connection.dart';
import 'package:uvok_epaper_badge/model/device/flutter_blue_plus_device.dart';
-import 'package:uvok_epaper_badge/model/flutter_blue_plus_device_connection.dart';
-import 'package:uvok_epaper_badge/model/mock_device_connection.dart';
+import 'package:uvok_epaper_badge/model/connection/flutter_blue_plus_device_connection.dart';
+import 'package:uvok_epaper_badge/model/connection/mock_device_connection.dart';
class DeviceConnectionFactory {
static DeviceConnection createConnection(Device device) {
diff --git a/lib/model/flutter_blue_plus_device_connection.dart b/lib/model/flutter_blue_plus_device_connection.dart
deleted file mode 100644
index e5c34aa..0000000
--- a/lib/model/flutter_blue_plus_device_connection.dart
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (C) 2025, uvok cheetah
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-import 'dart:async';
-
-import 'package:flutter_blue_plus/flutter_blue_plus.dart';
-import 'package:logger/logger.dart';
-import 'package:uvok_epaper_badge/first_where_ext.dart';
-import 'package:uvok_epaper_badge/model/device_connection.dart';
-import 'package:uvok_epaper_badge/model/device/flutter_blue_plus_device.dart';
-
-var logger = Logger();
-
-class FlutterBluePlusDeviceConnection implements DeviceConnection {
- ConnectionStatus _status = ConnectionStatus.disconnected;
- // Just to have a resonable default subscription?
- StreamSubscription subs =
- Stream.empty().listen((e) => ());
- BluetoothCharacteristic? current;
- BluetoothCharacteristic? available;
-
- final FlutterBluePlusDevice device;
-
- FlutterBluePlusDeviceConnection({required this.device});
-
- @override
- Future connect() async {
- subs.cancel().ignore();
- final dev = device.scanResult.device;
- subs = dev.connectionState.listen(_onConnStateChange);
- // connect timeout doesn't work under Linux
- await dev.connect().timeout(Duration(seconds: 2));
- // // ???? WTF ????
- List svcs = await dev.discoverServices();
- dev.onServicesReset.listen((_) async {
- logger.i("Services Reset");
- // try {
- // List svcs = dev.servicesList;
- // findCharac(svcs);
- // } catch (e) {
- // logger.e(e);
- // }
- });
-
- logger.i("services discovered");
-
- findCharac(svcs);
-
- _status = ConnectionStatus.connected;
-
- await Future.delayed(Duration(seconds: 5));
- logger.i("Try re-discover");
- svcs = await dev.discoverServices();
- }
-
- @override
- Future disconnect() async {
- _status = ConnectionStatus.disconnected;
- }
-
- void dispose() {
- subs.cancel().ignore();
- }
-
- @override
- ConnectionStatus get status => _status;
-
- void _onConnStateChange(BluetoothConnectionState event) {
- logger.i("New conn state: ${event.toString()}");
- }
-
- void findCharac(List svcs) {
- if (svcs.isEmpty) {
- logger.w("No services found!");
- return;
- }
- logger.i("Services found!");
- BluetoothService? badgeService = svcs.firstWhereOrNull(
- (s) => s.serviceUuid.str == "ca260000-b4bb-46b2-bd06-b7b7a61ea990",
- );
-
- if (badgeService == null) {
- } else {
- logger.i("badge service found");
- current = badgeService.characteristics.firstWhereOrNull(
- (c) =>
- c.characteristicUuid.str == "ca260001-b4bb-46b2-bd06-b7b7a61ea990",
- );
- available = badgeService.characteristics.firstWhereOrNull(
- (c) =>
- c.characteristicUuid.str == "ca260002-b4bb-46b2-bd06-b7b7a61ea990",
- );
- }
-
- if (current == null || available == null) {
- } else {
- logger.i("characteristics found");
- }
- }
-}
diff --git a/lib/model/mock_device_connection.dart b/lib/model/mock_device_connection.dart
deleted file mode 100644
index 3153387..0000000
--- a/lib/model/mock_device_connection.dart
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2025, uvok cheetah
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-import 'package:uvok_epaper_badge/model/device_connection.dart';
-
-class MockDeviceConnection implements DeviceConnection {
- ConnectionStatus _status = ConnectionStatus.disconnected;
-
- @override
- Future connect() async {
- _status = ConnectionStatus.connected;
- }
-
- @override
- Future disconnect() async {
- _status = ConnectionStatus.disconnected;
- }
-
- @override
- ConnectionStatus get status => _status;
-}
diff --git a/lib/widgets/device_details.dart b/lib/widgets/device_details.dart
index 81ffb1c..5e5e0ed 100644
--- a/lib/widgets/device_details.dart
+++ b/lib/widgets/device_details.dart
@@ -16,7 +16,7 @@
import 'package:uvok_epaper_badge/model/device/device.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
-import 'package:uvok_epaper_badge/model/device_connection.dart';
+import 'package:uvok_epaper_badge/model/connection/device_connection.dart';
var logger = Logger();
diff --git a/lib/widgets/scan_page.dart b/lib/widgets/scan_page.dart
index 2cae748..00283d2 100644
--- a/lib/widgets/scan_page.dart
+++ b/lib/widgets/scan_page.dart
@@ -20,7 +20,7 @@ import 'package:uvok_epaper_badge/model/device/device.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:permission_handler/permission_handler.dart';
-import 'package:uvok_epaper_badge/model/device_connection.dart';
+import 'package:uvok_epaper_badge/model/connection/device_connection.dart';
import 'package:uvok_epaper_badge/model/device_connection_factory.dart';
var logger = Logger();
--
cgit v1.2.3