diff --git a/lib/database/converter.dart b/lib/database/converter.dart new file mode 100644 index 0000000..f4728ca --- /dev/null +++ b/lib/database/converter.dart @@ -0,0 +1,43 @@ +part of 'database.dart'; + +class StringMapConverter extends TypeConverter, String> { + const StringMapConverter(); + + @override + Map fromSql(String fromDb) { + return Map.from(json.decode(fromDb)); + } + + @override + String toSql(Map value) { + return json.encode(value); + } +} + +class StringListConverter extends TypeConverter, String> { + const StringListConverter(); + + @override + List fromSql(String fromDb) { + return List.from(json.decode(fromDb)); + } + + @override + String toSql(List value) { + return json.encode(value.toList()); + } +} + +class StringSetConverter extends TypeConverter, String> { + const StringSetConverter(); + + @override + Set fromSql(String fromDb) { + return Set.from(json.decode(fromDb)); + } + + @override + String toSql(Set value) { + return json.encode(value.toList()); + } +} diff --git a/lib/database/database.dart b/lib/database/database.dart index 486091d..2f9e500 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -8,7 +8,9 @@ import 'package:fl_clash/common/common.dart'; import 'package:fl_clash/enum/enum.dart'; import 'package:fl_clash/models/models.dart'; +part 'converter.dart'; part 'generated/database.g.dart'; +part 'groups.dart'; part 'links.dart'; part 'profiles.dart'; part 'rules.dart'; diff --git a/lib/database/groups.dart b/lib/database/groups.dart new file mode 100644 index 0000000..073d2ee --- /dev/null +++ b/lib/database/groups.dart @@ -0,0 +1,59 @@ +part of 'database.dart'; + +@DataClassName('RawGroup') +class Groups extends Table { + @override + String get tableName => 'groups'; + + IntColumn get profileId => integer().nullable().references( + Profiles, + #id, + onDelete: KeyAction.cascade, + )(); + + TextColumn get name => text().named('name')(); + + TextColumn get type => text().named('type')(); + + TextColumn get proxies => + text().map(const StringListConverter()).nullable().named('proxies')(); + + TextColumn get use => + text().map(const StringListConverter()).nullable().named('use')(); + + TextColumn get url => text().nullable().named('url')(); + + IntColumn get interval => integer().nullable().named('interval')(); + + IntColumn get testTimeout => integer().nullable().named('timeout')(); + + IntColumn get maxFailedTimes => + integer().nullable().named('max_failed_times')(); + + BoolColumn get lazy => boolean().nullable().named('lazy')(); + + BoolColumn get disableUdp => boolean().nullable().named('disable_udp')(); + + TextColumn get filter => text().nullable().named('filter')(); + + TextColumn get excludeFilter => text().nullable().named('exclude_filter')(); + + TextColumn get excludeType => text().nullable().named('exclude_type')(); + + TextColumn get expectedStatus => text().nullable().named('expected_status')(); + + BoolColumn get includeAll => boolean().nullable().named('include_all')(); + + BoolColumn get includeAllProxies => + boolean().nullable().named('include_all_proxies')(); + + BoolColumn get includeAllProviders => + boolean().nullable().named('include_all_providers')(); + + BoolColumn get hidden => boolean().nullable().named('hidden')(); + + TextColumn get icon => text().nullable().named('icon')(); + + @override + Set get primaryKey => {profileId, name}; +} diff --git a/lib/database/profiles.dart b/lib/database/profiles.dart index a3a33eb..6a50d0f 100644 --- a/lib/database/profiles.dart +++ b/lib/database/profiles.dart @@ -99,34 +99,6 @@ class ProfilesDao extends DatabaseAccessor with _$ProfilesDaoMixin { } } -class StringMapConverter extends TypeConverter, String> { - const StringMapConverter(); - - @override - Map fromSql(String fromDb) { - return Map.from(json.decode(fromDb)); - } - - @override - String toSql(Map value) { - return json.encode(value); - } -} - -class StringSetConverter extends TypeConverter, String> { - const StringSetConverter(); - - @override - Set fromSql(String fromDb) { - return Set.from(json.decode(fromDb)); - } - - @override - String toSql(Set value) { - return json.encode(value.toList()); - } -} - extension RawProfilExt on RawProfile { Profile toProfile() { return Profile(