blob: 5918f31c6a10226a77d34d9f357b6c3b78654e25 (
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
55
56
|
import icons from "lib/icons"
import { bash, dependencies } from "lib/utils"
const COLORS_CACHE = Utils.CACHE_DIR + "/colorpicker.json"
const MAX_NUM_COLORS = 10
class ColorPicker extends Service {
static {
Service.register(this, {}, {
"colors": ["jsobject"],
})
}
#notifID = 0
#colors = JSON.parse(Utils.readFile(COLORS_CACHE) || "[]") as string[]
get colors() { return [...this.#colors] }
set colors(colors) {
this.#colors = colors
this.changed("colors")
}
// TODO: doesn't work?
async wlCopy(color: string) {
if (dependencies("wl-copy"))
bash(`wl-copy ${color}`)
}
readonly pick = async () => {
if (!dependencies("hyprpicker"))
return
const color = await bash("hyprpicker -a -r")
if (!color)
return
this.wlCopy(color)
const list = this.colors
if (!list.includes(color)) {
list.push(color)
if (list.length > MAX_NUM_COLORS)
list.shift()
this.colors = list
Utils.writeFile(JSON.stringify(list, null, 2), COLORS_CACHE)
}
this.#notifID = await Utils.notify({
id: this.#notifID,
iconName: icons.ui.colorpicker,
summary: color,
})
}
}
export default new ColorPicker
|