-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgnome.js
73 lines (56 loc) · 2.08 KB
/
gnome.js
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const fs = require('fs');
const path = require('path');
const gvfs = require('gvfs-meta-node');
const mime = require('mime-types');
let fetchIcon = (_path) => new Promise((resolve,reject) => {
let metaFile = path.join(process.env.HOME, "/.local/share/gvfs-metadata/home");
gvfs(metaFile)
.then((result) => {
if (Object.keys(result.entries) == 0) {
return reject('No icons found');
}
let newEntries = {};
for (let key of Object.keys(result.entries)) {
let newKey = path.join(process.env.HOME, key);
newEntries = Object.assign({},newEntries,{ [newKey]: result.entries[key] });
}
if (newEntries.hasOwnProperty(_path)) {
if (newEntries[_path].hasOwnProperty('custom-icon')) {
let cleanPath = newEntries[_path]['custom-icon'].substr(7);
let _readFile = (__path) => {
fs.readFile(cleanPath, (err,data) => {
if (err) {
return reject('No icon file found because ' + err);
}
if (/\.svg$/.test(data.toString())) {
let newPath = path.dirname(cleanPath) + '/' + data.toString();
fs.readFile(newPath, (err,newData) => {
if (err) {
return reject('No icon file found because ' + err);
}
let format = mime.lookup(newPath);
resolve({
buffer:newData.toString((format != "image/svg+xml") ? 'base64' : undefined),
format:format
});
});
} else {
let format = mime.lookup(cleanPath);
resolve({
buffer:data.toString((format != "image/svg+xml") ? 'base64' : undefined),
format:mime.lookup(cleanPath)
});
}
});
};
_readFile(cleanPath);
} else {
reject('No custom icon');
}
} else {
reject('No entries');
}
})
.catch((err) => reject(err));
});
module.exports = fetchIcon;