Files: cff1ce4ef0234ffea6f8f9905ebc1e0c54c58288 / index.js
2118 bytesRaw
1 | const xhr = require('xhr') |
2 | |
3 | patchworkDownloader() |
4 | |
5 | function patchworkDownloader () { |
6 | const platformEl = document.querySelector('main .platform') |
7 | const versionEl = document.querySelector('main .version') |
8 | const urlEl = document.querySelector('main .url') |
9 | const assetEl = document.querySelector('main .asset') |
10 | |
11 | const platform = getPlatform(navigator.platform) |
12 | console.log('platform', platform) |
13 | platformEl.textContent = platform |
14 | |
15 | getLatestRelease(function (err, release) { |
16 | if (err) throw err |
17 | |
18 | console.log('release', release) |
19 | |
20 | versionEl.textContent = release.version |
21 | urlEl.textContent = release.url |
22 | urlEl.href = release.url |
23 | assetEl.textContent = release.assets[platform] |
24 | assetEl.href = release.assets[platform] |
25 | }) |
26 | } |
27 | |
28 | function getPlatform (platform) { |
29 | if (platform.substring(0, 3).toUpperCase() === 'MAC') |
30 | return 'mac' |
31 | if (platform.substring(0, 3).toUpperCase() === 'WIN') |
32 | return 'windows' |
33 | if (platform.substring(0, 5).toUpperCase() === 'LINUX') |
34 | return 'linux' |
35 | return null |
36 | } |
37 | |
38 | |
39 | function getLatestRelease (options, cb) { |
40 | if (!cb) { |
41 | cb = options |
42 | options = {} |
43 | } |
44 | |
45 | const { |
46 | base = 'https://api.github.com/repos/', |
47 | target = '/releases/latest', |
48 | owner = 'ssbc', |
49 | repo = 'patchwork' |
50 | } = options |
51 | |
52 | xhr({ |
53 | url: `${base}${owner}/${repo}${target}`, |
54 | responseType: 'json' |
55 | }, function (err, res, body) { |
56 | if (err) return cb(err) |
57 | |
58 | const { |
59 | tag_name: version, |
60 | html_url: url |
61 | } = body |
62 | |
63 | const assets = findAssetUrls(body.assets) |
64 | |
65 | cb(null, { |
66 | version, |
67 | url, |
68 | assets |
69 | }) |
70 | }) |
71 | } |
72 | |
73 | const executablesByPlatform = { |
74 | mac: [ |
75 | 'dmg' |
76 | ], |
77 | windows: [ |
78 | 'exe' |
79 | ], |
80 | linux: [ |
81 | 'AppImage' |
82 | ] |
83 | } |
84 | |
85 | function findAssetUrls (assets) { |
86 | var urls = {} |
87 | assets.forEach(asset => { |
88 | const url = asset.browser_download_url |
89 | var extension = url.split('.') |
90 | extension = extension[extension.length - 1] |
91 | for (var platform in executablesByPlatform) { |
92 | if (~executablesByPlatform[platform].indexOf(extension)) { |
93 | urls[platform] = url |
94 | return |
95 | } |
96 | } |
97 | }) |
98 | return urls |
99 | } |
100 |
Built with git-ssb-web