1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "common_event_manager_impl.h"
17 #include "native_log.h"
18 #include "common_event.h"
19 #include "parameter_parse.h"
20 #include "common_event_manager.h"
21 #include "securec.h"
22 
23 #include "common_event_publish_info.h"
24 
25 namespace OHOS::CommonEventManager {
26     using Want = OHOS::AAFwk::Want;
27     using CommonEventPublishInfo = OHOS::EventFwk::CommonEventPublishInfo;
28 
PublishEvent(char * event,int32_t userId)29     int32_t CommonEventManagerImpl::PublishEvent(char *event, int32_t userId)
30     {
31         Want want;
32         want.SetAction(std::string(event));
33         auto data = CommonEventData(want);
34         return OHOS::EventFwk::CommonEventManager::PublishCommonEventAsUser(data, userId) ? NO_ERROR : ERR_CES_FAILED;
35     }
36 
PublishEventWithData(char * event,int32_t userId,CommonEventPublishDataBycj options)37     int32_t CommonEventManagerImpl::PublishEventWithData(char *event, int32_t userId,
38         CommonEventPublishDataBycj options)
39     {
40         Want want;
41         want.SetAction(std::string(event));
42         // parameters
43         if (options.parameters.size != 0) {
44             WantParams wantP;
45             SetDataParameters(options.parameters, wantP);
46             want.SetParams(wantP);
47         }
48         auto data = CommonEventData(want, options.code, std::string(options.data));
49         CommonEventPublishInfo publishInfo = CommonEventPublishInfo();
50         // subPermissions
51         if (options.permissions.size != 0) {
52             std::vector<std::string> subscriberPermissions;
53             charPtrToVector(options.permissions.head, options.permissions.size, subscriberPermissions);
54             publishInfo.SetSubscriberPermissions(subscriberPermissions);
55         }
56         publishInfo.SetOrdered(options.isOrdered);
57         publishInfo.SetSticky(options.isSticky);
58         publishInfo.SetBundleName(std::string(options.bundleName));
59         return OHOS::EventFwk::CommonEventManager::NewPublishCommonEventAsUser(data, publishInfo, userId);
60     }
61 
SetStaticSubscriberState(bool enable)62     int32_t CommonEventManagerImpl::SetStaticSubscriberState(bool enable)
63     {
64         return OHOS::EventFwk::CommonEventManager::SetStaticSubscriberState(enable);
65     }
66 
RemoveStickyCommonEvent(char * event)67     int32_t CommonEventManagerImpl::RemoveStickyCommonEvent(char *event)
68     {
69         return OHOS::EventFwk::CommonEventManager::RemoveStickyCommonEvent(std::string(event));
70     }
71 
CreateCommonEventSubscribeInfo(char ** event,int64_t size)72     std::shared_ptr<CommonEventSubscribeInfo> CommonEventManagerImpl::CreateCommonEventSubscribeInfo(
73         char **event, int64_t size)
74     {
75         LOGI("CJ_CreateSubscribeInfo start");
76         OHOS::EventFwk::MatchingSkills matchingSkills;
77         for (int64_t i = 0; i < size; i++) {
78             matchingSkills.AddEvent(std::string(event[i]));
79         }
80         CommonEventSubscribeInfo subscriberInfo(matchingSkills);
81         return std::make_shared<CommonEventSubscribeInfo>(subscriberInfo);
82     }
83 
Subscribe(std::shared_ptr<SubscriberImpl> subscriber,const std::function<void (CCommonEventData)> & callback)84     int32_t CommonEventManagerImpl::Subscribe(std::shared_ptr<SubscriberImpl> subscriber,
85         const std::function<void(CCommonEventData)> &callback)
86     {
87         LOGI("Start Subscribe!")
88         auto errorCode = OHOS::EventFwk::CommonEventManager::NewSubscribeCommonEvent(subscriber);
89         if (errorCode == NO_ERROR) {
90             SetSubscribeInfo(subscriber, callback);
91         }
92         return errorCode;
93     }
94 
Unsubscribe(std::shared_ptr<SubscriberImpl> subscriber)95     int32_t CommonEventManagerImpl::Unsubscribe(std::shared_ptr<SubscriberImpl> subscriber)
96     {
97         auto errorCode = OHOS::EventFwk::CommonEventManager::NewUnSubscribeCommonEvent(subscriber);
98         DeleteSubscribe(subscriber);
99         return errorCode;
100     }
101 
102 }