Skip to content
This repository has been archived by the owner on May 5, 2022. It is now read-only.

Commit

Permalink
Merge pull request #1698 from CTemplar/dev
Browse files Browse the repository at this point in the history
Release
  • Loading branch information
The-Hidden-Hand authored Mar 8, 2022
2 parents 6325826 + 7262771 commit 3afdc53
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 4 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ctemplar",
"version": "2.5.70",
"version": "2.5.71",
"license": "Apache",
"main": "electron-main.js",
"description": "Angular webclient (with Linux, macOS and Windows desktop clients) for CTemplar's encrypted email service.",
Expand Down
27 changes: 24 additions & 3 deletions src/app/mail/mail-detail/mail-detail.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { Subject } from 'rxjs';
import { TranslateService } from '@ngx-translate/core';
import { DomSanitizer } from '@angular/platform-browser';

import { PRIMARY_WEBSITE } from '../../shared/config';
import { KEY_LEFT_CONTROL, KEY_RIGHT_CONTROL, PRIMARY_WEBSITE } from '../../shared/config';
import { FilenamePipe } from '../../shared/pipes/filename.pipe';
import { EmailFormatPipe } from '../../shared/pipes/email-formatting.pipe';
import { SafePipe } from '../../shared/pipes/safe.pipe';
Expand Down Expand Up @@ -54,8 +54,10 @@ import {
MessageDecryptService,
OpenPgpService,
SharedService,
PrintMailService,
ComposeMailService,
DateTimeUtilService,
} from '../../store/services';
import { ComposeMailService, DateTimeUtilService } from '../../store/services';
import { UserSelectManageService } from '../../shared/services/user-select-manage.service';

declare let Scrambler: (argument0: { target: string; random: number[]; speed: number; text: string }) => void;
Expand Down Expand Up @@ -190,6 +192,8 @@ export class MailDetailComponent implements OnInit, OnDestroy {

private shouldChangeMail = 0;

private isKeyDownCtrlBtn = false;

/**
* @var isShowTrashRelatedChildren
* @description
Expand Down Expand Up @@ -233,6 +237,7 @@ export class MailDetailComponent implements OnInit, OnDestroy {
private mailService: MailService,
private messageDecryptService: MessageDecryptService,
private electronService: ElectronService,
private printMailService: PrintMailService,
private translate: TranslateService,
private sanitizer: DomSanitizer,
private cdr: ChangeDetectorRef,
Expand Down Expand Up @@ -1083,7 +1088,7 @@ export class MailDetailComponent implements OnInit, OnDestroy {
}
this.composeMailService.openComposeMailDialog({
draft: { ...this.currentForwardingNewEmail },
action: MailAction.REPLY_ALL,
action: MailAction.FORWARD,
isFullScreen: this.userState.settings.is_composer_full_screen,
});
}
Expand Down Expand Up @@ -1560,4 +1565,20 @@ export class MailDetailComponent implements OnInit, OnDestroy {
ngOnDestroy(): void {
this.store.dispatch(new ClearMailDetail(this.mail || {}));
}

@HostListener('window:keyup', ['$event'])
onKeyUp(event: KeyboardEvent) {
if (event.code === KEY_LEFT_CONTROL || event.code === KEY_RIGHT_CONTROL || event.metaKey) {
this.isKeyDownCtrlBtn = false;
} else if (event.code === 'KeyP' && this.isKeyDownCtrlBtn && this.electronService.isElectron) {
this.printMailService.printAllMailsOnElectron(this.mail, this.decryptedContents);
}
}

@HostListener('window:keydown', ['$event'])
onKeyDown(event: KeyboardEvent) {
if (event.code === KEY_LEFT_CONTROL || event.code === KEY_RIGHT_CONTROL || event.metaKey) {
this.isKeyDownCtrlBtn = true;
}
}
}
1 change: 1 addition & 0 deletions src/app/shared/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,4 +239,5 @@ export const passwordRegex = new RegExp(

// Keys
export const KEY_LEFT_CONTROL = 'ControlLeft';
export const KEY_RIGHT_CONTROL = 'ControlRight';
export const KEY_SHIFT = 'ShiftLeft';
1 change: 1 addition & 0 deletions src/app/store/services/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@ export * from './export-mail.service';
export * from './compose-mail.service';
export * from './timezone.service';
export * from './datetime-util.service';
export * from './print-mail.service';
114 changes: 114 additions & 0 deletions src/app/store/services/print-mail.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { Injectable } from '@angular/core';

import { Mail } from '../models';

import { ElectronService } from '.';

@Injectable({
providedIn: 'root',
})
export class PrintMailService {
constructor(private electronService: ElectronService) {}

printAllMailsOnElectron(mail: Mail, decryptedContents: any) {
if (decryptedContents[mail.id]) {
let mailHtml = '';
mailHtml = this.getHTMLForMail(mail);
if (mail.has_children) {
mail.children.forEach((child: Mail) => {
if (decryptedContents[child.id]) {
mailHtml += this.getHTMLForMail(child, true);
}
});
}

const printHtml = this.getHtmlToPrint(mailHtml);
this.electronService.printHtml(printHtml);
}
}

getHtmlToPrint(content: string) {
return `
<html>
<head>
<title>Print tab</title>
<style>
body {
font-family: "Roboto", Helvetica, Arial, sans-serif;
}
.navbar-brand-logo {
margin-right: 10px;
max-width: 32px;
}
a {
color: #3498db;
}
.container {
max-width: 900px;
padding: 100px 15px;
margin: auto;
color: #757675;
}
.row {
padding-left: -15px;
padding-right: -15px;
}
.text-center {
text-align: center;
}
.text-secondary {
color: #34495e;
}
.page-title {
font-weight: 300;
}
.dashed-separator {
border-top: 1px dashed #777;margin:20px 0 20px;
}
</style>
</head>
<body>
<div class="container">
${content}
</div>
</body>
</html>`;
}

getHTMLForMail(mail: Mail, isChild = false) {
const subject = isChild ? '' : document.querySelector(`[id='${mail.id}-mail-subject']`)?.innerHTML;
const from = document.querySelector(`[id='${mail.id}-mail-from']`)?.innerHTML;
const to = document.querySelector(`[id='${mail.id}-mail-to']`)?.innerHTML;
const date = document.querySelector(`[id='${mail.id}-mail-date']`)?.innerHTML;
const content = document.querySelector(`[id='${mail.id}-raw-mail-content']`)?.innerHTML;
const hasCC = document.querySelector(`[id='${mail.id}-mail-cc']`);
let cc = '';
if (hasCC) {
cc = `<span class="text-muted">${hasCC?.innerHTML}</span>`;
}

return `
<div class="row">
<!-- Mail Subject -->
${isChild ? '' : `<h1>${subject}</h1>`}
<div class="dashed-separator"></div>
<!-- Mail From -->
<span class="text-muted">${from}</span>
<br>
<!-- Mail To -->
<span class="text-muted">${to}</span>
<br>
<!-- Mail CC -->
${cc}
<br>
<!-- Mail Date Created -->
Dated:<strong>${date}</strong>
<br>
<div class="dashed-separator"></div>
<!-- Mail Content -->
<div>
${content}
</div>
</div>`;
}
}

0 comments on commit 3afdc53

Please sign in to comment.