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 "print_converter.h"
17  #include "print_constant.h"
18  #include "print_log.h"
19  #include "print_util.h"
20  
21  namespace {
22  const uint32_t ORIENTATION_OFFSET = 3;
23  }  // namespace
24  namespace OHOS::Print {
ConvertToNativeErrorCode(int32_t errorCode)25  Print_ErrorCode ConvertToNativeErrorCode(int32_t errorCode)
26  {
27      if (errorCode >= E_PRINT_GENERIC_FAILURE && errorCode <= E_PRINT_UNKNOWN) {
28          return static_cast<Print_ErrorCode>(errorCode + PRINT_ERROR_GENERIC_FAILURE - E_PRINT_GENERIC_FAILURE);
29      }
30      return static_cast<Print_ErrorCode>(errorCode);
31  }
32  
ConvertPrinterState(uint32_t state)33  Print_PrinterState ConvertPrinterState(uint32_t state)
34  {
35      switch (state) {
36          case PRINTER_ADDED:
37              return PRINTER_UNAVAILABLE;
38          case PRINTER_REMOVED:
39              return PRINTER_UNAVAILABLE;
40          case PRINTER_UPDATE_CAP:
41              return PRINTER_UNAVAILABLE;
42          case PRINTER_CONNECTED:
43              return PRINTER_IDLE;
44          case PRINTER_DISCONNECTED:
45              return PRINTER_UNAVAILABLE;
46          case PRINTER_RUNNING:
47              return PRINTER_BUSY;
48          default:
49              return PRINTER_UNAVAILABLE;
50      }
51  }
52  
ConvertStringToInt(const char * src,int & dst)53  bool ConvertStringToInt(const char *src, int &dst)
54  {
55      if (src == nullptr || src[0] == '\0') {
56          return false;
57      }
58      if (!PrintUtil::ConvertToInt(std::string(src), dst)) {
59          PRINT_HILOGW("ConvertStringToInt fail: %{public}s", src);
60          return false;
61      }
62      return true;
63  }
64  
ConvertOrientationMode(const uint32_t & src,Print_OrientationMode & dst)65  bool ConvertOrientationMode(const uint32_t &src, Print_OrientationMode &dst)
66  {
67      if (src >= ORIENTATION_OFFSET && src - ORIENTATION_OFFSET <= static_cast<uint32_t>(ORIENTATION_MODE_NONE)) {
68          dst = static_cast<Print_OrientationMode>(src - ORIENTATION_OFFSET);
69          return true;
70      } else {
71          return false;
72      }
73  }
74  
ConvertColorMode(const uint32_t & src,Print_ColorMode & dst)75  bool ConvertColorMode(const uint32_t &src, Print_ColorMode &dst)
76  {
77      if (src >= 0 && src <= static_cast<uint32_t>(COLOR_MODE_AUTO)) {
78          dst = static_cast<Print_ColorMode>(src);
79          return true;
80      } else {
81          return false;
82      }
83  }
84  
ConvertDuplexMode(const uint32_t & src,Print_DuplexMode & dst)85  bool ConvertDuplexMode(const uint32_t &src, Print_DuplexMode &dst)
86  {
87      if (src >= 0 && src <= static_cast<uint32_t>(DUPLEX_MODE_SHORT_EDGE)) {
88          dst = static_cast<Print_DuplexMode>(src);
89          return true;
90      } else {
91          return false;
92      }
93  }
94  
ConvertQuality(const uint32_t & src,Print_Quality & dst)95  bool ConvertQuality(const uint32_t &src, Print_Quality &dst)
96  {
97      if (src >= static_cast<uint32_t>(PRINT_QUALITY_DRAFT) && src <= static_cast<uint32_t>(PRINT_QUALITY_HIGH)) {
98          dst = static_cast<Print_Quality>(src);
99          return true;
100      } else {
101          return false;
102      }
103  }
104  
GetDocumentFormatString(Print_DocumentFormat format)105  std::string GetDocumentFormatString(Print_DocumentFormat format)
106  {
107      switch (format) {
108          case DOCUMENT_FORMAT_JPEG:
109              return "image/jpeg";
110          case DOCUMENT_FORMAT_PDF:
111              return "application/pdf";
112          case DOCUMENT_FORMAT_POSTSCRIPT:
113              return "application/postscript";
114          case DOCUMENT_FORMAT_TEXT:
115              return "text/plain";
116          case DOCUMENT_FORMAT_AUTO:
117              return "application/octet-stream";
118          default:
119              return "application/octet-stream";
120      }
121  }
122  
GetResolutionString(Print_Resolution resolution)123  std::string GetResolutionString(Print_Resolution resolution)
124  {
125      return std::to_string(resolution.horizontalDpi) + "x" + std::to_string(resolution.verticalDpi) + "dpi";
126  }
127  }  // namespace OHOS::Print
128