feat: 为集合元素增加attributes特性。 :athletic_shoe: :mushroom:

--- src/Options/Configuration/OptionConfigurationElement.cs
+++ src/Options/Configuration/OptionConfigurationElement.cs
@@ -172,32 +172,8 @@

 			OptionConfigurationProperty property;

-			if(reader.NodeType == XmlNodeType.Element)
-			{
-				var elementName = reader.Name;
-
-				for(int i = 0; i < reader.AttributeCount; i++)
-				{
-					reader.MoveToAttribute(i);
-
-					//XML特性名中间含点的，并且是以表示是以元素名打头的，则表示为系统内置特性因而无需解析处理
-					if(reader.Name.StartsWith(elementName + "."))
-						continue;
-
-					//获取当前XML元素特性对应的配置属性定义项
-					if(this.Properties.TryGetValue(reader.Name, out property))
-						this.SetPropertyValue(property, reader.Value);
-					else
-					{
-						//执行处理未知的属性反序列化
-						if(!this.OnDeserializeUnrecognizedAttribute(reader.Name, reader.Value))
-							throw new OptionConfigurationException(string.Format("The '{0}' option configuration attribute is unrecognized.", reader.Name));
-					}
-				}
-
-				//将当前读取器移到元素上
-				reader.MoveToElement();
-			}
+			//反序列化当前元素的Attributes到当前元素的属性集
+			this.DeserializeAttributes(reader, this);

 			//如果当前XML元素是空元素(即其没有子节点的元素)，则返回
 			if(reader.IsEmptyElement)
@@ -205,6 +181,7 @@

 			//定义当前读取器的初始深度
 			int depth = reader.Depth;
+
 			//定义当前待解析子元素的当前配置项元素
 			OptionConfigurationElement element = this;

@@ -242,7 +219,13 @@
 				{
 					//如果当前配置项集合不是默认集合(即集合有对应的XML节点)，则将当前读取器移动到其下的子元素的XML节点上
 					if(!property.IsDefaultCollection)
+					{
+						//反序列化当前元素中的Attributes到元素属性集中
+						this.DeserializeAttributes(reader, element);
+
+						//将当前读取器移动到集合成员元素上
 						reader.ReadToDescendant(string.IsNullOrWhiteSpace(property.ElementName) ? collection.ElementName : property.ElementName);
+					}
 				}

 				//调用当前配置元素对象的反序列化方法
@@ -312,6 +295,38 @@
 		#endregion

 		#region 私有方法
+		private void DeserializeAttributes(XmlReader reader, OptionConfigurationElement element)
+		{
+			OptionConfigurationProperty property;
+
+			if(reader.NodeType != XmlNodeType.Element)
+				return;
+
+			var elementName = reader.Name;
+
+			for(int i = 0; i < reader.AttributeCount; i++)
+			{
+				reader.MoveToAttribute(i);
+
+				//XML特性名中间含点的，并且是以表示是以元素名打头的，则表示为系统内置特性因而无需解析处理
+				if(reader.Name.StartsWith(elementName + "."))
+					continue;
+
+				//获取当前XML元素特性对应的配置属性定义项
+				if(element.Properties.TryGetValue(reader.Name, out property))
+					element.SetPropertyValue(property, reader.Value);
+				else
+				{
+					//执行处理未知的属性反序列化
+					if(!element.OnDeserializeUnrecognizedAttribute(reader.Name, reader.Value))
+						throw new OptionConfigurationException(string.Format("The '{0}' option configuration attribute is unrecognized.", reader.Name));
+				}
+			}
+
+			//将当前读取器移到元素上
+			reader.MoveToElement();
+		}
+
 		private OptionConfigurationElement EnsureElementPropertyValue(OptionConfigurationProperty property)
 		{
 			if(property == null)


Added missing StringEnumConverter.

Added missing StringEnumConverter.

--- src/Picturepark.SDK.V1.Contract/SystemTypes/Relation.cs
+++ src/Picturepark.SDK.V1.Contract/SystemTypes/Relation.cs
@@ -1,4 +1,5 @@
 using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
 using System;
 using System.Collections.Generic;
 using System.Text;
@@ -14,6 +15,7 @@
 		public string RelationType { get; set; }

 		[JsonProperty("_targetContext")]
+		[JsonConverter(typeof(StringEnumConverter))]
 		public TargetContext TargetContext { get; set; }

 		[JsonProperty("_targetId")]


fix(Keyboard, Animation, iOS): The app could throw an exception when a popup is closed with an opened keyboard. See #122

--- src/Rg.Plugins.Popup.IOS/Renderers/PopupPageRenderer.cs
+++ src/Rg.Plugins.Popup.IOS/Renderers/PopupPageRenderer.cs
@@ -19,6 +19,7 @@
         private NSObject _willChangeFrameNotificationObserver;
         private NSObject _willHideNotificationObserver;
         private CGRect _keyboardBounds;
+        private bool _isDisposed;

         private PopupPage CurrentElement => (PopupPage) Element;

@@ -43,6 +44,8 @@
             }

             base.Dispose(disposing);
+
+            _isDisposed = true;
         }

         protected override void OnElementChanged(VisualElementChangedEventArgs e)
@@ -194,12 +197,25 @@
                 //It is needed that buttons are working when keyboard is opened. See #11
                 await Task.Delay(70);

-                await UIView.AnimateAsync((double)(NSNumber)duration, ViewDidLayoutSubviews);
+                if(!_isDisposed)
+                    await UIView.AnimateAsync((double)(NSNumber)duration, OnKeyboardAnimated);
             }
             else
             {
                 ViewDidLayoutSubviews();
             }
+        }
+
+        #endregion
+
+        #region Animation Methods
+
+        private void OnKeyboardAnimated()
+        {
+            if (_isDisposed)
+                return;
+
+            ViewDidLayoutSubviews();
         }

         #endregion


Unique ID for the view agreement page

Unique ID for the view agreement page

--- src/SFA.DAS.EAS.Web/Views/EmployerAgreement/View.cshtml
+++ src/SFA.DAS.EAS.Web/Views/EmployerAgreement/View.cshtml
@@ -3,9 +3,12 @@
 @using SFA.DAS.EAS.Web;
 @using SFA.DAS.EAS.Web.Extensions

-@model OrchestratorResponse<SFA.DAS.EAS.Web.ViewModels.EmployerAgreementViewModel>
-@{ViewBag.Title = "Employer agreement";}
-
+@model OrchestratorResponse<SFA.DAS.EAS.Web.ViewModels.EmployerAgreementViewModel>
+@{
+    ViewBag.PageID = "agreement-view";
+    ViewBag.Title = "Agreement view";
+    ViewBag.Section = "organisations";
+}


minor cleanup

minor cleanup

--- src/ShadowBlue.LogFarm.Domain/AwsCloudWatchLogTarget.cs
+++ src/ShadowBlue.LogFarm.Domain/AwsCloudWatchLogTarget.cs
@@ -33,8 +33,6 @@
         protected override void InitializeTarget()
         {
             base.InitializeTarget();
-
-            InternalLogger.Debug("Amazon Instance Id", EC2Metadata.InstanceId);

             var regionConfig = WebConfigurationManager.AppSettings["AWSRegion"] ??
                                "ap-southeast-2";
@@ -82,10 +80,5 @@

             _client.AddLogRequest(logRequest);
         }
-
-        public void TestWrite(LogEventInfo logEvent)
-        {
-            Write(logEvent);
-        }
     }
 }


For DiskDirectoryBlobStorage create directory if not existed.

--- src/Storage.Net/Blobs/Files/DiskDirectoryBlobStorage.cs
+++ src/Storage.Net/Blobs/Files/DiskDirectoryBlobStorage.cs
@@ -181,6 +181,7 @@
          if(!Directory.Exists(_directoryFullName)) Directory.CreateDirectory(_directoryFullName);
          string path = GetFilePath(fullPath);

+         Directory.CreateDirectory(Path.GetDirectoryName(path));
          Stream s = overwrite ? File.Create(path) : File.OpenWrite(path);
          s.Seek(0, SeekOrigin.End);
          return s;


Fix incorrect asserts in Socket.ConnectAsync for Unix domain sockets

A previous change allowed AddressFamily.Unix and non-IPEndPoints to be used in System.Net.Sockets, removing some asserts and changing some if/elses to support it.  One case was missed, though, in ConnectAsync, which causes asserts and runtime failures when using Socket.ConnectAsync with Unix domain sockets.  This commit just makes the same change to that code path that was made to other similar ones.

--- src/System.Net.Sockets/src/System/Net/Sockets/Socket.cs
+++ src/System.Net.Sockets/src/System/Net/Sockets/Socket.cs
@@ -5704,20 +5704,11 @@
             // called if _rightEndPoint is not null, of that the endpoint is an IPEndPoint.
             if (_rightEndPoint == null)
             {
-                if (endPointSnapshot.GetType() != typeof(IPEndPoint))
-                {
-                    if (GlobalLog.IsEnabled)
-                    {
-                        GlobalLog.AssertFormat("Socket#{0}::BeginConnectEx()|Socket not bound and endpoint not IPEndPoint.", LoggingHash.HashString(this));
-                    }
-                    Debug.Fail("Socket#" + LoggingHash.HashString(this) + "::BeginConnectEx()|Socket not bound and endpoint not IPEndPoint.");
-                }
-
                 if (endPointSnapshot.AddressFamily == AddressFamily.InterNetwork)
                 {
                     InternalBind(new IPEndPoint(IPAddress.Any, 0));
                 }
-                else
+                else if (endPointSnapshot.AddressFamily != AddressFamily.Unix)
                 {
                     InternalBind(new IPEndPoint(IPAddress.IPv6Any, 0));
                 }


ChatController.Delete

ChatController.Delete

--- src/Tgstation.Server.Host/Controllers/ChatController.cs
+++ src/Tgstation.Server.Host/Controllers/ChatController.cs
@@ -9,6 +9,7 @@
 using Tgstation.Server.Host.Components;
 using Tgstation.Server.Host.Models;
 using Tgstation.Server.Host.Security;
+using Z.EntityFramework.Plus;

 namespace Tgstation.Server.Host.Controllers
 {
@@ -82,7 +83,6 @@
 				{
 					//undo the add
 					DatabaseContext.ChatSettings.Remove(dbModel);
-					DatabaseContext.ChatChannels.RemoveRange(dbModel.Channels);
 					await DatabaseContext.Save(default).ConfigureAwait(false);
 					throw;
 				}
@@ -93,5 +93,18 @@
 			}
 			return Json(dbModel);
 		}
+
+		/// <inheritdoc />
+		[TgsAuthorize(ChatSettingsRights.Delete)]
+		public override async Task<IActionResult> Delete([FromBody] Api.Models.ChatSettings model, CancellationToken cancellationToken)
+		{
+			if (model == null)
+				throw new ArgumentNullException(nameof(model));
+
+			var instance = instanceManager.GetInstance(Instance);
+			await Task.WhenAll(instance.Chat.DeleteConnection(model.Id, cancellationToken), DatabaseContext.ChatSettings.Where(x => x.Id == model.Id).DeleteAsync(cancellationToken)).ConfigureAwait(false);
+
+			return Ok();
+		}
 	}
 }


Fix incorrect comment

Fix incorrect comment

Fix incorrect XML doumentation.

--- tests/LondonTravel.Site.Tests/Integration/IntegrationTest.cs
+++ tests/LondonTravel.Site.Tests/Integration/IntegrationTest.cs
@@ -12,7 +12,7 @@
     public abstract class IntegrationTest
     {
         /// <summary>
-        /// Initializes a new instance of the <see cref="HttpServerFixture"/> class.
+        /// Initializes a new instance of the <see cref="IntegrationTest"/> class.
         /// </summary>
         /// <param name="fixture">The fixture to use.</param>
         protected IntegrationTest(HttpServerFixture fixture)


Delete test asserting for the stuff moved

--- tests/NLog.UnitTests/Config/ConfigurationItemFactoryTests.cs
+++ tests/NLog.UnitTests/Config/ConfigurationItemFactoryTests.cs
@@ -81,8 +81,6 @@
             var targets = ConfigurationItemFactory.Default.Targets;

             AssertInstance(targets, "MSMQ", "MessageQueueTarget");
-            AssertInstance(targets, "AspNetTrace", "AspNetTraceTarget");
-            AssertInstance(targets, "AspNetBufferingWrapper", "AspNetBufferingTargetWrapper");
         }

         [Fact]
@@ -91,12 +89,6 @@
             var layoutRenderers = ConfigurationItemFactory.Default.LayoutRenderers;

             AssertInstance(layoutRenderers, "appsetting", "AppSettingLayoutRenderer");
-            AssertInstance(layoutRenderers, "aspnet-application", "AspNetApplicationValueLayoutRenderer");
-            AssertInstance(layoutRenderers, "aspnet-request", "AspNetRequestValueLayoutRenderer");
-            AssertInstance(layoutRenderers, "aspnet-sessionid", "AspNetSessionIDLayoutRenderer");
-            AssertInstance(layoutRenderers, "aspnet-session", "AspNetSessionValueLayoutRenderer");
-            AssertInstance(layoutRenderers, "aspnet-user-authtype", "AspNetUserAuthTypeLayoutRenderer");
-            AssertInstance(layoutRenderers, "aspnet-user-identity", "AspNetUserIdentityLayoutRenderer");
         }

         private static void AssertInstance<T1, T2>(INamedItemFactory<T1, T2> targets, string itemName, string expectedTypeName)


Change radius of triggers, see commit description

radiation, build privilege, temperature, etc. zones (even beartraps)

--- Pluton/Util.cs
+++ Pluton/Util.cs
@@ -80,6 +80,16 @@
             }
         }

+        public void ChangeTriggerRadius(TriggerBase trigger, float newRadius)
+        {
+            if (newRadius < 0f) {
+                throw new InvalidOperationException(String.Format("Radius can't be less then zero. ChangeTriggerRadius({0}, {1})", trigger, newRadius));
+            }
+
+            trigger.GetComponent<SphereCollider>().radius = newRadius;
+            trigger.SendMessage("OnValidate", SendMessageOptions.DontRequireReceiver);
+        }
+
         public void ConsoleLog(string str, bool adminOnly = false)
         {
             try


Update, comments

Update, comments

--- Retry/Retry.cs
+++ Retry/Retry.cs
@@ -87,7 +87,7 @@
         /// as key and <see cref="CatchFunction"/> to invoke for that <see cref="Exception"/> as value.</param>
         /// <param name="maxTries">Maximum number of times to retry, minimum once.</param>
         /// <param name="millisecondsToWait">Milliseconds to delay next try.</param>
-        /// <param name="maxWaits">Maximum times to wait.</param>
+        /// <param name="maxWaits">Maximum times to wait. Use 0 for no waits or negative values to go forever.</param>
         public Retry(Func<TResult> tryFunc, IDictionary<Type, CatchFunction> exCatch,
             int maxTries, int millisecondsToWait, int maxWaits) :
             this(tryFunc, exCatch, maxTries, millisecondsToWait, maxWaits, null)
@@ -101,7 +101,7 @@
         /// as key and <see cref="CatchFunction"/> to invoke for that <see cref="Exception"/> as value.</param>
         /// <param name="maxTries">Maximum number of times to retry, minimum once.</param>
         /// <param name="millisecondsToWait">Milliseconds to delay next try.</param>
-        /// <param name="maxWaits">Maximum times to wait.</param>
+        /// <param name="maxWaits">Maximum times to wait. Use 0 for no waits or negative values to go forever.</param>
         /// <param name="id">Unique id of to associate with this call.</param>
         public Retry(Func<TResult> tryFunc, IDictionary<Type, CatchFunction> exCatch,
             int maxTries, int millisecondsToWait, int maxWaits, string id)


Restore B.O.U.N.C.E. range to prototype 4 state.

--- game/server/weapons/repel.cs
+++ game/server/weapons/repel.cs
@@ -20,7 +20,7 @@
 	%targets = new SimSet();

 	%pos = %obj.getWorldBoxCenter();
-	%radius = 7;
+	%radius = 10;
    %mask = $TypeMasks::PlayerObjectType | $TypeMasks::ProjectileObjectType;

 	InitContainerRadiusSearch(%pos, %radius, %mask);


CSLADataProvider.RefreshCanOpertaionsOnObjectLevel has a typo. bugid: 403

--- cslalightcs/Csla/Silverlight/CslaDataProvider.cs
+++ cslalightcs/Csla/Silverlight/CslaDataProvider.cs
@@ -32,7 +32,7 @@
     protected void OnDataChanged()
     {
       RefreshCanOperationsValues();
-      RefreshCanOpertaionsOnObjectLevel();
+      RefreshCanOperationsOnObjectLevel();
       if (DataChanged != null)
         DataChanged(this, EventArgs.Empty);
     }
@@ -939,7 +939,7 @@
       }
     }

-    private void RefreshCanOpertaionsOnObjectLevel()
+    private void RefreshCanOperationsOnObjectLevel()
     {
       if (Data != null)
       {


No sense in having a nullable type that can never be null, or a check that won't get triggered

--- App/StackExchange.DataExplorer/Controllers/QueryController.cs
+++ App/StackExchange.DataExplorer/Controllers/QueryController.cs
@@ -57,8 +57,7 @@
                     }
                 ).FirstOrDefault();

-                int? saveId = null;
-                int queryId;
+                int saveId, queryId;
                 DateTime saveTime;

                 // We only create revisions if something actually changed.
@@ -113,13 +112,8 @@

                 QueryRunner.LogQueryExecution(CurrentUser, siteId, queryId);

-                if (!saveId.HasValue)
-                {
-                    throw new ApplicationException("Unable to save revision");
-                }
-
                 // Need to fix up the way we pass back results
-                results.QueryId = saveId.Value;
+                results.QueryId = saveId;
                 // Consider handling this XSS condition (?) in the ToJson() method instead, if possible
                 response = Content(results.ToJson().Replace("/", "\\/"), "application/json");
             }


Added method stubs for common code paths, query retrieval to Execute

--- App/StackExchange.DataExplorer/Controllers/QueryController.cs
+++ App/StackExchange.DataExplorer/Controllers/QueryController.cs
@@ -106,6 +106,24 @@
         [Route(@"query/run/{siteID:\d+}/{revisionID:\d+}")]
         public ActionResult Execute(int revisionID, int siteID, bool? textResults, bool? executionPlan, bool? crossSite, bool? excludeMetas)
         {
+            var query = Current.DB.Query<Query>(@"
+                SELECT
+                    *
+                FROM
+                    Queries JOIN
+                    Revisions ON Queries.ID = Revisions.QueryID AND Revisions.ID = @revision
+                ",
+                new
+                {
+                    revision = revisionID
+                }
+            ).FirstOrDefault();
+
+            if (query == null)
+            {
+                throw new ApplicationException("Invalid revision ID");
+            }
+
             ActionResult response = null;

@@ -299,6 +317,21 @@
             return foundSite?View(Site):PageNotFound();
         }

+        private QueryResults ExecuteWithResults(ParsedQuery query, int siteID)
+        {
+            QueryResults results = null;
+
+
+            return results;
+        }
+
+        private ActionResult HandleExecutionException(Exception ex)
+        {
+            ActionResult response = null;
+
+            return response;
+        }
+
         private bool SetCommonQueryViewData(string sitename)
         {
             SetHeaderInfo();


Updated OvrvisionArucoCamera.cs to recent changes of ArucoUnity.

--- Assets/ArucoUnityForOvrvision/Scripts/OvrvisionArucoCamera.cs
+++ Assets/ArucoUnityForOvrvision/Scripts/OvrvisionArucoCamera.cs
@@ -126,7 +126,6 @@
       for (int cameraId = 0; cameraId < CameraNumber; cameraId++)
       {
         ImageTextures[cameraId] = new Texture2D(width, height, TextureFormat.RGB24, false);
-        ImageTextures[cameraId].wrapMode = TextureWrapMode.Clamp;
       }

       // Initialize images properties
@@ -187,9 +186,10 @@
       {
         for (int cameraId = 0; cameraId < CameraNumber; cameraId++)
         {
-          Array.Copy(imageCapturedDatas[cameraId], ImageDatas[cameraId], ImageDataSizes[cameraId]);
+          Array.Copy(imageCapturedDatas[cameraId], NextImageDatas[cameraId], ImageDataSizes[cameraId]);
         }
         callOnImagesUpdated = true;
+
         newImagesCaptured = false;
       }
       imageCaptureMutex.ReleaseMutex();
@@ -213,7 +213,6 @@
         while (IsConfigured && IsStarted)
         {
           imageCaptureMutex.WaitOne();
-
           if (!newImagesCaptured)
           {
             ovPreStoreCamData((int)processingMode);
@@ -221,9 +220,9 @@
             {
               ovGetCamImageRGB(imageCapturedDatas[cameraId], cameraId);
             }
+
             newImagesCaptured = true;
           }
-
           imageCaptureMutex.ReleaseMutex();
         }
       }


Fix number two for broken CI

Fix number two for broken CI

--- Assets/MixedRealityToolkit/Extensions/GameObjectExtensions.cs
+++ Assets/MixedRealityToolkit/Extensions/GameObjectExtensions.cs
@@ -4,7 +4,6 @@
 using Microsoft.MixedReality.Toolkit.Utilities;
 using System;
 using System.Collections.Generic;
-using System.Reflection;
 using System.Threading.Tasks;
 using UnityEngine;

@@ -162,6 +161,7 @@
         /// <summary>
         /// Checks if any MonoBehaviour on the given GameObject is using the RequireComponentAttribute requiring type T
         /// </summary>
+        /// <remarks>Only functions when called within a UNITY_EDITOR context. Outside of UNITY_EDITOR, always returns false</remarks>
         /// <typeparam name="T">The potentially required component</typeparam>
         /// <param name="gameObject">the GameObject requiring the component</param>
         /// <param name="requiringTypes">A list of types that do require the component in question</param>
@@ -171,6 +171,7 @@
             var genericType = typeof(T);
             requiringTypes = null;

+#if UNITY_EDITOR
             foreach (var monoBehaviour in gameObject.GetComponents<MonoBehaviour>())
             {
                 if (monoBehaviour == null)
@@ -179,7 +180,7 @@
                 }

                 var monoBehaviourType = monoBehaviour.GetType();
-                var attributes = monoBehaviourType.GetCustomAttributes<Attribute>(true);
+                var attributes = Attribute.GetCustomAttributes(monoBehaviourType);

                 foreach (var attribute in attributes)
                 {
@@ -200,6 +201,7 @@
                     }
                 }
             }
+#endif // UNITY_EDITOR

             return requiringTypes != null;
         }


Hotfix for last merge

Hotfix for last merge

--- Assets/Scripts/MixWetIngredients/MixWetIngredientsMinigame.cs
+++ Assets/Scripts/MixWetIngredients/MixWetIngredientsMinigame.cs
@@ -55,12 +55,8 @@
         for (int i = 0; i < eggs.Length; i++) {
             eggs[i].gameObject.GetComponent<BoxCollider2D>().enabled = false;
         }
-<<<<<<< HEAD
-
         // Set prompt content and show it
-=======
         AkSoundEngine.SetRTPCValue("MiniGame1Finish", 60f, GameObject.FindGameObjectWithTag("MainCamera"), 500);
->>>>>>> db1f200bc7a98197a0b1c2006245bd8b10444ccc
         promptControl.content = promptContents[0];
         promptContents[0].SetActive(true);
         promptControl.ShowPromptAfter(1, 3, StartMinigame, true);


Load extension dependencies under the full framework as well.

--- AudioWorks/AudioWorks.Extensions/ExtensionAssemblyResolver.cs
+++ AudioWorks/AudioWorks.Extensions/ExtensionAssemblyResolver.cs
@@ -5,6 +5,7 @@
 using System.IO;
 using System.Linq;
 using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Runtime.Loader;
 using JetBrains.Annotations;

@@ -18,9 +19,27 @@
         internal ExtensionAssemblyResolver([NotNull] string path)
         {
             Assembly = Assembly.LoadFrom(path);
+
+            if (RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework",
+                StringComparison.Ordinal))
+                ResolveFullFramework();
+            else
+                ResolveWithLoader();
+        }
+
+        void ResolveFullFramework()
+        {
+            // .NET Framework should look for dependencies in the extensions's directory
+            var extensionDir = Path.GetDirectoryName(Assembly.Location);
+            AppDomain.CurrentDomain.AssemblyResolve += (context, name) =>
+                Assembly.LoadFrom(Path.Combine(extensionDir, $"{name.Name}.dll"));
+        }
+
+        void ResolveWithLoader()
+        {
+            // .NET Core can additionally resolve dependencies from each extension's deps.json file
             var dependencyContext = DependencyContext.Load(Assembly);
             var assemblyResolver = new PackageCompilationAssemblyResolver();
-
             AssemblyLoadContext.Default.Resolving += (context, name) =>
             {
                 var runtimeLibrary = dependencyContext.RuntimeLibraries.FirstOrDefault(library =>


-Added CollidablePairHandler.Colliding convenience property. Checks for nonnegative penetration depth contacts.

--- BEPUphysics/NarrowPhaseSystems/Pairs/CollidablePairHandler.cs
+++ BEPUphysics/NarrowPhaseSystems/Pairs/CollidablePairHandler.cs
@@ -237,6 +237,23 @@
         public ContactCollection Contacts { get; private set; }

         /// <summary>
+        /// Gets whether or not this pair has any contacts in it with nonnegative penetration depths.
+        /// Such a contact would imply the pair of objects is actually colliding.
+        /// </summary>
+        public bool Colliding
+        {
+            get
+            {
+                foreach (var contact in Contacts)
+                {
+                    if (contact.Contact.PenetrationDepth >= 0)
+                        return true;
+                }
+                return false;
+            }
+        }
+
+        /// <summary>
         /// Forces the pair handler to clean out its contacts.
         /// </summary>
         public virtual void ClearContacts()


Catch possible COMException in MapOrganizer1To2

--- CalDavSynchronizer/Implementation/Events/EventEntityMapper.cs
+++ CalDavSynchronizer/Implementation/Events/EventEntityMapper.cs
@@ -420,7 +420,17 @@
           }
           else
           {
-            SetOrganizer (target, source.Organizer, source.GetPropertySafe (PR_SENDER_EMAIL_ADDRESS));
+            string organizerEmail = null;
+
+            try
+            {
+              organizerEmail = source.GetPropertySafe (PR_SENDER_EMAIL_ADDRESS);
+            }
+            catch (COMException ex)
+            {
+              s_logger.Error ("Can't access property of appointment", ex);
+            }
+            SetOrganizer (target, source.Organizer, organizerEmail);
           }
         }
       }


tweaks

tweaks

--- Demo/King.Service.ServiceBus.WorkerRole/Topic/TopicShipper.cs
+++ Demo/King.Service.ServiceBus.WorkerRole/Topic/TopicShipper.cs
@@ -18,6 +18,7 @@
             :base(2, 30)
         {
             this.client = client;
+            this.action = "topic";
         }
         #endregion

@@ -29,7 +30,7 @@
                 Action = action,
             };

-            Trace.TraceInformation("Sending to queue for {0}: '{1}'", model.Action, model.Identifier);
+            Trace.TraceInformation("Sending to topic for {0}: '{1}'", model.Action, model.Identifier);

             client.Send(model).Wait();
         }


Fix test.

Fix test.

--- Gu.Analyzers.Analyzers/Helpers/Walkers/AssignedValueWalker.cs
+++ Gu.Analyzers.Analyzers/Helpers/Walkers/AssignedValueWalker.cs
@@ -503,6 +503,15 @@
                     this.inner.VisitAccessorDeclaration(node);
                 }
             }
+
+            public override void VisitArrowExpressionClause(ArrowExpressionClauseSyntax node)
+            {
+                if (this.inner.semanticModel.GetDeclaredSymbolSafe(node, this.inner.cancellationToken)
+                        ?.DeclaredAccessibility != Accessibility.Private)
+                {
+                    this.inner.VisitArrowExpressionClause(node);
+                }
+            }
         }
     }
 }


Added a squishy effect to jumps

Added a squishy effect to jumps

--- HandballWars/HandballWars/Entities/PlatformerCharacterBase.cs
+++ HandballWars/HandballWars/Entities/PlatformerCharacterBase.cs
@@ -13,6 +13,8 @@
 using Cursor = FlatRedBall.Gui.Cursor;
 using GuiManager = FlatRedBall.Gui.GuiManager;
 using HandballWars.DataTypes;
+using FlatRedBall.Glue.StateInterpolation;
+using StateInterpolationPlugin;
 #if FRB_XNA || SILVERLIGHT
 using Keys = Microsoft.Xna.Framework.Input.Keys;
 using Vector3 = Microsoft.Xna.Framework.Vector3;
@@ -271,8 +273,28 @@

             InitializeInput();

+            InitializeActions();
+
             CurrentMovementType = MovementType.Ground;
 		}
+
+        private void InitializeActions()
+        {
+            var maxheight = MainSprite.Height;
+
+
+            JumpAction = () => {
+                Tweener tweener = new Tweener(maxheight / 5.0f, maxheight, .75f, InterpolationType.Bounce, Easing.Out);
+                tweener.Owner = this;
+
+
+                tweener.PositionChanged += height => MainSprite.Height = height;
+
+                TweenerManager.Self.Add(tweener);
+
+                tweener.Start();
+            };
+        }

         /// <summary>
         /// Sets the HorizontalInput and JumpInput instances to either the keyboard or


Improved NotSupported message

Improved NotSupported message

--- HellBrick.Json/Deserialization/DeserializerBuilderSelector.cs
+++ HellBrick.Json/Deserialization/DeserializerBuilderSelector.cs
@@ -24,7 +24,7 @@
 		{
 			IDeserializerBuilder<T> builder = _providers.Select( p => p.TryCreateBuilder<T>() ).FirstOrDefault( b => b != null );
 			if ( builder == null )
-				throw new NotSupportedException( $"Failed to select deserializer builder for {typeof( T ).Name}" );
+				throw new NotSupportedException( $"Failed to select deserializer builder for {typeof( T ).FullName}" );

 			return builder;
 		}


手配度変更のパルプンテの名前が変更前の手配度によって正しく変わるように

手配度変更のパルプンテの名前が変更前の手配度によって正しく変わるように

--- Inferno/InfernoScripts/Parupunte/Scripts/ChangeWantedLevel.cs
+++ Inferno/InfernoScripts/Parupunte/Scripts/ChangeWantedLevel.cs
@@ -13,17 +13,19 @@
         }

+        public override void OnSetUp()
+        {
+            //確実にメインスレッドで取得するためにここで取得
+            wantedLevel = Game.Player.WantedLevel;
+        }
+
         public override void OnSetNames()
         {
             Name = wantedLevel >= wantedLevelThreshold ? "無罪放免" : "日頃の行いが悪い";
         }

-
         public override void OnStart()
         {
-            //確実にメインスレッドで取得するためにここで取得
-            wantedLevel = Game.Player.WantedLevel;
-
             if (wantedLevel >= wantedLevelThreshold)
             {
                 Game.Player.WantedLevel = 0;


Got the future tests for Count working correctly.

--- LINQToTTree/LINQToTTreeLib.Tests/FutureResultOperatorsTest.cs
+++ LINQToTTree/LINQToTTreeLib.Tests/FutureResultOperatorsTest.cs
@@ -7,6 +7,7 @@
 using Microsoft.Pex.Framework;
 using Microsoft.Pex.Framework.Validation;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using NVelocity.App;

 namespace LINQToTTreeLib
 {
@@ -18,12 +19,100 @@
     public partial class FutureResultOperatorsTest
     {
         [TestInitialize]
-        public void TestSetup()
-        {
-            using (var proxyWriter = File.CreateText("test.h"))
+        public void TestInit()
+        {
+            MEFUtilities.MyClassInit();
+            DummyQueryExectuor.GlobalInitalized = false;
+
+            var eng = new VelocityEngine();
+            eng.Init();
+
+            QueryResultCacheTest.SetupCacheDir();
+        }
+
+        [TestCleanup]
+        public void TestDone()
+        {
+            MEFUtilities.MyClassDone();
+        }
+
+        /// <summary>
+        /// Dirt simply test ntuple. Actually matches one that exists on disk.
+        /// </summary>
+        public class TestNtupe
+        {
+#pragma warning disable 0169
+            public int run;
+#pragma warning restore 0169
+        }
+
+        /// <summary>
+        /// Create an output int file... unique so we don't have to regenerate...
+        /// </summary>
+        /// <param name="numberOfIter"></param>
+        /// <returns></returns>
+        private FileInfo CreateFileOfInt(int numberOfIter)
+        {
+            string filename = "intonly_" + numberOfIter.ToString() + ".root";
+            FileInfo result = new FileInfo(filename);
+            if (result.Exists)
+                return result;
+
+            var f = new ROOTNET.NTFile(filename, "RECREATE");
+            var tree = TTreeParserCPPTests.CreateTrees.CreateOneIntTree(numberOfIter);
+            f.Write();
+            f.Close();
+            result.Refresh();
+            return result;
+        }
+
+        /// <summary>
+        /// Ntuple with emptys for everything.
+        /// </summary>
+        public class ntuple
+        {
+            public static string _gProxyFile = "";
+            public static string[] _gObjectFiles = { };
+            public static string[] _gCINTLines = { };
+
+            internal static void Reset()
             {
-                proxyWriter.WriteLine("You'd better never compile this!! :-)");
+                _gProxyFile = "";
+                _gObjectFiles = new string[0];
             }
+        }
+
+        /// <summary>
+        /// Given the root file and the root-tuple name, generate a proxy file
+        /// </summary>
+        /// <param name="rootFile"></param>
+        /// <returns></returns>
+        private FileInfo GenerateROOTProxy(FileInfo rootFile, string rootTupleName)
+        {
+            ///
+            /// First, load up the TTree
+            ///
+
+            var tfile = new ROOTNET.NTFile(rootFile.FullName, "READ");
+            var tree = tfile.Get(rootTupleName) as ROOTNET.Interface.NTTree;
+            Assert.IsNotNull(tree, "Tree couldn't be found");
+
+            ///
+            /// Create the proxy sub-dir if not there already, and put the dummy macro in there
+            ///
+
+            using (var w = File.CreateText("junk.C"))
+            {
+                w.Write("int junk() {return 10.0;}");
+                w.Close();
+            }
+
+            ///
+            /// Create the macro proxy now
+            ///
+
+            tree.MakeProxy("scanner", "junk.C", null, "nohist");
+            return new FileInfo("scanner.h");
         }

         /// <summary>Test stub for FutureCount(IQueryable`1<!!0>)</summary>
@@ -45,57 +134,81 @@
             public static string[] _gCINTLines = null;
         }

-        private QueriableTTree<SimpleEventNtup> NewTestQueryTTree()
-        {
-            return new QueriableTTree<SimpleEventNtup>(new FileInfo[] { new FileInfo(@"..\..\..\LINQToTTreeLib.Tests\testfile_intonly.root") }, "dude");
-        }
-
         [TestMethod]
         public void TestSimpleSingleQuery()
         {
-            ///
-            /// Create a simple query, and make sure that nothing happen.s
-            ///
-
-            var q = NewTestQueryTTree();
-            var dude = q.FutureCount();
-            Assert.IsNotNull(dude, "expected a future value back!");
-
-            Assert.IsNull(DummyQueryExectuor.LastQueryModel, "no query should have been executed up to now!");
-            var temp = dude.Value;
-            Assert.IsNotNull(DummyQueryExectuor.LastQueryModel, "a query should have been executed at this point");
-            Assert.IsTrue(dude.HasValue, "future should be marked as having a value");
+            int numberOfIter = 10;
+
+            var rootFile = CreateFileOfInt(numberOfIter);
+            var proxyFile = GenerateROOTProxy(rootFile, "dude");
+            var q = new QueriableDummy<TestNtupe>();
+            var dude = q.Count();
+            var query = DummyQueryExectuor.LastQueryModel;
+
+            ntuple._gProxyFile = proxyFile.FullName;
+            var exe = new TTreeQueryExecutor(new FileInfo[] { rootFile }, "dude", typeof(ntuple));
+
+            var result = exe.ExecuteScalarAsFuture<int>(query);
+
+            Assert.IsNotNull(result, "future should exist!");
+            Assert.IsFalse(result.HasValue, "future shoudl not have executed by now!");
+
+            var val = result.Value;
+            Assert.AreEqual(numberOfIter, val, "incorrect result came back.");
+            Assert.IsTrue(result.HasValue, "value should be marked by now!");
         }

         [TestMethod]
         public void TestWhereQuery()
         {
-            ///
-            /// Create a simple query, and make sure that nothing happen.s
-            ///
-
-            var q = NewTestQueryTTree();
-            var dude = q.Where(v => v.run > 10).FutureCount();
-
-            Assert.IsNull(DummyQueryExectuor.LastQueryModel, "no query should have been executed up to now!");
-            var temp = dude.Value;
-            Assert.IsNotNull(DummyQueryExectuor.LastQueryModel, "a query should have been executed at this point");
+            int numberOfIter = 10;
+
+            var rootFile = CreateFileOfInt(numberOfIter);
+            var proxyFile = GenerateROOTProxy(rootFile, "dude");
+            var q = new QueriableDummy<TestNtupe>();
+            var dude = q.Where(v => v.run > 0).Count();
+            var query = DummyQueryExectuor.LastQueryModel;
+
+            ntuple._gProxyFile = proxyFile.FullName;
+            var exe = new TTreeQueryExecutor(new FileInfo[] { rootFile }, "dude", typeof(ntuple));
+
+            var result = exe.ExecuteScalarAsFuture<int>(query);
+
+            Assert.IsNotNull(result, "future should exist!");
+            Assert.IsFalse(result.HasValue, "future shoudl not have executed by now!");
+
+            var val = result.Value;
+            Assert.AreEqual(numberOfIter, val, "incorrect result came back.");
+            Assert.IsTrue(result.HasValue, "value should be marked by now!");
         }

         [TestMethod]
         public void TestLinkedQuery()
         {
-            ///
-            /// Create a simple query, and make sure that nothing happen.s
-            ///
-
-            var q = NewTestQueryTTree();
-            var dude1 = q.FutureCount();
-            var dude2 = q.Where(v => v.run > 10).FutureCount();
-
-            Assert.IsNull(DummyQueryExectuor.LastQueryModel, "no query should have been executed up to now!");
-            var temp = dude1.Value;
-            Assert.IsTrue(dude2.HasValue, "Linked future should have also been evaluated");
+            int numberOfIter = 10;
+
+            var rootFile = CreateFileOfInt(numberOfIter);
+            var proxyFile = GenerateROOTProxy(rootFile, "dude");
+            var q = new QueriableDummy<TestNtupe>();
+            var dude1 = q.Count();
+            var query1 = DummyQueryExectuor.LastQueryModel;
+
+            var dude2 = q.Where(v => v.run > 0).Count();
+            var query2 = DummyQueryExectuor.LastQueryModel;
+
+            ntuple._gProxyFile = proxyFile.FullName;
+            var exe = new TTreeQueryExecutor(new FileInfo[] { rootFile }, "dude", typeof(ntuple));
+
+            var result1 = exe.ExecuteScalarAsFuture<int>(query1);
+            var result2 = exe.ExecuteScalarAsFuture<int>(query2);
+
+            Assert.IsFalse(result1.HasValue, "r1 should not have a value yet");
+            Assert.IsFalse(result2.HasValue, "r2 should not have a value yet");
+
+            var r1v = result1.Value;
+
+            Assert.IsTrue(result1.HasValue, "r1 should have a value");
+            Assert.IsTrue(result2.HasValue, "r2 should have a value");
         }
     }
 }


Small first startup bugfix

Small first startup bugfix

--- Screenshotr.cs
+++ Screenshotr.cs
@@ -12,7 +12,7 @@

         public static Screenshotr Instance;

-        private string _apiKey;
+        private string _apiKey = "";

         public string ApiKey
         {


-effect 393 is ranged

-effect 393 is ranged

--- SpellParser.cs
+++ SpellParser.cs
@@ -1664,8 +1664,7 @@
                 case 392:
                     return Spell.FormatCount("Healing Bonus", base1);
                 case 393:
-                    // TODO: confirm this isn't a range
-                    return Spell.FormatPercent("Healing Taken", base1);
+                    return Spell.FormatPercent("Healing Taken", base1, base2); // ranged
                 case 394:
                     return Spell.FormatCount("Healing Taken", base1);
                 case 396:


-added endurance upkeep field

-added endurance upkeep field

--- SpellParser.cs
+++ SpellParser.cs
@@ -21,10 +21,10 @@
     {
         WAR = 1, CLR, PAL, RNG, SHD, DRU, MNK, BRD, ROG, SHM, NEC, WIZ, MAG, ENC, BST, BER
     }
-
+
     public enum SpellClassesLong
     {
-        Warrior = 1, Cleric, Paladin, Ranger, ShadowKnight, Druid, Monk, Bard, Rogue, Shaman,
+        Warrior = 1, Cleric, Paladin, Ranger, ShadowKnight, Druid, Monk, Bard, Rogue, Shaman,
         Necro, Wizard, Mage, Enchanter, Beastlord, Berserker
     }

@@ -181,7 +181,7 @@
     }

     public enum SpellTarget
-    {
+    {
         Line_of_Sight = 1,
         Caster_AE = 2,
         Caster_Group = 3,
@@ -205,7 +205,7 @@
         Nearby_Allies = 40,
         Target_Group = 41,
         Directional_AE = 42, // see degree fields
-        Frontal_AE = 44,
+        Frontal_AE = 44,
         Single_In_Group = 43,
         Target_Ring_AE = 45,
         Targets_Target = 46,
@@ -247,7 +247,7 @@
         HP_Between_25_and_35_Percent = 401,
         HP_Between_1_and_25_Percent = 400,
         HP_Between_1_and_35_Percent = 507, // between or below?
-        Undead2 = 603,
+        Undead2 = 603,
         Undead3 = 608,
         Summoned2 = 624
     }
@@ -275,13 +275,13 @@
         Gargoyle = 29,
         Wolf = 42,
         Bear = 43,
-        Imp = 46,
+        Imp = 46,
         Elemental = 75, // has subtypes
         Scarecrow = 82,
         //Skeleton = 85,
         Iksar = 128,
         Kunark_Goblin = 137,
-        Tree = 143,
+        Tree = 143,
         Iksar_Skeleton = 161,
         Guktan = 330,
         Scaled_Wolf = 356,
@@ -313,9 +313,10 @@
         public int Icon;
         public int Mana;
         public int Endurance;
+        public int EnduranceUpkeep;
         public int Ticks;
         public string[] Slots;
-        public int[] SlotEffects;
+        public int[] SlotEffects;
         public int[] Levels;
         public string Classes;
         public SpellSkill Skill;
@@ -327,6 +328,7 @@
         public int Hate;
         public int Range;
         public int AERange;
+        public int AEDuration; // rain spells
         public float CastingTime;
         public float QuietTime;
         public float RecastTime;
@@ -336,7 +338,7 @@
         public string Desc;
         public int MaxHits;
         public int MaxTargets;
-        public int RecourseID;
+        public int RecourseID;
         public int TimerID;
         public int ViralPulse;
         public int ViralRange;
@@ -354,9 +356,9 @@
         //public int TotalHeal;
         //public int TotalHoT;

-        public int Unknown;
-
-
+        public float Unknown;
+
+
         /// Effects can reference other spells or items via square bracket notation. e.g.
         /// [Spell 123]    is a reference to spell 123
         /// [Group 123]    is a reference to spell group 123
@@ -387,14 +389,16 @@
         public string[] Details()
         {
             List<string> result = new List<string>();
-
+
             if (!String.IsNullOrEmpty(Classes))
                 result.Add("Classes: " + Classes);

             if (Mana > 0)
                 result.Add("Mana: " + Mana);

-            if (Endurance > 0)
+            if (EnduranceUpkeep > 0)
+                result.Add("Endurance: " + Endurance + ", Upkeep: " + EnduranceUpkeep + " per tick");
+            else if (Endurance > 0)
                 result.Add("Endurance: " + Endurance);

             for (int i = 0; i < RegID.Length; i++)
@@ -482,7 +486,7 @@

             Classes = String.Empty;
             for (int i = 0; i < Levels.Length; i++)
-            {
+            {
                 if (Levels[i] == 255)
                     Levels[i] = 0;
                 if (Levels[i] != 0)
@@ -1007,7 +1011,7 @@
                 case 320:
                     return String.Format("Shield Block ({0})", value);
                 case 322:
-                    return "Gate to Starting City";
+                    return "Gate to Home City";
                 case 323:
                     if (base2 > 0)
                         return String.Format("Add Defensive Proc: [Spell {0}] with {1}% Rate Mod", base1, base2);
@@ -1172,7 +1176,7 @@
                     if (value < 0)
                         TotalNuke += value;
                     break;
-            }
+            }

         }

@@ -1374,7 +1378,7 @@
                     if (level > 30) change = 3 * (level - 30) / 2;
                     break;

-                default:
+                default:
                     if (calc > 0 && calc < 1000)
                         change = level * calc;

@@ -1456,7 +1460,7 @@
                         if (fields[1] == "6")
                             desc[Int32.Parse(fields[0])] = fields[2].Trim();
                     }
-
+

             // load spell definition file
             List<Spell> list = new List<Spell>();
@@ -1487,7 +1491,7 @@
             //spell.LandOnSelf = fields[6];
             //spell.LandOnOther = fields[7];
             spell.Ticks = Spell.CalcDuration(ParseInt(fields[16]), ParseInt(fields[17]), MaxLevel);
-            spell.Mana = ParseInt(fields[19]);
+            spell.Mana = ParseInt(fields[19]);

             spell.Range = ParseInt(fields[9]);
             spell.AERange = ParseInt(fields[10]);
@@ -1496,6 +1500,7 @@
             spell.CastingTime = ParseFloat(fields[13]) / 1000f;
             spell.QuietTime = ParseFloat(fields[14]) / 1000f;
             spell.RecastTime = ParseFloat(fields[15]) / 1000f;
+            spell.AEDuration = ParseInt(fields[18]);
             spell.RegID[0] = ParseInt(fields[58]);
             spell.RegCount[0] = ParseInt(fields[62]);
             spell.RegID[1] = ParseInt(fields[59]);
@@ -1515,6 +1520,7 @@
             spell.Endurance = ParseInt(fields[166]);
             spell.TimerID = ParseInt(fields[167]);
             spell.Hate = ParseInt(fields[173]);
+            spell.EnduranceUpkeep = ParseInt(fields[174]);
             spell.MaxHits = ParseInt(fields[176]);
             spell.MGB = ParseInt(fields[185]) != 0;
             spell.ViralPulse = ParseInt(fields[191]);
@@ -1526,7 +1532,8 @@
             spell.TargetRestrict = (SpellTargetRestrict)ParseInt(fields[211]);
             spell.MaxTargets = ParseInt(fields[218]);

-            //spell.Unknown = ParseInt(fields[211]);
+            // debug stuff
+            //spell.Unknown = ParseFloat(fields[221]);

             // each spell has a different casting level for all 16 classes
             for (int i = 0; i < spell.Levels.Length; i++)
@@ -1553,8 +1560,8 @@
                 spell.SumSlot(type, value, value2, max, calc, MaxLevel);
             }

-            // some debug stuff
-            //if (spell.ID == 15044)
+            // debug stuff
+            //if (spell.ID == 19871)
             //    for (int i = 0; i < fields.Length; i++)
             //        Console.WriteLine("{0}: {1}", i, fields[i]);


changed still pressure temp check

changed still pressure temp check

--- Still/Still.cs
+++ Still/Still.cs
@@ -355,7 +355,7 @@
 			var diff = (Time.deltaTime * (m_temperature / 75f)) / 200f;

 			// this math should leave bottle at ~60% alcohol
-			if (kiljuAmount > 0 && m_temperature >= 100f)
+			if (kiljuAmount > 0 && m_temperature >= 101f)
 			{
 				m_pressure += diff * 3f;
 			}


delay first lookup

delay first lookup

--- Streams/Bot.cs
+++ Streams/Bot.cs
@@ -46,7 +46,7 @@
             await client.StartAsync();

             Console.WriteLine("Starting update loop");
-            streamlooker = new Timer(UpdateStreams, null, 1000, 300000);
+            streamlooker = new Timer(UpdateStreams, null, 20000, 300000);

             try
             {


Implement GetMaxScaling()

Implement GetMaxScaling()

--- UtilsCommon.cs
+++ UtilsCommon.cs
@@ -85,6 +85,18 @@
 			return CallExeAndGetOutput (exePath, args, stderrInsteadOfStdout);
 		}

+		/// <summary>
+		/// Find maximum scaling value so that image just fits into box. Giving a negative value will deactivate scaling in that
+		///	dimension (width or maxWidth less 0 means only height will be used).
+		/// </summary>
+		public static double GetMaxScaling(double width, double height, double maxWidth, double maxHeight, bool scale1atMax=true) {
+			double scaling1 = width >= 0 && maxWidth >= 0 ? maxWidth / width : 1000000.0;
+			double scaling2 = height >= 0 && maxHeight >= 0 ? maxHeight / height : 1000000.0;
+			double scaling = Math.Min(scaling1, scaling2);
+			if(scale1atMax) scaling = Math.Min(scaling, 1.0);
+			return scaling;
+		}
+

 		/// <summary>
 		/// The MIME mappings that are relevant for this project (video files and subtitles).


Add support for IList to Dummy

Add support for IList to Dummy

--- source/OpenMagic/Dummy.cs
+++ source/OpenMagic/Dummy.cs
@@ -57,6 +57,10 @@
                 if (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(List<>) || type.GetGenericTypeDefinition() == typeof(IList<>)))
                 {
                     return CreateListOfT(type);
+                }
+                if (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(IList)))
+                {
+                    return CreateListOfT(typeof(string));
                 }
                 if (type.IsArray)
                 {


Duplicator fix

Duplicator fix

--- source/Util/Duplicator.cs
+++ source/Util/Duplicator.cs
@@ -424,7 +424,17 @@
             }
             return node; // base.VisitNAryExpr(node);
         }
-
+
+        public override List<Variable> VisitVariableSeq(List<Variable> variableSeq)
+        {
+            return base.VisitVariableSeq(new List<Variable>(variableSeq));
+        }
+
+        public override IList<Expr> VisitExprSeq(IList<Expr> list)
+        {
+            return base.VisitExprSeq(new List<Expr>(list));
+        }
+
         public override GotoCmd VisitGotoCmd(GotoCmd node)
         {
             var gc = (GotoCmd)node.Clone();


Added completed notification.

Added completed notification.

--- source/IL2CPU/Program.cs
+++ source/IL2CPU/Program.cs
@@ -20,6 +20,8 @@
 			} catch (Exception E) {
 				Console.WriteLine(E.ToString());
 			}
+            Console.WriteLine("");
+            Console.WriteLine("Completed");
 			Console.ReadLine();
 		}
 	}


Added metadata to Result

Added metadata to Result

--- source/LogFlow/Result.cs
+++ source/LogFlow/Result.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using Newtonsoft.Json.Linq;

 namespace LogFlow
@@ -10,11 +11,13 @@
 			Id = Guid.NewGuid();
 			Json = new JObject();
 			Canceled = false;
+			MetaData = new Dictionary<string, string>();
 		}

 		public Guid Id { get; private set; }
 		public string Line { get; set; }
 		public JObject Json { get; set; }
 		public bool Canceled { get; set; }
+		public Dictionary<string, string> MetaData { get; private set; }
 	}
 }


Fix audio playback using linear Volume (#2421)

--- source/Playnite/Audio.cs
+++ source/Playnite/Audio.cs
@@ -275,7 +275,7 @@

             var mixInput = new CachedSoundSampleProvider(sound);
             var ss = new VolumeSampleProvider(mixInput);
-            ss.Volume = volume;
+            ss.Volume = volume * volume;
             AddMixerInput(ss);
             return ss;
         }


Error Message Cleaning

Error Message Cleaning

--- src/ADAL.PCL/Constants.cs
+++ src/ADAL.PCL/Constants.cs
@@ -329,13 +329,13 @@

         public const string EncodedTokenTooLong = "Encoded token size is beyond the upper limit";
         public const string FailedToAcquireTokenSilently = "Failed to acquire token silently as no token was found in the cache. Call method AcquireToken";
-        public const string FailedToRefreshToken = "Failed to refresh token";
+        public const string FailedToRefreshToken = "Failed to refresh access token";
         public const string FederatedServiceReturnedErrorTemplate = "Federated service at {0} returned error: {1}";
         public const string IdentityProtocolLoginUrlNull = "The LoginUrl property in identityProvider cannot be null";
         public const string IdentityProtocolMismatch = "No identity provider matches the requested protocol";

         public const string IdentityProviderRequestFailed =
-            "Token request to identity provider failed. Check InnerException for more details";
+            "Token request made to identity provider failed. Check InnerException for more details";

         public const string InvalidArgumentLength = "Parameter has invalid length";
         public const string InvalidAuthenticateHeaderFormat = "Invalid authenticate header format";
@@ -346,7 +346,7 @@
         public const string MissingAuthenticateHeader = "WWW-Authenticate header was expected in the response";

         public const string MultipleTokensMatched =
-            "The cache contains multiple tokens satisfying the requirements. Call AcquireToken again providing more requirements (e.g. UserId)";
+            "The cache contains multiple tokens satisfying the requirements. Call AcquireToken again providing more arguments (e.g. UserId)";

         public const string NetworkIsNotAvailable = "The network is down so authentication cannot proceed";
         public const string NoDataFromSTS = "No data received from security token service";


Added ObjectMapper to AbpServiceBase.

Added ObjectMapper to AbpServiceBase.

--- src/Abp/AbpServiceBase.cs
+++ src/Abp/AbpServiceBase.cs
@@ -3,6 +3,7 @@
 using Abp.Domain.Uow;
 using Abp.Localization;
 using Abp.Localization.Sources;
+using Abp.ObjectMapping;
 using Castle.Core.Logging;

 namespace Abp
@@ -82,11 +83,17 @@
         public ILogger Logger { protected get; set; }

         /// <summary>
+        /// Reference to the object to object mapper.
+        /// </summary>
+        public IObjectMapper ObjectMapper { get; set; }
+
+        /// <summary>
         /// Constructor.
         /// </summary>
         protected AbpServiceBase()
         {
             Logger = NullLogger.Instance;
+            ObjectMapper = NullObjectMapper.Instance;
             LocalizationManager = NullLocalizationManager.Instance;
         }


it's never null

it's never null

--- src/AutoMapper/TypeMap.cs
+++ src/AutoMapper/TypeMap.cs
@@ -52,7 +52,7 @@

         public PathMap FindPathMapByDestinationPath(string destinationFullPath)
         {
-            return this.PathMaps?.SingleOrDefault(item => string.Join(".", item.MemberPath.Members.Select(m => m.Name)) == destinationFullPath);
+            return PathMaps.SingleOrDefault(item => string.Join(".", item.MemberPath.Members.Select(m => m.Name)) == destinationFullPath);
         }

         public LambdaExpression MapExpression { get; private set; }


Rename.

Rename.

--- src/AutoMoq/Unity/Base.cs
+++ src/AutoMoq/Unity/Base.cs
@@ -49,8 +49,8 @@
                 }
                 catch
                 {
-                    var thing = mock.Object as object;
-                    container.RegisterInstance(abstractParameter, thing);
+                    var mockObject = mock.Object as object;
+                    container.RegisterInstance(abstractParameter, mockObject);
                 }
             }
         }


sample console writeline

sample console writeline

--- app/Program.cs
+++ app/Program.cs
@@ -19,9 +19,33 @@
                 Console.WriteLine("Please enter number");
             }

-            var backgroundImages = GetNodeInfo(nodeId);
+            var node = GetNodeInfo(nodeId);
+            Console.WriteLine("you are on " + node.Name);
+            Console.WriteLine(Environment.NewLine);
+
+            Console.WriteLine("room is in these conditions");
+            foreach (var condition in node.Cases[0].Conditions)
+            {
+                Console.WriteLine(condition.FlagName + " : " + condition.IsOn);
+            }
+            Console.WriteLine(Environment.NewLine);
+
+            Console.WriteLine("room has these items");
+            foreach (var item in node.Cases[0].Items)
+            {
+                Console.WriteLine(item.Name + " @ " + item.HotSpot.TopLeft + "x" + item.HotSpot.BottomRight);
+            }
+            Console.WriteLine(Environment.NewLine);

+            Console.WriteLine("room has these effects");
+            foreach (var item in node.Cases[0].Effects)
+            {
+                Console.WriteLine(item.Name);
+            }
+            Console.WriteLine(Environment.NewLine);
+
+            Console.ReadLine();
         }

         private static Node GetNodeInfo(int nodeId)
@@ -80,6 +104,20 @@
                                 Name = "Plane",
                                 Type = "3D Effect",
                                 SoundPath = "/sound/effect/5.ogg",
+                                Detail ="???"
+                            },
+                            new Effect
+                            {
+                                Name = "BirdSinging",
+                                Type = "Sound",
+                                SoundPath = "/sound/effect/15.ogg",
+                                Detail ="???"
+                            },
+                            new Effect
+                            {
+                                Name = "PhoneRinging",
+                                Type = "Sound",
+                                SoundPath = "/sound/effect/15.ogg",
                                 Detail ="???"
                             }
                         },


Added single backtick to the escape list

--- src/Discord.Net/Format.cs
+++ src/Discord.Net/Format.cs
@@ -9,7 +9,7 @@

 		static Format()
 		{
-			_patterns = new string[] { "__", "_", "**", "*", "~~", "```" };
+			_patterns = new string[] { "__", "_", "**", "*", "~~", "```", "`"};
 			_builder = new StringBuilder(DiscordClient.MaxMessageSize);
         }


Add OpCode.ToString()

Add OpCode.ToString()

--- src/DotNet/Emit/OpCode.cs
+++ src/DotNet/Emit/OpCode.cs
@@ -65,5 +65,10 @@
 			else if (((ushort)code >> 8) == 0xFE)
 				OpCodes.TwoByteOpCodes[(byte)code] = this;
 		}
+
+		/// <inheritdoc/>
+		public override string ToString() {
+			return Name;
+		}
 	}
 }


Reuse allocated strings

Reuse allocated strings

--- src/Fakes/AbsolutePath.cs
+++ src/Fakes/AbsolutePath.cs
@@ -98,7 +98,7 @@
             }

             string[] components = Components.Skip(1).ToArray();
-            builder.Append(string.Join(Path.DirectorySeparatorChar.ToString(), components));
+            builder.Append(string.Join(PathFacts.PrimaryDirectorySeparatorString, components));

             if (HasTrailingSeparator && builder[builder.Length - 1] != Path.DirectorySeparatorChar)
             {
@@ -206,7 +206,7 @@
                 relativeComponents.Add(thisComponent);
             }

-            return string.Join(Path.DirectorySeparatorChar.ToString(), relativeComponents);
+            return string.Join(PathFacts.PrimaryDirectorySeparatorString, relativeComponents);
         }

         private void AssertBasePathIsNotLongerThanSelf([NotNull] AbsolutePath basePath)
@@ -361,8 +361,8 @@
             [NotNull]
             private static string WithoutTrailingSeparator([NotNull] string path)
             {
-                return path.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) ||
-                    path.EndsWith(Path.AltDirectorySeparatorChar.ToString(), StringComparison.Ordinal)
+                return path.EndsWith(PathFacts.PrimaryDirectorySeparatorString, StringComparison.Ordinal) ||
+                    path.EndsWith(PathFacts.AlternateDirectorySeparatorString, StringComparison.Ordinal)
                         ? path.Substring(0, path.Length - 1)
                         : path;
             }


Improve ReloadPage

Improve ReloadPage

--- Visa/Visa.WebCrawler/SeleniumCrawler/RegisterUser.cs
+++ Visa/Visa.WebCrawler/SeleniumCrawler/RegisterUser.cs
@@ -135,6 +135,7 @@
             var bRes = false;
             try
             {
+                Thread.Sleep(2000);//Because Fall in next step
                 var infoText = FindElementWithChecking(By.Id(errorMessage)).Text;
                 if (infoText.Contains(capchaNotFilledMessage)) //"The image you selected not match"
                 {
@@ -466,10 +467,10 @@
         }

         public void ReloadPage()
-
         {
             _logger.Info("Start ReloadPage.");
-            string result = "OK";
+            var result = "OK";
+            var shouldAlertAccept = (0 == _driver.Url.CompareTo(mainUrl));
             try
             {
                 _driver.Navigate().Refresh();
@@ -479,17 +480,21 @@
                 _logger.Error(
                         $"Navigate().RefreshException with message = {ex.Message}");
                 result = "ERROR";
-            }
-            Thread.Sleep(1000);
-            try
-            {
-                if (_driver.SwitchTo().Alert() != null)
-                    _driver.SwitchTo().Alert().Accept();
-            }
-            catch (NoAlertPresentException ex)
-            {
-                _logger.Trace(// Alert not present
-                        $"SwitchTo().NoAlertPresentException with message = {ex.Message}");
+                shouldAlertAccept = false;
+            }
+            if (shouldAlertAccept)
+            {
+                Thread.Sleep(200);
+                try
+                {
+                    if (_driver.SwitchTo().Alert() != null)
+                        _driver.SwitchTo().Alert().Accept();
+                }
+                catch (NoAlertPresentException ex)
+                {
+                    _logger.Trace(// Alert not present
+                            $"SwitchTo().NoAlertPresentException with message = {ex.Message}");
+                }
             }
             _logger.Info($"End ReloadPage. Status={result}");
         }


Refactorings

Refactorings

--- WWCP_Core/LocalService/Reserve/OnReserveDelegates.cs
+++ WWCP_Core/LocalService/Reserve/OnReserveDelegates.cs
@@ -31,57 +31,49 @@
     /// <summary>
     /// Reserve the possibility to charge anywhere within the given charging pool.
     /// </summary>
+    /// <param name="CancellationToken">A token to cancel this task.</param>
     /// <param name="Timestamp">The timestamp of the request.</param>
     /// <param name="RoamingNetworkId">The unique identification for the roaming network.</param>
     /// <param name="ReservationId">The unique identification for this charging reservation.</param>
     /// <param name="ProviderId">The unique identification of the e-mobility service provider.</param>
-    /// <param name="eMAId">The unique identification of the e-mobility account.</param>
     /// <param name="ChargingPoolId">The unique identification of a charging pool.</param>
     /// <param name="ChargingProductId">The unique identification of the choosen charging product at the given EVSE.</param>
-    /// <param name="CurrentCallerTime">The optional current timestamp on the caller side (to sync clocks). [default: Now]</param>
     /// <param name="StartTime">The timestamp when the reservation should start. [default: Now]</param>
     /// <param name="Duration">The duration of the reservation. [default: 30 min]</param>
-    /// <param name="CancellationToken">A token to cancel this task.</param>
     /// <returns>A RemoteStartResult task.</returns>
-    public delegate Task<RemoteStartResultType> OnReservePoolDelegate(DateTime                Timestamp,
-                                                                      RoamingNetwork_Id       RoamingNetworkId,
-                                                                      ChargingReservation_Id  ReservationId,
-                                                                      EVSP_Id                 ProviderId,
-                                                                      eMA_Id                  eMAId,
-                                                                      ChargingPool_Id         ChargingPoolId,
-                                                                      ChargingProduct_Id      ChargingProductId,
-                                                                      DateTime?               CurrentCallerTime,
-                                                                      DateTime?               StartTime,
-                                                                      TimeSpan?               Duration,
-                                                                      CancellationToken       CancellationToken);
+    public delegate Task<ReservationResult> OnReserveChargingPoolDelegate(CancellationToken       CancellationToken,
+                                                                          DateTime                Timestamp,
+                                                                          RoamingNetwork_Id       RoamingNetworkId,
+                                                                          ChargingReservation_Id  ReservationId,
+                                                                          EVSP_Id                 ProviderId,
+                                                                          ChargingPool_Id         ChargingPoolId,
+                                                                          ChargingProduct_Id      ChargingProductId,
+                                                                          DateTime?               StartTime,
+                                                                          TimeSpan?               Duration);

     /// <summary>
     /// Reserve the possibility to charge anywhere at the given charging station.
     /// </summary>
+    /// <param name="CancellationToken">A token to cancel this task.</param>
     /// <param name="Timestamp">The timestamp of the request.</param>
     /// <param name="RoamingNetworkId">The unique identification for the roaming network.</param>
     /// <param name="ReservationId">The unique identification for this charging reservation.</param>
     /// <param name="ProviderId">The unique identification of the e-mobility service provider.</param>
-    /// <param name="eMAId">The unique identification of the e-mobility account.</param>
     /// <param name="ChargingStationId">The unique identification of a charging station.</param>
     /// <param name="ChargingProductId">The unique identification of the choosen charging product at the given EVSE.</param>
-    /// <param name="CurrentCallerTime">The optional current timestamp on the caller side (to sync clocks). [default: Now]</param>
     /// <param name="StartTime">The timestamp when the reservation should start. [default: Now]</param>
     /// <param name="Duration">The duration of the reservation. [default: 30 min]</param>
-    /// <param name="CancellationToken">A token to cancel this task.</param>
     /// <returns>A RemoteStartResult task.</returns>
-    public delegate Task<RemoteStartResultType> OnReserveStationDelegate(DateTime                Timestamp,
-                                                                         RoamingNetwork_Id       RoamingNetworkId,
-                                                                         ChargingReservation_Id  ReservationId,
-                                                                         EVSP_Id                 ProviderId,
-                                                                         eMA_Id                  eMAId,
-                                                                         ChargingStation_Id      ChargingStationId,
-                                                                         ChargingProduct_Id      ChargingProductId,
-                                                                         DateTime?               CurrentCallerTime,
-                                                                         DateTime?               StartTime,
-                                                                         TimeSpan?               Duration,
-                                                                         CancellationToken       CancellationToken);
+    public delegate Task<ReservationResult> OnReserveChargingStationDelegate(CancellationToken       CancellationToken,
+                                                                             DateTime                Timestamp,
+                                                                             RoamingNetwork_Id       RoamingNetworkId,
+                                                                             ChargingReservation_Id  ReservationId,
+                                                                             EVSP_Id                 ProviderId,
+                                                                             ChargingStation_Id      ChargingStationId,
+                                                                             ChargingProduct_Id      ChargingProductId,
+                                                                             DateTime?               StartTime,
+                                                                             TimeSpan?               Duration);

     /// <summary>


Reverted unnecessary whitespace changes

Reverted unnecessary whitespace changes

--- src/DotVVM.Framework/Configuration/DotvvmExperimentalFeatureFlag.cs
+++ src/DotVVM.Framework/Configuration/DotvvmExperimentalFeatureFlag.cs
@@ -19,7 +19,6 @@
                 _enabled = value;
             }
         }
-
         private bool _enabled = false;

         [JsonProperty("includedRoutes")]
@@ -32,7 +31,6 @@
                 _includedRoutes = value;
             }
         }
-
         private ISet<string> _includedRoutes = new FreezableSet<string>();

         [JsonProperty("excludedRoutes")]
@@ -45,7 +43,6 @@
                 _excludedRoutes = value;
             }
         }
-
         private ISet<string> _excludedRoutes = new FreezableSet<string>();

         public void EnableForAllRoutes()
@@ -93,13 +90,11 @@
         }

         private bool isFrozen = false;
-
         private void ThrowIfFrozen()
         {
             if (isFrozen)
                 FreezableUtils.Error(nameof(DotvvmExperimentalFeatureFlag));
         }
-
         public void Freeze()
         {
             this.isFrozen = true;
@@ -108,4 +103,3 @@
         }
     }
 }
-


Designer cleanup

Designer cleanup

--- src/GitHub.App/SampleData/ForkRepositoryExecuteViewModelDesigner.cs
+++ src/GitHub.App/SampleData/ForkRepositoryExecuteViewModelDesigner.cs
@@ -46,14 +46,9 @@

         public bool UpdateOrigin { get; set; } = true;

-        public Task InitializeAsync(ILocalRepositoryModel sourceRepository, IConnection connection)
+        public Task InitializeAsync(ILocalRepositoryModel sourceRepository, IAccount destinationAccount, IConnection connection)
         {
             return Task.CompletedTask;
         }
-
-        public Task InitializeAsync(ILocalRepositoryModel sourceRepository, IAccount destinationAccount, IConnection connection)
-        {
-            throw new NotImplementedException();
-        }
     }
 }


Remove unused method

Remove unused method

--- src/HolzShots.Capture.Video/Capture/Video/FFmpeg/FFmpegManagerUi.cs
+++ src/HolzShots.Capture.Video/Capture/Video/FFmpeg/FFmpegManagerUi.cs
@@ -81,12 +81,6 @@
             QuitApplication,
             AbortRecording,
             Coninue,
-        }
-
-
-        private static void DownloadButton_Click(object? sender, System.EventArgs e)
-        {
-            throw new System.NotImplementedException();
         }

         static TaskDialogPage GetInitialPage(TaskDialogButton downloadButton, TaskDialogButton manualDownload) => new()


M-1289 - Fixed - Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object

--- src/Merchello.Core/Persistence/Factories/ProductAttributeFactory.cs
+++ src/Merchello.Core/Persistence/Factories/ProductAttributeFactory.cs
@@ -67,7 +67,9 @@
                     Sku = entity.Sku,
                     SortOrder = entity.SortOrder,
                     IsDefaultChoice = entity.IsDefaultChoice,
-                    DetachedContentValues = JsonConvert.SerializeObject(entity.DetachedDataValues.AsEnumerable()),
+                    DetachedContentValues = entity.DetachedDataValues.Any() ?
+                                                JsonConvert.SerializeObject(entity.DetachedDataValues.AsEnumerable()) :
+                                                null,
                     UpdateDate = entity.UpdateDate,
                     CreateDate = entity.CreateDate
                 };


Set keyboard to Numeric for price field.

--- src/MobileApp/XamarinCRM/Pages/Customers/CustomerOrderDetailPage.cs
+++ src/MobileApp/XamarinCRM/Pages/Customers/CustomerOrderDetailPage.cs
@@ -110,7 +110,7 @@
             #endregion

             #region price
-            Entry priceEntry = new Entry() { Placeholder = TextResources.Customers_Orders_EditOrder_PriceEntryPlaceholder };
+            Entry priceEntry = new Entry() { Placeholder = TextResources.Customers_Orders_EditOrder_PriceEntryPlaceholder, Keyboard = Keyboard.Numeric };
             priceEntry.SetBinding(Entry.TextProperty, "Order.Price", BindingMode.TwoWay, new CurrencyDoubleConverter());
             priceEntry.SetBinding(IsEnabledProperty, "Order.IsOpen");
             priceEntry.SetBinding(IsVisibleProperty, "Order.IsOpen");


Fixed issue if concurrency issue was hit during processing

Fixed an issue where if we hit an issue during the reprocessing of
aggregates for undispatched commits we would potentially enter an
infinite loop of retry during very busy system operation.

--- src/NEventStore.Persistence.AzureBlob/AzureBlobPersistenceEngine.cs
+++ src/NEventStore.Persistence.AzureBlob/AzureBlobPersistenceEngine.cs
@@ -266,17 +266,18 @@
             // this may not be performant enough and may require some sort of index be built.
             foreach (var pageBlob in pageBlobs)
             {
-                if (pageBlob.Metadata.ContainsKey(_isEventStreamAggregateKey))
+                var temp = pageBlob;
+                if (temp.Metadata.ContainsKey(_isEventStreamAggregateKey))
                 {
                     // we only care about guys who may be dirty
                     bool isDirty = false;
                     string isDirtyString;
-                    if (pageBlob.Metadata.TryGetValue(_hasUndispatchedCommitsKey, out isDirtyString))
+                    if (temp.Metadata.TryGetValue(_hasUndispatchedCommitsKey, out isDirtyString))
                     { isDirty = Boolean.Parse(isDirtyString); }

                     if (isDirty)
                     {
-                        Logger.Info("undispatched commit possibly found with aggregate [{0}]", pageBlob.Name);
+                        Logger.Info("undispatched commit possibly found with aggregate [{0}]", temp.Name);

                         // Because fetching the header for a specific blob is a two phase operation it may take a couple tries if we are working with the
                         // blob.  This is just a quality of life improvement for the user of the store so loading of the store does not hit frequent optimistic
@@ -287,7 +288,7 @@
                             try
                             {
                                 HeaderDefinitionMetadata headerDefinitionMetadata = null;
-                                var header = GetHeaderWithRetry(pageBlob, out headerDefinitionMetadata);
+                                var header = GetHeaderWithRetry(temp, out headerDefinitionMetadata);
                                 bool wasActuallyDirty = false;
                                 if (header.UndispatchedCommitCount > 0)
                                 {
@@ -295,17 +296,17 @@
                                     {
                                         if (!definition.IsDispatched)
                                         {
-                                            Logger.Warn("Found undispatched commit for stream [{0}] revision [{1}]", pageBlob.Name, definition.Revision);
+                                            Logger.Warn("Found undispatched commit for stream [{0}] revision [{1}]", temp.Name, definition.Revision);
                                             wasActuallyDirty = true;
-                                            allCommitDefinitions.Add(new Tuple<WrappedPageBlob, PageBlobCommitDefinition>(pageBlob, definition));
+                                            allCommitDefinitions.Add(new Tuple<WrappedPageBlob, PageBlobCommitDefinition>(temp, definition));
                                         }
                                     }
                                 }

                                 if (!wasActuallyDirty)
                                 {
-                                    pageBlob.Metadata[_hasUndispatchedCommitsKey] = false.ToString();
-                                    pageBlob.SetMetadata();
+                                    temp.Metadata[_hasUndispatchedCommitsKey] = false.ToString();
+                                    temp.SetMetadata();
                                 }

                                 break;
@@ -318,7 +319,13 @@
                                     throw;
                                 }
                                 else
-                                { Logger.Info("Concurrency issue detected while processing undispatched commits.  going to retry to load container"); }
+                                {
+                                    Logger.Info("Concurrency issue detected while processing undispatched commits.  going to retry to load container");
+                                    try
+                                    { temp = WrappedPageBlob.GetAllMatchinPrefix(_primaryContainer, pageBlob.Name).Single(); }
+                                    catch (Exception ex)
+                                    { Logger.Warn("Attempted to reload during concurrency and failed... will retry.  [{0}]", ex.Message); }
+                                }
                             }
                             catch (CryptographicException ex)
                             {


NR Recover when internet access is available again

--- src/NewsReader/NewsReader.Applications/Controllers/AppController.cs
+++ src/NewsReader/NewsReader.Applications/Controllers/AppController.cs
@@ -3,6 +3,7 @@
 using Jbe.NewsReader.Domain;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Composition;
 using System.Linq;
 using System.Threading.Tasks;
@@ -15,6 +16,7 @@
     {
         private readonly ILauncherService launcherService;
         private readonly IAppInfoService appInfoService;
+        private readonly INetworkInfoService networkInfoService;
         private readonly SelectionService selectionService;
         private readonly Lazy<DataController> dataController;
         private readonly Lazy<AccountController> accountController;
@@ -38,12 +40,13 @@

         [ImportingConstructor]
-        public AppController(ILauncherService launcherService, IAppInfoService appInfoService, SelectionService selectionService,
+        public AppController(ILauncherService launcherService, IAppInfoService appInfoService, INetworkInfoService networkInfoService, SelectionService selectionService,
             Lazy<DataController> dataController, Lazy<AccountController> accountController, Lazy<NewsFeedsController> newsFeedsController, Lazy<SettingsController> settingsController,
             Lazy<ShellViewModel> shellViewModel, Lazy<FeedListViewModel> feedListViewModel, Lazy<FeedItemListViewModel> feedItemListViewModel, Lazy<FeedItemViewModel> feedItemViewModel)
         {
             this.launcherService = launcherService;
             this.appInfoService = appInfoService;
+            this.networkInfoService = networkInfoService;
             this.selectionService = selectionService;
             this.dataController = dataController;
             this.accountController = accountController;
@@ -85,6 +88,7 @@

         public void Initialize()
         {
+            networkInfoService.PropertyChanged += NetworkInfoServicePropertyChanged;
             dataController.Value.Initialize();
             accountController.Value.Initialize();
             shellViewModel.Value.NavigateBackCommand = navigateBackCommand;
@@ -213,5 +217,13 @@
         {
             SelectedNavigationItem = NavigationItem.Settings;
         }
+
+        private void NetworkInfoServicePropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            if (e.PropertyName == nameof(networkInfoService.InternetAccess) && networkInfoService.InternetAccess)
+            {
+                Resuming();
+            }
+        }
     }
 }


#19819: Fixing exception thrown in UserTaskEditor

Work Item: 19819

--HG--
branch : 1.x

--- src/Orchard.Web/Modules/Orchard.Workflows/Drivers/UserTaskDriver.cs
+++ src/Orchard.Web/Modules/Orchard.Workflows/Drivers/UserTaskDriver.cs
@@ -44,6 +44,10 @@
         protected override DriverResult Editor(ContentPart part, dynamic shapeHelper) {
             var results = new List<DriverResult> {
                 ContentShape("UserTask_ActionButton", () => {
+                    if (part.ContentItem.Record == null) {
+                        return null;
+                    }
+
                     var workContext = _workContextAccessor.GetContext();
                     var user = workContext.CurrentUser;

@@ -53,8 +57,6 @@
                     return shapeHelper.UserTask_ActionButton().Actions(actions);
                 })
             };
-
-            //if (part.TypeDefinition.Settings.GetModel<ContentTypeSettings>().Draftable) {}

             return Combined(results.ToArray());
         }
@@ -100,22 +102,5 @@

             return Editor(part, shapeHelper);
         }
-
-        //protected override DriverResult Display(ContentPart part, string displayType, dynamic shapeHelper) {
-        //    return ContentShape("Parts_UserTask_SummaryAdmin", () => {
-        //        var workContext = _workContextAccessor.GetContext();
-        //        var user = workContext.CurrentUser;
-
-        //        var awaiting = _awaitingActivityRepository.Table.Where(x => x.ContentItemRecord == part.ContentItem.Record && x.ActivityRecord.Name == "UserTask").ToList();
-        //        awaiting = awaiting.Where(x => {
-        //            var state = FormParametersHelper.FromJsonString(x.ActivityRecord.State);
-        //            string rolesState = state.Roles ?? "";
-        //            var roles = rolesState.Split(',');
-        //            return UserTaskActivity.UserIsInRole(user, roles);
-        //        }).ToList();
-
-        //        return shapeHelper.Parts_Workflow_SummaryAdmin().Activities(awaiting.Select(x => x.ActivityRecord));
-        //    });
-        //}
     }
 }


Fix for noTraceOnDisk

Fix for noTraceOnDisk


Add Dapper-based query example code

Add Dapper-based query example code


ugh need this for static cockpit in VR because w/ vive the camera is not positioned until the second frame!

--- Cockpit.cs
+++ Cockpit.cs
@@ -238,6 +238,11 @@

         }

+        public void InvalidateStaticPosition()
+        {
+            bStaticUpdated = false;
+        }
+

 		public void AddUIElement(SceneUIElement e, bool bIsInLocalFrame = true) {


Get mapping instead of ResourceConfiguration

--- src/SimpleJsonApi/DocumentConverters/DocumentParser.cs
+++ src/SimpleJsonApi/DocumentConverters/DocumentParser.cs
@@ -27,7 +27,7 @@
             if (isGenericChangesObject) type = type.GenericTypeArguments.First();

             ValidateResourceType(document, type);
-            var mapping = _resourceConfigurations[type];
+            var mapping = _resourceConfigurations[type]?.Mapping;
             if (mapping == null) throw new JsonApiException(CausedBy.Client, $"No mapping found for resource type {type.Name}");

             var builder = BuilderCache.GetOrAdd(type, t => typeof(DocumentParser).GetMethod(nameof(BuildChanges))?.MakeGenericMethod(t));


Fix DateTimeOffset failure in XmlConvert test


Revert "Fix UmbracoDatabaseFactory"

Revert "Fix UmbracoDatabaseFactory"

This reverts commit 716fc582a083a750e29e7b73d24e4386f097a8bf.

--- src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
+++ src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
@@ -119,9 +119,23 @@
         }

         /// <inheritdoc />
-        public bool CanConnect => Configured && DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName);
-
-        private DatabaseType DetectSqlServerVersion()
+        public bool CanConnect
+        {
+            get
+            {
+                if (!Configured || !DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName)) return false;
+
+                if (_serverVersionDetected) return true;
+
+                if (_databaseType.IsSqlServer())
+                    DetectSqlServerVersion();
+                _serverVersionDetected = true;
+
+                return true;
+            }
+        }
+
+        private void DetectSqlServerVersion()
         {
             // replace NPoco database type by a more efficient one

@@ -138,28 +152,22 @@
                 fromSettings = true;
             }

-            DatabaseType databaseType;
             switch (versionName)
             {
                 case SqlServerSyntaxProvider.VersionName.V2008:
-                    databaseType = DatabaseType.SqlServer2008;
+                    _databaseType = DatabaseType.SqlServer2008;
                     break;
                 case SqlServerSyntaxProvider.VersionName.V2012:
                 case SqlServerSyntaxProvider.VersionName.V2014:
                 case SqlServerSyntaxProvider.VersionName.V2016:
                 case SqlServerSyntaxProvider.VersionName.V2017:
-                    databaseType = DatabaseType.SqlServer2012;
+                    _databaseType = DatabaseType.SqlServer2012;
                     break;
                 // else leave unchanged
-                default:
-                    databaseType = _databaseType;
-                    break;
             }

             _logger.Debug<UmbracoDatabaseFactory>("SqlServer {SqlServerVersion}, DatabaseType is {DatabaseType} ({Source}).",
-                versionName, databaseType, fromSettings ? "settings" : "detected");
-
-            return databaseType;
+                versionName, _databaseType, fromSettings ? "settings" : "detected");
         }

         /// <inheritdoc />
@@ -216,9 +224,6 @@

                 if (_npocoDatabaseFactory == null) throw new NullReferenceException("The call to UmbracoDatabaseFactory.Config yielded a null UmbracoDatabaseFactory instance.");

-                if (_databaseType.IsSqlServer() && DbConnectionExtensions.IsConnectionAvailable(_connectionString, _providerName))
-                    _databaseType = DetectSqlServerVersion();
-
                 SqlContext = new SqlContext(_sqlSyntax, _databaseType, _pocoDataFactory, _mappers);

                 _logger.Debug<UmbracoDatabaseFactory>("Configured.");


U4-8983 - clear EntityService cache on content events

--- src/Umbraco.Web/Cache/UnpublishedPageCacheRefresher.cs
+++ src/Umbraco.Web/Cache/UnpublishedPageCacheRefresher.cs
@@ -77,6 +77,8 @@

         public override void RefreshAll()
         {
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey);
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey);
             ClearAllIsolatedCacheByEntityType<IContent>();
             ClearAllIsolatedCacheByEntityType<PublicAccessEntry>();
             DistributedCache.Instance.ClearDomainCacheOnCurrentServer();
@@ -85,6 +87,8 @@

         public override void Refresh(int id)
         {
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey);
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey);
             ClearRepositoryCacheItemById(id);
             ClearAllIsolatedCacheByEntityType<PublicAccessEntry>();
             content.Instance.UpdateSortOrder(id);
@@ -94,6 +98,8 @@

         public override void Remove(int id)
         {
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey);
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey);
             ClearRepositoryCacheItemById(id);
             ClearAllIsolatedCacheByEntityType<PublicAccessEntry>();
             DistributedCache.Instance.ClearDomainCacheOnCurrentServer();
@@ -103,6 +109,8 @@

         public override void Refresh(IContent instance)
         {
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey);
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey);
             ClearRepositoryCacheItemById(instance.Id);
             ClearAllIsolatedCacheByEntityType<PublicAccessEntry>();
             content.Instance.UpdateSortOrder(instance);
@@ -112,6 +120,8 @@

         public override void Remove(IContent instance)
         {
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey);
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey);
             ClearRepositoryCacheItemById(instance.Id);
             ClearAllIsolatedCacheByEntityType<PublicAccessEntry>();
             DistributedCache.Instance.ClearDomainCacheOnCurrentServer();
@@ -124,6 +134,8 @@
         /// <param name="jsonPayload"></param>
         public void Refresh(string jsonPayload)
         {
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey);
+            ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey);
             ClearAllIsolatedCacheByEntityType<PublicAccessEntry>();

             foreach (var payload in DeserializeFromJsonPayload(jsonPayload))


when we rebuild indexes in the back office we are actually calling index.CreateIndex() 2 times before populating

(cherry picked from commit d7469e6576fbe4bf4d23f9046399b3899c0ff58c)

--- src/Umbraco.Web/Editors/ExamineManagementController.cs
+++ src/Umbraco.Web/Editors/ExamineManagementController.cs
@@ -141,9 +141,6 @@

             try
             {
-                //clear and replace
-                index.CreateIndex();
-
                 var cacheKey = "temp_indexing_op_" + index.Name;
                 //put temp val in cache which is used as a rudimentary way to know when the indexing is done
                 AppCaches.RuntimeCache.Insert(cacheKey, () => "tempValue", TimeSpan.FromMinutes(5));


Avoid conflict when paths start the same

Serializing could result in `No trees contained the global path /sitecore/templates/YourPath` if two configurations included a path that starts with the same string.
For example, `/sitecore/templates/YourPath` and `/sitecore/templates/YourPathHere` could cause a conflict.

For some reason none of the unit tests are running on my machine so please run them before accepting.

--- src/Unicorn/Predicates/SerializationPresetPredicate.cs
+++ src/Unicorn/Predicates/SerializationPresetPredicate.cs
@@ -61,7 +61,8 @@
 			if (!itemData.DatabaseName.Equals(entry.DatabaseName, StringComparison.OrdinalIgnoreCase)) return new PredicateResult(false);

 			// check for path match
-			if (!itemData.Path.StartsWith(entry.Path, StringComparison.OrdinalIgnoreCase)) return new PredicateResult(false);
+			if (!itemData.Path.StartsWith(entry.Path + "/", StringComparison.OrdinalIgnoreCase)
+                && !itemData.Path.Equals(entry.Path, StringComparison.OrdinalIgnoreCase)) return new PredicateResult(false);

 			// check excludes
 			return ExcludeMatches(entry, itemData);
@@ -206,4 +207,4 @@
 			return GetRootPaths();
 		}
 	}
-}+}


Updating background and foreground colors for error and warning strings Work Item: 2305

--- src/VsConsole/PowerShellHost/NuGetHostUserInterface.cs
+++ src/VsConsole/PowerShellHost/NuGetHostUserInterface.cs
@@ -524,13 +524,13 @@

         public override void WriteErrorLine(string value)
         {
-            WriteLine(value, ConsoleColor.Red, ConsoleColor.Gray);
+            WriteLine(value, foregroundColor: ConsoleColor.White, backgroundColor: ConsoleColor.Red);
         }

         public override void WriteProgress(long sourceId, ProgressRecord record)
         {
             string operation = record.CurrentOperation ?? record.StatusDescription;
-            if (!String.IsNullOrEmpty(operation))
+            if (!String.IsNullOrEmpty(operation))
             {
                 Console.WriteProgress(operation, record.PercentComplete);
             }
@@ -543,7 +543,7 @@

         public override void WriteWarningLine(string message)
         {
-            WriteLine(message, ConsoleColor.Magenta, ConsoleColor.Gray);
+            WriteLine(message, foregroundColor: ConsoleColor.Black, backgroundColor: ConsoleColor.Yellow);
         }
     }
 }


Fix a few

Fix a few

--- Example2/Chat.cs
+++ Example2/Chat.cs
@@ -27,7 +27,7 @@
       return Context.QueryString ["name"] ?? (_prefix + getNum ());
     }

-    private int getNum ()
+    private static int getNum ()
     {
       return Interlocked.Increment (ref _num);
     }


Make remove by index work

Make remove by index work

--- Gui/GUIWidget.cs
+++ Gui/GUIWidget.cs
@@ -1561,10 +1561,15 @@

 		public virtual void RemoveChild(int index)
 		{
-			Children.Modify((list) =>
-			{
-				RemoveChild(list[index]);
-			});
+			int i = 0;
+			foreach (var child in Children)
+			{
+				if (i++ == index)
+				{
+					RemoveChild(child);
+					return;
+				}
+			}
 		}

 		public void ReplaceChild(GuiWidget existing, GuiWidget replacement)


Update Constants.cs

Update Constants.cs

change chat url to current chat url due to ddos attack

--- slimCat/Utilities/Constants.cs
+++ slimCat/Utilities/Constants.cs
@@ -388,7 +388,7 @@
         /// <summary>
         ///     The endpoint for F-chat websocket communication.
         /// </summary>
-        public const string ServerHost = "wss://chat.f-list.net:9799/";
+        public const string ServerHost = "wss://chat.f-list.net/chat2";

         /// <summary>
         ///     The base url used to find updates and themes.
@@ -407,4 +407,4 @@

         #endregion
     }
-}+}