Пример #1
0
        protected override bool Process(Package package)
        {
            EMailAccount account = package.Account;
            CRSMEmail    message = package.Message;
            PXGraph      graph   = package.Graph;

            if (message.Body == null)
            {
                return(true);
            }

            if (message.NoteID == null)
            {
                return(false);
            }

            Guid noteID    = message.NoteID.Value;
            var  extractor = new PX.Data.ImageExtractor();
            var  body      = message.Body;

            if (extractor.ExtractEmbedded(body, img => AddExtractedImage(graph, noteID, img),
                                          out var newBody, out var _))
            {
                message.Body = newBody;
            }

            return(true);
        }
        private void ExtractEmbeddedImages(out Action revertCallback)
        {
            revertCallback = null;
            Base.EnsureCachePersistence(typeof(TDocument));
            var documentCache = Base.Caches[typeof(TDocument)];

            object document = documentCache.Current;

            if (document == null)
            {
                return;
            }

            Guid?noteId = documentCache.GetValue(document, nameof(INotable.NoteID)) as Guid?;

            if (noteId == null)
            {
                return;
            }
            string html = documentCache.GetValue <THtmlField>(document) as string;

            if (String.IsNullOrEmpty(html))
            {
                return;
            }

            var    extractor       = new PX.Data.ImageExtractor();
            Action revertCallback_ = null;

            (string src, string title) getSrcAndTitle(PX.Data.ImageExtractor.ImageInfo img)
            {
                var(src, title, cb) = AddExtractedImage(noteId.Value, img);
                revertCallback_    += cb;
                return(src, title);
            };
            try
            {
                if (extractor.ExtractEmbedded(html, getSrcAndTitle, out var newHtml, out var _))
                {
                    documentCache.SetValue <THtmlField>(document, newHtml);
                }
            }
            finally
            {
                revertCallback = revertCallback_ + (() => documentCache.SetValue <THtmlField>(documentCache.Current, html));
            }
        }