feat(preferences): Add user preferences to enable / disable signature for new mail, reply and forward

This commit is contained in:
smizrahi
2023-07-26 19:38:40 +02:00
parent 577d991d42
commit 8582e423bd
14 changed files with 158 additions and 46 deletions

View File

@@ -2515,6 +2515,21 @@ Possible values are:
Defaults to `below`.
|U |SOGoMailUseSignatureOnNew
|Add signature to new message
Defaults to `YES`.
|U |SOGoMailUseSignatureOnReply
|Add signature to reply
Defaults to `YES`.
|U |SOGoMailUseSignatureOnForward
|Add signature to forward
Defaults to `YES`.
|U |SOGoMailComposeMessageType
|The message composition format. Possible values are:

View File

@@ -1072,19 +1072,16 @@ static NSString *userAgent = nil;
ud = [[context activeUser] userDefaults];
// TODO: Change mailMessageForwarding for reply
if ([[ud mailMessageForwarding] isEqualToString: @"inline"])
{
[self setText: [sourceMail contentForReply]];
if ([sourceMail isEncrypted])
[self _fetchAttachmentsFromEncryptedMail: sourceMail onlyImages: YES];
else if ([sourceMail isOpaqueSigned])
[self _fetchAttachmentsFromOpaqueSignedMail: sourceMail onlyImages: YES];
else
[self _fetchAttachmentsFromMail: sourceMail onlyImages: YES];
}
[self save];
[self setText: [sourceMail contentForReply]];
if ([sourceMail isEncrypted])
[self _fetchAttachmentsFromEncryptedMail: sourceMail onlyImages: YES];
else if ([sourceMail isOpaqueSigned])
[self _fetchAttachmentsFromOpaqueSignedMail: sourceMail onlyImages: YES];
else
[self _fetchAttachmentsFromMail: sourceMail onlyImages: YES];
[self save];
[self storeInfo];
}
@@ -1135,7 +1132,7 @@ static NSString *userAgent = nil;
// TODO: use subject for filename?
// error = [newDraft saveAttachment:content withName:@"forward.eml"];
signature = [[self mailAccountFolder] signature];
if ([signature length])
if ([signature length] && [ud mailUseSignatureOnForward])
{
nl = (isHTML ? @"<br />" : @"\n");
space = (isHTML ? @"&nbsp;" : @" ");

View File

@@ -234,6 +234,12 @@
return [sourceMail contentForEditing];
}
- (BOOL)isSignatureEnabled {
SOGoUserDefaults *ud;
ud = [[context activeUser] userDefaults];
return [ud mailUseSignatureOnForward];
}
- (NSString *) signature
{
BOOL fromSentMailbox;
@@ -275,7 +281,7 @@
if (identity)
{
signature = [identity objectForKey: @"signature"];
if ([signature length])
if ([signature length] && [self isSignatureEnabled])
{
nl = (htmlComposition ? @"<br />" : @"\n");
space = (htmlComposition ? @"&nbsp;" : @" ");

View File

@@ -22,6 +22,8 @@
#import <NGExtensions/NSString+misc.h>
#import <NGImap4/NGImap4Envelope.h>
#import <SOGo/SOGoUserDefaults.h>
#import "SOGoMailObject+Draft.h"
#import "SOGoMailReply.h"
@@ -85,6 +87,12 @@
return s;
}
- (BOOL)isSignatureEnabled {
SOGoUserDefaults *ud;
ud = [[context activeUser] userDefaults];
return [ud mailUseSignatureOnReply];
}
@end
@implementation SOGoMailArabicReply

View File

@@ -109,6 +109,9 @@
SOGoMailMessageForwarding = "inline";
SOGoMailReplyPlacement = "below";
SOGoMailSignaturePlacement = "below";
SOGoMailUseSignatureOnNew = YES;
SOGoMailUseSignatureOnReply = YES;
SOGoMailUseSignatureOnForward = YES;
SOGoRefreshViewIntervals = ( 1, 2, 5, 10, 20, 30, 60 );
SOGoMailListViewColumnsOrder = ( "Thread", "Flagged", "Attachment", "Subject",
"From", "Unread", "Date", "Priority",

View File

@@ -175,6 +175,13 @@ extern NSString *SOGoPasswordRecoverySecondaryEmail;
- (void) setMailSignaturePlacement: (NSString *) newValue;
- (NSString *) mailSignaturePlacement;
- (BOOL)mailUseSignatureOnNew;
- (void)setMailUseSignatureOnNew:(BOOL)newValue;
- (BOOL)mailUseSignatureOnReply;
- (void)setMailUseSignatureOnReply:(BOOL)newValue;
- (BOOL)mailUseSignatureOnForward;
- (void)setMailUseSignatureOnForward:(BOOL)newValue;
- (void) setAllowUserReceipt: (BOOL) allow;
- (BOOL) allowUserReceipt;
- (void) setUserReceiptNonRecipientAction: (NSString *) action;

View File

@@ -707,6 +707,36 @@ NSString *SOGoPasswordRecoverySecondaryEmail = @"SecondaryEmail";
return signaturePlacement;
}
- (BOOL) mailUseSignatureOnNew
{
return [self boolForKey: @"SOGoMailUseSignatureOnNew"];
}
- (void) setMailUseSignatureOnNew: (BOOL) newValue
{
[self setBool: newValue forKey: @"SOGoMailUseSignatureOnNew"];
}
- (BOOL) mailUseSignatureOnReply
{
return [self boolForKey: @"SOGoMailUseSignatureOnReply"];
}
- (void) setMailUseSignatureOnReply: (BOOL) newValue
{
[self setBool: newValue forKey: @"SOGoMailUseSignatureOnReply"];
}
- (BOOL) mailUseSignatureOnForward
{
return [self boolForKey: @"SOGoMailUseSignatureOnForward"];
}
- (void) setMailUseSignatureOnForward: (BOOL) newValue
{
[self setBool: newValue forKey: @"SOGoMailUseSignatureOnForward"];
}
- (void) setAllowUserReceipt: (BOOL) allow
{
[self setBool: allow forKey: @"SOGoMailReceiptAllow"];

View File

@@ -155,9 +155,9 @@
{
[headers setObject: [self _emailFromIdentity: identity] forKey: @"from"];
signature = [identity objectForKey: @"signature"];
if ([signature length])
ud = [[context activeUser] userDefaults];
if ([signature length] && [ud mailUseSignatureOnNew])
{
ud = [[context activeUser] userDefaults];
[newDraftMessage setIsHTML: [[ud mailComposeMessageType] isEqualToString: @"html"]];
isHTML = [newDraftMessage isHTML];
nl = (isHTML? @"<br />" : @"\n");

View File

@@ -753,7 +753,7 @@
// Add signature
signature = [identity objectForKey: @"signature"];
if ([signature length])
if ([signature length] && [ud mailUseSignatureOnForward])
{
nl = (htmlComposition? @"<br />" : @"\n");
space = (htmlComposition ? @"&nbsp;" : @" ");

View File

@@ -195,6 +195,9 @@
"Compose messages in" = "Compose messages in";
"composemessagestype_html" = "HTML";
"composemessagestype_text" = "Plain text";
"Insert signature on new message" = "Insert signature on new message";
"Insert signature on reply" = "Insert signature on reply";
"Insert signature on forward" = "Insert signature on forward";
/* Base font size for messages composed in HTML */
"Default font size" = "Default font size";

View File

@@ -195,6 +195,9 @@
"Compose messages in" = "Composer les messages en";
"composemessagestype_html" = "HTML";
"composemessagestype_text" = "Texte";
"Insert signature on new message" = "Insérer la signature sur un nouveau message";
"Insert signature on reply" = "Insérer la signature sur une réponse";
"Insert signature on forward" = "Insérer la signature sur un transfert";
/* Base font size for messages composed in HTML */
"Default font size" = "Taille de la police par défaut";

View File

@@ -343,8 +343,18 @@ static SoProduct *preferencesProduct = nil;
if (![[defaults source] objectForKey: @"SOGoMailReplyPlacement"])
[[defaults source] setObject: [defaults mailReplyPlacement] forKey: @"SOGoMailReplyPlacement"];
if (![[defaults source] objectForKey: @"SOGoMailSignaturePlacement"])
[[defaults source] setObject: [defaults mailSignaturePlacement] forKey: @"SOGoMailSignaturePlacement"];
if (![[defaults source] objectForKey: @"SOGoMailUseSignatureOnNew"])
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailUseSignatureOnNew]] forKey: @"SOGoMailUseSignatureOnNew"];
if (![[defaults source] objectForKey: @"SOGoMailUseSignatureOnReply"])
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailUseSignatureOnReply]] forKey: @"SOGoMailUseSignatureOnReply"];
if (![[defaults source] objectForKey: @"SOGoMailUseSignatureOnForward"])
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailUseSignatureOnForward]] forKey: @"SOGoMailUseSignatureOnForward"];
if (![[defaults source] objectForKey: @"SOGoMailAddOutgoingAddresses"])
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailAddOutgoingAddresses]] forKey: @"SOGoMailAddOutgoingAddresses"];
if (![[defaults source] objectForKey: @"SOGoMailComposeMessageType"])
[[defaults source] setObject: [defaults mailComposeMessageType] forKey: @"SOGoMailComposeMessageType"];

View File

@@ -803,6 +803,30 @@
</md-input-container>
</div>
<div layout="row" layout-xs="column">
<md-checkbox
ng-model="app.preferences.defaults.SOGoMailUseSignatureOnNew"
ng-true-value="1"
ng-false-value="0"
label:aria-label="Insert signature on new message">
<var:string label:value="Insert signature on new message"/>
</md-checkbox>
<md-checkbox
ng-model="app.preferences.defaults.SOGoMailUseSignatureOnReply"
ng-true-value="1"
ng-false-value="0"
label:aria-label="Insert signature on reply">
<var:string label:value="Insert signature on reply"/>
</md-checkbox>
<md-checkbox
ng-model="app.preferences.defaults.SOGoMailUseSignatureOnForward"
ng-true-value="1"
ng-false-value="0"
label:aria-label="Insert signature on forward">
<var:string label:value="Insert signature on forward"/>
</md-checkbox>
</div>
<div layout="row">
<md-input-container class="md-block" flex="50">
<label><var:string label:value="Compose messages in"/></label>

View File

@@ -402,38 +402,44 @@
nlNb = 2;
else
nlNb = 1;
if ((vm.isNew() && Preferences.defaults.SOGoMailUseSignatureOnNew === 1)
|| (!vm.isNew() && Preferences.defaults.SOGoMailUseSignatureOnForward === 1 && vm.message && vm.message.origin && vm.message.origin.action && vm.message.origin.action === 'forward')
|| (!vm.isNew() && Preferences.defaults.SOGoMailUseSignatureOnReply === 1 && vm.message && vm.message.origin && vm.message.origin.action && vm.message.origin.action === 'reply')
) {
if (identity && identity.signature)
signature = nl.repeat(nlNb) + '--' + space + nl + identity.signature;
else
signature = '';
if (identity && identity.signature)
signature = nl.repeat(nlNb) + '--' + space + nl + identity.signature;
else
signature = '';
previousIdentity = _.find(this.identities, function (currentIdentity, index) {
previousIdentity = _.find(this.identities, function (currentIdentity, index) {
if (currentIdentity.signature) {
var currentSignature = new RegExp('(' + reNl + '){' + nlNb + '}--' + space + reNl +
currentIdentity.signature.replace(/[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'));
if (vm.message.editable.text.search(currentSignature) >= 0) {
vm.message.editable.text = vm.message.editable.text.replace(currentSignature, signature);
return true;
if (currentIdentity.signature) {
var currentSignature = new RegExp('(' + reNl + '){' + nlNb + '}--' + space + reNl +
currentIdentity.signature.replace(/[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'));
if (vm.message.editable.text.search(currentSignature) >= 0) {
vm.message.editable.text = vm.message.editable.text.replace(currentSignature, signature);
return true;
}
}
}
return false;
});
if (!previousIdentity && signature.length > 0) {
// Must place signature at proper place
if (!this.isNew() && this.replyPlacement == 'above' && this.signaturePlacement == 'above') {
var quotedMessageIndex = this.message.editable.text.search(new RegExp(reNl + '.+?:( ?' + reNl + '){' + nlNb + '}(> |<blockquote type="cite")'));
if (quotedMessageIndex >= 0) {
this.message.editable.text =
this.message.editable.text.slice(0, quotedMessageIndex) +
signature +
this.message.editable.text.slice(quotedMessageIndex);
return false;
});
if (!previousIdentity && signature.length > 0) {
// Must place signature at proper place
if (!this.isNew() && this.replyPlacement == 'above' && this.signaturePlacement == 'above') {
var quotedMessageIndex = this.message.editable.text.search(new RegExp(reNl + '.+?:( ?' + reNl + '){' + nlNb + '}(> |<blockquote type="cite")'));
if (quotedMessageIndex >= 0) {
this.message.editable.text =
this.message.editable.text.slice(0, quotedMessageIndex) +
signature +
this.message.editable.text.slice(quotedMessageIndex);
} else {
this.message.editable.text = signature + this.message.editable.text;
}
} else {
this.message.editable.text = signature + this.message.editable.text;
this.message.editable.text += signature;
}
} else {
this.message.editable.text += signature;
}
}
};