コード例 #1
0
ファイル: TrackingEmailer.cs プロジェクト: Pointy-hair/Group
        private string TrackHtmlContent(CommunicationBlast blast, string html, Guid communicationPieceUid, MultipleValueDictionary <string, CommunicationBlastTracker> trackersByUrl, string hostname)
        {
            var pieceSegment = Base32.Encode(communicationPieceUid.ToByteArray());

            return(TrackHtmlContent(
                       html,
                       (pos, linkType, linkUrl) =>
            {
                var tracker = trackersByUrl[linkUrl.ToString()]
                              .FirstOrDefault(z =>
                                              z.CommunicationType == Communications.CommunicationTypes.Email &&
                                              z.Position == pos &&
                                              z.LinkType == linkType);
                if (tracker == null)
                {
                    tracker = new CommunicationBlastTracker
                    {
                        CommunicationType = Communications.CommunicationTypes.Email,
                        Position = pos,
                        LinkType = linkType,
                        RedirectUrl = linkUrl.ToString(),
                        TrackerUid = Guid.NewGuid(),
                        CommunicationBlast = blast
                    };
                    Rdb.CommunicationBlastTrackers.Add(tracker);
                    trackersByUrl.Add(tracker.RedirectUrl, tracker);
                }
                return new Uri($"https://{hostname}/e/{TenantId}/{pieceSegment}/{Base32.Encode(tracker.TrackerUid.ToByteArray())}");
            }));
        }
コード例 #2
0
        async Task <CommunicationBlast> ICommunicationBlastFinder.FindAsync(Creative creative)
        {
            var blast = await Rdb.CommunicationBlasts.FirstOrDefaultAsync(z => z.CreativeId == creative.CreativeId);

            if (blast != null)
            {
                return(blast);
            }
            var comm = await Rdb.Communications.OrderBy(z => z.CommunicationId).Take(1).SingleAsync();

            var blastSpecificCreative = new Creative(creative);
            var filler = new CommunicationsFiller(CreativeSettingsFinder, null);

            filler.Flatten(blastSpecificCreative.CreativeSettings);
            Rdb.Creatives.Add(blastSpecificCreative);
            blast = new CommunicationBlast
            {
                Communication = comm,
                Creative      = blastSpecificCreative,
            };
            Rdb.CommunicationBlasts.Add(blast);
            await Rdb.SaveChangesAsync();

            return(blast);
        }