Ejemplo n.º 1
0
 public IEnumerable <uSyncAction> PerformPostImport(string rootFolder, string handlerSet, IEnumerable <uSyncAction> actions)
 {
     lock (_importLock)
     {
         using (var pause = new uSyncImportPause())
         {
             var handlers = handlerFactory.GetValidHandlers(new SyncHandlerOptions {
                 Set = handlerSet, Action = HandlerActions.Import
             });
             return(PerformPostImport(rootFolder, handlers, actions));
         }
     }
 }
Ejemplo n.º 2
0
        public IEnumerable <uSyncAction> ImportPartial(string folder, uSyncPagedImportOptions options, out int total)
        {
            lock (_importLock)
            {
                using (var pause = new uSyncImportPause())
                {
                    var orderedNodes = LoadOrderedNodes(folder);

                    total = orderedNodes.Count;

                    var actions  = new List <uSyncAction>();
                    var lastType = string.Empty;

                    var range = options.ProgressMax - options.ProgressMin;

                    SyncHandlerOptions        syncHandlerOptions = new SyncHandlerOptions(options.HandlerSet);
                    ExtendedHandlerConfigPair handlerPair        = null;

                    var index = options.PageNumber * options.PageSize;

                    foreach (var item in orderedNodes.Skip(options.PageNumber * options.PageSize).Take(options.PageSize))
                    {
                        var itemType = item.Node.GetItemType();
                        if (!itemType.InvariantEquals(lastType))
                        {
                            lastType    = itemType;
                            handlerPair = handlerFactory.GetValidHandlerByTypeName(itemType, syncHandlerOptions);
                        }

                        options.Callbacks?.Update?.Invoke(item.Node.GetAlias(),
                                                          CalculateProgress(index, total, options.ProgressMin, options.ProgressMax), 100);

                        if (handlerPair != null)
                        {
                            if (handlerPair.Handler is ISyncItemHandler itemHandler)
                            {
                                actions.AddRange(itemHandler.ImportElement(item.Node, item.FileName, handlerPair.Settings, options));
                            }
                            else
                            {
                                actions.AddRange(handlerPair.Handler.ImportElement(item.Node, options.Flags.HasFlag(SerializerFlags.Force)));
                            }
                        }

                        index++;
                    }

                    return(actions);
                }
            }
        }
Ejemplo n.º 3
0
        public IEnumerable <uSyncAction> ImportPartialSecondPass(IEnumerable <uSyncAction> actions, uSyncPagedImportOptions options)
        {
            lock (_importLock)
            {
                using (var pause = new uSyncImportPause())
                {
                    SyncHandlerOptions syncHandlerOptions = new SyncHandlerOptions(options.HandlerSet);
                    var secondPassActions = new List <uSyncAction>();

                    var total = actions.Count();

                    var lastType = string.Empty;
                    ExtendedHandlerConfigPair handlerPair = null;

                    var index = options.PageNumber * options.PageSize;

                    foreach (var action in actions.Skip(options.PageNumber * options.PageSize).Take(options.PageSize))
                    {
                        if (!action.HandlerAlias.InvariantEquals(lastType))
                        {
                            lastType    = action.HandlerAlias;
                            handlerPair = handlerFactory.GetValidHandler(action.HandlerAlias, syncHandlerOptions);
                        }

                        options.Callbacks?.Update?.Invoke($"Second Pass: {action.Name}",
                                                          CalculateProgress(index, total, options.ProgressMin, options.ProgressMax), 100);


                        if (handlerPair != null && handlerPair.Handler is ISyncItemHandler itemHandler)
                        {
                            secondPassActions.AddRange(itemHandler.ImportSecondPass(action, handlerPair.Settings, options));
                        }

                        index++;
                    }

                    return(secondPassActions);
                }
            }
        }
Ejemplo n.º 4
0
        public IEnumerable <uSyncAction> ImportPartialPostImport(IEnumerable <uSyncAction> actions, uSyncPagedImportOptions options)
        {
            lock (_importLock)
            {
                using (var pause = new uSyncImportPause())
                {
                    SyncHandlerOptions syncHandlerOptions = new SyncHandlerOptions(options.HandlerSet);

                    var aliases = actions.Select(x => x.HandlerAlias).Distinct();

                    var folders = actions
                                  .Where(x => x.RequiresPostProcessing)
                                  .Select(x => new { alias = x.HandlerAlias, folder = Path.GetDirectoryName(x.FileName), actions = x })
                                  .DistinctBy(x => x.folder)
                                  .GroupBy(x => x.alias)
                                  .ToList();

                    var results = new List <uSyncAction>();

                    var index = 0;

                    foreach (var actionItem in folders.SelectMany(actionGroup => actionGroup))
                    {
                        var handlerPair = handlerFactory.GetValidHandler(actionItem.alias, syncHandlerOptions);
                        if (handlerPair.Handler is ISyncPostImportHandler postImportHandler)
                        {
                            options.Callbacks?.Update?.Invoke(actionItem.alias, index, folders.Count);

                            var handlerActions = actions.Where(x => x.HandlerAlias.InvariantEquals(handlerPair.Handler.Alias));
                            results.AddRange(postImportHandler.ProcessPostImport(actionItem.folder, handlerActions, handlerPair.Settings));
                        }
                        index++;
                    }

                    return(results);
                }
            }
        }
Ejemplo n.º 5
0
        public IEnumerable <uSyncAction> ImportHandler(string handlerAlias, uSyncImportOptions options)
        {
            lock (_importLock)
            {
                using (var pause = new uSyncImportPause())
                {
                    var handlerPair = handlerFactory.GetValidHandler(handlerAlias, new SyncHandlerOptions
                    {
                        Set    = options.HandlerSet,
                        Action = HandlerActions.Import
                    });

                    if (handlerPair == null)
                    {
                        return(Enumerable.Empty <uSyncAction>());
                    }
                    var folder = GetHandlerFolder(options.RootFolder, handlerPair.Handler);

                    return(handlerPair.Handler.ImportAll(folder, handlerPair.Settings,
                                                         options.Flags.HasFlag(SerializerFlags.Force),
                                                         options.Callbacks?.Update));
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        ///  Import items into umbraco from a given folder
        /// </summary>
        /// <param name="folder">Folder to use for the import</param>
        /// <param name="force">Push changes in even if there is no difference between the file and the item in umbraco</param>
        /// <param name="handlers">List of Handlers & config to use for import</param>
        /// <param name="callbacks">Callbacks to keep UI informed</param>
        /// <returns>List of actions detailing what did and didn't change</returns>
        public IEnumerable <uSyncAction> Import(string folder, bool force, IEnumerable <ExtendedHandlerConfigPair> handlers, uSyncCallbacks callbacks)
        {
            // if its blank, we just throw it back empty.
            if (handlers == null || !handlers.Any())
            {
                return(Enumerable.Empty <uSyncAction>());
            }

            lock (_importLock)
            {
                var sw = Stopwatch.StartNew();

                using (var pause = new uSyncImportPause())
                {
                    // pre import event
                    fireBulkStarting(ImportStarting);

                    var actions = new List <uSyncAction>();

                    var summary = new SyncProgressSummary(handlers.Select(x => x.Handler), "Importing", handlers.Count() + 1);
                    summary.Handlers.Add(new SyncHandlerSummary()
                    {
                        Icon   = "icon-defrag",
                        Name   = "Post Import",
                        Status = HandlerStatus.Pending
                    });

                    foreach (var configuredHandler in handlers)
                    {
                        var handler         = configuredHandler.Handler;
                        var handlerSettings = configuredHandler.Settings;

                        summary.Increment();

                        summary.UpdateHandler(
                            handler.Name, HandlerStatus.Processing, $"Importing {handler.Name}", 0);

                        callbacks?.Callback?.Invoke(summary);

                        var handlerActions = handler.ImportAll($"{folder}/{handler.DefaultFolder}", handlerSettings, force, callbacks?.Update);
                        actions.AddRange(handlerActions);

                        summary.UpdateHandler(handler.Name, HandlerStatus.Complete,
                                              handlerActions.CountChanges(),
                                              handlerActions.ContainsErrors());
                    }


                    // postImport things (mainly cleaning up folders)

                    summary.Increment();
                    summary.UpdateHandler("Post Import", HandlerStatus.Pending, "Post Import Actions", 0);

                    callbacks?.Callback?.Invoke(summary);

                    actions.AddRange(PerformPostImport(folder, handlers, actions));

                    sw.Stop();
                    summary.UpdateHandler("Post Import", HandlerStatus.Complete, "Import Completed", 0);
                    callbacks?.Callback?.Invoke(summary);

                    // fire complete
                    fireBulkComplete(ImportComplete, actions);

                    logger.Info <uSyncService>("uSync Import: {handlerCount} handlers, processed {itemCount} items, {changeCount} changes in {ElapsedMilliseconds}ms",
                                               handlers.Count(),
                                               actions.Count,
                                               actions.CountChanges(),
                                               sw.ElapsedMilliseconds);

                    callbacks?.Update?.Invoke($"Processed {actions.Count} items in {sw.ElapsedMilliseconds}ms", 1, 1);

                    return(actions);
                }
            }
        }