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