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
|
const { Gio, Gdk, Gtk } = imports.gi;
function fileExists(filePath) {
let file = Gio.File.new_for_path(filePath);
return file.query_exists(null);
}
//计算多个数组的笛卡尔积
function cartesianProduct(arrays) {
if (arrays.length === 0) {
return [[]];
}
const [head, ...tail] = arrays;
const tailCartesian = cartesianProduct(tail);
const result = [];
for (const item of head) {
for (const tailItem of tailCartesian) {
result.push([item, ...tailItem]);
}
}
return result;
}
export const find_icon = app_class => {
//主题路径 x 可能的尺寸大小 x apps x app的名称 x icon文件类型
const themPath = [
['/usr/share/icons/WhiteSur/', '/usr/share/icons/WhiteSur-dark/'],
['512x512/', '128x128/', '64x64/', '96x96/', '72x72/', '48x48/', '36x36/'],
['apps/', ''],
[app_class + '.png', app_class + '.svg', app_class + '.xpm'],
];
let real_path = '';
const all_icon_dir = cartesianProduct(themPath);
for (let index = 0; index < all_icon_dir.length; index++) {
const pathItem = all_icon_dir[index];
const icon_path = pathItem.join('');
if (fileExists(icon_path)) {
real_path = icon_path;
break;
}
}
return real_path;
};
|