-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CP-2596 Contacts data transfer (#1846)
- Loading branch information
1 parent
8787da1
commit bd83355
Showing
36 changed files
with
1,070 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
libs/device/feature/src/lib/data-transfer/cancel-data-transfer.request.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/** | ||
* Copyright (c) Mudita sp. z o.o. All rights reserved. | ||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md | ||
*/ | ||
|
||
import { ResultObject } from "Core/core/builder" | ||
import { ipcRenderer } from "electron-better-ipc" | ||
import { APIDataTransferServiceEvents, DataTransfer } from "device/models" | ||
import { DeviceId } from "Core/device/constants/device-id" | ||
|
||
export const cancelDataTransferRequest = ( | ||
dataTransferId: number, | ||
deviceId?: DeviceId | ||
): Promise<ResultObject<DataTransfer>> => { | ||
return ipcRenderer.callMain(APIDataTransferServiceEvents.CancelDataTransfer, { | ||
dataTransferId, | ||
deviceId, | ||
}) | ||
} |
19 changes: 19 additions & 0 deletions
19
libs/device/feature/src/lib/data-transfer/check-data-transfer.request.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/** | ||
* Copyright (c) Mudita sp. z o.o. All rights reserved. | ||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md | ||
*/ | ||
|
||
import { ResultObject } from "Core/core/builder" | ||
import { ipcRenderer } from "electron-better-ipc" | ||
import { APIDataTransferServiceEvents, DataTransfer } from "device/models" | ||
import { DeviceId } from "Core/device/constants/device-id" | ||
|
||
export const checkDataTransferRequest = ( | ||
dataTransferId: number, | ||
deviceId?: DeviceId | ||
): Promise<ResultObject<DataTransfer>> => { | ||
return ipcRenderer.callMain(APIDataTransferServiceEvents.CheckDataTransfer, { | ||
dataTransferId, | ||
deviceId, | ||
}) | ||
} |
177 changes: 177 additions & 0 deletions
177
libs/device/feature/src/lib/data-transfer/data-transfer.service.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
/** | ||
* Copyright (c) Mudita sp. z o.o. All rights reserved. | ||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md | ||
*/ | ||
|
||
import { Result, ResultObject } from "Core/core/builder" | ||
import { IpcEvent } from "Core/core/decorators" | ||
import { AppError } from "Core/core/errors" | ||
import { DeviceManager } from "Core/device-manager/services" | ||
import { DeviceId } from "Core/device/constants/device-id" | ||
import { ApiResponse } from "Core/device/types/mudita-os" | ||
import { | ||
APIDataTransferServiceEvents, | ||
DataTransferDomain, | ||
DataTransferValidator200, | ||
DataTransferValidator202, | ||
GeneralError, | ||
PreDataTransfer, | ||
PreDataTransferValidator, | ||
DataTransfer, | ||
} from "device/models" | ||
import random from "lodash/random" | ||
|
||
export class APIDataTransferService { | ||
constructor(private deviceManager: DeviceManager) {} | ||
|
||
@IpcEvent(APIDataTransferServiceEvents.StartPreDataTransfer) | ||
public async startPreDataTransfer({ | ||
domains, | ||
deviceId, | ||
}: { | ||
domains: DataTransferDomain[] | ||
deviceId?: DeviceId | ||
}): Promise<ResultObject<PreDataTransfer>> { | ||
const device = deviceId | ||
? this.deviceManager.getAPIDeviceById(deviceId) | ||
: this.deviceManager.apiDevice | ||
|
||
if (!device) { | ||
return Result.failed(new AppError(GeneralError.NoDevice, "")) | ||
} | ||
|
||
const dataTransferId = random(1, 100000) | ||
|
||
const response = await device.request({ | ||
endpoint: "PRE_DATA_TRANSFER", | ||
method: "POST", | ||
body: { | ||
dataTransferId, | ||
domains, | ||
}, | ||
}) | ||
|
||
if (response.ok) { | ||
const startDataTransferResponse = PreDataTransferValidator( | ||
domains | ||
).safeParse(response.data.body) | ||
|
||
return startDataTransferResponse.success | ||
? Result.success(startDataTransferResponse.data) | ||
: Result.failed(new AppError(GeneralError.IncorrectResponse, "")) | ||
} | ||
|
||
return Result.failed(new AppError(GeneralError.IncorrectResponse)) | ||
} | ||
|
||
@IpcEvent(APIDataTransferServiceEvents.CheckDataTransfer) | ||
public async checkDataTransfer({ | ||
dataTransferId, | ||
deviceId, | ||
}: { | ||
dataTransferId: number | ||
deviceId?: DeviceId | ||
}): Promise<ResultObject<DataTransfer>> { | ||
const device = deviceId | ||
? this.deviceManager.getAPIDeviceById(deviceId) | ||
: this.deviceManager.apiDevice | ||
|
||
if (!device) { | ||
return Result.failed(new AppError(GeneralError.NoDevice, "")) | ||
} | ||
|
||
const response = await device.request({ | ||
endpoint: "DATA_TRANSFER", | ||
method: "GET", | ||
body: { | ||
dataTransferId, | ||
}, | ||
}) | ||
|
||
return this.parseDataTransferResponse(response) | ||
} | ||
|
||
@IpcEvent(APIDataTransferServiceEvents.StartDataTransfer) | ||
public async startDataTransfer({ | ||
dataTransferId, | ||
deviceId, | ||
}: { | ||
dataTransferId: number | ||
deviceId?: DeviceId | ||
}): Promise<ResultObject<DataTransfer>> { | ||
const device = deviceId | ||
? this.deviceManager.getAPIDeviceById(deviceId) | ||
: this.deviceManager.apiDevice | ||
|
||
if (!device) { | ||
return Result.failed(new AppError(GeneralError.NoDevice, "")) | ||
} | ||
|
||
const response = await device.request({ | ||
endpoint: "DATA_TRANSFER", | ||
method: "POST", | ||
body: { | ||
dataTransferId, | ||
}, | ||
}) | ||
|
||
return this.parseDataTransferResponse(response) | ||
} | ||
|
||
@IpcEvent(APIDataTransferServiceEvents.CancelDataTransfer) | ||
public async cancelDataTransfer({ | ||
dataTransferId, | ||
deviceId, | ||
}: { | ||
dataTransferId: number | ||
deviceId?: DeviceId | ||
}): Promise<ResultObject<undefined>> { | ||
const device = deviceId | ||
? this.deviceManager.getAPIDeviceById(deviceId) | ||
: this.deviceManager.apiDevice | ||
|
||
if (!device) { | ||
return Result.failed(new AppError(GeneralError.NoDevice, "")) | ||
} | ||
|
||
const response = await device.request({ | ||
endpoint: "DATA_TRANSFER", | ||
method: "DELETE", | ||
body: { | ||
dataTransferId, | ||
}, | ||
}) | ||
|
||
if (response.ok) { | ||
return Result.success(undefined) | ||
} | ||
|
||
return Result.failed(new AppError(GeneralError.IncorrectResponse)) | ||
} | ||
|
||
private parseDataTransferResponse( | ||
response: ResultObject<ApiResponse<unknown>, string | number, unknown> | ||
) { | ||
if (!response.ok) { | ||
return Result.failed(response.error) | ||
} | ||
|
||
if (response.data.status === 200) { | ||
const response200 = DataTransferValidator200.safeParse(response.data.body) | ||
if (response200.success) { | ||
return Result.success(response200.data) | ||
} | ||
return Result.success(response.data.body as DataTransfer) | ||
} | ||
if (response.data.status === 202) { | ||
const response202 = DataTransferValidator202.safeParse(response.data.body) | ||
|
||
if (response202.success) { | ||
return Result.success(response202.data) | ||
} | ||
return Result.success(response.data.body as DataTransfer) | ||
} | ||
|
||
return Result.failed(new AppError(GeneralError.IncorrectResponse, "")) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
/** | ||
* Copyright (c) Mudita sp. z o.o. All rights reserved. | ||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md | ||
*/ | ||
|
||
export * from "./data-transfer.service" | ||
export * from "./cancel-data-transfer.request" | ||
export * from "./check-data-transfer.request" | ||
export * from "./start-data-transfer.request" | ||
export * from "./start-pre-data-transfer.request" |
19 changes: 19 additions & 0 deletions
19
libs/device/feature/src/lib/data-transfer/start-data-transfer.request.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/** | ||
* Copyright (c) Mudita sp. z o.o. All rights reserved. | ||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md | ||
*/ | ||
|
||
import { ResultObject } from "Core/core/builder" | ||
import { ipcRenderer } from "electron-better-ipc" | ||
import { APIDataTransferServiceEvents, DataTransfer } from "device/models" | ||
import { DeviceId } from "Core/device/constants/device-id" | ||
|
||
export const startDataTransferRequest = ( | ||
dataTransferId: number, | ||
deviceId?: DeviceId | ||
): Promise<ResultObject<DataTransfer>> => { | ||
return ipcRenderer.callMain(APIDataTransferServiceEvents.StartDataTransfer, { | ||
dataTransferId, | ||
deviceId, | ||
}) | ||
} |
26 changes: 26 additions & 0 deletions
26
libs/device/feature/src/lib/data-transfer/start-pre-data-transfer.request.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/** | ||
* Copyright (c) Mudita sp. z o.o. All rights reserved. | ||
* For licensing, see https://github.com/mudita/mudita-center/blob/master/LICENSE.md | ||
*/ | ||
|
||
import { ResultObject } from "Core/core/builder" | ||
import { ipcRenderer } from "electron-better-ipc" | ||
import { | ||
APIDataTransferServiceEvents, | ||
DataTransferDomain, | ||
PreDataTransfer, | ||
} from "device/models" | ||
import { DeviceId } from "Core/device/constants/device-id" | ||
|
||
export const startPreDataTransferRequest = ( | ||
domains: DataTransferDomain[], | ||
deviceId?: DeviceId | ||
): Promise<ResultObject<PreDataTransfer>> => { | ||
return ipcRenderer.callMain( | ||
APIDataTransferServiceEvents.StartPreDataTransfer, | ||
{ | ||
domains, | ||
deviceId, | ||
} | ||
) | ||
} |
Oops, something went wrong.