Print common headers when printing messages

This commit is contained in:
Alex Henrie 2018-09-26 18:43:46 -06:00
parent c1bc3ee99d
commit 698f61e6e5
8 changed files with 95 additions and 8 deletions

View file

@ -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
#

View file

@ -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:

2
debian/control vendored
View file

@ -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,

View file

@ -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')

View file

@ -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(

View file

@ -116,6 +116,7 @@ geary_client_dependencies = [
gio,
goa,
gtk,
json_glib,
libcanberra,
libnotify,
libsecret,

View file

@ -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;
}
}

View file

@ -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();