Add experimental printer attribute override

This commit is contained in:
Anton Thomasson 2021-05-25 19:37:49 +02:00
parent a41fbe067f
commit 15a13d9648
4 changed files with 92 additions and 0 deletions

View file

@ -44,6 +44,7 @@ SOURCES += src/harbour-seaprint.cpp \
src/mimer.cpp \ src/mimer.cpp \
ppm2pwg/ppm2pwg.cpp \ ppm2pwg/ppm2pwg.cpp \
ppm2pwg/bytestream/bytestream.cpp \ ppm2pwg/bytestream/bytestream.cpp \
src/overrider.cpp \
src/svgprovider.cpp src/svgprovider.cpp
DISTFILES += qml/harbour-seaprint.qml \ DISTFILES += qml/harbour-seaprint.qml \
@ -90,6 +91,7 @@ HEADERS += \
ppm2pwg/UrfPgHdr.codable \ ppm2pwg/UrfPgHdr.codable \
ppm2pwg/bytestream/bytestream.h \ ppm2pwg/bytestream/bytestream.h \
ppm2pwg/bytestream/codable.h \ ppm2pwg/bytestream/codable.h \
src/overrider.h \
src/papersizes.h \ src/papersizes.h \
src/svgprovider.h src/svgprovider.h

View file

@ -2,6 +2,7 @@
#include <seaprint_version.h> #include <seaprint_version.h>
#include "mimer.h" #include "mimer.h"
#include "papersizes.h" #include "papersizes.h"
#include "overrider.h"
IppPrinter::IppPrinter() IppPrinter::IppPrinter()
{ {
@ -114,6 +115,7 @@ void IppPrinter::refresh() {
// These won't load anyway...r // These won't load anyway...r
_attrs.remove("printer-icons"); _attrs.remove("printer-icons");
file.close(); file.close();
Overrider::instance()->apply(_attrs);
} }
emit attrsChanged(); emit attrsChanged();
UpdateAdditionalDocumentFormats(); UpdateAdditionalDocumentFormats();
@ -168,6 +170,8 @@ void IppPrinter::getPrinterAttributesFinished(QNetworkReply *reply)
IppMsg resp(reply); IppMsg resp(reply);
qDebug() << resp.getStatus() << resp.getOpAttrs() << resp.getPrinterAttrs(); qDebug() << resp.getStatus() << resp.getOpAttrs() << resp.getPrinterAttrs();
_attrs = resp.getPrinterAttrs(); _attrs = resp.getPrinterAttrs();
Overrider::instance()->apply(_attrs);
} }
catch(const std::exception& e) catch(const std::exception& e)
{ {

62
src/overrider.cpp Normal file
View file

@ -0,0 +1,62 @@
#include "overrider.h"
#include <QMutex>
#include <QStandardPaths>
#include <QtDebug>
Overrider::Overrider()
{
// QFile file(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation)+"/overrides");
QFile file(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)+"/.seaprint_overrides");
qDebug() << "AAAAAAAAAAAAAAA" << file.fileName();
if(file.open(QIODevice::ReadOnly))
{
QJsonDocument JsonDocument = QJsonDocument::fromJson(file.readAll());
_overrides = JsonDocument.object();
qDebug() << "overides loaded" << _overrides;
file.close();
}
}
Overrider::~Overrider() {
}
Overrider* Overrider::m_Instance = nullptr;
Overrider* Overrider::instance()
{
static QMutex mutex;
if (!m_Instance)
{
mutex.lock();
if (!m_Instance)
m_Instance = new Overrider();
mutex.unlock();
}
return m_Instance;
}
bool Overrider::apply(QJsonObject& attrs)
{
bool applied = false;
foreach(const QString& key, _overrides.keys())
{
if(attrs.contains(key))
{
QString match = attrs[key].toObject()["value"].toString();
if(match != "" && _overrides[key].toObject().contains(match))
{
QJsonObject overrideden_data = _overrides[key].toObject()[match].toObject();
foreach(const QString& o_key, overrideden_data.keys())
{
attrs.insert(o_key, overrideden_data[o_key]);
}
applied=true;
}
}
}
return applied;
}

24
src/overrider.h Normal file
View file

@ -0,0 +1,24 @@
#ifndef OVERRIDER_H
#define OVERRIDER_H
#include <QJsonDocument>
#include <QJsonObject>
#include <QFile>
class Overrider
{
public:
static Overrider* instance();
bool apply(QJsonObject& attrs);
private:
Overrider();
~Overrider();
Overrider(const Overrider &);
Overrider& operator=(const Overrider &);
static Overrider* m_Instance;
QJsonObject _overrides;
};
#endif // OVERRIDER_H