From 760e788cde79360c63045bf9792d853eda50e9c8 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Mon, 8 Sep 2025 19:06:51 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E3=80=90PhotoPickerComponent=E3=80=91?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E8=A7=92=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 84 ++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index e4ae71a0d8..980224bb0d 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -53,6 +53,10 @@ export class PhotoPickerComponent extends ViewPU { this.onExceedMaxSelected = void 0; this.onCurrentAlbumDeleted = void 0; this.onVideoPlayStateChanged = void 0; + this.badgeConfig = void 0; + this.batchBadgeConfigSize = 1000; + this.maxBadgeConfigSize = 200000; + this.badgeConfigIsSending = void 0; this.__pickerController = new SynchedPropertyNesedObjectPU(o.pickerController, this, 'pickerController'); this.proxy = void 0; this.__revokeIndex = new ObservedPropertySimplePU(0, this, 'revokeIndex'); @@ -73,7 +77,11 @@ export class PhotoPickerComponent extends ViewPU { void 0 !== e.onExceedMaxSelected && (this.onExceedMaxSelected = e.onExceedMaxSelected); void 0 !== e.onCurrentAlbumDeleted && (this.onCurrentAlbumDeleted = e.onCurrentAlbumDeleted); void 0 !== e.onVideoPlayStateChanged && (this.onVideoPlayStateChanged = e.onVideoPlayStateChanged); + void 0 !== e.pickerOptions.badgeConfig && (this.badgeConfig = e.pickerOptions.badgeConfig); this.__pickerController.set(e.pickerController); + if (this.badgeConfig && this.badgeConfig.uris !== undefined) { + this.badgeConfig.uris.splice(this.maxBadgeConfigSize); + } void 0 !== e.proxy && (this.proxy = e.proxy); if (e.revokeIndex !== undefined) { this.revokeIndex = e.revokeIndex; @@ -126,6 +134,13 @@ export class PhotoPickerComponent extends ViewPU { this.onSetPhotoBrowserItem(o); } else if (null == o ? void 0 : o.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); + } else if (null == o ? void 0: o.has('SET_BADGE_CONFIGS')) { + if (o.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { + this.badgeConfig = o.get('SET_BADGE_CONFIGS'); + this.badgeConfigIsSending = true; + this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); + this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: o.get('BADGE_CONFIGS_OPTION_TYPE')}); + } } else { this.otherOnChange(o); } @@ -303,6 +318,11 @@ export class PhotoPickerComponent extends ViewPU { } else if ('remoteReady' === o) { if (this.onPickerControllerReady) { this.onPickerControllerReady(); + if (this.badgeConfig && this.badgeConfig.uris.length > 0) { + console.log('i need send msg to photo',this.badgeConfig?.uris.length, this.badgeConfig?.badgeType, new Date().getTime().toString()); + this.badgeConfigIsSending = true; + this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); + } console.info('PhotoPickerComponent onReceive: onPickerControllerReady'); } } else if ('replaceCallback' === o) { @@ -315,6 +335,8 @@ export class PhotoPickerComponent extends ViewPU { this.handlePhotoBrowserChange(e); } else if ('onVideoPlayStateChanged' === o) { this.handleVideoPlayStateChanged(e); + } else if ('onBadgeConfigSend' === o) { + this.handleBadgeConfigSend(e); } else { this.handleOtherOnReceive(e); console.info('PhotoPickerComponent onReceive: other case'); @@ -322,6 +344,17 @@ export class PhotoPickerComponent extends ViewPU { console.info('PhotoPickerComponent onReceive' + this.pickerController.encrypt(JSON.stringify(e))); } + handleBadgeConfigSend(e) { + let index = e.nextIndex + if (this.badgeConfig && this.badgeConfig.uris.length > 0) { + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize*size, this.batchBadgeConfigSize * (index + 1)); + this.proxy.send({badgeConfig: unitBadgeConfig, index: index, isOver: index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true: false, badgeConfigType: this.badgeConfig.badgeType}); + } + if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { + this.badgeConfigIsSending = false; + } + } + handleOtherOnReceive(e) { let o = e.dataType; if ('exceedMaxSelected' === o) { @@ -602,8 +635,39 @@ let PickerController = class { this.data = new Map([['SET_ALBUM_URI', e]]); console.info('PhotoPickerComponent SET_ALBUM_URI' + this.encrypt(JSON.stringify(e))); } + } else if (e === DataType.SET_BADGE_CONFIGS) { + let e = o; + if (e !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.SET_DATA]]); + } } else { console.info('PhotoPickerComponent setData: other case'); + } + } + + addData(e,o) { + if (o === undefined) { + return; + } + if (e === DataType.SET_BADGE_CONFIGS) { + let e = o; + if (e !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.ADD_DATA]]); + } + return; + } + } + + deleteData(e,o) { + if (o === undefined) { + return; + } + if (e === DataType.SET_BADGE_CONFIGS) { + let e = o; + if (e !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); + } + return; } } @@ -770,10 +834,16 @@ export class SingleLineConfig { } } +export class BadgeConfig { + +} + export var DataType; !function(e) { e[e.SET_SELECTED_URIS = 1] = 'SET_SELECTED_URIS'; e[e.SET_ALBUM_URI = 2] = 'SET_ALBUM_URI'; + e[e.SET_SELECTED_INFO = 3] = 'SET_SELECTED_INFO'; + e[e.SET_BADGE_CONFIGS = 4] = 'SET_BADGE_CONFIGS'; }(DataType || (DataType = {})); export var ItemType; @@ -854,6 +924,18 @@ export var ItemDisplayRatio; e[e.ORIGINAL_SIZE_RATIO = 1] = 'ORIGINAL_SIZE_RATIO'; }(ItemDisplayRatio || (ItemDisplayRatio = {})); +export var BadgeTypes; +!function(e) { + e[e.BADGE_UPLOADED = 1] = 'BADGE_UPLOADED'; +}(BadgeTypes || (BadgeTypes = {})); + +export var BadgeOptionType; +!function(e) { + e[e.SET_DATA = 1] = 'SET_DATA'; + e[e.ADD_DATA = 2] = 'ADD_DATA'; + e[e.DELETE_DATA = 3] = 'DELETE_DATA'; +}(BadgeOptionType || (BadgeOptionType = {})); + export default { PhotoPickerComponent, PickerController, PickerOptions, DataType, BaseItemInfo, ItemInfo, PhotoBrowserInfo, AnimatorParams, MaxSelected, ItemType, ClickType, PickerOrientation, SelectMode, PickerColorMode, ReminderMode, MaxCountType, PhotoBrowserRange, PhotoBrowserUIElement, - VideoPlayerState, SaveMode, SingleLineConfig, ItemDisplayRatio }; \ No newline at end of file + VideoPlayerState, SaveMode, SingleLineConfig, ItemDisplayRatio, BadgeOptionType, BadgeTypes, BadgeConfig }; \ No newline at end of file -- Gitee From f43171848ded1ff8ee9ee531d1a5e8e915fc7328 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Mon, 8 Sep 2025 20:36:07 +0800 Subject: [PATCH 02/17] =?UTF-8?q?[PhotoPickerComponent]=E8=A7=92=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 31 +++++++++++++---------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index 980224bb0d..d762f2c8b7 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -134,18 +134,22 @@ export class PhotoPickerComponent extends ViewPU { this.onSetPhotoBrowserItem(o); } else if (null == o ? void 0 : o.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); - } else if (null == o ? void 0: o.has('SET_BADGE_CONFIGS')) { - if (o.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { - this.badgeConfig = o.get('SET_BADGE_CONFIGS'); - this.badgeConfigIsSending = true; - this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); - this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: o.get('BADGE_CONFIGS_OPTION_TYPE')}); - } + } else if (null == o ? void 0 : o.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(o); } else { this.otherOnChange(o); } } + onChangedBadgeConfigs(o) { + if (o.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { + this.badgeConfig = o.get('SET_BADGE_CONFIGS'); + this.badgeConfigIsSending = true; + this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); + this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: o.get('BADGE_CONFIGS_OPTION_TYPE')}); + } + } + otherOnChange(o) { if (null == o ? void 0 : o.has('SET_PHOTO_BROWSER_UI_ELEMENT_VISIBILITY')) { this.onSetPhotoBrowserUIElementVisibility(o); @@ -319,7 +323,7 @@ export class PhotoPickerComponent extends ViewPU { if (this.onPickerControllerReady) { this.onPickerControllerReady(); if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - console.log('i need send msg to photo',this.badgeConfig?.uris.length, this.badgeConfig?.badgeType, new Date().getTime().toString()); + console.log('i need send msg to photo', this.badgeConfig?.uris.length, this.badgeConfig?.badgeType, new Date().getTime().toString()); this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); } @@ -345,10 +349,11 @@ export class PhotoPickerComponent extends ViewPU { } handleBadgeConfigSend(e) { - let index = e.nextIndex + let index = e.nextIndex; if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize*size, this.batchBadgeConfigSize * (index + 1)); - this.proxy.send({badgeConfig: unitBadgeConfig, index: index, isOver: index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true: false, badgeConfigType: this.badgeConfig.badgeType}); + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); + this.proxy.send({badgeConfig: unitBadgeConfig, index: index, + isOver: index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true: false, badgeConfigType: this.badgeConfig.badgeType}); } if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { this.badgeConfigIsSending = false; @@ -645,7 +650,7 @@ let PickerController = class { } } - addData(e,o) { + addData(e, o) { if (o === undefined) { return; } @@ -658,7 +663,7 @@ let PickerController = class { } } - deleteData(e,o) { + deleteData(e, o) { if (o === undefined) { return; } -- Gitee From 110bad098f0a6157958cf2392bd7cd67698057c2 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Mon, 8 Sep 2025 20:49:48 +0800 Subject: [PATCH 03/17] =?UTF-8?q?[photoPickerComponent]=E4=BF=AE=E6=94=B9e?= =?UTF-8?q?ts=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/PhotoPickerComponent.ets | 83 +++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index 0c1aac3bcd..64a16115be 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -45,6 +45,10 @@ export struct PhotoPickerComponent { onExceedMaxSelected?: ExceedMaxSelectedCallback; onCurrentAlbumDeleted?: CurrentAlbumDeletedCallback; onVideoPlayStateChanged?: VideoPlayStateChangedCallback; + badgeConfig?: BadgeConfig; + batchBadgeConfigSize = 1000; + maxBadgeConfigSize = 200000; + badgeConfigIsSending = false; @ObjectLink @Watch('onChanged') pickerController: PickerController; private proxy: UIExtensionProxy | undefined; @State revokeIndex = 0; @@ -64,11 +68,22 @@ export struct PhotoPickerComponent { this.onSetMaxSelectCount(data); } else if (data?.has('SET_PHOTO_BROWSER_ITEM')) { this.onSetPhotoBrowserItem(data); + } else if (data?.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(data); } else { this.otherOnChange(data); } } + private onChangedBadgeConfigs(data?: Map) { + if (data.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { + this.badgeConfig = data.get('SET_BADGE_CONFIGS'); + this.badgeConfigIsSending = true; + this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); + this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: data.get('BADGE_CONFIGS_OPTION_TYPE')}); + } + } + private otherOnChange(data?: Map) { if (data?.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); @@ -237,6 +252,10 @@ export struct PhotoPickerComponent { } else if (dataType === 'remoteReady') { if (this.onPickerControllerReady) { this.onPickerControllerReady(); + if(this.badgeConfig && this.badgeConfig.uris.length > 0) { + this.badgeConfigIsSending = true + this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType: BadgeOptionType.SET_DATA}) + } console.info('PhotoPickerComponent onReceive: onPickerControllerReady'); } } else if (dataType === 'onPhotoBrowserChanged') { @@ -252,6 +271,8 @@ export struct PhotoPickerComponent { } else if (dataType === 'onBackground') { console.info('PhotoPickerComponent onReceive: onBackground'); this.revokeIndex = 0; + } else if (dataType === 'onBadgeConfigSend') { + this.onBadgeConfigSend(wantParam); } else { this.handleOtherOnReceive(wantParam); console.info('PhotoPickerComponent onReceive: other case'); @@ -259,6 +280,17 @@ export struct PhotoPickerComponent { console.info('PhotoPickerComponent onReceive' + this.pickerController.encrypt(JSON.stringify(wantParam))); } + private onBadgeConfigSend(wantParam: Record): void { + let index = wantParam.nextIndex as number; + if(this.badgeConfig &7 this.badgeConfig.uris.length > 0) { + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); + this.proxy.send({badgeConfig: unitBadgeConfig, index: index, + sOver: index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true: false, badgeConfigType: this.badgeConfig.badgeType}) + } + if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { + this.badgeConfigIsSending = false; + } + } private handleOtherOnReceive(wantParam: Record): void { let dataType = wantParam.dataType as string; if (dataType === 'exceedMaxSelected') { @@ -582,11 +614,43 @@ export class PickerController { this.data = new Map([['SET_ALBUM_URI', albumUri]]); console.info('PhotoPickerComponent SET_ALBUM_URI' + this.encrypt(JSON.stringify(albumUri))); } + } else if (type === DataType.SET_BADGE_CONFIGS) { + let uris: string = data as string; + if (uris !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.SET_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); + } } else { console.info('PhotoPickerComponent setData: other case'); } } + addData(type: DataType, data: Object) { + if (data === undefined) { + return; + } + if(type === DataType.SET_BADGE_CONFIGS) { + let uris: string = data as string; + if (uris !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.ADD_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); + } + } + } + + deleteData(type: DataType, data: Object) { + if (data === undefined) { + return; + } + if(type === DataType.SET_BADGE_CONFIGS) { + let uris: string = data as string; + if (uris !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); + } + } + } + setMaxSelected(maxSelected: MaxSelected) { if (maxSelected) { this.data = new Map([['SET_MAX_SELECT_COUNT', maxSelected]]); @@ -787,9 +851,16 @@ class PhotoBrowserUIElementVisibility { isVisible?: boolean; } +class BadgeConfig { + badgeType?: BadgeTypes, + uris?: string[] +} + export enum DataType { SET_SELECTED_URIS = 1, - SET_ALBUM_URI = 2 + SET_ALBUM_URI = 2, + SET_SELECTED_INFO = 3, + SET_BADGE_CONFIGS = 4 } export enum ItemType { @@ -856,4 +927,14 @@ export enum SaveMode { export enum ItemDisplayRatio { SQUARE_RATIO = 0, ORIGINAL_SIZE_RATIO = 1 +} + +export enum BadgeTypes { + BADGE_UPLOADED = 1 +} + +export enum BadgeOptionType { + SET_DATA = 0, + ADD_DATA = 1, + DELETE_DATA = 2 } \ No newline at end of file -- Gitee From 201456a30d37609ca9a592ad8850cb8d56c97d50 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Mon, 8 Sep 2025 21:19:18 +0800 Subject: [PATCH 04/17] photoPickerComponent:codeCheck Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index d762f2c8b7..acf4b85584 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -149,7 +149,7 @@ export class PhotoPickerComponent extends ViewPU { this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: o.get('BADGE_CONFIGS_OPTION_TYPE')}); } } - + otherOnChange(o) { if (null == o ? void 0 : o.has('SET_PHOTO_BROWSER_UI_ELEMENT_VISIBILITY')) { this.onSetPhotoBrowserUIElementVisibility(o); @@ -352,8 +352,9 @@ export class PhotoPickerComponent extends ViewPU { let index = e.nextIndex; if (this.badgeConfig && this.badgeConfig.uris.length > 0) { const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); - this.proxy.send({badgeConfig: unitBadgeConfig, index: index, - isOver: index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true: false, badgeConfigType: this.badgeConfig.badgeType}); + this.proxy.send({badgeConfig : unitBadgeConfig, index: index, + isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, + badgeConfigType : this.badgeConfig.badgeType}); } if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { this.badgeConfigIsSending = false; -- Gitee From 1d3f9e91c583467366da2c7985f435163400d4dc Mon Sep 17 00:00:00 2001 From: pengpeng7872 Date: Mon, 8 Sep 2025 14:27:07 +0000 Subject: [PATCH 05/17] update frameworks/js/src/PhotoPickerComponent.ets. Signed-off-by: pengpeng7872 --- frameworks/js/src/PhotoPickerComponent.ets | 83 +--------------------- 1 file changed, 1 insertion(+), 82 deletions(-) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index 64a16115be..0c1aac3bcd 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -45,10 +45,6 @@ export struct PhotoPickerComponent { onExceedMaxSelected?: ExceedMaxSelectedCallback; onCurrentAlbumDeleted?: CurrentAlbumDeletedCallback; onVideoPlayStateChanged?: VideoPlayStateChangedCallback; - badgeConfig?: BadgeConfig; - batchBadgeConfigSize = 1000; - maxBadgeConfigSize = 200000; - badgeConfigIsSending = false; @ObjectLink @Watch('onChanged') pickerController: PickerController; private proxy: UIExtensionProxy | undefined; @State revokeIndex = 0; @@ -68,22 +64,11 @@ export struct PhotoPickerComponent { this.onSetMaxSelectCount(data); } else if (data?.has('SET_PHOTO_BROWSER_ITEM')) { this.onSetPhotoBrowserItem(data); - } else if (data?.has('SET_BADGE_CONFIGS')) { - this.onChangedBadgeConfigs(data); } else { this.otherOnChange(data); } } - private onChangedBadgeConfigs(data?: Map) { - if (data.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { - this.badgeConfig = data.get('SET_BADGE_CONFIGS'); - this.badgeConfigIsSending = true; - this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); - this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: data.get('BADGE_CONFIGS_OPTION_TYPE')}); - } - } - private otherOnChange(data?: Map) { if (data?.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); @@ -252,10 +237,6 @@ export struct PhotoPickerComponent { } else if (dataType === 'remoteReady') { if (this.onPickerControllerReady) { this.onPickerControllerReady(); - if(this.badgeConfig && this.badgeConfig.uris.length > 0) { - this.badgeConfigIsSending = true - this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType: BadgeOptionType.SET_DATA}) - } console.info('PhotoPickerComponent onReceive: onPickerControllerReady'); } } else if (dataType === 'onPhotoBrowserChanged') { @@ -271,8 +252,6 @@ export struct PhotoPickerComponent { } else if (dataType === 'onBackground') { console.info('PhotoPickerComponent onReceive: onBackground'); this.revokeIndex = 0; - } else if (dataType === 'onBadgeConfigSend') { - this.onBadgeConfigSend(wantParam); } else { this.handleOtherOnReceive(wantParam); console.info('PhotoPickerComponent onReceive: other case'); @@ -280,17 +259,6 @@ export struct PhotoPickerComponent { console.info('PhotoPickerComponent onReceive' + this.pickerController.encrypt(JSON.stringify(wantParam))); } - private onBadgeConfigSend(wantParam: Record): void { - let index = wantParam.nextIndex as number; - if(this.badgeConfig &7 this.badgeConfig.uris.length > 0) { - const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); - this.proxy.send({badgeConfig: unitBadgeConfig, index: index, - sOver: index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true: false, badgeConfigType: this.badgeConfig.badgeType}) - } - if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { - this.badgeConfigIsSending = false; - } - } private handleOtherOnReceive(wantParam: Record): void { let dataType = wantParam.dataType as string; if (dataType === 'exceedMaxSelected') { @@ -614,43 +582,11 @@ export class PickerController { this.data = new Map([['SET_ALBUM_URI', albumUri]]); console.info('PhotoPickerComponent SET_ALBUM_URI' + this.encrypt(JSON.stringify(albumUri))); } - } else if (type === DataType.SET_BADGE_CONFIGS) { - let uris: string = data as string; - if (uris !== undefined) { - this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.SET_DATA]]); - console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); - } } else { console.info('PhotoPickerComponent setData: other case'); } } - addData(type: DataType, data: Object) { - if (data === undefined) { - return; - } - if(type === DataType.SET_BADGE_CONFIGS) { - let uris: string = data as string; - if (uris !== undefined) { - this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.ADD_DATA]]); - console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); - } - } - } - - deleteData(type: DataType, data: Object) { - if (data === undefined) { - return; - } - if(type === DataType.SET_BADGE_CONFIGS) { - let uris: string = data as string; - if (uris !== undefined) { - this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); - console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); - } - } - } - setMaxSelected(maxSelected: MaxSelected) { if (maxSelected) { this.data = new Map([['SET_MAX_SELECT_COUNT', maxSelected]]); @@ -851,16 +787,9 @@ class PhotoBrowserUIElementVisibility { isVisible?: boolean; } -class BadgeConfig { - badgeType?: BadgeTypes, - uris?: string[] -} - export enum DataType { SET_SELECTED_URIS = 1, - SET_ALBUM_URI = 2, - SET_SELECTED_INFO = 3, - SET_BADGE_CONFIGS = 4 + SET_ALBUM_URI = 2 } export enum ItemType { @@ -927,14 +856,4 @@ export enum SaveMode { export enum ItemDisplayRatio { SQUARE_RATIO = 0, ORIGINAL_SIZE_RATIO = 1 -} - -export enum BadgeTypes { - BADGE_UPLOADED = 1 -} - -export enum BadgeOptionType { - SET_DATA = 0, - ADD_DATA = 1, - DELETE_DATA = 2 } \ No newline at end of file -- Gitee From 9e5ece8e1a205115e9ccf06b0904ecb009348d50 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 09:16:08 +0800 Subject: [PATCH 06/17] =?UTF-8?q?[photopickercomponent]=E8=A7=92=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/PhotoPickerComponent.ets | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index 64a16115be..cad6ac0859 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -46,9 +46,9 @@ export struct PhotoPickerComponent { onCurrentAlbumDeleted?: CurrentAlbumDeletedCallback; onVideoPlayStateChanged?: VideoPlayStateChangedCallback; badgeConfig?: BadgeConfig; - batchBadgeConfigSize = 1000; - maxBadgeConfigSize = 200000; - badgeConfigIsSending = false; + batchBadgeConfigSize: number = 1000; + maxBadgeConfigSize: number = 200000; + badgeConfigIsSending: boolean = false; @ObjectLink @Watch('onChanged') pickerController: PickerController; private proxy: UIExtensionProxy | undefined; @State revokeIndex = 0; @@ -77,11 +77,11 @@ export struct PhotoPickerComponent { private onChangedBadgeConfigs(data?: Map) { if (data.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { - this.badgeConfig = data.get('SET_BADGE_CONFIGS'); - this.badgeConfigIsSending = true; - this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); - this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: data.get('BADGE_CONFIGS_OPTION_TYPE')}); - } + this.badgeConfig = data.get('SET_BADGE_CONFIGS'); + this.badgeConfigIsSending = true; + this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); + this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: data.get('BADGE_CONFIGS_OPTION_TYPE')}); + } } private otherOnChange(data?: Map) { @@ -254,7 +254,7 @@ export struct PhotoPickerComponent { this.onPickerControllerReady(); if(this.badgeConfig && this.badgeConfig.uris.length > 0) { this.badgeConfigIsSending = true - this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType: BadgeOptionType.SET_DATA}) + this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType : BadgeOptionType.SET_DATA}) } console.info('PhotoPickerComponent onReceive: onPickerControllerReady'); } -- Gitee From 2a32a187babe62ac1f5272f1b3a1bf9aa79f0e65 Mon Sep 17 00:00:00 2001 From: pengpeng7872 Date: Tue, 9 Sep 2025 01:57:23 +0000 Subject: [PATCH 07/17] update frameworks/js/src/PhotoPickerComponent.ets. Signed-off-by: pengpeng7872 --- frameworks/js/src/PhotoPickerComponent.ets | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index f2b4909571..8f8295f9e2 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -251,15 +251,15 @@ export struct PhotoPickerComponent { if (this.onPickerControllerReady) { this.onPickerControllerReady(); if(this.badgeConfig && this.badgeConfig.uris.length > 0) { - this.badgeConfigIsSending = true - this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType : BadgeOptionType.SET_DATA}) + this.badgeConfigIsSending = true; + this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType : BadgeOptionType.SET_DATA}); } console.info('PhotoPickerComponent onReceive: onPickerControllerReady'); } } else if (dataType === 'onPhotoBrowserChanged') { this.handlePhotoBrowserChange(wantParam); } else if (dataType === 'onVideoPlayStateChanged') { - this.handleVideoPlayStateChange(wantParam) + this.handleVideoPlayStateChange(wantParam); } else if (dataType === 'replaceCallback') { this.handleReplaceCallback(wantParam); } else if (dataType === 'createCallback') { @@ -382,7 +382,7 @@ export struct PhotoPickerComponent { private handleVideoPlayStateChange(wantParam: Record): void { if (this.onVideoPlayStateChanged) { - this.onVideoPlayStateChanged(wantParam.state as VideoPlayerState) + this.onVideoPlayStateChanged(wantParam.state as VideoPlayerState); } console.info('PhotoPickerComponent onReceive: onVideoPlayStateChanged = ' + JSON.stringify(wantParam)); } @@ -448,7 +448,7 @@ export struct PhotoPickerComponent { singleLineConfig.itemDisplayRatio; singleLineConfig.itemBorderRadius = this.getSingleLineConfigItemBorderRadius(singleLineConfig.itemBorderRadius); singleLineConfig.itemGap = this.getLength(singleLineConfig.itemGap); - return singleLineConfig + return singleLineConfig; } private getSingleLineConfigItemBorderRadius(itemBorderRadius?: Length | BorderRadiuses | -- Gitee From 61ece46b36220c920dc2ec58ac45044da352c0a0 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 11:45:57 +0800 Subject: [PATCH 08/17] =?UTF-8?q?[photoPickerComponent]ets=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/PhotoPickerComponent.ets | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index f2b4909571..57c59dd5ee 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -68,6 +68,8 @@ export struct PhotoPickerComponent { this.onSetMaxSelectCount(data); } else if (data?.has('SET_PHOTO_BROWSER_ITEM')) { this.onSetPhotoBrowserItem(data); + } else if (data?.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(data); } else { this.otherOnChange(data); } @@ -276,6 +278,19 @@ export struct PhotoPickerComponent { console.info('PhotoPickerComponent onReceive' + this.pickerController.encrypt(JSON.stringify(wantParam))); } + private handleBadgeConfigSend(wantParam: Record): void { + let index = wantParam.nextIndex as string; + if (this.badgeConfig && this.badgeConfig.uris.length > 0) { + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); + this.proxy.send({badgeConfig : unitBadgeConfig, index: index, + isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, + badgeConfigType : this.badgeConfig.badgeType}); + } + if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { + this.badgeConfigIsSending = false; + } + } + private handleOtherOnReceive(wantParam: Record): void { let dataType = wantParam.dataType as string; if (dataType === 'exceedMaxSelected') { @@ -599,11 +614,43 @@ export class PickerController { this.data = new Map([['SET_ALBUM_URI', albumUri]]); console.info('PhotoPickerComponent SET_ALBUM_URI' + this.encrypt(JSON.stringify(albumUri))); } + } else if (type === DataType.SET_BADGE_CONFIGS) { + let uris: string = data as string; + if (uris !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE',BadgeOptionType.SET_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); + } } else { console.info('PhotoPickerComponent setData: other case'); } } + addData(type: DataType, data: Object) { + if (data === undefined) { + return; + } + if (type === DataType.SET_BADGE_CONFIGS) { + let uris = data as string; + if (uris !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.ADD_DATA]]); + } + return; + } + } + + deleteData(type: DataType, data: Object) { + if (data === undefined) { + return; + } + if (type === DataType.SET_BADGE_CONFIGS) { + let uris = data as string; + if (uris !== undefined) { + this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); + } + return; + } + } + setMaxSelected(maxSelected: MaxSelected) { if (maxSelected) { this.data = new Map([['SET_MAX_SELECT_COUNT', maxSelected]]); @@ -804,6 +851,11 @@ class PhotoBrowserUIElementVisibility { isVisible?: boolean; } +export class BadgeConfig { + badgeConfigType?: BadgeTypes, + uris?: string[] +} + export enum DataType { SET_SELECTED_URIS = 1, SET_ALBUM_URI = 2 @@ -873,4 +925,14 @@ export enum SaveMode { export enum ItemDisplayRatio { SQUARE_RATIO = 0, ORIGINAL_SIZE_RATIO = 1 +} + +export enum BadgeTypes { + BADGE_UPLOADED = 1 +} + +export enum BadgeOptionType { + SET_DATA = 1, + ADD_DATA = 2, + DELETE_DATA = 3 } \ No newline at end of file -- Gitee From abf918503c1d2429ba50bae4e8f66689288be336 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 17:13:44 +0800 Subject: [PATCH 09/17] =?UTF-8?q?[photoPickerComponent]=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E3=80=81=E5=86=85=E5=AE=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/js/src/PhotoPickerComponent.ets | 16 +++++++++++----- frameworks/js/src/photopickercomponent.js | 18 ++++++++++++++++-- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index 05221b3cde..9e8855c29c 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -76,7 +76,8 @@ export struct PhotoPickerComponent { } private onChangedBadgeConfigs(data?: Map) { - if (data.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { + console.log('controller onChanged: SET_BADGE_CONFIGS,badgeConfigIsSending:',this.badgeConfigIsSending) + if (this.badgeConfigIsSending !== true) { this.badgeConfig = data.get('SET_BADGE_CONFIGS'); this.badgeConfigIsSending = true; this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); @@ -253,6 +254,7 @@ export struct PhotoPickerComponent { if (this.onPickerControllerReady) { this.onPickerControllerReady(); if(this.badgeConfig && this.badgeConfig.uris.length > 0) { + console.log('handleOnReceive: send msg to photo:uri.length:',this.badgeConfig?.uris?.length) this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs : true, BadgeOptionType : BadgeOptionType.SET_DATA}); } @@ -271,6 +273,9 @@ export struct PhotoPickerComponent { } else if (dataType === 'onBackground') { console.info('PhotoPickerComponent onReceive: onBackground'); this.revokeIndex = 0; + } else if (dataType === 'onBadgeConfigSend') { + this.handleBadgeConfigSend(wantParam) + console.info('PhotoPickerComponent onReceive: onBadgeConfigSend'); } else { this.handleOtherOnReceive(wantParam); console.info('PhotoPickerComponent onReceive: other case'); @@ -281,10 +286,11 @@ export struct PhotoPickerComponent { private handleBadgeConfigSend(wantParam: Record): void { let index = wantParam.nextIndex as string; if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); - this.proxy.send({badgeConfig : unitBadgeConfig, index: index, - isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, - badgeConfigType : this.badgeConfig.badgeType}); + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); + console.log('handleBadgeConfigSend: send piece msg to photo index-:',index,'----',unitBadgeConfig.length) + this.proxy.send({badgeConfig : unitBadgeConfig, index: index, + isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, + badgeConfigType : this.badgeConfig.badgeType}); } if (index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize)) { this.badgeConfigIsSending = false; diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index acf4b85584..f726fe9023 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -80,6 +80,8 @@ export class PhotoPickerComponent extends ViewPU { void 0 !== e.pickerOptions.badgeConfig && (this.badgeConfig = e.pickerOptions.badgeConfig); this.__pickerController.set(e.pickerController); if (this.badgeConfig && this.badgeConfig.uris !== undefined) { + console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length) + console.log('badgeConfig.badge_type:' + this.badgeConfig.badgeType) this.badgeConfig.uris.splice(this.maxBadgeConfigSize); } void 0 !== e.proxy && (this.proxy = e.proxy); @@ -142,7 +144,11 @@ export class PhotoPickerComponent extends ViewPU { } onChangedBadgeConfigs(o) { - if (o.get('BADGE_CONFIGS_OPTION_TYPE') === BadgeOptionType.SET_DATA || this.badgeConfigIsSending !== true) { + + console.log('PhotoPickerComponent onChanged: onChangedBadgeConfigs'); + if (this.badgeConfigIsSending !== true) { + console.log('badgeConfigType:' + o.get('BADGE_CONFIGS_OPTION_TYPE')); + console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length); this.badgeConfig = o.get('SET_BADGE_CONFIGS'); this.badgeConfigIsSending = true; this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); @@ -323,7 +329,7 @@ export class PhotoPickerComponent extends ViewPU { if (this.onPickerControllerReady) { this.onPickerControllerReady(); if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - console.log('i need send msg to photo', this.badgeConfig?.uris.length, this.badgeConfig?.badgeType, new Date().getTime().toString()); + console.log('i need send msg to photo' + this.badgeConfig?.uris.length + '---' + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); } @@ -351,7 +357,9 @@ export class PhotoPickerComponent extends ViewPU { handleBadgeConfigSend(e) { let index = e.nextIndex; if (this.badgeConfig && this.badgeConfig.uris.length > 0) { + console.log('handleBadgeConfigSend uris.length: ' + this.badgeConfig.uris.length); const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); + console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length); this.proxy.send({badgeConfig : unitBadgeConfig, index: index, isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, badgeConfigType : this.badgeConfig.badgeType}); @@ -645,6 +653,8 @@ let PickerController = class { let e = o; if (e !== undefined) { this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.SET_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(e))); + console.info('PhotoPickerComponent BADGE_CONFIGS_OPTION_TYPE: set_data'); } } else { console.info('PhotoPickerComponent setData: other case'); @@ -659,6 +669,8 @@ let PickerController = class { let e = o; if (e !== undefined) { this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.ADD_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(e))); + console.info('PhotoPickerComponent BADGE_CONFIGS_OPTION_TYPE: add_data'); } return; } @@ -672,6 +684,8 @@ let PickerController = class { let e = o; if (e !== undefined) { this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); + console.info('PhotoPickerComponent BADGE_CONFIGS_OPTION_TYPE: delete_data'); + } return; } -- Gitee From 8e6db9331ea2311bffa5d333ae41bbebf34c83dc Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 17:22:37 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index f726fe9023..d55c1467e3 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -144,15 +144,14 @@ export class PhotoPickerComponent extends ViewPU { } onChangedBadgeConfigs(o) { - console.log('PhotoPickerComponent onChanged: onChangedBadgeConfigs'); if (this.badgeConfigIsSending !== true) { console.log('badgeConfigType:' + o.get('BADGE_CONFIGS_OPTION_TYPE')); - console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length); this.badgeConfig = o.get('SET_BADGE_CONFIGS'); this.badgeConfigIsSending = true; this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: o.get('BADGE_CONFIGS_OPTION_TYPE')}); + console.log('badgeConfig.uris.length:' + this.badgeConfig?.uris?.length || '--'); } } @@ -329,7 +328,8 @@ export class PhotoPickerComponent extends ViewPU { if (this.onPickerControllerReady) { this.onPickerControllerReady(); if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - console.log('i need send msg to photo' + this.badgeConfig?.uris.length + '---' + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); + console.log('i need send msg to photo' + this.badgeConfig?.uris.length + '---' + + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); } @@ -359,7 +359,9 @@ export class PhotoPickerComponent extends ViewPU { if (this.badgeConfig && this.badgeConfig.uris.length > 0) { console.log('handleBadgeConfigSend uris.length: ' + this.badgeConfig.uris.length); const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); - console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length); + console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length + 'index: ' + index + + 'this.badgeConfig.uris.length: ' + this.badgeConfig?.uris?.length + ); this.proxy.send({badgeConfig : unitBadgeConfig, index: index, isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, badgeConfigType : this.badgeConfig.badgeType}); @@ -684,6 +686,7 @@ let PickerController = class { let e = o; if (e !== undefined) { this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(e))); console.info('PhotoPickerComponent BADGE_CONFIGS_OPTION_TYPE: delete_data'); } -- Gitee From e7aea31076bc30c55b98ecfd661c8ceedfc16481 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 17:38:18 +0800 Subject: [PATCH 11/17] bugfix Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index d55c1467e3..87988d2a30 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -327,8 +327,8 @@ export class PhotoPickerComponent extends ViewPU { } else if ('remoteReady' === o) { if (this.onPickerControllerReady) { this.onPickerControllerReady(); - if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - console.log('i need send msg to photo' + this.badgeConfig?.uris.length + '---' + if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { + console.log('i need send msg to photo' + this.badgeConfig?.uris?.length + '---' + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); @@ -356,7 +356,7 @@ export class PhotoPickerComponent extends ViewPU { handleBadgeConfigSend(e) { let index = e.nextIndex; - if (this.badgeConfig && this.badgeConfig.uris.length > 0) { + if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { console.log('handleBadgeConfigSend uris.length: ' + this.badgeConfig.uris.length); const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length + 'index: ' + index -- Gitee From a183f3ca121653543cf9962d90d10f7d80778006 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 17:41:54 +0800 Subject: [PATCH 12/17] 'bugfix' Signed-off-by: pengpeng7872 <2285070166@qq.com> --- .../src/medialibrary_album_operations.cpp | 1 + frameworks/js/src/media_library_comm_napi.cpp | 2 +- frameworks/js/src/media_library_napi.cpp | 99 +++++++++++++------ .../native/c_api/media_asset_helper_impl.cpp | 2 +- .../src/media_asset_manager_impl.cpp | 13 ++- .../include/clone_restore.h | 11 +++ .../restore/media_library_db_upgrade.h | 6 +- .../src/classify/clone_restore_classify.cpp | 8 +- .../src/clone_restore.cpp | 20 ++++ .../src/restore/media_library_db_upgrade.cpp | 37 ++++++- .../src/upgrade_restore.cpp | 4 +- .../utils/enhancement_database_operations.cpp | 5 + .../media_fuse/src/media_fuse_manager.cpp | 1 + .../src/scanner/metadata_extractor.cpp | 7 +- .../include/classify_aggregate_types.h | 1 - .../media_assets_permission_policy.cpp | 2 +- .../src/command/recv_command_v10.cpp | 7 +- 17 files changed, 176 insertions(+), 50 deletions(-) diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp index b50c6a4caf..d44ccea1d0 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp @@ -3230,6 +3230,7 @@ int32_t MediaLibraryAlbumOperations::UpdatePhotoAlbumOrder(const vectorNotify(PhotoAlbumColumns::ALBUM_URI_PREFIX, NotifyType::NOTIFY_UPDATE); + AlbumAccurateRefresh::NotifyForReCheck(); } return successSetOrderRows == 0 ? E_INNER_FAIL : E_OK; } diff --git a/frameworks/js/src/media_library_comm_napi.cpp b/frameworks/js/src/media_library_comm_napi.cpp index 6fa7187023..e4d9698278 100644 --- a/frameworks/js/src/media_library_comm_napi.cpp +++ b/frameworks/js/src/media_library_comm_napi.cpp @@ -40,7 +40,7 @@ napi_value MediaLibraryCommNapi::CreatePhotoAssetNapi( shared_ptr fileAsset = make_shared(); fileAsset->SetUri(uri); string fileId = MediaFileUtils::GetIdFromUri(uri); - if (MediaFileUtils::IsValidInteger(fileId)) { + if (!fileId.empty() && all_of(fileId.begin(), fileId.end(), ::isdigit)) { fileAsset->SetId(stoi(fileId)); } diff --git a/frameworks/js/src/media_library_napi.cpp b/frameworks/js/src/media_library_napi.cpp index 32514c6d1f..0fc5cd5563 100644 --- a/frameworks/js/src/media_library_napi.cpp +++ b/frameworks/js/src/media_library_napi.cpp @@ -7011,7 +7011,8 @@ napi_value MediaLibraryNapi::PhotoAccessStopCreateThumbnailTask(napi_env env, na RETURN_NAPI_UNDEFINED(env); } -static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_map& idxToCount) +static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_map& idxToCount, + MediaLibraryAsyncContext* context) { int errCode = 0; GetAnalysisProcessReqBody reqBody; @@ -7019,6 +7020,14 @@ static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_m QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Label Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); @@ -7037,7 +7046,7 @@ static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_m ret->Close(); } -static std::string GetAnalysisProgress() +static void GetAnalysisProgress(MediaLibraryAsyncContext* context) { int errCode = 0; GetAnalysisProcessReqBody reqBody; @@ -7045,15 +7054,23 @@ static std::string GetAnalysisProgress() QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); - return ""; + return; } if (ret->GoToFirstRow() != NativeRdb::E_OK) { NAPI_ERR_LOG("GotoFirstRow failed, errCode is %{public}d", errCode); ret->Close(); - return ""; + return; } vector columnList = {SEARCH_FINISH_CNT, LOCATION_FINISH_CNT, FACE_FINISH_CNT, OBJECT_FINISH_CNT, AESTHETIC_FINISH_CNT, OCR_FINISH_CNT, POSE_FINISH_CNT, SALIENCY_FINISH_CNT, RECOMMENDATION_FINISH_CNT, @@ -7068,20 +7085,19 @@ static std::string GetAnalysisProgress() jsonObj[columnName] = colValue; } ret->Close(); - string retStr = jsonObj.dump(); - NAPI_INFO_LOG("Progress json is %{public}s", retStr.c_str()); - return retStr; + context->analysisProgress = jsonObj.dump(); + NAPI_INFO_LOG("Progress json is %{public}s", context->analysisProgress.c_str()); } -static std::string GetLabelAnalysisProgress() +static void GetLabelAnalysisProgress(MediaLibraryAsyncContext* context) { unordered_map idxToCount = { {0, "totalCount"}, {1, "finishedCount"}, {2, "LabelCount"} }; nlohmann::json jsonObj; - GetMediaAnalysisServiceProgress(jsonObj, idxToCount); + GetMediaAnalysisServiceProgress(jsonObj, idxToCount, context); NAPI_INFO_LOG("Progress json is %{public}s", jsonObj.dump().c_str()); - return jsonObj.dump(); + context->analysisProgress = jsonObj.dump(); } static std::string GetTotalCount() @@ -7117,7 +7133,7 @@ static std::string GetTotalCount() return to_string(totalCount); } -static std::string GetFaceAnalysisProgress() +static void GetFaceAnalysisProgress(MediaLibraryAsyncContext* context) { string curTotalCount = GetTotalCount(); @@ -7127,10 +7143,18 @@ static std::string GetFaceAnalysisProgress() QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Face Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); - return ""; + return; } if (ret->GoToNextRow() != NativeRdb::E_OK) { ret->Close(); @@ -7139,16 +7163,16 @@ static std::string GetFaceAnalysisProgress() jsonObj["geoFinishedCount"] = 0; jsonObj["searchFinishedCount"] = 0; jsonObj["totalCount"] = curTotalCount; - string retJson = jsonObj.dump(); + context->analysisProgress = jsonObj.dump(); NAPI_ERR_LOG("GetFaceAnalysisProgress failed, errCode is %{public}d, json is %{public}s", errCode, - retJson.c_str()); - return retJson; + context->analysisProgress.c_str()); + return; } string retJson = MediaLibraryNapiUtils::GetStringValueByColumn(ret, HIGHLIGHT_ANALYSIS_PROGRESS); if (retJson == "" || !nlohmann::json::accept(retJson)) { ret->Close(); NAPI_ERR_LOG("retJson is empty or invalid"); - return ""; + return; } nlohmann::json curJsonObj = nlohmann::json::parse(retJson); int preTotalCount = curJsonObj["totalCount"]; @@ -7157,13 +7181,12 @@ static std::string GetFaceAnalysisProgress() curTotalCount.c_str(), preTotalCount); curJsonObj["totalCount"] = curTotalCount; } - retJson = curJsonObj.dump(); - NAPI_INFO_LOG("GoToNextRow successfully and json is %{public}s", retJson.c_str()); + context->analysisProgress = curJsonObj.dump(); + NAPI_INFO_LOG("GoToNextRow successfully and json is %{public}s", context->analysisProgress.c_str()); ret->Close(); - return retJson; } -static std::string GetHighlightAnalysisProgress() +static void GetHighlightAnalysisProgress(MediaLibraryAsyncContext* context) { unordered_map idxToCount = { {0, "ClearCount"}, {1, "DeleteCount"}, {2, "NotProduceCount"}, {3, "ProduceCount"}, {4, "PushCount"} @@ -7174,15 +7197,23 @@ static std::string GetHighlightAnalysisProgress() QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Highlight Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); - return ""; + return; } if (ret->GoToFirstRow() != NativeRdb::E_OK) { NAPI_ERR_LOG("GotoFirstRow failed, errCode is %{public}d", errCode); ret->Close(); - return ""; + return; } nlohmann::json jsonObj; for (size_t i = 0; i < idxToCount.size(); ++i) { @@ -7191,9 +7222,8 @@ static std::string GetHighlightAnalysisProgress() jsonObj[idxToCount[i]] = tmp; } ret->Close(); - string retStr = jsonObj.dump(); - NAPI_INFO_LOG("Progress json is %{public}s", retStr.c_str()); - return retStr; + context->analysisProgress = jsonObj.dump(); + NAPI_INFO_LOG("Progress json is %{public}s", context->analysisProgress.c_str()); } static void JSGetAnalysisProgressExecute(MediaLibraryAsyncContext* context) @@ -7205,19 +7235,19 @@ static void JSGetAnalysisProgressExecute(MediaLibraryAsyncContext* context) switch (context->analysisType) { case ANALYSIS_INVALID: { // 处理总进度 - context->analysisProgress = GetAnalysisProgress(); + GetAnalysisProgress(context); break; } case ANALYSIS_LABEL: { - context->analysisProgress = GetLabelAnalysisProgress(); + GetLabelAnalysisProgress(context); break; } case ANALYSIS_FACE: { - context->analysisProgress = GetFaceAnalysisProgress(); + GetFaceAnalysisProgress(context); break; } case ANALYSIS_HIGHLIGHT: { - context->analysisProgress = GetHighlightAnalysisProgress(); + GetHighlightAnalysisProgress(context); break; } default: @@ -7269,6 +7299,11 @@ napi_value MediaLibraryNapi::PhotoAccessHelperGetDataAnalysisProgress(napi_env e MediaLibraryTracer tracer; tracer.Start("PhotoAccessHelperGetDataAnalysisProgress"); + if (!MediaLibraryNapiUtils::IsSystemApp()) { + NapiError::ThrowError(env, E_CHECK_SYSTEMAPP_FAIL, "This interface can be called only by system apps"); + return nullptr; + } + napi_value result = nullptr; NAPI_CALL(env, napi_get_undefined(env, &result)); unique_ptr asyncContext = make_unique(); @@ -9761,7 +9796,11 @@ static void JSStartAssetAnalysisExecute(napi_env env, void *data) respBody.resultSet->Close(); } if (errCode != E_OK) { - context->SaveError(errCode); + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } NAPI_ERR_LOG("Start assets analysis failed! errCode is = %{public}d", errCode); } } diff --git a/frameworks/native/c_api/media_asset_helper_impl.cpp b/frameworks/native/c_api/media_asset_helper_impl.cpp index a0d0d11247..9d25bccc9d 100644 --- a/frameworks/native/c_api/media_asset_helper_impl.cpp +++ b/frameworks/native/c_api/media_asset_helper_impl.cpp @@ -107,7 +107,7 @@ OH_MediaAsset* MediaAssetHelperImpl::GetMediaAsset(std::string uri, int32_t came fileAsset->SetUri(uri); std::string fileId = MediaFileUtils::GetIdFromUri(uri); - if (!fileId.empty()) { + if (!fileId.empty() && all_of(fileId.begin(), fileId.end(), ::isdigit)) { fileAsset->SetId(stoi(fileId)); } fileAsset->SetDisplayName(MediaFileUtils::GetFileName(uri)); diff --git a/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp b/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp index f6565469d2..e945598dcf 100644 --- a/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp +++ b/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp @@ -317,17 +317,22 @@ bool MediaAssetManagerImpl::NotifyImageDataPrepared(AssetHandler *assetHandler) } int32_t writeResult = E_OK; + errno_t strncpyResult = E_OK; if (dataHandler->GetReturnDataType() == ReturnDataType::TYPE_TARGET_FILE) { writeResult = MediaAssetManagerImpl::WriteFileToPath(dataHandler->GetRequestUri(), dataHandler->GetDestUri(), dataHandler->GetSourceMode() == NativeSourceMode::ORIGINAL_MODE); Native_RequestId requestId; - strncpy_s(requestId.requestId, UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + strncpyResult = strncpy_s(requestId.requestId, + UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + CHECK_AND_RETURN_RET_LOG(strncpyResult == E_OK, false, "strncpy failed"); if (dataHandler->onDataPreparedHandler_ != nullptr) { dataHandler->onDataPreparedHandler_(writeResult, requestId); } } else if (dataHandler->GetReturnDataType() == ReturnDataType::TYPE_IMAGE_SOURCE) { MediaLibrary_RequestId requestId; - strncpy_s(requestId.requestId, UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + strncpyResult = strncpy_s(requestId.requestId, + UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + CHECK_AND_RETURN_RET_LOG(strncpyResult == E_OK, false, "strncpy failed"); if (dataHandler->onRequestImageDataPreparedHandler_ != nullptr) { int32_t photoQuality = static_cast(MultiStagesCapturePhotoStatus::HIGH_QUALITY_STATUS); MediaLibrary_MediaQuality quality = (dataHandler->GetPhotoQuality() == photoQuality) @@ -340,7 +345,9 @@ bool MediaAssetManagerImpl::NotifyImageDataPrepared(AssetHandler *assetHandler) } } else if (dataHandler->GetReturnDataType() == ReturnDataType::TYPE_MOVING_PHOTO) { MediaLibrary_RequestId requestId; - strncpy_s(requestId.requestId, UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + strncpyResult = strncpy_s(requestId.requestId, + UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + CHECK_AND_RETURN_RET_LOG(strncpyResult == E_OK, false, "strncpy failed"); if (dataHandler->onRequestMovingPhotoDataPreparedHandler_ != nullptr) { int32_t photoQuality = static_cast(MultiStagesCapturePhotoStatus::HIGH_QUALITY_STATUS); MediaLibrary_MediaQuality quality = (dataHandler->GetPhotoQuality() == photoQuality) diff --git a/frameworks/services/media_backup_extension/include/clone_restore.h b/frameworks/services/media_backup_extension/include/clone_restore.h index fe3efb5c81..bdff66c5a7 100644 --- a/frameworks/services/media_backup_extension/include/clone_restore.h +++ b/frameworks/services/media_backup_extension/include/clone_restore.h @@ -220,6 +220,7 @@ private: void RestoreVideoFaceData(); void PrepareShootingModeVal(const FileInfo &fileInfo, NativeRdb::ValuesBucket &values); void GetInsertValueFromValMap(const FileInfo &fileInfo, NativeRdb::ValuesBucket &values); + void SetAggregateBitThird(); template static void PutIfPresent(NativeRdb::ValuesBucket& values, const std::string& columnName, @@ -284,6 +285,16 @@ private: CloneRestoreConfigInfo dstCloneRestoreConfigInfo_; CloneRestoreConfigInfo srcCloneRestoreConfigInfo_; DstDeviceBackupInfo dstDeviceBackupInfo_; + +private: + const std::string SQL_QUERY_CLASSIFY_ALBUM_EXIST = " \ + SELECT \ + count(1) AS count \ + FROM AnalysisAlbum \ + WHERE \ + album_type = ? \ + AND \ + album_subtype = ?;"; }; template diff --git a/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h b/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h index 98a52f8ddc..0f36de1738 100644 --- a/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h +++ b/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h @@ -27,7 +27,9 @@ class MediaLibraryDbUpgrade { public: int32_t OnUpgrade(NativeRdb::RdbStore &store); int32_t CreateClassifyAlbum(const std::string &newAlbumName, NativeRdb::RdbStore &store); - bool CheckClassifyAlbumExist(const std::string &newAlbumName, NativeRdb::RdbStore &store); + bool CheckClassifyAlbumExist(const std::string &newAlbumName, NativeRdb::RdbStore &store, + bool &isSetAggregateBit); + void SetAggregateBit(const int32_t &bitPosition); private: int32_t UpgradeAlbumPlugin(NativeRdb::RdbStore &store); @@ -45,7 +47,7 @@ private: int32_t UpdatelPathColumn(NativeRdb::RdbStore &store); int32_t ExecSqlWithRetry(std::function execSql); void ProcessClassifyAlbum(const std::string &newAlbumName, const std::vector &oriAlbumNames, - NativeRdb::RdbStore &store); + NativeRdb::RdbStore &store, bool &isSetAggregateBitSecond); void ProcessOcrClassifyAlbum(const std::string &newAlbumName, const std::vector &ocrText, NativeRdb::RdbStore &store); diff --git a/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp b/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp index f440d1fc8b..8bd3f5ade5 100644 --- a/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp +++ b/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp @@ -582,7 +582,9 @@ void CloneRestoreClassify::AddSelfieAlbum() CHECK_AND_RETURN_LOG(mediaLibraryRdb_ != nullptr, "AddSelfieAlbum failed, rdbStore is nullptr"); std::string selfieAlbum = std::to_string(static_cast(AggregateType::SELFIE_ALBUM)); DataTransfer::MediaLibraryDbUpgrade medialibraryDbUpgrade; - bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(selfieAlbum, *this->mediaLibraryRdb_); + bool isSetAggregateBit; + bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(selfieAlbum, + *this->mediaLibraryRdb_, isSetAggregateBit); CHECK_AND_RETURN_INFO_LOG(!isExist, "SelfieAlbum already exist."); std::string querySql = "SELECT count(1) AS count FROM Photos WHERE front_camera = ?;"; std::vector params; @@ -605,7 +607,9 @@ void CloneRestoreClassify::AddUserCommentAlbum() CHECK_AND_RETURN_LOG(mediaLibraryRdb_ != nullptr, "AddUserCommentAlbum failed, rdbStore is nullptr"); std::string userCommentAlbum = std::to_string(static_cast(AggregateType::USER_COMMENT_ALBUM)); DataTransfer::MediaLibraryDbUpgrade medialibraryDbUpgrade; - bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(userCommentAlbum, *this->mediaLibraryRdb_); + bool isSetAggregateBit; + bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(userCommentAlbum, + *this->mediaLibraryRdb_, isSetAggregateBit); CHECK_AND_RETURN_INFO_LOG(!isExist, "UserCommentAlbum already exist."); std::string querySql = "SELECT count(1) AS count FROM Photos " "WHERE user_comment IS NOT NULL AND user_comment != '';"; diff --git a/frameworks/services/media_backup_extension/src/clone_restore.cpp b/frameworks/services/media_backup_extension/src/clone_restore.cpp index 66ae9b4ef0..0f393f1765 100644 --- a/frameworks/services/media_backup_extension/src/clone_restore.cpp +++ b/frameworks/services/media_backup_extension/src/clone_restore.cpp @@ -658,6 +658,7 @@ void CloneRestore::RestorePhotoForCloud() void CloneRestore::RestoreAlbum() { MEDIA_INFO_LOG("Start clone restore: albums"); + SetAggregateBitThird(); maxSearchId_ = BackupDatabaseUtils::QueryMaxId(mediaLibraryRdb_, ANALYSIS_SEARCH_INDEX_TABLE, SEARCH_IDX_COL_ID); maxBeautyFileId_ = BackupDatabaseUtils::QueryMaxId(mediaLibraryRdb_, @@ -2820,5 +2821,24 @@ bool CloneRestore::CheckSouthDeviceTypeMatchSwitchStatus(SwitchStatus switchStat } return true; } + +void CloneRestore::SetAggregateBitThird() +{ + CHECK_AND_RETURN_LOG(mediaLibraryRdb_ != nullptr, "SetAggregateBitThird failed, rdbStore is nullptr"); + DataTransfer::MediaLibraryDbUpgrade medialibraryDbUpgrade; + std::vector params = {}; + params.push_back(NativeRdb::ValueObject(std::to_string(PhotoAlbumType::SMART))); + params.push_back(NativeRdb::ValueObject(std::to_string(PhotoAlbumSubType::CLASSIFY))); + auto resultSet = mediaLibraryRdb_->QuerySql(SQL_QUERY_CLASSIFY_ALBUM_EXIST, params); + CHECK_AND_RETURN_LOG(resultSet != nullptr, "resultSet is nullptr"); + if (resultSet->GoToNextRow() == NativeRdb::E_OK && GetInt32Val("count", resultSet) > 0) { + resultSet->Close(); + MEDIA_INFO_LOG("classify album already exist, no need to SetAggregateBitThird"); + return; + } + resultSet->Close(); + int32_t bitPosition = 2; + medialibraryDbUpgrade.SetAggregateBit(bitPosition); +} } // namespace Media } // namespace OHOS diff --git a/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp b/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp index 7d7fcb0b6c..3a05b63dc2 100644 --- a/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp +++ b/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp @@ -22,7 +22,10 @@ #include "media_log.h" #include "album_plugin_table_event_handler.h" #include "db_upgrade_utils.h" +#include "medialibrary_data_manager_utils.h" #include "medialibrary_rdb_transaction.h" +#include "parameter.h" +#include "parameters.h" #include "photo_album_update_date_modified_operation.h" #include "photo_day_month_year_operation.h" #include "result_set_utils.h" @@ -31,6 +34,9 @@ namespace OHOS::Media { namespace DataTransfer { +const std::string CATEGORY_REFRESH_ENABLE_TAG = "persist.multimedia.media_analysis_service.categoryfresh.enable"; +const int32_t CATEGORY_REFRESH_ENABLE_VALUE = 1; +const int32_t CATEGORY_REFRESH_LENGTH = 3; // LCOV_EXCL_START /** * @brief Upgrade the database, before data restore or clone. @@ -114,8 +120,24 @@ static std::string BuildInClause(const std::vector &values) return result; } +void MediaLibraryDbUpgrade::SetAggregateBit(const int32_t &bitPosition) +{ + MEDIA_INFO_LOG("SetAggregateBit start, bitPosition: %{public}d", bitPosition); + CHECK_AND_RETURN_LOG(bitPosition < CATEGORY_REFRESH_LENGTH && bitPosition >= 0, + "bitPosition out of range"); + std::string flagStr = system::GetParameter(CATEGORY_REFRESH_ENABLE_TAG, "0"); + CHECK_AND_RETURN_INFO_LOG(MediaLibraryDataManagerUtils::IsNumber(flagStr), + "categoryfresh flag is not number: %{public}s", flagStr.c_str()); + int32_t flag = std::stoi(flagStr); + std::bitset binary(flag); + binary.set(bitPosition, CATEGORY_REFRESH_ENABLE_VALUE); + std::string refreshFlagStr = std::to_string(binary.to_ulong()); + int32_t ret = system::SetParameter(CATEGORY_REFRESH_ENABLE_TAG, refreshFlagStr); + MEDIA_INFO_LOG("SetAggregateBit end, refreshFlagStr: %{public}s, ret: %{public}d", + refreshFlagStr.c_str(), ret); +} bool MediaLibraryDbUpgrade::CheckClassifyAlbumExist(const std::string &newAlbumName, - NativeRdb::RdbStore &store) + NativeRdb::RdbStore &store, bool &isSetAggregateBit) { std::vector params = {}; params.push_back(NativeRdb::ValueObject(std::to_string(PhotoAlbumType::SMART))); @@ -125,6 +147,7 @@ bool MediaLibraryDbUpgrade::CheckClassifyAlbumExist(const std::string &newAlbumN CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, false, "resultSet is nullptr"); if (resultSet->GoToNextRow() == NativeRdb::E_OK && GetInt32Val("count", resultSet) > 0) { resultSet->Close(); + isSetAggregateBit = true; return true; } resultSet->Close(); @@ -148,9 +171,9 @@ int32_t MediaLibraryDbUpgrade::CreateClassifyAlbum(const std::string &newAlbumNa } void MediaLibraryDbUpgrade::ProcessClassifyAlbum(const std::string &newAlbumName, - const std::vector &oriAlbumNames, NativeRdb::RdbStore &store) + const std::vector &oriAlbumNames, NativeRdb::RdbStore &store, bool &isSetAggregateBitSecond) { - CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store), + CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store, isSetAggregateBitSecond), "Media_Restore: classify album: %{public}s already exist.", newAlbumName.c_str()); int32_t ret = CreateClassifyAlbum(newAlbumName, store); CHECK_AND_RETURN_LOG(ret == NativeRdb::E_OK, @@ -173,7 +196,8 @@ void MediaLibraryDbUpgrade::ProcessClassifyAlbum(const std::string &newAlbumName void MediaLibraryDbUpgrade::ProcessOcrClassifyAlbum(const std::string &newAlbumName, const std::vector &ocrText, NativeRdb::RdbStore &store) { - CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store), + bool isSetAggregateBit; + CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store, isSetAggregateBit), "Media_Restore: classify album: %{public}s already exist.", newAlbumName.c_str()); int32_t ret = CreateClassifyAlbum(newAlbumName, store); CHECK_AND_RETURN_LOG(ret == NativeRdb::E_OK, @@ -217,12 +241,15 @@ void MediaLibraryDbUpgrade::AggregateClassifyAlbum(NativeRdb::RdbStore &store) MEDIA_INFO_LOG("Media_Restore: MediaLibraryDbUpgrade::AggregateClassifyAlbum start"); int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds(); std::unordered_map> newAlbumMaps; + bool isSetAggregateBitSecond = false; GetAggregateMap(newAlbumMaps); for (const auto &pair : newAlbumMaps) { std::string newAlbumName = pair.first; std::vector oriAlbumNames = newAlbumMaps[newAlbumName]; - ProcessClassifyAlbum(newAlbumName, oriAlbumNames, store); + ProcessClassifyAlbum(newAlbumName, oriAlbumNames, store, isSetAggregateBitSecond); } + int32_t bitPosition = 1; + CHECK_AND_EXECUTE(!isSetAggregateBitSecond, SetAggregateBit(bitPosition)); for (const auto &pair : OCR_AGGREGATE_MAPPING_TABLE) { int32_t newAlbum = static_cast(pair.first); std::vector ocrText = pair.second; diff --git a/frameworks/services/media_backup_extension/src/upgrade_restore.cpp b/frameworks/services/media_backup_extension/src/upgrade_restore.cpp index c3f1d83c6a..1aa58aa694 100644 --- a/frameworks/services/media_backup_extension/src/upgrade_restore.cpp +++ b/frameworks/services/media_backup_extension/src/upgrade_restore.cpp @@ -1735,7 +1735,7 @@ void UpgradeRestore::BatchDeleteEmptyAlbums(const std::vector &batchAlb NativeRdb::AbsRdbPredicates deletePredicates("PhotoAlbum"); int32_t maxAlbumId = this->photoAlbumRestore_.GetMaxAlbumId(); std::string whereClause = "album_id > ? AND album_id IN ("; - for (auto i = 0; i < batchAlbumIds.size(); i++) { + for (std::size_t i = 0; i < batchAlbumIds.size(); i++) { if (i != 0) { whereClause += ","; } @@ -1746,7 +1746,7 @@ void UpgradeRestore::BatchDeleteEmptyAlbums(const std::vector &batchAlb deletePredicates.SetWhereClause(whereClause); std::vector whereArgs; whereArgs.push_back(to_string(maxAlbumId)); - for (auto i = 0; i < batchAlbumIds.size(); i++) { + for (std::size_t i = 0; i < batchAlbumIds.size(); i++) { whereArgs.push_back(to_string(batchAlbumIds[i])); } deletePredicates.SetWhereArgs(whereArgs); diff --git a/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp b/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp index bc228244ac..c02e25798f 100644 --- a/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp +++ b/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp @@ -29,6 +29,7 @@ #include "photo_album_column.h" #include "media_app_uri_permission_column.h" #include "media_library_extend_manager.h" +#include "medialibrary_data_manager_utils.h" #include "moving_photo_file_utils.h" using namespace std; @@ -69,6 +70,10 @@ std::shared_ptr EnhancementDatabaseOperations::BatchQuery( continue; } string fileId = MediaFileUri::GetPhotoId(arg); + if (!MediaLibraryDataManagerUtils::IsNumber(fileId)) { + MEDIA_ERR_LOG("invalid fileId: %{public}s", fileId.c_str()); + continue; + } fileId2Uri.emplace(stoi(fileId), arg); whereIdArgs.push_back(fileId); } diff --git a/frameworks/services/media_fuse/src/media_fuse_manager.cpp b/frameworks/services/media_fuse/src/media_fuse_manager.cpp index 7abecdf36b..0baefb057a 100644 --- a/frameworks/services/media_fuse/src/media_fuse_manager.cpp +++ b/frameworks/services/media_fuse/src/media_fuse_manager.cpp @@ -396,6 +396,7 @@ static int32_t OpenFile(const string &filePath, const string &fileId, const stri { MEDIA_DEBUG_LOG("fuse open file"); fuse_context *ctx = fuse_get_context(); + CHECK_AND_RETURN_RET_LOG(ctx != nullptr, E_INNER_FAIL, "fuse_get_context returned nullptr"); uid_t uid = ctx->uid; string bundleName; AccessTokenID tokenCaller = INVALID_TOKENID; diff --git a/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp b/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp index 8e271505d7..f8b03f0206 100644 --- a/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp +++ b/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp @@ -736,7 +736,12 @@ int32_t MetadataExtractor::ExtractAVMetadata(std::unique_ptr &data, in string filePath = data->GetFilePath(); CHECK_AND_RETURN_RET_LOG(!filePath.empty(), E_AVMETADATA, "AV metadata file path is empty"); - int32_t fd = open(filePath.c_str(), O_RDONLY); + std::string realFilePath; + if (!PathToRealPath(filePath, realFilePath)) { + MEDIA_ERR_LOG("file is not real path, file path: %{private}s", filePath.c_str()); + return E_AVMETADATA; + } + int32_t fd = open(realFilePath.c_str(), O_RDONLY); CHECK_AND_RETURN_RET_LOG(fd > 0, E_SYSCALL, "Open file descriptor failed, errno = %{public}d", errno); struct stat64 st; diff --git a/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h b/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h index c5d8d42ce4..25bb442e60 100644 --- a/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h +++ b/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h @@ -243,7 +243,6 @@ inline const std::unordered_map AGGREGATE_MAPPING_TAB {PhotoLabel::BUILDING, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::CITY_OVERLOOK, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::FOUNTAIN, AggregateType::CULTURAL_LANDSCAPE}, - {PhotoLabel::BEIJING_TIANANMEN, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::THE_GREAT_WALL, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::ORIENTAL_PEARL_TOWER, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::UANGZHOU_TOWER, AggregateType::CULTURAL_LANDSCAPE}, diff --git a/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp b/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp index 898816d39c..5b79173e2a 100755 --- a/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp +++ b/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp @@ -124,7 +124,7 @@ static std::unordered_map>> me {static_cast(MediaLibraryBusinessCode::QUERY_REQUEST_EDIT_DATA), {{SYSTEMAPI_PERM, READ_PERM}}}, {static_cast(MediaLibraryBusinessCode::QUERY_GET_EDIT_DATA), {{SYSTEMAPI_PERM, READ_PERM}}}, {static_cast(MediaLibraryBusinessCode::QUERY_GET_CLOUDMEDIA_ASSET_STATUS), {{SYSTEMAPI_PERM, READ_PERM}}}, - {static_cast(MediaLibraryBusinessCode::QUERY_START_ASSET_ANALYSIS), {{SYSTEMAPI_PERM}}}, + {static_cast(MediaLibraryBusinessCode::QUERY_START_ASSET_ANALYSIS), {{SYSTEMAPI_PERM, WRITE_PERM}}}, {static_cast(MediaLibraryBusinessCode::PAH_REQUEST_CONTENT), { {READ_PERM} }}, {static_cast(MediaLibraryBusinessCode::QUERY_PHOTO_STATUS), {{READ_PERM}}}, {static_cast(MediaLibraryBusinessCode::INNER_QUERY_PHOTO_STATUS), {{READ_PERM}}}, diff --git a/tools/medialibrary_tool/src/command/recv_command_v10.cpp b/tools/medialibrary_tool/src/command/recv_command_v10.cpp index 37281673f7..822ed9276b 100644 --- a/tools/medialibrary_tool/src/command/recv_command_v10.cpp +++ b/tools/medialibrary_tool/src/command/recv_command_v10.cpp @@ -74,7 +74,12 @@ static int32_t RecvFile(const ExecEnv &env, const FileAsset &fileAsset, bool isR if (!GetWriteFilePath(env, displayName, wFilePath)) { return Media::E_ERR; } - auto wfd = open(wFilePath.c_str(), O_CREAT | O_WRONLY | O_CLOEXEC, OPEN_MODE); + std::string realFilePath; + if (!PathToRealPath(wFilePath, realFilePath)) { + MEDIA_ERR_LOG("file is not real path, file path: %{private}s", wFilePath.c_str()); + return Media::E_ERR; + } + auto wfd = open(realFilePath.c_str(), O_CREAT | O_WRONLY | O_CLOEXEC, OPEN_MODE); if (wfd <= 0) { MEDIA_ERR_LOG("Open write path failed. errno:%{public}d, path name:%{public}s", errno, wFilePath.c_str()); printf("%s open write path failed. errno:%d, path name:%s\n", STR_FAIL.c_str(), errno, wFilePath.c_str()); -- Gitee From 5b640bb8f0f753bcd31837b55c8ae97ef82c148f Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 17:55:49 +0800 Subject: [PATCH 13/17] codeCheck Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index 25a07f4a3c..53d93a50bd 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -81,7 +81,7 @@ export class PhotoPickerComponent extends ViewPU { this.__pickerController.set(e.pickerController); if (this.badgeConfig && this.badgeConfig.uris !== undefined) { console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length) - console.log('badgeConfig.badge_type:' + this.badgeConfig.badgeType) + console.log('badgeConfig.badge_type:' + this.badgeConfig.badgeType); this.badgeConfig.uris.splice(this.maxBadgeConfigSize); } void 0 !== e.proxy && (this.proxy = e.proxy); @@ -139,9 +139,7 @@ export class PhotoPickerComponent extends ViewPU { this.onSetPhotoBrowserItem(o); } else if (null == o ? void 0 : o.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); - } else if (null == o ? void 0 : o.has('SET_BADGE_CONFIGS')) { - this.onChangedBadgeConfigs(o); - } else { + }else { this.otherOnChange(o); } } @@ -170,6 +168,8 @@ export class PhotoPickerComponent extends ViewPU { } else if (null == o ? void 0 : o.has('SAVE_REPLACE_PHOTO_ASSETS')) { this.onSaveTrustedPhotoAssets(o); console.info('PhotoPickerComponent onChanged: SAVE_REPLACE_PHOTO_ASSETS'); + } else if (null == o ? void 0 : o.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(o); } else { console.info('PhotoPickerComponent onChanged: other case'); } @@ -333,8 +333,8 @@ export class PhotoPickerComponent extends ViewPU { if (this.onPickerControllerReady) { this.onPickerControllerReady(); if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { - console.log('i need send msg to photo' + this.badgeConfig?.uris?.length + '---' - + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); + console.log('i need send msg to photo' + this.badgeConfig?.uris?.length + '---' + + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); } @@ -364,8 +364,8 @@ export class PhotoPickerComponent extends ViewPU { if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { console.log('handleBadgeConfigSend uris.length: ' + this.badgeConfig.uris.length); const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); - console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length + 'index: ' + index - + 'this.badgeConfig.uris.length: ' + this.badgeConfig?.uris?.length + console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length + 'index: ' + index + + 'this.badgeConfig.uris.length: ' + this.badgeConfig?.uris?.length ); this.proxy.send({badgeConfig : unitBadgeConfig, index: index, isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, -- Gitee From d2d8b874a8a5b32630418d56de59014255921749 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 17:57:31 +0800 Subject: [PATCH 14/17] bugfix Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/PhotoPickerComponent.ets | 4 ++-- frameworks/js/src/photopickercomponent.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index 71a358b507..bcae0b92b4 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -71,8 +71,6 @@ export struct PhotoPickerComponent { this.onSetMaxSelectCount(data); } else if (data?.has('SET_PHOTO_BROWSER_ITEM')) { this.onSetPhotoBrowserItem(data); - } else if (data?.has('SET_BADGE_CONFIGS')) { - this.onChangedBadgeConfigs(data); } else { this.otherOnChange(data); } @@ -102,6 +100,8 @@ export struct PhotoPickerComponent { } else if (data?.has('SAVE_TRUSTED_PHOTO_ASSETS')) { this.onSaveTrustedPhotoAssets(data); console.info('PhotoPickerComponent onChanged: SAVE_REPLACE_PHOTO_ASSETS'); + } else if (data?.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(data); } else { console.info('PhotoPickerComponent onChanged: other case'); } diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index 53d93a50bd..6976804928 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -139,7 +139,7 @@ export class PhotoPickerComponent extends ViewPU { this.onSetPhotoBrowserItem(o); } else if (null == o ? void 0 : o.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); - }else { + } else { this.otherOnChange(o); } } -- Gitee From 42970d4d5ff8d4f8cb0c438b7fd262ae8e519263 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 18:03:35 +0800 Subject: [PATCH 15/17] ';' Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index 6976804928..88bfe158be 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -80,7 +80,7 @@ export class PhotoPickerComponent extends ViewPU { void 0 !== e.pickerOptions.badgeConfig && (this.badgeConfig = e.pickerOptions.badgeConfig); this.__pickerController.set(e.pickerController); if (this.badgeConfig && this.badgeConfig.uris !== undefined) { - console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length) + console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length); console.log('badgeConfig.badge_type:' + this.badgeConfig.badgeType); this.badgeConfig.uris.splice(this.maxBadgeConfigSize); } -- Gitee From 03d6f8077a3dda5b21ce847b74b2121421c1b1ba Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 18:23:04 +0800 Subject: [PATCH 16/17] size - > index Signed-off-by: pengpeng7872 <2285070166@qq.com> --- frameworks/js/src/photopickercomponent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index 88bfe158be..b1de33b20e 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -363,7 +363,7 @@ export class PhotoPickerComponent extends ViewPU { let index = e.nextIndex; if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { console.log('handleBadgeConfigSend uris.length: ' + this.badgeConfig.uris.length); - const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * index, this.batchBadgeConfigSize * (index + 1)); console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length + 'index: ' + index + 'this.badgeConfig.uris.length: ' + this.badgeConfig?.uris?.length ); -- Gitee From 93d45c04185212c4fe4aabf8ff0346ea4160f6b4 Mon Sep 17 00:00:00 2001 From: pengpeng7872 <2285070166@qq.com> Date: Tue, 9 Sep 2025 18:32:51 +0800 Subject: [PATCH 17/17] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: pengpeng7872 <2285070166@qq.com> --- .../src/medialibrary_album_operations.cpp | 1 + frameworks/js/src/PhotoPickerComponent.ets | 23 ++++- frameworks/js/src/media_library_comm_napi.cpp | 2 +- frameworks/js/src/media_library_napi.cpp | 99 +++++++++++++------ frameworks/js/src/photopickercomponent.js | 45 ++++++--- .../native/c_api/media_asset_helper_impl.cpp | 2 +- .../src/media_asset_manager_impl.cpp | 13 ++- .../include/clone_restore.h | 11 +++ .../restore/media_library_db_upgrade.h | 6 +- .../src/classify/clone_restore_classify.cpp | 8 +- .../src/clone_restore.cpp | 20 ++++ .../src/restore/media_library_db_upgrade.cpp | 37 ++++++- .../src/upgrade_restore.cpp | 4 +- .../utils/enhancement_database_operations.cpp | 5 + .../media_fuse/src/media_fuse_manager.cpp | 1 + .../src/scanner/metadata_extractor.cpp | 7 +- .../include/classify_aggregate_types.h | 1 - .../media_assets_permission_policy.cpp | 2 +- .../src/command/recv_command_v10.cpp | 7 +- 19 files changed, 228 insertions(+), 66 deletions(-) diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp index b50c6a4caf..d44ccea1d0 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_album_operations.cpp @@ -3230,6 +3230,7 @@ int32_t MediaLibraryAlbumOperations::UpdatePhotoAlbumOrder(const vectorNotify(PhotoAlbumColumns::ALBUM_URI_PREFIX, NotifyType::NOTIFY_UPDATE); + AlbumAccurateRefresh::NotifyForReCheck(); } return successSetOrderRows == 0 ? E_INNER_FAIL : E_OK; } diff --git a/frameworks/js/src/PhotoPickerComponent.ets b/frameworks/js/src/PhotoPickerComponent.ets index 9e8855c29c..bcae0b92b4 100644 --- a/frameworks/js/src/PhotoPickerComponent.ets +++ b/frameworks/js/src/PhotoPickerComponent.ets @@ -64,12 +64,13 @@ export struct PhotoPickerComponent { } else if (data?.has('SET_ALBUM_URI')) { this.proxy.send({ 'albumUri': data?.get('SET_ALBUM_URI') as string }); console.info('PhotoPickerComponent onChanged: SET_ALBUM_URI'); + } else if (data?.has('SET_SELECTED_INFO')) { + this.proxy.send({ 'uriAndPickerIndexLists': data?.get('SET_SELECTED_INFO') as Array }); + console.info('PhotoPickerComponent onChanged: SET_SELECTED_INFO'); } else if (data?.has('SET_MAX_SELECT_COUNT')) { this.onSetMaxSelectCount(data); } else if (data?.has('SET_PHOTO_BROWSER_ITEM')) { this.onSetPhotoBrowserItem(data); - } else if (data?.has('SET_BADGE_CONFIGS')) { - this.onChangedBadgeConfigs(data); } else { this.otherOnChange(data); } @@ -99,6 +100,8 @@ export struct PhotoPickerComponent { } else if (data?.has('SAVE_TRUSTED_PHOTO_ASSETS')) { this.onSaveTrustedPhotoAssets(data); console.info('PhotoPickerComponent onChanged: SAVE_REPLACE_PHOTO_ASSETS'); + } else if (data?.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(data); } else { console.info('PhotoPickerComponent onChanged: other case'); } @@ -216,6 +219,8 @@ export struct PhotoPickerComponent { singleLineConfig: this.getSingleLineConfig(this.pickerOptions?.singleLineConfig as SingleLineConfig), uiComponentColorMode: this.pickerOptions?.uiComponentColorMode as PickerColorMode, combinedMediaTypeFilter: this.pickerOptions?.combinedMediaTypeFilter as Array, + pickerIndex: this.pickerOptions?.pickerIndex as number, + preselectedInfos: this.pickerOptions?.preselectedInfos as Array } }) .height('100%') @@ -625,6 +630,11 @@ export class PickerController { if (uris !== undefined) { this.data = new Map([['SET_BADGE_CONFIGS', uris], ['BADGE_CONFIGS_OPTION_TYPE',BadgeOptionType.SET_DATA]]); console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(uris))); + } else if (type === DataType.SET_SELECTED_INFO) { + let uriAndPickerIndexLists: Array = data as Array; + if (uriAndPickerIndexLists !== undefined) { + this.data = new Map([['SET_SELECTED_INFO', uriAndPickerIndexLists]]); + console.info('PhotoPickerComponent SET_SELECTED_INFO' + this.encrypt(JSON.stringify(uriAndPickerIndexLists))); } } else { console.info('PhotoPickerComponent setData: other case'); @@ -807,6 +817,8 @@ export class PickerOptions extends photoAccessHelper.BaseSelectOptions { singleLineConfig?: SingleLineConfig; uiComponentColorMode?: PickerColorMode; combinedMediaTypeFilter?: Array; + pickerIndex?: number; + preselectedInfos?: Array; } export class BaseItemInfo { @@ -861,10 +873,15 @@ export class BadgeConfig { badgeConfigType?: BadgeTypes, uris?: string[] } +class PreselectedInfo { + uri:string; + preselectablePickerIndex?: number = -1; +} export enum DataType { SET_SELECTED_URIS = 1, - SET_ALBUM_URI = 2 + SET_ALBUM_URI = 2, + SET_SELECTED_INFO = 3 } export enum ItemType { diff --git a/frameworks/js/src/media_library_comm_napi.cpp b/frameworks/js/src/media_library_comm_napi.cpp index 6fa7187023..e4d9698278 100644 --- a/frameworks/js/src/media_library_comm_napi.cpp +++ b/frameworks/js/src/media_library_comm_napi.cpp @@ -40,7 +40,7 @@ napi_value MediaLibraryCommNapi::CreatePhotoAssetNapi( shared_ptr fileAsset = make_shared(); fileAsset->SetUri(uri); string fileId = MediaFileUtils::GetIdFromUri(uri); - if (MediaFileUtils::IsValidInteger(fileId)) { + if (!fileId.empty() && all_of(fileId.begin(), fileId.end(), ::isdigit)) { fileAsset->SetId(stoi(fileId)); } diff --git a/frameworks/js/src/media_library_napi.cpp b/frameworks/js/src/media_library_napi.cpp index 32514c6d1f..0fc5cd5563 100644 --- a/frameworks/js/src/media_library_napi.cpp +++ b/frameworks/js/src/media_library_napi.cpp @@ -7011,7 +7011,8 @@ napi_value MediaLibraryNapi::PhotoAccessStopCreateThumbnailTask(napi_env env, na RETURN_NAPI_UNDEFINED(env); } -static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_map& idxToCount) +static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_map& idxToCount, + MediaLibraryAsyncContext* context) { int errCode = 0; GetAnalysisProcessReqBody reqBody; @@ -7019,6 +7020,14 @@ static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_m QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Label Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); @@ -7037,7 +7046,7 @@ static void GetMediaAnalysisServiceProgress(nlohmann::json& jsonObj, unordered_m ret->Close(); } -static std::string GetAnalysisProgress() +static void GetAnalysisProgress(MediaLibraryAsyncContext* context) { int errCode = 0; GetAnalysisProcessReqBody reqBody; @@ -7045,15 +7054,23 @@ static std::string GetAnalysisProgress() QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); - return ""; + return; } if (ret->GoToFirstRow() != NativeRdb::E_OK) { NAPI_ERR_LOG("GotoFirstRow failed, errCode is %{public}d", errCode); ret->Close(); - return ""; + return; } vector columnList = {SEARCH_FINISH_CNT, LOCATION_FINISH_CNT, FACE_FINISH_CNT, OBJECT_FINISH_CNT, AESTHETIC_FINISH_CNT, OCR_FINISH_CNT, POSE_FINISH_CNT, SALIENCY_FINISH_CNT, RECOMMENDATION_FINISH_CNT, @@ -7068,20 +7085,19 @@ static std::string GetAnalysisProgress() jsonObj[columnName] = colValue; } ret->Close(); - string retStr = jsonObj.dump(); - NAPI_INFO_LOG("Progress json is %{public}s", retStr.c_str()); - return retStr; + context->analysisProgress = jsonObj.dump(); + NAPI_INFO_LOG("Progress json is %{public}s", context->analysisProgress.c_str()); } -static std::string GetLabelAnalysisProgress() +static void GetLabelAnalysisProgress(MediaLibraryAsyncContext* context) { unordered_map idxToCount = { {0, "totalCount"}, {1, "finishedCount"}, {2, "LabelCount"} }; nlohmann::json jsonObj; - GetMediaAnalysisServiceProgress(jsonObj, idxToCount); + GetMediaAnalysisServiceProgress(jsonObj, idxToCount, context); NAPI_INFO_LOG("Progress json is %{public}s", jsonObj.dump().c_str()); - return jsonObj.dump(); + context->analysisProgress = jsonObj.dump(); } static std::string GetTotalCount() @@ -7117,7 +7133,7 @@ static std::string GetTotalCount() return to_string(totalCount); } -static std::string GetFaceAnalysisProgress() +static void GetFaceAnalysisProgress(MediaLibraryAsyncContext* context) { string curTotalCount = GetTotalCount(); @@ -7127,10 +7143,18 @@ static std::string GetFaceAnalysisProgress() QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Face Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); - return ""; + return; } if (ret->GoToNextRow() != NativeRdb::E_OK) { ret->Close(); @@ -7139,16 +7163,16 @@ static std::string GetFaceAnalysisProgress() jsonObj["geoFinishedCount"] = 0; jsonObj["searchFinishedCount"] = 0; jsonObj["totalCount"] = curTotalCount; - string retJson = jsonObj.dump(); + context->analysisProgress = jsonObj.dump(); NAPI_ERR_LOG("GetFaceAnalysisProgress failed, errCode is %{public}d, json is %{public}s", errCode, - retJson.c_str()); - return retJson; + context->analysisProgress.c_str()); + return; } string retJson = MediaLibraryNapiUtils::GetStringValueByColumn(ret, HIGHLIGHT_ANALYSIS_PROGRESS); if (retJson == "" || !nlohmann::json::accept(retJson)) { ret->Close(); NAPI_ERR_LOG("retJson is empty or invalid"); - return ""; + return; } nlohmann::json curJsonObj = nlohmann::json::parse(retJson); int preTotalCount = curJsonObj["totalCount"]; @@ -7157,13 +7181,12 @@ static std::string GetFaceAnalysisProgress() curTotalCount.c_str(), preTotalCount); curJsonObj["totalCount"] = curTotalCount; } - retJson = curJsonObj.dump(); - NAPI_INFO_LOG("GoToNextRow successfully and json is %{public}s", retJson.c_str()); + context->analysisProgress = curJsonObj.dump(); + NAPI_INFO_LOG("GoToNextRow successfully and json is %{public}s", context->analysisProgress.c_str()); ret->Close(); - return retJson; } -static std::string GetHighlightAnalysisProgress() +static void GetHighlightAnalysisProgress(MediaLibraryAsyncContext* context) { unordered_map idxToCount = { {0, "ClearCount"}, {1, "DeleteCount"}, {2, "NotProduceCount"}, {3, "ProduceCount"}, {4, "PushCount"} @@ -7174,15 +7197,23 @@ static std::string GetHighlightAnalysisProgress() QueryResultRespBody respBody; errCode = IPC::UserDefineIPCClient().Call( static_cast(MediaLibraryBusinessCode::GET_ANALYSIS_PROCESS), reqBody, respBody); + if (errCode != E_OK) { + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } + NAPI_ERR_LOG("Get Highlight Analysis Progress failed! errCode is = %{public}d", errCode); + } shared_ptr ret = respBody.resultSet; if (ret == nullptr) { NAPI_ERR_LOG("ret is nullptr"); - return ""; + return; } if (ret->GoToFirstRow() != NativeRdb::E_OK) { NAPI_ERR_LOG("GotoFirstRow failed, errCode is %{public}d", errCode); ret->Close(); - return ""; + return; } nlohmann::json jsonObj; for (size_t i = 0; i < idxToCount.size(); ++i) { @@ -7191,9 +7222,8 @@ static std::string GetHighlightAnalysisProgress() jsonObj[idxToCount[i]] = tmp; } ret->Close(); - string retStr = jsonObj.dump(); - NAPI_INFO_LOG("Progress json is %{public}s", retStr.c_str()); - return retStr; + context->analysisProgress = jsonObj.dump(); + NAPI_INFO_LOG("Progress json is %{public}s", context->analysisProgress.c_str()); } static void JSGetAnalysisProgressExecute(MediaLibraryAsyncContext* context) @@ -7205,19 +7235,19 @@ static void JSGetAnalysisProgressExecute(MediaLibraryAsyncContext* context) switch (context->analysisType) { case ANALYSIS_INVALID: { // 处理总进度 - context->analysisProgress = GetAnalysisProgress(); + GetAnalysisProgress(context); break; } case ANALYSIS_LABEL: { - context->analysisProgress = GetLabelAnalysisProgress(); + GetLabelAnalysisProgress(context); break; } case ANALYSIS_FACE: { - context->analysisProgress = GetFaceAnalysisProgress(); + GetFaceAnalysisProgress(context); break; } case ANALYSIS_HIGHLIGHT: { - context->analysisProgress = GetHighlightAnalysisProgress(); + GetHighlightAnalysisProgress(context); break; } default: @@ -7269,6 +7299,11 @@ napi_value MediaLibraryNapi::PhotoAccessHelperGetDataAnalysisProgress(napi_env e MediaLibraryTracer tracer; tracer.Start("PhotoAccessHelperGetDataAnalysisProgress"); + if (!MediaLibraryNapiUtils::IsSystemApp()) { + NapiError::ThrowError(env, E_CHECK_SYSTEMAPP_FAIL, "This interface can be called only by system apps"); + return nullptr; + } + napi_value result = nullptr; NAPI_CALL(env, napi_get_undefined(env, &result)); unique_ptr asyncContext = make_unique(); @@ -9761,7 +9796,11 @@ static void JSStartAssetAnalysisExecute(napi_env env, void *data) respBody.resultSet->Close(); } if (errCode != E_OK) { - context->SaveError(errCode); + if (errCode == E_PERMISSION_DENIED) { + context->error = OHOS_PERMISSION_DENIED_CODE; + } else { + context->SaveError(errCode); + } NAPI_ERR_LOG("Start assets analysis failed! errCode is = %{public}d", errCode); } } diff --git a/frameworks/js/src/photopickercomponent.js b/frameworks/js/src/photopickercomponent.js index f726fe9023..b1de33b20e 100644 --- a/frameworks/js/src/photopickercomponent.js +++ b/frameworks/js/src/photopickercomponent.js @@ -18,7 +18,7 @@ var __decorate = this && this.__decorate || function (e, o, t, i) { if ('object' === typeof Reflect && 'function' === typeof Reflect.decorate) { l = Reflect.decorate(e, o, t, i); } else { - for (var s = e.length - 1; s >= 0; s--) { + for (let s = e.length - 1; s >= 0; s--) { (n = e[s]) && (l = (r < 3 ? n(l) : r > 3 ? n(o, t, l) : n(o, t)) || l); } } @@ -80,8 +80,8 @@ export class PhotoPickerComponent extends ViewPU { void 0 !== e.pickerOptions.badgeConfig && (this.badgeConfig = e.pickerOptions.badgeConfig); this.__pickerController.set(e.pickerController); if (this.badgeConfig && this.badgeConfig.uris !== undefined) { - console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length) - console.log('badgeConfig.badge_type:' + this.badgeConfig.badgeType) + console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length); + console.log('badgeConfig.badge_type:' + this.badgeConfig.badgeType); this.badgeConfig.uris.splice(this.maxBadgeConfigSize); } void 0 !== e.proxy && (this.proxy = e.proxy); @@ -130,29 +130,29 @@ export class PhotoPickerComponent extends ViewPU { } else if (null == o ? void 0 : o.has('SET_ALBUM_URI')) { this.proxy.send({ albumUri: null == o ? void 0 : o.get('SET_ALBUM_URI') }); console.info('PhotoPickerComponent onChanged: SET_ALBUM_URI'); + } else if (null == o ? void 0 : o.has('SET_SELECTED_INFO')) { + this.proxy.send({ uriAndPickerIndexLists: null == o ? void 0 : o.get('SET_SELECTED_INFO') }); + console.info('PhotoPickerComponent onChanged: SET_SELECTED_INFO'); } else if (null == o ? void 0 : o.has('SET_MAX_SELECT_COUNT')) { this.onSetMaxSelectCount(o); } else if (null == o ? void 0 : o.has('SET_PHOTO_BROWSER_ITEM')) { this.onSetPhotoBrowserItem(o); } else if (null == o ? void 0 : o.has('EXIT_PHOTO_BROWSER')) { this.handleExitPhotoBrowser(); - } else if (null == o ? void 0 : o.has('SET_BADGE_CONFIGS')) { - this.onChangedBadgeConfigs(o); } else { this.otherOnChange(o); } } onChangedBadgeConfigs(o) { - console.log('PhotoPickerComponent onChanged: onChangedBadgeConfigs'); if (this.badgeConfigIsSending !== true) { console.log('badgeConfigType:' + o.get('BADGE_CONFIGS_OPTION_TYPE')); - console.log('badgeConfig.uris.length:' + this.badgeConfig.uris.length); this.badgeConfig = o.get('SET_BADGE_CONFIGS'); this.badgeConfigIsSending = true; this.badgeConfig.uris?.splice(this.maxBadgeConfigSize); this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: o.get('BADGE_CONFIGS_OPTION_TYPE')}); + console.log('badgeConfig.uris.length:' + this.badgeConfig?.uris?.length || '--'); } } @@ -168,6 +168,8 @@ export class PhotoPickerComponent extends ViewPU { } else if (null == o ? void 0 : o.has('SAVE_REPLACE_PHOTO_ASSETS')) { this.onSaveTrustedPhotoAssets(o); console.info('PhotoPickerComponent onChanged: SAVE_REPLACE_PHOTO_ASSETS'); + } else if (null == o ? void 0 : o.has('SET_BADGE_CONFIGS')) { + this.onChangedBadgeConfigs(o); } else { console.info('PhotoPickerComponent onChanged: other case'); } @@ -249,7 +251,7 @@ export class PhotoPickerComponent extends ViewPU { Column.width('100%'); }), Column); this.observeComponentCreation2(((e, o) => { - var t, i, n, r, l, s, c, p, a, d, h, E, C, T, m, P, _, b, d, k, d, f; + var t, i, n, r, l, s, c, p, a, d, h, E, C, T, m, P, _, b, d, k, d, f, g, y; SecurityUIExtensionComponent.create({ parameters: { errorRevokeIndex: this.revokeIndex, @@ -292,6 +294,8 @@ export class PhotoPickerComponent extends ViewPU { singleLineConfig: null === (k = this.pickerOptions) || void 0 === k ? void 0 : this.getSingleLineConfig(k.singleLineConfig), uiComponentColorMode: null === (d = this.pickerOptions) || void 0 === d ? void 0 : d.uiComponentColorMode, combinedMediaTypeFilter: null === (f = this.pickerOptions) || void 0 === f ? void 0 : f.combinedMediaTypeFilter, + pickerIndex: null === (y = this.pickerOptions) || void 0 === y ? void 0 : y.pickerIndex, + preselectedInfos: null === (g = this.pickerOptions) || void 0 === g ? void 0 : g.preselectedInfos } }); SecurityUIExtensionComponent.height('100%'); @@ -328,8 +332,9 @@ export class PhotoPickerComponent extends ViewPU { } else if ('remoteReady' === o) { if (this.onPickerControllerReady) { this.onPickerControllerReady(); - if (this.badgeConfig && this.badgeConfig.uris.length > 0) { - console.log('i need send msg to photo' + this.badgeConfig?.uris.length + '---' + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); + if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { + console.log('i need send msg to photo' + this.badgeConfig?.uris?.length + '---' + + this.badgeConfig?.badgeType + '---' + new Date().getTime().toString()); this.badgeConfigIsSending = true; this.proxy.send({needSendBadgeConfigs: true, BadgeOptionType: BadgeOptionType.SET_DATA}); } @@ -356,10 +361,12 @@ export class PhotoPickerComponent extends ViewPU { handleBadgeConfigSend(e) { let index = e.nextIndex; - if (this.badgeConfig && this.badgeConfig.uris.length > 0) { + if (this.badgeConfig && this.badgeConfig?.uris?.length > 0) { console.log('handleBadgeConfigSend uris.length: ' + this.badgeConfig.uris.length); - const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * size, this.batchBadgeConfigSize * (index + 1)); - console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length); + const unitBadgeConfig = this.badgeConfig.uris.slice(this.batchBadgeConfigSize * index, this.batchBadgeConfigSize * (index + 1)); + console.log('index,unitunitBadgeConfig.length' + unitBadgeConfig?.length + 'index: ' + index + + 'this.badgeConfig.uris.length: ' + this.badgeConfig?.uris?.length + ); this.proxy.send({badgeConfig : unitBadgeConfig, index: index, isOver : index >= Math.ceil(this.badgeConfig.uris.length / this.batchBadgeConfigSize) ? true : false, badgeConfigType : this.badgeConfig.badgeType}); @@ -656,6 +663,14 @@ let PickerController = class { console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(e))); console.info('PhotoPickerComponent BADGE_CONFIGS_OPTION_TYPE: set_data'); } + } else if (e === DataType.SET_SELECTED_INFO) { + if (o instanceof Array) { + let e = o; + if (e) { + this.data = new Map([['SET_SELECTED_INFO', [...e]]]); + console.info('PhotoPickerComponent SET_SELECTED_INFO' + this.encrypt(JSON.stringify(e))); + } + } } else { console.info('PhotoPickerComponent setData: other case'); } @@ -684,6 +699,7 @@ let PickerController = class { let e = o; if (e !== undefined) { this.data = new Map([['SET_BADGE_CONFIGS', e], ['BADGE_CONFIGS_OPTION_TYPE', BadgeOptionType.DELETE_DATA]]); + console.info('PhotoPickerComponent SET_BADGE_CONFIGS' + this.encrypt(JSON.stringify(e))); console.info('PhotoPickerComponent BADGE_CONFIGS_OPTION_TYPE: delete_data'); } @@ -846,6 +862,9 @@ class PhotoBrowserRangeInfo { class PhotoBrowserUIElementVisibility { } +class PreselectedInfo { +} + export class SingleLineConfig { constructor() { this.itemDisplayRatio = ItemDisplayRatio.SQUARE_RATIO; diff --git a/frameworks/native/c_api/media_asset_helper_impl.cpp b/frameworks/native/c_api/media_asset_helper_impl.cpp index a0d0d11247..9d25bccc9d 100644 --- a/frameworks/native/c_api/media_asset_helper_impl.cpp +++ b/frameworks/native/c_api/media_asset_helper_impl.cpp @@ -107,7 +107,7 @@ OH_MediaAsset* MediaAssetHelperImpl::GetMediaAsset(std::string uri, int32_t came fileAsset->SetUri(uri); std::string fileId = MediaFileUtils::GetIdFromUri(uri); - if (!fileId.empty()) { + if (!fileId.empty() && all_of(fileId.begin(), fileId.end(), ::isdigit)) { fileAsset->SetId(stoi(fileId)); } fileAsset->SetDisplayName(MediaFileUtils::GetFileName(uri)); diff --git a/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp b/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp index f6565469d2..e945598dcf 100644 --- a/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp +++ b/frameworks/native/media_library_asset_manager/src/media_asset_manager_impl.cpp @@ -317,17 +317,22 @@ bool MediaAssetManagerImpl::NotifyImageDataPrepared(AssetHandler *assetHandler) } int32_t writeResult = E_OK; + errno_t strncpyResult = E_OK; if (dataHandler->GetReturnDataType() == ReturnDataType::TYPE_TARGET_FILE) { writeResult = MediaAssetManagerImpl::WriteFileToPath(dataHandler->GetRequestUri(), dataHandler->GetDestUri(), dataHandler->GetSourceMode() == NativeSourceMode::ORIGINAL_MODE); Native_RequestId requestId; - strncpy_s(requestId.requestId, UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + strncpyResult = strncpy_s(requestId.requestId, + UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + CHECK_AND_RETURN_RET_LOG(strncpyResult == E_OK, false, "strncpy failed"); if (dataHandler->onDataPreparedHandler_ != nullptr) { dataHandler->onDataPreparedHandler_(writeResult, requestId); } } else if (dataHandler->GetReturnDataType() == ReturnDataType::TYPE_IMAGE_SOURCE) { MediaLibrary_RequestId requestId; - strncpy_s(requestId.requestId, UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + strncpyResult = strncpy_s(requestId.requestId, + UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + CHECK_AND_RETURN_RET_LOG(strncpyResult == E_OK, false, "strncpy failed"); if (dataHandler->onRequestImageDataPreparedHandler_ != nullptr) { int32_t photoQuality = static_cast(MultiStagesCapturePhotoStatus::HIGH_QUALITY_STATUS); MediaLibrary_MediaQuality quality = (dataHandler->GetPhotoQuality() == photoQuality) @@ -340,7 +345,9 @@ bool MediaAssetManagerImpl::NotifyImageDataPrepared(AssetHandler *assetHandler) } } else if (dataHandler->GetReturnDataType() == ReturnDataType::TYPE_MOVING_PHOTO) { MediaLibrary_RequestId requestId; - strncpy_s(requestId.requestId, UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + strncpyResult = strncpy_s(requestId.requestId, + UUID_STR_LENGTH, assetHandler->requestId.c_str(), UUID_STR_LENGTH); + CHECK_AND_RETURN_RET_LOG(strncpyResult == E_OK, false, "strncpy failed"); if (dataHandler->onRequestMovingPhotoDataPreparedHandler_ != nullptr) { int32_t photoQuality = static_cast(MultiStagesCapturePhotoStatus::HIGH_QUALITY_STATUS); MediaLibrary_MediaQuality quality = (dataHandler->GetPhotoQuality() == photoQuality) diff --git a/frameworks/services/media_backup_extension/include/clone_restore.h b/frameworks/services/media_backup_extension/include/clone_restore.h index fe3efb5c81..bdff66c5a7 100644 --- a/frameworks/services/media_backup_extension/include/clone_restore.h +++ b/frameworks/services/media_backup_extension/include/clone_restore.h @@ -220,6 +220,7 @@ private: void RestoreVideoFaceData(); void PrepareShootingModeVal(const FileInfo &fileInfo, NativeRdb::ValuesBucket &values); void GetInsertValueFromValMap(const FileInfo &fileInfo, NativeRdb::ValuesBucket &values); + void SetAggregateBitThird(); template static void PutIfPresent(NativeRdb::ValuesBucket& values, const std::string& columnName, @@ -284,6 +285,16 @@ private: CloneRestoreConfigInfo dstCloneRestoreConfigInfo_; CloneRestoreConfigInfo srcCloneRestoreConfigInfo_; DstDeviceBackupInfo dstDeviceBackupInfo_; + +private: + const std::string SQL_QUERY_CLASSIFY_ALBUM_EXIST = " \ + SELECT \ + count(1) AS count \ + FROM AnalysisAlbum \ + WHERE \ + album_type = ? \ + AND \ + album_subtype = ?;"; }; template diff --git a/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h b/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h index 98a52f8ddc..0f36de1738 100644 --- a/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h +++ b/frameworks/services/media_backup_extension/include/restore/media_library_db_upgrade.h @@ -27,7 +27,9 @@ class MediaLibraryDbUpgrade { public: int32_t OnUpgrade(NativeRdb::RdbStore &store); int32_t CreateClassifyAlbum(const std::string &newAlbumName, NativeRdb::RdbStore &store); - bool CheckClassifyAlbumExist(const std::string &newAlbumName, NativeRdb::RdbStore &store); + bool CheckClassifyAlbumExist(const std::string &newAlbumName, NativeRdb::RdbStore &store, + bool &isSetAggregateBit); + void SetAggregateBit(const int32_t &bitPosition); private: int32_t UpgradeAlbumPlugin(NativeRdb::RdbStore &store); @@ -45,7 +47,7 @@ private: int32_t UpdatelPathColumn(NativeRdb::RdbStore &store); int32_t ExecSqlWithRetry(std::function execSql); void ProcessClassifyAlbum(const std::string &newAlbumName, const std::vector &oriAlbumNames, - NativeRdb::RdbStore &store); + NativeRdb::RdbStore &store, bool &isSetAggregateBitSecond); void ProcessOcrClassifyAlbum(const std::string &newAlbumName, const std::vector &ocrText, NativeRdb::RdbStore &store); diff --git a/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp b/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp index f440d1fc8b..8bd3f5ade5 100644 --- a/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp +++ b/frameworks/services/media_backup_extension/src/classify/clone_restore_classify.cpp @@ -582,7 +582,9 @@ void CloneRestoreClassify::AddSelfieAlbum() CHECK_AND_RETURN_LOG(mediaLibraryRdb_ != nullptr, "AddSelfieAlbum failed, rdbStore is nullptr"); std::string selfieAlbum = std::to_string(static_cast(AggregateType::SELFIE_ALBUM)); DataTransfer::MediaLibraryDbUpgrade medialibraryDbUpgrade; - bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(selfieAlbum, *this->mediaLibraryRdb_); + bool isSetAggregateBit; + bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(selfieAlbum, + *this->mediaLibraryRdb_, isSetAggregateBit); CHECK_AND_RETURN_INFO_LOG(!isExist, "SelfieAlbum already exist."); std::string querySql = "SELECT count(1) AS count FROM Photos WHERE front_camera = ?;"; std::vector params; @@ -605,7 +607,9 @@ void CloneRestoreClassify::AddUserCommentAlbum() CHECK_AND_RETURN_LOG(mediaLibraryRdb_ != nullptr, "AddUserCommentAlbum failed, rdbStore is nullptr"); std::string userCommentAlbum = std::to_string(static_cast(AggregateType::USER_COMMENT_ALBUM)); DataTransfer::MediaLibraryDbUpgrade medialibraryDbUpgrade; - bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(userCommentAlbum, *this->mediaLibraryRdb_); + bool isSetAggregateBit; + bool isExist = medialibraryDbUpgrade.CheckClassifyAlbumExist(userCommentAlbum, + *this->mediaLibraryRdb_, isSetAggregateBit); CHECK_AND_RETURN_INFO_LOG(!isExist, "UserCommentAlbum already exist."); std::string querySql = "SELECT count(1) AS count FROM Photos " "WHERE user_comment IS NOT NULL AND user_comment != '';"; diff --git a/frameworks/services/media_backup_extension/src/clone_restore.cpp b/frameworks/services/media_backup_extension/src/clone_restore.cpp index 66ae9b4ef0..0f393f1765 100644 --- a/frameworks/services/media_backup_extension/src/clone_restore.cpp +++ b/frameworks/services/media_backup_extension/src/clone_restore.cpp @@ -658,6 +658,7 @@ void CloneRestore::RestorePhotoForCloud() void CloneRestore::RestoreAlbum() { MEDIA_INFO_LOG("Start clone restore: albums"); + SetAggregateBitThird(); maxSearchId_ = BackupDatabaseUtils::QueryMaxId(mediaLibraryRdb_, ANALYSIS_SEARCH_INDEX_TABLE, SEARCH_IDX_COL_ID); maxBeautyFileId_ = BackupDatabaseUtils::QueryMaxId(mediaLibraryRdb_, @@ -2820,5 +2821,24 @@ bool CloneRestore::CheckSouthDeviceTypeMatchSwitchStatus(SwitchStatus switchStat } return true; } + +void CloneRestore::SetAggregateBitThird() +{ + CHECK_AND_RETURN_LOG(mediaLibraryRdb_ != nullptr, "SetAggregateBitThird failed, rdbStore is nullptr"); + DataTransfer::MediaLibraryDbUpgrade medialibraryDbUpgrade; + std::vector params = {}; + params.push_back(NativeRdb::ValueObject(std::to_string(PhotoAlbumType::SMART))); + params.push_back(NativeRdb::ValueObject(std::to_string(PhotoAlbumSubType::CLASSIFY))); + auto resultSet = mediaLibraryRdb_->QuerySql(SQL_QUERY_CLASSIFY_ALBUM_EXIST, params); + CHECK_AND_RETURN_LOG(resultSet != nullptr, "resultSet is nullptr"); + if (resultSet->GoToNextRow() == NativeRdb::E_OK && GetInt32Val("count", resultSet) > 0) { + resultSet->Close(); + MEDIA_INFO_LOG("classify album already exist, no need to SetAggregateBitThird"); + return; + } + resultSet->Close(); + int32_t bitPosition = 2; + medialibraryDbUpgrade.SetAggregateBit(bitPosition); +} } // namespace Media } // namespace OHOS diff --git a/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp b/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp index 7d7fcb0b6c..3a05b63dc2 100644 --- a/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp +++ b/frameworks/services/media_backup_extension/src/restore/media_library_db_upgrade.cpp @@ -22,7 +22,10 @@ #include "media_log.h" #include "album_plugin_table_event_handler.h" #include "db_upgrade_utils.h" +#include "medialibrary_data_manager_utils.h" #include "medialibrary_rdb_transaction.h" +#include "parameter.h" +#include "parameters.h" #include "photo_album_update_date_modified_operation.h" #include "photo_day_month_year_operation.h" #include "result_set_utils.h" @@ -31,6 +34,9 @@ namespace OHOS::Media { namespace DataTransfer { +const std::string CATEGORY_REFRESH_ENABLE_TAG = "persist.multimedia.media_analysis_service.categoryfresh.enable"; +const int32_t CATEGORY_REFRESH_ENABLE_VALUE = 1; +const int32_t CATEGORY_REFRESH_LENGTH = 3; // LCOV_EXCL_START /** * @brief Upgrade the database, before data restore or clone. @@ -114,8 +120,24 @@ static std::string BuildInClause(const std::vector &values) return result; } +void MediaLibraryDbUpgrade::SetAggregateBit(const int32_t &bitPosition) +{ + MEDIA_INFO_LOG("SetAggregateBit start, bitPosition: %{public}d", bitPosition); + CHECK_AND_RETURN_LOG(bitPosition < CATEGORY_REFRESH_LENGTH && bitPosition >= 0, + "bitPosition out of range"); + std::string flagStr = system::GetParameter(CATEGORY_REFRESH_ENABLE_TAG, "0"); + CHECK_AND_RETURN_INFO_LOG(MediaLibraryDataManagerUtils::IsNumber(flagStr), + "categoryfresh flag is not number: %{public}s", flagStr.c_str()); + int32_t flag = std::stoi(flagStr); + std::bitset binary(flag); + binary.set(bitPosition, CATEGORY_REFRESH_ENABLE_VALUE); + std::string refreshFlagStr = std::to_string(binary.to_ulong()); + int32_t ret = system::SetParameter(CATEGORY_REFRESH_ENABLE_TAG, refreshFlagStr); + MEDIA_INFO_LOG("SetAggregateBit end, refreshFlagStr: %{public}s, ret: %{public}d", + refreshFlagStr.c_str(), ret); +} bool MediaLibraryDbUpgrade::CheckClassifyAlbumExist(const std::string &newAlbumName, - NativeRdb::RdbStore &store) + NativeRdb::RdbStore &store, bool &isSetAggregateBit) { std::vector params = {}; params.push_back(NativeRdb::ValueObject(std::to_string(PhotoAlbumType::SMART))); @@ -125,6 +147,7 @@ bool MediaLibraryDbUpgrade::CheckClassifyAlbumExist(const std::string &newAlbumN CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, false, "resultSet is nullptr"); if (resultSet->GoToNextRow() == NativeRdb::E_OK && GetInt32Val("count", resultSet) > 0) { resultSet->Close(); + isSetAggregateBit = true; return true; } resultSet->Close(); @@ -148,9 +171,9 @@ int32_t MediaLibraryDbUpgrade::CreateClassifyAlbum(const std::string &newAlbumNa } void MediaLibraryDbUpgrade::ProcessClassifyAlbum(const std::string &newAlbumName, - const std::vector &oriAlbumNames, NativeRdb::RdbStore &store) + const std::vector &oriAlbumNames, NativeRdb::RdbStore &store, bool &isSetAggregateBitSecond) { - CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store), + CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store, isSetAggregateBitSecond), "Media_Restore: classify album: %{public}s already exist.", newAlbumName.c_str()); int32_t ret = CreateClassifyAlbum(newAlbumName, store); CHECK_AND_RETURN_LOG(ret == NativeRdb::E_OK, @@ -173,7 +196,8 @@ void MediaLibraryDbUpgrade::ProcessClassifyAlbum(const std::string &newAlbumName void MediaLibraryDbUpgrade::ProcessOcrClassifyAlbum(const std::string &newAlbumName, const std::vector &ocrText, NativeRdb::RdbStore &store) { - CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store), + bool isSetAggregateBit; + CHECK_AND_RETURN_INFO_LOG(!CheckClassifyAlbumExist(newAlbumName, store, isSetAggregateBit), "Media_Restore: classify album: %{public}s already exist.", newAlbumName.c_str()); int32_t ret = CreateClassifyAlbum(newAlbumName, store); CHECK_AND_RETURN_LOG(ret == NativeRdb::E_OK, @@ -217,12 +241,15 @@ void MediaLibraryDbUpgrade::AggregateClassifyAlbum(NativeRdb::RdbStore &store) MEDIA_INFO_LOG("Media_Restore: MediaLibraryDbUpgrade::AggregateClassifyAlbum start"); int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds(); std::unordered_map> newAlbumMaps; + bool isSetAggregateBitSecond = false; GetAggregateMap(newAlbumMaps); for (const auto &pair : newAlbumMaps) { std::string newAlbumName = pair.first; std::vector oriAlbumNames = newAlbumMaps[newAlbumName]; - ProcessClassifyAlbum(newAlbumName, oriAlbumNames, store); + ProcessClassifyAlbum(newAlbumName, oriAlbumNames, store, isSetAggregateBitSecond); } + int32_t bitPosition = 1; + CHECK_AND_EXECUTE(!isSetAggregateBitSecond, SetAggregateBit(bitPosition)); for (const auto &pair : OCR_AGGREGATE_MAPPING_TABLE) { int32_t newAlbum = static_cast(pair.first); std::vector ocrText = pair.second; diff --git a/frameworks/services/media_backup_extension/src/upgrade_restore.cpp b/frameworks/services/media_backup_extension/src/upgrade_restore.cpp index c3f1d83c6a..1aa58aa694 100644 --- a/frameworks/services/media_backup_extension/src/upgrade_restore.cpp +++ b/frameworks/services/media_backup_extension/src/upgrade_restore.cpp @@ -1735,7 +1735,7 @@ void UpgradeRestore::BatchDeleteEmptyAlbums(const std::vector &batchAlb NativeRdb::AbsRdbPredicates deletePredicates("PhotoAlbum"); int32_t maxAlbumId = this->photoAlbumRestore_.GetMaxAlbumId(); std::string whereClause = "album_id > ? AND album_id IN ("; - for (auto i = 0; i < batchAlbumIds.size(); i++) { + for (std::size_t i = 0; i < batchAlbumIds.size(); i++) { if (i != 0) { whereClause += ","; } @@ -1746,7 +1746,7 @@ void UpgradeRestore::BatchDeleteEmptyAlbums(const std::vector &batchAlb deletePredicates.SetWhereClause(whereClause); std::vector whereArgs; whereArgs.push_back(to_string(maxAlbumId)); - for (auto i = 0; i < batchAlbumIds.size(); i++) { + for (std::size_t i = 0; i < batchAlbumIds.size(); i++) { whereArgs.push_back(to_string(batchAlbumIds[i])); } deletePredicates.SetWhereArgs(whereArgs); diff --git a/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp b/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp index bc228244ac..c02e25798f 100644 --- a/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp +++ b/frameworks/services/media_cloud_enhancement/src/utils/enhancement_database_operations.cpp @@ -29,6 +29,7 @@ #include "photo_album_column.h" #include "media_app_uri_permission_column.h" #include "media_library_extend_manager.h" +#include "medialibrary_data_manager_utils.h" #include "moving_photo_file_utils.h" using namespace std; @@ -69,6 +70,10 @@ std::shared_ptr EnhancementDatabaseOperations::BatchQuery( continue; } string fileId = MediaFileUri::GetPhotoId(arg); + if (!MediaLibraryDataManagerUtils::IsNumber(fileId)) { + MEDIA_ERR_LOG("invalid fileId: %{public}s", fileId.c_str()); + continue; + } fileId2Uri.emplace(stoi(fileId), arg); whereIdArgs.push_back(fileId); } diff --git a/frameworks/services/media_fuse/src/media_fuse_manager.cpp b/frameworks/services/media_fuse/src/media_fuse_manager.cpp index 7abecdf36b..0baefb057a 100644 --- a/frameworks/services/media_fuse/src/media_fuse_manager.cpp +++ b/frameworks/services/media_fuse/src/media_fuse_manager.cpp @@ -396,6 +396,7 @@ static int32_t OpenFile(const string &filePath, const string &fileId, const stri { MEDIA_DEBUG_LOG("fuse open file"); fuse_context *ctx = fuse_get_context(); + CHECK_AND_RETURN_RET_LOG(ctx != nullptr, E_INNER_FAIL, "fuse_get_context returned nullptr"); uid_t uid = ctx->uid; string bundleName; AccessTokenID tokenCaller = INVALID_TOKENID; diff --git a/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp b/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp index 8e271505d7..f8b03f0206 100644 --- a/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp +++ b/frameworks/services/media_scanner/src/scanner/metadata_extractor.cpp @@ -736,7 +736,12 @@ int32_t MetadataExtractor::ExtractAVMetadata(std::unique_ptr &data, in string filePath = data->GetFilePath(); CHECK_AND_RETURN_RET_LOG(!filePath.empty(), E_AVMETADATA, "AV metadata file path is empty"); - int32_t fd = open(filePath.c_str(), O_RDONLY); + std::string realFilePath; + if (!PathToRealPath(filePath, realFilePath)) { + MEDIA_ERR_LOG("file is not real path, file path: %{private}s", filePath.c_str()); + return E_AVMETADATA; + } + int32_t fd = open(realFilePath.c_str(), O_RDONLY); CHECK_AND_RETURN_RET_LOG(fd > 0, E_SYSCALL, "Open file descriptor failed, errno = %{public}d", errno); struct stat64 st; diff --git a/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h b/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h index c5d8d42ce4..25bb442e60 100644 --- a/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h +++ b/interfaces/inner_api/media_library_helper/include/classify_aggregate_types.h @@ -243,7 +243,6 @@ inline const std::unordered_map AGGREGATE_MAPPING_TAB {PhotoLabel::BUILDING, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::CITY_OVERLOOK, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::FOUNTAIN, AggregateType::CULTURAL_LANDSCAPE}, - {PhotoLabel::BEIJING_TIANANMEN, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::THE_GREAT_WALL, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::ORIENTAL_PEARL_TOWER, AggregateType::CULTURAL_LANDSCAPE}, {PhotoLabel::UANGZHOU_TOWER, AggregateType::CULTURAL_LANDSCAPE}, diff --git a/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp b/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp index 898816d39c..5b79173e2a 100755 --- a/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp +++ b/services/media_assets_manager/src/controller/media_assets_permission_policy.cpp @@ -124,7 +124,7 @@ static std::unordered_map>> me {static_cast(MediaLibraryBusinessCode::QUERY_REQUEST_EDIT_DATA), {{SYSTEMAPI_PERM, READ_PERM}}}, {static_cast(MediaLibraryBusinessCode::QUERY_GET_EDIT_DATA), {{SYSTEMAPI_PERM, READ_PERM}}}, {static_cast(MediaLibraryBusinessCode::QUERY_GET_CLOUDMEDIA_ASSET_STATUS), {{SYSTEMAPI_PERM, READ_PERM}}}, - {static_cast(MediaLibraryBusinessCode::QUERY_START_ASSET_ANALYSIS), {{SYSTEMAPI_PERM}}}, + {static_cast(MediaLibraryBusinessCode::QUERY_START_ASSET_ANALYSIS), {{SYSTEMAPI_PERM, WRITE_PERM}}}, {static_cast(MediaLibraryBusinessCode::PAH_REQUEST_CONTENT), { {READ_PERM} }}, {static_cast(MediaLibraryBusinessCode::QUERY_PHOTO_STATUS), {{READ_PERM}}}, {static_cast(MediaLibraryBusinessCode::INNER_QUERY_PHOTO_STATUS), {{READ_PERM}}}, diff --git a/tools/medialibrary_tool/src/command/recv_command_v10.cpp b/tools/medialibrary_tool/src/command/recv_command_v10.cpp index 37281673f7..822ed9276b 100644 --- a/tools/medialibrary_tool/src/command/recv_command_v10.cpp +++ b/tools/medialibrary_tool/src/command/recv_command_v10.cpp @@ -74,7 +74,12 @@ static int32_t RecvFile(const ExecEnv &env, const FileAsset &fileAsset, bool isR if (!GetWriteFilePath(env, displayName, wFilePath)) { return Media::E_ERR; } - auto wfd = open(wFilePath.c_str(), O_CREAT | O_WRONLY | O_CLOEXEC, OPEN_MODE); + std::string realFilePath; + if (!PathToRealPath(wFilePath, realFilePath)) { + MEDIA_ERR_LOG("file is not real path, file path: %{private}s", wFilePath.c_str()); + return Media::E_ERR; + } + auto wfd = open(realFilePath.c_str(), O_CREAT | O_WRONLY | O_CLOEXEC, OPEN_MODE); if (wfd <= 0) { MEDIA_ERR_LOG("Open write path failed. errno:%{public}d, path name:%{public}s", errno, wFilePath.c_str()); printf("%s open write path failed. errno:%d, path name:%s\n", STR_FAIL.c_str(), errno, wFilePath.c_str()); -- Gitee