UI: Refactoring OTA Update service
This commit is contained in:
parent
615af6bcb2
commit
1e5be4d8ca
@ -18,17 +18,14 @@ import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { PageLink } from '@shared/models/page/page-link';
|
||||
import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils';
|
||||
import { forkJoin, Observable, of, throwError } from 'rxjs';
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { PageData } from '@shared/models/page/page-data';
|
||||
import { DeviceProfile, DeviceProfileInfo, DeviceTransportType } from '@shared/models/device.models';
|
||||
import { isDefinedAndNotNull, isEmptyStr } from '@core/utils';
|
||||
import { ObjectLwM2M, ServerSecurityConfig } from '@home/components/profile/device/lwm2m/lwm2m-profile-config.models';
|
||||
import { SortOrder } from '@shared/models/page/sort-order';
|
||||
import { OtaPackageService } from '@core/http/ota-package.service';
|
||||
import { OtaUpdateType } from '@shared/models/ota-package.models';
|
||||
import { mergeMap } from 'rxjs/operators';
|
||||
import { DialogService } from '@core/services/dialog.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -37,9 +34,7 @@ export class DeviceProfileService {
|
||||
|
||||
constructor(
|
||||
private http: HttpClient,
|
||||
private otaPackageService: OtaPackageService,
|
||||
private dialogService: DialogService,
|
||||
private translate: TranslateService
|
||||
private otaPackageService: OtaPackageService
|
||||
) {
|
||||
}
|
||||
|
||||
@ -80,30 +75,9 @@ export class DeviceProfileService {
|
||||
|
||||
public saveDeviceProfileAndConfirmOtaChange(originDeviceProfile: DeviceProfile, deviceProfile: DeviceProfile,
|
||||
config?: RequestConfig): Observable<DeviceProfile> {
|
||||
const tasks: Observable<number>[] = [];
|
||||
if (originDeviceProfile?.id?.id && originDeviceProfile.firmwareId?.id !== deviceProfile.firmwareId?.id) {
|
||||
tasks.push(this.otaPackageService.countUpdateDeviceAfterChangePackage(OtaUpdateType.FIRMWARE, deviceProfile.id.id));
|
||||
} else {
|
||||
tasks.push(of(0));
|
||||
}
|
||||
if (originDeviceProfile?.id?.id && originDeviceProfile.softwareId?.id !== deviceProfile.softwareId?.id) {
|
||||
tasks.push(this.otaPackageService.countUpdateDeviceAfterChangePackage(OtaUpdateType.SOFTWARE, deviceProfile.id.id));
|
||||
} else {
|
||||
tasks.push(of(0));
|
||||
}
|
||||
return forkJoin(tasks).pipe(
|
||||
mergeMap(([deviceFirmwareUpdate, deviceSoftwareUpdate]) => {
|
||||
let text = '';
|
||||
if (deviceFirmwareUpdate > 0) {
|
||||
text += this.translate.instant('ota-update.change-firmware', {count: deviceFirmwareUpdate});
|
||||
}
|
||||
if (deviceSoftwareUpdate > 0) {
|
||||
text += text.length ? ' ' : '';
|
||||
text += this.translate.instant('ota-update.change-software', {count: deviceSoftwareUpdate});
|
||||
}
|
||||
return text !== '' ? this.dialogService.confirm('', text, null, this.translate.instant('common.proceed')) : of(true);
|
||||
}),
|
||||
mergeMap((update) => update ? this.saveDeviceProfile(deviceProfile, config) : throwError('Canceled saving device profiles')));
|
||||
return this.otaPackageService.confirmDialogUpdatePackage(deviceProfile, originDeviceProfile).pipe(
|
||||
mergeMap((update) => update ? this.saveDeviceProfile(deviceProfile, config) : throwError('Canceled saving device profiles'))
|
||||
);
|
||||
}
|
||||
|
||||
public saveDeviceProfile(deviceProfile: DeviceProfile, config?: RequestConfig): Observable<DeviceProfile> {
|
||||
|
||||
@ -18,18 +18,30 @@ import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { PageLink } from '@shared/models/page/page-link';
|
||||
import { defaultHttpOptionsFromConfig, defaultHttpUploadOptions, RequestConfig } from '@core/http/http-utils';
|
||||
import { Observable } from 'rxjs';
|
||||
import { forkJoin, Observable, of } from 'rxjs';
|
||||
import { PageData } from '@shared/models/page/page-data';
|
||||
import { ChecksumAlgorithm, OtaPackage, OtaPackageInfo, OtaUpdateType } from '@shared/models/ota-package.models';
|
||||
import {
|
||||
ChecksumAlgorithm,
|
||||
OtaPackage,
|
||||
OtaPackageInfo,
|
||||
OtaPagesIds,
|
||||
OtaUpdateType
|
||||
} from '@shared/models/ota-package.models';
|
||||
import { catchError, map, mergeMap } from 'rxjs/operators';
|
||||
import { deepClone } from '@core/utils';
|
||||
import { BaseData } from '@shared/models/base-data';
|
||||
import { EntityId } from '@shared/models/id/entity-id';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { DialogService } from '@core/services/dialog.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class OtaPackageService {
|
||||
constructor(
|
||||
private http: HttpClient
|
||||
private http: HttpClient,
|
||||
private translate: TranslateService,
|
||||
private dialogService: DialogService
|
||||
) {
|
||||
|
||||
}
|
||||
@ -120,8 +132,36 @@ export class OtaPackageService {
|
||||
return this.http.delete(`/api/otaPackage/${otaPackageId}`, defaultHttpOptionsFromConfig(config));
|
||||
}
|
||||
|
||||
public countUpdateDeviceAfterChangePackage(type: OtaUpdateType, deviceProfileId: string, config?: RequestConfig): Observable<number> {
|
||||
return this.http.get<number>(`/api/devices/count/${type}?deviceProfileId=${deviceProfileId}`, defaultHttpOptionsFromConfig(config));
|
||||
public countUpdateDeviceAfterChangePackage(type: OtaUpdateType, entityId: EntityId, config?: RequestConfig): Observable<number> {
|
||||
return this.http.get<number>(`/api/devices/count/${type}?deviceProfileId=${entityId.id}`, defaultHttpOptionsFromConfig(config));
|
||||
}
|
||||
|
||||
public confirmDialogUpdatePackage(entity: BaseData<EntityId>&OtaPagesIds,
|
||||
originEntity: BaseData<EntityId>&OtaPagesIds): Observable<boolean> {
|
||||
const tasks: Observable<number>[] = [];
|
||||
if (originEntity?.id?.id && originEntity.firmwareId?.id !== entity.firmwareId?.id) {
|
||||
tasks.push(this.countUpdateDeviceAfterChangePackage(OtaUpdateType.FIRMWARE, entity.id));
|
||||
} else {
|
||||
tasks.push(of(0));
|
||||
}
|
||||
if (originEntity?.id?.id && originEntity.softwareId?.id !== entity.softwareId?.id) {
|
||||
tasks.push(this.countUpdateDeviceAfterChangePackage(OtaUpdateType.SOFTWARE, entity.id));
|
||||
} else {
|
||||
tasks.push(of(0));
|
||||
}
|
||||
return forkJoin(tasks).pipe(
|
||||
mergeMap(([deviceFirmwareUpdate, deviceSoftwareUpdate]) => {
|
||||
let text = '';
|
||||
if (deviceFirmwareUpdate > 0) {
|
||||
text += this.translate.instant('ota-update.change-firmware', {count: deviceFirmwareUpdate});
|
||||
}
|
||||
if (deviceSoftwareUpdate > 0) {
|
||||
text += text.length ? ' ' : '';
|
||||
text += this.translate.instant('ota-update.change-software', {count: deviceSoftwareUpdate});
|
||||
}
|
||||
return text !== '' ? this.dialogService.confirm('', text, null, this.translate.instant('common.proceed')) : of(true);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -80,6 +80,11 @@ export const OtaUpdateTranslation = new Map<OtaUpdateType, OtaUpdateTranslation>
|
||||
]
|
||||
);
|
||||
|
||||
export interface OtaPagesIds {
|
||||
firmwareId?: OtaPackageId;
|
||||
softwareId?: OtaPackageId;
|
||||
}
|
||||
|
||||
export interface OtaPackageInfo extends BaseData<OtaPackageId> {
|
||||
tenantId?: TenantId;
|
||||
type: OtaUpdateType;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user