diff --git a/app/lib/data/database/converters/uri.dart b/app/lib/data/database/converters/uri.dart index a914ca0d..e49d2d85 100644 --- a/app/lib/data/database/converters/uri.dart +++ b/app/lib/data/database/converters/uri.dart @@ -14,3 +14,17 @@ class UriConverter extends TypeConverter { return value.toString(); } } + +class UriConverterNullable extends TypeConverter { + const UriConverterNullable(); + + @override + Uri? fromSql(String? fromDb) { + return uri_parser.tryParseUrl(fromDb, eagerParsing: true); + } + + @override + String? toSql(Uri? value) { + return value?.toString(); + } +} diff --git a/app/lib/features/geckoview/features/tabs/data/database/database.drift b/app/lib/features/geckoview/features/tabs/data/database/database.drift index b7ebccd2..634228ba 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/database.drift +++ b/app/lib/features/geckoview/features/tabs/data/database/database.drift @@ -16,7 +16,7 @@ CREATE TABLE tab( parent_id TEXT REFERENCES tab (id) ON DELETE SET NULL, container_id TEXT REFERENCES container (id) ON DELETE CASCADE, order_key TEXT NOT NULL, - url TEXT MAPPED BY `const UriConverter()`, + url TEXT MAPPED BY `const UriConverterNullable()`, title TEXT, is_probably_readerable BOOL, extracted_content_markdown TEXT, diff --git a/app/lib/features/geckoview/features/tabs/data/database/database.g.dart b/app/lib/features/geckoview/features/tabs/data/database/database.g.dart index 2db24787..192eaf91 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/database.g.dart +++ b/app/lib/features/geckoview/features/tabs/data/database/database.g.dart @@ -228,7 +228,7 @@ class Tab extends Table with TableInfo { type: DriftSqlType.string, requiredDuringInsert: false, $customConstraints: '', - ).withConverter(Tab.$converterurln); + ).withConverter(Tab.$converterurl); late final GeneratedColumn title = GeneratedColumn( 'title', aliasedName, @@ -330,7 +330,7 @@ class Tab extends Table with TableInfo { DriftSqlType.string, data['${effectivePrefix}order_key'], )!, - url: Tab.$converterurln.fromSql( + url: Tab.$converterurl.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}url'], @@ -372,9 +372,8 @@ class Tab extends Table with TableInfo { return Tab(attachedDatabase, alias); } - static TypeConverter $converterurl = const UriConverter(); - static TypeConverter $converterurln = - NullAwareTypeConverter.wrap($converterurl); + static TypeConverter $converterurl = + const UriConverterNullable(); @override bool get dontWriteConstraints => true; } @@ -418,7 +417,7 @@ class TabData extends DataClass implements Insertable { } map['order_key'] = Variable(orderKey); if (!nullToAbsent || url != null) { - map['url'] = Variable(Tab.$converterurln.toSql(url)); + map['url'] = Variable(Tab.$converterurl.toSql(url)); } if (!nullToAbsent || title != null) { map['title'] = Variable(title); @@ -747,7 +746,7 @@ class TabCompanion extends UpdateCompanion { map['order_key'] = Variable(orderKey.value); } if (url.present) { - map['url'] = Variable(Tab.$converterurln.toSql(url.value)); + map['url'] = Variable(Tab.$converterurl.toSql(url.value)); } if (title.present) { map['title'] = Variable(title.value); @@ -1176,8 +1175,7 @@ abstract class _$TabDatabase extends GeneratedDatabase { id: row.read('id'), title: row.readNullable('title'), url: row.readNullable('url'), - cleanUrl: NullAwareTypeConverter.wrapFromSql( - Tab.$converterurl, + cleanUrl: Tab.$converterurl.fromSql( row.readNullable('clean_url'), ), weightedRank: row.read('weighted_rank'), @@ -1207,8 +1205,7 @@ abstract class _$TabDatabase extends GeneratedDatabase { id: row.read('id'), title: row.readNullable('title'), url: row.readNullable('url'), - cleanUrl: NullAwareTypeConverter.wrapFromSql( - Tab.$converterurl, + cleanUrl: Tab.$converterurl.fromSql( row.readNullable('clean_url'), ), extractedContent: row.readNullable('extracted_content'), diff --git a/app/lib/features/web_feed/data/database/database.drift b/app/lib/features/web_feed/data/database/database.drift index 6a315deb..445bdf38 100644 --- a/app/lib/features/web_feed/data/database/database.drift +++ b/app/lib/features/web_feed/data/database/database.drift @@ -9,8 +9,8 @@ CREATE TABLE feed ( url TEXT PRIMARY KEY NOT NULL MAPPED BY `const UriConverter()`, title TEXT, description TEXT, - icon TEXT MAPPED BY `const UriConverter()`, - site_link TEXT MAPPED BY `const UriConverter()`, + icon TEXT MAPPED BY `const UriConverterNullable()`, + site_link TEXT MAPPED BY `const UriConverterNullable()`, authors TEXT MAPPED BY `const FeedAuthorsConverter()`, tags TEXT MAPPED BY `const FeedCategoriesConverter()`, last_fetched DATETIME diff --git a/app/lib/features/web_feed/data/database/database.g.dart b/app/lib/features/web_feed/data/database/database.g.dart index 8f807347..30c38493 100644 --- a/app/lib/features/web_feed/data/database/database.g.dart +++ b/app/lib/features/web_feed/data/database/database.g.dart @@ -41,7 +41,7 @@ class Feed extends Table with TableInfo { type: DriftSqlType.string, requiredDuringInsert: false, $customConstraints: '', - ).withConverter(Feed.$convertericonn); + ).withConverter(Feed.$convertericon); late final GeneratedColumnWithTypeConverter siteLink = GeneratedColumn( 'site_link', @@ -50,7 +50,7 @@ class Feed extends Table with TableInfo { type: DriftSqlType.string, requiredDuringInsert: false, $customConstraints: '', - ).withConverter(Feed.$convertersiteLinkn); + ).withConverter(Feed.$convertersiteLink); late final GeneratedColumnWithTypeConverter?, String> authors = GeneratedColumn( 'authors', @@ -113,13 +113,13 @@ class Feed extends Table with TableInfo { DriftSqlType.string, data['${effectivePrefix}description'], ), - icon: Feed.$convertericonn.fromSql( + icon: Feed.$convertericon.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}icon'], ), ), - siteLink: Feed.$convertersiteLinkn.fromSql( + siteLink: Feed.$convertersiteLink.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}site_link'], @@ -150,12 +150,10 @@ class Feed extends Table with TableInfo { } static TypeConverter $converterurl = const UriConverter(); - static TypeConverter $convertericon = const UriConverter(); - static TypeConverter $convertericonn = - NullAwareTypeConverter.wrap($convertericon); - static TypeConverter $convertersiteLink = const UriConverter(); - static TypeConverter $convertersiteLinkn = - NullAwareTypeConverter.wrap($convertersiteLink); + static TypeConverter $convertericon = + const UriConverterNullable(); + static TypeConverter $convertersiteLink = + const UriConverterNullable(); static TypeConverter, String> $converterauthors = const FeedAuthorsConverter(); static TypeConverter?, String?> $converterauthorsn = @@ -200,11 +198,11 @@ class FeedData extends DataClass implements Insertable { map['description'] = Variable(description); } if (!nullToAbsent || icon != null) { - map['icon'] = Variable(Feed.$convertericonn.toSql(icon)); + map['icon'] = Variable(Feed.$convertericon.toSql(icon)); } if (!nullToAbsent || siteLink != null) { map['site_link'] = Variable( - Feed.$convertersiteLinkn.toSql(siteLink), + Feed.$convertersiteLink.toSql(siteLink), ); } if (!nullToAbsent || authors != null) { @@ -419,11 +417,11 @@ class FeedCompanion extends UpdateCompanion { map['description'] = Variable(description.value); } if (icon.present) { - map['icon'] = Variable(Feed.$convertericonn.toSql(icon.value)); + map['icon'] = Variable(Feed.$convertericon.toSql(icon.value)); } if (siteLink.present) { map['site_link'] = Variable( - Feed.$convertersiteLinkn.toSql(siteLink.value), + Feed.$convertersiteLink.toSql(siteLink.value), ); } if (authors.present) { @@ -1064,13 +1062,13 @@ class ArticleView extends ViewInfo DriftSqlType.string, data['${effectivePrefix}contentPlain'], ), - icon: Feed.$convertericonn.fromSql( + icon: Feed.$convertericon.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}icon'], ), ), - siteLink: Feed.$convertersiteLinkn.fromSql( + siteLink: Feed.$convertersiteLink.fromSql( attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}site_link'], @@ -1185,14 +1183,14 @@ class ArticleView extends ViewInfo aliasedName, true, type: DriftSqlType.string, - ).withConverter(Feed.$convertericonn); + ).withConverter(Feed.$convertericon); late final GeneratedColumnWithTypeConverter siteLink = GeneratedColumn( 'site_link', aliasedName, true, type: DriftSqlType.string, - ).withConverter(Feed.$convertersiteLinkn); + ).withConverter(Feed.$convertersiteLink); @override ArticleView createAlias(String alias) { return ArticleView(attachedDatabase, alias); @@ -1503,10 +1501,7 @@ abstract class _$FeedDatabase extends GeneratedDatabase { contentHtml: row.readNullable('contentHtml'), contentMarkdown: row.readNullable('contentMarkdown'), contentPlain: row.readNullable('contentPlain'), - icon: NullAwareTypeConverter.wrapFromSql( - Feed.$convertericon, - row.readNullable('icon'), - ), + icon: Feed.$convertericon.fromSql(row.readNullable('icon')), ), ); } @@ -1558,10 +1553,7 @@ abstract class _$FeedDatabase extends GeneratedDatabase { contentHtml: row.readNullable('contentHtml'), contentMarkdown: row.readNullable('contentMarkdown'), contentPlain: row.readNullable('contentPlain'), - icon: NullAwareTypeConverter.wrapFromSql( - Feed.$convertericon, - row.readNullable('icon'), - ), + icon: Feed.$convertericon.fromSql(row.readNullable('icon')), titleHighlight: row.readNullable('title_highlight'), summarySnippet: row.readNullable('summary_snippet'), contentSnippet: row.readNullable('content_snippet'),