autoconnect on fly mode (does not work yet)

This commit is contained in:
Constantin Leue
2026-08-02 08:25:23 +02:00
parent 5e9ef43f2f
commit 607dbb6584
13 changed files with 430 additions and 29 deletions
+14 -1
View File
@@ -84,6 +84,13 @@ class AppSettingsTable extends Table {
TextColumn get connectionWifiSsidPrefix =>
text().withDefault(const Constant(kDefaultWifiSsidPrefix))();
/// Exakte SSID der zuletzt erfolgreich verbundenen mLRS-Bruecke (Doku
/// Abschnitt 8: "verbundenes WLAN merken") - null, solange noch nie
/// erfolgreich verbunden wurde. Wird fuer kuenftige Verbindungsversuche
/// als exakter WifiNetworkSpecifier statt Praefix verwendet, damit Android
/// ohne erneuten Systemdialog automatisch verbinden kann.
TextColumn get connectionWifiLastSsid => text().nullable()();
@override
Set<Column> get primaryKey => {id};
}
@@ -95,7 +102,7 @@ class AppDatabase extends _$AppDatabase {
AppDatabase.forTesting(super.executor);
@override
int get schemaVersion => 5;
int get schemaVersion => 6;
@override
MigrationStrategy get migration => MigrationStrategy(
@@ -133,6 +140,12 @@ class AppDatabase extends _$AppDatabase {
appSettingsTable.connectionWifiSsidPrefix,
);
}
if (from < 6) {
await m.addColumn(
appSettingsTable,
appSettingsTable.connectionWifiLastSsid,
);
}
},
);
+96 -3
View File
@@ -1394,6 +1394,17 @@ class $AppSettingsTableTable extends AppSettingsTable
requiredDuringInsert: false,
defaultValue: const Constant(kDefaultWifiSsidPrefix),
);
static const VerificationMeta _connectionWifiLastSsidMeta =
const VerificationMeta('connectionWifiLastSsid');
@override
late final GeneratedColumn<String> connectionWifiLastSsid =
GeneratedColumn<String>(
'connection_wifi_last_ssid',
aliasedName,
true,
type: DriftSqlType.string,
requiredDuringInsert: false,
);
@override
List<GeneratedColumn> get $columns => [
id,
@@ -1405,6 +1416,7 @@ class $AppSettingsTableTable extends AppSettingsTable
connectionWifiHost,
connectionWifiPort,
connectionWifiSsidPrefix,
connectionWifiLastSsid,
];
@override
String get aliasedName => _alias ?? actualTableName;
@@ -1493,6 +1505,15 @@ class $AppSettingsTableTable extends AppSettingsTable
),
);
}
if (data.containsKey('connection_wifi_last_ssid')) {
context.handle(
_connectionWifiLastSsidMeta,
connectionWifiLastSsid.isAcceptableOrUnknown(
data['connection_wifi_last_ssid']!,
_connectionWifiLastSsidMeta,
),
);
}
return context;
}
@@ -1538,6 +1559,10 @@ class $AppSettingsTableTable extends AppSettingsTable
DriftSqlType.string,
data['${effectivePrefix}connection_wifi_ssid_prefix'],
)!,
connectionWifiLastSsid: attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}connection_wifi_last_ssid'],
),
);
}
@@ -1578,6 +1603,13 @@ class AppSettingsTableData extends DataClass
/// `WifiNetworkSpecifier` (Doku Kommunikationsschicht v2 Abschnitt 4/8),
/// Standard "mLRS-", ueberschreibbar.
final String connectionWifiSsidPrefix;
/// Exakte SSID der zuletzt erfolgreich verbundenen mLRS-Bruecke (Doku
/// Abschnitt 8: "verbundenes WLAN merken") - null, solange noch nie
/// erfolgreich verbunden wurde. Wird fuer kuenftige Verbindungsversuche
/// als exakter WifiNetworkSpecifier statt Praefix verwendet, damit Android
/// ohne erneuten Systemdialog automatisch verbinden kann.
final String? connectionWifiLastSsid;
const AppSettingsTableData({
required this.id,
this.activeDroneProfileId,
@@ -1588,6 +1620,7 @@ class AppSettingsTableData extends DataClass
this.connectionWifiHost,
required this.connectionWifiPort,
required this.connectionWifiSsidPrefix,
this.connectionWifiLastSsid,
});
@override
Map<String, Expression> toColumns(bool nullToAbsent) {
@@ -1613,6 +1646,11 @@ class AppSettingsTableData extends DataClass
map['connection_wifi_ssid_prefix'] = Variable<String>(
connectionWifiSsidPrefix,
);
if (!nullToAbsent || connectionWifiLastSsid != null) {
map['connection_wifi_last_ssid'] = Variable<String>(
connectionWifiLastSsid,
);
}
return map;
}
@@ -1635,6 +1673,9 @@ class AppSettingsTableData extends DataClass
: Value(connectionWifiHost),
connectionWifiPort: Value(connectionWifiPort),
connectionWifiSsidPrefix: Value(connectionWifiSsidPrefix),
connectionWifiLastSsid: connectionWifiLastSsid == null && nullToAbsent
? const Value.absent()
: Value(connectionWifiLastSsid),
);
}
@@ -1663,6 +1704,9 @@ class AppSettingsTableData extends DataClass
connectionWifiSsidPrefix: serializer.fromJson<String>(
json['connectionWifiSsidPrefix'],
),
connectionWifiLastSsid: serializer.fromJson<String?>(
json['connectionWifiLastSsid'],
),
);
}
@override
@@ -1682,6 +1726,9 @@ class AppSettingsTableData extends DataClass
'connectionWifiSsidPrefix': serializer.toJson<String>(
connectionWifiSsidPrefix,
),
'connectionWifiLastSsid': serializer.toJson<String?>(
connectionWifiLastSsid,
),
};
}
@@ -1695,6 +1742,7 @@ class AppSettingsTableData extends DataClass
Value<String?> connectionWifiHost = const Value.absent(),
int? connectionWifiPort,
String? connectionWifiSsidPrefix,
Value<String?> connectionWifiLastSsid = const Value.absent(),
}) => AppSettingsTableData(
id: id ?? this.id,
activeDroneProfileId: activeDroneProfileId.present
@@ -1714,6 +1762,9 @@ class AppSettingsTableData extends DataClass
connectionWifiPort: connectionWifiPort ?? this.connectionWifiPort,
connectionWifiSsidPrefix:
connectionWifiSsidPrefix ?? this.connectionWifiSsidPrefix,
connectionWifiLastSsid: connectionWifiLastSsid.present
? connectionWifiLastSsid.value
: this.connectionWifiLastSsid,
);
AppSettingsTableData copyWithCompanion(AppSettingsTableCompanion data) {
return AppSettingsTableData(
@@ -1742,6 +1793,9 @@ class AppSettingsTableData extends DataClass
connectionWifiSsidPrefix: data.connectionWifiSsidPrefix.present
? data.connectionWifiSsidPrefix.value
: this.connectionWifiSsidPrefix,
connectionWifiLastSsid: data.connectionWifiLastSsid.present
? data.connectionWifiLastSsid.value
: this.connectionWifiLastSsid,
);
}
@@ -1756,7 +1810,8 @@ class AppSettingsTableData extends DataClass
..write('connectionType: $connectionType, ')
..write('connectionWifiHost: $connectionWifiHost, ')
..write('connectionWifiPort: $connectionWifiPort, ')
..write('connectionWifiSsidPrefix: $connectionWifiSsidPrefix')
..write('connectionWifiSsidPrefix: $connectionWifiSsidPrefix, ')
..write('connectionWifiLastSsid: $connectionWifiLastSsid')
..write(')'))
.toString();
}
@@ -1772,6 +1827,7 @@ class AppSettingsTableData extends DataClass
connectionWifiHost,
connectionWifiPort,
connectionWifiSsidPrefix,
connectionWifiLastSsid,
);
@override
bool operator ==(Object other) =>
@@ -1785,7 +1841,8 @@ class AppSettingsTableData extends DataClass
other.connectionType == this.connectionType &&
other.connectionWifiHost == this.connectionWifiHost &&
other.connectionWifiPort == this.connectionWifiPort &&
other.connectionWifiSsidPrefix == this.connectionWifiSsidPrefix);
other.connectionWifiSsidPrefix == this.connectionWifiSsidPrefix &&
other.connectionWifiLastSsid == this.connectionWifiLastSsid);
}
class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
@@ -1798,6 +1855,7 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
final Value<String?> connectionWifiHost;
final Value<int> connectionWifiPort;
final Value<String> connectionWifiSsidPrefix;
final Value<String?> connectionWifiLastSsid;
const AppSettingsTableCompanion({
this.id = const Value.absent(),
this.activeDroneProfileId = const Value.absent(),
@@ -1808,6 +1866,7 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
this.connectionWifiHost = const Value.absent(),
this.connectionWifiPort = const Value.absent(),
this.connectionWifiSsidPrefix = const Value.absent(),
this.connectionWifiLastSsid = const Value.absent(),
});
AppSettingsTableCompanion.insert({
this.id = const Value.absent(),
@@ -1819,6 +1878,7 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
this.connectionWifiHost = const Value.absent(),
this.connectionWifiPort = const Value.absent(),
this.connectionWifiSsidPrefix = const Value.absent(),
this.connectionWifiLastSsid = const Value.absent(),
});
static Insertable<AppSettingsTableData> custom({
Expression<int>? id,
@@ -1830,6 +1890,7 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
Expression<String>? connectionWifiHost,
Expression<int>? connectionWifiPort,
Expression<String>? connectionWifiSsidPrefix,
Expression<String>? connectionWifiLastSsid,
}) {
return RawValuesInsertable({
if (id != null) 'id': id,
@@ -1847,6 +1908,8 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
'connection_wifi_port': connectionWifiPort,
if (connectionWifiSsidPrefix != null)
'connection_wifi_ssid_prefix': connectionWifiSsidPrefix,
if (connectionWifiLastSsid != null)
'connection_wifi_last_ssid': connectionWifiLastSsid,
});
}
@@ -1860,6 +1923,7 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
Value<String?>? connectionWifiHost,
Value<int>? connectionWifiPort,
Value<String>? connectionWifiSsidPrefix,
Value<String?>? connectionWifiLastSsid,
}) {
return AppSettingsTableCompanion(
id: id ?? this.id,
@@ -1874,6 +1938,8 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
connectionWifiPort: connectionWifiPort ?? this.connectionWifiPort,
connectionWifiSsidPrefix:
connectionWifiSsidPrefix ?? this.connectionWifiSsidPrefix,
connectionWifiLastSsid:
connectionWifiLastSsid ?? this.connectionWifiLastSsid,
);
}
@@ -1915,6 +1981,11 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
connectionWifiSsidPrefix.value,
);
}
if (connectionWifiLastSsid.present) {
map['connection_wifi_last_ssid'] = Variable<String>(
connectionWifiLastSsid.value,
);
}
return map;
}
@@ -1929,7 +2000,8 @@ class AppSettingsTableCompanion extends UpdateCompanion<AppSettingsTableData> {
..write('connectionType: $connectionType, ')
..write('connectionWifiHost: $connectionWifiHost, ')
..write('connectionWifiPort: $connectionWifiPort, ')
..write('connectionWifiSsidPrefix: $connectionWifiSsidPrefix')
..write('connectionWifiSsidPrefix: $connectionWifiSsidPrefix, ')
..write('connectionWifiLastSsid: $connectionWifiLastSsid')
..write(')'))
.toString();
}
@@ -2574,6 +2646,7 @@ typedef $$AppSettingsTableTableCreateCompanionBuilder =
Value<String?> connectionWifiHost,
Value<int> connectionWifiPort,
Value<String> connectionWifiSsidPrefix,
Value<String?> connectionWifiLastSsid,
});
typedef $$AppSettingsTableTableUpdateCompanionBuilder =
AppSettingsTableCompanion Function({
@@ -2586,6 +2659,7 @@ typedef $$AppSettingsTableTableUpdateCompanionBuilder =
Value<String?> connectionWifiHost,
Value<int> connectionWifiPort,
Value<String> connectionWifiSsidPrefix,
Value<String?> connectionWifiLastSsid,
});
class $$AppSettingsTableTableFilterComposer
@@ -2641,6 +2715,11 @@ class $$AppSettingsTableTableFilterComposer
column: $table.connectionWifiSsidPrefix,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get connectionWifiLastSsid => $composableBuilder(
column: $table.connectionWifiLastSsid,
builder: (column) => ColumnFilters(column),
);
}
class $$AppSettingsTableTableOrderingComposer
@@ -2696,6 +2775,11 @@ class $$AppSettingsTableTableOrderingComposer
column: $table.connectionWifiSsidPrefix,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get connectionWifiLastSsid => $composableBuilder(
column: $table.connectionWifiLastSsid,
builder: (column) => ColumnOrderings(column),
);
}
class $$AppSettingsTableTableAnnotationComposer
@@ -2749,6 +2833,11 @@ class $$AppSettingsTableTableAnnotationComposer
column: $table.connectionWifiSsidPrefix,
builder: (column) => column,
);
GeneratedColumn<String> get connectionWifiLastSsid => $composableBuilder(
column: $table.connectionWifiLastSsid,
builder: (column) => column,
);
}
class $$AppSettingsTableTableTableManager
@@ -2797,6 +2886,7 @@ class $$AppSettingsTableTableTableManager
Value<String?> connectionWifiHost = const Value.absent(),
Value<int> connectionWifiPort = const Value.absent(),
Value<String> connectionWifiSsidPrefix = const Value.absent(),
Value<String?> connectionWifiLastSsid = const Value.absent(),
}) => AppSettingsTableCompanion(
id: id,
activeDroneProfileId: activeDroneProfileId,
@@ -2807,6 +2897,7 @@ class $$AppSettingsTableTableTableManager
connectionWifiHost: connectionWifiHost,
connectionWifiPort: connectionWifiPort,
connectionWifiSsidPrefix: connectionWifiSsidPrefix,
connectionWifiLastSsid: connectionWifiLastSsid,
),
createCompanionCallback:
({
@@ -2819,6 +2910,7 @@ class $$AppSettingsTableTableTableManager
Value<String?> connectionWifiHost = const Value.absent(),
Value<int> connectionWifiPort = const Value.absent(),
Value<String> connectionWifiSsidPrefix = const Value.absent(),
Value<String?> connectionWifiLastSsid = const Value.absent(),
}) => AppSettingsTableCompanion.insert(
id: id,
activeDroneProfileId: activeDroneProfileId,
@@ -2829,6 +2921,7 @@ class $$AppSettingsTableTableTableManager
connectionWifiHost: connectionWifiHost,
connectionWifiPort: connectionWifiPort,
connectionWifiSsidPrefix: connectionWifiSsidPrefix,
connectionWifiLastSsid: connectionWifiLastSsid,
),
withReferenceMapper: (p0) => p0
.map((e) => (e.readTable(table), BaseReferences(db, table, e)))
@@ -23,6 +23,7 @@ class AppSettingsRepository {
String? connectionWifiHost,
int connectionWifiPort,
String connectionWifiSsidPrefix,
String? connectionWifiLastSsid,
})> load() async {
final row = await (_db.select(_db.appSettingsTable)
..where((s) => s.id.equals(_rowId)))
@@ -40,6 +41,7 @@ class AppSettingsRepository {
connectionWifiPort: row?.connectionWifiPort ?? kDefaultWifiPort,
connectionWifiSsidPrefix:
row?.connectionWifiSsidPrefix ?? kDefaultWifiSsidPrefix,
connectionWifiLastSsid: row?.connectionWifiLastSsid,
);
}
@@ -119,6 +121,18 @@ class AppSettingsRepository {
));
}
/// Exakte SSID der zuletzt erfolgreich verbundenen mLRS-Bruecke (Doku
/// Abschnitt 8), oder null solange noch nie erfolgreich verbunden wurde.
Future<String?> loadConnectionWifiLastSsid() async =>
(await load()).connectionWifiLastSsid;
Future<void> setConnectionWifiLastSsid(String? ssid) async {
await _upsert(AppSettingsTableCompanion(
id: const Value(_rowId),
connectionWifiLastSsid: Value(ssid),
));
}
Future<void> _upsert(AppSettingsTableCompanion companion) async {
await _db.into(_db.appSettingsTable).insertOnConflictUpdate(companion);
}