CUPS: Use printer job-hold-until as default instead of the nohold

This also reads the job-hold-until from lpoptions if set there for the particular printer

Change-Id: Ic60fef675ab9f4760cd99ee9ac417b0478459681
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This commit is contained in:
Albert Astals Cid 2017-12-06 13:00:30 +01:00
parent 2831fa7665
commit 414a703036
4 changed files with 54 additions and 7 deletions

View File

@ -433,6 +433,8 @@ QVariant QPpdPrintDevice::property(QPrintDevice::PrintDevicePropertyKey key) con
return printerOption(QStringLiteral("job-sheets"));
else if (key == PDPK_CupsJobBilling)
return printerOption(QStringLiteral("job-billing"));
else if (key == PDPK_CupsJobHoldUntil)
return printerOption(QStringLiteral("job-hold-until"));
return QVariant();
}

View File

@ -107,6 +107,37 @@ static inline QString jobHoldToString(const QCUPSSupport::JobHoldUntil jobHold,
return QString();
}
QCUPSSupport::JobHoldUntilWithTime QCUPSSupport::parseJobHoldUntil(const QString &jobHoldUntil)
{
if (jobHoldUntil == QLatin1String("indefinite")) {
return { QCUPSSupport::Indefinite, QTime() };
} else if (jobHoldUntil == QLatin1String("day-time")) {
return { QCUPSSupport::DayTime, QTime() };
} else if (jobHoldUntil == QLatin1String("night")) {
return { QCUPSSupport::Night, QTime() };
} else if (jobHoldUntil == QLatin1String("second-shift")) {
return { QCUPSSupport::SecondShift, QTime() };
} else if (jobHoldUntil == QLatin1String("third-shift")) {
return { QCUPSSupport::ThirdShift, QTime() };
} else if (jobHoldUntil == QLatin1String("weekend")) {
return { QCUPSSupport::Weekend, QTime() };
}
QTime parsedTime = QTime::fromString(jobHoldUntil, QStringLiteral("h:m:s"));
if (!parsedTime.isValid())
parsedTime = QTime::fromString(jobHoldUntil, QStringLiteral("h:m"));
if (parsedTime.isValid()) {
// CUPS time is in UTC, user expects local time, so get the equivalent
QDateTime dateTimeUtc = QDateTime::currentDateTimeUtc();
dateTimeUtc.setTime(parsedTime);
return { QCUPSSupport::SpecificTime, dateTimeUtc.toLocalTime().time() };
}
return { QCUPSSupport::NoHold, QTime() };
}
void QCUPSSupport::setJobHold(QPrinter *printer, const JobHoldUntil jobHold, const QTime &holdUntilTime)
{
QStringList cupsOptions = cupsOptionsList(printer);

View File

@ -67,11 +67,12 @@ QT_BEGIN_NAMESPACE
// removed from the dialogs.
#define PPK_CupsOptions QPrintEngine::PrintEnginePropertyKey(0xfe00)
#define PDPK_PpdFile QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase)
#define PDPK_PpdOption QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 1)
#define PDPK_CupsJobPriority QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 2)
#define PDPK_CupsJobSheets QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 3)
#define PDPK_CupsJobBilling QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 4)
#define PDPK_PpdFile QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase)
#define PDPK_PpdOption QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 1)
#define PDPK_CupsJobPriority QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 2)
#define PDPK_CupsJobSheets QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 3)
#define PDPK_CupsJobBilling QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 4)
#define PDPK_CupsJobHoldUntil QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 5)
class Q_PRINTSUPPORT_EXPORT QCUPSSupport
{
@ -148,6 +149,13 @@ public:
BannerPage endBannerPage = QCUPSSupport::NoBanner;
};
static JobSheets parseJobSheets(const QString &jobSheets);
struct JobHoldUntilWithTime
{
JobHoldUntil jobHold;
QTime time;
};
static JobHoldUntilWithTime parseJobHoldUntil(const QString &jobHoldUntil);
};
Q_DECLARE_TYPEINFO(QCUPSSupport::JobHoldUntil, Q_PRIMITIVE_TYPE);
Q_DECLARE_TYPEINFO(QCUPSSupport::BannerPage, Q_PRIMITIVE_TYPE);

View File

@ -73,7 +73,6 @@ QCupsJobWidget::QCupsJobWidget(QPrinter *printer, QPrintDevice *printDevice, QWi
{
m_ui.setupUi(this);
//set all the default values
//TODO restore last used values
initJobHold();
initJobBilling();
initJobPriority();
@ -105,7 +104,14 @@ void QCupsJobWidget::initJobHold()
connect(m_ui.jobHoldComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(toggleJobHoldTime()));
setJobHold(QCUPSSupport::NoHold, QTime());
QCUPSSupport::JobHoldUntilWithTime jobHoldWithTime;
if (m_printDevice) {
const QString jobHoldUntilString = m_printDevice->property(PDPK_CupsJobHoldUntil).toString();
jobHoldWithTime = QCUPSSupport::parseJobHoldUntil(jobHoldUntilString);
}
setJobHold(jobHoldWithTime.jobHold, jobHoldWithTime.time);
toggleJobHoldTime();
}