implement user bangs
This commit is contained in:
@@ -21,6 +21,7 @@ import 'package:copy_with_extension/copy_with_extension.dart';
|
||||
import 'package:drift/drift.dart' show Expression, Insertable, Value;
|
||||
import 'package:fast_equatable/fast_equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:weblibre/extensions/uri.dart';
|
||||
import 'package:weblibre/features/bangs/data/database/definitions.drift.dart';
|
||||
import 'package:weblibre/features/bangs/data/models/bang_group.dart';
|
||||
|
||||
@@ -83,6 +84,8 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
@JsonKey(name: 'ts')
|
||||
final Set<String>? additionalTriggers;
|
||||
|
||||
final bool searxngApi;
|
||||
|
||||
String formatQuery(String input) {
|
||||
return (format == null ||
|
||||
format!.contains(BangFormat.urlEncodePlaceholder) == true)
|
||||
@@ -92,6 +95,7 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
: Uri.encodeComponent(input)
|
||||
: input;
|
||||
}
|
||||
|
||||
Uri getDefaultUrl() {
|
||||
return getTemplateUrl('');
|
||||
}
|
||||
@@ -108,6 +112,10 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
).replace(path: template.path, query: template.query);
|
||||
}
|
||||
|
||||
if (format?.contains(BangFormat.openBasePath) == true) {
|
||||
return template.base;
|
||||
}
|
||||
|
||||
return template;
|
||||
}
|
||||
|
||||
@@ -124,6 +132,7 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
required this.domain,
|
||||
required this.trigger,
|
||||
required this.urlTemplate,
|
||||
required this.searxngApi,
|
||||
this.group,
|
||||
this.category,
|
||||
this.subCategory,
|
||||
@@ -146,6 +155,7 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
subCategory,
|
||||
format,
|
||||
additionalTriggers,
|
||||
searxngApi,
|
||||
];
|
||||
|
||||
@override
|
||||
|
||||
@@ -15,6 +15,8 @@ abstract class _$BangCWProxy {
|
||||
|
||||
Bang urlTemplate(String urlTemplate);
|
||||
|
||||
Bang searxngApi(bool searxngApi);
|
||||
|
||||
Bang group(BangGroup? group);
|
||||
|
||||
Bang category(String? category);
|
||||
@@ -37,6 +39,7 @@ abstract class _$BangCWProxy {
|
||||
String domain,
|
||||
String trigger,
|
||||
String urlTemplate,
|
||||
bool searxngApi,
|
||||
BangGroup? group,
|
||||
String? category,
|
||||
String? subCategory,
|
||||
@@ -64,6 +67,9 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
|
||||
@override
|
||||
Bang urlTemplate(String urlTemplate) => call(urlTemplate: urlTemplate);
|
||||
|
||||
@override
|
||||
Bang searxngApi(bool searxngApi) => call(searxngApi: searxngApi);
|
||||
|
||||
@override
|
||||
Bang group(BangGroup? group) => call(group: group);
|
||||
|
||||
@@ -93,6 +99,7 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
|
||||
Object? domain = const $CopyWithPlaceholder(),
|
||||
Object? trigger = const $CopyWithPlaceholder(),
|
||||
Object? urlTemplate = const $CopyWithPlaceholder(),
|
||||
Object? searxngApi = const $CopyWithPlaceholder(),
|
||||
Object? group = const $CopyWithPlaceholder(),
|
||||
Object? category = const $CopyWithPlaceholder(),
|
||||
Object? subCategory = const $CopyWithPlaceholder(),
|
||||
@@ -118,6 +125,11 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
|
||||
? _value.urlTemplate
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: urlTemplate as String,
|
||||
searxngApi:
|
||||
searxngApi == const $CopyWithPlaceholder() || searxngApi == null
|
||||
? _value.searxngApi
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: searxngApi as bool,
|
||||
group: group == const $CopyWithPlaceholder()
|
||||
? _value.group
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
@@ -158,6 +170,7 @@ Bang _$BangFromJson(Map<String, dynamic> json) => Bang(
|
||||
domain: json['d'] as String,
|
||||
trigger: json['t'] as String,
|
||||
urlTemplate: json['u'] as String,
|
||||
searxngApi: json['searxngApi'] as bool,
|
||||
category: json['c'] as String?,
|
||||
subCategory: json['sc'] as String?,
|
||||
format: (json['fmt'] as List<dynamic>?)
|
||||
@@ -177,6 +190,7 @@ Map<String, dynamic> _$BangToJson(Bang instance) => <String, dynamic>{
|
||||
'sc': instance.subCategory,
|
||||
'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(),
|
||||
'ts': instance.additionalTriggers?.toList(),
|
||||
'searxngApi': instance.searxngApi,
|
||||
};
|
||||
|
||||
const _$BangFormatEnumMap = {
|
||||
|
||||
@@ -41,6 +41,7 @@ class BangData extends Bang {
|
||||
required super.trigger,
|
||||
required super.urlTemplate,
|
||||
required super.group,
|
||||
required super.searxngApi,
|
||||
super.category,
|
||||
super.subCategory,
|
||||
super.format,
|
||||
@@ -56,6 +57,7 @@ class BangData extends Bang {
|
||||
required super.domain,
|
||||
required super.trigger,
|
||||
required super.urlTemplate,
|
||||
required super.searxngApi,
|
||||
super.category,
|
||||
super.subCategory,
|
||||
super.format,
|
||||
|
||||
@@ -15,6 +15,8 @@ abstract class _$BangDataCWProxy {
|
||||
|
||||
BangData urlTemplate(String urlTemplate);
|
||||
|
||||
BangData searxngApi(bool searxngApi);
|
||||
|
||||
BangData category(String? category);
|
||||
|
||||
BangData subCategory(String? subCategory);
|
||||
@@ -41,6 +43,7 @@ abstract class _$BangDataCWProxy {
|
||||
String domain,
|
||||
String trigger,
|
||||
String urlTemplate,
|
||||
bool searxngApi,
|
||||
String? category,
|
||||
String? subCategory,
|
||||
Set<BangFormat>? format,
|
||||
@@ -70,6 +73,9 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
|
||||
@override
|
||||
BangData urlTemplate(String urlTemplate) => call(urlTemplate: urlTemplate);
|
||||
|
||||
@override
|
||||
BangData searxngApi(bool searxngApi) => call(searxngApi: searxngApi);
|
||||
|
||||
@override
|
||||
BangData category(String? category) => call(category: category);
|
||||
|
||||
@@ -105,6 +111,7 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
|
||||
Object? domain = const $CopyWithPlaceholder(),
|
||||
Object? trigger = const $CopyWithPlaceholder(),
|
||||
Object? urlTemplate = const $CopyWithPlaceholder(),
|
||||
Object? searxngApi = const $CopyWithPlaceholder(),
|
||||
Object? category = const $CopyWithPlaceholder(),
|
||||
Object? subCategory = const $CopyWithPlaceholder(),
|
||||
Object? format = const $CopyWithPlaceholder(),
|
||||
@@ -132,6 +139,11 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
|
||||
? _value.urlTemplate
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: urlTemplate as String,
|
||||
searxngApi:
|
||||
searxngApi == const $CopyWithPlaceholder() || searxngApi == null
|
||||
? _value.searxngApi
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: searxngApi as bool,
|
||||
category: category == const $CopyWithPlaceholder()
|
||||
? _value.category
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
|
||||
@@ -33,14 +33,10 @@ enum BangGroup {
|
||||
'https://raw.githubusercontent.com/FaFre/bangs/main/data/kagi_bangs.json',
|
||||
bundled: 'assets/bangs/kagi_bangs.json',
|
||||
),
|
||||
custom(
|
||||
remote:
|
||||
'https://raw.githubusercontent.com/FaFre/bangs/refs/heads/custom/data/custom.json',
|
||||
bundled: 'assets/bangs/custom.json',
|
||||
);
|
||||
user(remote: null, bundled: null);
|
||||
|
||||
final String bundled;
|
||||
final String remote;
|
||||
final String? bundled;
|
||||
final String? remote;
|
||||
|
||||
const BangGroup({required this.bundled, required this.remote});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user