๐Ÿ“ฆ techouse / alfred-react-docs

๐Ÿ“„ main.dart ยท 111 lines
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();
        }
      }
    }
  });
}