Updated french and some german Translations

--- RelicModManager/Utils/Translations.cs
+++ RelicModManager/Utils/Translations.cs
@@ -166,12 +166,12 @@
             english.Add("conflictBetaDBTestMode", "The command line options BetaDatabase and Test should not be used together, the application may be unstable. Continue anyway?");
             german.Add("conflictBetaDBTestMode", "TODO");
             polish.Add("conflictBetaDBTestMode", "TODO");
-            french.Add("conflictBetaDBTestMode", "TODO");
+            french.Add("conflictBetaDBTestMode", "Les options de ligne de commande \"base de données beta\" et \"Test\" ne doivent pas être utilisées ensemble, l'application peut être instable. Continuer quand même?");

             english.Add("conflictsCommandlineHeader", "Command-Line option conflicts");
             german.Add("conflictsCommandlineHeader", "TODO");
             polish.Add("conflictsCommandlineHeader", "TODO");
-            french.Add("conflictsCommandlineHeader", "TODO");
+            french.Add("conflictsCommandlineHeader", "Conflits d'options de ligne de commande");
             #endregion

             #region BackgroundForum
@@ -1074,7 +1074,7 @@
             //Componet:
             //
             english.Add("confirmUninstallMessage", "Confirm you wish to uninstall mods from WoT installation\n\n{0}\n\nUsing uninstall method '{1}'?");
-            german.Add("confirmUninstallMessage", "TODO");
+            german.Add("confirmUninstallMessage", "Bitte bestätige das du alle Mods von Deinem WoT deinstalliert haben möchtest\n\n{0}\n\nVerwendung von Deinstallationsmethode '{1}'?");
             polish.Add("confirmUninstallMessage", "Potwierdź usunięcie modyfikacji\n\n{0}\n\nPotwierdź metodę '{1}'");
             french.Add("confirmUninstallMessage", "Confirmer que vous voulez désinstaller les mods du dossier WoT\n\n{0}\n\nUsing la méthode de désinstallation '{1}'?");

@@ -1242,14 +1242,14 @@
             //Component: DefaultUninstallModeRBDescription
             //
             english.Add("DefaultUninstallModeRBDescription", "Default Uninstall will remove all files in the game's mod directories, including shortcuts and appdata cache files.");
-            german.Add("DefaultUninstallModeRBDescription", "TODO");
+            german.Add("DefaultUninstallModeRBDescription", "Die Standard Deinstallation wird alle Dateien in den Mod-Verzeichnissen des Spieles löschen, inklusive der Verknüpfungen und Dateien im 'AppData' Speicher.");
             polish.Add("DefaultUninstallModeRBDescription", "Domyślna deinstalacja usunie wszystkie pliki w folderze modyfikacji i pliki z nimi związane, włączając skróty i pliki cache aplikacji.");
             french.Add("DefaultUninstallModeRBDescription", "La méthode de désinstallation par défaut vas supprimer tout les fichiers dans le dossier du jeu, incluant les raccourcies et le fichers de cache appdata");

             //Component: CleanUninstallModeRBDescription
             //
             english.Add("CleanUninstallModeRBDescription", "Quick Uninstall will only remove files in the game's mod directories. It does not remove modpack created shortcuts or appdata cache files.");
-            german.Add("CleanUninstallModeRBDescription", "TODO");
+            german.Add("CleanUninstallModeRBDescription", "Die schnelle Deinstallation wird nur Dateien in den Mod-Verzeichnissen der Spieles löschen. Es werden keine vom ModPack erstellten Verknüpfungen oder Dateien im 'AppData' Speicher gelöscht.");
             polish.Add("CleanUninstallModeRBDescription", "Szybka deinstalacja usunie tylko pliki w folderze modyfikacji. Nie usunie skrótów i plików cache związanych z modpackiem.");
             french.Add("CleanUninstallModeRBDescription", "La méthode de désinstallation rapide vas uniquement supprimer les fichiers dans le dossier \"mod\" du jeu. Ceci ne supprimeras pas les raccourcis ou les fichiers de cache appdata créé par le modpack");

@@ -2164,31 +2164,31 @@
             english.Add("UseBetaDatabaseCB", "Use beta database");
             german.Add("UseBetaDatabaseCB", "TODO");
             polish.Add("UseBetaDatabaseCB", "TODO");
-            french.Add("UseBetaDatabaseCB", "TODO");
+            french.Add("UseBetaDatabaseCB", "Utiliser la base de données beta");

             //Component: UseBetaApplicationCB
             english.Add("UseBetaApplicationCB", "Use beta application");
             german.Add("UseBetaApplicationCB", "TODO");
             polish.Add("UseBetaApplicationCB", "TODO");
-            french.Add("UseBetaApplicationCB", "TODO");
+            french.Add("UseBetaApplicationCB", "Utiliser l'application beta");

             //Component: UseBetaDatabaseCBDescription
             english.Add("UseBetaDatabaseCBDescription", "Use the latest beta database. Mod stability is not guaranteed");
             german.Add("UseBetaDatabaseCBDescription", "TODO");
             polish.Add("UseBetaDatabaseCBDescription", "TODO");
-            french.Add("UseBetaDatabaseCBDescription", "TODO");
+            french.Add("UseBetaDatabaseCBDescription", "Utiliser la dernière base de données beta. La stabilité des mods n'est pas garantie");

             //Component: UseBetaApplicationCBDescription
             english.Add("UseBetaApplicationCBDescription", "Use the latest beta application. Translations and application stability are not guaranteed");
             german.Add("UseBetaApplicationCBDescription", "TODO");
             polish.Add("UseBetaApplicationCBDescription", "TODO");
-            french.Add("UseBetaApplicationCBDescription", "TODO");
+            french.Add("UseBetaApplicationCBDescription", "Utiliser la dernière version beta. Les traductions et la stabilité de l'application ne sont pas garanties");

             //Component: notifying the user the change won't take effect until application restart
             english.Add("noChangeUntilRestart", "This option won't take effect until application restart");
             german.Add("noChangeUntilRestart", "TODO");
             polish.Add("noChangeUntilRestart", "TODO");
-            french.Add("noChangeUntilRestart", "TODO");
+            french.Add("noChangeUntilRestart", "Cette option ne prendra effet qu'au redémarrage de l'application");
             #endregion

             #region Scaling Verification Window


Fixed CreditCardFilter so it actually scrubs the data and doesn't suffer from ArgumentOutOfRangeException problems.

--- SharpRaven/Logging/Filters/CreditCardFilter.cs
+++ SharpRaven/Logging/Filters/CreditCardFilter.cs
@@ -22,9 +22,7 @@
         {
             Regex cardRegex = new Regex(@"\b(?:\d[ -]*?){13,16}\b", RegexOptions.IgnoreCase);

-            cardRegex.Replace(input, m => this.IsValidCreditCardNumber(m.Value) ? "####-CC-TRUNCATED-####" : m.Value);
-
-            return input;
+            return cardRegex.Replace(input, m => IsValidCreditCardNumber(m.Value) ? "####-CC-TRUNCATED-####" : m.Value);
         }

         /// <summary>
@@ -42,8 +40,8 @@
         /// </returns>
         private bool IsValidCreditCardNumber(string number)
         {
-            number.Replace("-", String.Empty);
-            number.Replace(" ", String.Empty);
+            number = number.Replace("-", String.Empty);
+            number = number.Replace(" ", String.Empty);

             int[] deltas = new[] { 0, 1, 2, 3, 4, -4, -3, -2, -1, 0 };
             int checksum = 0;
@@ -51,7 +49,7 @@

             for (int i = chars.Length - 1; i > -1; i--)
             {
-                int j = ((int)chars[i]) - 48;
+                int j = chars[i] - 48;
                 checksum += j;

                 if (((i - chars.Length) % 2) == 0)


Avoid the startup exception if DEBUG/Debugger attached

--- EarTrumpet/App.xaml.cs
+++ EarTrumpet/App.xaml.cs
@@ -1,5 +1,6 @@
 using EarTrumpet.Services;
 using System;
+using System.Diagnostics;
 using System.Globalization;
 using System.Reflection;
 using System.Threading;
@@ -44,6 +45,13 @@
         {
             get
             {
+#if DEBUG
+                if (Debugger.IsAttached)
+                {
+                    return false;
+                }
+#endif
+
                 if (_hasIdentity == null)
                 {
                     try


Update menu entry name

Update menu entry name

--- Editor/LoggerWindow.cs
+++ Editor/LoggerWindow.cs
@@ -23,7 +23,7 @@
             }
         }

-        [MenuItem("Window/mLogger")]
+        [MenuItem("Window/FileLogger")]
         public static void Init() {
             LoggerWindow window =
                 (LoggerWindow)EditorWindow.GetWindow(typeof(LoggerWindow));


fix owin for .net core bug

fix owin for .net core bug

--- SignalGo.Server.Owin/SignalGoHttpMiddleware.cs
+++ SignalGo.Server.Owin/SignalGoHttpMiddleware.cs
@@ -39,7 +39,7 @@
             string uri = context.Request.Path.Value + context.Request.QueryString.ToString();
             string serviceName = uri.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
             bool isWebSocketd = context.Request.Headers.ContainsKey("Sec-WebSocket-Key");
-            if (!BaseProvider.ExistService(serviceName, CurrentServerBase) && !isWebSocketd && !context.Request.Headers.ContainsKey("signalgo-servicedetail"))
+            if (!BaseProvider.ExistService(serviceName, CurrentServerBase) && !isWebSocketd && !context.Request.Headers.ContainsKey("signalgo-servicedetail") && context.Request.Headers["content-type"] != "SignalGo Service Reference")
             {
                 await _next.Invoke(context);
                 return;


Combiner - fix absolute path

Combiner - fix absolute path

--- Signum.Web.Extensions/Combine/CombineClient.cs
+++ Signum.Web.Extensions/Combine/CombineClient.cs
@@ -120,7 +120,7 @@
             else
             {
                 if (virtualPath.StartsWith("~"))
-                    virtualPath = virtualPath.Substring(1);
+                    virtualPath = VirtualPathUtility.ToAbsolute(virtualPath);

                 using (Stream str = VirtualPathProvider.OpenFile(virtualPath))
                 using (StreamReader reader = new StreamReader(str))


Prevent invoke on SyncPrinterProfiles if null

--- SlicerConfiguration/Settings/ProfileManager.cs
+++ SlicerConfiguration/Settings/ProfileManager.cs
@@ -564,7 +564,7 @@
 			ProfilesListChanged.CallEvents(null, null);

 			// Force sync after any collection change event
-			ApplicationController.SyncPrinterProfiles(null);
+			ApplicationController.SyncPrinterProfiles?.Invoke(null);
 		}

 		public void Save()


Use the chain way for registering services and view models.

--- Solution/App/Infrastructure/UWPBootstrapper.cs
+++ Solution/App/Infrastructure/UWPBootstrapper.cs
@@ -18,8 +18,9 @@
         {
             base.Configure();

-            this.UnityContainer.RegisterType<IOpenFolderService, OpenFolderService>();
-            this.UnityContainer.RegisterType<IShellViewModel, ShellViewModel>();
+            this.UnityContainer
+                .RegisterType<IOpenFolderService, OpenFolderService>()
+                .RegisterType<IShellViewModel, ShellViewModel>();
         }

         public override void Dispose()


Closes #1734 - die 'using' was niet meer nodig.

--- Solution/Chiro.Gap.ExcelManip/GapExcelManip.cs
+++ Solution/Chiro.Gap.ExcelManip/GapExcelManip.cs
@@ -22,7 +22,6 @@
 using System.Text;
 using Chiro.Gap.Domain;
 using Chiro.Gap.ServiceContracts.DataContracts;
-using DocumentFormat.OpenXml.Drawing.Spreadsheet;
 using OfficeOpenXml;

 namespace Chiro.Gap.ExcelManip


New maneuver snap functions

New maneuver snap functions

--- Source/BetterManeuvering.Unity/ManeuverSnap.cs
+++ Source/BetterManeuvering.Unity/ManeuverSnap.cs
@@ -60,6 +60,11 @@
 		public Button ClAppButton = null;
 		public Button ResetButton = null;
 		public Transform TitleTransform = null;
+		public Button ManualDownButton = null;
+		public Button ManualUpButton = null;
+		public Button ManualIncDownButton = null;
+		public Button ManualIncUpButton = null;
+		public TextHandler ManualIncText = null;
 		public TextHandler CurrentTime = null;
 		public TextHandler ApoTime = null;
 		public TextHandler PeriTime = null;


Drive-v3 ChangeSnippet UnitTest

Drive-v3 ChangeSnippet UnitTest

--- drive/snippets/drive_v3/DriveV3SnippetsTest/FetchChangesTest.cs
+++ drive/snippets/drive_v3/DriveV3SnippetsTest/FetchChangesTest.cs
@@ -21,14 +21,18 @@
     [TestFixture]
     public class FetchChangesTest : BaseTest
     {
+        //TODO(developer) - Provide absolute path of the file
+        private string filePath = "files/photo.jpg";
+
         [Test]
         public void TestFetchChanges()
         {
             string startPageToken = FetchStartPageToken.DriveFetchStartPageToken();
-            CreateTestBlob();
+            var id = CreateTestBlob(filePath);
             string newStartPageToken = FetchChanges.DriveFetchChanges(startPageToken);
             Assert.IsNotNull(newStartPageToken);
             Assert.AreNotEqual(startPageToken, newStartPageToken);
+            service.Files.Delete(id);
         }
     }
 }


Implemented PackageManager.SavePackage()

--- Source/OpenIIoT.Core/Package/PackageManager.cs
+++ Source/OpenIIoT.Core/Package/PackageManager.cs
@@ -310,7 +310,10 @@

                 if (retVal.ResultCode != ResultCode.Failure)
                 {
-                    // TODO: copy file from temp to Packages directory
+                    string destinationFile = Path.Combine(platform.Directories.Packages, Path.GetFileName(tempFile));
+
+                    retVal.Incorporate(platform.CopyFile(tempFile, destinationFile, true));
+
                     retVal.ReturnValue = readResult.ReturnValue;
                 }
                 else


Green: No tokens for an empty string, one token for non-empty strings.

--- Sandra.UI.WF/Storage/JsonTokenizer.cs
+++ Sandra.UI.WF/Storage/JsonTokenizer.cs
@@ -20,6 +20,7 @@
 #endregion

 using System;
+using System.Collections.Generic;

 namespace Sandra.UI.WF.Storage
 {
@@ -44,5 +45,19 @@
             if (json == null) throw new ArgumentNullException(nameof(json));
             Json = json;
         }
+
+        /// <summary>
+        /// Tokenizes the source <see cref="Json"/> from start to end.
+        /// </summary>
+        /// <returns>
+        /// An enumeration of <see cref="JsonTerminalSymbol"/> instances.
+        /// </returns>
+        public IEnumerable<JsonTerminalSymbol> TokenizeAll()
+        {
+            if (Json.Length > 0)
+            {
+                yield return new JsonUnknownSymbol(Json, 0, Json.Length);
+            }
+        }
     }
 }


Implement SettingWriterOptions.SuppressSettingComments.

--- Sandra.UI.WF/Storage/SettingWriter.cs
+++ Sandra.UI.WF/Storage/SettingWriter.cs
@@ -171,18 +171,24 @@
             bool first = true;
             foreach (var kv in value)
             {
+                bool extraNewLineBeforeComment = !first;
+
                 if (!first)
                 {
                     outputBuilder.Append(JsonComma.CommaCharacter);
-                    outputBuilder.AppendLine();
-                }
-                else first = false;
+                }
+                else
+                {
+                    first = false;
+                }

                 outputBuilder.AppendLine();

                 string name = kv.Key;
-                if (schema.TryGetProperty(new SettingKey(name), out SettingProperty property))
-                {
+                if ((options & SettingWriterOptions.SuppressSettingComments) == 0
+                    && schema.TryGetProperty(new SettingKey(name), out SettingProperty property))
+                {
+                    if (extraNewLineBeforeComment) outputBuilder.AppendLine();
                     AppendCommentLines(property.Description);
                 }

@@ -217,6 +223,15 @@
     public enum SettingWriterOptions
     {
         Default,
+
+        /// <summary>
+        /// Generates all properties but comments them out.
+        /// </summary>
         CommentOutProperties = 1,
+
+        /// <summary>
+        /// Suppresses generation of comments before setting properties.
+        /// </summary>
+        SuppressSettingComments = 2,
     }
 }


Fix incorrect serialization condition

Fix incorrect serialization condition

--- osu.Game/Audio/SampleInfo.cs
+++ osu.Game/Audio/SampleInfo.cs
@@ -28,7 +28,7 @@
             set { bank = value; }
         }

-        public bool ShouldSerializeBank() => Bank == ControlPoint.SampleBank;
+        public bool ShouldSerializeBank() => Bank != ControlPoint.SampleBank;

         /// <summary>
         /// The name of the sample to load.
@@ -45,6 +45,6 @@
             set { volume = value; }
         }

-        public bool ShouldSerializeVolume() => Volume == ControlPoint.SampleVolume;
+        public bool ShouldSerializeVolume() => Volume != ControlPoint.SampleVolume;
     }
 }


Removed unused function

Removed unused function

--- osu.Game/Rulesets/Ruleset.cs
+++ osu.Game/Rulesets/Ruleset.cs
@@ -41,11 +41,6 @@

         public abstract IEnumerable<Mod> GetModsFor(ModType type);

-        public Mod GetModByShortenedName(string shortenedName)
-        {
-            return GetAllMods().First(mod => mod.ShortenedName == shortenedName);
-        }
-
         public Mod GetAutoplayMod() => GetAllMods().First(mod => mod is ModAutoplay);

         protected Ruleset(RulesetInfo rulesetInfo)


Allow overriding the sharpmake executable in the debug project extension.

--- Sharpmake/DebugProjectGenerator.cs
+++ Sharpmake/DebugProjectGenerator.cs
@@ -33,6 +33,7 @@
         {
             void AddSharpmakePackage(Project.Configuration config);
             void AddReferences(Project.Configuration config, IEnumerable<string> additionalReferences = null);
+            string GetSharpmakeExecutableFullPath();
         }

         public class DefaultDebugProjectExtension : IDebugProjectExtension
@@ -70,6 +71,19 @@
             public virtual bool ShouldUseLocalSharpmakeDll()
             {
                 return true;
+            }
+
+            public virtual string GetSharpmakeExecutableFullPath()
+            {
+                string sharpmakeApplicationExePath = Process.GetCurrentProcess().MainModule.FileName;
+
+                if (Util.IsRunningInMono())
+                {
+                    // When running within Mono, sharpmakeApplicationExePath will at this point wrongly refer to the
+                    // mono (or mono-sgen) executable. Fix it so that it points to Sharpmake.Application.exe.
+                    sharpmakeApplicationExePath = $"{AppDomain.CurrentDomain.BaseDirectory}{AppDomain.CurrentDomain.FriendlyName}";
+                }
+                return sharpmakeApplicationExePath;
             }
         }

@@ -235,21 +249,12 @@
         /// <param name="startArguments"></param>
         public static void SetupProjectOptions(this Project.Configuration conf, string startArguments)
         {
-            string sharpmakeApplicationExePath = Process.GetCurrentProcess().MainModule.FileName;
-
-            if (Util.IsRunningInMono())
-            {
-                // When running within Mono, sharpmakeApplicationExePath will at this point wrongly refer to the
-                // mono (or mono-sgen) executable. Fix it so that it points to Sharpmake.Application.exe.
-                sharpmakeApplicationExePath = $"{AppDomain.CurrentDomain.BaseDirectory}{AppDomain.CurrentDomain.FriendlyName}";
-            }
-
             conf.CsprojUserFile = new Project.Configuration.CsprojUserFileSettings();
             conf.CsprojUserFile.StartAction = Project.Configuration.CsprojUserFileSettings.StartActionSetting.Program;

             string quote = "\'"; // Use single quote that is cross platform safe
             conf.CsprojUserFile.StartArguments = $@"/sources(@{quote}{string.Join(";", MainSources)}{quote}) {startArguments}";
-            conf.CsprojUserFile.StartProgram = sharpmakeApplicationExePath;
+            conf.CsprojUserFile.StartProgram = DebugProjectExtension.GetSharpmakeExecutableFullPath();
         }
     }


Fixed bug in Peek()

Fixed bug in Peek()

--- SocketMessaging/FixedSizedQueue.cs
+++ SocketMessaging/FixedSizedQueue.cs
@@ -42,7 +42,7 @@

 		internal byte[] Peek(int peekPosition, int numberOfBytes)
 		{
-			if (peekPosition + numberOfBytes >= Count)
+			if (peekPosition + numberOfBytes > Count)
 				throw new OverflowException("Cant peek outside end of queue");

 			var buffer = new byte[numberOfBytes];


ex.InnerException.Message

ex.InnerException.Message

--- Signum.Engine/Engine/SqlPreCommand.cs
+++ Signum.Engine/Engine/SqlPreCommand.cs
@@ -180,9 +180,21 @@
                     Console.WriteLine();
                     SafeConsole.WriteLineColor(ConsoleColor.DarkRed, ex.GetType().Name + " (Number {0}): ".FormatWith(pgE?.SqlState ?? sqlE?.Number.ToString()));
                     SafeConsole.WriteLineColor(ConsoleColor.Red, ex.Message);
+                    if(ex.InnerException!=null)
+                    {
+                        SafeConsole.WriteLineColor(ConsoleColor.Red, ex.InnerException.Message);
+
+                        foreach (var item in realParts[pos].Lines())
+                        {
+                            SafeConsole.WriteLineColor(ConsoleColor.Red, item);
+
+                        }
+
+
+                    }

                     Console.WriteLine();
-
+
                     throw new ExecuteSqlScriptException(ex.Message, ex);
                 }
             }


Increased maximum start modifier higher (15x -> 25x)

Tried playing around with higher values and personally had quite fun when the circles covered the whole screen so I raised the max modifier to 25. Works best with an AR of <6.

--- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs
+++ osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs
@@ -21,7 +21,7 @@
         public override BindableNumber<float> StartScale { get; } = new BindableFloat
         {
             MinValue = 1f,
-            MaxValue = 15f,
+            MaxValue = 25f,
             Default = 2f,
             Value = 2f,
             Precision = 0.1f,


Correct wrong execption format

Correct wrong execption format

Former-commit-id: a6fcd9cb6efac880459dc46238fd07e55f9f3664 [formerly 998c257e417f02af8d5543485975b6e10675325b] [formerly bfb6a78c4a99a20aa3b1c4fa49ea92656e63a288 [formerly 6f93f615966134f0e6d2a617f5bced3f84bdaba8] [formerly f298e01dadfd6a2268a7fc58ebb6d7a492d49fd8] [formerly 61717aa6da66e2f4284fb5b90687ba7c99433f35 [formerly 499767c48f7107f3e98ff259980b9993e57c14c6]] [formerly bfb6a78c4a99a20aa3b1c4fa49ea92656e63a288 [formerly 6f93f615966134f0e6d2a617f5bced3f84bdaba8] [formerly f298e01dadfd6a2268a7fc58ebb6d7a492d49fd8] [formerly 61717aa6da66e2f4284fb5b90687ba7c99433f35 [formerly 499767c48f7107f3e98ff259980b9993e57c14c6]] [formerly 20823bbf118dd2c1907e5c611118c24be6c5ec01 [formerly e8cffb188a71ae930ba573951358c8ec001c0de9]]]]
Former-commit-id: c6b5c49da4064bbb1357be25ca11721eb4de219d
Former-commit-id: 038dd1c74ae7a0c9b06b7075a93fcd745d9218c7
Former-commit-id: 67bdf86ee3ab3432ea9333552a25a6ba9b47ba75
Former-commit-id: d0bf722ca0e133490c348861406b50ac80d73d6c
Former-commit-id: 2cdd54d8935bc1daa4ad768e5fd2b2aa6e5c1da9 [formerly 2121a170988a44a0809d2ee6865ff35a021accbc]
Former-commit-id: 4737a795080c1764a96209ae296bab18bf74a7a9
Former-commit-id: 500903b026ca0562b3d47d145e19f1ce867501b8

--- Source/Raw.Net/Source/RawParser.cs
+++ Source/Raw.Net/Source/RawParser.cs
@@ -201,7 +201,7 @@
             {
             }
             // File could not be decoded, so no further options for now.
-            throw new Exception("No decoder found. Sorry.");
+            throw new FormatException("No decoder found. Sorry.");
         }

         /* Parse FUJI information */


BeatmapSet and manager can not be null in BeatmapGroup.cs

--- osu.Game/Beatmaps/Drawables/BeatmapGroup.cs
+++ osu.Game/Beatmaps/Drawables/BeatmapGroup.cs
@@ -72,6 +72,11 @@

         public BeatmapGroup(BeatmapSetInfo beatmapSet, BeatmapManager manager)
         {
+            if (beatmapSet == null)
+                throw new ArgumentNullException(nameof(beatmapSet));
+            if (manager == null)
+                throw new ArgumentNullException(nameof(manager));
+
             BeatmapSet = beatmapSet;
             WorkingBeatmap beatmap = manager.GetWorkingBeatmap(BeatmapSet.Beatmaps.FirstOrDefault());


Remove unnecessary null checks from KeyedCollection

Contains and Remove already throw if the key is null, so there's no
need for additional null checks later in these methods.

--- src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs
+++ src/mscorlib/src/System/Collections/ObjectModel/KeyedCollection.cs
@@ -79,10 +79,8 @@
                 return dict.ContainsKey(key);
             }

-            if (key != null) {
-                foreach (TItem item in Items) {
-                    if (comparer.Equals(GetKeyForItem(item), key)) return true;
-                }
+            foreach (TItem item in Items) {
+                if (comparer.Equals(GetKeyForItem(item), key)) return true;
             }
             return false;
         }
@@ -114,12 +112,10 @@
                 return false;
             }

-            if (key != null) {
-                for (int i = 0; i < Items.Count; i++) {
-                    if (comparer.Equals(GetKeyForItem(Items[i]), key)) {
-                        RemoveItem(i);
-                        return true;
-                    }
+            for (int i = 0; i < Items.Count; i++) {
+                if (comparer.Equals(GetKeyForItem(Items[i]), key)) {
+                    RemoveItem(i);
+                    return true;
                 }
             }
             return false;


Use styled dropdown

Use styled dropdown

--- osu.Game/Overlays/Options/DropdownOption.cs
+++ osu.Game/Overlays/Options/DropdownOption.cs
@@ -2,6 +2,7 @@
 using System.ComponentModel;
 using System.Linq;
 using System.Reflection;
+using OpenTK;
 using OpenTK.Graphics;
 using osu.Framework.Configuration;
 using osu.Framework.Graphics;
@@ -61,13 +62,92 @@
             Children = new Drawable[]
             {
                 text = new SpriteText { Alpha = 0 },
-                dropdown = new DropDownMenu<T>
+                dropdown = new StyledDropDownMenu<T>
                 {
                     Margin = new MarginPadding { Top = 5 },
                     RelativeSizeAxes = Axes.X,
-                    Items = items.Select(item => new DropDownMenuItem<T>(item.Item1, item.Item2))
+                    Items = items.Select(item => new StyledDropDownMenuItem<T>(item.Item1, item.Item2))
                 }
             };
         }
+
+        private class StyledDropDownMenu<U> : DropDownMenu<U>
+        {
+            protected override float DropDownListSpacing => 4;
+
+            protected override DropDownComboBox CreateComboBox()
+            {
+                return new StyledDropDownComboBox();
+            }
+
+            public StyledDropDownMenu()
+            {
+                ComboBox.CornerRadius = 4;
+                DropDown.CornerRadius = 4;
+            }
+
+            protected override void AnimateOpen()
+            {
+                foreach (StyledDropDownMenuItem<U> child in DropDownList.Children)
+                {
+                    child.FadeIn(200);
+                    child.ResizeTo(new Vector2(1, 24), 200);
+                }
+                DropDown.Show();
+            }
+
+            protected override void AnimateClose()
+            {
+                foreach (StyledDropDownMenuItem<U> child in DropDownList.Children)
+                {
+                    child.ResizeTo(new Vector2(1, 0), 200);
+                    child.FadeOut(200);
+                }
+            }
+        }
+
+        private class StyledDropDownComboBox : DropDownComboBox
+        {
+            protected override Color4 BackgroundColour => new Color4(255, 255, 255, 100);
+            protected override Color4 BackgroundColourHover => Color4.HotPink;
+
+            public StyledDropDownComboBox()
+            {
+                Foreground.Padding = new MarginPadding(4);
+            }
+        }
+
+        private class StyledDropDownMenuItem<U> : DropDownMenuItem<U>
+        {
+            public StyledDropDownMenuItem(string text, U value) : base(text, value)
+            {
+                AutoSizeAxes = Axes.None;
+                Height = 0;
+                Foreground.Padding = new MarginPadding(2);
+            }
+
+            protected override void OnSelectChange()
+            {
+                if (!IsLoaded)
+                    return;
+
+                FormatBackground();
+                FormatCaret();
+                FormatLabel();
+            }
+
+            protected override void FormatCaret()
+            {
+                (Caret as SpriteText).Text = IsSelected ? @"+" : @"-";
+            }
+
+            protected override void FormatLabel()
+            {
+                if (IsSelected)
+                    (Label as SpriteText).Text = @"*" + Value + @"*";
+                else
+                    (Label as SpriteText).Text = Value.ToString();
+            }
+        }
     }
 }


Simplify code

Simplify code

--- osu.Game/Screens/Import/FileImportScreen.cs
+++ osu.Game/Screens/Import/FileImportScreen.cs
@@ -13,7 +13,6 @@
 using osu.Game.Graphics;
 using osu.Game.Graphics.UserInterfaceV2;
 using osuTK;
-using osu.Game.Overlays.Settings;
 using osu.Game.Overlays;
 using osu.Game.Graphics.UserInterface;
 using osu.Game.Graphics.Containers;
@@ -29,12 +28,11 @@

         public override bool HideOverlaysOnEnter => true;

-        private string[] fileExtensions = { ".foo" };
+        private string[] fileExtensions;
         private string defaultPath;

         private readonly Bindable<FileInfo> currentFile = new Bindable<FileInfo>();
         private readonly IBindable<DirectoryInfo> currentDirectory = new Bindable<DirectoryInfo>();
-        private readonly Bindable<FileFilterType> filterType = new Bindable<FileFilterType>(FileFilterType.All);
         private TextFlowContainer currentFileText;
         private OsuScrollContainer fileNameScroll;
         private readonly OverlayColourProvider overlayColourProvider = new OverlayColourProvider(OverlayColourScheme.Blue);
@@ -42,15 +40,12 @@
         [Resolved]
         private OsuGameBase gameBase { get; set; }

-        [Resolved]
-        private DialogOverlay dialogOverlay { get; set; }
-
         [BackgroundDependencyLoader(true)]
         private void load(Storage storage)
         {
             storage.GetStorageForDirectory("imports");
             var originalPath = storage.GetFullPath("imports", true);
-
+            fileExtensions = new string[] { ".osk", ".osr", ".osz" };
             defaultPath = originalPath;

             InternalChild = contentContainer = new Container
@@ -131,85 +126,43 @@
                                         {
                                             RelativeSizeAxes = Axes.X,
                                             AutoSizeAxes = Axes.Y,
+                                            Margin = new MarginPadding { Bottom = 15, Top =15 },
                                             Children = new Drawable[]
                                             {
-                                                new Box
-                                                {
-                                                    Colour = overlayColourProvider.Background4,
-                                                    RelativeSizeAxes = Axes.Both
-                                                },
                                                 new FillFlowContainer
                                                 {
                                                     RelativeSizeAxes = Axes.X,
                                                     AutoSizeAxes = Axes.Y,
-                                                    Spacing = new Vector2(10),
                                                     Children = new Drawable[]
                                                     {
-                                                        new SettingsEnumDropdown<FileFilterType>
-                                                        {
-                                                            Anchor = Anchor.BottomCentre,
-                                                            Origin = Anchor.BottomCentre,
-                                                            LabelText = "File Type",
-                                                            Current = filterType,
-                                                            Margin = new MarginPadding { Bottom = 15 }
-                                                        },
-                                                        new GridContainer
-                                                        {
-                                                            Anchor = Anchor.BottomCentre,
-                                                            Origin = Anchor.BottomCentre,
-                                                            AutoSizeAxes = Axes.Y,
-                                                            RelativeSizeAxes = Axes.X,
-                                                            Margin = new MarginPadding { Top = 15 },
-                                                            RowDimensions = new[]
+                                                            new TriangleButton
                                                             {
-                                                                new Dimension(GridSizeMode.AutoSize)
-                                                            },
-                                                            Content = new[]
-                                                            {
-                                                                new Drawable[]
+                                                                Text = "Import",
+                                                                Anchor = Anchor.BottomCentre,
+                                                                Origin = Anchor.BottomCentre,
+                                                                RelativeSizeAxes = Axes.X,
+                                                                Height = 50,
+                                                                Width = 0.9f,
+                                                                Action = () =>
                                                                 {
-                                                                    new TriangleButton
-                                                                    {
-                                                                        Anchor = Anchor.BottomCentre,
-                                                                        Origin = Anchor.BottomCentre,
-                                                                        RelativeSizeAxes = Axes.X,
-                                                                        Height = 50,
-                                                                        Width = 0.9f,
-                                                                        Text = "Refresh",
-                                                                        Action = refresh
-                                                                    },
-                                                                    new TriangleButton
-                                                                    {
-                                                                        Text = "Import",
-                                                                        Anchor = Anchor.BottomCentre,
-                                                                        Origin = Anchor.BottomCentre,
-                                                                        RelativeSizeAxes = Axes.X,
-                                                                        Height = 50,
-                                                                        Width = 0.9f,
-                                                                        Action = () =>
-                                                                        {
-                                                                            var d = currentFile.Value?.FullName;
-                                                                            if (d != null)
-                                                                                startImport(d);
-                                                                            else
-                                                                                currentFileText.FlashColour(Color4.Red, 500);
-                                                                        },
-                                                                    }
-                                                                },
+                                                                    var d = currentFile.Value?.FullName;
+                                                                    if (d != null)
+                                                                        startImport(d);
+                                                                    else
+                                                                        currentFileText.FlashColour(Color4.Red, 500);
+                                                                }
                                                             }
-                                                        },
                                                     }
-                                                },
+                                                }
                                             }
                                         }
                                     }
                                 }
-                            },
+                            }
                         }
                     }
                 }
             };
-
             fileNameScroll.ScrollContent.Anchor = Anchor.Centre;
             fileNameScroll.ScrollContent.Origin = Anchor.Centre;

@@ -218,37 +171,6 @@
             {
                 currentFile.Value = null;
             });
-
-            filterType.BindValueChanged(onFilterTypeChanged, true);
-        }
-
-        private void onFilterTypeChanged(ValueChangedEvent<FileFilterType> v)
-        {
-            switch (v.NewValue)
-            {
-                case FileFilterType.Beatmap:
-                    fileExtensions = new string[] { ".osz" };
-                    break;
-
-                case FileFilterType.Skin:
-                    fileExtensions = new string[] { ".osk" };
-                    break;
-
-                case FileFilterType.Replay:
-                    fileExtensions = new string[] { ".osr" };
-                    break;
-
-                default:
-                case FileFilterType.All:
-                    fileExtensions = new string[] { ".osk", ".osr", ".osz" };
-                    break;
-            }
-
-            refresh();
-        }
-
-        private void refresh()
-        {
             currentFile.UnbindBindings();
             currentDirectory.UnbindBindings();

@@ -265,7 +187,6 @@

             fileSelectContainer.Add(fileSelector);
         }
-
         private void updateFileSelectionText(ValueChangedEvent<FileInfo> v)
         {
             currentFileText.Text = v.NewValue?.Name ?? "Select a file";
@@ -298,7 +219,6 @@

             if (!File.Exists(path))
             {
-                refresh();
                 currentFileText.Text = "File not exist";
                 currentFileText.FlashColour(Color4.Red, 500);
                 return;


Use better(?) variable name

Use better(?) variable name

--- osu.Framework/Graphics/Containers/RearrangeableListContainer.cs
+++ osu.Framework/Graphics/Containers/RearrangeableListContainer.cs
@@ -81,9 +81,7 @@
         private void itemsRemoved(IEnumerable<T> items)
         {
             foreach (var item in items)
-            {
                 ListContainer.Remove(item);
-            }
         }

         protected class ListScrollContainer : ScrollContainer<ListFillFlowContainer>
@@ -139,13 +137,13 @@

             private T currentlyDraggedItem;
             private Vector2 nativeDragPosition;
-            private List<Drawable> sortableChildList;
+            private List<Drawable> cachedFlowingChildren;

             protected override bool OnDragStart(DragStartEvent e)
             {
                 nativeDragPosition = e.ScreenSpaceMousePosition;
                 currentlyDraggedItem = this.FirstOrDefault(d => d.IsDraggable);
-                sortableChildList = new List<Drawable>(FlowingChildren);
+                cachedFlowingChildren = new List<Drawable>(FlowingChildren);
                 return currentlyDraggedItem != null || base.OnDragStart(e);
             }

@@ -160,7 +158,7 @@
                 nativeDragPosition = e.ScreenSpaceMousePosition;
                 var handled = currentlyDraggedItem != null || base.OnDragEnd(e);
                 currentlyDraggedItem = null;
-                sortableChildList = new List<Drawable>();
+                cachedFlowingChildren = new List<Drawable>();
                 return handled;
             }

@@ -168,10 +166,8 @@
             {
                 base.Update();

-                if (currentlyDraggedItem == null)
-                    return;
-
-                updateDragPosition();
+                if (currentlyDraggedItem != null)
+                    updateDragPosition();
             }

             private void updateDragPosition()
@@ -196,17 +192,16 @@
                 if (srcIndex == dstIndex)
                     return;

-                sortableChildList.Remove(currentlyDraggedItem);
+                cachedFlowingChildren.Remove(currentlyDraggedItem);

                 if (srcIndex < dstIndex - 1)
                     dstIndex--;

-                sortableChildList.Insert(dstIndex, currentlyDraggedItem);
-
-                for (int i = 0; i < sortableChildList.Count; i++)
-                    SetLayoutPosition(sortableChildList[i], i);
-            }
-        }
-    }
+                cachedFlowingChildren.Insert(dstIndex, currentlyDraggedItem);
+
+                for (int i = 0; i < cachedFlowingChildren.Count; i++)
+                    SetLayoutPosition(cachedFlowingChildren[i], i);
+            }
+        }
     }
 }


Fix weird test step

Fix weird test step

--- osu.Game.Tests/Visual/UserInterface/TestSceneModSelectScreen.cs
+++ osu.Game.Tests/Visual/UserInterface/TestSceneModSelectScreen.cs
@@ -48,7 +48,7 @@
         public void TestStateChange()
         {
             createScreen();
-            AddToggleStep("toggle state", visible => modSelectScreen.State.Value = visible ? Visibility.Visible : Visibility.Hidden);
+            AddStep("toggle state", () => modSelectScreen.ToggleVisibility());
         }

         [Test]


Check nulls

Check nulls

--- osu.Game/Screens/Ranking/Expanded/ExpandedPanelMiddleContent.cs
+++ osu.Game/Screens/Ranking/Expanded/ExpandedPanelMiddleContent.cs
@@ -51,6 +51,7 @@
         {
             var beatmap = working.Value.BeatmapInfo;
             var metadata = beatmap.Metadata;
+            var creator = beatmap.Metadata.Author?.Username;

             var topStatistics = new List<StatisticDisplay>
             {
@@ -162,8 +163,11 @@
                                         Direction = FillDirection.Horizontal,
                                     }.With(t =>
                                     {
-                                        t.AddText("mapped by ");
-                                        t.AddText(metadata.Author.Username, s => s.Font = s.Font.With(weight: FontWeight.SemiBold));
+                                        if (!string.IsNullOrEmpty(creator))
+                                        {
+                                            t.AddText("mapped by ");
+                                            t.AddText(creator, s => s.Font = s.Font.With(weight: FontWeight.SemiBold));
+                                        }
                                     })
                                 }
                             },


#18 Removed the hasFirstCondition logic

#18 Removed the hasFirstCondition logic

There is always a first FileExistsCondition

--- FeedBuilder/frmMain.cs
+++ FeedBuilder/frmMain.cs
@@ -271,27 +271,25 @@

 					XmlElement conds = doc.CreateElement("Conditions");
 					XmlElement cond;
-					bool hasFirstCondition = false;

                     //File Exists
                     cond = doc.CreateElement("FileExistsCondition");
-                    cond.SetAttribute("type", "or");
+                    cond.SetAttribute("type", "or-not");
                     conds.AppendChild(cond);
-

 					//Version
 					if (chkVersion.Checked && !string.IsNullOrEmpty(fileInfoEx.FileVersion)) {
 						cond = doc.CreateElement("FileVersionCondition");
+						cond.SetAttribute("type", "or-not");
 						cond.SetAttribute("what", "below");
 						cond.SetAttribute("version", fileInfoEx.FileVersion);
 						conds.AppendChild(cond);
-						hasFirstCondition = true;
 					}

 					//Size
 					if (chkSize.Checked) {
 						cond = doc.CreateElement("FileSizeCondition");
-						cond.SetAttribute("type", hasFirstCondition ? "or-not" : "not");
+						cond.SetAttribute("type", "or-not");
 						cond.SetAttribute("what", "is");
 						cond.SetAttribute("size", fileInfoEx.FileInfo.Length.ToString(CultureInfo.InvariantCulture));
 						conds.AppendChild(cond);
@@ -300,7 +298,7 @@
 					//Date
 					if (chkDate.Checked) {
 						cond = doc.CreateElement("FileDateCondition");
-						if (hasFirstCondition) cond.SetAttribute("type", "or");
+						cond.SetAttribute("type", "or");
 						cond.SetAttribute("what", "older");
 						// local timestamp, not UTC
 						cond.SetAttribute("timestamp", fileInfoEx.FileInfo.LastWriteTime.ToFileTime().ToString(CultureInfo.InvariantCulture));
@@ -310,7 +308,7 @@
 					//Hash
 					if (chkHash.Checked) {
 						cond = doc.CreateElement("FileChecksumCondition");
-						cond.SetAttribute("type", hasFirstCondition ? "or-not" : "not");
+						cond.SetAttribute("type", "or-not");
 						cond.SetAttribute("checksumType", "sha256");
 						cond.SetAttribute("checksum", fileInfoEx.Hash);
 						conds.AppendChild(cond);


Splitter should call OnLoadComplete on panels after they are added to the parent to be consistent with Pixel/Table layouts

--- Source/Eto/Forms/Controls/Splitter.cs
+++ Source/Eto/Forms/Controls/Splitter.cs
@@ -68,30 +68,34 @@
 					inner.Panel1.SetParent (null);
 				if (value != null) {
 					value.SetParent (this);
-					if (Loaded) {
+					if (Loaded && !value.Loaded) {
 						value.OnPreLoad (EventArgs.Empty);
 						value.OnLoad (EventArgs.Empty);
-						value.OnLoadComplete (EventArgs.Empty);
 					}
 				}
 				inner.Panel1 = value;
+				if (Loaded && value != null && !value.Loaded)
+					value.OnLoadComplete (EventArgs.Empty);
 			}
 		}

 		public Control Panel2 {
 			get { return inner.Panel2; }
-			set {
+			set {
 				if (inner.Panel2 != null)
 					inner.Panel2.SetParent (null);
+				bool load = false;
 				if (value != null) {
 					value.SetParent (this);
-					if (Loaded) {
+					if (Loaded && !value.Loaded) {
+						load = true;
 						value.OnPreLoad (EventArgs.Empty);
 						value.OnLoad (EventArgs.Empty);
-						value.OnLoadComplete (EventArgs.Empty);
 					}
 				}
 				inner.Panel2 = value;
+				if (load)
+					value.OnLoadComplete (EventArgs.Empty);
 			}
 		}


Fixed calendar days view

Fixed calendar days view

--- src/private/AirplusCore/CoreAirPlus/Views/Home/CalendarDays.cshtml
+++ src/private/AirplusCore/CoreAirPlus/Views/Home/CalendarDays.cshtml
@@ -7,13 +7,8 @@
 @{
     ViewData["Title"] = "CalendarDays";
 }
-

CalendarDays

-
-

-
CalendarPrice

-

-

+

                 @{
@@ -25,10 +20,10 @@
                         var monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(m.CalendarDate.Month);
                         if (ListingID == 0)
                         {
-                            ListingID = m.ListingID;
+                            ListingID = m.ListingId;

                         }
-                        else if (ListingID != m.ListingID)
+                        else if (ListingID != m.ListingId)
                         {
                             break;
                         }
@@ -64,15 +59,15 @@

                 if (listingID == 0)
                 {
-                    listingID = cal.ListingID;
+                    listingID = cal.ListingId;
                     strb.Append("
");
-                    strb.Append("" + cal.ListingID + @"	");
+                    strb.Append("" + cal.ListingId + @"	");
                 }
-                else if (listingID != cal.ListingID)
+                else if (listingID != cal.ListingId)
                 {
-                    listingID = cal.ListingID;
+                    listingID = cal.ListingId;
                     strb.Append("

");
-                    strb.Append("" + cal.ListingID + @"	");
+                    strb.Append("" + cal.ListingId + @"	");
                 }

                 if (month != cal.CalendarDate.Month)


-XML documentation

-XML documentation

--- Src/Newtonsoft.Json/Linq/JToken.cs
+++ Src/Newtonsoft.Json/Linq/JToken.cs
@@ -1907,7 +1907,7 @@
         }

         /// <summary>
-        /// Selects the token that matches the object path.
+        /// Selects the token that matches the JSON path.
         /// </summary>
         /// <param name="path">
         /// The object path from the current <see cref="JToken"/> to the <see cref="JToken"/>
@@ -1922,7 +1922,7 @@
         }

         /// <summary>
-        /// Selects the token that matches the object path.
+        /// Selects the token that matches the JSON path.
         /// </summary>
         /// <param name="path">
         /// The object path from the current <see cref="JToken"/> to the <see cref="JToken"/>
@@ -1944,11 +1944,22 @@
             return result.SingleOrDefault();
         }

+        /// <summary>
+        /// Selects tokens that match the JSON path.
+        /// </summary>
+        /// <param name="path"></param>
+        /// <returns></returns>
         public IEnumerable<JToken> SelectTokens(string path)
         {
             return SelectTokens(path, false);
         }

+        /// <summary>
+        /// Selects tokens that match the JSON path.
+        /// </summary>
+        /// <param name="path"></param>
+        /// <param name="errorWhenNoMatch"></param>
+        /// <returns></returns>
         public IEnumerable<JToken> SelectTokens(string path, bool errorWhenNoMatch)
         {
             JPath p = new JPath(path);


Fix get user profile to correctly use user id if passed in

--- Fitbit/FitbitClient.cs
+++ Fitbit/FitbitClient.cs
@@ -248,7 +248,7 @@
             else
                 apiCall = string.Format("/1/user/{0}/profile.xml", encodedUserId);

-            RestRequest request = new RestRequest("/1/user/-/profile.xml");
+            RestRequest request = new RestRequest(apiCall);
             request.RootElement = "user";

             //var response = restClient.Execute<List<Friend>>(request);


Fix bug: Missing initial character in error messages.


Fix loading errors

Fix loading errors

--- Source/Parameters/DMCollectScience.cs
+++ Source/Parameters/DMCollectScience.cs
@@ -200,7 +200,7 @@
 			{
 				DMUtils.Logging("Failed To Load Science Container Variables; Collect Science Parameter Removed");
 				this.Unregister();
-				this.Root.RemoveParameter(this);
+				this.Parent.RemoveParameter(this);
 				return;
 			}
 			else
@@ -211,7 +211,7 @@
 			{
 				DMUtils.Logging("Failed To Load Target Body Variables; Collect Science Parameter Removed");
 				this.Unregister();
-				this.Root.RemoveParameter(this);
+				this.Parent.RemoveParameter(this);
 				return;
 			}
 			if (int.TryParse(scienceString[3], out targetSituation))
@@ -220,7 +220,7 @@
 			{
 				DMUtils.Logging("Failed To Load Situation Variables; Collect Science Parameter Removed");
 				this.Unregister();
-				this.Root.RemoveParameter(this);
+				this.Parent.RemoveParameter(this);
 				return;
 			}
 			biomeName = scienceString[4];


Update Color SuperPang Bonus Collision

Update Color SuperPang Bonus Collision

--- Super-Pang/Super-Pang/SuperPang.cs
+++ Super-Pang/Super-Pang/SuperPang.cs
@@ -481,14 +481,14 @@
                                 break;
                             case '$':
                                 playerScore += 100;
+                                playerColor = bonusColor;
                                 break;
                             case '@':
                                 playerScore += 200;
                                 lives++;
+                                playerColor = bonusColor;
                                 break;
                         }
-
-                        playerColor = bonusColor;
                         hasBonus = false;
                     }
                 }


Version Bump

Version Bump

--- Syndll2/Properties/AssemblyInfo.cs
+++ Syndll2/Properties/AssemblyInfo.cs
@@ -11,9 +11,9 @@
 [assembly: ComVisible(false)]
 [assembly: Guid("a7fe65a7-0b61-4ea1-81c0-adc5a037ea17")]

-[assembly: AssemblyVersion("0.12.1")]
-[assembly: AssemblyFileVersion("0.12.1.47")]
-[assembly: AssemblyInformationalVersion("0.12.1-beta")]
+[assembly: AssemblyVersion("0.12.2")]
+[assembly: AssemblyFileVersion("0.12.2.48")]
+[assembly: AssemblyInformationalVersion("0.12.2-beta")]

 [assembly: InternalsVisibleTo("Syndll2.Tests, PublicKey=" +
 "00240000048000009400000006020000002400005253413100040000010001000f0f0c410cd366" +


Experimental optimization where shapes does not get cloned, but are reused instead.

--- SourceFiles/FP3.0/Dynamics/Fixture.cs
+++ SourceFiles/FP3.0/Dynamics/Fixture.cs
@@ -130,8 +130,11 @@
             Body = body;
             Next = null;

+#if ConserveMemory
+            Shape = shape;
+#else
             Shape = shape.Clone();
-
+#endif
             // Reserve proxy space
             int childCount = Shape.GetChildCount();
             Proxies = new FixtureProxy[childCount];


new functionId value (changeset 1316998)

--- Src/Workspaces/Core/Log/FunctionId.cs
+++ Src/Workspaces/Core/Log/FunctionId.cs
@@ -11,8 +11,6 @@
         // for our other scenarios.
         TestEvent_NotUsed = 1,

-        Run_Environment,
-
         WorkCoordinator_DocumentWorker_Enqueue,
         WorkCoordinator_ProcessProjectAsync,
         WorkCoordinator_ProcessDocumentAsync,
@@ -31,6 +29,10 @@
         Diagnostics_DocumentOpen,
         Diagnostics_RemoveDocument,
         Diagnostics_RemoveProject,
+
+        // add new values after this
+        Run_Environment,
+        Run_Environment_Options,

         Tagger_AdornmentManager_OnLayoutChanged,
         Tagger_AdornmentManager_UpdateInvalidSpans,


Workflow Field functionality draft; refactoring & TODOs

--- StartupValidation/V1FieldValidator.cs
+++ StartupValidation/V1FieldValidator.cs
@@ -15,7 +15,7 @@
             Logger.Log(LogMessage.SeverityType.Info, string.Format("Checking custom field for {0}...", typeWorkitem));

             if (string.IsNullOrEmpty(fieldName)) {
-                Logger.Log(LogMessage.SeverityType.Error, "Config contains not defined or empty field name.");
+                Logger.Log(LogMessage.SeverityType.Error, "Configuration contains undefined or empty field name.");
                 return false;
             }


修改了一个BUG

修改了一个BUG

默认股票池为NULL的问题

--- Stock.Common/Strategy/BaseStrategy.cs
+++ Stock.Common/Strategy/BaseStrategy.cs
@@ -275,7 +275,7 @@
         public virtual IList<StockData> LoadData()
         {
             // nothing to do
-            return null;
+            return new List<StockData>();
         }

         #endregion


Convert id to int64 after saving

Convert id to int64 after saving

--- SubSonic/ActiveRecord/ActiveRecord.cs
+++ SubSonic/ActiveRecord/ActiveRecord.cs
@@ -190,7 +190,7 @@
                 if(pkVal != null)
                 {
                     if(pkVal.GetType() == typeof(decimal))
-                        pkVal = Convert.ToInt32(pkVal);
+                        pkVal = Convert.ToInt64(pkVal);

                     // set the primaryKey, only if an auto-increment
                     if(BaseSchema.PrimaryKey.AutoIncrement || BaseSchema.PrimaryKey.DataType == DbType.Guid)


For consistency, rename all other private fields so they too start with a capital letter.

--- SysExtensions/Text/Json/JsonParser.cs
+++ SysExtensions/Text/Json/JsonParser.cs
@@ -31,28 +31,28 @@
     /// </summary>
     public class JsonParser : JsonSymbolVisitor<JsonSyntaxNode>
     {
-        private readonly ReadOnlyList<TextElement<JsonSymbol>> tokens;
-        private readonly int sourceLength;
+        private readonly ReadOnlyList<TextElement<JsonSymbol>> Tokens;
+        private readonly int SourceLength;
         private readonly List<JsonErrorInfo> Errors = new List<JsonErrorInfo>();

-        private int currentTokenIndex;
+        private int CurrentTokenIndex;

         public JsonParser(ReadOnlyList<TextElement<JsonSymbol>> tokens, int sourceLength)
         {
-            this.tokens = tokens;
-            this.sourceLength = sourceLength;
-            currentTokenIndex = 0;
+            Tokens = tokens;
+            SourceLength = sourceLength;
+            CurrentTokenIndex = 0;
         }

         private TextElement<JsonSymbol> PeekSkipComments()
         {
             // Skip comments until encountering something meaningful.
-            while (currentTokenIndex < tokens.Count)
-            {
-                TextElement<JsonSymbol> current = tokens[currentTokenIndex];
+            while (CurrentTokenIndex < Tokens.Count)
+            {
+                TextElement<JsonSymbol> current = Tokens[CurrentTokenIndex];
                 if (!current.TerminalSymbol.IsBackground) return current;
                 Errors.AddRange(current.TerminalSymbol.Errors);
-                currentTokenIndex++;
+                CurrentTokenIndex++;
             }
             return null;
         }
@@ -60,11 +60,11 @@
         private TextElement<JsonSymbol> ReadSkipComments()
         {
             // Skip comments until encountering something meaningful.
-            while (currentTokenIndex < tokens.Count)
-            {
-                TextElement<JsonSymbol> current = tokens[currentTokenIndex];
+            while (CurrentTokenIndex < Tokens.Count)
+            {
+                TextElement<JsonSymbol> current = Tokens[CurrentTokenIndex];
                 Errors.AddRange(current.TerminalSymbol.Errors);
-                currentTokenIndex++;
+                CurrentTokenIndex++;
                 if (!current.TerminalSymbol.IsBackground) return current;
             }
             return null;
@@ -186,7 +186,7 @@
                     {
                         Errors.Add(new JsonErrorInfo(
                             JsonErrorCode.UnexpectedEofInObject,
-                            sourceLength,
+                            SourceLength,
                             0));
                     }
                     else if (!isCurlyClose)
@@ -237,7 +237,7 @@
                     {
                         Errors.Add(new JsonErrorInfo(
                             JsonErrorCode.UnexpectedEofInArray,
-                            sourceLength,
+                            SourceLength,
                             0));
                     }
                     else if (!(textElement.TerminalSymbol is JsonSquareBracketClose))
@@ -266,7 +266,7 @@

             Errors.Add(new JsonErrorInfo(
                 JsonErrorCode.UnrecognizedValue,
-                tokens[currentTokenIndex - 1].Start,
+                Tokens[CurrentTokenIndex - 1].Start,
                 value.Length,
                 new[] { value }));


Removed parameter from ScheduleNotification method

--- TFG.Droid/Utils/NotificationsUtils.cs
+++ TFG.Droid/Utils/NotificationsUtils.cs
@@ -8,7 +8,7 @@
 namespace TFG.Droid.Utils {
     class NotificationsUtils {

-        public static void ScheduleNotification(Context ctx, int moduleId, NotificationItem notificationItem, long time) {
+        public static void ScheduleNotification(Context ctx, int moduleId, long time) {
             var alarmIntent = new Intent(ctx, typeof(NotificationReceiver));
             alarmIntent.PutExtra("moduleId", moduleId);


Cleanup

Cleanup

--- TPPCamSetterComponent/TPPCamSetter.cs
+++ TPPCamSetterComponent/TPPCamSetter.cs
@@ -1,7 +1,7 @@
 // Copyright (c) 2015 Bartłomiej Wołk (bartlomiejwolk@gmail.com)
-//
-// This file is part of the TPPCamera extension for Unity.
-// Licensed under the MIT license. See LICENSE file in the project root folder.
+//
+// This file is part of the TPPCamera extension for Unity. Licensed under the
+// MIT license. See LICENSE file in the project root folder.

 using TPPCamera.TPPCamComponent;
 using UnityEngine;
@@ -9,24 +9,29 @@
 namespace TPPCamera.TPPCamSetterComponent {

     public sealed class TPPCamSetter : MonoBehaviour {
-
         #region FIELDS

         [SerializeField]
         private TPPCam cameraCo;

         [SerializeField]
-        private TPPCamProperties tppCamProperties;
+        private Properties properties;

         [SerializeField]
-        private Properties properties;
+        private TPPCamProperties tppCamProperties;

         #endregion FIELDS

         #region PROPERTIES
+
+        public TPPCam CameraCo {
+            get { return cameraCo; }
+            set { cameraCo = value; }
+        }
+
         /// <summary>
-        /// Keeps info about what properties of the target camera component
-        /// should be updated.
+        ///     Keeps info about what properties of the target camera component
+        ///     should be updated.
         /// </summary>
         public Properties Properties {
             get { return properties; }
@@ -34,19 +39,14 @@
         }

         /// <summary>
-        /// Properties used to update the target camera component.
+        ///     Properties used to update the target camera component.
         /// </summary>
         public TPPCamProperties TppCamProperties {
             get { return tppCamProperties; }
             set { tppCamProperties = value; }
         }

-        public TPPCam CameraCo {
-            get { return cameraCo; }
-            set { cameraCo = value; }
-        }
-
-        #endregion
+        #endregion PROPERTIES

         #region METHODS

@@ -74,8 +74,7 @@
             CameraCo.LookAtPointOffset = TppCamProperties.LookAtPointOffset;
         }

-
-        #endregion
+        #endregion METHODS
     }

-}
+}


re-ordered inserts in log polling to make triggers work correctly

--- TabMon/LogPoller/LogsToDbConverter.cs
+++ TabMon/LogPoller/LogsToDbConverter.cs
@@ -60,8 +60,9 @@

                 lock(writeLock)
                 {
+                    // Server logs need to be inserted first for the triggers to work.
+                    if (serverLogsTableCount > 0) writer.Write(serverLogsTable);
                     if (filterStateCount > 0) writer.Write(filterStateTable);
-                    if (serverLogsTableCount > 0) writer.Write(serverLogsTable);
                 }
             }
             catch (Exception e)


Fixed NullReferenceException during an item's initialisation

--- TreeViewEx/Controls/TreeViewExItem.cs
+++ TreeViewEx/Controls/TreeViewExItem.cs
@@ -543,7 +543,7 @@
 		protected override void OnInitialized(EventArgs e)
 		{
 			base.OnInitialized(e);
-			if (ParentTreeView.SelectedItems.Contains(DataContext))
+			if (ParentTreeView != null && ParentTreeView.SelectedItems.Contains(DataContext))
 			{
 				IsSelected = true;
 			}


Update version number

Update version number

--- Undisposed/Properties/AssemblyInfo.cs
+++ Undisposed/Properties/AssemblyInfo.cs
@@ -19,7 +19,7 @@
 // The form "{Major}.{Minor}.*" will automatically update the build and revision,
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.

-[assembly: AssemblyVersion("1.1.*")]
+[assembly: AssemblyVersion("1.2.*")]

 // The following attributes are used to specify the signing key for the assembly,
 // if desired. See the Mono documentation for more information about signing.


Added unit tests for ImapClient.Authenticated event

--- UnitTests/Net/Imap/ImapClientTests.cs
+++ UnitTests/Net/Imap/ImapClientTests.cs
@@ -1131,6 +1131,11 @@
 			commands.Add (new ImapReplayCommand ("A00000002 LIST \"\" \"INBOX\"\r\n", "common.list-inbox.txt"));

 			using (var client = new ImapClient ()) {
+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					client.ReplayConnect ("localhost", new ImapReplayStream (commands, false));
 				} catch (Exception ex) {
@@ -1139,6 +1144,7 @@

 				Assert.IsTrue (client.IsConnected, "Client failed to connect.");
 				Assert.IsTrue (client.IsAuthenticated, "Client should be authenticated.");
+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.IsFalse (client.IsSecure, "IsSecure should be false.");

 				Assert.AreEqual (capabilities, client.Capabilities, "Capabilities");
@@ -1164,6 +1170,11 @@
 			commands.Add (new ImapReplayCommand ("A00000002 LIST \"\" \"INBOX\"\r\n", "common.list-inbox.txt"));

 			using (var client = new ImapClient ()) {
+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					await client.ReplayConnectAsync ("localhost", new ImapReplayStream (commands, true));
 				} catch (Exception ex) {
@@ -1172,6 +1183,7 @@

 				Assert.IsTrue (client.IsConnected, "Client failed to connect.");
 				Assert.IsTrue (client.IsAuthenticated, "Client should be authenticated.");
+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.IsFalse (client.IsSecure, "IsSecure should be false.");

 				Assert.AreEqual (capabilities, client.Capabilities, "Capabilities");
@@ -1196,6 +1208,11 @@
 			commands.Add (new ImapReplayCommand ("A00000001 LIST \"\" \"INBOX\"\r\n", "common.list-inbox.txt"));

 			using (var client = new ImapClient ()) {
+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					client.ReplayConnect ("localhost", new ImapReplayStream (commands, false));
 				} catch (Exception ex) {
@@ -1204,6 +1221,7 @@

 				Assert.IsTrue (client.IsConnected, "Client failed to connect.");
 				Assert.IsTrue (client.IsAuthenticated, "Client should be authenticated.");
+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.IsFalse (client.IsSecure, "IsSecure should be false.");

 				Assert.AreEqual (capabilities, client.Capabilities, "Capabilities");
@@ -1228,6 +1246,11 @@
 			commands.Add (new ImapReplayCommand ("A00000001 LIST \"\" \"INBOX\"\r\n", "common.list-inbox.txt"));

 			using (var client = new ImapClient ()) {
+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					await client.ReplayConnectAsync ("localhost", new ImapReplayStream (commands, true));
 				} catch (Exception ex) {
@@ -1236,6 +1259,7 @@

 				Assert.IsTrue (client.IsConnected, "Client failed to connect.");
 				Assert.IsTrue (client.IsAuthenticated, "Client should be authenticated.");
+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.IsFalse (client.IsSecure, "IsSecure should be false.");

 				Assert.AreEqual (capabilities, client.Capabilities, "Capabilities");
@@ -1285,12 +1309,18 @@
 				// Note: Do not try to use any SASL mechanisms
 				client.AuthenticationMechanisms.Clear ();

+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					client.Authenticate (new NetworkCredential ("Indiana \"Han Solo\" Jones", "p@ss\\word"));
 				} catch (Exception ex) {
 					Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex);
 				}

+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities);
 				Assert.IsTrue (client.SupportsQuotas, "SupportsQuotas");

@@ -1333,12 +1363,18 @@
 				// Note: Do not try to use any SASL mechanisms
 				client.AuthenticationMechanisms.Clear ();

+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					await client.AuthenticateAsync (new NetworkCredential ("Indiana \"Han Solo\" Jones", "p@ss\\word"));
 				} catch (Exception ex) {
 					Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex);
 				}

+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities);
 				Assert.IsTrue (client.SupportsQuotas, "SupportsQuotas");

@@ -1486,12 +1522,18 @@
 				client.AuthenticationMechanisms.Remove ("XOAUTH2");
 				client.AuthenticationMechanisms.Remove ("PLAIN");

+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					client.Authenticate (new NetworkCredential ("username", "password"));
 				} catch (Exception ex) {
 					Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex);
 				}

+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities);
 				Assert.IsTrue (client.SupportsQuotas, "SupportsQuotas");

@@ -1578,12 +1620,18 @@
 				client.AuthenticationMechanisms.Remove ("XOAUTH2");
 				client.AuthenticationMechanisms.Remove ("PLAIN");

+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					await client.AuthenticateAsync (new NetworkCredential ("username", "password"));
 				} catch (Exception ex) {
 					Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex);
 				}

+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities);
 				Assert.IsTrue (client.SupportsQuotas, "SupportsQuotas");

@@ -1762,6 +1810,11 @@
 				Assert.AreEqual (120000, client.Timeout, "Timeout");
 				client.Timeout *= 2;

+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					var credentials = new NetworkCredential ("username", "password");
 					var sasl = new SaslMechanismLogin (credentials);
@@ -1771,6 +1824,7 @@
 					Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex);
 				}

+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities);
 				Assert.IsTrue (client.SupportsQuotas, "SupportsQuotas");

@@ -1813,6 +1867,11 @@
 				Assert.AreEqual (120000, client.Timeout, "Timeout");
 				client.Timeout *= 2;

+				int authenticated = 0;
+				client.Authenticated += (sender, e) => {
+					authenticated++;
+				};
+
 				try {
 					var credentials = new NetworkCredential ("username", "password");
 					var sasl = new SaslMechanismLogin (credentials);
@@ -1822,6 +1881,7 @@
 					Assert.Fail ("Did not expect an exception in Authenticate: {0}", ex);
 				}

+				Assert.AreEqual (1, authenticated, "Authenticated event was not emitted the expected number of times");
 				Assert.AreEqual (GMailAuthenticatedCapabilities, client.Capabilities);
 				Assert.IsTrue (client.SupportsQuotas, "SupportsQuotas");


Fix reference

Fix reference

--- osu.Framework/Graphics/OpenGL/Buffers/VertexBuffer.cs
+++ osu.Framework/Graphics/OpenGL/Buffers/VertexBuffer.cs
@@ -29,7 +29,7 @@
         }

         /// <summary>
-        /// Initialises this <see cref="VertexBuffer"/>. Guaranteed to be run on the draw thread.
+        /// Initialises this <see cref="VertexBuffer{T}"/>. Guaranteed to be run on the draw thread.
         /// </summary>
         protected virtual void Initialise()
         {


Points for nonmembers are now retrieved either from using fec_points/player_stats data, or by manual entry from the customPoints.json file.

--- UpdateTournament/updateTournament.csx
+++ UpdateTournament/updateTournament.csx
@@ -81,6 +81,12 @@
             else throw new Exception("unable to get player_stats.xml file.");
         }

+        string fedExPointsDistString = await blobService.DownloadBlobAsync("data", "pool/fedexPointsDist.json");
+        JObject fedExPointsDist = JObject.Parse(fedExPointsDistString);
+
+        string customPointsString = await blobService.DownloadBlobAsync("data", "pool/customPoints.json");
+        JObject customPoints = JObject.Parse(customPointsString);
+
         JObject tournamentStat = CreateTournamentStat(tournament, xFecPoints, season, "PGA TOUR");
         List<JObject> picks = await GetPicks((string)tournament["Index"]);

@@ -99,7 +105,7 @@
         {
             if (!golferIds.Contains((string)pick["PlayerId"]))
             {
-                var golfer = GenerateGolfer(pick, xFecPoints, xPlayerStats);
+                var golfer = GenerateGolfer(pick, tournament, xFecPoints, xPlayerStats, fedExPointsDist, customPoints);
                 if(golfer == null)
                 {
                     golfer = JObject.FromObject(new
@@ -120,6 +126,68 @@
                 var existingGolfer = (JObject)((JArray)tournamentStat["Golfers"]).SingleOrDefault(x => (string)x["Id"] == (string)pick["PlayerId"]);
                 var pickCount = (int)existingGolfer["PickCount"];
                 existingGolfer["PickCount"] = ((int)existingGolfer["PickCount"]) + 1;
+            }
+        }
+
+        foreach(JObject golfer in (tournamentStat["Golfers"] as JArray))
+        {
+            if(golfer["Points"] == null)
+            {
+                var golferRank = (int)golfer["Rank"];
+                if(golferRank != 0)
+                {
+                    golfer["Points"] = 0;
+                    if((bool)golfer["Tied"] != true)
+                    {
+                        var points = GetPointsForTournamentRank((string)tournament["TournamentType"], (int)golfer["Rank"], fedExPointsDist);
+                        golfer["Points"] = points;
+                    }
+                    else
+                    {
+                        XElement standings = xFecPoints.XPathSelectElement("trn/standings");
+                        foreach(XElement plrElement in standings.Elements("plr"))
+                        {
+                            if(plrElement.Element("event") != null)
+                            {
+                                XElement eventElement = plrElement.Element("event");
+                                if(eventElement.Attribute("cPos") != null)
+                                {
+                                    var cpos = GetBackupString(plrElement, ".//event", "cPos", "0");
+                                    if(Convert.ToInt32(cpos) == golferRank)
+                                    {
+                                        var pointsString = GetBackupString(plrElement, ".//points", "event", "0");
+                                        double points = 0.00d;
+                                        try
+                                        {
+                                            points = Convert.ToDouble(pointsString);
+                                        }
+                                        catch
+                                        {
+                                            points = 0;
+                                        }
+                                        golfer["Points"] = points;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        foreach (JObject custom in (JArray)customPoints[season.ToString()])
+        {
+            if ((string)custom["TournamentId"] == (string)tournament["PermanentNumber"])
+            {
+                foreach (JObject golfer in (tournamentStat["Golfers"] as JArray))
+                {
+                    string golferId = (string)golfer["Id"];
+                    string customId = (string)custom["PlayerId"];
+                    if (golferId == customId)
+                    {
+                        golfer["Points"] = (double)custom["Points"];
+                    }
+                }
             }
         }

@@ -331,13 +399,26 @@
     return list;
 }

-public static JObject GenerateGolfer(dynamic pick, XDocument xFecPoints, XDocument xPlayerStats)
+public static JObject GenerateGolfer(dynamic pick, dynamic tournament, XDocument xFecPoints, XDocument xPlayerStats, JObject fedExPointsDist, JObject customRanks)
 {
     XElement standings = xFecPoints.XPathSelectElement("trn/standings");
     XElement player = standings.XPathSelectElement($".//plr[@id='{pick.PlayerId}']");
     if (player == null)
     {
-        return GenerateNonMember(pick, xFecPoints, xPlayerStats);
+        JObject nonMember = GenerateNonMember(pick, xFecPoints, xPlayerStats);
+        if (nonMember == null)
+        {
+            nonMember = JObject.FromObject(new
+            {
+                Name = (string)pick["PlayerName"],
+                Id = (string)pick["PlayerId"],
+                PickCount = 1,
+                Rank = 0,
+                Tied = false,
+                IsMember = false,
+            });
+        }
+        return nonMember;
     }
     string strPoints = GetBackupString(player, ".//points", "event", "0");
     string strMoney = GetBackupString(player, ".//money", "event", "0");
@@ -436,4 +517,33 @@
             return (string)tournament["Index"];
     }
     return string.Empty;
-}+}
+
+public static double GetPointsForTournamentRank(string tournamentType, int rank, JObject fedExPointsDist)
+{
+    var indexName = "";
+    if(tournamentType == "WGC")
+    {
+        indexName = "WGC";
+    }
+    else if(tournamentType == "MJR")
+    {
+        indexName = "Majors";
+    }
+    else if(tournamentType == "LRS" || tournamentType == "STD")
+    {
+        indexName = "PGATOUR";
+    }
+    else if(tournamentType == "PLF" || tournamentType == "PLS")
+    {
+        indexName = "Playoffs";
+    }
+
+    if (string.IsNullOrEmpty(indexName))
+    {
+        return 0;
+    }
+
+    JArray points = (JArray)fedExPointsDist[indexName];
+    return (double)points[rank - 1];
+}


implemented health and damage modifiers

implemented health and damage modifiers

--- GladiatorsGame/Game/Game_Enemy.cs
+++ GladiatorsGame/Game/Game_Enemy.cs
@@ -33,7 +33,10 @@

             name = InitializeName();

-            maxHealth = rnd.Next(95, 106) + (level - 1) * rnd.Next(4, 7);
+            healthModifier = (level - 1) * rnd.Next(4, 7);
+            damageModifier = 0;
+
+            maxHealth = rnd.Next(95, 106) + healthModifier;
             health = maxHealth;

             stun = 0;
@@ -48,7 +51,7 @@
             int damage;
             string logText;

-            damage = rnd.Next(8, 13);
+            damage = rnd.Next(8, 13) + damageModifier;
             Target.SetHealth(Target.GetHealth() - damage);

             logText = name + " attacked you for " + damage.ToString() + " damage.";


Load statemachine Fix.

Load statemachine Fix.

--- Framework/NodeInput.cs
+++ Framework/NodeInput.cs
@@ -37,6 +37,12 @@
 	public void SetValue<T>(T value)
 		where T : class, new()
 	{
+		if( type == null)
+		{
+			// race condition during load, just accept the incoming value.
+			this.value = value;
+			return;
+		}
 		if (valueType == null)
 			valueType = ConnectionTypes.GetInputType(type);


getting sqlite to use file instead of :memory:

--- ToDoBackend/ToDoBackend/AppHost.cs
+++ ToDoBackend/ToDoBackend/AppHost.cs
@@ -18,7 +18,9 @@
         public override void Configure(Container container)
         {
             Plugins.Add(new CorsFeature());
-            var dbFactory = new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider);
+            var dbFactory = new OrmLiteConnectionFactory(
+                "~/App_Data/db.sqlite".MapHostAbsolutePath()
+                , SqliteDialect.Provider);
             container.Register<IDbConnectionFactory>(dbFactory);
             container.RegisterAutoWired<ToDoService>();
             using (var db = dbFactory.OpenDbConnection())


sending message bytes async

sending message bytes async

--- TomP2P/TomP2P/Connection/Sender.cs
+++ TomP2P/TomP2P/Connection/Sender.cs
@@ -116,10 +116,11 @@
             // 3. client-side pipeline (sending)
             //  - encoder
             var outbound = new TomP2POutbound(false, ChannelClientConfiguration.SignatureFactory);
-            var messageBytes = outbound.Write(message); // encode
+            var buffer = outbound.Write(message); // encode
+            var messageBytes = ConnectionHelper.ExtractBytes(buffer);

             // 6. send/write message to the created channel
-
+            Task<int> task = udpClientSocket.SendAsync(messageBytes, receiverEp);

             // 7. await response message (if not fire&forget)
             //  - decoder


modelo problema de transportes ajustar parametros

--- Transportes/Transportes/Program.cs
+++ Transportes/Transportes/Program.cs
@@ -60,16 +60,5 @@
                 Console.ReadLine();
             }
         }
-
-        public static List<Decision> crearVariables(string titulo)
-        {
-            List<Decision> vars = new List<Decision>();
-            for (int i = 1; i <= 3; i++)
-            {
-                for (int j = 1; j <= 5; j++)
-                    vars.Add(new Decision(Domain.Integer, titulo + i.ToString() + j.ToString()));
-            }
-            return vars;
-        }
     }
 }


Bump version

Bump version

--- UWPHook/Properties/AssemblyInfo.cs
+++ UWPHook/Properties/AssemblyInfo.cs
@@ -12,7 +12,7 @@
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Briano")]
 [assembly: AssemblyProduct("UWPHook")]
-[assembly: AssemblyCopyright("Copyright Brian Lima ©  2020 2021")]
+[assembly: AssemblyCopyright("Copyright Brian Lima ©  2020 2021 2022")]
 [assembly: AssemblyTrademark("Briano")]
 [assembly: AssemblyCulture("")]

@@ -51,6 +51,6 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.10.0.0")]
-[assembly: AssemblyFileVersion("2.10.0.0")]
+[assembly: AssemblyVersion("2.11.0.0")]
+[assembly: AssemblyFileVersion("2.11.0.0")]
 [assembly: NeutralResourcesLanguage("en")]