1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111import 'dart:io' show exitCode, stdout;
import 'package:alfred_workflow/alfred_workflow.dart';
import 'package:algoliasearch/src/model/hit.dart';
import 'package:algoliasearch/src/model/search_response.dart';
import 'package:args/args.dart' show ArgParser, ArgResults;
import 'package:cli_script/cli_script.dart';
import 'package:html_unescape/html_unescape.dart';
import 'src/env/env.dart';
import 'src/extensions/string_helpers.dart' show StringHelpers;
import 'src/models/search_result.dart' show SearchResult;
import 'src/models/user_config_key.dart' show UserConfigKey;
import 'src/services/algolia_search.dart' show AlgoliaSearch;
part 'main_helpers.dart';
bool _verbose = false;
bool _update = false;
void main(List<String> arguments) {
wrapMain(() async {
try {
exitCode = 0;
_workflow.clearItems();
final ArgParser parser = ArgParser()
..addOption('query', abbr: 'q', defaultsTo: '')
..addFlag('verbose', abbr: 'v', defaultsTo: false)
..addFlag('update', abbr: 'u', defaultsTo: false);
final ArgResults args = parser.parse(arguments);
_update = args['update'];
if (_update) {
stdout.writeln('Updating workflow...');
return await _updater.update();
}
_verbose = args['verbose'];
final Map<String, AlfredUserConfiguration>? userDefaults = await _workflow
.getUserDefaults();
final AlfredUserConfigurationCheckBox? useFileCache =
userDefaults?[UserConfigKey.useFileCache.toString()]
as AlfredUserConfigurationCheckBox?;
final AlfredUserConfigurationNumberSlider? fileCacheMaxEntries =
userDefaults?[UserConfigKey.fileCacheMaxEntries.toString()]
as AlfredUserConfigurationNumberSlider?;
final AlfredUserConfigurationCheckBox? useAlfredCache =
userDefaults?[UserConfigKey.useAlfredCache.toString()]
as AlfredUserConfigurationCheckBox?;
final AlfredUserConfigurationNumberSlider? cacheTimeToLive =
userDefaults?[UserConfigKey.cacheTtl.toString()]
as AlfredUserConfigurationNumberSlider?;
final String queryString = args['query']
.replaceAll(RegExp(r'\s+'), ' ')
.trim()
.split(' ')
.join(' ')
.trim()
.toLowerCase();
if (_verbose) stdout.writeln('Query: "$queryString"');
if (useAlfredCache?.value ?? false) {
_workflow.useAutomaticCache = true;
} else if (useFileCache?.value ?? false) {
_workflow.maxCacheEntries =
fileCacheMaxEntries?.value ?? fileCacheMaxEntries?.defaultValue;
}
_workflow.cacheTimeToLive = cacheTimeToLive?.value;
if (queryString.isEmpty) {
_showPlaceholder();
} else {
if (useFileCache?.value ?? false) {
_workflow.cacheKey = queryString;
}
if ((await _workflow.getItems()).isEmpty) {
await _performSearch(queryString);
}
}
} on FormatException catch (err) {
exitCode = 2;
_workflow.addItem(AlfredItem(title: err.toString()));
} catch (err) {
exitCode = 1;
_workflow.addItem(AlfredItem(title: err.toString()));
if (_verbose) {
rethrow;
}
} finally {
if (!_update) {
if (await _updater.updateAvailable()) {
_workflow.run(addToBeginning: updateItem);
} else {
_workflow.run();
}
}
}
});
}