diff --git a/src/services/database.service.ts b/src/services/database.service.ts index 27ccf3f..61006fe 100755 --- a/src/services/database.service.ts +++ b/src/services/database.service.ts @@ -195,6 +195,7 @@ export class Database { service.setNotifications(data.data); } else if (data.type === 'TO_DOWNLOAD') { // Download the missing data + let requestedStateId = []; for (const hash of data.data) { try { const value = await service.fetchValueFromStorage(hash); @@ -205,6 +206,14 @@ export class Database { } else { // We first request the data from managers console.log('Request data from managers of the process'); + // get the diff from db + const diff = await service.getDiffByValue(hash); + const processId = diff.process_id; + const stateId = diff.state_id; + if (!requestedStateId.includes(stateId)) { + await service.requestDataFromPeers(processId, stateId); + requestedStateId.push(stateId); + } } } catch (e) { console.error(e); diff --git a/src/services/service.ts b/src/services/service.ts index 5ec8aa7..60a338e 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -1299,4 +1299,13 @@ export default class Services { console.error("Failed to get processes:", e); } } + + public async requestDataFromPeers(processId: string, stateId: string) { + try { + const res = this.sdkClient.request_data(processId, [stateId]); + await this.handleApiReturn(res); + } catch (e) { + console.error(e); + } + } }