/// <inheritdoc cref="IEmailHashComposer.GetDefaultHash(UserConnection, EmailHashDTO)"/>
        public virtual string GetDefaultHash(UserConnection userConnection, EmailHashDTO email)
        {
            var dateTimeFormat = GetDateTimeFormat(userConnection);
            var subject        = userConnection.GetIsFeatureEnabled("UseSubjectStartForEmailHash")
                                ? TrimSubject(email.Subject)
                                : email.Subject;

            return(GetEmailHash(email.SendDate, subject, email.Body, email.TimeZone, true, dateTimeFormat));
        }
        /// <summary>
        /// Returns hashes collection for <paramref name="emailData"/>.
        /// </summary>
        /// <param name="userConnection"><see cref="UserConnection"/> instance.</param>
        /// <param name="emailData">Email Message info.</param>
        /// <returns>Email hashes collection.</returns>
        private static List <string> GetEmailHashes(UserConnection userConnection, EmailHashDTO emailData)
        {
            List <string> hashes        = new List <string>();
            var           hashComposers = ClassFactory.GetAll <IEmailHashComposer>();

            foreach (var hashComposer in hashComposers)
            {
                hashes.AddRangeIfNotExists(hashComposer.GetHashes(userConnection, emailData));
            }
            return(hashes);
        }
        public override IEnumerable <string> GetHashes(UserConnection userConnection, EmailHashDTO email)
        {
            List <string> hashes  = new List <string>();
            var           subject = ActivityUtils.FixWhitespaces(email.Subject);

            hashes.AddRange(GetHashesInternal(userConnection, new EmailHashDTO {
                Subject  = subject,
                SendDate = email.SendDate,
                Body     = email.Body,
                TimeZone = email.TimeZone
            }));
            return(hashes);
        }
 /// <inheritdoc cref="IEmailHashComposer.GetHashes(UserConnection, EmailHashDTO)"/>
 public virtual IEnumerable <string> GetHashes(UserConnection userConnection, EmailHashDTO email)
 {
     return(GetHashesInternal(userConnection, email));
 }
        /// <summary>
        ///  Returns hashes collection calculated by email parameters.
        /// </summary>
        /// <param name="userConnection"><see cref="UserConnection"/> instance.</param>
        /// <param name="email">Email parameters.</param>
        /// <returns>Email hashes collection.</returns>
        protected IEnumerable <string> GetHashesInternal(UserConnection userConnection, EmailHashDTO email)
        {
            var           dateTimeFormat = GetDateTimeFormat(userConnection);
            List <string> hashes         = new List <string> {
                GetEmailHash(email.SendDate, email.Subject, email.Body, email.TimeZone, true, dateTimeFormat),
                GetEmailHash(email.SendDate, email.Subject, email.Body, email.TimeZone, false, dateTimeFormat),
                GetEmailHash(email.SendDate, email.Subject, email.Body, email.TimeZone, true, dateTimeFormat, false),
                GetEmailHash(email.SendDate, email.Subject, email.Body, email.TimeZone, false, dateTimeFormat, false)
            };

            if (userConnection.GetIsFeatureEnabled("UseSubjectStartForEmailHash"))
            {
                var subject = TrimSubject(email.Subject);
                hashes.AddRange(new List <string> {
                    GetEmailHash(email.SendDate, subject, email.Body, email.TimeZone, true, dateTimeFormat),
                    GetEmailHash(email.SendDate, subject, email.Body, email.TimeZone, false, dateTimeFormat),
                    GetEmailHash(email.SendDate, subject, email.Body, email.TimeZone, true, dateTimeFormat, false),
                    GetEmailHash(email.SendDate, subject, email.Body, email.TimeZone, false, dateTimeFormat, false)
                });
            }
            return(hashes);
        }
        /// <summary>
        /// <seealso cref="IEmailHashComposer.GetHashes(UserConnection, EmailHashDTO)"/> implementation.
        /// </summary>
        public override IEnumerable <string> GetHashes(UserConnection userConnection, EmailHashDTO email)
        {
            List <string> hashes = new List <string>();

            if (userConnection.GetIsFeatureEnabled("UseNotStrictSendDates"))
            {
                var minuteBefore = email.SendDate.AddMinutes(-1);
                var minuteAfter  = email.SendDate.AddMinutes(1);
                hashes.AddRange(GetHashesInternal(userConnection, new EmailHashDTO {
                    Subject  = email.Subject,
                    SendDate = minuteBefore,
                    Body     = email.Body,
                    TimeZone = email.TimeZone
                }));
                hashes.AddRange(GetHashesInternal(userConnection, new EmailHashDTO {
                    Subject  = email.Subject,
                    SendDate = minuteAfter,
                    Body     = email.Body,
                    TimeZone = email.TimeZone
                }));
            }
            return(hashes);
        }