-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathicons.js
93 lines (85 loc) · 2.52 KB
/
icons.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
const dir = require('node-dir');
const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
const fse = require('fs-extra');
const got = require('got');
const stream = require('stream');
const { promisify } = require('util');
/**
* Downloads a favion in reverse domain name folder
*/
function downloadFavIcon(url, imgRootDir)
{
const pipeline = promisify(stream.pipeline);
const googleFaviconApi = 'https://s2.googleusercontent.com/s2/favicons?domain_url=';
const imgDir = imgRootDir + url.split("/")[2].split('.').reverse().join('/');
const iconfile = imgDir + "/favicon.png";
fse.ensureDirSync(imgDir);
fs.open(iconfile, 'wx', (err, fd) =>
{
if (err)
{
if (err.code === 'EEXIST')
{
console.log("already exists: " + url);
return;
}
else
{
throw err;
}
}
console.log("Downloading favicon for: " + url);
got(googleFaviconApi + url)
.then(response =>
{
if (response.body.length > 0)
{
pipeline(
got.stream(googleFaviconApi + url),
fs.createWriteStream(iconfile)
);
console.log("Downloaded favicon for: " + url);
/*
pipeline(response.body, fs.createWriteStream(iconfile))
.then(() =>
{
console.log("Downloaded favicon for: " + url);
})
.catch(e => console.error(e)); */
}
})
.catch(e => console.error(e));
});
return url;
}
/**
* Get set of urls out of a text file
*/
function linkify(rawText, imgRootDir)
{
var urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return rawText.replace(urlRegex, function (url)
{
var a = downloadFavIcon(url, imgRootDir);
});
}
/**
* Travese a directory for text files and call linkify on them
*/
function getFavicon(dirs, imgRootDir)
{
dir.promiseFiles(dirs)
.then((files) =>
{
files.map(f =>
{
var r = {};
readFile(f, 'utf8')
.then((file) => { linkify(file, imgRootDir); })
})
})
.catch(e => console.error(e))
}
module.exports = { getFavicon };