Skip to content

Commit a18cb2e

Browse files
authored
Merge pull request #80 from osociety/dev
Dev -> Main
2 parents 782de62 + ca4ade1 commit a18cb2e

12 files changed

Lines changed: 642 additions & 219 deletions

.github/workflows/flutter.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
name: Flutter
77

88
on:
9+
push:
10+
branches: ["main", "dev"]
911
pull_request:
1012
branches: ["main", "dev"]
1113

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## 3.0.4
4+
* Improve test coverage and fix analysis warnings.
5+
* Fix CI triggers for coverage tracking.
6+
37
## 3.0.3
48
Upgrade to latest network_tools
59

example/ios/Runner/Info.plist

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@
4343
</array>
4444
<key>CADisableMinimumFrameDurationOnPhone</key>
4545
<true/>
46+
<key>NSBonjourServices</key>
47+
<array>
48+
<string>_http._tcp</string>
49+
<string>_services._dns-sd._udp</string>
50+
</array>
51+
<key>NSLocalNetworkUsageDescription</key>
52+
<string>Required to discover local network devices</string>
4653
<key>UIApplicationSupportsIndirectInputEvents</key>
4754
<true/>
4855
</dict>

example/lib/pages/mdns_search/mdns_scanner_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ class _MdnsScannerPageState extends State<MdnsScannerPage> {
2323
if (netInt == null) {
2424
return;
2525
}
26-
List<ActiveHost> hosts = await MdnsScannerService.instance
27-
.searchMdnsDevices(forceUseOfSavedSrvRecordList: true);
26+
List<ActiveHost> hosts =
27+
await MdnsScannerService.instance.searchMdnsDevices();
2828

2929
setState(() {
3030
if (activeHosts == null) {

lib/src/configure_flutter.dart

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,63 @@
11
import 'package:dart_ping_ios/dart_ping_ios.dart';
2+
import 'package:get_it/get_it.dart';
23
import 'package:logging/logging.dart';
34
import 'package:network_tools/network_tools.dart' as packages_page;
45
// ignore: implementation_imports
6+
import 'package:network_tools/src/database/database_service.dart';
7+
// ignore: implementation_imports
8+
import 'package:network_tools/src/database/drift_database.dart';
9+
// ignore: implementation_imports
10+
import 'package:network_tools/src/repository/repository.dart';
11+
// ignore: implementation_imports
512
import 'package:network_tools_flutter/src/network_tools_flutter_util.dart';
613
import 'package:network_tools_flutter/src/services_impls/host_scanner_service_flutter_impl.dart';
714
import 'package:network_tools_flutter/src/services_impls/mdns_scanner_service_flutter_impl.dart';
815
import 'package:network_tools_flutter/src/services_impls/port_scanner_service_flutter_impl.dart';
916
import 'package:universal_io/io.dart';
1017

18+
bool _isConfigured = false;
19+
Future<void>? _configureFuture;
20+
1121
/// Configures the network tools for Flutter.
1222
///
1323
/// [dbDirectory] is the directory for the database.
1424
/// [enableDebugging] enables verbose logging if set to true.
1525
///
1626
/// This function sets up implementations for ARP, host, port, and mDNS scanning services,
1727
/// initializes the ARP table, and registers DartPing for iOS if needed.
18-
Future configureNetworkToolsFlutter(
28+
Future<void> configureNetworkToolsFlutter(
1929
String dbDirectory, {
2030
bool enableDebugging = false,
2131
bool rebuildData = false,
32+
}) async {
33+
if (_isConfigured && !rebuildData) {
34+
return;
35+
}
36+
37+
if (_configureFuture != null) {
38+
await _configureFuture;
39+
if (_isConfigured && !rebuildData) {
40+
return;
41+
}
42+
}
43+
44+
_configureFuture = _doConfigureNetworkToolsFlutter(
45+
dbDirectory,
46+
enableDebugging: enableDebugging,
47+
rebuildData: rebuildData,
48+
);
49+
try {
50+
await _configureFuture;
51+
_isConfigured = true;
52+
} finally {
53+
_configureFuture = null;
54+
}
55+
}
56+
57+
Future<void> _doConfigureNetworkToolsFlutter(
58+
String dbDirectory, {
59+
required bool enableDebugging,
60+
required bool rebuildData,
2261
}) async {
2362
packages_page.enableDebugging = enableDebugging;
2463
packages_page.dbDirectory = dbDirectory;
@@ -40,7 +79,15 @@ Future configureNetworkToolsFlutter(
4079
PortScannerServiceFlutterImpl();
4180
MdnsScannerServiceFlutterImpl();
4281

43-
await packages_page.initializeNetworkTools(rebuildData);
82+
if (GetIt.instance.isRegistered<DatabaseService<AppDatabase>>()) {
83+
if (rebuildData) {
84+
await GetIt.instance<Repository<packages_page.ARPData>>().clear();
85+
}
86+
await GetIt.instance<Repository<packages_page.ARPData>>().build();
87+
await GetIt.instance<Repository<packages_page.Vendor>>().build();
88+
} else {
89+
await packages_page.initializeNetworkTools(rebuildData);
90+
}
4491

4592
// Register dart ping for main isolate
4693
if (Platform.isIOS) {

lib/src/services_impls/host_scanner_service_flutter_impl.dart

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,20 @@ class HostScannerServiceFlutterImpl extends HostScannerServiceImpl {
6969
enableDebugging.toString(),
7070
hostIds.join(','),
7171
]);
72-
} else if (message is List<String>) {
72+
} else if (message is List<dynamic> &&
73+
message.length == 2 &&
74+
message[0] is String) {
7375
progressCallback
7476
?.call((i - firstHostId) * 100 / (lastValidSubnet - firstHostId));
77+
final pingDataJson = message[1];
7578
final activeHostFound = ActiveHost.fromSendableActiveHost(
76-
sendableActiveHost: SendableActiveHost(message[0],
77-
pingData: PingData.fromJson(message[1])));
79+
sendableActiveHost: SendableActiveHost(
80+
message[0] as String,
81+
pingData: pingDataJson == null
82+
? null
83+
: PingResponse.fromJson(pingDataJson as String),
84+
),
85+
);
7886
await activeHostFound.resolveInfo();
7987
yield activeHostFound;
8088
} else if (message is String && message == 'Done') {
@@ -126,8 +134,10 @@ class HostScannerServiceFlutterImpl extends HostScannerServiceImpl {
126134

127135
await for (final SendableActiveHost activeHostFound
128136
in hostsDiscoveredInNetwork) {
129-
sendPort.send(
130-
[activeHostFound.address, activeHostFound.pingData!.toJson()]);
137+
sendPort.send(<String?>[
138+
activeHostFound.address,
139+
activeHostFound.pingData?.toJson(),
140+
]);
131141
}
132142
sendPort.send('Done');
133143
}

0 commit comments

Comments
 (0)