add search fragment

This commit is contained in:
Andrew 2022-09-13 11:13:17 +07:00
parent 72a46116b3
commit 4833b5c18c
8 changed files with 542 additions and 6 deletions

View file

@ -26,12 +26,56 @@ Future<List<String>> getScoopBuckets() async {
return buckets;
}
Future<List<ScoopAppModel>> searchScoopApps(String query) async {
Future<Map<String, List<ScoopAppModel>>> searchInstallableApps(
String query) async {
final home = Platform.environment["UserProfile"];
final buckets = await getScoopBuckets();
final apps = <ScoopAppModel>[];
Map<String, List<ScoopAppModel>> bucketMap = {};
for (final bucket in buckets) {
final apps = <ScoopAppModel>[];
final bucketDir = Directory("$home/scoop/buckets/$bucket/bucket");
final files = bucketDir.listSync().whereType<File>().where(
(element) =>
element.path.endsWith(".json") ||
element.path.endsWith(".yml") ||
element.path.endsWith(".yaml"),
);
for (final file in files) {
final content = await file.readAsString();
final data =
file.path.endsWith(".json") ? jsonDecode(content) : loadYaml(content);
String appName =
file.path.split("\\").last.replaceAll(RegExp(r"\.(json|ya?ml)"), "");
String appDescription = data["description"] ?? "No description";
DateTime appUpdatedAt = await file.lastModified();
if (appName.toLowerCase().contains(query.toLowerCase()) ||
appDescription.toLowerCase().contains(query.toLowerCase())) {
apps.add(ScoopAppModel(
name: appName,
description: appDescription,
bucket: bucket,
updatedAt: appUpdatedAt,
));
}
}
bucketMap[bucket] = apps;
}
return bucketMap;
}
Future<Map<String, List<ScoopAppModel>>> getAllInstallableApps() async {
final home = Platform.environment["UserProfile"];
final buckets = await getScoopBuckets();
Map<String, List<ScoopAppModel>> bucketMap = {};
for (final bucket in buckets) {
final apps = <ScoopAppModel>[];
final bucketDir = Directory("$home/scoop/buckets/$bucket/bucket");
final files = bucketDir.listSync().whereType<File>().where(
(element) =>
@ -56,9 +100,10 @@ Future<List<ScoopAppModel>> searchScoopApps(String query) async {
updatedAt: appUpdatedAt,
));
}
bucketMap[bucket] = apps;
}
return apps;
return bucketMap;
}
Future<List<ScoopAppModel>> getInstalledScoopApps() async {
@ -98,3 +143,11 @@ Future<List<ScoopAppModel>> getInstalledScoopApps() async {
return apps;
}
Future<bool> checkAppInstalled(ScoopAppModel app) async {
final home = Platform.environment["UserProfile"];
final scoopAppsDir = Directory("$home/scoop/apps");
final appDir = Directory("${scoopAppsDir.path}/${app.name}");
return await appDir.exists();
}