コード例 #1
0
        public ContestSettings CreateSettings(IContestInformation contest)
        {
            var defaultCat = RegisterCategory?
                             .Where(k => k.Value != 0)
                             .ToDictionary(k => k.Key, v => v.Value);

            if (defaultCat?.Count == 0)
            {
                defaultCat = null;
            }

            if (RestrictToIpRanges)
            {
                IpRanges ??= string.Empty;
            }
            else
            {
                IpRanges = null;
            }
            int restriction =
                (RestrictToIpRanges ? 1 : 0)
                | (RestrictToMinimalSite ? 2 : 0)
                | (RestrictToLastLoginIp ? 4 : 0);

            var penaltyTime =
                contest.RankingStrategy == CcsDefaults.RuleXCPC &&
                PenaltyTime != 20
                ? PenaltyTime : default(int?);

            var scoreboardPagingEnabled =
                UseScoreboardPaging switch
            {
                1 => true,
                2 => false,
                _ => default(bool?),
            };

            var settings = contest.Settings.Clone();

            settings.BalloonAvailable  = contest.Kind == CcsDefaults.KindDom && UseBalloon;
            settings.EventAvailable    = contest.Kind == CcsDefaults.KindDom && UseEvents;
            settings.Languages         = Languages;
            settings.PrintingAvailable = contest.Kind == CcsDefaults.KindDom && UsePrintings;
            settings.RegisterCategory  = defaultCat;
            settings.StatusAvailable   = StatusAvailable;
            settings.PenaltyTime       = penaltyTime;
            settings.ScoreboardPaging  = scoreboardPagingEnabled;
            settings.PreferGymUI       = contest.Kind == CcsDefaults.KindDom && PreferGymUI ? true : default(bool?);
            settings.RestrictIp        = contest.Kind != CcsDefaults.KindDom || restriction == 0 ? default(int?) : restriction;
            settings.IpRanges          = IpRanges?.Split(';', StringSplitOptions.RemoveEmptyEntries);
            return(settings);
        }