checkUpdate.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /**
  2. * @author oldj
  3. * @blog http://oldj.net
  4. */
  5. 'use strict'
  6. const request = require('request')
  7. const cheerio = require('cheerio')
  8. const {shell, dialog} = require('electron')
  9. const current_version = require('../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(release_url, (err, res, body) => {
  48. let buttons = [lang.ok]
  49. if (err) {
  50. console.log(err)
  51. if (!is_silent) {
  52. dialog.showMessageBox({
  53. type: 'error',
  54. message: lang.check_update_err,
  55. buttons
  56. })
  57. }
  58. return
  59. }
  60. //let body = res.text
  61. let $ = cheerio.load(body)
  62. let a = $('.release-meta .css-truncate-target')
  63. if (a.length <= 0) {
  64. console.log('not found versios!')
  65. return
  66. }
  67. let last_v = $(a[0]).text()
  68. // Array.from(a).map(i => {
  69. // console.log($(i).text());
  70. // });
  71. let cmp = compareVersion(current_version, last_v)
  72. console.log('cmp', cmp)
  73. let message
  74. if (cmp >= 0) {
  75. // 没有发现新版本
  76. message = m_lang.fill(lang.check_update_nofound, formatVersion(current_version))
  77. } else {
  78. // 发现新版本
  79. message = m_lang.fill(lang.check_update_found, last_v)
  80. buttons.unshift(lang.cancel)
  81. svr.broadcast('update_found', last_v)
  82. }
  83. if (!is_silent) {
  84. dialog.showMessageBox({
  85. type: 'info',
  86. message,
  87. buttons
  88. }, (res) => {
  89. if (cmp < 0 && res === 1) {
  90. shell.openExternal(release_url)
  91. }
  92. })
  93. }
  94. })
  95. }