private void ReplacePlaceholders(ContactStringReplacer replacer, string signatureName) { if (string.IsNullOrEmpty(signatureName)) { return; } using (ISignatures signatures = ThisAddIn.Instance.GetSignatures()) { using (ISignature signature = signatures.Get(signatureName)) { if (signature == null) { return; } foreach (ISignatureFormat format in Enum.GetValues(typeof(ISignatureFormat))) { string template = signature.GetContentTemplate(format); if (template != null) { string replaced = replacer.Replace(template); signature.SetContent(replaced, format); } } } } }
/// <summary> /// Fetches the signatures for the account. /// </summary> /// <param name="account">The account.</param> /// <returns>The signature hash</returns> private string FetchSignatures(ZPushAccount account) { Logger.Instance.Debug(this, "Fetching signatures for account {0}", account); using (ZPushConnection connection = account.Connect()) using (ZPushWebServiceInfo infoService = connection.InfoService) { GetSignatures result = infoService.Execute(new GetSignaturesRequest()); // Store the signatures Dictionary <object, string> fullNames = new Dictionary <object, string>(); using (ISignatures signatures = ThisAddIn.Instance.GetSignatures()) { foreach (Signature signature in result.all.Values) { string name = StoreSignature(signatures, account, signature); fullNames.Add(signature.id, name); } } // Set default signatures if available and none are set if (!string.IsNullOrEmpty(result.new_message) && ShouldSetSignature(account.Account.SignatureNewMessage)) { account.Account.SignatureNewMessage = fullNames[result.new_message]; } if (!string.IsNullOrEmpty(result.replyforward_message) && ShouldSetSignature(account.Account.SignatureReplyForwardMessage)) { account.Account.SignatureReplyForwardMessage = fullNames[result.replyforward_message]; } return(result.hash); } }
private string GetSignatureName(ISignatures signatures, ZPushAccount account, string name) { return(SignatureLocalName.ReplaceStringTokens("%", "%", new Dictionary <string, string> { { "account", account.Account.SmtpAddress }, { "name", name } })); }
private string StoreSignature(ISignatures signatures, ZPushAccount account, Signature signatureInfo) { string name = GetSignatureName(signatures, account, signatureInfo.name); // Remove any existing signature try { ISignature signature = signatures.Get(name); if (signature != null) { try { signature.Delete(); } finally { signature.Dispose(); } } } catch (Exception e) { Logger.Instance.Error(this, "Unable to delete signature {0}: {1}", name, e); } // Create the new signature using (ISignature signature = signatures.Add(name)) { if (!HasPlaceholders(signatureInfo)) { // Simple, set signature straight away signature.SetContent(signatureInfo.content, signatureInfo.isHTML ? ISignatureFormat.HTML : ISignatureFormat.Text); } else { // There are placeholders. Create a template and hook into the GAB for patching signature.SetContentTemplate(signatureInfo.content, signatureInfo.isHTML ? ISignatureFormat.HTML : ISignatureFormat.Text); // Try replacing straight away GABHandler gab = FeatureGAB.FindGABForAccount(account); if (gab != null) { ReplacePlaceholders(gab, name); } } } return(name); }