[geary: 1/2] Print common headers when printing messages
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary: 1/2] Print common headers when printing messages
- Date: Sun, 30 Sep 2018 13:23:16 +0000 (UTC)
commit 698f61e6e54977b4a37ccafd671966d8e5438dc3
Author: Alex Henrie <alexhenrie24 gmail com>
Date: Wed Sep 26 18:43:46 2018 -0600
Print common headers when printing messages
.gitlab-ci.yml | 4 +--
INSTALL | 4 +--
debian/control | 2 ++
meson.build | 1 +
.../conversation-viewer/conversation-email.vala | 37 +++++++++++++++++++---
src/client/meson.build | 1 +
ui/conversation-web-view.css | 35 ++++++++++++++++++++
ui/conversation-web-view.js | 19 +++++++++++
8 files changed, 95 insertions(+), 8 deletions(-)
---
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 76a0257f..887b6036 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,7 +16,7 @@ variables:
glib2-devel gmime-devel gtk3-devel libnotify-devel sqlite-devel
webkitgtk4-devel libsecret-devel libxml2-devel vala-tools
gcr-devel enchant-devel libunwind-devel iso-codes-devel
- gnome-online-accounts-devel itstool
+ gnome-online-accounts-devel itstool json-glib-devel
FEDORA_TEST_DEPS: Xvfb tar xz
UBUNTU_DEPS: valac libgirepository1.0-dev
meson desktop-file-utils libcanberra-dev
@@ -24,7 +24,7 @@ variables:
libsecret-1-dev libxml2-dev libnotify-dev libsqlite3-dev
libwebkit2gtk-4.0-dev libgcr-3-dev libenchant-dev
libunwind-dev iso-codes libgoa-1.0-dev itstool gettext
- libmessaging-menu-dev libunity-dev
+ libmessaging-menu-dev libunity-dev libjson-glib-dev
UBUNTU_TEST_DEPS: xauth xvfb
#
diff --git a/INSTALL b/INSTALL
index 7d6b426b..60094d86 100644
--- a/INSTALL
+++ b/INSTALL
@@ -45,7 +45,7 @@ libraries. Install them by running this command:
desktop-file-utils iso-codes-devel libcanberra-devel libgee-devel \
glib2-devel gmime-devel gtk3-devel libnotify-devel sqlite-devel \
webkitgtk4-devel libsecret-devel libxml2-devel vala-tools \
- gcr-devel enchant-devel libunwind-devel \
+ gcr-devel enchant-devel libunwind-devel json-glib-devel \
gnome-online-accounts-devel itstool
Installing dependencies on Ubuntu/Debian
@@ -67,7 +67,7 @@ Install them by running this command:
libgee-0.8-dev libglib2.0-dev libgmime-2.6-dev libgtk-3-dev \
libsecret-1-dev libxml2-dev libnotify-dev libsqlite3-dev \
libwebkit2gtk-4.0-dev libgcr-3-dev libenchant-dev \
- libunwind-dev libgoa-1.0-dev itstool gettext
+ libunwind-dev libgoa-1.0-dev libjson-glib-dev itstool gettext
And for Ubuntu Unity integration:
diff --git a/debian/control b/debian/control
index 0c1a396d..3a3b1d14 100644
--- a/debian/control
+++ b/debian/control
@@ -15,6 +15,7 @@ Build-Depends: debhelper (>= 8),
libgmime-2.6-dev (>= 2.6.17),
libgoa-1.0-dev,
libgtk-3-dev (>= 3.22.26),
+ libjson-glib-dev,
libmessaging-menu-dev,
libnotify-dev,
libsecret-1-dev,
@@ -42,6 +43,7 @@ Depends: ${shlibs:Depends}, ${misc:Depends},
libgmime-2.6-0 (>= 2.6.17),
libgoa-1.0-0b,
libgtk-3-0 (>= 3.22.26),
+ libjson-glib,
libmessaging-menu0,
libnotify4,
libsecret-1-0,
diff --git a/meson.build b/meson.build
index f1166c83..3c279916 100644
--- a/meson.build
+++ b/meson.build
@@ -61,6 +61,7 @@ gobject_introspection = dependency('gobject-introspection-1.0')
gthread = dependency('gthread-2.0', version: '>=' + target_glib)
iso_codes = dependency('iso-codes')
javascriptcoregtk = dependency('javascriptcoregtk-4.0', version: '>=' + target_webkit)
+json_glib = dependency('json-glib-1.0', version: '>= 1.0')
libcanberra = dependency('libcanberra', version: '>= 0.28')
libmath = cc.find_library('m')
libnotify = dependency('libnotify', version: '>= 0.7.5')
diff --git a/src/client/conversation-viewer/conversation-email.vala
b/src/client/conversation-viewer/conversation-email.vala
index 493e462c..5fdd75e1 100644
--- a/src/client/conversation-viewer/conversation-email.vala
+++ b/src/client/conversation-viewer/conversation-email.vala
@@ -385,7 +385,7 @@ public class ConversationEmail : Gtk.Box, Geary.BaseInterface {
forward_message();
});
add_action(ACTION_PRINT).activate.connect(() => {
- print();
+ print.begin();
});
add_action(ACTION_MARK_READ).activate.connect(() => {
mark_email(null, Geary.EmailFlags.UNREAD);
@@ -804,9 +804,38 @@ public class ConversationEmail : Gtk.Box, Geary.BaseInterface {
}
}
- private void print() {
- // XXX This isn't anywhere near good enough - headers aren't
- // being printed.
+ private async void print() throws Error {
+ Json.Builder builder = new Json.Builder();
+ builder.begin_object();
+ if (this.email.from != null) {
+ builder.set_member_name(_("From:"));
+ builder.add_string_value(this.email.from.to_string());
+ }
+ if (this.email.to != null) {
+ builder.set_member_name(_("To:"));
+ builder.add_string_value(this.email.to.to_string());
+ }
+ if (this.email.cc != null) {
+ builder.set_member_name(_("CC:"));
+ builder.add_string_value(this.email.cc.to_string());
+ }
+ if (this.email.bcc != null) {
+ builder.set_member_name(_("BCC:"));
+ builder.add_string_value(this.email.bcc.to_string());
+ }
+ if (this.email.date != null) {
+ builder.set_member_name(_("Date:"));
+ builder.add_string_value(this.email.date.to_string());
+ }
+ if (this.email.subject != null) {
+ builder.set_member_name(_("Subject:"));
+ builder.add_string_value(this.email.subject.to_string());
+ }
+ builder.end_object();
+ Json.Generator generator = new Json.Generator();
+ generator.set_root(builder.get_root());
+ string js = "geary.addPrintHeaders(" + generator.to_data(null) + ");";
+ yield this.primary_message.web_view.run_javascript(js, null);
Gtk.Window? window = get_toplevel() as Gtk.Window;
WebKit.PrintOperation op = new WebKit.PrintOperation(
diff --git a/src/client/meson.build b/src/client/meson.build
index b0559b8d..7fba7c62 100644
--- a/src/client/meson.build
+++ b/src/client/meson.build
@@ -116,6 +116,7 @@ geary_client_dependencies = [
gio,
goa,
gtk,
+ json_glib,
libcanberra,
libnotify,
libsecret,
diff --git a/ui/conversation-web-view.css b/ui/conversation-web-view.css
index 0040bca3..a41c4d0f 100644
--- a/ui/conversation-web-view.css
+++ b/ui/conversation-web-view.css
@@ -193,8 +193,43 @@ pre {
}
}
+#geary-message-headers {
+ display: none !important;
+}
+
@media print {
.geary-button {
display: none;
}
+
+ #geary-message-headers, #geary-message-headers * {
+ all: initial !important;
+ }
+
+ #geary-message-headers {
+ display: table !important;
+ width: 100% !important;
+ transition: height 2s !important;
+ padding-bottom: 0.5em !important;
+ border-bottom: 2px inset black !important;
+ margin-bottom: 0.75em !important;
+ }
+
+ #geary-message-headers tr {
+ display: table-row !important;
+ }
+
+ #geary-message-headers th, #geary-message-headers td {
+ display: table-cell !important;
+ line-height: 1.5em !important;
+ }
+
+ #geary-message-headers th {
+ font-weight: bold !important;
+ padding-right: 2ex !important;
+ }
+
+ #geary-message-headers td {
+ width: 100% !important;
+ }
}
diff --git a/ui/conversation-web-view.js b/ui/conversation-web-view.js
index b24beb33..da44f4a0 100644
--- a/ui/conversation-web-view.js
+++ b/ui/conversation-web-view.js
@@ -34,6 +34,25 @@ ConversationPageState.prototype = {
}
}, true);
},
+ /**
+ * Add email headers for printing
+ */
+ addPrintHeaders: function(headers) {
+ let headerTable = document.getElementById('geary-message-headers');
+ if (headerTable) headerTable.parentNode.removeChild(headerTable);
+
+ headerTable = document.createElement('table');
+ headerTable.id = 'geary-message-headers';
+ for (header in headers) {
+ let row = headerTable.appendChild(document.createElement('tr'));
+ let name = row.appendChild(document.createElement('th'));
+ let value = row.appendChild(document.createElement('td'));
+ name.textContent = header;
+ value.textContent = headers[header];
+ }
+
+ document.body.insertBefore(headerTable, document.body.firstChild);
+ },
loaded: function() {
this.updateDirection();
this.createControllableQuotes();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]