123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "printing/backend/print_backend_cups_ipp.h"
- #include <cups/cups.h>
- #include <memory>
- #include <utility>
- #include <vector>
- #include "base/files/file_util.h"
- #include "base/logging.h"
- #include "base/strings/string_number_conversions.h"
- #include "base/strings/string_util.h"
- #include "printing/backend/cups_connection.h"
- #include "printing/backend/cups_ipp_helper.h"
- #include "printing/backend/print_backend_consts.h"
- #include "printing/mojom/print.mojom.h"
- #include "printing/units.h"
- namespace printing {
- PrintBackendCupsIpp::PrintBackendCupsIpp(
- std::unique_ptr<CupsConnection> cups_connection)
- : cups_connection_(std::move(cups_connection)) {}
- PrintBackendCupsIpp::~PrintBackendCupsIpp() = default;
- mojom::ResultCode PrintBackendCupsIpp::EnumeratePrinters(
- PrinterList& printer_list) {
- DCHECK(printer_list.empty());
- std::vector<std::unique_ptr<CupsPrinter>> printers;
- if (!cups_connection_->GetDests(printers)) {
- LOG(WARNING) << "CUPS: Error getting printers from CUPS server"
- << ", server: " << cups_connection_->server_name()
- << ", error: " << cups_connection_->last_error() << " - "
- << cups_connection_->last_error_message();
- return mojom::ResultCode::kFailed;
- }
- VLOG(1) << "CUPS: found " << printers.size()
- << " printers from CUPS server: " << cups_connection_->server_name();
- for (const auto& printer : printers) {
- PrinterBasicInfo basic_info;
- if (printer->ToPrinterInfo(&basic_info)) {
- printer_list.push_back(basic_info);
- }
- }
- return mojom::ResultCode::kSuccess;
- }
- mojom::ResultCode PrintBackendCupsIpp::GetDefaultPrinterName(
- std::string& default_printer) {
- std::vector<std::unique_ptr<CupsPrinter>> printers;
- if (!cups_connection_->GetDests(printers)) {
- LOG(ERROR) << "CUPS: unable to get default printer: "
- << cupsLastErrorString();
- return mojom::ResultCode::kFailed;
- }
- for (const auto& printer : printers) {
- if (printer->is_default()) {
- default_printer = printer->GetName();
- return mojom::ResultCode::kSuccess;
- }
- }
- default_printer = std::string();
- return mojom::ResultCode::kSuccess;
- }
- mojom::ResultCode PrintBackendCupsIpp::GetPrinterBasicInfo(
- const std::string& printer_name,
- PrinterBasicInfo* printer_info) {
- std::unique_ptr<CupsPrinter> printer(
- cups_connection_->GetPrinter(printer_name));
- if (!printer)
- return mojom::ResultCode::kFailed;
- DCHECK_EQ(printer_name, printer->GetName());
- return printer->ToPrinterInfo(printer_info) ? mojom::ResultCode::kSuccess
- : mojom::ResultCode::kFailed;
- }
- mojom::ResultCode PrintBackendCupsIpp::GetPrinterCapsAndDefaults(
- const std::string& printer_name,
- PrinterCapsAndDefaults* printer_info) {
- NOTREACHED();
- return mojom::ResultCode::kFailed;
- }
- mojom::ResultCode PrintBackendCupsIpp::GetPrinterSemanticCapsAndDefaults(
- const std::string& printer_name,
- PrinterSemanticCapsAndDefaults* printer_info) {
- std::unique_ptr<CupsPrinter> printer(
- cups_connection_->GetPrinter(printer_name));
- if (!printer || !printer->EnsureDestInfo())
- return mojom::ResultCode::kFailed;
- CapsAndDefaultsFromPrinter(*printer, printer_info);
- return mojom::ResultCode::kSuccess;
- }
- std::string PrintBackendCupsIpp::GetPrinterDriverInfo(
- const std::string& printer_name) {
- std::unique_ptr<CupsPrinter> printer(
- cups_connection_->GetPrinter(printer_name));
- if (!printer)
- return std::string();
- DCHECK_EQ(printer_name, printer->GetName());
- return printer->GetMakeAndModel();
- }
- bool PrintBackendCupsIpp::IsValidPrinter(const std::string& printer_name) {
- return !!cups_connection_->GetPrinter(printer_name);
- }
- } // namespace printing
|