Beispiel #1
0
        /// <summary>
        /// Return only the updated or new files data input.
        /// </summary>
        /// <returns></returns>
        private TaskFileInputData[] FilterUpdatedFiles()
        {
            TaskFileInputData[] inputFiles = new TaskFileInputData[0];
            var completePath = Path.Combine("Assets", path);

            if (!Directory.Exists(completePath))
            {
                Logger.InputDirectoryDontExists(completePath);

                return(inputFiles);
            }

            var cachePath       = Path.Combine(Paths.cache, $"{guid}.combo-cache.json");
            var newCache        = new CacheData(completePath, searchPattern);
            var cacheFileExists = File.Exists(cachePath);
            var force           = !cacheFileExists;
            var oldCache        = cacheFileExists ? JsonHelper.LoadJson <CacheData>(cachePath) : newCache;

            JsonHelper.SaveJson(cachePath, newCache);

            if (force)
            {
                inputFiles = new TaskFileInputData[newCache.Files.Length];

                for (var index = 0; index < newCache.Files.Length; index++)
                {
                    inputFiles[index] = new TaskFileInputData(newCache.Files[index].path);
                }

                return(inputFiles);
            }

            var updated = new List <FileCacheData>();

            foreach (var fileCache in newCache.Files)
            {
                try
                {
                    var oldFileCache = oldCache[fileCache.path];

                    if (!oldFileCache.Equals(fileCache))
                    {
                        updated.Add(fileCache);
                    }
                }
                catch (FileCacheNotFoundException)
                {
                    updated.Add(fileCache);
                }
            }

            inputFiles = new TaskFileInputData[updated.Count];

            for (var index = 0; index < updated.Count; index++)
            {
                inputFiles[index] = new TaskFileInputData(updated[index].path);
            }

            return(inputFiles);
        }
Beispiel #2
0
        /// <summary>
        /// Get a RegisteredTask instance in the tasks array by it full name.
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public RegisteredTask GetRegisteredTaskByName(string name)
        {
            foreach (var task in tasks)
            {
                if (task.fullName == name)
                {
                    return(task);
                }
            }

            Logger.UnfoundedRegisteredTaskWithName(name);

            return(default);
Beispiel #3
0
        /// <summary>
        /// Update the cache and execute the task with the updated files.
        /// </summary>
        internal void UpdateCacheAndExecute()
        {
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            var input        = FilterUpdatedFiles();
            var completePath = Path.Combine("Assets", path);

            if (input.Length <= 0)
            {
                return;
            }

            foreach (var registeredTask in RegisteredTasks.Instance.Tasks)
            {
                var type = registeredTask.task.GetType();

                if (registeredTask.fullName != classFullName)
                {
                    break;
                }

                foreach (var iInterface in type.GetInterfaces())
                {
                    if (iInterface == typeof(IComboMultipleFilesTask))
                    {
                        var multipleFilesTask = (IComboMultipleFilesTask)registeredTask.task;
                        var taskName          = registeredTask.task.GetType().Name;

                        Logger.MultipleFilesTaskStarted(taskName, searchPattern, completePath);

                        try
                        {
                            multipleFilesTask.OnCreateOrUpdateMultipleFiles(input);
                            Logger.MultipleFilesTaskFinished(taskName, searchPattern, completePath);
                        }
                        catch (Exception e)
                        {
                            Logger.MultipleFilesTaskFailed(taskName, searchPattern, completePath, e);
                        }

                        break;
                    }

                    if (iInterface == typeof(IComboSingleFileTask))
                    {
                        var singleFileTask = (IComboSingleFileTask)registeredTask.task;
                        var taskName       = registeredTask.task.GetType().Name;

                        foreach (var updatedFile in input)
                        {
                            Logger.SingleFileTaskStart(taskName, updatedFile.path);

                            try
                            {
                                singleFileTask.OnCreateOrUpdateSingleFile(updatedFile);
                                Logger.SingleFileTaskFinished(taskName, updatedFile.path);
                            }
                            catch (Exception e)
                            {
                                Logger.SingleFileTaskFailed(taskName, updatedFile.path, e);
                            }
                        }

                        break;
                    }
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Execute the task over the deleted assets.
        /// </summary>
        /// <param name="deletedAssets"></param>
        internal void ExecuteDeletedEvent(string[] deletedAssets)
        {
            var completePath = Path.Combine("Assets", path);
            var input        = new List <TaskFileInputData>();

            if (deletedAssets.Length <= 0)
            {
                return;
            }

            foreach (var deletedPath in deletedAssets)
            {
                var inputFile = new TaskFileInputData(deletedPath);
                if (SearchPatternMatch(inputFile.path))
                {
                    input.Add(inputFile);
                }
            }

            foreach (var registeredTask in RegisteredTasks.Instance.Tasks)
            {
                var type = registeredTask.task.GetType();

                if (registeredTask.fullName != classFullName)
                {
                    break;
                }

                foreach (var iInterface in type.GetInterfaces())
                {
                    if (iInterface == typeof(IComboMultipleFilesTask))
                    {
                        var multipleFilesTask = (IComboMultipleFilesTask)registeredTask.task;
                        var taskName          = registeredTask.task.GetType().Name;

                        Logger.MultipleFilesTaskStarted(taskName, searchPattern, completePath);

                        try
                        {
                            multipleFilesTask.OnDeleteMultipleFiles(input.ToArray());
                            Logger.MultipleFilesTaskFinished(taskName, searchPattern, completePath);
                        }
                        catch (Exception e)
                        {
                            Logger.MultipleFilesTaskFailed(taskName, searchPattern, completePath, e);
                        }

                        break;
                    }

                    if (iInterface == typeof(IComboSingleFileTask))
                    {
                        var singleFileTask = (IComboSingleFileTask)registeredTask.task;
                        var taskName       = registeredTask.task.GetType().Name;

                        foreach (var updatedFile in input)
                        {
                            Logger.SingleFileTaskStart(taskName, updatedFile.path);

                            try
                            {
                                singleFileTask.OnDeleteSingleFile(updatedFile);
                                Logger.SingleFileTaskFinished(taskName, updatedFile.path);
                            }
                            catch (Exception e)
                            {
                                Logger.SingleFileTaskFailed(taskName, updatedFile.path, e);
                            }
                        }

                        break;
                    }
                }
            }
        }