summaryrefslogtreecommitdiff
path: root/services/Emoji.qml
blob: 697840bc47f09895a1e56d6a35789b597070b31a (plain)
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
pragma Singleton

import Quickshell
import Quickshell.Io
import QtQuick
import qs.components

Searchable {
	id: root

	property var _emojis: []
	property var _emojiFile: FileView {
		path: "/usr/share/rofi-emoji/all_emojis.txt"
		onTextChanged: _parseEmojis()
	}

	list: _emojis
	keys: ["name", "keywords", "category", "subcategory", "emoji"]
	algorithm: Searchable.SearchAlgorithm.Include

	function transformSearch(search) {
		return search.toLowerCase();
	}

	function _parseEmojis() {
		const text = _emojiFile.text();
		if (!text) {
			console.warn("Emoji service: failed to load", _emojiFile.path);
			_emojis = [];
			return;
		}

		const lines = text.split("\n").filter(l => l.trim());
		const out = [];
		for (let i = 0; i < lines.length; ++i) {
			const parts = lines[i].split("\t");
			if (parts.length < 5)
				continue;
			const [emoji, category, subcategory, name, keywords] = parts;
			out.push({
				emoji: emoji,
				category: category,
				subcategory: subcategory,
				name: name,
				keywords: keywords
			});
		}
		_emojis = out;
	}

	function copy(emoji) {
		Clip.copy(emoji);
	}
}