checkUpdate.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /**
  2. * @author oldj
  3. * @blog http://oldj.net
  4. */
  5. 'use strict'
  6. const request = require('superagent')
  7. const cheerio = require('cheerio')
  8. const {shell, dialog} = require('electron')
  9. const current_version = require('../version').version
  10. const m_lang = require('../server/lang')
  11. const lang = m_lang.getLang(global.user_language)
  12. const svr = require('./svr')
  13. const formatVersion = require('../libs/formatVersion')
  14. function convertStrVersion (v) {
  15. let a = v.match(/\d+/g)
  16. return a.map(i => parseInt(i))
  17. }
  18. function compareVersion (a, b) {
  19. if (typeof a === 'string') {
  20. a = convertStrVersion(a)
  21. }
  22. if (typeof b === 'string') {
  23. b = convertStrVersion(b)
  24. }
  25. let len = Math.max(a.length, b.length)
  26. for (let i = 0; i < len; i++) {
  27. let ai = a[i]
  28. let bi = b[i]
  29. if (typeof ai === 'number' && typeof bi === 'number') {
  30. if (ai === bi) {
  31. continue
  32. }
  33. return ai - bi
  34. }
  35. if (typeof ai === 'number' && typeof bi !== 'number') {
  36. return 1
  37. }
  38. if (typeof ai !== 'number' && typeof bi === 'number') {
  39. return -1
  40. }
  41. return 0
  42. }
  43. }
  44. exports.check = (is_silent = false) => {
  45. let release_url = require('../configs').url_download
  46. console.log('start check updates..')
  47. request
  48. .get(release_url)
  49. .end((err, res) => {
  50. let buttons = [lang.ok]
  51. if (err) {
  52. console.log(err)
  53. if (!is_silent) {
  54. dialog.showMessageBox({
  55. type: 'error',
  56. message: lang.check_update_err,
  57. buttons
  58. })
  59. }
  60. return
  61. }
  62. let body = res.text
  63. let $ = cheerio.load(body)
  64. let a = $('.release-meta .css-truncate-target')
  65. if (a.length <= 0) {
  66. console.log('not found versios!')
  67. return
  68. }
  69. let last_v = $(a[0]).text()
  70. // Array.from(a).map(i => {
  71. // console.log($(i).text());
  72. // });
  73. let cmp = compareVersion(current_version, last_v)
  74. console.log('cmp', cmp)
  75. let message
  76. if (cmp >= 0) {
  77. // 没有发现新版本
  78. message = m_lang.fill(lang.check_update_nofound, formatVersion(current_version))
  79. } else {
  80. // 发现新版本
  81. message = m_lang.fill(lang.check_update_found, last_v)
  82. buttons.unshift(lang.cancel)
  83. svr.broadcast('update_found', last_v)
  84. }
  85. if (!is_silent) {
  86. dialog.showMessageBox({
  87. type: 'info',
  88. message,
  89. buttons
  90. }, (res) => {
  91. if (cmp < 0 && res === 1) {
  92. shell.openExternal(release_url)
  93. }
  94. })
  95. }
  96. })
  97. }