• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "printer_preferences_helper.h"
17 #include "napi_print_utils.h"
18 #include "print_constant.h"
19 #include "print_log.h"
20 
21 namespace OHOS::Print {
22 static constexpr const char *PARAM_PREFERENCES_DEFAULT_DEPLEX_MODE = "defaultDuplexMode";
23 static constexpr const char *PARAM_PREFERENCES_DEFAULT_PRINT_QUALITY = "defaultPrintQuality";
24 static constexpr const char *PARAM_PREFERENCES_DEFAULT_MEDIA_TYPE = "defaultMediaType";
25 static constexpr const char *PARAM_PREFERENCES_DEFAULT_PAFESIZE_ID = "defaultPageSizeId";
26 static constexpr const char *PARAM_PREFERENCES_DEFAULT_ORIENTATION = "defaultOrientation";
27 static constexpr const char *PARAM_PREFERENCES_BORDERLESS = "borderless";
28 static constexpr const char *PARAM_PREFERENCES_OPTION = "options";
29 
MakeJsObject(napi_env env,const PrinterPreferences & preferences)30 napi_value PrinterPreferencesHelper::MakeJsObject(napi_env env, const PrinterPreferences &preferences)
31 {
32     napi_value jsObj = nullptr;
33     PRINT_CALL(env, napi_create_object(env, &jsObj));
34     if (preferences.HasDefaultDuplexMode()) {
35         NapiPrintUtils::SetUint32Property(
36             env, jsObj, PARAM_PREFERENCES_DEFAULT_DEPLEX_MODE, preferences.GetDefaultDuplexMode());
37     }
38 
39     if (preferences.HasDefaultPrintQuality()) {
40         NapiPrintUtils::SetUint32Property(
41             env, jsObj, PARAM_PREFERENCES_DEFAULT_PRINT_QUALITY, preferences.GetDefaultPrintQuality());
42     }
43 
44     if (preferences.HasDefaultMediaType()) {
45         NapiPrintUtils::SetStringPropertyUtf8(
46             env, jsObj, PARAM_PREFERENCES_DEFAULT_MEDIA_TYPE, preferences.GetDefaultMediaType());
47     }
48 
49     if (preferences.HasDefaultPageSizeId()) {
50         NapiPrintUtils::SetStringPropertyUtf8(
51             env, jsObj, PARAM_PREFERENCES_DEFAULT_PAFESIZE_ID, preferences.GetDefaultPageSizeId());
52     }
53 
54     if (preferences.HasDefaultOrientation()) {
55         NapiPrintUtils::SetUint32Property(
56             env, jsObj, PARAM_PREFERENCES_DEFAULT_ORIENTATION, preferences.GetDefaultOrientation());
57     }
58 
59     if (preferences.HasBorderless()) {
60         NapiPrintUtils::SetBooleanProperty(env, jsObj, PARAM_PREFERENCES_BORDERLESS, preferences.GetBorderless());
61     }
62 
63     if (preferences.HasOption()) {
64         NapiPrintUtils::SetStringPropertyUtf8(env, jsObj, PARAM_PREFERENCES_OPTION, preferences.GetOption());
65     }
66 
67     return jsObj;
68 }
69 
BuildFromJs(napi_env env,napi_value jsValue)70 std::shared_ptr<PrinterPreferences> PrinterPreferencesHelper::BuildFromJs(napi_env env, napi_value jsValue)
71 {
72     auto nativeObj = std::make_shared<PrinterPreferences>();
73 
74     if (!ValidateProperty(env, jsValue)) {
75         PRINT_HILOGE("Invalid property of printer preferences");
76         return nullptr;
77     }
78 
79     auto jsDefaultDuplexMode = NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_DEFAULT_DEPLEX_MODE);
80     if (jsDefaultDuplexMode != nullptr) {
81         nativeObj->SetDefaultDuplexMode(
82             NapiPrintUtils::GetUint32Property(env, jsValue, PARAM_PREFERENCES_DEFAULT_DEPLEX_MODE));
83     }
84 
85     auto jsDefaultPrintQuality =
86         NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_DEFAULT_PRINT_QUALITY);
87     if (jsDefaultPrintQuality != nullptr) {
88         nativeObj->SetDefaultPrintQuality(
89             NapiPrintUtils::GetUint32Property(env, jsValue, PARAM_PREFERENCES_DEFAULT_PRINT_QUALITY));
90     }
91 
92     auto jsDefaultMediaType = NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_DEFAULT_MEDIA_TYPE);
93     if (jsDefaultMediaType != nullptr) {
94         nativeObj->SetDefaultMediaType(
95             NapiPrintUtils::GetStringPropertyUtf8(env, jsValue, PARAM_PREFERENCES_DEFAULT_MEDIA_TYPE));
96     }
97 
98     auto jsDefaultPageSizeId = NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_DEFAULT_PAFESIZE_ID);
99     if (jsDefaultPageSizeId != nullptr) {
100         nativeObj->SetDefaultPageSizeId(
101             NapiPrintUtils::GetStringPropertyUtf8(env, jsValue, PARAM_PREFERENCES_DEFAULT_PAFESIZE_ID));
102     }
103 
104     auto jsDefaultOrientation = NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_DEFAULT_ORIENTATION);
105     if (jsDefaultOrientation != nullptr) {
106         nativeObj->SetDefaultOrientation(
107             NapiPrintUtils::GetUint32Property(env, jsValue, PARAM_PREFERENCES_DEFAULT_ORIENTATION));
108     }
109 
110     auto jsBorderless = NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_BORDERLESS);
111     if (jsBorderless != nullptr) {
112         nativeObj->SetBorderless(NapiPrintUtils::GetBooleanProperty(env, jsValue, PARAM_PREFERENCES_BORDERLESS));
113     }
114 
115     auto jsOption = NapiPrintUtils::GetNamedProperty(env, jsValue, PARAM_PREFERENCES_OPTION);
116     if (jsOption != nullptr) {
117         nativeObj->SetOption(NapiPrintUtils::GetStringPropertyUtf8(env, jsValue, PARAM_PREFERENCES_OPTION));
118     }
119     return nativeObj;
120 }
121 
ValidateProperty(napi_env env,napi_value object)122 bool PrinterPreferencesHelper::ValidateProperty(napi_env env, napi_value object)
123 {
124     std::map<std::string, PrintParamStatus> propertyList = {
125         {PARAM_PREFERENCES_DEFAULT_DEPLEX_MODE, PRINT_PARAM_OPT},
126         {PARAM_PREFERENCES_DEFAULT_PRINT_QUALITY, PRINT_PARAM_OPT},
127         {PARAM_PREFERENCES_DEFAULT_MEDIA_TYPE, PRINT_PARAM_OPT},
128         {PARAM_PREFERENCES_DEFAULT_PAFESIZE_ID, PRINT_PARAM_OPT},
129         {PARAM_PREFERENCES_DEFAULT_ORIENTATION, PRINT_PARAM_OPT},
130         {PARAM_PREFERENCES_BORDERLESS, PRINT_PARAM_OPT},
131         {PARAM_PREFERENCES_OPTION, PRINT_PARAM_OPT},
132     };
133 
134     auto names = NapiPrintUtils::GetPropertyNames(env, object);
135     return NapiPrintUtils::VerifyProperty(names, propertyList);
136 }
137 }  // namespace OHOS::Print
138