1- void main (List <String > arguments) async {
2- // TODO
3- }
1+ // ignore_for_file: long-method
2+
3+ import 'dart:io' show exitCode, stdout;
4+
5+ import 'package:alfred_workflow/alfred_workflow.dart' ;
6+ import 'package:args/args.dart' ;
7+ import 'package:chopper/chopper.dart' ;
8+ import 'package:cli_script/cli_script.dart' ;
9+ import 'package:collection/collection.dart' ;
10+ import 'package:html_unescape/html_unescape.dart' ;
11+ import 'package:stash/stash_api.dart' ;
12+
13+ import 'src/api/api.dart' ;
14+ import 'src/env/env.dart' ;
15+ import 'src/extensions/string_helpers.dart' ;
16+ import 'src/models/item_list.dart' ;
17+ import 'src/models/question.dart' ;
18+
19+ part 'main_helpers.dart' ;
20+
21+ bool _verbose = false ;
22+ bool _update = false ;
23+
24+ void main (List <String > arguments) {
25+ wrapMain (() async {
26+ try {
27+ exitCode = 0 ;
28+
29+ _workflow.clearItems ();
30+
31+ final ArgParser parser = ArgParser ()
32+ ..addOption ('query' , abbr: 'q' , defaultsTo: '' )
33+ ..addOption ('delay' , abbr: 'd' , defaultsTo: '0' )
34+ ..addFlag ('verbose' , abbr: 'v' , defaultsTo: false )
35+ ..addFlag ('update' , abbr: 'u' , defaultsTo: false );
36+ final ArgResults args = parser.parse (arguments);
37+
38+ int ? delay = int .tryParse (args['delay' ]);
39+ if (delay != null && delay > 0 ) {
40+ await Future .delayed (Duration (milliseconds: delay));
41+ }
42+
43+ _update = args['update' ];
44+ if (_update) {
45+ stdout.writeln ('Updating workflow...' );
46+
47+ return await _updater.update ();
48+ }
49+
50+ _verbose = args['verbose' ];
51+
52+ final List <String > query =
53+ args['query' ].replaceAll (RegExp (r'\s+' ), ' ' ).trim ().split (' ' );
54+
55+ final Set <String > tags = (query
56+ .where ((String el) => el.startsWith ('.' ))
57+ .map ((String el) => el.substring (1 ))
58+ .toList ()
59+ ..sort ())
60+ .toSet ();
61+
62+ final String queryString = query
63+ .whereNot ((String el) => el.startsWith ('.' ))
64+ .join (' ' )
65+ .trim ()
66+ .toLowerCase ();
67+
68+ if (_verbose) stdout.writeln ('Query: "$queryString "' );
69+
70+ if (queryString.isEmpty) {
71+ _showPlaceholder ();
72+ } else {
73+ _workflow.cacheKey = tags.isNotEmpty
74+ ? '${queryString }_${tags .join ('.' ).md5hex }'
75+ : queryString;
76+ if (await _workflow.getItems () == null ) {
77+ await _performSearch (query: queryString, tags: tags);
78+ }
79+ }
80+ } on FormatException catch (err) {
81+ exitCode = 2 ;
82+ _workflow.addItem (AlfredItem (title: err.toString ()));
83+ } catch (err) {
84+ exitCode = 1 ;
85+ _workflow.addItem (AlfredItem (title: err.toString ()));
86+ if (_verbose) rethrow ;
87+ } finally {
88+ if (! _update) {
89+ if (await _updater.updateAvailable ()) {
90+ _workflow.run (addToBeginning: updateItem);
91+ } else {
92+ _workflow.run ();
93+ }
94+ }
95+ }
96+ });
97+ }
0 commit comments