private static string RenderBeatmapCategories(IEnumerable <Issue> aBeatmapIssues, string aVersion, bool aGeneral = false) { return (Div("card-difficulty-checks", CheckerRegistry.GetChecks() .Where(aCheck => aGeneral == aCheck is GeneralCheck) .GroupBy(aCheck => aCheck.GetMetadata().Category) .Select(aGroup => { string category = aGroup.Key; IEnumerable <Issue> issues = aBeatmapIssues.Where(anIssue => anIssue.CheckOrigin.GetMetadata().Category == category); return DivAttr("card", DataAttr("difficulty", aVersion), Div("card-box shadow noselect", Div("large-icon " + GetIcon(issues) + "-icon"), Div("card-title", Encode(category) ) ), Div("card-details-container", Div("card-details", RenderBeatmapIssues(issues, category, aGeneral) ) ) ); }).ToArray() )); }
public static string Render(string aCheckMessage) { Check check = CheckerRegistry.GetChecks() .FirstOrDefault(aCheck => aCheck.GetMetadata().Message == aCheckMessage); if (check?.GetMetadata() == null) { return("No documentation found for check with message \"" + aCheckMessage + "\"."); } return(String.Concat( RenderOverlayTop(check.GetMetadata()), RenderOverlayContent(check))); }
private static string RenderBeatmapIssues(IEnumerable <Issue> aCategoryIssues, string aCategory, bool aGeneral = false) { return (String.Concat( CheckerRegistry.GetChecks() .Where(aCheck => aCheck.GetMetadata().Category == aCategory && aGeneral == aCheck is GeneralCheck) .Select(aCheck => { BeatmapCheckMetadata metadata = aCheck.GetMetadata() as BeatmapCheckMetadata; IEnumerable <Issue> issues = aCategoryIssues.Where(anIssue => anIssue.CheckOrigin == aCheck); string message = aCheck.GetMetadata().Message; return DivAttr("card-detail", (metadata != null ? DifficultiesDataAttr(metadata.Difficulties) : "") + " data-check=\"" + Encode(message) + "\"", Div("card-detail-icon " + GetIcon(issues) + "-icon"), (issues.Any() ? Div("", Div("card-detail-text", message ), DivAttr("vertical-arrow card-detail-toggle detail-shortcut", Tooltip("Toggle details") ) ) : Div("card-detail-text", message )), DivAttr("doc-shortcut detail-shortcut", Tooltip("Show documentation") ) ) + RenderBeatmapDetails(issues); }))); }
private static string RenderChecks() { List <Check> checks = CheckerRegistry.GetChecks(); IEnumerable <Check> generalChecks = checks.Where(aCheck => aCheck is GeneralCheck); IEnumerable <Check> allModeChecks = checks.Where(aCheck => { BeatmapCheckMetadata metadata = aCheck.GetMetadata() as BeatmapCheckMetadata; if (metadata == null) { return(false); } return (metadata.Modes.Contains(Beatmap.Mode.Standard) && metadata.Modes.Contains(Beatmap.Mode.Taiko) && metadata.Modes.Contains(Beatmap.Mode.Catch) && metadata.Modes.Contains(Beatmap.Mode.Mania)); }); bool hasMode(Check aCheck, Beatmap.Mode aMode) => (aCheck.GetMetadata() as BeatmapCheckMetadata)?.Modes.Contains(aMode) ?? false; IEnumerable <Check> standardChecks = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Standard)).Except(allModeChecks).Except(generalChecks); IEnumerable <Check> catchChecks = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Taiko)).Except(allModeChecks).Except(generalChecks); IEnumerable <Check> taikoChecks = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Catch)).Except(allModeChecks).Except(generalChecks); IEnumerable <Check> maniaChecks = checks.Where(aCheck => hasMode(aCheck, Beatmap.Mode.Mania)).Except(allModeChecks).Except(generalChecks); return (RenderModeCategory("General", generalChecks) + RenderModeCategory("All Modes", allModeChecks) + RenderModeCategory("Standard", standardChecks) + RenderModeCategory("Taiko", catchChecks) + RenderModeCategory("Catch", taikoChecks) + RenderModeCategory("Mania", maniaChecks)); }
public static void Run() { CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; CheckerRegistry.RegisterCheck(new CheckSliderOnly()); }
/// <summary> Needs to be exactly "public static void Run()". This is the start point of the program, /// which is executed from the MapsetVerifier application when its .dll file is provided in "/checks". </summary> public static void Run() { // Ensures that numbers are displayed consistently across cultures, for example // that decimals are indicated by a period and not a comma. CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; // CheckerRegistry is what MapsetVerifier uses to determine which checks to run, so by adding an // instance of a check to it, it will be executed and loaded exactly like any other check. // General > Audio CheckerRegistry.RegisterCheck(new CheckAudioInVideo()); CheckerRegistry.RegisterCheck(new CheckBitrate()); CheckerRegistry.RegisterCheck(new CheckHitSoundDelay()); CheckerRegistry.RegisterCheck(new CheckHitSoundFormat()); CheckerRegistry.RegisterCheck(new CheckHitSoundImbalance()); CheckerRegistry.RegisterCheck(new CheckHitSoundLength()); CheckerRegistry.RegisterCheck(new CheckMultipleAudio()); // General > Files CheckerRegistry.RegisterCheck(new CheckUnusedFiles()); CheckerRegistry.RegisterCheck(new CheckUpdateValidity()); CheckerRegistry.RegisterCheck(new CheckZeroBytes()); // General > Metadata CheckerRegistry.RegisterCheck(new CheckAdditionalMarkers()); CheckerRegistry.RegisterCheck(new CheckInconsistentMetadata()); CheckerRegistry.RegisterCheck(new CheckMarkerFormat()); CheckerRegistry.RegisterCheck(new CheckMarkerSpacing()); CheckerRegistry.RegisterCheck(new CheckUnicode()); CheckerRegistry.RegisterCheck(new CheckVersionFormat()); // General > Resources CheckerRegistry.RegisterCheck(new CheckBgPresence()); CheckerRegistry.RegisterCheck(new CheckBgResolution()); CheckerRegistry.RegisterCheck(new CheckMultipleVideo()); CheckerRegistry.RegisterCheck(new CheckSpriteResolution()); CheckerRegistry.RegisterCheck(new CheckVideoOffset()); CheckerRegistry.RegisterCheck(new CheckVideoResolution()); // All Modes > Compose CheckerRegistry.RegisterCheck(new CheckAbnormalNodes()); CheckerRegistry.RegisterCheck(new CheckAudioUsage()); CheckerRegistry.RegisterCheck(new CheckConcurrent()); CheckerRegistry.RegisterCheck(new CheckDrainTime()); CheckerRegistry.RegisterCheck(new CheckInvisibleSlider()); // All Modes > Events CheckerRegistry.RegisterCheck(new CheckBreaks()); CheckerRegistry.RegisterCheck(new CheckStoryHitSounds()); // All Modes > Hit Sounds CheckerRegistry.RegisterCheck(new CheckHitSounds()); CheckerRegistry.RegisterCheck(new CheckMuted()); // All Modes > Settings CheckerRegistry.RegisterCheck(new CheckDiffSettings()); CheckerRegistry.RegisterCheck(new CheckInconsistentSettings()); CheckerRegistry.RegisterCheck(new CheckTickRate()); // All Modes > Spread CheckerRegistry.RegisterCheck(new CheckLowestDiff()); // All Modes > Timing CheckerRegistry.RegisterCheck(new CheckBehindLine()); CheckerRegistry.RegisterCheck(new CheckConcurrentLines()); CheckerRegistry.RegisterCheck(new CheckFirstLine()); CheckerRegistry.RegisterCheck(new CheckInconsistentLines()); CheckerRegistry.RegisterCheck(new CheckKiaiUnsnap()); CheckerRegistry.RegisterCheck(new CheckPreview()); CheckerRegistry.RegisterCheck(new CheckUnsnaps()); CheckerRegistry.RegisterCheck(new CheckUnusedLines()); CheckerRegistry.RegisterCheck(new CheckWrongSnapping()); // Standard > Compose CheckerRegistry.RegisterCheck(new CheckAmbiguity()); CheckerRegistry.RegisterCheck(new CheckBurai()); CheckerRegistry.RegisterCheck(new CheckNinjaSpinner()); CheckerRegistry.RegisterCheck(new CheckObscuredReverse()); CheckerRegistry.RegisterCheck(new CheckOffscreen()); // Standard > Settings CheckerRegistry.RegisterCheck(new CheckDefaultColours()); CheckerRegistry.RegisterCheck(new CheckLuminosity()); // Standard > Spread CheckerRegistry.RegisterCheck(new CheckCloseOverlap()); CheckerRegistry.RegisterCheck(new CheckMultipleReverses()); CheckerRegistry.RegisterCheck(new CheckShortSliders()); CheckerRegistry.RegisterCheck(new CheckSpaceVariation()); CheckerRegistry.RegisterCheck(new CheckSpinnerRecovery()); CheckerRegistry.RegisterCheck(new CheckStackLeniency()); }