intermediate

This commit is contained in:
Fabian Freund
2024-09-13 09:11:06 +02:00
parent 3b047b5d8a
commit 37d2c84d7f
155 changed files with 5666 additions and 1816 deletions
@@ -1,5 +1,4 @@
import 'package:drift/drift.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
abstract interface class ITab {
String get id;
@@ -1,5 +1,3 @@
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
class ConsistentController {
final InAppWebViewController? value;
@@ -1,10 +1,9 @@
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:fast_equatable/fast_equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:lensai/core/uuid.dart';
import 'package:lensai/domain/entities/web_page_info.dart';
import 'package:lensai/features/web_view/domain/entities/abstract/tab.dart';
import 'package:lensai/data/models/web_page_info.dart';
part 'web_view_page.g.dart';
@@ -7,17 +7,17 @@ part of 'web_view_page.dart';
// **************************************************************************
abstract class _$WebViewPageCWProxy {
WebViewPage controller(InAppWebViewController? controller);
WebViewPage controller(InvalidType controller);
WebViewPage url(Uri url);
WebViewPage sslError(SslError? sslError);
WebViewPage sslError(InvalidType sslError);
WebViewPage title(String? title);
WebViewPage topicId(String? topicId);
WebViewPage favicon(Favicon? favicon);
WebViewPage favicon(BrowserIcon? favicon);
WebViewPage screenshot(Uint8List? screenshot);
@@ -30,12 +30,12 @@ abstract class _$WebViewPageCWProxy {
/// WebViewPage(...).copyWith(id: 12, name: "My name")
/// ````
WebViewPage call({
InAppWebViewController? controller,
InvalidType? controller,
Uri? url,
SslError? sslError,
InvalidType? sslError,
String? title,
String? topicId,
Favicon? favicon,
BrowserIcon? favicon,
Uint8List? screenshot,
({bool canGoBack, bool canGoForward})? pageHistory,
});
@@ -48,14 +48,14 @@ class _$WebViewPageCWProxyImpl implements _$WebViewPageCWProxy {
final WebViewPage _value;
@override
WebViewPage controller(InAppWebViewController? controller) =>
WebViewPage controller(InvalidType controller) =>
this(controller: controller);
@override
WebViewPage url(Uri url) => this(url: url);
@override
WebViewPage sslError(SslError? sslError) => this(sslError: sslError);
WebViewPage sslError(InvalidType sslError) => this(sslError: sslError);
@override
WebViewPage title(String? title) => this(title: title);
@@ -64,7 +64,7 @@ class _$WebViewPageCWProxyImpl implements _$WebViewPageCWProxy {
WebViewPage topicId(String? topicId) => this(topicId: topicId);
@override
WebViewPage favicon(Favicon? favicon) => this(favicon: favicon);
WebViewPage favicon(BrowserIcon? favicon) => this(favicon: favicon);
@override
WebViewPage screenshot(Uint8List? screenshot) => this(screenshot: screenshot);
@@ -93,18 +93,19 @@ class _$WebViewPageCWProxyImpl implements _$WebViewPageCWProxy {
}) {
return WebViewPage(
id: _value.id,
controller: controller == const $CopyWithPlaceholder()
? _value.controller
// ignore: cast_nullable_to_non_nullable
: controller as InAppWebViewController?,
controller:
controller == const $CopyWithPlaceholder() || controller == null
? _value.controller
// ignore: cast_nullable_to_non_nullable
: controller as InvalidType,
url: url == const $CopyWithPlaceholder() || url == null
? _value.url
// ignore: cast_nullable_to_non_nullable
: url as Uri,
sslError: sslError == const $CopyWithPlaceholder()
sslError: sslError == const $CopyWithPlaceholder() || sslError == null
? _value.sslError
// ignore: cast_nullable_to_non_nullable
: sslError as SslError?,
: sslError as InvalidType,
title: title == const $CopyWithPlaceholder()
? _value.title
// ignore: cast_nullable_to_non_nullable
@@ -116,7 +117,7 @@ class _$WebViewPageCWProxyImpl implements _$WebViewPageCWProxy {
favicon: favicon == const $CopyWithPlaceholder()
? _value.favicon
// ignore: cast_nullable_to_non_nullable
: favicon as Favicon?,
: favicon as BrowserIcon?,
screenshot: screenshot == const $CopyWithPlaceholder()
? _value.screenshot
// ignore: cast_nullable_to_non_nullable
@@ -5,8 +5,8 @@ import 'package:flutter/services.dart' show rootBundle;
import 'package:lensai/features/content_block/domain/repositories/host.dart';
import 'package:lensai/features/settings/data/models/settings.dart';
import 'package:lensai/features/settings/data/repositories/settings_repository.dart';
import 'package:lensai/features/topics/domain/providers.dart';
import 'package:lensai/features/topics/domain/repositories/tab.dart';
import 'package:lensai/features/geckoview/features/topics/domain/providers.dart';
import 'package:lensai/features/geckoview/features/topics/domain/repositories/tab_link.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:universal_io/io.dart';
@@ -1,11 +1,11 @@
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:drift/drift.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/core/logger.dart';
import 'package:lensai/features/topics/data/providers.dart';
import 'package:lensai/features/topics/domain/providers.dart';
import 'package:lensai/features/topics/domain/repositories/tab.dart';
import 'package:lensai/features/geckoview/features/topics/data/providers.dart';
import 'package:lensai/features/geckoview/features/topics/domain/providers.dart';
import 'package:lensai/features/geckoview/features/topics/domain/repositories/tab_link.dart';
import 'package:lensai/features/web_view/domain/entities/consistent_controller.dart';
import 'package:lensai/features/web_view/domain/entities/web_view_page.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -1,4 +1,4 @@
import 'package:lensai/features/topics/data/providers.dart';
import 'package:lensai/features/geckoview/features/topics/data/providers.dart';
import 'package:lensai/features/web_view/domain/repositories/web_view.dart';
import 'package:lensai/features/web_view/presentation/services/readerability_script.dart';
import 'package:riverpod/riverpod.dart';
@@ -1,6 +1,5 @@
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:lensai/features/topics/domain/providers.dart';
import 'package:lensai/features/topics/domain/repositories/tab.dart';
import 'package:lensai/features/geckoview/features/topics/domain/providers.dart';
import 'package:lensai/features/geckoview/features/topics/domain/repositories/tab_link.dart';
import 'package:lensai/features/web_view/domain/entities/web_view_page.dart';
import 'package:lensai/features/web_view/domain/repositories/web_view.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -1,4 +1,3 @@
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:lensai/features/settings/data/models/settings.dart';
import 'package:lensai/features/settings/data/repositories/settings_repository.dart';
import 'package:lensai/features/web_view/domain/providers.dart';
@@ -1,50 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:lensai/extensions/web_uri_favicon.dart';
class FaviconImage extends StatelessWidget {
final double size;
final Icon _iconPlaceholder;
final Favicon? favicon;
final Uri url;
FaviconImage({
required this.url,
required this.favicon,
this.size = 16,
super.key,
}) : _iconPlaceholder = Icon(
MdiIcons.webBox,
size: size,
);
@override
Widget build(BuildContext context) {
if (favicon != null) {
return FadeInImage(
placeholder: NetworkImage(
url.genericFavicon().toString(),
),
image: NetworkImage(favicon!.url.toString()),
placeholderErrorBuilder: (_, __, ___) => _iconPlaceholder,
imageErrorBuilder: (_, __, ___) => Image.network(
url.genericFavicon().toString(),
errorBuilder: (_, __, ___) => _iconPlaceholder,
height: size,
width: size,
),
height: size,
width: size,
);
} else {
return Image.network(
url.genericFavicon().toString(),
errorBuilder: (_, __, ___) => _iconPlaceholder,
height: size,
width: size,
);
}
}
}
@@ -1,14 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/domain/entities/web_page_info.dart';
import 'package:lensai/data/models/web_page_info.dart';
import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/bangs/domain/providers.dart';
import 'package:lensai/features/bangs/presentation/widgets/site_search.dart';
import 'package:lensai/features/search_browser/domain/entities/modes.dart';
import 'package:lensai/features/kagi/data/entities/modes.dart';
import 'package:lensai/features/search_browser/utils/url_builder.dart'
as uri_builder;
import 'package:lensai/features/settings/data/models/settings.dart';
@@ -24,14 +24,12 @@ import 'package:share_plus/share_plus.dart';
class WebPageDialog extends HookConsumerWidget {
final Uri url;
final WebPageInfo? precachedInfo;
final InAppWebViewController? webViewController;
final void Function()? onDismiss;
const WebPageDialog({
required this.url,
this.precachedInfo,
this.webViewController,
this.onDismiss,
super.key,
});
@@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/core/logger.dart';
import 'package:lensai/domain/services/generic_website.dart';
import 'package:lensai/features/bangs/domain/providers.dart';
import 'package:lensai/features/chat_archive/domain/entities/chat_entity.dart';
import 'package:lensai/features/chat_archive/domain/repositories/archive.dart';
import 'package:lensai/features/search_browser/domain/entities/modes.dart';
import 'package:lensai/features/kagi/data/entities/modes.dart';
import 'package:lensai/features/search_browser/domain/entities/sheet.dart';
import 'package:lensai/features/search_browser/domain/providers.dart';
import 'package:lensai/features/settings/data/models/settings.dart';
@@ -243,7 +243,7 @@ class _WebViewState extends ConsumerState<WebView> {
if (selectedText != null && selectedText.isNotEmpty) {
ref.read(bottomSheetProvider.notifier).show(
CreateTab(
CreateTabSheet(
content: selectedText,
preferredTool: KagiTool.assistant,
),
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:lensai/features/web_view/domain/entities/abstract/tab.dart';
import 'package:lensai/features/web_view/presentation/widgets/favicon.dart';
import 'package:lensai/features/search_browser/presentation/widgets/favicon.dart';
class WebViewTab extends StatelessWidget {
final ITab tab;
@@ -1,23 +0,0 @@
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
Favicon? choseFavicon(Iterable<Favicon>? favicons, [Favicon? currentIcon]) {
var selectedIcon = currentIcon;
if (favicons != null) {
for (final icon in favicons) {
if (selectedIcon == null) {
selectedIcon = icon;
} else {
if ((selectedIcon.width == null &&
!selectedIcon.url.toString().endsWith("favicon.ico")) ||
(icon.width != null &&
selectedIcon.width != null &&
icon.width! > selectedIcon.width!)) {
selectedIcon = icon;
}
}
}
}
return selectedIcon;
}