Пример #1
0
        public void UpdateCustomRepoServerInfo(IContentManager modList, SixRepoServer repoServer, string url,
                                               SixRepo repo)
        {
            if (modList == null)
            {
                throw new ArgumentNullException(nameof(modList));
            }
            if (repoServer == null)
            {
                throw new ArgumentNullException(nameof(repoServer));
            }
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }
            if (repo == null)
            {
                throw new ArgumentNullException(nameof(repo));
            }

            UpdateSharedRepoInfo(url, repo);

            var rMods        = repoServer.RequiredMods;
            var optionalMods =
                repoServer.AllowedMods.Where(x => !SixRepoServer.SYS.Contains(x))
                .DistinctBy(x => x.ToLower())
                .ToList();
            var requiredMods =
                rMods.Where(x => !SixRepoServer.SYS.Contains(x)).DistinctBy(x => x.ToLower()).ToArray();

            Name           = GetNameFromServerOrRepo(repoServer, repo);
            Mods           = requiredMods.ToList();
            SkipServerMods = rMods.None(SixRepoServer.SYS.Contains);
            RequiredMods   =
                requiredMods.Where(x => !optionalMods.Contains(x, StringComparer.CurrentCultureIgnoreCase)).ToList();
            OptionalMods = optionalMods;
            DisabledItems.AddWhenMissing(optionalMods.Where(x =>
                                                            !requiredMods.Contains(x, StringComparer.CurrentCultureIgnoreCase) &&
                                                            !AdditionalMods.Contains(x, StringComparer.CurrentCultureIgnoreCase)),
                                         StringComparison.CurrentCultureIgnoreCase);

            AdditionalMods.AddWhenMissing(optionalMods, StringComparison.CurrentCultureIgnoreCase);

            Image      = String.IsNullOrWhiteSpace(repoServer.Image) ? repo.Config.Image : repoServer.Image;
            ImageLarge =
                String.IsNullOrWhiteSpace(repoServer.ImageLarge)
                    ? repo.Config.ImageLarge
                    : repoServer.ImageLarge;

            CustomRepoUuid = repoServer.Uuid;
            CustomRepoApps = repoServer.Apps.Where(x => repo.Config.Apps.ContainsKey(x))
                             .Select(x => repo.Config.Apps[x]).ToArray();
            IsOpen         = repoServer.IsOpen;
            ForceModUpdate = repoServer.ForceModUpdate;

            HandleModsetMods(modList);
            UpdateState();
        }
Пример #2
0
        protected virtual bool AddMod(Mod mod)
        {
            var key = mod.GetSerializationString();

            lock (Items) {
                if (Mods.Contains(key, StringComparer.InvariantCultureIgnoreCase))
                {
                    return(false);
                }
                if (AdditionalMods.Contains(key, StringComparer.InvariantCultureIgnoreCase))
                {
                    return(false);
                }
                AdditionalMods.Add(key);
                Items.Add(GetToggableModProxy(mod));
                return(true);
            }
        }
Пример #3
0
        protected virtual bool RemoveMod(IMod mod)
        {
            var key = mod.GetSerializationString();

            lock (Items) {
                lock (AdditionalMods) {
                    if (!AdditionalMods.Contains(key, StringComparer.InvariantCultureIgnoreCase))
                    {
                        return(false);
                    }
                    AdditionalMods.Remove(key);
                }
                if (Mods.Contains(key, StringComparer.InvariantCultureIgnoreCase))
                {
                    return(false);
                }
                Items.RemoveAll(Items.Where(x => x.ComparePK(mod)).ToArray());
                DisabledItems.RemoveAllLocked(x => x.Equals(mod.Name, StringComparison.InvariantCultureIgnoreCase));
                UpdateState();
                return(true);
            }
        }