SelfUpdate.qml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import QtQuick 2.0
  2. import QtQuick.Controls 2.15
  3. Item {
  4. property string updateMode
  5. property string webVersion
  6. property string link
  7. Script {
  8. id: script
  9. property int mode: modeNone
  10. readonly property int modeNone: 0
  11. readonly property int modeCheckSelfUpdate: 1
  12. readonly property int modePerformSelfUpdate: 2
  13. function checkSelfUpdate() {
  14. ui.log("")
  15. ui.log(qsTr("Checking %APPNAME% for updates...").replace("%APPNAME%", appName))
  16. mode = modeCheckSelfUpdate
  17. execScript('selfupdate', 'check')
  18. }
  19. function performSelfUpdate() {
  20. ui.log("")
  21. ui.log(qsTr("Downloading and updating %APPNAME%...").replace("%APPNAME%", appName))
  22. mode = modePerformSelfUpdate
  23. execScript('selfupdate', ['update', link])
  24. }
  25. onFinished: {
  26. switch (mode) {
  27. case modeCheckSelfUpdate:
  28. onCheckFinished(code, output)
  29. break
  30. case modePerformSelfUpdate:
  31. onPerformSelfUpdateFinished(code, output)
  32. break
  33. }
  34. }
  35. function onCheckFinished(code, output) {
  36. if (code !== 0) {
  37. ui.log(output)
  38. return
  39. }
  40. [, updateMode, webVersion, link] = output.match(/.*PLVERSION\s([^\s]+)\s([^\s]+)\s([^\s]+)\n.*/)
  41. if (!webVersion) {
  42. ui.log(output)
  43. ui.log(qsTr("Failed to get update version"))
  44. return
  45. }
  46. let installedVersion = version.split(/\s/)[0]
  47. if (installedVersion === webVersion) {
  48. ui.log(appName + " " + qsTr("is up to date"))
  49. return
  50. }
  51. ui.log(appName + " " + qsTr("update available") + " v" + webVersion)
  52. dialogConfirmUpdate.open()
  53. }
  54. function onPerformSelfUpdateFinished(code, output) {
  55. if (code === 0) {
  56. // force quit
  57. clientInstaller.installerState = clientInstaller.stateDone
  58. window.close()
  59. return
  60. }
  61. // error?
  62. ui.log("")
  63. ui.log(output)
  64. }
  65. }
  66. Dialog {
  67. id: dialogConfirmUpdate
  68. anchors.centerIn: parent
  69. title: window.title
  70. standardButtons: Dialog.Yes | Dialog.No
  71. modal: true
  72. focus: true
  73. width: block * 6
  74. Text {
  75. anchors.fill: parent
  76. text: appName + " v" + webVersion + " " + qsTr("is available.")
  77. + "\n" + qsTr("Do you wish to") + " " + qsTr(updateMode) + qsTr("?")
  78. }
  79. onAccepted: {
  80. switch (updateMode) {
  81. case "update":
  82. script.performSelfUpdate()
  83. break
  84. case "download":
  85. Qt.openUrlExternally(link)
  86. break
  87. }
  88. }
  89. }
  90. function check() {
  91. script.checkSelfUpdate()
  92. }
  93. }