diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml
index fc562d5..517b420 100644
--- a/qml/cover/CoverPage.qml
+++ b/qml/cover/CoverPage.qml
@@ -5,18 +5,6 @@ CoverBackground {
Label {
id: label
anchors.centerIn: parent
- text: qsTr("My Cover")
- }
-
- CoverActionList {
- id: coverAction
-
- CoverAction {
- iconSource: "image://theme/icon-cover-next"
- }
-
- CoverAction {
- iconSource: "image://theme/icon-cover-pause"
- }
+ text: qsTr("Seaprint")
}
}
diff --git a/qml/pages/JobsPage.qml b/qml/pages/JobsPage.qml
index 7a39cf5..27da94d 100644
--- a/qml/pages/JobsPage.qml
+++ b/qml/pages/JobsPage.qml
@@ -19,12 +19,12 @@ Page {
// PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
PullDownMenu {
- MenuItem {
- text: qsTr("Remove all")
- onClicked: {
- console.log("todo")
- }
- }
+// MenuItem {
+// text: qsTr("Remove all")
+// onClicked: {
+// console.log("todo")
+// }
+// }
MenuItem {
text: qsTr("Refresh")
onClicked: {
@@ -47,13 +47,37 @@ Page {
}
delegate: ListItem {
+ id: jobDelegate
Label {
+ id: idLabel
leftPadding: Theme.horizontalPageMargin
anchors.verticalCenter: parent.verticalCenter
text: printer.jobs[index]["job-id"].value
Component.onCompleted: console.log(JSON.stringify(printer.jobs))
}
+
+ Label {
+ anchors.left: idLabel.right
+ anchors.leftMargin: Theme.horizontalPageMargin
+ anchors.verticalCenter: parent.verticalCenter
+ text: printer.jobs[index]["job-name"] ? printer.jobs[index]["job-name"].value : qsTr("Untitled job")
+ Component.onCompleted: console.log(JSON.stringify(printer.jobs))
+ }
+
+ RemorseItem {
+ id: cancelRemorse
+ }
+
+ menu: ContextMenu {
+ MenuItem {
+ text: qsTr("Cancel job")
+ onClicked: {
+ cancelRemorse.execute(jobDelegate, qsTr("Cancelling job"),
+ function() {printer.cancelJob(printer.jobs[index]["job-id"].value) })
+ }
+ }
+ }
}
}
diff --git a/src/ippprinter.cpp b/src/ippprinter.cpp
index 27f4c36..8245b88 100644
--- a/src/ippprinter.cpp
+++ b/src/ippprinter.cpp
@@ -5,9 +5,12 @@ IppPrinter::IppPrinter()
_nam = new QNetworkAccessManager(this);
_print_nam = new QNetworkAccessManager(this);
_jobs_nam = new QNetworkAccessManager(this);
+ _job_cancel_nam = new QNetworkAccessManager(this);
+
connect(_nam, SIGNAL(finished(QNetworkReply*)),this, SLOT(getPrinterAttributesFinished(QNetworkReply*)));
connect(_print_nam, SIGNAL(finished(QNetworkReply*)),this, SLOT(printRequestFinished(QNetworkReply*)));
connect(_jobs_nam, SIGNAL(finished(QNetworkReply*)),this, SLOT(getJobsRequestFinished(QNetworkReply*)));
+ connect(_job_cancel_nam, SIGNAL(finished(QNetworkReply*)),this, SLOT(cancelJobFinished(QNetworkReply*)));
QObject::connect(this, &IppPrinter::urlChanged, this, &IppPrinter::onUrlChanged);
}
@@ -15,6 +18,18 @@ IppPrinter::~IppPrinter() {
delete _nam;
delete _print_nam;
delete _jobs_nam;
+ delete _job_cancel_nam;
+}
+
+QJsonObject IppPrinter::opAttrs() {
+ QJsonObject o
+ {
+ {"attributes-charset", QJsonObject {{"tag", IppMsg::Charset}, {"value", "utf-8"}}},
+ {"attributes-natural-language", QJsonObject {{"tag", IppMsg::NaturalLanguage}, {"value", "en-us"}}},
+ {"printer-uri", QJsonObject {{"tag", IppMsg::Uri}, {"value", "ipp://"+_url}}},
+ {"requesting-user-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", "nemo"}}},
+ };
+ return o;
}
void IppPrinter::setUrl(QString url)
@@ -41,13 +56,7 @@ void IppPrinter::onUrlChanged()
// request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/ipp");
- QJsonObject o
- {
- {"attributes-charset", QJsonObject {{"tag", IppMsg::Charset}, {"value", "utf-8"}}},
- {"attributes-natural-language", QJsonObject {{"tag", IppMsg::NaturalLanguage}, {"value", "en-us"}}},
- {"printer-uri", QJsonObject {{"tag", IppMsg::Uri}, {"value", "ipp://"+_url}}},
- {"requesting-user-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", "nemo"}}}
- };
+ QJsonObject o = opAttrs();
IppMsg msg = IppMsg(o);
_nam->post(request, msg.encode(IppMsg::GetPrinterAttrs));
@@ -107,6 +116,23 @@ void IppPrinter::getJobsRequestFinished(QNetworkReply *reply)
}
+void IppPrinter::cancelJobFinished(QNetworkReply *reply)
+{
+ if(reply->error() == QNetworkReply::NoError)
+ {
+ try {
+ IppMsg resp(reply);
+ qDebug() << resp.getStatus() << resp.getOpAttrs() << resp.getJobAttrs();
+ }
+ catch(std::exception e)
+ {
+ qDebug() << e.what();
+ }
+ }
+ getJobs();
+}
+
+
bool IppPrinter::print(QJsonObject attrs, QString filename){
qDebug() << "printing" << filename << attrs;
@@ -124,14 +150,9 @@ bool IppPrinter::print(QJsonObject attrs, QString filename){
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/ipp");
- QJsonObject o
- {
- {"attributes-charset", QJsonObject {{"tag", IppMsg::Charset}, {"value", "utf-8"}}},
- {"attributes-natural-language", QJsonObject {{"tag", IppMsg::NaturalLanguage}, {"value", "en-us"}}},
- {"printer-uri", QJsonObject {{"tag", IppMsg::Uri}, {"value", "ipp://"+_url}}},
- {"requesting-user-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", "nemo"}}},
- {"job-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", fileinfo.fileName()}}},
- };
+ QJsonObject o = opAttrs();
+ o.insert("job-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", fileinfo.fileName()}});
+
// Only include if printer supports it
// if (filename.endsWith("pdf"))
@@ -158,13 +179,7 @@ bool IppPrinter::getJobs() {
qDebug() << "getting jobs";
- QJsonObject o
- {
- {"attributes-charset", QJsonObject {{"tag", IppMsg::Charset}, {"value", "utf-8"}}},
- {"attributes-natural-language", QJsonObject {{"tag", IppMsg::NaturalLanguage}, {"value", "en-us"}}},
- {"printer-uri", QJsonObject {{"tag", IppMsg::Uri}, {"value", "ipp://"+_url}}},
- {"requesting-user-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", "nemo"}}}
- };
+ QJsonObject o = opAttrs();
IppMsg job = IppMsg(o, QJsonObject());
@@ -183,4 +198,26 @@ bool IppPrinter::getJobs() {
return true;
}
+bool IppPrinter::cancelJob(qint32 jobId) {
+ qDebug() << "getting jobs";
+
+ QJsonObject o = opAttrs();
+ o.insert("job-id", QJsonObject {{"tag", IppMsg::Integer}, {"value", jobId}});
+
+ IppMsg job = IppMsg(o, QJsonObject());
+
+ QNetworkRequest request;
+ QUrl url("http://"+_url);
+ if(url.port() == -1) {
+ url.setPort(631);
+ }
+
+ QByteArray contents = job.encode(IppMsg::CancelJob);
+
+ request.setUrl(url);
+ request.setHeader(QNetworkRequest::ContentTypeHeader, "application/ipp");
+ _job_cancel_nam->post(request, contents);
+
+ return true;
+}
diff --git a/src/ippprinter.h b/src/ippprinter.h
index 4043d8c..0f32321 100644
--- a/src/ippprinter.h
+++ b/src/ippprinter.h
@@ -24,6 +24,7 @@ public:
Q_INVOKABLE bool print(QJsonObject attrs, QString file);
Q_INVOKABLE bool getJobs();
+ Q_INVOKABLE bool cancelJob(qint32 jobId);
signals:
void urlChanged();
@@ -36,12 +37,16 @@ public slots:
void getPrinterAttributesFinished(QNetworkReply* reply);
void printRequestFinished(QNetworkReply* reply);
void getJobsRequestFinished(QNetworkReply* reply);
+ void cancelJobFinished(QNetworkReply* reply);
private:
QString _url;
+ QJsonObject opAttrs();
+
QNetworkAccessManager* _nam;
QNetworkAccessManager* _jobs_nam;
+ QNetworkAccessManager* _job_cancel_nam;
QNetworkAccessManager* _print_nam;
QJsonObject _attrs;
diff --git a/translations/harbour-seaprint-de.ts b/translations/harbour-seaprint-de.ts
index 18aae81..e2baa04 100644
--- a/translations/harbour-seaprint-de.ts
+++ b/translations/harbour-seaprint-de.ts
@@ -112,7 +112,19 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translations/harbour-seaprint.ts b/translations/harbour-seaprint.ts
index d61d19e..44bb3f4 100644
--- a/translations/harbour-seaprint.ts
+++ b/translations/harbour-seaprint.ts
@@ -112,7 +112,19 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+