* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
const REQUEST_MODE = 666;
function grantPermission() {
console.info('grantPermission');
let context = featureAbility.getContext();
context.requestPermissionsFromUser(['ohos.permission.DISTRIBUTED_DATASYNC'], REQUEST_MODE, function (result) {
console.info(`result.requestCode=${result.requestCode}`);
});
console.info('end grantPermission');
}
export default class DistributedDataModel {
documentList = [];
distributedObject;
imgSrc = 'common/red.png';
#callback;
#statusCallback;
constructor() {
this.distributedObject = distributedObject.createDistributedObject({
documentList: this.documentList,
documentSize: 0
});
this.share();
}
clearCallback() {
this.distributedObject.off('change');
this.#callback = undefined;
this.distributedObject.off('status');
this.#statusCallback = undefined;
}
setCallback(callback) {
if (this.#callback === callback) {
console.info('same callback');
return;
}
console.info('start off');
if (this.#callback !== undefined) {
this.distributedObject.off('change', this.#callback);
}
this.#callback = callback;
console.info('start watch change');
this.distributedObject.on('change', this.#callback);
}
setStatusCallback(callback) {
if (this.#statusCallback === callback) {
console.info('same callback');
return;
}
console.info('start off');
if (this.#statusCallback !== undefined) {
this.distributedObject.off('status', this.#statusCallback);
}
this.#statusCallback = callback;
console.info('start watch change');
this.distributedObject.on('status', this.#statusCallback);
}
share() {
console.info('start share');
if (this.distributedObject.__sessionId === undefined) {
grantPermission();
this.distributedObject.setSessionId('123456');
}
}
update(index, title, content) {
console.info('doUpdate ' + title + index);
this.documentList = this.distributedObject.documentList;
this.documentList[index] = {
index: index, title: title, content: content
};
this.distributedObject.documentList = this.documentList;
console.info('update my documentList ' + JSON.stringify(this.documentList));
}
add(title, content) {
console.info('doAdd ' + title + content);
console.info('documentList ' + JSON.stringify(this.documentList));
this.documentList = this.distributedObject.documentList;
this.documentList[this.distributedObject.documentSize] = {
index: this.distributedObject.documentSize, title: title, content: content
};
this.distributedObject.documentList = this.documentList;
this.distributedObject.documentSize++;
console.info('add my documentList ' + JSON.stringify(this.documentList));
}
clear() {
console.info('doClear ');
this.documentList = [];
this.distributedObject.documentList = this.documentList;
this.distributedObject.documentSize = 0;
console.info('doClear finish');
}
}
export let dataModel = new DistributedDataModel();