1 /*
2  * Copyright (c) 2022 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 "ohos_adapter/bridge/ark_paste_board_client_adapter_impl.h"
17 
18 #include "ohos_adapter/bridge/ark_paste_board_observer_adapter_wrapper.h"
19 #include "ohos_adapter/bridge/ark_paste_data_record_adapter_impl.h"
20 #include "ohos_adapter/cpptoc/ark_paste_data_record_adapter_cpptoc.h"
21 #include "ohos_adapter/cpptoc/ark_paste_record_vector_cpptoc.h"
22 
23 #include "base/bridge/ark_web_bridge_macros.h"
24 
25 namespace OHOS::ArkWeb {
26 
ArkPasteRecordVectorStructToClass(const ArkPasteRecordVector & struct_value)27 static NWeb::PasteRecordVector ArkPasteRecordVectorStructToClass(const ArkPasteRecordVector& struct_value)
28 {
29     NWeb::PasteRecordVector class_value;
30     if (struct_value.size > 0) {
31         for (int count = 0; count < struct_value.size; count++) {
32             ArkWebRefPtr<ArkPasteDataRecordAdapter> data =
33                 ArkPasteDataRecordAdapterCppToC::Revert(struct_value.value[count]);
34 
35             ArkPasteDataRecordAdapterImpl* imp = static_cast<ArkPasteDataRecordAdapterImpl*>(data.get());
36             class_value.push_back(imp->real_);
37         }
38     }
39 
40     return class_value;
41 }
42 
ArkPasteBoardClientAdapterImpl(NWeb::PasteBoardClientAdapter & ref)43 ArkPasteBoardClientAdapterImpl::ArkPasteBoardClientAdapterImpl(NWeb::PasteBoardClientAdapter& ref) : real_(ref) {}
44 
GetPasteData(ArkPasteRecordVector & data)45 bool ArkPasteBoardClientAdapterImpl::GetPasteData(ArkPasteRecordVector& data)
46 {
47     NWeb::PasteRecordVector temp;
48     bool result = real_.GetPasteData(temp);
49     data = ArkPasteRecordVectorClassToStruct(temp);
50     return result;
51 }
52 
SetPasteData(ArkPasteRecordVector & data,int32_t copyOption)53 void ArkPasteBoardClientAdapterImpl::SetPasteData(ArkPasteRecordVector& data, int32_t copyOption)
54 {
55     NWeb::PasteRecordVector temp = ArkPasteRecordVectorStructToClass(data);
56     real_.SetPasteData(temp, (NWeb::CopyOptionMode)copyOption);
57 }
58 
HasPasteData()59 bool ArkPasteBoardClientAdapterImpl::HasPasteData()
60 {
61     return real_.HasPasteData();
62 }
63 
Clear()64 void ArkPasteBoardClientAdapterImpl::Clear()
65 {
66     real_.Clear();
67 }
68 
OpenRemoteUri(const ArkWebString & path)69 int32_t ArkPasteBoardClientAdapterImpl::OpenRemoteUri(const ArkWebString& path)
70 {
71     return real_.OpenRemoteUri(ArkWebStringStructToClass(path));
72 }
73 
IsLocalPaste()74 bool ArkPasteBoardClientAdapterImpl::IsLocalPaste()
75 {
76     return real_.IsLocalPaste();
77 }
78 
GetTokenId()79 uint32_t ArkPasteBoardClientAdapterImpl::GetTokenId()
80 {
81     return real_.GetTokenId();
82 }
83 
AddPasteboardChangedObserver(ArkWebRefPtr<ArkPasteBoardObserverAdapter> callback)84 int32_t ArkPasteBoardClientAdapterImpl::AddPasteboardChangedObserver(
85     ArkWebRefPtr<ArkPasteBoardObserverAdapter> callback)
86 {
87     if (CHECK_REF_PTR_IS_NULL(callback)) {
88         return real_.AddPasteboardChangedObserver(nullptr);
89     }
90 
91     return real_.AddPasteboardChangedObserver(std::make_shared<ArkPasteBoardObserverAdapterWrapper>(callback));
92 }
93 
RemovePasteboardChangedObserver(int32_t callbackId)94 void ArkPasteBoardClientAdapterImpl::RemovePasteboardChangedObserver(int32_t callbackId)
95 {
96     real_.RemovePasteboardChangedObserver(callbackId);
97 }
98 
99 } // namespace OHOS::ArkWeb
100