KMWFax::KMWFax(QWidget *parent, const char *name) : KMWizardPage(parent,name) { m_ID = KMWizard::Custom+2; m_title = i18n("Fax Serial Device"); m_nextpage = KMWizard::Driver; QLabel *lab = new QLabel(this); lab->setText(i18n("<p>Select the device which your serial Fax/Modem is connected to.</p>")); m_list = new KListBox(this); QVBoxLayout *l1 = new QVBoxLayout(this,0,10); l1->addWidget(lab,0); l1->addWidget(m_list,1); // initialize IppRequest req; req.setOperation(CUPS_GET_DEVICES); QString uri = QString::fromLatin1("ipp://%1/printers/").arg(CupsInfos::self()->hostaddr()); req.addURI(IPP_TAG_OPERATION,"printer-uri",uri); if (req.doRequest("/")) { ipp_attribute_t *attr = req.first(); while (attr) { if (attr->name && strcmp(attr->name,"device-uri") == 0 && strncmp(attr->values[0].string.text,"fax",3) == 0) { m_list->insertItem(SmallIcon("blockdevice"),QString::fromLatin1(attr->values[0].string.text)); } attr = attr->next; } } }
bool KMCupsJobManager::changePriority(const QPtrList<KMJob>& jobs, bool up) { QPtrListIterator<KMJob> it(jobs); bool result(true); for (; it.current() && result; ++it) { int value = it.current()->attribute(0).toInt(); if (up) value = QMIN(value+10, 100); else value = QMAX(value-10, 1); IppRequest req; /* if (!it.current()->uri().isEmpty()) { KURL url(it.current()->uri()); req.setHost(url.host()); req.setPort(url.port()); } */ req.setOperation(IPP_SET_JOB_ATTRIBUTES); req.addURI(IPP_TAG_OPERATION, "job-uri", it.current()->uri()); req.addName(IPP_TAG_OPERATION, "requesting-user-name", CupsInfos::self()->login()); req.addInteger(IPP_TAG_JOB, "job-priority", value); if (!(result = req.doRequest("/jobs/"))) KMManager::self()->setErrorMsg(i18n("Unable to change job priority: ")+req.statusMessage()); } return result; }
bool KMCupsJobManager::sendCommandSystemJob(const QPtrList<KMJob>& jobs, int action, const QString& argstr) { IppRequest req; QString uri; bool value(true); QPtrListIterator<KMJob> it(jobs); for (;it.current() && value;++it) { // hypothesis: job operation are always done on local jobs. The only operation // allowed on remote jobs is listing (done elsewhere). req.addURI(IPP_TAG_OPERATION,"job-uri",it.current()->uri()); req.addName(IPP_TAG_OPERATION,"requesting-user-name",CupsInfos::self()->login()); /* QString jobHost; if (!it.current()->uri().isEmpty()) { KURL url(it.current()->uri()); req.setHost(url.host()); req.setPort(url.port()); jobHost = url.host(); } */ switch (action) { case KMJob::Remove: req.setOperation(IPP_CANCEL_JOB); break; case KMJob::Hold: req.setOperation(IPP_HOLD_JOB); break; case KMJob::Resume: req.setOperation(IPP_RELEASE_JOB); break; case KMJob::Restart: req.setOperation(IPP_RESTART_JOB); break; case KMJob::Move: if (argstr.isEmpty()) return false; req.setOperation(CUPS_MOVE_JOB); uri = QString::fromLatin1("ipp://%1/printers/%2").arg(CupsInfos::self()->hostaddr(), argstr); req.addURI(IPP_TAG_OPERATION, "job-printer-uri", uri); break; default: return false; } if (!(value = req.doRequest("/jobs/"))) KMManager::self()->setErrorMsg(req.statusMessage()); } return value; }
bool KMCupsJobManager::listJobs(const QString& prname, KMJobManager::JobType type, int limit) { IppRequest req; QStringList keys; CupsInfos *infos = CupsInfos::self(); // wanted attributes keys.append("job-id"); keys.append("job-uri"); keys.append("job-name"); keys.append("job-state"); keys.append("job-printer-uri"); keys.append("job-k-octets"); keys.append("job-originating-user-name"); keys.append("job-k-octets-completed"); keys.append("job-media-sheets"); keys.append("job-media-sheets-completed"); keys.append("job-priority"); keys.append("job-billing"); req.setOperation(IPP_GET_JOBS); // add printer-uri KMPrinter *mp = KMManager::self()->findPrinter(prname); if (!mp) return false; if (!mp->uri().isEmpty()) { req.addURI(IPP_TAG_OPERATION, "printer-uri", mp->uri().prettyURL()); /* req.setHost(mp->uri().host()); req.setPort(mp->uri().port()); */ } else req.addURI(IPP_TAG_OPERATION, "printer-uri", QString("ipp://%1/%2/%3").arg(infos->hostaddr(), (mp&&mp->isClass())?"classes":"printers", prname)); // other attributes req.addKeyword(IPP_TAG_OPERATION, "requested-attributes", keys); if (type == KMJobManager::CompletedJobs) req.addKeyword(IPP_TAG_OPERATION,"which-jobs",QString::fromLatin1("completed")); if (limit > 0) req.addInteger(IPP_TAG_OPERATION,"limit",limit); // send request if (req.doRequest("/")) parseListAnswer(req, mp); else return false; return true; }
void KMWIppSelect::initPrinter(KMPrinter *p) { // storage variables QString host, login, password; int port; // save config host = CupsInfos::self()->host(); login = CupsInfos::self()->login(); password = CupsInfos::self()->password(); port = CupsInfos::self()->port(); m_list->clear(); // retrieve printer list KURL url = p->device(); CupsInfos::self()->setHost(url.host()); CupsInfos::self()->setLogin(url.user()); CupsInfos::self()->setPassword(url.pass()); CupsInfos::self()->setPort(url.port()); IppRequest req; QString uri; req.setOperation(CUPS_GET_PRINTERS); uri = QString::fromLatin1("ipp://%1/printers/").arg(CupsInfos::self()->hostaddr()); req.addURI(IPP_TAG_OPERATION,"printer-uri",uri); req.addKeyword(IPP_TAG_OPERATION,"requested-attributes",QString::fromLatin1("printer-name")); if (req.doRequest("/printers/")) { ipp_attribute_t *attr = req.first(); while (attr) { if (attr->name && strcmp(attr->name,"printer-name") == 0) m_list->insertItem(SmallIcon("kdeprint_printer"),QString::fromLatin1(attr->values[0].string.text)); attr = attr->next; } m_list->sort(); } // restore config CupsInfos::self()->setHost(host); CupsInfos::self()->setLogin(login); CupsInfos::self()->setPassword(password); CupsInfos::self()->setPort(port); }
bool KMCupsJobManager::jobIppReport(KMJob *j) { IppRequest req; req.setOperation(IPP_GET_JOB_ATTRIBUTES); req.addURI(IPP_TAG_OPERATION, "job-uri", j->uri()); bool result(true); /* if (!j->uri().isEmpty()) { KURL url(j->uri()); req.setHost(url.host()); req.setPort(url.port()); } */ if ((result=req.doRequest("/"))) static_cast<KMCupsManager*>(KMManager::self())->ippReport(req, IPP_TAG_JOB, i18n("Job Report")); else KMManager::self()->setErrorMsg(i18n("Unable to retrieve job information: ")+req.statusMessage()); return result; }
bool KMCupsJobManager::editJobAttributes(KMJob *j) { IppRequest req; req.setOperation(IPP_GET_JOB_ATTRIBUTES); req.addURI(IPP_TAG_OPERATION, "job-uri", j->uri()); /* if (!j->uri().isEmpty()) { KURL url(j->uri()); req.setHost(url.host()); req.setPort(url.port()); } */ if (!req.doRequest("/")) { KMManager::self()->setErrorMsg(i18n("Unable to retrieve job information: ")+req.statusMessage()); return false; } QMap<QString,QString> opts = req.toMap(IPP_TAG_JOB); // translate the "Copies" option to non-CUPS syntax if (opts.contains("copies")) opts["kde-copies"] = opts["copies"]; if (opts.contains("page-set")) opts["kde-pageset"] = (opts["page-set"] == "even" ? "2" : (opts["page-set"] == "odd" ? "1" : "0")); if (opts.contains("OutputOrder")) opts["kde-pageorder"] = opts["OutputOrder"]; if (opts.contains("multiple-document-handling")) opts["kde-collate"] = (opts["multiple-document-handling"] == "separate-documents-collated-copies" ? "Collate" : "Uncollate"); if (opts.contains("page-ranges")) opts["kde-range"] = opts["page-ranges"]; // find printer and construct dialog KMPrinter *prt = KMManager::self()->findPrinter(j->printer()); if (!prt) { KMManager::self()->setErrorMsg(i18n("Unable to find printer %1.").arg(j->printer())); return false; } KMManager::self()->completePrinterShort(prt); KPrinter::ApplicationType oldAppType = KPrinter::applicationType(); KPrinter::setApplicationType(KPrinter::StandAlone); KPrinterPropertyDialog dlg(prt); dlg.setDriver(KMManager::self()->loadPrinterDriver(prt)); KMFactory::self()->uiManager()->setupPrinterPropertyDialog(&dlg); KPrinter::setApplicationType( oldAppType ); if (dlg.driver()) dlg.addPage(new KPDriverPage(prt, dlg.driver(), &dlg)); dlg.addPage(new KPCopiesPage(0, &dlg)); dlg.addPage(new KPSchedulePage(&dlg)); dlg.addPage(new KPTagsPage(true, &dlg)); dlg.setOptions(opts); dlg.enableSaveButton(false); dlg.setCaption(i18n("Attributes of Job %1@%2 (%3)").arg(j->id()).arg(j->printer()).arg(j->name())); if (dlg.exec()) { opts.clear(); // include default values to override non-default values dlg.getOptions(opts, true); // translate the "Copies" options from non-CUPS syntax opts["copies"] = opts["kde-copies"]; opts["OutputOrder"] = opts["kde-pageorder"]; opts["multiple-document-handling"] = (opts["kde-collate"] == "Collate" ? "separate-documents-collated-copies" : "separate-documents-uncollated-copies"); opts["page-set"] = (opts["kde-pageset"] == "1" ? "odd" : (opts["kde-pageset"] == "2" ? "even" : "all")); // it seems CUPS is buggy. Disable page-ranges modification, otherwise nothing gets printed opts["page-ranges"] = processRange(opts["kde-range"]); req.init(); req.setOperation(IPP_SET_JOB_ATTRIBUTES); req.addURI(IPP_TAG_OPERATION, "job-uri", j->uri()); req.addName(IPP_TAG_OPERATION, "requesting-user-name", CupsInfos::self()->login()); req.setMap(opts); //req.dump(1); if (!req.doRequest("/jobs/")) { KMManager::self()->setErrorMsg(i18n("Unable to set job attributes: ")+req.statusMessage()); return false; } } return true; }