这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
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
8 changes: 6 additions & 2 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ const allowedProcessMessagesSet = _getAllowedStatesSet({
'REQUEST_MIGRATION_HAS_FAILED_WHAT_SHOULD_BE_DONE',
'REQUEST_SHOULD_ALL_TABLES_BE_REMOVED',

'RESPONSE_GET_BACKUP_FILES_METADATA'
'RESPONSE_GET_BACKUP_FILES_METADATA',

'RESPONSE_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE'
]
})
const allowedProcessStatesSet = _getAllowedStatesSet({
Expand All @@ -88,7 +90,9 @@ const allowedProcessStatesSet = _getAllowedStatesSet({

'RESPONSE_MIGRATION_HAS_FAILED_WHAT_SHOULD_BE_DONE',

'REQUEST_GET_BACKUP_FILES_METADATA'
'REQUEST_GET_BACKUP_FILES_METADATA',

'REQUEST_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE'
]
})

Expand Down
9 changes: 8 additions & 1 deletion src/errors/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ class ShowingChangelogError extends BaseError {
}
}

class TriggeringSyncAfterUpdatesError extends BaseError {
constructor (message = 'ERR_SYNC_AFTER_UPDATES_REQUEST_HAS_TRIGGERED') {
super(message)
}
}

module.exports = {
BaseError,
InvalidFilePathError,
Expand All @@ -124,5 +130,6 @@ module.exports = {
SyncFrequencyChangingError,
UserManualShowingError,
DbRestoringError,
ShowingChangelogError
ShowingChangelogError,
TriggeringSyncAfterUpdatesError
}
5 changes: 4 additions & 1 deletion src/initialize-app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const path = require('path')

const { CSV_PATH_VERSION } = require('./const')

const triggerSyncAfterUpdates = require('./trigger-sync-after-updates')
const triggerElectronLoad = require('./trigger-electron-load')
const wins = require('./windows')
const runServer = require('./run-server')
Expand Down Expand Up @@ -162,7 +163,8 @@ const _manageConfigs = (params = {}) => {
{
pathToUserCsv,
schedulerRule,
shownChangelogVer: '0.0.0'
shownChangelogVer: '0.0.0',
triggeredSyncAfterUpdatesVer: '0.0.0'
}
)
_resetCsvPath(
Expand Down Expand Up @@ -208,6 +210,7 @@ module.exports = async () => {
const isServerReadyPromise = _ipcMessToPromise(ipc)
manageWorkerMessages(ipc)
await isServerReadyPromise
await triggerSyncAfterUpdates()

// Legacy fix related to reprodducing the same behavior on all OS,
// waiting for checks that it was resolved in the last electron ver
Expand Down
94 changes: 94 additions & 0 deletions src/trigger-sync-after-updates/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
'use strict'

const PROCESS_MESSAGES = require(
'../../bfx-reports-framework/workers/loc.api/process.message.manager/process.messages'
)
const PROCESS_STATES = require(
'../../bfx-reports-framework/workers/loc.api/process.message.manager/process.states'
)

const ipcs = require('../ipcs')
const {
deserializeError
} = require('../helpers/utils')
const {
getConfigsKeeperByName
} = require('../configs-keeper')
const getDebugInfo = require('../helpers/get-debug-info')
const {
TriggeringSyncAfterUpdatesError
} = require('../errors')

const _requestSyncAfterUpdates = (opts) => {
return new Promise((resolve, reject) => {
try {
const {
msTimeout = 30 * 1000
} = opts ?? {}

let timeout = null

const rmHandler = () => {
ipcs.serverIpc.off('message', handler)
clearTimeout(timeout)
}
const handler = (mess) => {
const { state, data } = mess ?? {}

if (state !== PROCESS_MESSAGES.RESPONSE_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE) {
return
}

timeout = setTimeout(() => {
rmHandler()
reject(new TriggeringSyncAfterUpdatesError())
}, msTimeout).unref()

if (data?.err) {
rmHandler()
reject(deserializeError(data.err))

return
}

rmHandler()
resolve(data?.isDone)
}

ipcs.serverIpc.on('message', handler)
ipcs.serverIpc.send({
state: PROCESS_STATES.REQUEST_UPDATE_USERS_SYNC_ON_STARTUP_REQUIRED_STATE
})
} catch (err) {
reject(err)
}
})
}

module.exports = async () => {
try {
const { version } = getDebugInfo()
const configsKeeper = getConfigsKeeperByName('main')
const triggeredSyncAfterUpdatesVer = await configsKeeper
.getConfigByName('triggeredSyncAfterUpdatesVer')

if (version === triggeredSyncAfterUpdatesVer) {
return
}

const wasRequested = await _requestSyncAfterUpdates()
const wasSaved = await configsKeeper
.saveConfigs({ triggeredSyncAfterUpdatesVer: version })

if (
wasRequested &&
wasSaved
) {
return
}

throw new TriggeringSyncAfterUpdatesError()
} catch (err) {
console.error(err)
}
}