private static DataModel.Default.Package Merge(IPackageGroup group, IEnumerable <IFileImportService> services)
        {
            var result = new DataModel.Default.Package
            {
                Mod      = group.Mod,
                ModName  = group.Mod.Name,
                Files    = new List <IFile>(),
                FileList = new List <string>()
            };

            foreach (var package in group.Packages)
            {
                foreach (var file in package.Files)
                {
                    if (result.Files.All(f => f.GetType() != file.GetType()))
                    {
                        result.Files.Add(file);
                    }
                    else
                    {
                        var main = package.Files.FirstOrDefault(f => f.GetType() == file.GetType());
                        foreach (var service in services)
                        {
                            var merged = service.Merge(main, file);
                            result.Files.Remove(main);
                            result.Files.Add(merged);
                        }
                    }
                }
            }

            return(result);
        }
Exemple #2
0
        internal static DataModel.Default.Package Merge(IPackageGroup group)
        {
            var result = new DataModel.Default.Package
            {
                Mod      = group.Mod,
                ModName  = group.Mod.Name,
                Files    = new List <IFile>(),
                FileList = new List <string>()
            };

            foreach (var package in group.Packages)
            {
                foreach (dynamic file in package.Files)
                {
                    if (result.Files.All(f => f.GetType() != file.GetType()))
                    {
                        result.Files.Add(file);
                    }
                    else
                    {
                        var main   = package.Files.FirstOrDefault(f => f.GetType() == file.GetType());
                        var s      = GetImportService(file);
                        var merged = s.Merge(main, file);
                        result.Files.Remove(main);
                        result.Files.Add(merged);
                    }
                }
            }

            return(result);
        }
 public PackageGroupState(IPackageGroup pg)
 {
     ModName  = pg.Mod.Name;
     Packages = new OrderedDictionary();
     foreach (var p in pg.Packages)
     {
         Packages.Add(p.Name, p.Enabled);
     }
 }
        private void QueuePackageGroup(IPackageGroup packageGroup)
        {
            if (packageGroup is null || !packageGroup.Mod.Enabled)
            {
                return;
            }

            foreach (var p in packageGroup.Packages)
            {
                if (p.Enabled)
                {
                    _packageImport.Queue(p);
                }
            }
        }
Exemple #5
0
        private void Import(IFile f, IPackageGroup group, FileImporter importer, bool preferEarly)
        {
            var importerTiming = ReflectionHelper.GetAttribute <OperationTimingAttribute>(importer.GetType())
                                 ?.Timing ?? OperationTiming.Any;

            Utils.LogDebug($"Trying to Import [{f.GetType()}] using [{importer.GetType()}]" +
                           $"\n    ImporterTiming: [{importerTiming}]" +
                           $"\n    State: [{Localizer.State}]" +
                           $"\n    PreferEarly: [{preferEarly}]");
            if (!Localizer.CanDoOperationNow(importer.GetType()) ||
                (preferEarly && importerTiming > Localizer.State &&
                 importerTiming == OperationTiming.Any &&
                 Localizer.State != OperationTiming.BeforeModCtor))
            {
                return;
            }
            importer.Import(f, group.Mod, group.Packages.ToList()[0].Language);
            Utils.LogDebug($"Import Complete");
        }
        internal DataModel.Default.Package Merge(IPackageGroup group)
        {
            var result = new DataModel.Default.Package
            {
                Mod      = group.Mod,
                ModName  = group.Mod.Name,
                Files    = new List <IFile>(),
                FileList = new List <string>()
            };

            foreach (var package in group.Packages)
            {
                Utils.SafeWrap(() =>
                {
                    foreach (var file in package.Files)
                    {
                        if (result.Files.All(f => f.GetType() != file.GetType()))
                        {
                            result.Files.Add(file);
                        }
                        else
                        {
                            var main     = package.Files.FirstOrDefault(f => f.GetType() == file.GetType());
                            var importer = GetImporter(file);
                            if (importer is null)
                            {
                                continue;
                            }

                            var merged = importer.Merge(main, file);
                            result.Files.Remove(main);
                            result.Files.Add(merged);
                        }
                    }
                });
            }

            return(result);
        }