Skip to content

Commit

Permalink
👽 replace dart_algolia with algoliasearch
Browse files Browse the repository at this point in the history
techouse committed Dec 17, 2023
1 parent 99530fc commit 5bdc364
Showing 5 changed files with 164 additions and 136 deletions.
3 changes: 2 additions & 1 deletion bin/main.dart
Original file line number Diff line number Diff line change
@@ -11,7 +11,8 @@ import 'package:alfred_workflow/alfred_workflow.dart'
AlfredItems,
AlfredUpdater,
AlfredWorkflow;
import 'package:algolia/algolia.dart' show AlgoliaQuerySnapshot;
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:stash/stash_api.dart' show CreatedExpiryPolicy;
144 changes: 75 additions & 69 deletions bin/main_helpers.dart
Original file line number Diff line number Diff line change
@@ -27,79 +27,85 @@ const updateItem = AlfredItem(
);

Future<void> _performSearch(String query) async {
final AlgoliaQuerySnapshot snapshot = await AlgoliaSearch.query(query);
try {
final SearchResponse searchResponse = await AlgoliaSearch.query(query);

if (snapshot.nbHits > 0) {
final AlfredItems items = AlfredItems(
await Future.wait(snapshot.hits
.map((snapshot) => SearchResult.fromJson(snapshot.data))
.map((result) async {
final File? image = await EmojiDownloader(
emoji: result.emoji,
).downloadImage();
if (searchResponse.nbHits > 0) {
final AlfredItems items = AlfredItems(
await Future.wait(searchResponse.hits
.map((Hit hit) => SearchResult.fromJson(
<String, dynamic>{...hit, 'objectID': hit.objectID}))
.map((SearchResult result) async {
final File? image = await EmojiDownloader(
emoji: result.emoji,
).downloadImage();

return AlfredItem(
uid: result.objectID,
title: result.code,
subtitle: result.description,
arg: result.code,
match: '${result.name} ${result.description}',
text: AlfredItemText(
copy: result.code,
largeType: result.code,
),
icon: AlfredItemIcon(
path: image != null ? image.absolute.path : 'question.png',
),
mods: {
{AlfredItemModKey.alt}: AlfredItemMod(
subtitle: 'Copy "${result.emoji}" to clipboard',
arg: result.emoji,
icon:
AlfredItemIcon(path: image?.absolute.path ?? 'question.png'),
),
{AlfredItemModKey.shift}: AlfredItemMod(
subtitle: 'Copy Python source of "${result.emoji}" to clipboard',
arg: 'u"\\U000'
'${result.emoji.runes.first.toRadixString(16).toUpperCase()}'
'${result.emoji.runes.toList().sublist(1).map(
(int i) => '\\u${i.toRadixString(16).toUpperCase()}',
).join()}"',
icon:
AlfredItemIcon(path: image?.absolute.path ?? 'question.png'),
return AlfredItem(
uid: result.objectID,
title: result.code,
subtitle: result.description,
arg: result.code,
match: '${result.name} ${result.description}',
text: AlfredItemText(
copy: result.code,
largeType: result.code,
),
{AlfredItemModKey.ctrl}: AlfredItemMod(
subtitle: 'Copy HTML Entity of "${result.emoji}" to clipboard',
arg: result.emoji.runes
.map((int i) => '&#x${i.toRadixString(16)};')
.join(),
icon:
AlfredItemIcon(path: image?.absolute.path ?? 'question.png'),
icon: AlfredItemIcon(
path: image != null ? image.absolute.path : 'question.png',
),
{AlfredItemModKey.ctrl, AlfredItemModKey.shift}: AlfredItemMod(
subtitle:
'Copy formal Unicode notation of "${result.emoji}" to clipboard',
arg: result.emoji.runes
.map((int i) => 'U+${i.toRadixString(16).toUpperCase()}')
.join(', '),
icon:
AlfredItemIcon(path: image?.absolute.path ?? 'question.png'),
),
},
valid: true,
);
}).toList()),
);
_workflow.addItems(items.items);
} else {
_workflow.addItem(
AlfredItem(
title: 'No matching gitmoji found',
icon: AlfredItemIcon(
path: 'question.png',
mods: {
{AlfredItemModKey.alt}: AlfredItemMod(
subtitle: 'Copy "${result.emoji}" to clipboard',
arg: result.emoji,
icon: AlfredItemIcon(
path: image?.absolute.path ?? 'question.png'),
),
{AlfredItemModKey.shift}: AlfredItemMod(
subtitle:
'Copy Python source of "${result.emoji}" to clipboard',
arg: 'u"\\U000'
'${result.emoji.runes.first.toRadixString(16).toUpperCase()}'
'${result.emoji.runes.toList().sublist(1).map(
(int i) => '\\u${i.toRadixString(16).toUpperCase()}',
).join()}"',
icon: AlfredItemIcon(
path: image?.absolute.path ?? 'question.png'),
),
{AlfredItemModKey.ctrl}: AlfredItemMod(
subtitle: 'Copy HTML Entity of "${result.emoji}" to clipboard',
arg: result.emoji.runes
.map((int i) => '&#x${i.toRadixString(16)};')
.join(),
icon: AlfredItemIcon(
path: image?.absolute.path ?? 'question.png'),
),
{AlfredItemModKey.ctrl, AlfredItemModKey.shift}: AlfredItemMod(
subtitle:
'Copy formal Unicode notation of "${result.emoji}" to clipboard',
arg: result.emoji.runes
.map((int i) => 'U+${i.toRadixString(16).toUpperCase()}')
.join(', '),
icon: AlfredItemIcon(
path: image?.absolute.path ?? 'question.png'),
),
},
valid: true,
);
}).toList()),
);
_workflow.addItems(items.items);
} else {
_workflow.addItem(
AlfredItem(
title: 'No matching gitmoji found',
icon: AlfredItemIcon(
path: 'question.png',
),
valid: false,
),
valid: false,
),
);
);
}
} finally {
AlgoliaSearch.dispose();
}
}
29 changes: 15 additions & 14 deletions bin/src/services/algolia_search.dart
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
import 'package:algolia/algolia.dart'
show Algolia, AlgoliaQuery, AlgoliaQuerySnapshot;
import 'package:algoliasearch/algoliasearch_lite.dart';

import '../env/env.dart';
import '../models/search_result.dart';

class AlgoliaSearch {
AlgoliaSearch._();
const AlgoliaSearch._();

static final Algolia _algolia = Algolia.init(
applicationId: Env.algoliaApplicationId,
static final SearchClient _client = SearchClient(
appId: Env.algoliaApplicationId,
apiKey: Env.algoliaSearchOnlyApiKey,
);

static Future<AlgoliaQuerySnapshot> query(String queryString) async {
final AlgoliaQuery query = _algolia.instance
.index(Env.algoliaSearchIndex)
.query(queryString)
.setAttributesToRetrieve(SearchResult.attributesToRetrieve)
.setPage(0)
.setHitsPerPage(100);
static Future<SearchResponse> query(String queryString) =>
_client.searchIndex(
request: SearchForHits(
indexName: Env.algoliaSearchIndex,
query: queryString,
attributesToRetrieve: SearchResult.attributesToRetrieve,
page: 0,
hitsPerPage: 100,
),
);

return await query.getObjects();
}
static dispose() => _client.dispose();
}
Loading

0 comments on commit 5bdc364

Please sign in to comment.