Skip to content
Merged
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
2 changes: 1 addition & 1 deletion lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ class _LinksysAppState extends ConsumerState<LinksysApp>
// .then((prefs) {
// final currentSN = prefs.getString(pCurrentSN);
// if (currentSN != null &&
// ref.read(dashboardManagerProvider).deviceInfo?.serialNumber !=
// ref.read(sessionProvider).deviceInfo?.serialNumber !=
// currentSN) {
// // if (mounted) {
// // showRouterNotFoundAlert(context, ref);
Expand Down
55 changes: 0 additions & 55 deletions lib/core/data/providers/dashboard_manager_provider.dart

This file was deleted.

131 changes: 0 additions & 131 deletions lib/core/data/providers/dashboard_manager_state.dart

This file was deleted.

45 changes: 45 additions & 0 deletions lib/core/data/providers/device_info_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:privacy_gui/core/jnap/actions/better_action.dart';
import 'package:privacy_gui/core/jnap/models/device_info.dart';
import 'package:privacy_gui/core/jnap/models/soft_sku_settings.dart';
import 'package:privacy_gui/core/data/providers/polling_provider.dart';
import 'package:privacy_gui/core/data/providers/polling_helpers.dart';

final deviceInfoProvider = Provider<DeviceInfoState>((ref) {
final pollingData = ref.watch(pollingProvider).value;

NodeDeviceInfo? deviceInfo;
String? skuModelNumber;

final deviceInfoOutput =
getPollingOutput(pollingData, JNAPAction.getDeviceInfo);
if (deviceInfoOutput != null) {
deviceInfo = NodeDeviceInfo.fromJson(deviceInfoOutput);
}

final skuOutput =
getPollingOutput(pollingData, JNAPAction.getSoftSKUSettings);
if (skuOutput != null) {
final settings = SoftSKUSettings.fromMap(skuOutput);
skuModelNumber = settings.modelNumber;
}

return DeviceInfoState(
deviceInfo: deviceInfo,
skuModelNumber: skuModelNumber,
);
});

class DeviceInfoState extends Equatable {
final NodeDeviceInfo? deviceInfo;
final String? skuModelNumber;

const DeviceInfoState({
this.deviceInfo,
this.skuModelNumber,
});

@override
List<Object?> get props => [deviceInfo, skuModelNumber];
}
37 changes: 37 additions & 0 deletions lib/core/data/providers/ethernet_ports_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:privacy_gui/core/jnap/actions/better_action.dart';
import 'package:privacy_gui/core/data/providers/polling_provider.dart';
import 'package:privacy_gui/core/data/providers/polling_helpers.dart';

final ethernetPortsProvider = Provider<EthernetPortsState>((ref) {
final pollingData = ref.watch(pollingProvider).value;

String? wanConnection;
List<String> lanConnections = [];

final portsOutput =
getPollingOutput(pollingData, JNAPAction.getEthernetPortConnections);
if (portsOutput != null) {
wanConnection = portsOutput['wanPortConnection'] as String?;
lanConnections = List<String>.from(portsOutput['lanPortConnections'] ?? []);
}

return EthernetPortsState(
wanConnection: wanConnection,
lanConnections: lanConnections,
);
});

class EthernetPortsState extends Equatable {
final String? wanConnection;
final List<String> lanConnections;

const EthernetPortsState({
this.wanConnection,
this.lanConnections = const [],
});

@override
List<Object?> get props => [wanConnection, lanConnections];
}
24 changes: 24 additions & 0 deletions lib/core/data/providers/polling_helpers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'package:privacy_gui/core/jnap/actions/better_action.dart';
import 'package:privacy_gui/core/jnap/result/jnap_result.dart';
import 'package:privacy_gui/core/data/providers/polling_provider.dart';

/// Extracts the output Map from polling data for a specific action.
Map<String, dynamic>? getPollingOutput(
CoreTransactionData? data,
JNAPAction action,
) {
return _getPollingSuccess(data, action)?.output;
}

/// Safely extracts a successful result for a specific action from polling data.
///
/// Returns null if the data is null, the action is not found, or the result
/// is not a JNAPSuccess (e.g., it's a JNAPError).
JNAPSuccess? _getPollingSuccess(
CoreTransactionData? data,
JNAPAction action,
) {
if (data == null) return null;
final result = data.data[action];
return result is JNAPSuccess ? result : null;
}
27 changes: 27 additions & 0 deletions lib/core/data/providers/router_time_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:intl/intl.dart';
import 'package:privacy_gui/core/jnap/actions/better_action.dart';
import 'package:privacy_gui/core/data/providers/polling_provider.dart';
import 'package:privacy_gui/core/data/providers/polling_helpers.dart';

/// Provides the router's local time as milliseconds since epoch.
///
/// Extracts the current time from polling data for getLocalTime action.
/// Falls back to the current system time if unable to retrieve router time.
final routerTimeProvider = Provider<int>((ref) {
final pollingData = ref.watch(pollingProvider).value;

final timeOutput = getPollingOutput(pollingData, JNAPAction.getLocalTime);
if (timeOutput != null) {
final timeString = timeOutput['currentTime'] as String?;
if (timeString != null) {
final parsedTime =
DateFormat("yyyy-MM-ddThh:mm:ssZ").tryParse(timeString);
if (parsedTime != null) {
return parsedTime.millisecondsSinceEpoch;
}
}
}

return DateTime.now().millisecondsSinceEpoch;
});
Loading