Get printer strings

This commit is contained in:
Anton Thomasson 2022-01-14 22:14:06 +01:00
parent 6c4e48d69c
commit 0684e677ec
8 changed files with 70 additions and 17 deletions

View file

@ -11,14 +11,15 @@ Setting {
property int num_large_choices: 8 property int num_large_choices: 8
displayValue: Utils.ippName(name, choice != undefined ? choice : default_choice) displayValue: Utils.ippName(name, choice != undefined ? choice : default_choice, strings)
onClicked: { onClicked: {
if(actual_choices.length>num_large_choices) if(actual_choices.length>num_large_choices)
{ {
var dialog = pageStack.push("LargeChoiceDialog.qml", var dialog = pageStack.push("LargeChoiceDialog.qml",
{name:name, choice: choice != undefined ? choice : default_choice, choices: actual_choices, {name:name, choice: choice != undefined ? choice : default_choice, choices: actual_choices,
preferred_choices: preferred_choices, preferred_choice_suffix: preferred_choice_suffix}) preferred_choices: preferred_choices, preferred_choice_suffix: preferred_choice_suffix,
strings: strings})
dialog.accepted.connect(function() { dialog.accepted.connect(function() {
choice = dialog.choice choice = dialog.choice
}) })
@ -33,7 +34,7 @@ Setting {
Repeater { Repeater {
model: actual_choices.length>num_large_choices ? 0 : actual_choices model: actual_choices.length>num_large_choices ? 0 : actual_choices
MenuItem { MenuItem {
text: Utils.ippName(name, actual_choices[index]) text: Utils.ippName(name, actual_choices[index], strings)
+ (Utils.has(preferred_choices, actual_choices[index]) ? " "+preferred_choice_suffix : "") + (Utils.has(preferred_choices, actual_choices[index]) ? " "+preferred_choice_suffix : "")
onClicked: onClicked:
{ {

View file

@ -12,6 +12,7 @@ Dialog {
property var choices property var choices
property var preferred_choices property var preferred_choices
property string preferred_choice_suffix property string preferred_choice_suffix
property var strings
canAccept: false canAccept: false
SilicaListView SilicaListView
@ -30,7 +31,7 @@ Dialog {
x: Theme.paddingLarge x: Theme.paddingLarge
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
highlighted: choices[index]==new_choice highlighted: choices[index]==new_choice
text: Utils.ippName(name, choices[index]) text: Utils.ippName(name, choices[index], strings)
+ (Utils.has(preferred_choices, choices[index]) ? " "+preferred_choice_suffix : "") + (Utils.has(preferred_choices, choices[index]) ? " "+preferred_choice_suffix : "")
} }
} }

View file

@ -15,6 +15,8 @@ Item {
property var choice property var choice
property var default_choice: parent.getDefaultChoice(name) property var default_choice: parent.getDefaultChoice(name)
property var strings: parent.printer.strings
Component.onCompleted: parent.setInitialChoice(this) Component.onCompleted: parent.setInitialChoice(this)
onChoiceChanged: parent.choiceMade(this) onChoiceChanged: parent.choiceMade(this)

View file

@ -59,7 +59,7 @@ function has(arrayish, what)
return arrayish.indexOf(what) != -1; return arrayish.indexOf(what) != -1;
} }
function ippName(name, value) function ippName(name, value, strings)
{ {
if(value==undefined) if(value==undefined)
{ {
@ -143,6 +143,10 @@ function ippName(name, value)
{ {
return mediaType[value]; return mediaType[value];
} }
else if(strings != undefined && strings.hasOwnProperty("media-type."+value))
{
return strings["media-type."+value];
}
else else
{ {
return value; return value;

View file

@ -25,6 +25,9 @@ IppPrinter::IppPrinter()
connect(this, &IppPrinter::doConvertImage, _worker, &PrinterWorker::convertImage); connect(this, &IppPrinter::doConvertImage, _worker, &PrinterWorker::convertImage);
connect(this, &IppPrinter::doConvertOfficeDocument, _worker, &PrinterWorker::convertOfficeDocument); connect(this, &IppPrinter::doConvertOfficeDocument, _worker, &PrinterWorker::convertOfficeDocument);
connect(this, &IppPrinter::doConvertPlaintext, _worker, &PrinterWorker::convertPlaintext); connect(this, &IppPrinter::doConvertPlaintext, _worker, &PrinterWorker::convertPlaintext);
connect(this, &IppPrinter::doGetStrings, _worker, &PrinterWorker::getStrings);
connect(_worker, &PrinterWorker::progress, this, &IppPrinter::setProgress); connect(_worker, &PrinterWorker::progress, this, &IppPrinter::setProgress);
connect(_worker, &PrinterWorker::busyMessage, this, &IppPrinter::setBusyMessage); connect(_worker, &PrinterWorker::busyMessage, this, &IppPrinter::setBusyMessage);
connect(_worker, &PrinterWorker::failed, this, &IppPrinter::convertFailed); connect(_worker, &PrinterWorker::failed, this, &IppPrinter::convertFailed);
@ -90,12 +93,6 @@ void IppPrinter::onUrlChanged()
} }
void IppPrinter::refresh() { void IppPrinter::refresh() {
// _attrs = QJsonObject();
// emit attrsChanged();
// _additionalDocumentFormats = QStringList();
// emit additionalDocumentFormatsChanged();
if(_url.scheme() == "file") if(_url.scheme() == "file")
{ {
@ -113,6 +110,8 @@ void IppPrinter::refresh() {
Overrider::instance()->apply(_attrs); Overrider::instance()->apply(_attrs);
} }
emit attrsChanged(); emit attrsChanged();
MaybeGetStrings();
UpdateAdditionalDocumentFormats(); UpdateAdditionalDocumentFormats();
} }
else else
@ -124,6 +123,15 @@ void IppPrinter::refresh() {
} }
} }
void IppPrinter::MaybeGetStrings()
{
// TODO: resolve .local
if(_attrs.contains("printer-strings-uri") && _strings.empty())
{
emit doGetStrings(QUrl(_attrs["printer-strings-uri"].toObject()["value"].toString()));
}
}
void IppPrinter::UpdateAdditionalDocumentFormats() void IppPrinter::UpdateAdditionalDocumentFormats()
{ {
_additionalDocumentFormats = QStringList(); _additionalDocumentFormats = QStringList();
@ -175,6 +183,7 @@ void IppPrinter::getPrinterAttributesFinished(CURLcode res, Bytestream data)
emit attrsChanged(); emit attrsChanged();
MaybeGetStrings();
UpdateAdditionalDocumentFormats(); UpdateAdditionalDocumentFormats();
} }
@ -247,6 +256,25 @@ void IppPrinter::cancelJobFinished(CURLcode res, Bytestream data)
getJobs(); getJobs();
} }
void IppPrinter::getStringsFinished(CURLcode res, Bytestream data)
{
qDebug() << res << data.size();
if(res == CURLE_OK)
{
QByteArray ba((char*)data.raw(), data.size());
// "media-type.com.epson-coated" = "Epson Photo Quality Ink Jet";
QRegularExpression re("^\\\"(.*)\\\"\\s*=\\s*\\\"(.*)\\\";");
QList<QByteArray> bl = ba.split('\n');
foreach(QByteArray l, bl)
{
QRegularExpressionMatch match = re.match(l);
if(match.hasMatch())
{
_strings[match.captured(1)] = match.captured(2);
}
}
}
}
void IppPrinter::ignoreSslErrors(QNetworkReply *reply, const QList<QSslError> &errors) void IppPrinter::ignoreSslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
{ {

View file

@ -18,6 +18,7 @@ class IppPrinter : public QObject
Q_PROPERTY(QJsonObject attrs MEMBER _attrs NOTIFY attrsChanged) Q_PROPERTY(QJsonObject attrs MEMBER _attrs NOTIFY attrsChanged)
Q_PROPERTY(QJsonObject jobAttrs MEMBER _jobAttrs NOTIFY jobAttrsChanged) Q_PROPERTY(QJsonObject jobAttrs MEMBER _jobAttrs NOTIFY jobAttrsChanged)
Q_PROPERTY(QJsonArray jobs MEMBER _jobs NOTIFY jobsChanged) Q_PROPERTY(QJsonArray jobs MEMBER _jobs NOTIFY jobsChanged)
Q_PROPERTY(QJsonObject strings MEMBER _strings NOTIFY stringsChanged)
Q_PROPERTY(QStringList additionalDocumentFormats MEMBER _additionalDocumentFormats NOTIFY additionalDocumentFormatsChanged) Q_PROPERTY(QStringList additionalDocumentFormats MEMBER _additionalDocumentFormats NOTIFY additionalDocumentFormatsChanged)
Q_PROPERTY(QString busyMessage MEMBER _busyMessage NOTIFY busyMessageChanged) Q_PROPERTY(QString busyMessage MEMBER _busyMessage NOTIFY busyMessageChanged)
Q_PROPERTY(QString progress MEMBER _progress NOTIFY progressChanged) Q_PROPERTY(QString progress MEMBER _progress NOTIFY progressChanged)
@ -47,6 +48,8 @@ signals:
void jobAttrsChanged(); void jobAttrsChanged();
void jobsChanged(); void jobsChanged();
void stringsChanged();
void jobFinished(bool status); void jobFinished(bool status);
void cancelStatus(bool status); void cancelStatus(bool status);
@ -74,6 +77,8 @@ signals:
QString targetFormat, quint32 Colors, quint32 Quality, QString PaperSize, QString targetFormat, quint32 Colors, quint32 Quality, QString PaperSize,
quint32 HwResX, quint32 HwResY, bool TwoSided, bool Tumble, bool BackHFlip, bool BackVFlip); quint32 HwResX, quint32 HwResY, bool TwoSided, bool Tumble, bool BackHFlip, bool BackVFlip);
void doGetStrings(QUrl url);
void additionalDocumentFormatsChanged(); void additionalDocumentFormatsChanged();
void busyMessageChanged(); void busyMessageChanged();
void progressChanged(); void progressChanged();
@ -83,12 +88,15 @@ public slots:
void onUrlChanged(); void onUrlChanged();
void MaybeGetStrings();
void UpdateAdditionalDocumentFormats(); void UpdateAdditionalDocumentFormats();
void getPrinterAttributesFinished(CURLcode res, Bytestream data); void getPrinterAttributesFinished(CURLcode res, Bytestream data);
void printRequestFinished(CURLcode res, Bytestream data); void printRequestFinished(CURLcode res, Bytestream data);
void getJobsRequestFinished(CURLcode res, Bytestream data); void getJobsRequestFinished(CURLcode res, Bytestream data);
void cancelJobFinished(CURLcode res, Bytestream data); void cancelJobFinished(CURLcode res, Bytestream data);
void getStringsFinished(CURLcode res, Bytestream data);
static void ignoreSslErrors(QNetworkReply *reply, const QList<QSslError> &errors); static void ignoreSslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
void convertFailed(QString message); void convertFailed(QString message);
@ -113,6 +121,8 @@ private:
QJsonObject _jobAttrs; QJsonObject _jobAttrs;
QJsonArray _jobs; QJsonArray _jobs;
QJsonObject _strings;
QStringList _additionalDocumentFormats; QStringList _additionalDocumentFormats;
QString _busyMessage; QString _busyMessage;

View file

@ -20,24 +20,30 @@ PrinterWorker::PrinterWorker(IppPrinter* parent)
_printer = parent; _printer = parent;
} }
void PrinterWorker::getStrings(QUrl url)
{
CurlRequester cr(url, CurlRequester::HttpGetRequest);
connect(&cr, &CurlRequester::done, _printer, &IppPrinter::getStringsFinished);
}
void PrinterWorker::getPrinterAttributes(Bytestream msg) void PrinterWorker::getPrinterAttributes(Bytestream msg)
{ {
CurlRequester cr(_printer->httpUrl()); CurlRequester cr(_printer->httpUrl());
cr.setFinishedCallback(_printer, &IppPrinter::getPrinterAttributesFinished); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::getPrinterAttributesFinished);
cr.write((char*)msg.raw(), msg.size()); cr.write((char*)msg.raw(), msg.size());
} }
void PrinterWorker::getJobs(Bytestream msg) void PrinterWorker::getJobs(Bytestream msg)
{ {
CurlRequester cr(_printer->httpUrl()); CurlRequester cr(_printer->httpUrl());
cr.setFinishedCallback(_printer, &IppPrinter::getJobsRequestFinished); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::getJobsRequestFinished);
cr.write((char*)msg.raw(), msg.size()); cr.write((char*)msg.raw(), msg.size());
} }
void PrinterWorker::cancelJob(Bytestream msg) void PrinterWorker::cancelJob(Bytestream msg)
{ {
CurlRequester cr(_printer->httpUrl()); CurlRequester cr(_printer->httpUrl());
cr.setFinishedCallback(_printer, &IppPrinter::cancelJobFinished); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::cancelJobFinished);
cr.write((char*)msg.raw(), msg.size()); cr.write((char*)msg.raw(), msg.size());
} }
@ -47,7 +53,7 @@ try {
emit busyMessage(tr("Printing")); emit busyMessage(tr("Printing"));
CurlRequester cr(_printer->httpUrl()); CurlRequester cr(_printer->httpUrl());
cr.setFinishedCallback(_printer, &IppPrinter::printRequestFinished); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::printRequestFinished);
QFile file(filename); QFile file(filename);
file.open(QFile::ReadOnly); file.open(QFile::ReadOnly);
@ -100,7 +106,7 @@ try {
} }
CurlRequester cr(_printer->httpUrl()); CurlRequester cr(_printer->httpUrl());
cr.setFinishedCallback(_printer, &IppPrinter::printRequestFinished); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::printRequestFinished);
OK(cr.write((char*)header.raw(), header.size())); OK(cr.write((char*)header.raw(), header.size()));
@ -287,7 +293,7 @@ try {
} }
CurlRequester cr(_printer->httpUrl()); CurlRequester cr(_printer->httpUrl());
cr.setFinishedCallback(_printer, &IppPrinter::printRequestFinished); connect(&cr, &CurlRequester::done, _printer, &IppPrinter::printRequestFinished);
OK(cr.write((char*)header.raw(), header.size())); OK(cr.write((char*)header.raw(), header.size()));
OK(cr.write((char*)(outBts.raw()), outBts.size())); OK(cr.write((char*)(outBts.raw()), outBts.size()));

View file

@ -31,6 +31,7 @@ private:
PrinterWorker(); PrinterWorker();
public slots: public slots:
void getStrings(QUrl url);
void getPrinterAttributes(Bytestream msg); void getPrinterAttributes(Bytestream msg);
void getJobs(Bytestream msg); void getJobs(Bytestream msg);
void cancelJob(Bytestream msg); void cancelJob(Bytestream msg);