intermediate

This commit is contained in:
Fabian Freund
2024-12-12 09:44:33 +01:00
parent 0710116feb
commit 6b2ae28828
108 changed files with 5531 additions and 2265 deletions
+55 -45
View File
@@ -10,8 +10,8 @@ import 'package:http/http.dart' as http;
import 'package:lensai/core/http_error_handler.dart';
import 'package:lensai/data/models/web_page_info.dart';
import 'package:lensai/features/geckoview/domain/entities/browser_icon.dart';
import 'package:lensai/utils/lru_cache.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:universal_io/io.dart';
part 'generic_website.g.dart';
@@ -56,11 +56,11 @@ class GenericWebsiteService extends _$GenericWebsiteService {
late http.Client _client;
final Map<String, bool> _httpsCache;
final LRUCache<String, BrowserIcon> _iconCache;
GenericWebsiteService()
: _httpsCache = {},
_iconsService = GeckoIconService();
: _iconsService = GeckoIconService(),
_iconCache = LRUCache(50);
@override
void build() {
@@ -207,49 +207,59 @@ class GenericWebsiteService extends _$GenericWebsiteService {
required Uri url,
List<Resource> resources = const [],
}) async {
final result = await _iconsService.loadIcon(url: url, resources: resources);
return BrowserIcon.fromBytes(
result.image,
dominantColor: (result.color != null) ? Color(result.color!) : null,
source: result.source,
);
}
final cached = _iconCache.get(url.host);
if (cached == null) {
final result =
await _iconsService.loadIcon(url: url, resources: resources);
Future<Uri?> tryUpgradeToHttps(Uri httpUri) async {
if (httpUri.isScheme('https')) {
return httpUri;
} else if (httpUri.isScheme('http')) {
final cached = _httpsCache[httpUri.host];
if (cached != null) {
return cached ? httpUri.replace(scheme: 'https') : null;
}
var sslAvailable = false;
try {
final context = SecurityContext.defaultContext;
final socket = await SecureSocket.connect(
httpUri.host,
443,
context: context,
timeout: const Duration(seconds: 3),
);
await socket.close();
sslAvailable = true;
} catch (_) {
sslAvailable = false;
}
_httpsCache[httpUri.host] = sslAvailable;
if (sslAvailable) {
return httpUri.replace(scheme: 'https');
}
return _iconCache.set(
url.host,
await BrowserIcon.fromBytes(
result.image,
dominantColor: (result.color != null) ? Color(result.color!) : null,
source: result.source,
),
);
}
return null;
return cached;
}
// Future<Uri?> tryUpgradeToHttps(Uri httpUri) async {
// if (httpUri.isScheme('https')) {
// return httpUri;
// } else if (httpUri.isScheme('http')) {
// final cached = _httpsCache[httpUri.host];
// if (cached != null) {
// return cached ? httpUri.replace(scheme: 'https') : null;
// }
// var sslAvailable = false;
// try {
// final context = SecurityContext.defaultContext;
// final socket = await SecureSocket.connect(
// httpUri.host,
// 443,
// context: context,
// timeout: const Duration(seconds: 3),
// );
// await socket.close();
// sslAvailable = true;
// } catch (_) {
// sslAvailable = false;
// }
// _httpsCache[httpUri.host] = sslAvailable;
// if (sslAvailable) {
// return httpUri.replace(scheme: 'https');
// }
// }
// return null;
// }
}
@@ -7,7 +7,7 @@ part of 'generic_website.dart';
// **************************************************************************
String _$genericWebsiteServiceHash() =>
r'0b1d953fe1b30b9dd0396df34e6176424cdaf941';
r'7dea42d6914b0f06250a96bb425ba10a331ef0d3';
/// See also [GenericWebsiteService].
@ProviderFor(GenericWebsiteService)