Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions i18n/translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"updateNewVersionReady": "Neue Version steht bereit!",
"updateRestart": "Starten Sie die App zum Anwenden der Aktualisierung neu.",
"updateLater": "Später",
"downloadUpdateLater": "Später",
"updateRestartAndUpdate": "Neu starten und aktualisieren",
"updateUpToDate": "Sie sind auf dem neuesten Stand!",
"updateLatest": "Sie benutzen bereits die neueste Version von Grape.",
Expand Down
1 change: 1 addition & 0 deletions i18n/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"updateNewVersionReady": "New version is ready!",
"updateRestart": "Restart the app to apply the update.",
"updateLater": "Later",
"downloadUpdateLater": "Later",
"updateRestartAndUpdate": "Restart and update",
"updateUpToDate": "You're up to date!",
"updateLatest": "You're already using the latest version of Grape.",
Expand Down
1 change: 1 addition & 0 deletions i18n/translations/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"updateNewVersionReady": "Nowa wersja jest gotowa!",
"updateRestart": "Zrestartuj aplikację, aby zastosować aktualizację.",
"updateLater": "Później",
"downloadUpdateLater": "Później",
"updateRestartAndUpdate": "Restart i aktualizacja",
"updateUpToDate": "Jesteś na bieżąco!",
"updateLatest": "Używasz już najnowszej wersji Grape.",
Expand Down
38 changes: 38 additions & 0 deletions src/app/autoUpdate/available.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { dialog, shell } from 'electron'
import { autoUpdater } from 'electron-updater'

import state from '../../state'
import resetUpdateTimer from './resetUpdateTimer'
import { isWindowsStore } from '../../constants'

const messages = {
Expand All @@ -18,6 +19,10 @@ const messages = {
id: 'updateCancel',
defaultMessage: 'Cancel',
},
later: {
id: 'downloadUpdateLater',
defaultMessage: 'Later',
},
update: {
id: 'updateUpdateGrape',
defaultMessage: 'Update Grape',
Expand All @@ -29,6 +34,39 @@ export default () => {
const { formatMessage } = require('../../i18n')

autoUpdater.on('update-available', () => {
if (state.checkingForUpdateAutomatically) {
dialog
.showMessageBox({
type: 'question',
title: formatMessage(messages.newVersionAvailable),
message: formatMessage(messages.install),
buttons: [
formatMessage(messages.later),
formatMessage(messages.update),
],
})
.then(({ response }) => {
if (response === 0) {
resetUpdateTimer(true)
return
}

if (response === 1) {
if (isWindowsStore) {
shell.openExternal(
'ms-windows-store://pdp/?ProductId=9P28KPMR8L2Z',
)
return
}

resetUpdateTimer(true)
autoUpdater.downloadUpdate()
}
})

return
}

if (state.isInitialUpdateCheck) return

dialog
Expand Down
14 changes: 14 additions & 0 deletions src/app/autoUpdate/checkForUpdateAutomatically.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { autoUpdater } from 'electron-updater'

// eslint-disable-next-line import/no-cycle
import resetUpdateTimer from './resetUpdateTimer'
import state from '../../state'

export default () => {
state.checkingForUpdateAutomatically = true
autoUpdater.autoDownload = false
autoUpdater.checkForUpdates().then(() => {
state.checkingForUpdateAutomatically = false
if (!state.shouldCheckUpdateLater) resetUpdateTimer()
})
}
45 changes: 2 additions & 43 deletions src/app/autoUpdate/downloaded.js
Original file line number Diff line number Diff line change
@@ -1,53 +1,12 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { Menu, dialog } from 'electron'
import { autoUpdater } from 'electron-updater'

import state from '../../state'
import quitAndInstall from './quitAndInstall'
import { getMenuTemplate } from '../menu'

const messages = {
newVersion: {
id: 'updateNewVersionReady',
defaultMessage: 'New version is ready!',
},
restart: {
id: 'updateRestart',
defaultMessage: 'Restart the app to apply the update.',
},
later: {
id: 'updateLater',
defaultMessage: 'Later',
},
restartAndUpdate: {
id: 'updateRestartAndUpdate',
defaultMessage: 'Restart and update',
},
}
import onUpdateDownloaded from './onUpdateDownloaded'

export default () => {
// eslint-disable-next-line global-require
const { formatMessage } = require('../../i18n')

autoUpdater.on('update-downloaded', () => {
state.isUpdateDownloaded = true

Menu.setApplicationMenu(Menu.buildFromTemplate(getMenuTemplate()))

dialog
.showMessageBox({
type: 'info',
title: formatMessage(messages.newVersion),
message: formatMessage(messages.restart),
buttons: [
formatMessage(messages.later),
formatMessage(messages.restartAndUpdate),
],
})
.then(({ response }) => {
if (response === 1) {
quitAndInstall()
}
})
onUpdateDownloaded()
})
}
2 changes: 2 additions & 0 deletions src/app/autoUpdate/notAvailable.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ export default () => {
const { formatMessage } = require('../../i18n')

autoUpdater.on('update-not-available', () => {
if (state.checkingForUpdateAutomatically) return

if (!state.isInitialUpdateChecked) {
state.isInitialUpdateChecked = true
return
Expand Down
47 changes: 47 additions & 0 deletions src/app/autoUpdate/onUpdateDownloaded.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { Menu, dialog } from 'electron'

import quitAndInstall from './quitAndInstall'
import { getMenuTemplate } from '../menu'

const messages = {
newVersion: {
id: 'updateNewVersionReady',
defaultMessage: 'New version is ready!',
},
restart: {
id: 'updateRestart',
defaultMessage: 'Restart the app to apply the update.',
},
later: {
id: 'updateLater',
defaultMessage: 'Later',
},
restartAndUpdate: {
id: 'updateRestartAndUpdate',
defaultMessage: 'Restart and update',
},
}

export default () => {
// eslint-disable-next-line global-require
const { formatMessage } = require('../../i18n')

Menu.setApplicationMenu(Menu.buildFromTemplate(getMenuTemplate()))

dialog
.showMessageBox({
type: 'info',
title: formatMessage(messages.newVersion),
message: formatMessage(messages.restart),
buttons: [
formatMessage(messages.later),
formatMessage(messages.restartAndUpdate),
],
})
.then(({ response }) => {
if (response === 1) {
quitAndInstall()
}
})
}
15 changes: 15 additions & 0 deletions src/app/autoUpdate/resetUpdateTimer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// eslint-disable-next-line import/no-cycle
import startUpdateTimer from './startUpdateTimer'
import state from '../../state'

export default checkForUpdateLater => {
state.updateCounter = 0
state.shouldCheckUpdateLater = false

if (checkForUpdateLater) {
state.shouldCheckUpdateLater = true
}

clearInterval(state.updateInterval)
startUpdateTimer()
}
33 changes: 33 additions & 0 deletions src/app/autoUpdate/startUpdateTimer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// eslint-disable-next-line import/no-cycle
import checkForUpdateAutomatically from './checkForUpdateAutomatically'
import onUpdateDownloaded from './onUpdateDownloaded'
import state from '../../state'
import { delays } from '../../constants'

export default () => {
if (state.isUpdateDownloaded) {
onUpdateDownloaded()
return
}

state.updateInterval = setInterval(() => {
if (!state.checkingForUpdateAutomatically) {
if (state.shouldCheckUpdateLater) {
if (state.updateCounter === delays.checkLaterDelay) {
checkForUpdateAutomatically()
return
}

state.updateCounter += 1
return
}

if (state.updateCounter === delays.defaultDelay) {
checkForUpdateAutomatically()
return
}

state.updateCounter += 1
}
}, 1000)
}
2 changes: 2 additions & 0 deletions src/app/initApp.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import state from '../state'
import { images, isDevelopment, isMas, isWindowsStore } from '../constants'
import { getOsType, getChatUrl } from '../utils'
import showMainWindow from './menu/actions/showMainWindow'
import startUpdateTimer from './autoUpdate/startUpdateTimer'

const {
trayIcon,
Expand All @@ -47,6 +48,7 @@ const messages = {
export default url => {
if (getOsType !== 'linux' && !isMas && !isWindowsStore) autoUpdate()
global.store = store.get() || env
startUpdateTimer()

const { width, height } = screen.getPrimaryDisplay().workAreaSize

Expand Down
4 changes: 4 additions & 0 deletions src/constants/delays.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export default {
defaultDelay: 10800, // 3 hours in seconds
checkLaterDelay: 86400, // 24 hours in seconds
}
12 changes: 11 additions & 1 deletion src/constants/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,15 @@ import isDevelopment from './isDevelopment'
import isMas from './isMas'
import isMac from './isMac'
import isWindowsStore from './isWindowsStore'
import delays from './delays'

export { blobs, images, pages, isDevelopment, isMas, isMac, isWindowsStore }
export {
blobs,
images,
pages,
isDevelopment,
isMas,
isMac,
isWindowsStore,
delays,
}
1 change: 1 addition & 0 deletions src/i18n/de.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export default {
"updateNewVersionReady": "Neue Version steht bereit!",
"updateRestart": "Starten Sie die App zum Anwenden der Aktualisierung neu.",
"updateLater": "Später",
"downloadUpdateLater": "Später",
"updateRestartAndUpdate": "Neu starten und aktualisieren",
"updateUpToDate": "Sie sind auf dem neuesten Stand!",
"updateLatest": "Sie benutzen bereits die neueste Version von Grape.",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export default {
"updateNewVersionReady": "New version is ready!",
"updateRestart": "Restart the app to apply the update.",
"updateLater": "Later",
"downloadUpdateLater": "Later",
"updateRestartAndUpdate": "Restart and update",
"updateUpToDate": "You're up to date!",
"updateLatest": "You're already using the latest version of Grape.",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/pl.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export default {
"updateNewVersionReady": "Nowa wersja jest gotowa!",
"updateRestart": "Zrestartuj aplikację, aby zastosować aktualizację.",
"updateLater": "Później",
"downloadUpdateLater": "Później",
"updateRestartAndUpdate": "Restart i aktualizacja",
"updateUpToDate": "Jesteś na bieżąco!",
"updateLatest": "Używasz już najnowszej wersji Grape.",
Expand Down
4 changes: 4 additions & 0 deletions src/state/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@ export default {
isChatOpened: false,
isUpdateDownloaded: false,
isInitialUpdateChecked: false,
checkingForUpdateAutomatically: false,
updateCounter: 0,
shouldCheckUpdateLater: false,
updateInterval: null,
}