diff --git a/app/analysis_options.yaml b/app/analysis_options.yaml
index d23dad1e..cdff5034 100644
--- a/app/analysis_options.yaml
+++ b/app/analysis_options.yaml
@@ -24,6 +24,7 @@ analyzer:
plugins:
- custom_lint
exclude:
+ - "**.drift"
- "**.g.dart"
- "**.swagger.dart"
- "**.freezed.dart"
diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml
index bf29568b..fd9abd09 100644
--- a/app/android/app/src/main/AndroidManifest.xml
+++ b/app/android/app/src/main/AndroidManifest.xml
@@ -39,7 +39,8 @@
android:label="Lensai"
android:name="${applicationName}"
android:icon="@mipmap/launcher_icon"
- android:usesCleartextTraffic="true">
+ android:usesCleartextTraffic="true"
+ android:enableOnBackInvokedCallback="true">
(
- name: 'TopicsRoute',
- path: 'topics',
+ TypedGoRoute(
+ name: 'ContainerListRoute',
+ path: 'containers',
),
],
)
@@ -102,10 +102,10 @@ class BangSearchRoute extends GoRouteData {
}
}
-class TopicListRoute extends GoRouteData {
+class ContainerListRoute extends GoRouteData {
@override
Widget build(BuildContext context, GoRouterState state) {
- return const TopicListScreen();
+ return const ContainerListScreen();
}
}
diff --git a/app/lib/core/routing/routes.g.dart b/app/lib/core/routing/routes.g.dart
index 92edfc1e..9097d6ea 100644
--- a/app/lib/core/routing/routes.g.dart
+++ b/app/lib/core/routing/routes.g.dart
@@ -47,9 +47,9 @@ RouteBase get $browserRoute => GoRouteData.$route(
],
),
GoRouteData.$route(
- path: 'topics',
- name: 'TopicsRoute',
- factory: $TopicListRouteExtension._fromState,
+ path: 'containers',
+ name: 'ContainerListRoute',
+ factory: $ContainerListRouteExtension._fromState,
),
],
);
@@ -163,11 +163,12 @@ extension $BangSubCategoryRouteExtension on BangSubCategoryRoute {
void replace(BuildContext context) => context.replace(location);
}
-extension $TopicListRouteExtension on TopicListRoute {
- static TopicListRoute _fromState(GoRouterState state) => TopicListRoute();
+extension $ContainerListRouteExtension on ContainerListRoute {
+ static ContainerListRoute _fromState(GoRouterState state) =>
+ ContainerListRoute();
String get location => GoRouteData.$location(
- '/topics',
+ '/containers',
);
void go(BuildContext context) => context.go(location);
diff --git a/app/lib/features/geckoview/features/topics/data/database/drift/converters/color.dart b/app/lib/data/database/converters/color.dart
similarity index 100%
rename from app/lib/features/geckoview/features/topics/data/database/drift/converters/color.dart
rename to app/lib/data/database/converters/color.dart
diff --git a/app/lib/data/database/converters/icon_data.dart b/app/lib/data/database/converters/icon_data.dart
new file mode 100644
index 00000000..ee42abd4
--- /dev/null
+++ b/app/lib/data/database/converters/icon_data.dart
@@ -0,0 +1,48 @@
+import 'dart:convert';
+
+import 'package:drift/drift.dart';
+import 'package:flutter/widgets.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+class IconDataJsonConverter
+ implements JsonConverter> {
+ const IconDataJsonConverter();
+
+ @override
+ IconData fromJson(Map json) {
+ return IconData(
+ json['codePoint'] as int,
+ fontFamily: json['fontFamily'] as String,
+ fontPackage: json['fontPackage'] as String,
+ );
+ }
+
+ @override
+ Map toJson(IconData iconData) {
+ return {
+ 'codePoint': iconData.codePoint,
+ 'fontFamily': iconData.fontFamily,
+ 'fontPackage': iconData.fontPackage,
+ };
+ }
+}
+
+class IconDataTypeConverter implements TypeConverter {
+ const IconDataTypeConverter();
+
+ @override
+ IconData fromSql(String fromDb) {
+ final json = jsonDecode(fromDb) as Map;
+ return const IconDataJsonConverter().fromJson(json);
+ }
+
+ @override
+ String toSql(IconData value) {
+ assert(
+ value.fontFamily != null,
+ 'Font family must be provided to identify icon',
+ );
+
+ return jsonEncode(const IconDataJsonConverter().toJson(value));
+ }
+}
diff --git a/app/lib/features/geckoview/features/topics/data/database/drift/converters/uri.dart b/app/lib/data/database/converters/uri.dart
similarity index 100%
rename from app/lib/features/geckoview/features/topics/data/database/drift/converters/uri.dart
rename to app/lib/data/database/converters/uri.dart
diff --git a/app/lib/data/database/functions/lexo_rank_functions.dart b/app/lib/data/database/functions/lexo_rank_functions.dart
new file mode 100644
index 00000000..76e3c9d3
--- /dev/null
+++ b/app/lib/data/database/functions/lexo_rank_functions.dart
@@ -0,0 +1,58 @@
+import 'package:lexo_rank/lexo_rank.dart';
+import 'package:lexo_rank/lexo_rank/lexo_rank_bucket.dart';
+import 'package:sqlite3/common.dart';
+
+String _nextRankOrMiddle(List