Fix multiple lines and printer selection

This commit is contained in:
2025-10-13 20:35:58 +02:00
parent 69810e1c5c
commit 81b0f25f32
2 changed files with 20 additions and 20 deletions

View File

@@ -97,7 +97,7 @@ void PtouchPrint::setupLogger() {
bool PtouchPrint::handleListDrivers() {
auto driverFactory = std::make_unique<PrinterDriverFactory>();
auto drivers = driverFactory->listAllDrivers();
auto drivers = driverFactory->listAllDrivers();
fmt::print("Available printer drivers:\n");
for (const auto& driver : drivers) {
@@ -133,7 +133,7 @@ bool PtouchPrint::handlePrinting() {
for (const auto& [cmdType, value] : options.commands) {
switch (cmdType) {
case cli::CommandType::Text:
labelBuilder.addText(value + "\n");
labelBuilder.addText(value);
break;
case cli::CommandType::Font:
spdlog::debug("Setting font to {}", value);

View File

@@ -54,6 +54,20 @@ std::vector<std::shared_ptr<IPrinterDriver>> PrinterService::detectPrinters() {
}
std::shared_ptr<IPrinterDriver> PrinterService::selectPrinter(const std::string& printerName) {
// If a specific printer is requested by name (not "auto"), try to create it directly
if (printerName != "auto") {
auto driverFactory = std::make_unique<PrinterDriverFactory>();
auto printer = driverFactory->createByName(printerName);
if (printer) {
mCurrentPrinter = printer;
spdlog::info("Using explicitly selected printer: {}", printerName);
return mCurrentPrinter;
}
spdlog::error("Printer driver '{}' not found", printerName);
return nullptr;
}
// Auto mode: detect USB printers
if (mDetectedPrinters.empty()) {
detectPrinters();
}
@@ -63,24 +77,10 @@ std::shared_ptr<IPrinterDriver> PrinterService::selectPrinter(const std::string&
return nullptr;
}
// Auto-select first printer
if (printerName == "auto") {
mCurrentPrinter = mDetectedPrinters.front();
spdlog::info("Auto-selected printer: {}", mCurrentPrinter->getName());
return mCurrentPrinter;
}
// Select printer by name
for (auto& printer : mDetectedPrinters) {
if (printer->getDriverName() == printerName) {
mCurrentPrinter = printer;
spdlog::info("Using explicitly selected printer: {}", printerName);
return mCurrentPrinter;
}
}
spdlog::error("Printer '{}' not found", printerName);
return nullptr;
// Auto-select first detected printer
mCurrentPrinter = mDetectedPrinters.front();
spdlog::info("Auto-selected printer: {}", mCurrentPrinter->getName());
return mCurrentPrinter;
}
bool PrinterService::printLabel(std::unique_ptr<graphics::ILabel> label) {