mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-20 05:19:28 +02:00
Added category filter
This commit is contained in:
@@ -177,20 +177,8 @@ class _AppPageState extends State<AppPage> {
|
|||||||
title: 'Pick a Category',
|
title: 'Pick a Category',
|
||||||
items: [
|
items: [
|
||||||
[
|
[
|
||||||
GeneratedFormItem(
|
settingsProvider
|
||||||
'category', // TODO
|
.getCategoryFormItem()
|
||||||
label: 'Category',
|
|
||||||
opts: [
|
|
||||||
MapEntry('',
|
|
||||||
'No Category'),
|
|
||||||
...categories
|
|
||||||
.entries
|
|
||||||
.map((e) =>
|
|
||||||
MapEntry(
|
|
||||||
e.key,
|
|
||||||
e.key))
|
|
||||||
.toList()
|
|
||||||
])
|
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}).then((value) {
|
}).then((value) {
|
||||||
|
@@ -80,28 +80,31 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
!(filter!.includeNonInstalled)) {
|
!(filter!.includeNonInstalled)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (filter!.nameFilter.isEmpty && filter!.authorFilter.isEmpty) {
|
if (filter!.nameFilter.isNotEmpty || filter!.authorFilter.isNotEmpty) {
|
||||||
return true;
|
List<String> nameTokens = filter!.nameFilter
|
||||||
}
|
.split(' ')
|
||||||
List<String> nameTokens = filter!.nameFilter
|
.where((element) => element.trim().isNotEmpty)
|
||||||
.split(' ')
|
.toList();
|
||||||
.where((element) => element.trim().isNotEmpty)
|
List<String> authorTokens = filter!.authorFilter
|
||||||
.toList();
|
.split(' ')
|
||||||
List<String> authorTokens = filter!.authorFilter
|
.where((element) => element.trim().isNotEmpty)
|
||||||
.split(' ')
|
.toList();
|
||||||
.where((element) => element.trim().isNotEmpty)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
for (var t in nameTokens) {
|
for (var t in nameTokens) {
|
||||||
var name = app.installedInfo?.name ?? app.app.name;
|
var name = app.installedInfo?.name ?? app.app.name;
|
||||||
if (!name.toLowerCase().contains(t.toLowerCase())) {
|
if (!name.toLowerCase().contains(t.toLowerCase())) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var t in authorTokens) {
|
||||||
|
if (!app.app.author.toLowerCase().contains(t.toLowerCase())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var t in authorTokens) {
|
if (filter!.categoryFilter.isNotEmpty &&
|
||||||
if (!app.app.author.toLowerCase().contains(t.toLowerCase())) {
|
filter!.categoryFilter != app.app.category) {
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}).toList();
|
}).toList();
|
||||||
@@ -726,6 +729,10 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
label: tr('nonInstalledApps'),
|
label: tr('nonInstalledApps'),
|
||||||
type: FormItemType.bool,
|
type: FormItemType.bool,
|
||||||
defaultValue: vals['nonInstalledApps'])
|
defaultValue: vals['nonInstalledApps'])
|
||||||
|
], // TODO
|
||||||
|
[
|
||||||
|
settingsProvider.getCategoryFormItem(
|
||||||
|
initCategory: vals['category'] ?? '')
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}).then((values) {
|
}).then((values) {
|
||||||
@@ -752,19 +759,22 @@ class AppsFilter {
|
|||||||
late String authorFilter;
|
late String authorFilter;
|
||||||
late bool includeUptodate;
|
late bool includeUptodate;
|
||||||
late bool includeNonInstalled;
|
late bool includeNonInstalled;
|
||||||
|
late String categoryFilter;
|
||||||
|
|
||||||
AppsFilter(
|
AppsFilter(
|
||||||
{this.nameFilter = '',
|
{this.nameFilter = '',
|
||||||
this.authorFilter = '',
|
this.authorFilter = '',
|
||||||
this.includeUptodate = true,
|
this.includeUptodate = true,
|
||||||
this.includeNonInstalled = true});
|
this.includeNonInstalled = true,
|
||||||
|
this.categoryFilter = ''});
|
||||||
|
|
||||||
Map<String, String> toValuesMap() {
|
Map<String, String> toValuesMap() {
|
||||||
return {
|
return {
|
||||||
'appName': nameFilter,
|
'appName': nameFilter,
|
||||||
'author': authorFilter,
|
'author': authorFilter,
|
||||||
'upToDateApps': includeUptodate ? 'true' : '',
|
'upToDateApps': includeUptodate ? 'true' : '',
|
||||||
'nonInstalledApps': includeNonInstalled ? 'true' : ''
|
'nonInstalledApps': includeNonInstalled ? 'true' : '',
|
||||||
|
'category': categoryFilter
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -773,11 +783,13 @@ class AppsFilter {
|
|||||||
authorFilter = values['author']!;
|
authorFilter = values['author']!;
|
||||||
includeUptodate = values['upToDateApps'] == 'true';
|
includeUptodate = values['upToDateApps'] == 'true';
|
||||||
includeNonInstalled = values['nonInstalledApps'] == 'true';
|
includeNonInstalled = values['nonInstalledApps'] == 'true';
|
||||||
|
categoryFilter = values['category']!;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isIdenticalTo(AppsFilter other) =>
|
bool isIdenticalTo(AppsFilter other) =>
|
||||||
authorFilter.trim() == other.authorFilter.trim() &&
|
authorFilter.trim() == other.authorFilter.trim() &&
|
||||||
nameFilter.trim() == other.nameFilter.trim() &&
|
nameFilter.trim() == other.nameFilter.trim() &&
|
||||||
includeUptodate == other.includeUptodate &&
|
includeUptodate == other.includeUptodate &&
|
||||||
includeNonInstalled == other.includeNonInstalled;
|
includeNonInstalled == other.includeNonInstalled &&
|
||||||
|
categoryFilter.trim() == other.categoryFilter.trim();
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:obtainium/app_sources/github.dart';
|
import 'package:obtainium/app_sources/github.dart';
|
||||||
|
import 'package:obtainium/components/generated_form.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
@@ -153,4 +154,13 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
set categories(Map<String, int> cats) {
|
set categories(Map<String, int> cats) {
|
||||||
prefs?.setString('categories', jsonEncode(cats));
|
prefs?.setString('categories', jsonEncode(cats));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCategoryFormItem({String initCategory = ''}) =>
|
||||||
|
GeneratedFormItem('category', // TODO
|
||||||
|
label: 'Category',
|
||||||
|
opts: [
|
||||||
|
const MapEntry('', 'No Category'),
|
||||||
|
...categories.entries.map((e) => MapEntry(e.key, e.key)).toList()
|
||||||
|
],
|
||||||
|
defaultValue: initCategory);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user