Ejemplo n.º 1
0
        private List <string> GetTargetFileList(Ommel loader)
        {
            if (TargetFile == null && TargetFiles == null && TargetPattern == null)
            {
                return(new List <string> {
                    "{datapath}"
                });
            }
            if (TargetFile != null)
            {
                return new List <string> {
                           TargetFile
                }
            }
            ;
            if (TargetFiles != null)
            {
                return(TargetFiles);
            }

            var l = new List <string>();
            var s = new HashSet <string>();

            var regex = new Regex(TargetPattern);

            Logger.Debug($"Target Pattern: {TargetPattern}");

            var target_ents = Directory.GetFiles(loader.NoitaPath, "*.*", SearchOption.AllDirectories);

            for (var i = 0; i < target_ents.Length; i++)
            {
                var start_idx = loader.NoitaPath.Length + 1;
                var data_ent  = target_ents[i].Substring(start_idx).Replace("\\", "/");
                if (!regex.IsMatch(data_ent))
                {
                    continue;
                }
                var skip = false;
                if (TargetExceptionRules != null)
                {
                    for (var j = 0; j < TargetExceptionRules.Count; j++)
                    {
                        if (TargetExceptionRules[j].IsMatch(data_ent))
                        {
                            Logger.Debug($"  Match (target, rejected): {data_ent}");
                            skip = true;
                        }
                    }
                }
                if (skip)
                {
                    continue;
                }
                Logger.Debug($"  Match (target): {data_ent}");
                loader.CheckDataEntry(data_ent);

                l.Add(data_ent);
                s.Add(data_ent);
            }

            var noita_ents = Directory.GetFiles(loader.NoitaPath, "*.*", SearchOption.AllDirectories);

            for (var i = 0; i < noita_ents.Length; i++)
            {
                var start_idx = loader.NoitaPath.Length + 1;
                var data_ent  = noita_ents[i].Substring(start_idx);
                if (!regex.IsMatch(data_ent))
                {
                    continue;
                }

                var skip = false;
                if (TargetExceptionRules != null)
                {
                    for (var j = 0; j < TargetExceptionRules.Count; j++)
                    {
                        if (TargetExceptionRules[j].IsMatch(data_ent))
                        {
                            Logger.Debug($"  Match (Noita, rejected): {data_ent}");
                            skip = true;
                        }
                    }
                }
                if (skip)
                {
                    continue;
                }
                if (s.Contains(data_ent))
                {
                    Logger.Debug($"  Ignored match: {data_ent}");
                    continue;
                }

                Logger.Debug($"  Glob match (Noita): {data_ent}");

                l.Add(data_ent);
                s.Add(data_ent);
            }

            return(l);
        }