1e75ebbc8Sopenharmony_ci/* 2e75ebbc8Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3e75ebbc8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e75ebbc8Sopenharmony_ci * you may not use this file except in compliance with the License. 5e75ebbc8Sopenharmony_ci * You may obtain a copy of the License at 6e75ebbc8Sopenharmony_ci * 7e75ebbc8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e75ebbc8Sopenharmony_ci * 9e75ebbc8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e75ebbc8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e75ebbc8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e75ebbc8Sopenharmony_ci * See the License for the specific language governing permissions and 13e75ebbc8Sopenharmony_ci * limitations under the License. 14e75ebbc8Sopenharmony_ci */ 15e75ebbc8Sopenharmony_ci 16e75ebbc8Sopenharmony_ciimport Log from "../Log"; 17e75ebbc8Sopenharmony_ci 18e75ebbc8Sopenharmony_ciexport type EventTarget = "local" | "remote" | "ability" | "commonEvent"; 19e75ebbc8Sopenharmony_ciexport type Event = { 20e75ebbc8Sopenharmony_ci target: EventTarget; 21e75ebbc8Sopenharmony_ci data: { [key: string]: any }; 22e75ebbc8Sopenharmony_ci}; 23e75ebbc8Sopenharmony_ciexport type EventParser = { 24e75ebbc8Sopenharmony_ci [key in EventTarget]: (data: any) => boolean; 25e75ebbc8Sopenharmony_ci}; 26e75ebbc8Sopenharmony_ciexport type LocalEvent = { 27e75ebbc8Sopenharmony_ci eventName: string; 28e75ebbc8Sopenharmony_ci args: any; 29e75ebbc8Sopenharmony_ci}; 30e75ebbc8Sopenharmony_ci 31e75ebbc8Sopenharmony_ciexport const START_ABILITY_EVENT = "startAbilityEvent"; 32e75ebbc8Sopenharmony_ciexport const PUBLISH_COMMON_EVENT = "publishCommonEvent"; 33e75ebbc8Sopenharmony_ci 34e75ebbc8Sopenharmony_ciconst TAG = "EventUtil"; 35e75ebbc8Sopenharmony_ciconst LOCAL_EVENT_TYPE = "local"; 36e75ebbc8Sopenharmony_ciconst START_ABILITY_TYPE = "ability"; 37e75ebbc8Sopenharmony_ci 38e75ebbc8Sopenharmony_ciexport function obtainLocalEvent(event: string, args: any): Event & { data: LocalEvent } { 39e75ebbc8Sopenharmony_ci return { 40e75ebbc8Sopenharmony_ci target: LOCAL_EVENT_TYPE, 41e75ebbc8Sopenharmony_ci data: { 42e75ebbc8Sopenharmony_ci eventName: event, 43e75ebbc8Sopenharmony_ci args, 44e75ebbc8Sopenharmony_ci }, 45e75ebbc8Sopenharmony_ci }; 46e75ebbc8Sopenharmony_ci} 47e75ebbc8Sopenharmony_ci 48e75ebbc8Sopenharmony_ciexport function obtainStartAbility(bundleName: string, abilityName: string, args?: any): Event { 49e75ebbc8Sopenharmony_ci return { 50e75ebbc8Sopenharmony_ci target: START_ABILITY_TYPE, 51e75ebbc8Sopenharmony_ci data: { 52e75ebbc8Sopenharmony_ci bundleName, 53e75ebbc8Sopenharmony_ci abilityName, 54e75ebbc8Sopenharmony_ci args 55e75ebbc8Sopenharmony_ci }, 56e75ebbc8Sopenharmony_ci }; 57e75ebbc8Sopenharmony_ci} 58e75ebbc8Sopenharmony_ci 59e75ebbc8Sopenharmony_ciexport function parseEventString(eventString: string | undefined): Event | undefined { 60e75ebbc8Sopenharmony_ci // string must be "local=eventName|args" or "ability=bundleName|abilityName" 61e75ebbc8Sopenharmony_ci if (!eventString) { 62e75ebbc8Sopenharmony_ci return; 63e75ebbc8Sopenharmony_ci } 64e75ebbc8Sopenharmony_ci let [eventType, eventData] = eventString.split("="); 65e75ebbc8Sopenharmony_ci if (eventType == LOCAL_EVENT_TYPE && eventData) { 66e75ebbc8Sopenharmony_ci let [localEventName, args] = eventData.split("|"); 67e75ebbc8Sopenharmony_ci if (localEventName) { 68e75ebbc8Sopenharmony_ci Log.showDebug(TAG, `parseEventData name:${localEventName}, args: ${args}`); 69e75ebbc8Sopenharmony_ci return obtainLocalEvent(localEventName, args); 70e75ebbc8Sopenharmony_ci } 71e75ebbc8Sopenharmony_ci } 72e75ebbc8Sopenharmony_ci if (eventType == START_ABILITY_TYPE && eventData) { 73e75ebbc8Sopenharmony_ci let [bundleName, abilityName] = eventData.split("|"); 74e75ebbc8Sopenharmony_ci if (bundleName && abilityName) { 75e75ebbc8Sopenharmony_ci Log.showDebug(TAG, `parseEventData bundleName:${bundleName}, abilityName: ${abilityName}`); 76e75ebbc8Sopenharmony_ci return obtainStartAbility(bundleName, abilityName); 77e75ebbc8Sopenharmony_ci } 78e75ebbc8Sopenharmony_ci } 79e75ebbc8Sopenharmony_ci Log.showError(TAG, `Can't parse event data: ${eventString}`); 80e75ebbc8Sopenharmony_ci return undefined; 81e75ebbc8Sopenharmony_ci} 82