代码检视修改 Signed-off-by:baozewei@huawei.com

Signed-off-by: b30052170 <baozewei@huawei.com>
This commit is contained in:
b30052170 2024-11-06 18:51:06 +08:00
parent ee052752de
commit 33a8ed660b
7 changed files with 83 additions and 24 deletions

View File

@ -229,27 +229,27 @@ void ParseDefaultPageMargin(const nlohmann::json &cupsOpt, Print_Margin &default
void ParseMediaOpt(const nlohmann::json &cupsOpt, Print_PrinterInfo &nativePrinterInfo)
{
if (cupsOpt.contains("defaultPageSizeId")) {
if (cupsOpt.contains("defaultPageSizeId") && cupsOpt["defaultPageSizeId"].is_string()) {
std::string defaultPageSizeId = cupsOpt["defaultPageSizeId"].get<std::string>();
PRINT_HILOGD("defaultPageSizeId %{public}s", defaultPageSizeId.c_str());
nativePrinterInfo.defaultValue.defaultPageSizeId = CopyString(defaultPageSizeId);
}
if (cupsOpt.contains("media-type-supported")) {
if (cupsOpt.contains("media-type-supported") && cupsOpt["media-type-supported"].is_string()) {
std::string mediaTypeSupported = cupsOpt["media-type-supported"].get<std::string>();
PRINT_HILOGD("cupsOptionsStr media-type-supported %{public}s", mediaTypeSupported.c_str());
nativePrinterInfo.capability.supportedMediaTypes = CopyString(mediaTypeSupported);
}
if (cupsOpt.contains("media-type-default")) {
if (cupsOpt.contains("media-type-default") && cupsOpt["media-type-default"].is_string()) {
std::string mediaTypeDefault = cupsOpt["media-type-default"].get<std::string>();
PRINT_HILOGD("cupsOptionsStr media-type-default %{public}s", mediaTypeDefault.c_str());
nativePrinterInfo.defaultValue.defaultMediaType = CopyString(mediaTypeDefault);
}
if (cupsOpt.contains("media-source-default")) {
if (cupsOpt.contains("media-source-default") && cupsOpt["media-source-default"].is_string()) {
std::string mediaSourceDefault = cupsOpt["media-source-default"].get<std::string>();
PRINT_HILOGD("cupsOptionsStr media-source-default %{public}s", mediaSourceDefault.c_str());
nativePrinterInfo.defaultValue.defaultPaperSource = CopyString(mediaSourceDefault);
}
if (cupsOpt.contains("media-source-supported")) {
if (cupsOpt.contains("media-source-supported") && cupsOpt["media-source-supported"].is_string()) {
std::string mediaSourceSupported = cupsOpt["media-source-supported"].get<std::string>();
PRINT_HILOGD("cupsOptionsStr media-source-supported %{public}s", mediaSourceSupported.c_str());
nativePrinterInfo.capability.supportedPaperSources = CopyString(mediaSourceSupported);
@ -428,7 +428,8 @@ int32_t ParseInfoOption(const std::string &infoOption, Print_PrinterInfo &native
return E_PRINT_INVALID_PARAMETER;
}
nlohmann::json infoJson = json::parse(infoOption);
if (!infoJson.contains("printerUri") || !infoJson.contains("make")) {
if (!infoJson.contains("printerUri") || !infoJson["printerUri"].is_string() ||
!infoJson.contains("make") || !infoJson["make"].is_string()) {
PRINT_HILOGW("The infoJson does not have a necessary attribute.");
return E_PRINT_INVALID_PARAMETER;
}

View File

@ -35,16 +35,16 @@ public:
static PreferenceSetting BuildPreferenceSettingFromJson(const json& printerAttr)
{
PreferenceSetting preferenceSetting;
if (printerAttr.contains("pagesizeId")) {
if (printerAttr.contains("pagesizeId") && printerAttr["pagesizeId"].is_string()) {
preferenceSetting.pagesizeId = printerAttr.at("pagesizeId").get<std::string>();
}
if (printerAttr.contains("orientation")) {
if (printerAttr.contains("orientation") && printerAttr["orientation"].is_string()) {
preferenceSetting.orientation = printerAttr.at("orientation").get<std::string>();
}
if (printerAttr.contains("duplex")) {
if (printerAttr.contains("duplex") && printerAttr["duplex"].is_string()) {
preferenceSetting.duplex = printerAttr.at("duplex").get<std::string>();
}
if (printerAttr.contains("quality")) {
if (printerAttr.contains("quality") && printerAttr["quality"].is_string()) {
preferenceSetting.quality = printerAttr.at("quality").get<std::string>();
}
return preferenceSetting;

View File

@ -133,6 +133,7 @@ private:
void JobCompleteCallback();
void UpdateBorderlessJobParameter(json& optionJson, JobParameters *params);
void UpdateJobParameterByOption(json& optionJson, JobParameters *params);
JobParameters* BuildJobParameters(const PrintJob &jobInfo);
std::string GetColorString(uint32_t colorCode);
std::string GetMedieSize(const PrintJob &jobInfo);

View File

@ -1533,6 +1533,31 @@ void PrintCupsClient::UpdateBorderlessJobParameter(json& optionJson, JobParamete
}
}
void PrintCupsClient::UpdateJobParameterByOption(json& optionJson, JobParameters *params)
{
if (optionJson.contains("cupsOptions") && optionJson["cupsOptions"].is_string()) {
params->printerAttrsOption_cupsOption = optionJson["cupsOptions"];
}
if (optionJson.contains("printQuality") && optionJson["printQuality"].is_string()) {
params->printQuality = optionJson["printQuality"].get<std::string>();
} else {
params->printQuality = CUPS_PRINT_QUALITY_NORMAL;
}
if (optionJson.contains("jobName") && optionJson["jobName"].is_string()) {
params->jobName = optionJson["jobName"].get<std::string>();
} else {
params->jobName = DEFAULT_JOB_NAME;
}
if (optionJson.contains("mediaType") && optionJson["mediaType"].is_string()) {
params->mediaType = optionJson["mediaType"].get<std::string>();
} else {
params->mediaType = CUPS_MEDIA_TYPE_PLAIN;
}
}
JobParameters* PrintCupsClient::BuildJobParameters(const PrintJob &jobInfo)
{
JobParameters *params = nullptr;
@ -1547,8 +1572,9 @@ JobParameters* PrintCupsClient::BuildJobParameters(const PrintJob &jobInfo)
}
json optionJson = json::parse(option);
PRINT_HILOGD("test optionJson: %{private}s", optionJson.dump().c_str());
if (!optionJson.contains("printerUri") || !optionJson.contains("printerName")
|| !optionJson.contains("documentFormat")) {
if (!optionJson.contains("printerUri") || !optionJson["printerUri"].is_string() ||
!optionJson.contains("printerName") || !optionJson["printerName"].is_string() ||
!optionJson.contains("documentFormat") || !optionJson["documentFormat"].is_string()) {
PRINT_HILOGE("The option does not have a necessary attribute.");
return params;
}
@ -1568,18 +1594,8 @@ JobParameters* PrintCupsClient::BuildJobParameters(const PrintJob &jobInfo)
params->printerName = PrintUtil::StandardizePrinterName(optionJson["printerName"]);
params->printerUri = optionJson["printerUri"];
params->documentFormat = optionJson["documentFormat"];
if (optionJson.contains("cupsOptions")) {
params->printerAttrsOption_cupsOption = optionJson["cupsOptions"];
}
UpdateJobParameterByOption(optionJson, params);
UpdateBorderlessJobParameter(optionJson, params);
if (optionJson.contains("printQuality") && optionJson["printQuality"].is_string()) {
params->printQuality = optionJson["printQuality"].get<std::string>();
} else {
params->printQuality = CUPS_PRINT_QUALITY_NORMAL;
}
params->jobName = optionJson.contains("jobName") ? optionJson["jobName"].get<std::string>() : DEFAULT_JOB_NAME;
params->mediaType = optionJson.contains("mediaType") ?
optionJson["mediaType"].get<std::string>() : CUPS_MEDIA_TYPE_PLAIN;
params->serviceAbility = PrintServiceAbility::GetInstance();
return params;
}

View File

@ -143,7 +143,7 @@ std::string PrintUsbManager::QueryPrinterInfoFromStringDescriptor(
uint16_t index = USB_INDEX_LANGUAGE_ID_ENGLISH;
int32_t timeOut = HTTP_COMMON_CONST_VALUE_500;
const HDI::Usb::V1_0::UsbCtrlTransfer tctrl = {requestType, request, value, index, timeOut};
std::vector<uint8_t> bufferData(HTTP_COMMON_CONST_VALUE_100, 0);
std::vector<uint8_t> bufferData(USB_CONTROLTRANSFER_READ_TIMEOUT, 0);
int32_t ret = 0;
if (isUsbEnable) {
ret = UsbSrvClient::GetInstance().ControlTransfer(usbDevicePipe, tctrl, bufferData);

View File

@ -1627,5 +1627,45 @@ HWTEST_F(PrintCupsClientTest, PrintCupsClientTest_0077, TestSize.Level1)
printCupsClient.DiscoverUsbPrinters(printers);
EXPECT_EQ(printers.size(), 0);
}
/**
* @tc.name: PrintCupsClientTest_0078
* @tc.desc: BuildJobParameters
* @tc.type: FUNC
* @tc.require:
*/
HWTEST_F(PrintCupsClientTest, PrintCupsClientTest_0078, TestSize.Level1)
{
OHOS::Print::PrintCupsClient printCupsClient;
PrintJob testJob;
testJob.SetJobId(GetDefaultJobId());
std::vector<uint32_t> files = {1};
testJob.SetFdList(files);
OHOS::Print::PrintPageSize pageSize;
pageSize.SetId("pgid-1234");
testJob.SetPageSize(pageSize);
testJob.SetPrinterId("printid-1234");
testJob.SetOption(R"({"key": "value"})");
json optionJson = json::parse(testJob.GetOption());
optionJson["printerUri"] = 1;
optionJson["printerName"] = "printer1";
optionJson["documentFormat"] = "application/pdf";
testJob.SetOption(optionJson.dump());
JobParameters *jobParams = printCupsClient.BuildJobParameters(testJob);
EXPECT_EQ(jobParams->printerUri, optionJson["printerUri"]);
optionJson["printerUri"] = "ipp://192.168.0.1:111/ipp/print";
optionJson["printerName"] = 1;
testJob.SetOption(optionJson.dump());
JobParameters *jobParams = printCupsClient.BuildJobParameters(testJob);
EXPECT_EQ(jobParams->printerName, PrintUtil::StandardizePrinterName(optionJson["printerName"]));
optionJson["printerName"] = "printer1";
optionJson["documentFormat"] = 1;
testJob.SetOption(optionJson.dump());
JobParameters *jobParams = printCupsClient.BuildJobParameters(testJob);
EXPECT_EQ(jobParams->documentFormat, optionJson["documentFormat"]);
}
} // namespace Print
} // namespace OHOS

View File

@ -157,6 +157,7 @@ const int USB_WRITE_INTERVAL = 50;
const int CPP_HTTP_OK = 1;
const int CPP_HTTP_FAIL = 0;
const int REQID_OPERAID_LEN = 8;
const int USB_CONTROLTRANSFER_READ_TIMEOUT = 2000;
const char HTTP_MSG_CHAR_1 = '1';
const char HTTP_MSG_CHAR_2E = '.';