private void ImportCatalog(string path)
        {
            var importJob = new ImportJob(path, "Catalog.xml", true);

            Action importCatalog = () =>
            {
                _progressMessenger.AddProgressMessageText("Importing Catalog content...", false, 20);
                Action <IBackgroundTaskMessage> addMessage = msg =>
                {
                    var isError = msg.MessageType == BackgroundTaskMessageType.Error;
                    var percent = (int)Math.Round(msg.GetOverallProgress() * 100);
                    var message = msg.Exception == null
                        ? msg.Message
                        : string.Format("{0} {1}", msg.Message, msg.ExceptionMessage);
                    _progressMessenger.AddProgressMessageText(message, isError, percent);
                };
                importJob.Execute(addMessage, CancellationToken.None);
                _progressMessenger.AddProgressMessageText("Done importing Catalog content", false, 60);
            };

            importCatalog();

            //We are running in front-end site context, the metafield update events are ignored, we need to sync manually
            _progressMessenger.AddProgressMessageText("Syncing metaclasses with content types", false, 60);
            SyncMetaClassesToContentTypeModels();
            _progressMessenger.AddProgressMessageText("Done syncing metaclasses with content types", false, 70);
        }
Exemple #2
0
        public void ImportCatalog(string path, Action <string> statusChange)
        {
            IProgressMessenger _progressMessenger = new WebProgressMessenger();

            var importJob = new ImportJob(path, "Catalog.xml", true);

            Action importCatalog = () =>
            {
                _progressMessenger.AddProgressMessageText("Importing Catalog content...", false, 20);
                Action <IBackgroundTaskMessage> addMessage = msg =>
                {
                    if (msg.MessageType == BackgroundTaskMessageType.Warning && msg.Message.Contains("Overwriting"))
                    {
                        return;
                    }
                    var isError = msg.MessageType == BackgroundTaskMessageType.Error;
                    var percent = (int)Math.Round(msg.GetOverallProgress() * 100);
                    var message = msg.Exception == null
                        ? msg.Message
                        : $"{msg.Message} {msg.ExceptionMessage}";
                    statusChange($"Message: {message} | Has Error: {isError} | Percent: {percent}");
                    _progressMessenger.AddProgressMessageText(message, isError, percent);
                };
                importJob.Execute(addMessage, CancellationToken.None);
                _progressMessenger.AddProgressMessageText("Done importing Catalog content", false, 60);
            };

            importCatalog();
        }
        private void ImportCatalog(string path)
        {
            var importJob = new ImportJob(AppContext.Current.ApplicationId, path, "Catalog.xml", true);

            Action importCatalog = () =>
            {
                //_progressMessenger.AddProgressMessageText("Importing Catalog content...", false, 20);
                Action<IBackgroundTaskMessage> addMessage = msg =>
                {
                    var isError = msg.MessageType == BackgroundTaskMessageType.Error;
                    var percent = (int)Math.Round(msg.GetOverallProgress() * 100);
                    var message = msg.Exception == null
                        ? msg.Message
                        : string.Format("{0} {1}", msg.Message, msg.ExceptionMessage);
                    //_progressMessenger.AddProgressMessageText(message, isError, percent);
                };
                importJob.Execute(addMessage, CancellationToken.None);
                //_progressMessenger.AddProgressMessageText("Done importing Catalog content", false, 60);
            };

            importCatalog();

            //We are running in front-end site context, the metafield update events are ignored, we need to sync manually
            //_progressMessenger.AddProgressMessageText("Syncing metaclasses with content types", false, 60);
            SyncMetaClassesToContentTypeModels();
            //_progressMessenger.AddProgressMessageText("Done syncing metaclasses with content types", false, 70);
        }
        public void Import(ImportAction action)
        {
            if (IsImporting)
            {
                return;
            }
            var customer = CustomerContext.Current.GetContactById(Guid.Empty);
            // instantiate the import job here so that it can capture the current EventContext instance.
            var importJob = new ImportJob(AppContext.Current.ApplicationId, CatalogPackagePath, "Catalog.xml", true);

            Action importAction = () =>
            {
                IsImporting = true;
                try
                {
                    if ((action & ImportAction.SiteContent) == ImportAction.SiteContent)
                    {
                        _progressMessenger.AddProgressMessageText("Importing Site content...", false, 0);
                        doImportEpiData(SiteContentPath);
                        _progressMessenger.AddProgressMessageText("Done importing Site content.", false, 5);
                    }

                    if ((action & ImportAction.AssetContent) == ImportAction.AssetContent)
                    {
                        _progressMessenger.AddProgressMessageText("Importing Asset content...", false, 10);
                        doImportEpiData(AssetPath);
                        _progressMessenger.AddProgressMessageText("Done importing Asset content.", false, 15);

                        //Reindex the asset contents to make them searchable
                        _progressMessenger.AddProgressMessageText("Start indexing asset contents.", false, 15);
                        ServiceLocator.Current.GetInstance<ReIndexManager>().ReIndex();
                        _progressMessenger.AddProgressMessageText("Done indexing asset contents.", false, 20);
                    }

                    #region Import catalog and asset mapping

                    if ((action & ImportAction.CatalogContent) == ImportAction.CatalogContent)
                    {
                        _progressMessenger.AddProgressMessageText("Importing Catalog content...", false, 20);
                        Action<IBackgroundTaskMessage> addMessage = msg =>
                        {
                            var isError = msg.MessageType == BackgroundTaskMessageType.Error;
                            var percent = (int)Math.Round(msg.GetOverallProgress() * 100);
                            var message = msg.Exception == null
                                ? msg.Message
                                : string.Format("{0} {1}", msg.Message, msg.ExceptionMessage);
                            _progressMessenger.AddProgressMessageText(message, isError, percent);
                        };
                        importJob.Execute(addMessage, CancellationToken.None);
                        _progressMessenger.AddProgressMessageText("Done importing Catalog content", false, 60);

                        //We are running in front-end site context, the metafield update events are ignored, we need to sync manually
                        _progressMessenger.AddProgressMessageText("Syncing metaclasses with content types", false, 60);
                        SyncMetaClassesToContentTypeModels();
                        _progressMessenger.AddProgressMessageText("Done syncing metaclasses with content types", false, 70);

                        _progressMessenger.AddProgressMessageText("Rebuilding index...", false, 70);
                        BuildIndex(_progressMessenger, AppContext.Current.ApplicationId, AppContext.Current.ApplicationName, true);
                        _progressMessenger.AddProgressMessageText("Done rebuilding index", false, 90);
                    }

                    #endregion

                    _progressMessenger.SetProgressDone();
                    IsDone = true;
                }
                catch (Exception ex)
                {
                    var error = ex.Message + "<br />" + ex.StackTrace;
                    _progressMessenger.AddProgressMessageText(error, true, 0);

                    _progressMessenger.SetProgressFailed();

                    IsFailed = true;

                    _log.Error("Import failed");
                    _log.Error(ex);

                    throw;
                }
            };
            Task.Factory.StartNew(importAction);
        }