bool KMLpdManager::createPrinttoolEntry(KMPrinter *printer, PrintcapEntry *entry) { KURL dev(printer->device()); QString prot = dev.protocol(), sd(entry->arg("sd")); entry->m_comment = QString::fromLatin1("##PRINTTOOL3## %1").arg(ptPrinterType(printer)); if (prot == "smb" || prot == "ncp" || prot == "socket") { entry->m_args["af"] = sd+QString::fromLatin1("/acct"); QFile f(sd+QString::fromLatin1("/.config")); if (f.open(IO_WriteOnly)) { QTextStream t(&f); if (prot == "socket") { t << "printer_ip=" << dev.host() << endl; t << "port=" << dev.port() << endl; entry->m_args["if"] = driverDirectory()+QString::fromLatin1("/directprint"); } else if (prot == "smb") { QStringList l = QStringList::split('/',dev.path(),false); if (l.count() == 2) { t << "share='\\\\" << l[0] << '\\' << l[1] << '\'' << endl; } else if (l.count() == 1) { t << "share='\\\\" << dev.host() << '\\' << l[0] << '\'' << endl; } t << "hostip=" << endl; t << "user='******'\'' << endl; t << "password='******'\'' << endl; t << "workgroup='" << (l.count() == 2 ? dev.host() : QString::fromLatin1("")) << '\'' << endl; entry->m_args["if"] = driverDirectory()+QString::fromLatin1("/smbprint"); } else if (prot == "ncp") { t << "server=" << dev.host() << endl; t << "queue=" << dev.path().replace("/",QString::fromLatin1("")) << endl; t << "user="******"password="******"if"] = driverDirectory()+QString::fromLatin1("/ncpprint"); } } else return false; entry->m_args["lp"] = QString::fromLatin1("/dev/null"); } else if (prot != "lpd") entry->m_args["lp"] = dev.path(); return true; }
PrinttoolEntry* KMLpdManager::findPrinttoolEntry(const QString& name) { if (m_ptentries.count() == 0) loadPrinttoolDb(driverDirectory()+"/printerdb"); PrinttoolEntry *ent = m_ptentries.find(name); if (!ent) setErrorMsg(i18n("Couldn't find driver <b>%1</b> in printtool database.").arg(name)); return ent; }
bool KMLpdManager::savePrinterDriver(KMPrinter *printer, DrMain *driver) { // To be able to save a printer driver, a printcap entry MUST exist. // We can then retrieve the spool directory from it. QString spooldir; PrintcapEntry *ent = findPrintcapEntry(printer->printerName()); if (!ent) return false; spooldir = ent->arg("sd"); if (driver->get("drtype") == "printtool" && !spooldir.isEmpty()) { QMap<QString,QString> options; driver->getOptions(options,true); // add some standard options options["DESIRED_TO"] = "ps"; options["PRINTER_TYPE"] = ent->comment(2); // get type from printcap entry (works in anycases) options["PS_SEND_EOF"] = "NO"; if (!checkGsDriver(options["GSDEVICE"])) return false; QString resol(options["RESOLUTION"]), color(options["COLOR"]); // update entry comment to make printtool happy and save printcap file ent->m_comment = QString::fromLatin1("##PRINTTOOL3## %1 %2 %3 %4 {} {%5} %6 {}").arg(options["PRINTER_TYPE"]).arg(options["GSDEVICE"]).arg((resol.isEmpty() ? QString::fromLatin1("NAxNA") : resol)).arg(options["PAPERSIZE"]).arg(driver->name()).arg((color.isEmpty() ? QString::fromLatin1("Default") : color.right(color.length()-15))); ent->m_args["if"] = spooldir+QString::fromLatin1("/filter"); if (!writePrinters()) return false; // write various driver files using templates QCString cmd = "cp "; cmd += QFile::encodeName(KProcess::quote(driverDirectory()+"/master-filter")); cmd += " "; cmd += QFile::encodeName(KProcess::quote(spooldir + "/filter")); if (system(cmd.data()) == 0 && savePrinttoolCfgFile(driverDirectory()+"/general.cfg.in",spooldir,options) && savePrinttoolCfgFile(driverDirectory()+"/postscript.cfg.in",spooldir,options) && savePrinttoolCfgFile(driverDirectory()+"/textonly.cfg.in",spooldir,options)) return true; setErrorMsg(i18n("Unable to write driver associated files in spool directory.")); } return false; }
DrMain* KMLpdManager::loadDbDriver(KMDBEntry *entry) { QString ptdbfilename = driverDirectory() + "/printerdb"; if (entry->file == ptdbfilename) { PrinttoolEntry *ptentry = findPrinttoolEntry(entry->modelname); if (ptentry) { DrMain *dr = ptentry->createDriver(); return dr; } } return NULL; }
QString LPRngToolHandler::filterDir() { return driverDirectory(); }
TQString ApsHandler::shareDir() { return driverDirectory(); }