revert back main page test

revert back main page test

--- osu.Game.Tests/Visual/Online/TestSceneWikiMainPage.cs
+++ osu.Game.Tests/Visual/Online/TestSceneWikiMainPage.cs
@@ -1,7 +1,6 @@
 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
 // See the LICENCE file in the repository root for full licence text.

-using NUnit.Framework;
 using osu.Framework.Allocation;
 using osu.Framework.Graphics;
 using osu.Framework.Graphics.Containers;
@@ -16,10 +15,7 @@
         [Cached]
         private readonly OverlayColourProvider overlayColour = new OverlayColourProvider(OverlayColourScheme.Orange);

-        private BasicScrollContainer container;
-
-        [SetUp]
-        public void Setup() => Schedule(() =>
+        public TestSceneWikiMainPage()
         {
             Children = new Drawable[]
             {
@@ -28,103 +24,20 @@
                     Colour = overlayColour.Background5,
                     RelativeSizeAxes = Axes.Both,
                 },
-                container = new BasicScrollContainer
+                new BasicScrollContainer
                 {
                     RelativeSizeAxes = Axes.Both,
                     Padding = new MarginPadding(20),
+                    Child = new WikiMainPage
+                    {
+                        Markdown = main_page_markdown
+                    }
                 }
             };
-        });
-
-        [Test]
-        public void TestWikiMainPage()
-        {
-            AddStep("Show main page", () =>
-            {
-                container.Child = new WikiMainPage
-                {
-                    Markdown = main_page_markdown,
-                };
-            });
-        }
-
-        [Test]
-        public void TestNonFullWidthLayout()
-        {
-            AddStep("Show Layout", () =>
-            {
-                container.Child = new WikiMainPage
-                {
-                    Markdown = non_full_width,
-                };
-            });
-        }
-
-        [Test]
-        public void TestFullWidthAtTheEnd()
-        {
-            AddStep("Show layout", () =>
-            {
-                container.Child = new WikiMainPage
-                {
-                    Markdown = full_width_end,
-                };
-            });
-        }
-
-        [Test]
-        public void TestFullWidthAtTheStartAndEnd()
-        {
-            AddStep("Show layout", () =>
-            {
-                container.Child = new WikiMainPage
-                {
-                    Markdown = full_width_start_end,
-                };
-            });
-        }
-
-        [Test]
-        public void TestFullWidthInTheMiddle()
-        {
-            AddStep("Show layout", () =>
-            {
-                container.Child = new WikiMainPage
-                {
-                    Markdown = full_width_in_the_middle,
-                };
-            });
-        }
-
-        [Test]
-        public void TestFullWidthStacking()
-        {
-            AddStep("Show layout", () =>
-            {
-                container.Child = new WikiMainPage
-                {
-                    Markdown = full_width_stack,
-                };
-            });
         }

         // From https://osu.ppy.sh/api/v2/wiki/en/Main_Page
         private const string main_page_markdown =
             "---\nlayout: main_page\n---\n\n\n\n
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
-
-        private const string non_full_width =
-            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
-
-        private const string full_width_end =
-            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n";
-
-        private const string full_width_start_end =
-            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n";
-
-        private const string full_width_in_the_middle =
-            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
-
-        private const string full_width_stack =
-            "
\nWelcome to the osu! wiki, a project containing a wide range of osu! related information.\n
\n\n
\n
\n\n# Game client\n\n[Interface](/wiki/Interface) • [Options](/wiki/Options) • [Visual settings](/wiki/Visual_Settings) • [Shortcut key reference](/wiki/Shortcut_key_reference) • [Configuration file](/wiki/osu!_Program_Files/User_Configuration_File) • [Program files](/wiki/osu!_Program_Files)\n\n[File formats](/wiki/osu!_File_Formats): [.osz](/wiki/osu!_File_Formats/Osz_(file_format)) • [.osk](/wiki/osu!_File_Formats/Osk_(file_format)) • [.osr](/wiki/osu!_File_Formats/Osr_(file_format)) • [.osu](/wiki/osu!_File_Formats/Osu_(file_format)) • [.osb](/wiki/osu!_File_Formats/Osb_(file_format)) • [.db](/wiki/osu!_File_Formats/Db_(file_format))\n\n
\n
\n\n# Gameplay\n\n[Game modes](/wiki/Game_mode): [osu!](/wiki/Game_mode/osu!) • [osu!taiko](/wiki/Game_mode/osu!taiko) • [osu!catch](/wiki/Game_mode/osu!catch) • [osu!mania](/wiki/Game_mode/osu!mania)\n\n[Beatmap](/wiki/Beatmap) • [Hit object](/wiki/Hit_object) • [Mods](/wiki/Game_modifier) • [Score](/wiki/Score) • [Replay](/wiki/Replay) • [Multi](/wiki/Multi)\n\n
\n
\n\n# [Beatmap editor](/wiki/Beatmap_Editor)\n\nSections: [Compose](/wiki/Beatmap_Editor/Compose) • [Design](/wiki/Beatmap_Editor/Design) • [Timing](/wiki/Beatmap_Editor/Timing) • [Song setup](/wiki/Beatmap_Editor/Song_Setup)\n\nComponents: [AiMod](/wiki/Beatmap_Editor/AiMod) • [Beat snap divisor](/wiki/Beatmap_Editor/Beat_Snap_Divisor) • [Distance snap](/wiki/Beatmap_Editor/Distance_Snap) • [Menu](/wiki/Beatmap_Editor/Menu) • [SB load](/wiki/Beatmap_Editor/SB_Load) • [Timelines](/wiki/Beatmap_Editor/Timelines)\n\n[Beatmapping](/wiki/Beatmapping) • [Difficulty](/wiki/Beatmap/Difficulty) • [Mapping techniques](/wiki/Mapping_Techniques) • [Storyboarding](/wiki/Storyboarding)\n\n
\n
\n\n# Beatmap submission and ranking\n\n[Submission](/wiki/Submission) • [Modding](/wiki/Modding) • [Ranking procedure](/wiki/Beatmap_ranking_procedure) • [Mappers' Guild](/wiki/Mappers_Guild) • [Project Loved](/wiki/Project_Loved)\n\n[Ranking criteria](/wiki/Ranking_Criteria): [osu!](/wiki/Ranking_Criteria/osu!) • [osu!taiko](/wiki/Ranking_Criteria/osu!taiko) • [osu!catch](/wiki/Ranking_Criteria/osu!catch) • [osu!mania](/wiki/Ranking_Criteria/osu!mania)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Getting started\n\n[Welcome](/wiki/Welcome) • [Installation](/wiki/Installation) • [Registration](/wiki/Registration) • [Help Centre](/wiki/Help_Centre) • [FAQ](/wiki/FAQ)\n\n
\n
\n\n# Community\n\n[Tournaments](/wiki/Tournaments) • [Skinning](/wiki/Skinning) • [Projects](/wiki/Projects) • [Guides](/wiki/Guides) • [osu!dev Discord server](/wiki/osu!dev_Discord_server) • [How you can help](/wiki/How_You_Can_Help!) • [Glossary](/wiki/Glossary)\n\n
\n
\n\n# People\n\n[The Team](/wiki/People/The_Team): [Developers](/wiki/People/The_Team/Developers) • [Global Moderation Team](/wiki/People/The_Team/Global_Moderation_Team) • [Support Team](/wiki/People/The_Team/Support_Team) • [Nomination Assessment Team](/wiki/People/The_Team/Nomination_Assessment_Team) • [Beatmap Nominators](/wiki/People/The_Team/Beatmap_Nominators) • [osu! Alumni](/wiki/People/The_Team/osu!_Alumni) • [Project Loved Team](/wiki/People/The_Team/Project_Loved_Team)\n\nOrganisations: [osu! UCI](/wiki/Organisations/osu!_UCI)\n\n[Community Contributors](/wiki/People/Community_Contributors) • [Users with unique titles](/wiki/People/Users_with_unique_titles)\n\n
\n
\n\n# For developers\n\n[API](/wiki/osu!api) • [Bot account](/wiki/Bot_account) • [Brand identity guidelines](/wiki/Brand_identity_guidelines)\n\n
\n
\n\n# About the wiki\n\n[Sitemap](/wiki/Sitemap) • [Contribution guide](/wiki/osu!_wiki_Contribution_Guide) • [Article styling criteria](/wiki/Article_Styling_Criteria) • [News styling criteria](/wiki/News_Styling_Criteria)\n\n
\n
\n";
     }
 }


[xcode] Last known type should be sourcecode.cpp.cpp even for C files. There is a filetype hierarchy apparently, with sourcecode for everything, sourcecode.cpp for everything C++ wise, and then sourcecode.cpp.cpp for C++ source files. XCode notices .c files get defaulted to C syntax. The files now get parsed

--- packages/XCodeBuilder/dev/Scripts/PBXFileReference.cs
+++ packages/XCodeBuilder/dev/Scripts/PBXFileReference.cs
@@ -52,7 +52,7 @@
             }
             else if (this.IsSourceCode)
             {
-                writer.WriteLine("\t\t{0} /* {1} */ = {{isa = PBXFileReference; lastKnownFileType = sourcecode.c; path = {2}; sourceTree = SOURCE_ROOT; }};", this.UUID, this.ShortPath, this.RelativePath);
+                writer.WriteLine("\t\t{0} /* {1} */ = {{isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = {2}; sourceTree = SOURCE_ROOT; }};", this.UUID, this.ShortPath, this.RelativePath);
             }
             else
             {


Fix InvalidCastException in WinForms app (#89)

Fixes #87.

--- NCrontabViewer/MainForm.Designer.cs
+++ NCrontabViewer/MainForm.Designer.cs
@@ -41,7 +41,6 @@
             this._statusBar = new System.Windows.Forms.StatusStrip();
             this._statusBarPanel = new System.Windows.Forms.ToolStripStatusLabel();
             this._errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-            ((System.ComponentModel.ISupportInitialize)(this._statusBarPanel)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this._errorProvider)).BeginInit();
             this.SuspendLayout();
             //
@@ -173,7 +172,6 @@
             this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
             this.Name = "MainForm";
             this.Text = "Crontab Viewer";
-            ((System.ComponentModel.ISupportInitialize)(this._statusBarPanel)).EndInit();
             ((System.ComponentModel.ISupportInitialize)(this._errorProvider)).EndInit();
             this.ResumeLayout(false);
             this.PerformLayout();


Add one way tracks.

Add one way tracks.

--- Initializer.cs
+++ Initializer.cs
@@ -51,32 +51,47 @@
             CreatePrefab("Station Track Eleva", "Train Station Track", SetupElevatedPrefab);
             CreatePrefab("Station Track Tunnel", "Train Station Track", SetupTunnelPrefab);
             CreatePrefab("Station Track Sunken", "Train Station Track", SetupSunkenPrefab);
+            var oneWay = CreatePrefab("Oneway Train Track", "Train Track", SetupOneWayPrefab);
+            var oneWayTunnel = CreatePrefab("Oneway Train Track Tunnel", "Train Track Tunnel", SetupOneWayPrefab);
+            var oneWayBridge = CreatePrefab("Oneway Train Track Bridge", "Train Track Bridge", SetupOneWayPrefab);
+            var oneWayElevated = CreatePrefab("Oneway Train Track Elevated", "Train Track Elevated", SetupOneWayPrefab);
+            var oneWaySlope = CreatePrefab("Oneway Train Track Slope", "Train Track Slope", SetupOneWayPrefab);
+            if (oneWay != null)
+            {
+                var ai = oneWay.GetComponent<TrainTrackAI>();
+                ai.m_tunnelInfo = oneWayTunnel;
+                ai.m_bridgeInfo = oneWayBridge;
+                ai.m_elevatedInfo = oneWayElevated;
+                ai.m_slopeInfo = oneWaySlope;
+            }
             PrefabCollection<NetInfo>.InitializePrefabs("Rail Extensions", _customPrefabs.Values.ToArray(), null);
         }

-        private void CreatePrefab(string newPrefabName, string originalPrefabName, Action<NetInfo, NetInfo> setupAction)
+        private NetInfo CreatePrefab(string newPrefabName, string originalPrefabName, Action<NetInfo, NetInfo> setupAction)
         {
             var originalPrefab = FindOriginalPrefab(originalPrefabName);

             if (originalPrefab == null)
             {
                 Debug.LogErrorFormat("ElevatedTrainStationTrack - Prefab '{0}' not found (required for '{1}')", originalPrefabName, newPrefabName);
-                return;
+                return null;
             }
             if (_customPrefabs.ContainsKey(newPrefabName))
             {
-                return;
+                return _customPrefabs[newPrefabName];
             }
             var newPrefab = Util.ClonePrefab(originalPrefab, newPrefabName, transform);
             if (newPrefab != null)
             {
                 setupAction.Invoke(newPrefab, originalPrefab);
                 _customPrefabs.Add(newPrefabName, newPrefab);
+                return newPrefab;
             }
             else
             {
                 Debug.LogErrorFormat("ElevatedTrainStationTrack - Couldn't make prefab '{0}'", newPrefabName);
             }
+            return null;
         }

         private static NetInfo FindOriginalPrefab(string originalPrefabName)
@@ -202,5 +217,17 @@
             sunkenPrefab.m_lowerTerrain = false;
             sunkenPrefab.m_availableIn = ItemClass.Availability.GameAndAsset;
         }
+
+        private static void SetupOneWayPrefab(NetInfo newPrefab, NetInfo originalPrefab)
+        {
+            foreach (var lane in newPrefab.m_lanes)
+            {
+                if (lane.m_direction == NetInfo.Direction.Backward)
+                {
+                    lane.m_direction = NetInfo.Direction.None;
+                }
+            }
+            newPrefab.m_hasBackwardVehicleLanes = false;
+        }
     }
 }


Fixed bug when using MySql to view securities portfolio (2 DataReaders going at once).

--- Investments.cs
+++ Investments.cs
@@ -78,7 +78,7 @@
 				+ SecurityValues(Utils.Today) + @") AS SV
 JOIN Account ON idAccount = SV.AccountId
 JOIN Security ON idSecurity = SecurityId
-WHERE ParentAccountid = " + id)
+WHERE ParentAccountid = " + id).ToList()
 						  let cb = SecurityCost(p.AsInt("AccountId"))
 						  select new JObject(p).AddRange(
 							  "CostBasis", cb,


remove redundant lines

remove redundant lines

--- Nez-PCL/Graphics/Batcher/Batcher.cs
+++ Nez-PCL/Graphics/Batcher/Batcher.cs
@@ -91,9 +91,6 @@
 			_spriteEffect = new Effect( graphicsDevice, _spriteEffectCode );
 			_spriteMatrixTransformParam = _spriteEffect.Parameters["MatrixTransform"];
 			_spriteEffectPass = _spriteEffect.CurrentTechnique.Passes[0];
-
-			_beginCalled = false;
-			_numSprites = 0;

 			_projectionMatrix = new Matrix(
 				0f, //(float)( 2.0 / (double)viewport.Width ),
@@ -629,7 +626,7 @@
 			);
 			_spriteMatrixTransformParam.SetValue( _matrixTransformMatrix );

-			// FIXME: When is this actually applied?
+			// we have to Apply here because custom effects often wont have a vertex shader and we need the default SpriteEffect's
 			_spriteEffectPass.Apply();
 		}


Simplified version parsing code massively by using a regex with capturing groups.

--- Nodejs/Product/Npm/SemverVersion.cs
+++ Nodejs/Product/Npm/SemverVersion.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;

 namespace Microsoft.NodejsTools.Npm
@@ -14,70 +15,34 @@
     public struct SemverVersion
     {

+        private static readonly Regex RegexSemver = new Regex(
+            "^(?<major>[0-9]+)"
+            + "\\.(?<minor>[0-9]+)"
+            + "\\.(?<patch>[0-9]+)"
+            + "(?:-(?<prerelease>[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*))?"
+            + "(?:\\+(?<buildmetadata>[0-9A-Za-z-]+))?$",
+            RegexOptions.IgnoreCase | RegexOptions.Singleline );
+
         public static SemverVersion Parse( string versionString )
         {
-            string  normalPart = versionString,
-                    optionalParts = null;
-            var index = normalPart.IndexOf( '-' );
-
-            if ( index >= 0 )
+            var matches = RegexSemver.Matches(versionString);
+            if ( matches.Count != 1 )
             {
-                normalPart      = normalPart.Substring( 0, index );
-                optionalParts   = versionString.Substring( index + 1 );
+                throw new SemverVersionFormatException(
+                    string.Format("Invalid semantic version: '{0}'. The version number must consist of three non-negative numeric parts of the form MAJOR.MINOR.PATCH, with optional pre-release and/or build metadata. The optional parts may only contain characters in the set [0-9A-Za-z-].",
+                    versionString ) );
             }

-            var normalParts = normalPart.Split('.');
-            if (normalParts.Length != 3)
-            {
-                throw new SemverVersionFormatException(
-                    string.Format("Invalid semantic version: '{0}'. Unable to parse normal version from token '{1}'. The version number must consist of three non-negative numeric parts of the form MAJOR.MINOR.PATCH, with optional pre-release and/or build metadata.",
-                    versionString,
-                    normalParts.Length > 0 ? normalParts[0] : "<<no token available>>" ));
-            }
+            var match           = matches[ 0 ];
+            var preRelease      = match.Groups[ "prerelease" ];
+            var buildMetadata   = match.Groups[ "buildmetadata" ];

-            int major,
-                minor,
-                patch;
-
-            try
-            {
-                major = int.Parse(normalParts[0]);
-                minor = int.Parse(normalParts[1]);
-                patch = int.Parse( normalParts[ 2 ] );
-            }
-            catch ( FormatException fe )
-            {
-                throw new SemverVersionFormatException(
-                    string.Format(
-                        "Invalid semantic version: '{0}'. Unable to parse normal version from token '{1}'. The version number must consist of three numeric parts of the form MAJOR.MINOR.PATCH, with optional pre-release and/or build metadata, and may not contain negative numbers in any section.",
-                        versionString,
-                        normalPart[0]),
-                    fe );
-            }
-
-            string  preReleaseVersion   = null,
-                    buildMetadata       = null;
-
-            if ( null != optionalParts )
-            {
-                var parts = optionalParts.Split('+');
-                preReleaseVersion = parts[0];
-
-                if (parts.Length > 1)
-                {
-                    if (parts.Length > 2)
-                    {
-                        throw new SemverVersionFormatException(
-                            string.Format(
-                                "Invalid semantic version: '{0}'. Cannot have more than one build metadata chunk in a semantic version.",
-                                versionString) );
-                    }
-
-                    buildMetadata = parts[1];
-                }
-            }
-
-            return new SemverVersion( major, minor, patch, preReleaseVersion, buildMetadata );
+            return new SemverVersion(
+                int.Parse( match.Groups[ "major" ].Value ),
+                int.Parse( match.Groups[ "minor" ].Value ),
+                int.Parse( match.Groups[ "patch" ].Value ),
+                preRelease.Success ? preRelease.Value : null,
+                buildMetadata.Success ? buildMetadata.Value : null );
         }

         private int m_Major;
@@ -121,14 +86,14 @@
             if ( ! IsValidOptionalFragment( preReleaseVersion ) )
             {
                 throw new ArgumentException(
-                    string.Format( "Invalid pre-release version: '{0}'. Must be a dot separated sequence of identifiers containing only characters [0-9a-zA-Z].", preReleaseVersion ),
+                    string.Format( "Invalid pre-release version: '{0}'. Must be a dot separated sequence of identifiers containing only characters [0-9A-Za-z-].", preReleaseVersion ),
                     "preReleaseVersion" );
             }

             if ( ! IsValidOptionalFragment( buildMetadata ) )
             {
                 throw new ArgumentException(
-                    string.Format( "Invalid build metadata: '{0}'. Must be a dot separated sequence of identifiers containing only characters [0-9a-zA-Z].", preReleaseVersion ),
+                    string.Format( "Invalid build metadata: '{0}'. Must be a dot separated sequence of identifiers containing only characters [0-9A-Za-z-].", preReleaseVersion ),
                     "buildMetadata" );
             }


Bumped version number to 1.0.1...should have been done with changes in r15.

--- Obfuscar/Properties/AssemblyInfo.cs
+++ Obfuscar/Properties/AssemblyInfo.cs
@@ -55,5 +55,5 @@
 //      Build Number
 //      Revision
 //
-[assembly: AssemblyVersion( "1.0.0.1" )]
-[assembly: AssemblyFileVersion( "1.0.0.1" )]
+[assembly: AssemblyVersion( "1.0.1" )]
+[assembly: AssemblyFileVersion( "1.0.1" )]


IAssigneesClient fixes

IAssigneesClient fixes

--- Octokit/Clients/IAssigneesClient.cs
+++ Octokit/Clients/IAssigneesClient.cs
@@ -24,7 +24,7 @@
         /// </summary>
         /// <param name="owner">The owner of the repository</param>
         /// <param name="name">The name of the repository</param>
-        /// <param name="options">The options to chagne API's response.</param>
+        /// <param name="options">The options to change API's response.</param>
         /// <returns></returns>
         Task<IReadOnlyList<User>> GetAllForRepository(string owner, string name, ApiOptions options);


* Switching back to MySql

* Switching back to MySql

--- OpenGridServices.UserServer/Main.cs
+++ OpenGridServices.UserServer/Main.cs
@@ -48,6 +48,7 @@
     public class OpenUser_Main : BaseServer, conscmd_callback
     {
         private string ConfigDll = "OpenUser.Config.UserConfigDb4o.dll";
+        private string StorageDll = "OpenGrid.Framework.Data.MySQL.dll";
         private UserConfig Cfg;

         public UserManager m_userManager; // Replaces below.
@@ -94,7 +95,7 @@
             MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "Main.cs:Startup() - Establishing data connection");
             m_userManager = new UserManager();
             m_userManager._config = Cfg;
-            m_userManager.AddPlugin("OpenGrid.Framework.Data.DB4o.dll");
+            m_userManager.AddPlugin(StorageDll);

             MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW,"Main.cs:Startup() - Starting HTTP process");
             BaseHttpServer httpServer = new BaseHttpServer(8002);


Add loading of palette for the FontContext

--- OpenKh.Kh2/Contextes/FontContext.cs
+++ OpenKh.Kh2/Contextes/FontContext.cs
@@ -1,6 +1,8 @@
 using OpenKh.Imaging;
+using OpenKh.Kh2.System;
 using System.Collections.Generic;
 using System.IO;
+using System.Linq;

 namespace OpenKh.Kh2.Contextes
 {
@@ -25,6 +27,8 @@
         public byte[] SpacingEvent { get => spacingEvent; set => spacingEvent = value; }
         public byte[] SpacingIcon { get => spacingIcon; set => spacingIcon = value; }

+        public Dictionary<int, Ftst.Entry> palette;
+
         public void Read(IEnumerable<Bar.Entry> entries)
         {
             foreach (var entry in entries)
@@ -39,6 +43,10 @@
                         break;
                     case "icon":
                         ReadIcon(entry, ref imageIcon, ref spacingIcon, 256, 160);
+                        break;
+                    case "ftst":
+                        if (entry.Type == Bar.EntryType.Msg)
+                            palette = Ftst.Read(entry.Stream).ToDictionary(x => x.Id, x => x);
                         break;
                 }
             }


Update Hello_Neyo

Update Hello_Neyo

--- Hello_Neyo.cs
+++ Hello_Neyo.cs
@@ -1,5 +1,5 @@
 public class Hello_Neyo{
-	static void Main(){
+	static void Main(string[] args){
 		System.Console.WriteLine("Hola Neyo!");
 		System.Console.ReadLine();
 	}


Fixed null reference exception in complex file Fixed grouping of channels with same channel name in multiple groups

--- src/TDMSReader/File.cs
+++ src/TDMSReader/File.cs
@@ -58,14 +58,15 @@
             foreach (var groupName in metadata.Where(x => x.Path.Length > 1 && !groups.ContainsKey(x.Path[0])).Select(x => x.Path[0]))
                 groups.Add(groupName, new Group(groupName, new Dictionary<string, object>()));
         }
-
+
         private static void LoadChannels(IDictionary<string, Group> groups, IEnumerable<Reader.Metadata> metadata, Reader reader)
         {
-            var channelMetadata = metadata.Where(x => x.Path.Length == 2).
-                                           GroupBy(x => x.Path[1]).
-                                           Join(groups, x => x.First().Path[0], x => x.Key, (c, g) => Tuple.Create(g.Value, c));
+            var channelMetadata = metadata
+                .Where(x => x.Path.Length == 2)
+                .GroupBy(x => Tuple.Create(x.Path[0], x.Path[1]))
+                .Join(groups, x => x.First().Path[0], x => x.Key, (c, g) => Tuple.Create(g.Value, c));
             foreach (var channel in channelMetadata)
-                channel.Item1.Channels.Add(channel.Item2.First().Path[1], new Channel(channel.Item2.First().Path[1],
+                channel.Item1.Channels.Add(channel.Item2.First().Path[1], new Channel(channel.Item2.First().Path[1],
                     channel.Item2.OrderByDescending(y => y.Properties.Count).First().Properties,
                     channel.Item2.Where(x => x.RawData.Count > 0).Select(x => x.RawData), reader));
         }
@@ -89,15 +90,18 @@
                     if (m.RawData.Count == 0 && prevSegment != null && m.Path.Length > 1)
                     {
                         // apply previous metadata if available
-                        var prevMetaData = prevSegment.Item2.First(md => md.Path.Length > 1 && md.Path[1] == m.Path[1]);
-                        m.RawData.Count = prevMetaData.RawData.Count;
-                        m.RawData.DataType = prevMetaData.RawData.DataType;
-                        m.RawData.ClrDataType = prevMetaData.RawData.ClrDataType;
-                        m.RawData.Offset = segment.RawDataOffset + rawDataSize;
-                        m.RawData.IsInterleaved = prevMetaData.RawData.IsInterleaved;
-                        m.RawData.InterleaveStride = prevMetaData.RawData.InterleaveStride;
-                        m.RawData.Size = prevMetaData.RawData.Size;
-                        m.RawData.Dimension = prevMetaData.RawData.Dimension;
+                        var prevMetaData = prevSegment.Item2.FirstOrDefault(md => md.Path.Length > 1 && md.Path[1] == m.Path[1]);
+                        if (prevMetaData != null)
+                        {
+                            m.RawData.Count = prevMetaData.RawData.Count;
+                            m.RawData.DataType = prevMetaData.RawData.DataType;
+                            m.RawData.ClrDataType = prevMetaData.RawData.ClrDataType;
+                            m.RawData.Offset = segment.RawDataOffset + rawDataSize;
+                            m.RawData.IsInterleaved = prevMetaData.RawData.IsInterleaved;
+                            m.RawData.InterleaveStride = prevMetaData.RawData.InterleaveStride;
+                            m.RawData.Size = prevMetaData.RawData.Size;
+                            m.RawData.Dimension = prevMetaData.RawData.Dimension;
+                        }
                     }
                     if (m.RawData.IsInterleaved && segment.NextSegmentOffset <= 0)
                     {


Specifying the /deleteuserinstances argument to the test application now attempts to delete all user instances of SQL LocalDB on the local machine. This is mostly for use as a convenience tool for development use to tidy things up.

--- src/TestApp/Program.cs
+++ src/TestApp/Program.cs
@@ -25,11 +25,12 @@
         /// <summary>
         /// The main entry point to the application.
         /// </summary>
+        /// <param name="args">The command-line arguments passed to the application.</param>
         [Diagnostics.CodeAnalysis.SuppressMessage(
             "Microsoft.Usage",
             "CA2202:Do not dispose objects multiple times",
             Justification = "It isn't.")]
-        internal static void Main()
+        internal static void Main(string[] args)
         {
             PrintBanner();

@@ -39,6 +40,13 @@
             {
                 Console.WriteLine(SR.SqlLocalDbApi_NotInstalledFormat, Environment.MachineName);
                 return;
+            }
+
+            if (args != null &&
+                args.Length == 1 &&
+                string.Equals(args[0], "/deleteuserinstances", StringComparison.OrdinalIgnoreCase))
+            {
+                SqlLocalDbApi.DeleteUserInstances(deleteFiles: true);
             }

             ISqlLocalDbProvider provider = new SqlLocalDbProvider();


fixed named pipes interpretation

fixed named pipes interpretation

--- bin/projects/dbatools/dbatools/Parameter/DbaInstanceParameter.cs
+++ bin/projects/dbatools/dbatools/Parameter/DbaInstanceParameter.cs
@@ -268,6 +268,8 @@
                 {
                     throw new ArgumentException(String.Format("Failed to interpret named pipe path notation: {0} | {1}", InputObject, e.Message), e);
                 }
+
+                return;
             }

             // Connection String interpretation


Change ContainsWord to use regex instead

--- Extensions/Ext.Strings.cs
+++ Extensions/Ext.Strings.cs
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Net;
 using System.Text;
+using System.Text.RegularExpressions;
 using JetBrains.Annotations;

 namespace Tyrrrz.Extensions
@@ -505,33 +506,7 @@
             word = word.Trim();

             if (str.Equals(word, DefaultStringComparison)) return true;
-
-            // Find the position of word
-            var wordBoundaries = new[] { '\n', '\r', ' ' };
-            foreach (int pos in str.IndicesOf(word))
-            {
-                bool leftCheck = false, rightCheck = false;
-
-                // See if the word starts at the start or ends at the end
-                if (pos == 0) leftCheck = true;
-                if (pos + word.Length == str.Length) rightCheck = true;
-
-                // Check the bounding characters
-                if (!leftCheck)
-                {
-                    char leftChar = str[pos - 1];
-                    if (wordBoundaries.Contains(leftChar)) leftCheck = true;
-                }
-                if (!rightCheck)
-                {
-                    char rightChar = str[pos + word.Length];
-                    if (wordBoundaries.Contains(rightChar)) rightCheck = true;
-                }
-
-                if (leftCheck && rightCheck) return true;
-            }
-
-            return false;
+            return Regex.IsMatch(str, @"\b(hi)\b");
         }

         /// <summary>


fixed index out of bounds

fixed index out of bounds

--- FHSDK/Sync/FHSyncUtils.cs
+++ FHSDK/Sync/FHSyncUtils.cs
@@ -105,7 +105,7 @@
             var result = 0;
             for (var i = 0; i < array1.Length; i++)
             {
-                result = order.IndexOf(array1[i]) - order.IndexOf(array2[i]);
+                result = order.IndexOf(array1[i]) - array2.Length < i ? order.IndexOf(array2[i]) : 0;
                 if (result != 0)
                 {
                     break;


Removed notifier window from Alt Tab

Removed notifier window from Alt Tab

--- Feedling/Notifier.xaml.cs
+++ Feedling/Notifier.xaml.cs
@@ -46,6 +46,7 @@
                     Top = corner.Y - ActualHeight;
                 }
             }));
+            NativeMethods.HideFromAltTab(this);
         }

         private void Button_Click(object sender, RoutedEventArgs e)


读写锁增加try finally

读写锁增加try finally

--- FileManager/FileBuffer.cs
+++ FileManager/FileBuffer.cs
@@ -157,7 +157,6 @@
                 {
                     if (fileLengthDictionary.ContainsKey(url) || totalFreeSpace < fileLength)//avoid the error causing by other saving action
                     {
-                        //log.Warn("Warning: File "+url+"is");
                         return false;
                     }
                     LruList.AddFirst(url);
@@ -204,8 +203,8 @@
                     }
                     urlToPageDic.Add(url, urlPages);//added to the dictionnary which is used as a page table
                     fileLengthDictionary.Add(url, fileLength);//add to the dictionnary when it has been saved in the memory
-                }
-                log.Debug("Add file: " + url + " in buffer");
+                    log.Debug("Add file: " + url + " in buffer");
+                }
             }
             return true;
         }
@@ -274,23 +273,28 @@
         {
             // lock (LockRDConflict)//avoid the conflict when read the file which has been deleted
             RWLock.AcquireWriterLock(FileManager.Properties.FileManagerSettings.Default.LockTimeOut);
-            if (totalFreeSpace > fileLength | !LruList.Remove(url))//when the url is not in the LruList
-            {
-                return false;
-            }
-            string pageString = urlToPageDic[url];
-            urlToPageDic.Remove(url);
-            fileLengthDictionary.Remove(url);
-            string[] pageNumStr = pageString.Split(',');
-            int pageNumInt = 0;
-            for (int i = 0; i < pageNumStr.Length; ++i)
-            {
-                pageNumInt = Convert.ToInt32(pageNumStr[i]);
-                freePageStack.Push(pageNumInt);//release the buffer
-                totalFreeSpace += pageSize; //get the new size of FreeSpace
-            }
-
-            RWLock.ReleaseWriterLock();
+            try
+            {
+                if (totalFreeSpace > fileLength | !LruList.Remove(url))//when the url is not in the LruList
+                {
+                    return false;
+                }
+                string pageString = urlToPageDic[url];
+                urlToPageDic.Remove(url);
+                fileLengthDictionary.Remove(url);
+                string[] pageNumStr = pageString.Split(',');
+                int pageNumInt = 0;
+                for (int i = 0; i < pageNumStr.Length; ++i)
+                {
+                    pageNumInt = Convert.ToInt32(pageNumStr[i]);
+                    freePageStack.Push(pageNumInt);//release the buffer
+                    totalFreeSpace += pageSize; //get the new size of FreeSpace
+                }
+            }
+            finally
+            {
+                RWLock.ReleaseWriterLock();
+            }

             return true;
         }
@@ -318,48 +322,50 @@
             if (fileLengthDictionary.ContainsKey(url))//if the file was exsited in filebuffer
             {
                 RWLock.AcquireReaderLock(FileManager.Properties.FileManagerSettings.Default.LockTimeOut);
-                if (!fileLengthDictionary.ContainsKey(url))//when the delete part has delete the file in the buffer,
-                //due to  the wait the last contain is not effective now,we need to make sure if the file exist or not again
-                {
-                    Byte[] readBuffer = FileSystem.GetInstance().readFile(url);
-                    SaveFile(readBuffer, url);//save the file to fileBuffer in memory
+                try
+                //lock (LockRDConflict)
+                {
+                    if (!fileLengthDictionary.ContainsKey(url))//when the delete part has delete the file in the buffer,
+                    //due to  the wait the last contain is not effective now,we need to make sure if the file exist or not again
+                    {
+                        Byte[] readBuffer = FileSystem.GetInstance().readFile(url);
+                        SaveFile(readBuffer, url);//save the file to fileBuffer in memory
+                        statusCode = 200;
+                        return readBuffer;
+                    }
+                    long fileLength = fileLengthDictionary[url];
+                    Byte[] fileByteStream = new Byte[fileLength];
+                    string pageString = urlToPageDic[url];
+                    string[] pageNumStr = pageString.Split(',');
+                    int pageNumInt = 0;
+                    int fileOffset = 0;
+                    for (int i = 0; i < pageNumStr.Length; ++i)
+                    {
+                        pageNumInt = Convert.ToInt32(pageNumStr[i]);
+                        if (fileLength - fileOffset >= pageSize)
+                        {
+                            System.Buffer.BlockCopy(memoryBuffer, pageNumInt * pageSize, fileByteStream, (int)fileOffset, pageSize);
+                        }
+                        else
+                        {
+                            System.Buffer.BlockCopy(memoryBuffer, pageNumInt * pageSize, fileByteStream, (int)fileOffset, (int)(fileLength - fileOffset));
+                        }
+                        fileOffset += pageSize;
+                    }
+                    //to realize LRU,the file which was read need to be put into the head of the list
+                    LinkedListNode<string> readNode = LruList.Find(url);
+                    if (readNode != null)
+                    {
+                        LruList.Remove(url);
+                        LruList.AddFirst(readNode);
+                    }
                     statusCode = 200;
-                    return readBuffer;
-                }
-                long fileLength = fileLengthDictionary[url];
-                Byte[] fileByteStream = new Byte[fileLength];
-                string pageString = urlToPageDic[url];
-                string[] pageNumStr = pageString.Split(',');
-                int pageNumInt = 0;
-                int fileOffset = 0;
-                for (int i = 0; i < pageNumStr.Length; ++i)
-                {
-                    pageNumInt = Convert.ToInt32(pageNumStr[i]);
-                    if (fileLength - fileOffset >= pageSize)
-                    {
-                        System.Buffer.BlockCopy(memoryBuffer, pageNumInt * pageSize, fileByteStream, (int)fileOffset, pageSize);
-                    }
-                    else
-                    {
-                        System.Buffer.BlockCopy(memoryBuffer, pageNumInt * pageSize, fileByteStream, (int)fileOffset, (int)(fileLength - fileOffset));
-                    }
-                    fileOffset += pageSize;
-                }
-                //to realize LRU,the file which was read need to be put into the head of the list
-                LinkedListNode<string> readNode = LruList.Find(url);
-                if (readNode != null)
-                {
-                    LruList.Remove(url);
-                    LruList.AddFirst(readNode);
-                }
-                else
-                {
-                    LruList.AddFirst(url);
-
-                }
-                statusCode = 200;
-                RWLock.ReleaseReaderLock();
-                return fileByteStream;
+                    return fileByteStream;
+                }
+                finally
+                {
+                    RWLock.ReleaseReaderLock();
+                }
             }
             else //when the file is not in fileBuffer,read the file from local fileSystem
             {
@@ -420,4 +426,4 @@
         }

     }
-}
+}


Have dual stage mod apply changes to beatmap directly

--- osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs
+++ osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs
@@ -4,14 +4,11 @@
 using System.Collections.Generic;
 using osu.Game.Beatmaps;
 using osu.Game.Rulesets.Mania.Beatmaps;
-using osu.Game.Rulesets.Mania.Objects;
-using osu.Game.Rulesets.Mania.UI;
 using osu.Game.Rulesets.Mods;
-using osu.Game.Rulesets.UI;

 namespace osu.Game.Rulesets.Mania.Mods
 {
-    public class ManiaModDualStages : Mod, IPlayfieldTypeMod, IApplicableToBeatmapConverter, IApplicableToRulesetContainer<ManiaHitObject>
+    public class ManiaModDualStages : Mod, IPlayfieldTypeMod, IApplicableToBeatmapConverter, IApplicableToBeatmap
     {
         public override string Name => "Dual Stages";
         public override string ShortenedName => "DS";
@@ -34,22 +31,21 @@
             mbc.TargetColumns *= 2;
         }

-        public void ApplyToRulesetContainer(RulesetContainer<ManiaHitObject> rulesetContainer)
+        public void ApplyToBeatmap(IBeatmap beatmap)
         {
-            var mrc = (ManiaRulesetContainer)rulesetContainer;
-
-            // Although this can work, for now let's not allow keymods for mania-specific beatmaps
             if (isForCurrentRuleset)
                 return;

+            var maniaBeatmap = (ManiaBeatmap) beatmap;
+
             var newDefinitions = new List<StageDefinition>();
-            foreach (var existing in mrc.Beatmap.Stages)
+            foreach (var existing in maniaBeatmap.Stages)
             {
                 newDefinitions.Add(new StageDefinition { Columns = existing.Columns / 2 });
                 newDefinitions.Add(new StageDefinition { Columns = existing.Columns / 2 });
             }

-            mrc.Beatmap.Stages = newDefinitions;
+            maniaBeatmap.Stages = newDefinitions;
         }

         public PlayfieldType PlayfieldType => PlayfieldType.Dual;


Add steps and asserts to TestCaseScreenBreadcrumbs.

--- osu.Game.Tests/Visual/TestCaseScreenBreadcrumbs.cs
+++ osu.Game.Tests/Visual/TestCaseScreenBreadcrumbs.cs
@@ -17,6 +17,7 @@
     public class TestCaseScreenBreadcrumbs : OsuTestCase
     {
         private readonly ScreenBreadcrumbControl<TestScreen> breadcrumbs;
+        private TestScreen currentScreen, changedScreen = null;

         public TestCaseScreenBreadcrumbs()
         {
@@ -40,11 +41,29 @@
                         titleText = new OsuSpriteText(),
                     },
                 },
-                startScreen = new TestScreenOne(),
+                currentScreen = startScreen = new TestScreenOne(),
             };

-            breadcrumbs.OnScreenChanged += s => titleText.Text = $"Changed to {s.ToString()}";
-            breadcrumbs.CurrentScreen = startScreen;
+            breadcrumbs.OnScreenChanged += s =>
+            {
+                titleText.Text = $"Changed to {s.ToString()}";
+                changedScreen = s;
+            };
+
+            AddStep(@"make start current", () => breadcrumbs.CurrentScreen = startScreen);
+            assertCurrent();
+            pushNext();
+            assertCurrent();
+            pushNext();
+            assertCurrent();
+
+            AddStep(@"make start current", () =>
+            {
+                startScreen.MakeCurrent();
+                currentScreen = startScreen;
+            });
+
+            assertCurrent();
         }

         [BackgroundDependencyLoader]
@@ -53,6 +72,9 @@
             breadcrumbs.StripColour = colours.Blue;
         }

+        private void pushNext() => AddStep(@"push next screen", () => currentScreen = currentScreen.PushNext());
+        private void assertCurrent() => AddAssert(@"assert the current screen is correct", () => currentScreen == changedScreen);
+
         private abstract class TestScreen : OsuScreen
         {
             protected abstract string Title { get; }
@@ -60,6 +82,14 @@
             protected abstract TestScreen CreateNextScreen();

             public override string ToString() => Title;
+
+            public TestScreen PushNext()
+            {
+                TestScreen screen = CreateNextScreen();
+                Push(screen);
+
+                return screen;
+            }

             protected TestScreen()
             {
@@ -84,7 +114,7 @@
                             Origin = Anchor.TopCentre,
                             Width = 100,
                             Text = $"Push {NextTitle}",
-                            Action = () => Push(CreateNextScreen()),
+                            Action = () => PushNext(),
                         },
                     },
                 };


Reduce noise in json output and handle the case the file doesn't exist

--- osu.Game.Tournament.Tests/TestCaseLadderManager.cs
+++ osu.Game.Tournament.Tests/TestCaseLadderManager.cs
@@ -19,7 +19,7 @@
         public TestCaseLadderManager()
         {
             var teams = JsonConvert.DeserializeObject<List<TournamentTeam>>(File.ReadAllText(@"teams.json"));
-            var ladder = JsonConvert.DeserializeObject<LadderInfo>(File.ReadAllText(@"bracket.json")) ?? new LadderInfo();
+            var ladder = File.Exists(@"bracket.json") ? JsonConvert.DeserializeObject<LadderInfo>(File.ReadAllText(@"bracket.json")) : new LadderInfo();

             Child = manager = new LadderManager(ladder, teams);
         }
@@ -28,7 +28,12 @@
         {
             base.Dispose(isDisposing);

-            File.WriteAllText(@"bracket.json", JsonConvert.SerializeObject(manager.Info));
+            File.WriteAllText(@"bracket.json", JsonConvert.SerializeObject(manager.Info,
+                new JsonSerializerSettings
+                {
+                    NullValueHandling = NullValueHandling.Ignore,
+                    DefaultValueHandling = DefaultValueHandling.Ignore
+                }));
         }
     }
 }


Only check each video file once

Only check each video file once

--- osu.Game/Rulesets/Edit/Checks/CheckAudioInVideo.cs
+++ osu.Game/Rulesets/Edit/Checks/CheckAudioInVideo.cs
@@ -24,6 +24,7 @@
         public IEnumerable<Issue> Run(BeatmapVerifierContext context)
         {
             var beatmapSet = context.Beatmap.BeatmapInfo.BeatmapSet;
+            var videoPaths = new List<string>();

             foreach (var layer in context.WorkingBeatmap.Storyboard.Layers)
             {
@@ -32,25 +33,31 @@
                     if (!(element is StoryboardVideo video))
                         continue;

-                    string filename = video.Path;
-                    string storagePath = beatmapSet.GetPathForFile(filename);
+                    // Ensures we don't check the same video file multiple times in case of multiple elements using it.
+                    if (!videoPaths.Contains(video.Path))
+                        videoPaths.Add(video.Path);
+                }
+            }

-                    if (storagePath == null)
-                    {
-                        // There's an element in the storyboard that requires this resource, so it being missing is worth warning about.
-                        yield return new IssueTemplateMissingFile(this).Create(filename);
+            foreach (var filename in videoPaths)
+            {
+                string storagePath = beatmapSet.GetPathForFile(filename);

-                        continue;
-                    }
+                if (storagePath == null)
+                {
+                    // There's an element in the storyboard that requires this resource, so it being missing is worth warning about.
+                    yield return new IssueTemplateMissingFile(this).Create(filename);

-                    Stream data = context.WorkingBeatmap.GetStream(storagePath);
-                    var fileCallbacks = new FileCallbacks(new DataStreamFileProcedures(data));
-                    int decodeStream = Bass.CreateStream(StreamSystem.NoBuffer, BassFlags.Decode, fileCallbacks.Callbacks, fileCallbacks.Handle);
-                    if (decodeStream == 0)
-                        continue;
+                    continue;
+                }

-                    yield return new IssueTemplateHasAudioTrack(this).Create(filename);
-                }
+                Stream data = context.WorkingBeatmap.GetStream(storagePath);
+                var fileCallbacks = new FileCallbacks(new DataStreamFileProcedures(data));
+                int decodeStream = Bass.CreateStream(StreamSystem.NoBuffer, BassFlags.Decode, fileCallbacks.Callbacks, fileCallbacks.Handle);
+                if (decodeStream == 0)
+                    continue;
+
+                yield return new IssueTemplateHasAudioTrack(this).Create(filename);
             }
         }


Routing to URLs with query strings now supported

--- src/WebServerRouter.cs
+++ src/WebServerRouter.cs
@@ -69,7 +69,10 @@

         private WebServerRoute RouteMatch(HttpListenerRequest request, out string[] matchesOut)
         {
-            string[] urlParts = ParsePathForParts(request.RawUrl);
+            int queryStart = request.RawUrl.IndexOf('?');
+            string pathToUse = (queryStart < 0) ? request.RawUrl : request.RawUrl.Substring(0, queryStart);
+            string[] urlParts = ParsePathForParts(pathToUse);
+
             foreach (var route in _routes)
             {
                 // HTTP request method must match or be "ALL" in the route.


Cleanup

Cleanup

--- .Src/Extend/Models/Definitions/IAttributeDefinitionType.cs
+++ .Src/Extend/Models/Definitions/IAttributeDefinitionType.cs
@@ -1,5 +1,9 @@
+#region Usings
+
 using System;
 using System.Collections.Generic;
+
+#endregion

 namespace Extend
 {


Update Assets/MixedRealityToolkit.SDK/Experimental/Dialog/Scripts/DialogResult.cs

Co-Authored-By: Troy Ferrell <ea19cea314c83ef6d9e1c2084c83ac31f028c9b5@microsoft.com>

--- Assets/MixedRealityToolkit.SDK/Experimental/Dialog/Scripts/DialogResult.cs
+++ Assets/MixedRealityToolkit.SDK/Experimental/Dialog/Scripts/DialogResult.cs
@@ -50,7 +50,7 @@
         }

         /// <summary>
-        /// The button press that closed the dialog
+        /// The button type that was pressed to close the dialog
         /// </summary>
         private DialogButtonType result = DialogButtonType.Close;
         /// <summary>
@@ -78,4 +78,4 @@
             set => variable = value;
         }
     }
-}+}


Use SolverUpdateEntry instead of SolverUpdate so that lifetime considerations are honored.

--- Assets/MixedRealityToolkit.SDK/Features/Utilities/Solvers/SolverHandler.cs
+++ Assets/MixedRealityToolkit.SDK/Features/Utilities/Solvers/SolverHandler.cs
@@ -182,7 +182,7 @@

                     if (solver.enabled)
                     {
-                        solver.SolverUpdate();
+                        solver.SolverUpdateEntry();
                     }
                 }
             }


Change native library path on MacOS for Catalina.

--- AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs
+++ AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs
@@ -24,7 +24,7 @@
     static class SafeNativeMethods
     {
 #if OSX
-        const string _coreAudioLibrary = "/System/Library/Frameworks/CoreAudio.framework/Versions/A/Resources/BridgeSupport/CoreAudio.dylib";
+        const string _coreAudioLibrary = "/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio";
 #else
         const string _coreAudioLibrary = "CoreAudioToolbox";
 #endif


Fixed PiccoloEngine request payload tests.

--- Piccolo.Tests/PiccoloEngineTests.cs
+++ Piccolo.Tests/PiccoloEngineTests.cs
@@ -5,6 +5,7 @@
 using System.Net;
 using System.Net.Http;
 using System.Reflection;
+using System.Text;
 using System.Web;
 using NSubstitute;
 using NUnit.Framework;
@@ -34,7 +35,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.FindRequestHandler(verb, applicationPath, uri).Returns(new RouteHandlerLookupResult(typeof(GetResource), routeParameters));

@@ -121,7 +125,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.FindRequestHandler(verb, applicationPath, uri).Returns(new RouteHandlerLookupResult(typeof(DeleteResource), routeParameters));

@@ -183,7 +190,7 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+				HttpContextBase.Request.InputStream.Returns(new MemoryStream(Encoding.UTF8.GetBytes("request_payload")));

 				RequestRouter.FindRequestHandler(verb, applicationPath, uri).Returns(new RouteHandlerLookupResult(typeof(CreateResource), routeParameters));

@@ -196,7 +203,7 @@
 					routeParameters,
 					Arg.Is<IDictionary<string, string>>(x => x.Count == 0),
 					Arg.Any<IDictionary<string, object>>(),
-					Arg.Is<string>(x => x == string.Empty),
+					Arg.Is<string>(x => x == "request_payload"),
 					Arg.Is<object>(x => x == null)).Returns(httpResponseMessage);

 				_piccoloContext = new PiccoloContext(HttpContextBase);
@@ -235,7 +242,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.FindRequestHandler(verb, applicationPath, uri).Returns(RouteHandlerLookupResult.FailedResult);

@@ -281,7 +291,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new RouteParameterDatatypeMismatchException(); });

@@ -339,9 +352,12 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
 				HttpContextBase.IsDebuggingEnabled.Returns(true);

+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);
+
 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new RouteParameterDatatypeMismatchException(); });

 				_piccoloContext = new PiccoloContext(HttpContextBase);
@@ -380,7 +396,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new MalformedParameterException(); });

@@ -438,9 +457,12 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
 				HttpContextBase.IsDebuggingEnabled.Returns(true);

+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);
+
 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new MalformedParameterException(); });

 				_piccoloContext = new PiccoloContext(HttpContextBase);
@@ -479,7 +501,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new MissingPayloadException(); });

@@ -537,7 +562,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new MalformedPayloadException(); });

@@ -595,9 +623,12 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
 				HttpContextBase.IsDebuggingEnabled.Returns(true);

+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);
+
 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new MalformedPayloadException(); });

 				_piccoloContext = new PiccoloContext(HttpContextBase);
@@ -636,7 +667,10 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new Exception(); });

@@ -694,8 +728,11 @@
 				HttpContextBase.Request.HttpMethod.Returns(verb);
 				HttpContextBase.Request.ApplicationPath.Returns(applicationPath);
 				HttpContextBase.Request.Url.Returns(uri);
-				HttpContextBase.Request.InputStream.Returns(new MemoryStream());
 				HttpContextBase.IsDebuggingEnabled.Returns(true);
+
+				var inputStream = Substitute.For<Stream>();
+				inputStream.CanRead.Returns(false);
+				HttpContextBase.Request.InputStream.Returns(inputStream);

 				RequestRouter.When(x => x.FindRequestHandler(verb, applicationPath, uri)).Do(_ => { throw new Exception(); });


Added search in site hierarchy when removing content type from list

--- Core/OfficeDevPnP.Core/AppModelExtensions/FieldAndContentTypeExtensions.cs
+++ Core/OfficeDevPnP.Core/AppModelExtensions/FieldAndContentTypeExtensions.cs
@@ -1472,7 +1472,7 @@
             // Get list instances
             var list = web.GetListByTitle(listTitle);
             // Get content type instance
-            var contentType = GetContentTypeByName(web, contentTypeName);
+            var contentType = GetContentTypeByName(web, contentTypeName,true);
             // Remove content type from list
             RemoveContentTypeFromList(web, list, contentType);

@@ -1489,7 +1489,7 @@
             if (string.IsNullOrEmpty(contentTypeName))
                 throw new ArgumentNullException("contentTypeName");
             // Get content type instance
-            var contentType = GetContentTypeByName(web, contentTypeName);
+            var contentType = GetContentTypeByName(web, contentTypeName,true);
             // Remove content type from list
             RemoveContentTypeFromList(web, list, contentType);

@@ -1505,7 +1505,7 @@
         {
             // Get list instances
             var list = web.GetListByTitle(listTitle);
-            var contentType = GetContentTypeById(web, contentTypeId);
+            var contentType = GetContentTypeById(web, contentTypeId,true);
             // Remove content type from list
             RemoveContentTypeFromList(web, list, contentType);
         }
@@ -1520,7 +1520,7 @@
         {
             if (string.IsNullOrEmpty(contentTypeId))
                 throw new ArgumentNullException("contentTypeId");
-            var contentType = GetContentTypeById(web, contentTypeId);
+            var contentType = GetContentTypeById(web, contentTypeId,true);
             // Remove content type from list
             RemoveContentTypeFromList(web, list, contentType);
         }


Fjerner unødvendige kommentarer

Fjerner unødvendige kommentarer

--- Digipost.Signature.Api.Client.Direct.Tests/Smoke/DirectClientSmokeTests.cs
+++ Digipost.Signature.Api.Client.Direct.Tests/Smoke/DirectClientSmokeTests.cs
@@ -40,7 +40,7 @@

         private readonly DirectSmokeTestsFixture _fixture;

-        [Fact(Skip = "Doesn't run on CI yet due to incomplete TLS/certificate setup")]
+        [Fact()]
         public void Can_create_job_with_multiple_signers()
         {
             var signer1 = new PersonalIdentificationNumber("12345678910");
@@ -71,7 +71,7 @@
         [Fact(Skip = "Doesn't run on CI yet due to incomplete TLS/certificate setup")]
         public void Can_create_job_with_one_signer()
         {
-            var signer = new PersonalIdentificationNumber("01048200229"); //Preben
+            var signer = new PersonalIdentificationNumber("01048200229");

             _fixture.TestHelper
                 .Create_direct_job(signer)
@@ -80,7 +80,7 @@
                 .Expect_job_to_have_status(
                     JobStatus.CompletedSuccessfully,
                     ExpectedSignerStatus(signer, SignatureStatus.Signed)
-                ) /**/
+                )
                 .Get_XAdES(signer)
                 .Get_PAdES()
                 .Confirm_status();


Made Mapped Column Sortable

Made Mapped Column Sortable

Made Mapped Column Sortable

--- EDDiscovery/UserControls/ScansStars/UserControlEstimatedValues.Designer.cs
+++ EDDiscovery/UserControls/ScansStars/UserControlEstimatedValues.Designer.cs
@@ -155,6 +155,7 @@
             this.Mapped.HeaderText = "Mapped";
             this.Mapped.Name = "Mapped";
             this.Mapped.Width = 52;
+            this.Mapped.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
             //
             // EstValue
             //


Automatically remove extension when retrieving from resources on Android #37 #38

--- FFImageLoading.Droid/Work/StreamResolver/CompiledResourceStreamResolver.cs
+++ FFImageLoading.Droid/Work/StreamResolver/CompiledResourceStreamResolver.cs
@@ -21,11 +21,14 @@

 		public async Task<WithLoadingResult<Stream>> GetStream(string identifier, CancellationToken token)
 		{
+			// Resource name is always without extension
+			string resourceName = Path.GetFileNameWithoutExtension(identifier);
+
 			int resourceId = 0;
-			if (!_resourceIdentifiersCache.TryGetValue(identifier, out resourceId))
+			if (!_resourceIdentifiersCache.TryGetValue(resourceName, out resourceId))
 			{
-				resourceId = Context.Resources.GetIdentifier(identifier.ToLower(), "drawable", Context.PackageName);
-				_resourceIdentifiersCache.TryAdd(identifier.ToLower(), resourceId);
+				resourceId = Context.Resources.GetIdentifier(resourceName.ToLower(), "drawable", Context.PackageName);
+				_resourceIdentifiersCache.TryAdd(resourceName.ToLower(), resourceId);
 			}

 			Stream stream = null;


Graph now has a method to get an DepthFirstGraph Enumerable.

--- Game/Collections/Graph.cs
+++ Game/Collections/Graph.cs
@@ -44,5 +44,14 @@
 			}
 			return nearest;
 		}
+
+		/// <summary>
+		/// Returns an enumerator that uses the depth first algorithm to traverse
+		/// this tree, starting at the specified start node.
+		/// </summary>
+		public IEnumerable<GraphNode> GetDepthFirstEnumerable(GraphNode startNode)
+		{
+			return new DepthFirstGraph(this, startNode);
+		}
 	}
 }


removed testing code

removed testing code

--- xamarin/FHXamarinIOSSDK/Services/Device/DeviceService.cs
+++ xamarin/FHXamarinIOSSDK/Services/Device/DeviceService.cs
@@ -74,8 +74,7 @@
 			{
 				Alias = (NSString) config["alias"],
 				Categories = categoryList,
-				//UnifiedPushUri = new Uri(ReadAppProps().host + "/api/v2/ag-push"),
-				UnifiedPushUri = new Uri("https://unifiedpush-edewit.rhcloud.com/ag-push/"),
+				UnifiedPushUri = new Uri(ReadAppProps().host + "/api/v2/ag-push"),
 				VariantId = (NSString) config["variantID"],
 				VariantSecret = (NSString) config["variantSecret"]
 			};


Switch to RSS

Switch to RSS


Added Encrypt_DES and Decrypt_DES for Windows Phone

--- MarkerMetro.Unity.WinLegacyUnity/System/Cryptography/EncryptionProvider.cs
+++ MarkerMetro.Unity.WinLegacyUnity/System/Cryptography/EncryptionProvider.cs
@@ -203,7 +203,7 @@
             // Return the encrypted bytes from the memory stream.
             return Encoding.UTF8.GetString(encrypted, 0, encrypted.Length);
 #else
-            throw new NotImplementedException("EncryptString_AES not implemented on this platform");
+            throw new NotImplementedException("Encrypt_AES not implemented on this platform");
 #endif
         }

@@ -258,7 +258,60 @@

             return plaintext;
 #else
-            throw new NotImplementedException("EncryptString_AES not implemented on this platform");
+            throw new NotImplementedException("Decrypt_AES not implemented on this platform");
+#endif
+        }
+
+        /// <summary>
+        /// Encrypt a string to DES for Windows Phone 8
+        /// </summary>
+        /// <param name="plainMessage"></param>
+        /// <param name="Key"></param>
+        /// <returns></returns>
+        public static string Encrypt_DES(string plainMessage, byte[] Key)
+        {
+#if WINDOWS_PHONE
+            var encoding = new System.Text.UTF8Encoding();
+
+            byte[] keyBytes = DESCrytography.DoPadWithString(encoding.GetBytes(Key.ToString()), 24, (byte)0);
+            byte[] plainText = new byte[1024];
+            plainText = DESCrytography.DoPadWithString(encoding.GetBytes(plainMessage), 8, (byte)0);
+
+            byte[] cipherText = null;
+            DESCrytography.TripleDES(plainText, ref cipherText, keyBytes, true);
+
+            string result = Convert.ToBase64String(cipherText);
+            result = result.Replace("+", "-").Replace("/", "_");
+
+            return result;
+#else
+            throw new NotImplementedException("Encrypt_DES not implemented on this platform");
+#endif
+        }
+
+        /// <summary>
+        /// Decrypt a string with DES for Windows Phone 8
+        /// </summary>
+        /// <param name="encryptedMessage"></param>
+        /// <param name="argKey"></param>
+        /// <returns></returns>
+        public static string Decrypt_DES(string encryptedMessage, byte[] argKey)
+        {
+#if WINDOWS_PHONE
+            var encoding = new System.Text.UTF8Encoding();
+
+            byte[] Key = DESCrytography.DoPadWithString(encoding.GetBytes(argKey.ToString()), 24, (byte)0);
+            byte[] plainText = Convert.FromBase64String(encryptedMessage.Replace("-", "+").Replace("_", "/"));
+
+            byte[] cipherText = null;
+            DESCrytography.TripleDES(plainText, ref cipherText, Key, false);
+
+            string result = encoding.GetString(cipherText, 0, cipherText.Length)
+                .Replace(Convert.ToChar(0x0).ToString(), "");
+
+            return result;
+#else
+            throw new NotImplementedException("Decrypt_DES not implemented on this platform");
 #endif
         }


Removed a piece of debug code

Removed a piece of debug code

--- OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -541,14 +541,5 @@
         {
             // TODO: DataSet commit
         }
-
-        private void SaveAssetToFile(string filename, byte[] data)
-        {
-            FileStream fs = File.Create(filename);
-            BinaryWriter bw = new BinaryWriter(fs);
-            bw.Write(data);
-            bw.Close();
-            fs.Close();
-        }
     }
 }


Removed unsed line

Removed unsed line

--- PART/Source/CprBroker/CPRDirect/XML/IndividualHistoryResponse.Relations.cs
+++ PART/Source/CprBroker/CPRDirect/XML/IndividualHistoryResponse.Relations.cs
@@ -59,8 +59,6 @@
         public RelationListeType ToRelationListeType(Func<string, Guid> cpr2UuidFunc)
         {
             // Marriages
-            var timed = this.ItemsAsTimedType;
-
             var civilStates = Interval
                 .CreateFromData<TimedTypeWrapper<ICivilStatus>>(this.ItemsAsTimedType, new DataTypeTags[] { DataTypeTags.CivilStatus })
                 .Select(w => w.TimedObject)


Simplifies MultiLineSignatureTest to try and avoid timeouts.

--- Python/Tests/Core.UI/EditorTests.cs
+++ Python/Tests/Core.UI/EditorTests.cs
@@ -232,14 +232,10 @@
                     doc.TextView.Caret.MoveTo(point);
                 }));

-                var t = Task.Run(() => VsIdeTestHostContext.Dte.ExecuteCommand("Edit.ParameterInfo"));
-
-                try {
-                    using (var sh = doc.WaitForSession<ISignatureHelpSession>()) {
-                        Assert.AreEqual("b", sh.Session.SelectedSignature.CurrentParameter.Name);
-                    }
-                } finally {
-                    t.Wait();
+                app.ExecuteCommand("Edit.ParameterInfo");
+
+                using (var sh = doc.WaitForSession<ISignatureHelpSession>()) {
+                    Assert.AreEqual("b", sh.Session.SelectedSignature.CurrentParameter.Name);
                 }
             }
         }


links in log

links in log

--- QuartzNetWebConsole/MemoryLogger.cs
+++ QuartzNetWebConsole/MemoryLogger.cs
@@ -13,8 +13,20 @@
         }

         public void JobScheduled(Trigger trigger) {
-            var desc = string.Format("Job {0} scheduled with trigger {1}", trigger.FullJobName, Describe(trigger));
+            var desc = string.Format("Job {0}.{1} scheduled with trigger {2}", LinkJobGroup(trigger.JobGroup), trigger.JobName, Describe(trigger));
             entries.Add(new LogEntry(desc));
+        }
+
+        private string Link(string href, string text) {
+            return string.Format("{1}", href, text);
+        }
+
+        private string LinkTriggerGroup(string group) {
+            return Link(string.Format("triggerGroup.ashx?group={0}", group), group);
+        }
+
+        private string LinkJobGroup(string group) {
+            return Link(string.Format("jobGroup.ashx?group={0}", group), group);
         }

         private string Describe(Trigger trigger) {
@@ -23,11 +35,11 @@

             var simpleTrigger = trigger as SimpleTrigger;
             var simpleDesc = simpleTrigger == null ? null : string.Format("interval {0}, repeat count {1}", simpleTrigger.RepeatInterval, simpleTrigger.RepeatCount);
-            return string.Format("{0}.{1} ({2}) {3}{4}", trigger.Group, trigger.Name, trigger.GetType(), cronDesc, simpleDesc);
+            return string.Format("{0}.{1} ({2}) {3}{4}", LinkTriggerGroup(trigger.Group), trigger.Name, trigger.GetType(), cronDesc, simpleDesc);
         }

         public void JobUnscheduled(string triggerName, string triggerGroup) {
-            entries.Add(new LogEntry(string.Format("Trigger removed: {0}.{1}", triggerGroup, triggerName)));
+            entries.Add(new LogEntry(string.Format("Trigger removed: {0}.{1}", LinkTriggerGroup(triggerGroup), triggerName)));
         }

         public void TriggerFinalized(Trigger trigger) {
@@ -35,19 +47,19 @@
         }

         public void TriggersPaused(string triggerName, string triggerGroup) {
-            entries.Add(new LogEntry(string.Format("Trigger paused: {0}.{1}", triggerGroup, triggerName)));
+            entries.Add(new LogEntry(string.Format("Trigger paused: {0}.{1}", LinkTriggerGroup(triggerGroup), triggerName)));
         }

         public void TriggersResumed(string triggerName, string triggerGroup) {
-            entries.Add(new LogEntry(string.Format("Trigger resumed: {0}.{1}", triggerGroup, triggerName)));
+            entries.Add(new LogEntry(string.Format("Trigger resumed: {0}.{1}", LinkTriggerGroup(triggerGroup), triggerName)));
         }

         public void JobsPaused(string jobName, string jobGroup) {
-            entries.Add(new LogEntry(string.Format("Job paused: {0}.{1}", jobGroup, jobName)));
+            entries.Add(new LogEntry(string.Format("Job paused: {0}.{1}", LinkJobGroup(jobGroup), jobName)));
         }

         public void JobsResumed(string jobName, string jobGroup) {
-            entries.Add(new LogEntry(string.Format("Job resumed: {0}.{1}", jobGroup, jobName)));
+            entries.Add(new LogEntry(string.Format("Job resumed: {0}.{1}", LinkJobGroup(jobGroup), jobName)));
         }

         public void SchedulerError(string msg, SchedulerException cause) {
@@ -63,7 +75,7 @@
         }

         private string Describe(JobExecutionContext context) {
-            return string.Format("{0} (trigger {1})", context.JobDetail.FullName, Describe(context.Trigger));
+            return string.Format("{0}.{1} (trigger {2})", LinkJobGroup(context.JobDetail.Group), context.JobDetail.Name, Describe(context.Trigger));
         }

         public void JobExecutionVetoed(JobExecutionContext context) {


Ajout de la date d'inscription

Ajout de la date d'inscription

--- Repository/ParticipantRepository.cs
+++ Repository/ParticipantRepository.cs
@@ -32,6 +32,7 @@
             {
                 PersonneId = idPersonne,
                 CourseId = idRace,
+                dateInscription = DateTime.Today,
                 EstCompetiteur = true,
                 EstOrganisateur = false
             };


cosmetic

cosmetic

--- Aspects/Wcf/Services/MessagingPatternServiceHostFactory.cs
+++ Aspects/Wcf/Services/MessagingPatternServiceHostFactory.cs
@@ -253,10 +253,7 @@
         /// </returns>
         public ServiceHost CreateHost(
             Type serviceType,
-            params Uri[] baseAddresses)
-        {
-            return CreateServiceHost(serviceType, baseAddresses);
-        }
+            params Uri[] baseAddresses) => CreateServiceHost(serviceType, baseAddresses);

         /// <summary>
         /// Generic method which creates a service host outside of WAS where the created service is specified by the type parameter of the generic.
@@ -274,10 +271,7 @@
         /// <param name="baseAddresses">The <see cref="Array" /> of type <see cref="Uri" /> that contains the base addresses for the service hosted.</param>
         /// <returns>A <see cref="ServiceHost" /> for the type of service specified with a specific base address.</returns>
         public ServiceHost CreateHost<TService>(
-            params Uri[] baseAddresses)
-        {
-            return CreateServiceHost<TService>(baseAddresses);
-        }
+            params Uri[] baseAddresses) => CreateServiceHost<TService>(baseAddresses);

         /// <summary>
         /// Creates a service host outside of WAS for a service type that is resolved internally, i.e. from DI container or hard-coded.


Formatted code

Formatted code

--- Assets/FancyScrollView/Scripts/ScrollPositionController.cs
+++ Assets/FancyScrollView/Scripts/ScrollPositionController.cs
@@ -217,7 +217,7 @@
                 {
                     ScrollTo(Mathf.RoundToInt(position + offset), 0.35f);
                 }
-            else if (inertia)
+                else if (inertia)
                 {
                     velocity *= Mathf.Pow(decelerationRate, deltaTime);
                     if (Mathf.Abs(velocity) < 0.001f)
@@ -229,8 +229,8 @@
                         ScrollTo(Mathf.RoundToInt(currentScrollPosition), snap.Duration);
                     }
                 }
-            // If we have neither elaticity or friction, there shouldn't be any velocity.
-            else
+                // If we have neither elaticity or friction, there shouldn't be any velocity.
+                else
                 {
                     velocity = 0;
                 }