Added IntPtr overload for all WinCon functions currently using StringBuilder param (#107)

--- PInvoke/Kernel32/WinCon.cs
+++ PInvoke/Kernel32/WinCon.cs
@@ -656,6 +656,22 @@
 		[return: MarshalAs(UnmanagedType.Bool)]
 		public static extern bool GetConsoleAlias(string lpSource, StringBuilder lpTargetBuffer, uint TargetBufferLength, string lpExeName);

+		/// Retrieves the text for the specified console alias and executable.
+		/// <param name="lpSource">The console alias whose text is to be retrieved.</param>
+		/// <param name="lpTargetBuffer">A pointer to a buffer that receives the text associated with the console alias.</param>
+		/// <param name="TargetBufferLength">The size of the buffer pointed to by lpTargetBuffer, in bytes.</param>
+		/// <param name="lpExeName">The name of the executable file.</param>
+		/// <returns>
+		/// <para>If the function succeeds, the return value is nonzero.</para>
+		/// <para>If the function fails, the return value is zero. To get extended error information, call <c>GetLastError</c>.</para>
+		/// </returns>
+		// DWORD WINAPI GetConsoleAlias( _In_ LPTSTR lpSource, _Out_ LPTSTR lpTargetBuffer, _In_ DWORD TargetBufferLength, _In_ LPTSTR
+		// lpExeName );
+		[DllImport(Lib.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
+		[PInvokeData("Wincon.h", MSDNShortId = "")]
+		[return: MarshalAs(UnmanagedType.Bool)]
+		public static extern bool GetConsoleAlias(string lpSource, IntPtr lpTargetBuffer, uint TargetBufferLength, string lpExeName);
+
 		/// Retrieves all defined console aliases for the specified executable.
 		/// <param name="lpAliasBuffer">
 		/// <para>[out] A pointer to a buffer that receives the aliases.</para>
@@ -1270,6 +1286,25 @@
 		[PInvokeData("Wincon.h", MSDNShortId = "")]
 		public static extern uint GetConsoleOriginalTitle(StringBuilder lpConsoleTitle, uint nSize);

+		/// Retrieves the original title for the current console window.
+		/// <param name="lpConsoleTitle">
+		/// <para>A pointer to a buffer that receives a null-terminated string containing the original title.</para>
+		/// <para>
+		/// The storage for this buffer is allocated from a shared heap for the process that is 64 KB in size. The maximum size of the buffer
+		/// will depend on heap usage.
+		/// </para>
+		/// </param>
+		/// <param name="nSize">The size of the lpConsoleTitle buffer, in characters.</param>
+		/// <returns>
+		/// <para>If the function succeeds, the return value is the length of the string copied to the buffer, in characters.</para>
+		/// <para>If the buffer is not large enough to store the title, the return value is zero and <c>GetLastError</c> returns <c>ERROR_SUCCESS</c>.</para>
+		/// <para>If the function fails, the return value is zero and <c>GetLastError</c> returns the error code.</para>
+		/// </returns>
+		// DWORD WINAPI GetConsoleOriginalTitle( _Out_ LPTSTR lpConsoleTitle, _In_ DWORD nSize );
+		[DllImport(Lib.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
+		[PInvokeData("Wincon.h", MSDNShortId = "")]
+		public static extern uint GetConsoleOriginalTitle(IntPtr lpConsoleTitle, uint nSize);
+
 		///
 		/// Retrieves the output code page used by the console associated with the calling process. A console uses its output code page to
 		/// translate the character values written by the various output functions into the images displayed in the console window.
@@ -1395,6 +1430,27 @@
 		[PInvokeData("Wincon.h", MSDNShortId = "")]
 		public static extern uint GetConsoleTitle(StringBuilder lpConsoleTitle, uint nSize);

+		/// Retrieves the title for the current console window.
+		/// <param name="lpConsoleTitle">
+		/// <para>
+		/// A pointer to a buffer that receives a null-terminated string containing the title. If the buffer is too small to store the title,
+		/// the function stores as many characters of the title as will fit in the buffer, ending with a null terminator.
+		/// </para>
+		/// <para>
+		/// The storage for this buffer is allocated from a shared heap for the process that is 64 KB in size. The maximum size of the buffer
+		/// will depend on heap usage.
+		/// </para>
+		/// </param>
+		/// <param name="nSize">The size of the buffer pointed to by the lpConsoleTitle parameter, in characters.</param>
+		/// <returns>
+		/// <para>If the function succeeds, the return value is the length of the console window's title, in characters.</para>
+		/// <para>If the function fails, the return value is zero and <c>GetLastError</c> returns the error code.</para>
+		/// </returns>
+		// DWORD WINAPI GetConsoleTitle( _Out_ LPTSTR lpConsoleTitle, _In_ DWORD nSize );
+		[DllImport(Lib.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
+		[PInvokeData("Wincon.h", MSDNShortId = "")]
+		public static extern uint GetConsoleTitle(IntPtr lpConsoleTitle, uint nSize);
+
 		/// Retrieves the window handle used by the console associated with the calling process.
 		/// <returns>
 		/// The return value is a handle to the window used by the console associated with the calling process or <c>NULL</c> if there is no
@@ -1587,6 +1643,74 @@
 		[PInvokeData("Wincon.h", MSDNShortId = "")]
 		[return: MarshalAs(UnmanagedType.Bool)]
 		public static extern bool ReadConsole(HFILE hConsoleInput, StringBuilder lpBuffer, uint nNumberOfCharsToRead, out uint lpNumberOfCharsRead, in CONSOLE_READCONSOLE_CONTROL pInputControl);
+
+		/// Reads character input from the console input buffer and removes it from the buffer.
+		/// <param name="hConsoleInput">
+		/// A handle to the console input buffer. The handle must have the <c>GENERIC_READ</c> access right. For more information, see
+		/// Console Buffer Security and Access Rights.
+		/// </param>
+		/// <param name="lpBuffer">
+		/// <para>A pointer to a buffer that receives the data read from the console input buffer.</para>
+		/// <para>
+		/// The storage for this buffer is allocated from a shared heap for the process that is 64 KB in size. The maximum size of the buffer
+		/// will depend on heap usage.
+		/// </para>
+		/// </param>
+		/// <param name="nNumberOfCharsToRead">
+		/// The number of characters to be read. The size of the buffer pointed to by the lpBuffer parameter should be at least bytes.
+		/// </param>
+		/// <param name="lpNumberOfCharsRead">A pointer to a variable that receives the number of characters actually read.</param>
+		/// <param name="pInputControl">
+		/// <para>
+		/// A pointer to a <c>CONSOLE_READCONSOLE_CONTROL</c> structure that specifies a control character to signal the end of the read
+		/// operation. This parameter can be <c>NULL</c>.
+		/// </para>
+		/// <para>This parameter requires Unicode input by default. For ANSI mode, set this parameter to <c>NULL</c>.</para>
+		/// </param>
+		/// <returns>
+		/// <para>If the function succeeds, the return value is nonzero.</para>
+		/// <para>If the function fails, the return value is zero. To get extended error information, call <c>GetLastError</c>.</para>
+		/// </returns>
+		// BOOL WINAPI ReadConsole( _In_ HANDLE hConsoleInput, _Out_ LPVOID lpBuffer, _In_ DWORD nNumberOfCharsToRead, _Out_ LPDWORD
+		// lpNumberOfCharsRead, _In_opt_ LPVOID pInputControl );
+		[DllImport(Lib.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
+		[PInvokeData("Wincon.h", MSDNShortId = "")]
+		[return: MarshalAs(UnmanagedType.Bool)]
+		public static extern bool ReadConsole(HFILE hConsoleInput, IntPtr lpBuffer, uint nNumberOfCharsToRead, out uint lpNumberOfCharsRead, IntPtr pInputControl = default);
+
+		/// Reads character input from the console input buffer and removes it from the buffer.
+		/// <param name="hConsoleInput">
+		/// A handle to the console input buffer. The handle must have the <c>GENERIC_READ</c> access right. For more information, see
+		/// Console Buffer Security and Access Rights.
+		/// </param>
+		/// <param name="lpBuffer">
+		/// <para>A pointer to a buffer that receives the data read from the console input buffer.</para>
+		/// <para>
+		/// The storage for this buffer is allocated from a shared heap for the process that is 64 KB in size. The maximum size of the buffer
+		/// will depend on heap usage.
+		/// </para>
+		/// </param>
+		/// <param name="nNumberOfCharsToRead">
+		/// The number of characters to be read. The size of the buffer pointed to by the lpBuffer parameter should be at least bytes.
+		/// </param>
+		/// <param name="lpNumberOfCharsRead">A pointer to a variable that receives the number of characters actually read.</param>
+		/// <param name="pInputControl">
+		/// <para>
+		/// A pointer to a <c>CONSOLE_READCONSOLE_CONTROL</c> structure that specifies a control character to signal the end of the read
+		/// operation. This parameter can be <c>NULL</c>.
+		/// </para>
+		/// <para>This parameter requires Unicode input by default. For ANSI mode, set this parameter to <c>NULL</c>.</para>
+		/// </param>
+		/// <returns>
+		/// <para>If the function succeeds, the return value is nonzero.</para>
+		/// <para>If the function fails, the return value is zero. To get extended error information, call <c>GetLastError</c>.</para>
+		/// </returns>
+		// BOOL WINAPI ReadConsole( _In_ HANDLE hConsoleInput, _Out_ LPVOID lpBuffer, _In_ DWORD nNumberOfCharsToRead, _Out_ LPDWORD
+		// lpNumberOfCharsRead, _In_opt_ LPVOID pInputControl );
+		[DllImport(Lib.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
+		[PInvokeData("Wincon.h", MSDNShortId = "")]
+		[return: MarshalAs(UnmanagedType.Bool)]
+		public static extern bool ReadConsole(HFILE hConsoleInput, IntPtr lpBuffer, uint nNumberOfCharsToRead, out uint lpNumberOfCharsRead, in CONSOLE_READCONSOLE_CONTROL pInputControl);

 		/// Reads data from a console input buffer and removes it from the buffer.
 		/// <param name="hConsoleInput">
@@ -1721,6 +1845,38 @@
 		[PInvokeData("Wincon.h", MSDNShortId = "")]
 		[return: MarshalAs(UnmanagedType.Bool)]
 		public static extern bool ReadConsoleOutputCharacter(HFILE hConsoleOutput, StringBuilder lpCharacter, uint nLength, COORD dwReadCoord, out uint lpNumberOfCharsRead);
+
+		/// Copies a number of characters from consecutive cells of a console screen buffer, beginning at a specified location.
+		/// <param name="hConsoleOutput">
+		/// A handle to the console screen buffer. The handle must have the <c>GENERIC_READ</c> access right. For more information, see
+		/// Console Buffer Security and Access Rights.
+		/// </param>
+		/// <param name="lpCharacter">
+		/// A pointer to a buffer that receives the characters read from the console screen buffer.
+		/// <para>
+		/// The storage for this buffer is allocated from a shared heap for the process that is 64 KB in size.The maximum size of the buffer
+		/// will depend on heap usage.
+		/// </para>
+		/// </param>
+		/// <param name="nLength">
+		/// The number of screen buffer character cells from which to read. The size of the buffer pointed to by the lpCharacter parameter
+		/// should be nLength * sizeof(TCHAR).
+		/// </param>
+		/// <param name="dwReadCoord">
+		/// The coordinates of the first cell in the console screen buffer from which to read, in characters. The X member of the COORD
+		/// structure is the column, and the Y member is the row.
+		/// </param>
+		/// <param name="lpNumberOfCharsRead">A pointer to a variable that receives the number of characters actually read.</param>
+		/// <returns>
+		/// <para>If the function succeeds, the return value is nonzero.</para>
+		/// <para>If the function fails, the return value is zero. To get extended error information, call <c>GetLastError</c>.</para>
+		/// </returns>
+		// BOOL WINAPI ReadConsoleOutputCharacter(_In_ HANDLE hConsoleOutput, _Out_ LPTSTR lpCharacter, _In_ DWORD nLength, _In_ COORD
+		// dwReadCoord, _Out_ LPDWORD lpNumberOfCharsRead);
+		[DllImport(Lib.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
+		[PInvokeData("Wincon.h", MSDNShortId = "")]
+		[return: MarshalAs(UnmanagedType.Bool)]
+		public static extern bool ReadConsoleOutputCharacter(HFILE hConsoleOutput, IntPtr lpCharacter, uint nLength, COORD dwReadCoord, out uint lpNumberOfCharsRead);

 		///
 		/// Moves a block of data in a screen buffer. The effects of the move can be limited by specifying a clipping rectangle, so the


closes #59

closes #59

--- TIKSN.Framework.Full/Progress/PowerShellProgress.cs
+++ TIKSN.Framework.Full/Progress/PowerShellProgress.cs
@@ -4,86 +4,70 @@

 namespace TIKSN.Progress
 {
-	public class PowerShellProgress : Progress<OperationProgressReport>
-	{
-		private static readonly object activityIdLocker = new object();
-		private static int nextActivityId = 0;
+    public class PowerShellProgress : Progress<OperationProgressReport>, IDisposable
+    {
+        private static readonly object activityIdLocker = new object();
+        private static int nextActivityId = 0;

-		private readonly Cmdlet cmdlet;
-		private readonly ProgressRecord progressRecord;
-		private Stopwatch stopwatch;
+        private readonly Cmdlet cmdlet;
+        private readonly ProgressRecord progressRecord;
+        private Stopwatch stopwatch;

-		public PowerShellProgress(Cmdlet cmdlet, string activity, string statusDescription)
-		{
-			this.cmdlet = cmdlet;
-			this.progressRecord = new ProgressRecord(GenerateNextActivityId(), activity, statusDescription);
-		}
+        public PowerShellProgress(Cmdlet cmdlet, string activity, string statusDescription)
+        {
+            this.cmdlet = cmdlet;
+            this.progressRecord = new ProgressRecord(GenerateNextActivityId(), activity, statusDescription);

-		public void BeginProgress()
-		{
-			stopwatch = Stopwatch.StartNew();
+            stopwatch = Stopwatch.StartNew();
+            progressRecord.RecordType = ProgressRecordType.Processing;
+            cmdlet.WriteProgress(progressRecord);
+        }

-			progressRecord.RecordType = ProgressRecordType.Processing;
+        public PowerShellProgress CreateChildProgress(string activity, string statusDescription)
+        {
+            var childProgress = new PowerShellProgress(cmdlet, activity, statusDescription);

-			cmdlet.WriteProgress(progressRecord);
-		}
+            childProgress.progressRecord.ParentActivityId = progressRecord.ActivityId;

-		public PowerShellProgress CreateChildProgress(string activity, string statusDescription)
-		{
-			var childProgress = new PowerShellProgress(cmdlet, activity, statusDescription);
+            return childProgress;
+        }

-			childProgress.progressRecord.ParentActivityId = progressRecord.ActivityId;
+        public void Dispose()
+        {
+            stopwatch.Stop();
+            progressRecord.RecordType = ProgressRecordType.Completed;
+            cmdlet.WriteProgress(progressRecord);
+        }

-			return childProgress;
-		}
+        protected override void OnReport(OperationProgressReport value)
+        {
+            progressRecord.RecordType = ProgressRecordType.Processing;
+            progressRecord.PercentComplete = (int)value.PercentComplete;

-		public void EndProgress()
-		{
-			stopwatch.Stop();
+            progressRecord.SecondsRemaining = (int)(stopwatch.Elapsed.TotalSeconds * (100d - value.PercentComplete) / value.PercentComplete);

-			progressRecord.RecordType = ProgressRecordType.Completed;
-			cmdlet.WriteProgress(progressRecord);
-		}
+            if (value.CurrentOperation != null)
+            {
+                progressRecord.CurrentOperation = value.CurrentOperation;
+            }

-		protected override void OnReport(OperationProgressReport value)
-		{
-			Start();
+            if (value.StatusDescription != null)
+            {
+                progressRecord.StatusDescription = value.StatusDescription;
+            }

-			progressRecord.RecordType = ProgressRecordType.Processing;
-			progressRecord.PercentComplete = (int)value.PercentComplete;
+            cmdlet.WriteProgress(progressRecord);
+            base.OnReport(value);
+        }

-			progressRecord.SecondsRemaining = (int)(stopwatch.Elapsed.TotalSeconds * (100d - value.PercentComplete) / value.PercentComplete);
+        private static int GenerateNextActivityId()
+        {
+            lock (activityIdLocker)
+            {
+                nextActivityId++;
+            }

-			if (value.CurrentOperation != null)
-			{
-				progressRecord.CurrentOperation = value.CurrentOperation;
-			}
-
-			if (value.StatusDescription != null)
-			{
-				progressRecord.StatusDescription = value.StatusDescription;
-			}
-
-			cmdlet.WriteProgress(progressRecord);
-			base.OnReport(value);
-		}
-
-		private static int GenerateNextActivityId()
-		{
-			lock (activityIdLocker)
-			{
-				nextActivityId++;
-			}
-
-			return nextActivityId;
-		}
-
-		private void Start()
-		{
-			if (stopwatch == null)
-			{
-				stopwatch = Stopwatch.StartNew();
-			}
-		}
-	}
+            return nextActivityId;
+        }
+    }
 }


cleanup

cleanup

--- Core.ApplicationServices/System/ItSystemService.cs
+++ Core.ApplicationServices/System/ItSystemService.cs
@@ -14,7 +14,6 @@
 using Core.DomainModel.Organization;
 using Core.DomainModel.References;
 using Core.DomainModel.Result;
-using Core.DomainServices;
 using Core.DomainServices.Authorization;
 using Core.DomainServices.Extensions;
 using Core.DomainServices.Model;


use div's instead of iframes and ajax to download content

--- RepoStats/HtmlTemplates.cs
+++ RepoStats/HtmlTemplates.cs
@@ -170,14 +170,6 @@

tool

             <svg width = '721' height='110' onload='init(evt)'>


Minor code flaw correction

Minor code flaw correction

git-svn-id: d0def854dd7af056e86ca9c2262ea22710193966@9 72444466-9f5c-4d9b-9c6f-db583910f96c

--- Cqrs/Framework/Cqrs.EventStore/ProjectionReader.cs
+++ Cqrs/Framework/Cqrs.EventStore/ProjectionReader.cs
@@ -27,10 +27,19 @@
 			}
 			var jsonSerialiserSettings = EventDeserialiser.GetSerialisationSettings();
 			var encoder = new UTF8Encoding();
-			return ((IEnumerable<dynamic>)eventCollection.Events
-				.Select(e => JsonConvert.DeserializeObject(((dynamic)encoder.GetString(e.Event.Data)), jsonSerialiserSettings))
-				.Single()
-				).Select(x => x.Value);
+			return
+			(
+				(
+					(IEnumerable<dynamic>)eventCollection.Events
+					.Select(e => JsonConvert.DeserializeObject(((dynamic)encoder.GetString(e.Event.Data)), jsonSerialiserSettings))
+					.SingleOrDefault()
+				)
+					??
+				(
+					Enumerable.Empty<dynamic>()
+				)
+			)
+			.Select(x => x.Value);
 		}

 		protected IEnumerable<TData> GetDataByStreamName<TData>(string streamName)


Crash running NUnit version 3 - there is no attribute called "name" in the root element.  Just check for null so we don't crash.

--- ReportUnit/Parser/NUnit.cs
+++ ReportUnit/Parser/NUnit.cs
@@ -32,7 +32,7 @@
             Report report = new Report();

             report.FileName = Path.GetFileNameWithoutExtension(resultsFile);
-            report.AssemblyName = doc.Root.Attribute("name").Value;
+            report.AssemblyName = doc.Root.Attribute( "name" ) != null ? doc.Root.Attribute("name").Value : null;
             report.TestRunner = TestRunner.NUnit;

             // run-info & environment values -> RunInfo


commented out broken code, TODOs in here

--- DLL_Project/Buildings/Building_AutomatedFactory.cs
+++ DLL_Project/Buildings/Building_AutomatedFactory.cs
@@ -240,7 +240,8 @@

         #region Tickers

-        private void                        ProductionTick( int ticks )
+        // TODO: see other todos
+        /*private void                        ProductionTick( int ticks )
         {
             if( !CompPowerTrader.PowerOn )
             {
@@ -296,7 +297,7 @@
             }
             currentThing = null;
             currentProductionTick = 0;
-        }
+        }*/

         // TODO: see other todos in hopper files
         /*private void                        RescanTick()
@@ -465,7 +466,8 @@

         #region Internal Interface

-        private Thing                       NextProductToProduce()
+        // TODO: see other todos
+        /*private Thing                       NextProductToProduce()
         {
             if( currentRecipe != null )
             {
@@ -507,7 +509,7 @@
             currentRecipe = recipe;
             currentProductionTick = (int) currentRecipe.workAmount;
             return TryProduceThingDef( currentRecipe.products[0].thingDef );
-        }
+        }*/

         private bool                        OutputThingTo( out Thing stackWith, out IntVec3 dropCell )
         {
@@ -653,7 +655,8 @@
             return false;
         }

-        private RecipeDef                   TryGetProductionReadyRecipeFor( ThingDef thingDef )
+        // TODO: see other todos
+        /*private RecipeDef                   TryGetProductionReadyRecipeFor( ThingDef thingDef )
         {
             Allowances allowance;
             if( productionAllowances.TryGetValue( thingDef, out allowance ) )
@@ -667,7 +670,7 @@
                 }
             }
             return (RecipeDef) null;
-        }
+        }*/

         #endregion

@@ -693,14 +696,15 @@
             return (int) recipe.workAmount;
         }

-        public bool                         CanDispenseNow( ThingDef thingDef )
+        // TODO: see other todos
+        /*public bool                         CanDispenseNow( ThingDef thingDef )
         {
             if( CompPowerTrader.PowerOn )
             {
                 return HasEnoughResourcesInHoppersFor( thingDef );
             }
             return false;
-        }
+        }*/

         public bool                         CanProduce( ThingDef thingDef )
         {
@@ -729,7 +733,8 @@
             return (Building) null;
         }

-        public bool                         HasEnoughResourcesInHoppersFor( ThingDef thingDef )
+        // TODO: see other todos
+        /*public bool                         HasEnoughResourcesInHoppersFor( ThingDef thingDef )
         {
             var recipe = FindRecipeForProduct( thingDef );
             if( recipe == null )
@@ -737,7 +742,7 @@
                 return false;
             }
             return CompHopperUser.EnoughResourcesInHoppers( recipe );
-        }
+        }*/

         public List<ThingDef>               AllProducts()
         {
@@ -762,7 +767,8 @@
             return products;
         }

-        public ThingDef                     BestProduct( Func<ThingDef,bool> where, Func<ThingDef,ThingDef,int> sort )
+        // TODO: see other todos
+        /*public ThingDef                     BestProduct( Func<ThingDef,bool> where, Func<ThingDef,ThingDef,int> sort )
         {
             var thingDefs = AllProducts().Where( where.Invoke ).ToList();
             thingDefs.Sort( sort.Invoke );
@@ -776,9 +782,10 @@
                 }
             }
             return (ThingDef) null;
-        }
-
-        public Thing                        TryProduceThingDef( ThingDef thingDef )
+        }*/
+
+        // TODO: see other todos
+        /*public Thing                        TryProduceThingDef( ThingDef thingDef )
         {
             var recipe = FindRecipeForProduct( thingDef );
             if( recipe == null )
@@ -804,7 +811,7 @@
                 }
             }
             return thing;
-        }
+        }*/

         #endregion


iOSでMetalでエラーが出るようにした Updateの時間にTime.deltaTimeを考慮するように

--- Dev/Cpp/UnityPlugin/UnityScript/EffekseerSystem.cs
+++ Dev/Cpp/UnityPlugin/UnityScript/EffekseerSystem.cs
@@ -177,7 +177,15 @@
 	}

 	void Awake() {
+#if UNITY_IOS
+		if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal) {
+			Debug.LogError("[Effekseer] Metal is not supported.");
+		}
+#endif
+		// Effekseerライブラリの初期化
 		Plugin.EffekseerInit(effectInstances, maxSquares);
+
+		// サウンドインスタンスを作る
 		for (int i = 0; i < soundInstances; i++) {
 			GameObject go = new GameObject();
 			go.name = "Sound Instance";
@@ -191,6 +199,7 @@
 			Plugin.EffekseerReleaseEffect(pair.Value);
 		}
 		effectList = null;
+		// Effekseerライブラリの終了処理
 		Plugin.EffekseerTerm();
 	}

@@ -259,7 +268,7 @@

 	void LateUpdate() {
 		// 1フレーム更新
-		Plugin.EffekseerUpdate(1);
+		Plugin.EffekseerUpdate(Time.deltaTime * 60.0f);
 	}

 	void OnPreCullEvent(Camera camera) {


Add tests

Add tests

--- Test/ReactiveProperty.Tests/ReactivePropertyTest.cs
+++ Test/ReactiveProperty.Tests/ReactivePropertyTest.cs
@@ -1,62 +1,99 @@
-using Reactive.Bindings;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Reactive;
-using System.Reactive.Linq;
-using System.Threading.Tasks;
-
-namespace ReactiveProperty.Tests
-{
-    [TestClass]
-    public class ReactivePropertyTest
-    {
-        [TestMethod]
-        public void ObserveErrors()
-        {
-            var rp = new ReactiveProperty<string>()
-                .SetValidateNotifyError(x => x == null ? "Error" : null);
-            var results = new List<IEnumerable>();
-
-            rp.ObserveErrorChanged.Subscribe(x => results.Add(x));
-            rp.Value = "OK";
-
-            results.Count.Is(2);
-            results[0].OfType<string>().Is("Error");
-            results[1].IsNull();
-        }
-
-        [TestMethod]
-        public void ObserveHasError()
-        {
-            var rp = new ReactiveProperty<string>()
-                .SetValidateNotifyError(x => x == null ? "Error" : null);
-            var results = new List<bool>();
-
-            rp.ObserveHasErrors.Subscribe(x => results.Add(x));
-            rp.Value = "OK";
-
-            results.Count.Is(2);
-            results[0].IsTrue();
-            results[1].IsFalse();
-        }
-
-        [TestMethod]
-        public void ObserveHasNoError()
-        {
-            var rp = new ReactiveProperty<string>()
-                .SetValidateNotifyError(x => x == null ? "Error" : null);
-            var results = new List<bool>();
-
-            rp.ObserveHasErrors.Select(x => !x).Subscribe(x => results.Add(x));
-            rp.Value = "OK";
-
-            results.Count.Is(2);
-            results[0].IsFalse();
-            results[1].IsTrue();
-        }
-    }
-}
+using Reactive.Bindings;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Reactive;
+using System.Reactive.Linq;
+using System.Threading.Tasks;
+
+namespace ReactiveProperty.Tests
+{
+    [TestClass]
+    public class ReactivePropertyTest
+    {
+        [TestMethod]
+        public void NormalCase()
+        {
+            var rp = new ReactiveProperty<string>();
+            rp.Value.IsNull();
+            rp.Subscribe(x => x.IsNull());
+        }
+
+        [TestMethod]
+        public void InitialValue()
+        {
+            var rp = new ReactiveProperty<string>("Hello world");
+            rp.Value.Is("Hello world");
+            rp.Subscribe(x => x.Is("Hello world"));
+        }
+
+        [TestMethod]
+        public void NoRaiseLatestValueOnSubscribe()
+        {
+            var rp = new ReactiveProperty<string>(mode: ReactivePropertyMode.DistinctUntilChanged);
+            var called = false;
+            rp.Subscribe(_ => called = true);
+            called.Is(false);
+        }
+
+        [TestMethod]
+        public void NoDistinctUntilChanged()
+        {
+            var rp = new ReactiveProperty<string>(mode: ReactivePropertyMode.RaiseLatestValueOnSubscribe);
+            var list = new List<string>();
+            rp.Subscribe(list.Add);
+            rp.Value = "Hello world";
+            rp.Value = "Hello world";
+            rp.Value = "Hello japan";
+            list.Is(null, "Hello world", "Hello world", "Hello japan");
+        }
+
+        [TestMethod]
+        public void ObserveErrors()
+        {
+            var rp = new ReactiveProperty<string>()
+                .SetValidateNotifyError(x => x == null ? "Error" : null);
+            var results = new List<IEnumerable>();
+
+            rp.ObserveErrorChanged.Subscribe(x => results.Add(x));
+            rp.Value = "OK";
+
+            results.Count.Is(2);
+            results[0].OfType<string>().Is("Error");
+            results[1].IsNull();
+        }
+
+        [TestMethod]
+        public void ObserveHasError()
+        {
+            var rp = new ReactiveProperty<string>()
+                .SetValidateNotifyError(x => x == null ? "Error" : null);
+            var results = new List<bool>();
+
+            rp.ObserveHasErrors.Subscribe(x => results.Add(x));
+            rp.Value = "OK";
+
+            results.Count.Is(2);
+            results[0].IsTrue();
+            results[1].IsFalse();
+        }
+
+        [TestMethod]
+        public void ObserveHasNoError()
+        {
+            var rp = new ReactiveProperty<string>()
+                .SetValidateNotifyError(x => x == null ? "Error" : null);
+            var results = new List<bool>();
+
+            rp.ObserveHasErrors.Select(x => !x).Subscribe(x => results.Add(x));
+            rp.Value = "OK";
+
+            results.Count.Is(2);
+            results[0].IsFalse();
+            results[1].IsTrue();
+        }
+    }
+}


added todos for text methods on ios

added todos for text methods on ios

--- Platforms/Ios/IosScreen.cs
+++ Platforms/Ios/IosScreen.cs
@@ -38,6 +38,34 @@
             return this;
         }

+        //TODO: needs to be tested with ios step in joyride.specflow
+        public virtual bool HasLabelInCollection(string collectionName, string label, CompareType compareType)
+        {
+            var xpath = "//*";
+            switch (compareType)
+            {
+                case CompareType.StartsWith:
+                    xpath += "[starts-with(@label, '" + label + "')]";
+                    break;
+
+                case CompareType.Containing:
+                    xpath += "[contains(@label, '" + label + "')]";
+                    break;
+
+                case CompareType.Equals:
+                    xpath += "[@label='" + label + "')]";
+                    break;
+
+                default:
+                    throw new NotImplementedException("Other text compares are not implemented");
+            }
+            var element = FindElementWithinCollection(collectionName, xpath);
+            return (element != null);
+        }
+
+
+        //TODO: would like to rewrite using text compare
+        [Obsolete]
         public bool HasLabelContainingText(string labelText, int timeoutSecs = DefaultWaitSeconds)
         {
             var xpath = "//UIAStaticText[contains(@label,'" + labelText + "')]";
@@ -45,6 +73,8 @@
             return (element != null);
         }

+        //TODO: would like to write this using the collection abilities
+        [Obsolete]
         public virtual bool HasLabelContainingText(string collectionName, int index, string labelText, int timeoutSecs = DefaultWaitSeconds)
         {
             var element = GetElementInCollection(collectionName, index);


Update TabControl template in test.

Update TabControl template in test.

Tests still failing but no longer because the Deck couldn't be found.

--- Tests/Perspex.Controls.UnitTests/TabControlTests.cs
+++ Tests/Perspex.Controls.UnitTests/TabControlTests.cs
@@ -152,10 +152,11 @@
                         [~TabStrip.ItemsProperty] = parent[~TabControl.ItemsProperty],
                         [~~TabStrip.SelectedTabProperty] = parent[~~TabControl.SelectedTabProperty]
                     },
-                    new ContentPresenter
+                    new Deck
                     {
-                        Id = "contentPresenter",
-                        [~ContentPresenter.ContentProperty] = parent[~TabControl.SelectedContentProperty],
+                        Id = "deck",
+                        [~Deck.ItemsProperty] = parent[~TabControl.ItemsProperty],
+                        [!Deck.SelectedItemProperty] = parent[!TabControl.SelectedItemProperty],
                     }
                 }
             };


Remove license header

Remove license header

--- UnitTestUsefullFunctions/UnitTestFunctionsString.cs
+++ UnitTestUsefullFunctions/UnitTestFunctionsString.cs
@@ -1,23 +1,3 @@
-/*
-The MIT License(MIT)
-Copyright(c) 2015 Freddy Juhel
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
 using System;
 using System.Collections.Generic;
 using System.Globalization;
@@ -10840,4 +10820,4 @@
     }
     #endregion HelperUsefulFunctions
   }
-}+}


git-svn-id: 21cdf44b51306c1f0753fc51e774ecf5fc1851ba@1115 a61f9e97-bd4c-0410-8c65-85b29eaa70ff

--- Dorian/Examples/Gorgon.Graphics/Boinger/Program.cs
+++ Dorian/Examples/Gorgon.Graphics/Boinger/Program.cs
@@ -264,6 +264,7 @@
 				"FPS: " + GorgonTiming.AverageFPS.ToString("0.0")
 				+ "\nDelta: " + (GorgonTiming.AverageDelta * 1000.0f).ToString("0.0##") + " milliseconds",
 				new Vector2(3.0f, 0.0f), GorgonColor.White);
+			// Draw our logo because I'm insecure.
 			_2D.Drawing.Blit(_graphics.Textures.GorgonLogo,
 					new RectangleF(
 						_mainForm.ClientSize.Width - _graphics.Textures.GorgonLogo.Settings.Width,


Update version

Update version

--- InfluxDB.WriteOnly/Properties/AssemblyInfo.cs
+++ InfluxDB.WriteOnly/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.2.1.*")]
-[assembly: AssemblyFileVersion("1.2.1")]
+[assembly: AssemblyVersion("1.2.3.*")]
+[assembly: AssemblyFileVersion("1.2.3")]


Marked the assembly as CLS compliant

Marked the assembly as CLS compliant

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -10,7 +10,7 @@
 #endif

 /* These assembly attributes will be the same regardless of the product. */
-[assembly: CLSCompliant(false)]
+[assembly: CLSCompliant(true)]
 [assembly: ComVisible(false)]
 [assembly: AssemblyCompany("GeoFrameworks, LLC")]
 [assembly: AssemblyCopyright("This source code has been released to the public domain.")]


Support reading .glb files in Models/

Support reading .glb files in Models/

A change from TB

Change-Id: Id000b01590f5d0a2edbb64bbb68a5d30a6c83ede

--- UnitySDK/Assets/TiltBrush/Scripts/Gltf/GlbParser.cs
+++ UnitySDK/Assets/TiltBrush/Scripts/Gltf/GlbParser.cs
@@ -136,6 +136,16 @@
       }
     }
   }
+
+  // Returns null if this doesn't look like a glb
+  public static uint? GetGlbVersion(string glbPath) {
+    using (BinaryReader reader = new BinaryReader(File.OpenRead(glbPath))) {
+      if (reader.ReadUInt32() != kFourCC_glTF) {
+        return null;
+      }
+      return reader.ReadUInt32();
+    }
+  }
 }

 }


Auto-create folders when restoring files

--- Duplicati/Library/Main/Operation/RestoreHandler.cs
+++ Duplicati/Library/Main/Operation/RestoreHandler.cs
@@ -175,19 +175,26 @@
             }
         }

-        private static void PatchWithBlocklist (LocalRestoreDatabase database, BlockVolumeReader blocks, Options options, RestoreResults stat, byte[] blockbuffer)
+        private static void PatchWithBlocklist (LocalRestoreDatabase database, BlockVolumeReader blocks, Options options, RestoreResults result, byte[] blockbuffer)
         {
             foreach (var restorelist in database.GetFilesWithMissingBlocks(blocks))
             {
                 var targetpath = restorelist.Path;
                 if (options.Dryrun)
                 {
-                	stat.AddDryrunMessage(string.Format("[Would patch file with remote data: {0}", targetpath));
+                	result.AddDryrunMessage(string.Format("[Would patch file with remote data: {0}", targetpath));
                 }
                 else
                 {
 	                try
-	                {
+	                {
+                        var folderpath = System.IO.Path.GetDirectoryName(targetpath);
+                        if (!options.Dryrun && !System.IO.Directory.Exists(folderpath))
+                        {
+                            result.AddWarning(string.Format("Creating missing folder {0} for  file {1}", folderpath, targetpath), null);
+                            System.IO.Directory.CreateDirectory(folderpath);
+                        }
+
 	                	// TODO: Much faster if we iterate the volume and checks what blocks are used,
 	                	// because the compressors usually like sequential reading
 	                    using (var file = System.IO.File.Open(targetpath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None))
@@ -201,7 +208,7 @@
 	                }
 	                catch (Exception ex)
 	                {
-	                    stat.AddWarning(string.Format("Failed to patch file: \"{0}\", message: {1}, message: {1}", targetpath, ex.Message), ex);
+	                    result.AddWarning(string.Format("Failed to patch file: \"{0}\", message: {1}, message: {1}", targetpath, ex.Message), ex);
 	                }

 	                try
@@ -210,7 +217,7 @@
 	                }
 	                catch (Exception ex)
 	                {
-	                    stat.AddWarning(string.Format("Failed to apply metadata to file: \"{0}\", message: {1}", targetpath, ex.Message), ex);
+	                    result.AddWarning(string.Format("Failed to apply metadata to file: \"{0}\", message: {1}", targetpath, ex.Message), ex);
 	                }
                 }
             }


Bumped up the version

Bumped up the version

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyInformationalVersion("1.7.0")]
-[assembly: AssemblyVersion("1.7.0.*")]
+[assembly: AssemblyInformationalVersion("1.7.1")]
+[assembly: AssemblyVersion("1.7.1.*")]


Fixed jerkiness of grid splitter and removed unnecessary code.

--- Utilities.Controls/Behaviors/GridSplitterSupport.cs
+++ Utilities.Controls/Behaviors/GridSplitterSupport.cs
@@ -100,15 +100,6 @@
 					.Cast<UIElement>()
 					.OfType<GridSplitter>()
 					.FirstOrDefault();
-				if (_gridSplitter != null)
-				{
-					_gridSplitter.PreviewMouseDown += _gridSplitter_PreviewMouseDown;
-				}
-			}
-
-			void _gridSplitter_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
-			{
-				_expanderColumn.Width = GridLength.Auto;
 			}

 			void element_SizeChanged(object sender, SizeChangedEventArgs e)
@@ -127,10 +118,6 @@
 					else
 						_newWidth = _expanderColumn.Width;
 				}
-
-				//Console.WriteLine("Element: " + _element.Width);
-				//Console.WriteLine("Expander: " + _expander.Width);
-				//Console.WriteLine("Expander Column: " + _expanderColumn.Width);
 			}

 			void expander_Collapsed(object sender, RoutedEventArgs e)
@@ -162,11 +149,6 @@
 				_expander.Collapsed -= expander_Collapsed;

 				_element.SizeChanged -= element_SizeChanged;
-
-				if (_gridSplitter != null)
-				{
-					_gridSplitter.PreviewMouseDown -= _gridSplitter_PreviewMouseDown;
-				}
 			}

 			#endregion


Bump version to 0.3.6

Bump version to 0.3.6

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -24,5 +24,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.3.5.0")]
-[assembly: AssemblyFileVersion("0.3.5.0")]
+[assembly: AssemblyVersion("0.3.6.0")]
+[assembly: AssemblyFileVersion("0.3.6.0")]


Fix log reader bug

Fix log reader bug

--- VSPerformanceTracker/FSInterface/TailReadingFile.cs
+++ VSPerformanceTracker/FSInterface/TailReadingFile.cs
@@ -1,6 +1,7 @@
 using System.Collections.Generic;
 using System.IO;
 using System.Text;
+using System.Reflection;

 namespace VSPerformanceTracker.FSInterface
 {
@@ -68,15 +69,42 @@
             private string ReadLine(StreamReader reader)
             {
                 var line = reader.ReadLine();
-                _factory.LastOffset = _fs.Position;
+                _factory.LastOffset = reader.GetPosition(); //FIXME: write PositionStreamReader class and use that
                 return line;
             }

             public void Dispose()
             {
-                _factory.LastOffset = _fs.Position;
                 _fs.Dispose();
             }
         }
     }
+
+    public static class StreamReaderExtensions
+    {
+        // GetPosition based on code written by Granger Godbold [1].
+        // [1] http://stackoverflow.com/a/17457085/27581
+        public static long GetPosition(this StreamReader reader)
+        {
+            // The current buffer of decoded characters
+            var charBuffer = (char[])GetNonPublicField(reader, "charBuffer");
+
+            // The current position in the buffer of decoded characters
+            var charPos = (int)GetNonPublicField(reader, "charPos");
+
+            // The number of bytes that the already-read characters need when encoded.
+            var numReadBytes = reader.CurrentEncoding.GetByteCount(charBuffer, 0, charPos);
+
+            // The number of encoded bytes that are in the current buffer
+            var byteLen = (int)GetNonPublicField(reader, "byteLen");
+
+            return reader.BaseStream.Position - byteLen + numReadBytes;
+        }
+
+        private static object GetNonPublicField(object target, string fieldName)
+        {
+            const BindingFlags flags = BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField;
+            return target.GetType().InvokeMember(fieldName, flags, null, target, null);
+        }
+    }
 }


Removed unused assembly GUID.

Removed unused assembly GUID.

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -19,7 +19,7 @@
 [assembly: AssemblyCulture( "" )]

 [assembly: ComVisible( false )]
-[assembly: Guid( "d72e6229-6967-42c0-ab8b-5c89fbb22c07" )]
+//[assembly: Guid( "d72e6229-6967-42c0-ab8b-5c89fbb22c07" )]

 [assembly: AssemblyVersion( "1.3.0.0" )]
 [assembly: AssemblyFileVersion( "1.3.0.0" )]


Version 1.2

Version 1.2

--- Properties/AssemblyInfo.cs
+++ Properties/AssemblyInfo.cs
@@ -25,4 +25,4 @@
 //
 // You can specify all the values or you can use the default the Revision and
 // Build Numbers by using the '*' as shown below:
-[assembly: AssemblyVersion ("1.0.*")]
+[assembly: AssemblyVersion ("1.2.*")]


Log which roaming network or EMP authorized a charging session

--- WWCP_Core/Entities/RoamingNetwork/RoamingNetwork.cs
+++ WWCP_Core/Entities/RoamingNetwork/RoamingNetwork.cs
@@ -29,6 +29,7 @@
 using org.GraphDefined.Vanaheimr.Illias.Votes;
 using org.GraphDefined.Vanaheimr.Styx.Arrows;
 using org.GraphDefined.Vanaheimr.Hermod;
+using System.IO;

 #endregion

@@ -56,6 +57,9 @@
                                   IRoamingNetwork,
                                   IEnumerable<IEntity>
     {
+
+        private static readonly SemaphoreSlim  SessionLogSemaphore  = new SemaphoreSlim(1, 1);
+        private const           String         SessionLogFileName   = "Sessions.log";

         #region Data

@@ -5559,19 +5563,49 @@
                     // Store the upstream session id in order to contact the right authenticator at later requests!
                     // Will be deleted when the charge detail record was sent!

-                    //var NewChargingSession = new ChargingSession(result.SessionId.Value) {
-                    //                             AuthorizatorId   = result.AuthorizatorId,
-                    //                             AuthService      = result.ISendAuthorizeStartStop,
-                    //                             OperatorId       = OperatorId,
-                    //                             EVSEId           = EVSEId,
-                    //                             AuthTokenStart   = AuthIdentification?.AuthToken,
-                    //                             ChargingProduct  = ChargingProduct
-                    //                         };
+                    var NewChargingSession = new ChargingSession(result.SessionId.Value) {
+                                                 AuthorizatorId   = result.AuthorizatorId,
+                                                 AuthService      = result.ISendAuthorizeStartStop,
+                                                 OperatorId       = OperatorId,
+                                                 EVSEId           = EVSEId,
+                                                 AuthTokenStart   = AuthIdentification?.AuthToken,
+                                                 ChargingProduct  = ChargingProduct
+                                             };

                     //if (_ChargingSessions.TryAdd(NewChargingSession.Id, NewChargingSession))
                     //    RegisterExternalChargingSession(DateTime.UtcNow,
                     //                                    this,
                     //                                    NewChargingSession);
+
+
+                    var success = await SessionLogSemaphore.WaitAsync(TimeSpan.FromSeconds(5));
+
+                    if (success)
+                    {
+                        try
+                        {
+
+                            var LogLine = String.Concat(OperatorId,                     ",",
+                                                        EVSEId,                         ",",
+                                                        ChargingProduct,                ",",
+                                                        AuthIdentification?.AuthToken,  ",",
+                                                        result.AuthorizatorId,          ",",
+                                                        result.ProviderId,              ",",
+                                                        result.SessionId);
+
+                            File.AppendAllText(SessionLogFileName,
+                                               LogLine + Environment.NewLine);
+
+                        }
+                        catch (Exception e)
+                        {
+                            Console.WriteLine(e.Message);
+                        }
+                        finally
+                        {
+                            SessionLogSemaphore.Release();
+                        }
+                    }

                 }


Implements #11 Access to box

Implements #11 Access to box

--- KeeAnywhere/StorageProviders/Box/BoxHelper.cs
+++ KeeAnywhere/StorageProviders/Box/BoxHelper.cs
@@ -32,7 +32,7 @@
         internal const string BoxClientSecret = "dummy";

-        internal const string RedirectUri = "http://localhost/oauth";
+        internal const string RedirectUri = "https://localhost/oauth";
         internal const int Limit = 500;

         internal static BoxConfig Config;


BUGFIX: Don't use ActiveSolutionProjects

It is only currently selected projects

--- KillWpfDesigner/KillDesignerCommandPackage.cs
+++ KillWpfDesigner/KillDesignerCommandPackage.cs
@@ -6,7 +6,9 @@
     using System.IO;
     using System.Runtime.InteropServices;
     using System.Threading;
+
     using EnvDTE;
+
     using Microsoft.VisualStudio.Shell;

     /// <summary>
@@ -68,16 +70,14 @@

         private static void CleanBinAndObj(DTE dte)
         {
-            if (dte.ActiveSolutionProjects is Array projects)
+            foreach (var o in dte.Solution.Projects)
             {
-                foreach (var o in projects)
+                if (o is Project { FileName: { } fileName } &&
+                    fileName != string.Empty &&
+                    Path.GetDirectoryName(fileName) is { } projectDir)
                 {
-                    if (o is Project project &&
-                        Path.GetDirectoryName(project.FullName) is string projectDir)
-                    {
-                        DeleteRecursively(Path.Combine(projectDir, "bin"));
-                        DeleteRecursively(Path.Combine(projectDir, "obj"));
-                    }
+                    DeleteRecursively(Path.Combine(projectDir, "bin"));
+                    DeleteRecursively(Path.Combine(projectDir, "obj"));
                 }
             }
         }


Failure test of AtomPairs2DFingerprinterTest.

--- NCDKTests/Fingerprints/AtomPairs2DFingerprintTest.cs
+++ NCDKTests/Fingerprints/AtomPairs2DFingerprintTest.cs
@@ -37,6 +37,14 @@
             Assert.AreEqual(true, bsfp[546]);    //Distance 8
             Assert.AreEqual(true, bsfp[624]);    //Distance 9
             Assert.AreEqual(false, bsfp[702]);    //Distance 10
+        }
+
+        [TestMethod()]
+        public void TestChlorobenzene()
+        {
+            var printer = new AtomPairs2DFingerprinter();
+            var mol1 = parser.ParseSmiles("Clc1ccccc1");
+            var bsfp = (BitSetFingerprint)printer.GetBitFingerprint(mol1);
         }

         [TestMethod()]


pfft, nitpick

pfft, nitpick

--- NadekoBot/Modules/CustomReactions/CustomReactions.cs
+++ NadekoBot/Modules/CustomReactions/CustomReactions.cs
@@ -21,7 +21,7 @@
         {
             commandFuncs = new Dictionary<Regex, Func<CommandEventArgs, Match, string>>
                  {
-                    {new Regex(@"%rng:?(\d{0,9})-?(\d{0,9})%"), (e,m) => {
+                    {new Regex(@"%rng(?:%|:(\d{0,9})-(\d{0,9})%)"), (e,m) => {
                         int start, end;
                         if (int.TryParse(m.Groups[1].Value, out start) && int.TryParse(m.Groups[2].Value, out end)) {
                             return rng.Next(start, end).ToString();


Ensure Diff.Compare() cannot apply on a bare repository

--- LibGit2Sharp.Tests/DiffTreeToTargetFixture.cs
+++ LibGit2Sharp.Tests/DiffTreeToTargetFixture.cs
@@ -321,5 +321,19 @@
                 Assert.Equal(expected.ToString(), changes.Patch);
             }
         }
+
+        [Fact]
+        public void ComparingATreeInABareRepositoryAgainstTheWorkDirOrTheIndexThrows()
+        {
+            using (var repo = new Repository(BareTestRepoPath))
+            {
+                Assert.Throws<BareRepositoryException>(
+                    () => repo.Diff.Compare(repo.Head.Tip.Tree, DiffTargets.WorkingDirectory));
+                Assert.Throws<BareRepositoryException>(
+                    () => repo.Diff.Compare(repo.Head.Tip.Tree, DiffTargets.Index));
+                Assert.Throws<BareRepositoryException>(
+                    () => repo.Diff.Compare(repo.Head.Tip.Tree, DiffTargets.WorkingDirectory | DiffTargets.Index));
+            }
+        }
     }
 }


Adds Question Mark wildcard and fixes MirrorDownFromHashList from ignoring the Excludes list.

--- Figlotech.Core/FileAccessAbstractions/SmartCopy.cs
+++ Figlotech.Core/FileAccessAbstractions/SmartCopy.cs
@@ -42,9 +42,11 @@
         private string WildcardToRegex(String input) {
             input.Replace("*", "////WCASTER////");
             input.Replace("%", "////WCPCT////");
+            input.Replace("?", "////WCQUEST////");
             var escaped = Regex.Escape(input);
             escaped.Replace("////WCASTER////", "[.]{0,}");
             escaped.Replace("////WCPCT////", "[.]{0,1}");
+            input.Replace("////WCPCT////", "[.]{1}");
             return escaped;
         }

@@ -309,9 +311,14 @@
             var bufferSize = (int)options.BufferSize / options.NumWorkers;
             if (bufferSize < 0) bufferSize = 256 * 1024;
             List<FileData> workingList = HashList.Where(f => f.RelativePath.StartsWith(path)).ToList();
+            workingList = workingList.GroupBy(f => f.RelativePath).Select(g => g.First()).ToList();
+            workingList.RemoveAll(f => Excludes.Any(excl=> CheckMatch(f.RelativePath, excl)));
             OnReportTotalFilesCount?.Invoke(workingList.Count);
             foreach (var a in HashList) {
                 wq.Enqueue(() => {
+                    if (a.RelativePath == HASHLIST_FILENAME || Excludes.Any(excl => CheckMatch(a.RelativePath, excl))) {
+                        return;
+                    }
                     string hash = "";
                     if (local.Exists(a.RelativePath)) {
                         local.Read(a.RelativePath, (stream) => {
@@ -341,12 +348,16 @@
                                     local.Rename(a.RelativePath, oldTempName);
                                 }
                                 local.Rename(a.RelativePath + "_$ft_new", a.RelativePath);
+                                if (local.Exists(a.RelativePath)) {
+                                    local.Read(a.RelativePath, (stream) => {
+                                        hash = GetHash(stream);
+                                    });
+                                }
                                 try {
-                                    if(local.Exists(a.RelativePath + "_$ft_old"))
-                                        local.Delete(a.RelativePath + "_$ft_old");
+                                    if(local.Exists(oldTempName))
+                                        local.Delete(oldTempName);
                                 } catch(Exception x) {
-                                    // Deletes the file if in use, else just hide it
-                                    local.Hide(a.RelativePath + "_$ft_old");
+                                    local.Hide(oldTempName);
                                 }
                                 if (a.RelativePath.EndsWith(".dll")) {

@@ -390,6 +401,7 @@
             try {
                 var txt = destination.ReadAllText(HASHLIST_FILENAME);
                 var hashList = JsonConvert.DeserializeObject<List<FileData>>(txt);
+                hashList = hashList.GroupBy(a => a.RelativePath).Select(a => a.First()).ToList();
                 return hashList;
             } catch (Exception x) {
                 throw x;


Change method name.

Change method name.

--- XamarinLifeGameXAML/ViewModels/LifeGameViewModel.cs
+++ XamarinLifeGameXAML/ViewModels/LifeGameViewModel.cs
@@ -15,19 +15,19 @@
         public LifeGameViewModel()
         {
             StartCommand = new DelegateCommand<string>(
-                    async T => await ControlGame(T),
+                    async T => await ControlGameAsync(T),
                     T => CanStart
             )
             .ObservesProperty(() => CanStart);

             StopCommand = new DelegateCommand<string>(
-                    async T => await ControlGame(T),
+                    async T => await ControlGameAsync(T),
                     T => CanStop
                 )
                 .ObservesProperty(() => CanStop);

             CellClick = new DelegateCommand<int?>(
-                    async T => await CellClicked(T),
+                    async T => await CellClickedAsync(T),
                     T => CanCellClick)
                 .ObservesProperty(() => CanCellClick);

@@ -101,20 +101,20 @@
             }
         }

-        public async Task CellClicked(int? parameter)
+        public async Task CellClickedAsync(int? parameter)
         {
             if (parameter.HasValue)
             {
                 var index = parameter.Value;
                 Cells[index].ChangeState();
-                Debug.WriteLine("CellClicked [" + parameter + "], IsLive[" + Cells[index].IsLive + "]");
+                Debug.WriteLine("CellClickedAsync [" + parameter + "], IsLive[" + Cells[index].IsLive + "]");
             }
         }

         // START/STOPボタンから実行されるメソッド。
-        private async Task ControlGame(string buttonType)
-        {
-            Debug.WriteLine("Call ControlGame : " + buttonType);
+        private async Task ControlGameAsync(string buttonType)
+        {
+            Debug.WriteLine("Call ControlGameAsync : " + buttonType);

             // TODO:
             if (buttonType.Equals("start"))


optional subpixel movement for TiledMapMover

--- Nez.Portable/ECS/Components/Physics/TiledMapMover.cs
+++ Nez.Portable/ECS/Components/Physics/TiledMapMover.cs
@@ -125,9 +125,14 @@
 		/// </summary>
 		Rectangle _boxColliderBounds;

-
-		public TiledMapMover( TiledTileLayer collisionLayer )
-		{
+		bool _handleSubpixelMovement;
+		SubpixelVector2 _subpixelV2 = new SubpixelVector2();
+
+
+		public TiledMapMover( TiledTileLayer collisionLayer, bool handleSubpixelMovement = false )
+		{
+			_handleSubpixelMovement = handleSubpixelMovement;
+
 			this.collisionLayer = collisionLayer;
 			tiledMap = collisionLayer.tiledMap;
 			Assert.isNotNull( collisionLayer, nameof( collisionLayer ) + " is required" );
@@ -145,6 +150,8 @@
 			testCollisions( ref motion, boxCollider.bounds, collisionState );

 			boxCollider.unregisterColliderWithPhysicsSystem();
+			if( _handleSubpixelMovement )
+				_subpixelV2.update( ref motion );
 			boxCollider.entity.transform.position += motion;
 			boxCollider.registerColliderWithPhysicsSystem();
 		}


Fixed delete packages.

Fixed delete packages.

--- FlubuCore.WebApi/Controllers/PackagesController.cs
+++ FlubuCore.WebApi/Controllers/PackagesController.cs
@@ -74,17 +74,8 @@
         public IActionResult CleanPackagesDirectory()
         {
             var uploads = Path.Combine(_hostingEnvironment.ContentRootPath, "packages");
-            var di = new DirectoryInfo(uploads);
-
-            foreach (FileInfo file in di.GetFiles())
-            {
-                file.Delete();
-            }
-
-            foreach (DirectoryInfo dir in di.GetDirectories())
-            {
-                dir.Delete(true);
-            }
+            Directory.Delete(uploads, true);
+            Directory.CreateDirectory(uploads);

             return Ok();
         }


* Move a few of the ProcessInPacket switch case blocks into packet handler delegates

--- OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -350,7 +350,7 @@

         protected IAssetService m_assetService;
         private IHyperAssetService m_hyperAssets;
-
+        private const bool m_checkPackets = true;

         #endregion Class Members

@@ -4297,6 +4297,11 @@
             AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest);
             AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest);
             AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage);
+            AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest);
+            AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
+            AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate);
+            AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
+            AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
         }

         #region Packet Handlers
@@ -4512,6 +4517,98 @@
             return true;
         }

+        private bool HandleAvatarPropertiesRequest(IClientAPI sender, Packet Pack)
+        {
+            AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack;
+
+            #region Packet Session and User Check
+            if (m_checkPackets)
+            {
+                if (avatarProperties.AgentData.SessionID != SessionId ||
+                    avatarProperties.AgentData.AgentID != AgentId)
+                    return true;
+            }
+            #endregion
+
+            RequestAvatarProperties handlerRequestAvatarProperties = OnRequestAvatarProperties;
+            if (handlerRequestAvatarProperties != null)
+            {
+                handlerRequestAvatarProperties(this, avatarProperties.AgentData.AvatarID);
+            }
+            return true;
+        }
+
+        private bool HandleChatFromViewer(IClientAPI sender, Packet Pack)
+        {
+            ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack;
+
+            #region Packet Session and User Check
+            if (m_checkPackets)
+            {
+                if (inchatpack.AgentData.SessionID != SessionId ||
+                    inchatpack.AgentData.AgentID != AgentId)
+                    return true;
+            }
+            #endregion
+
+            string fromName = String.Empty; //ClientAvatar.firstname + " " + ClientAvatar.lastname;
+            byte[] message = inchatpack.ChatData.Message;
+            byte type = inchatpack.ChatData.Type;
+            Vector3 fromPos = new Vector3(); // ClientAvatar.Pos;
+            // UUID fromAgentID = AgentId;
+
+            int channel = inchatpack.ChatData.Channel;
+
+            if (OnChatFromClient != null)
+            {
+                OSChatMessage args = new OSChatMessage();
+                args.Channel = channel;
+                args.From = fromName;
+                args.Message = Utils.BytesToString(message);
+                args.Type = (ChatTypeEnum)type;
+                args.Position = fromPos;
+
+                args.Scene = Scene;
+                args.Sender = this;
+                args.SenderUUID = this.AgentId;
+
+                ChatMessage handlerChatFromClient = OnChatFromClient;
+                if (handlerChatFromClient != null)
+                    handlerChatFromClient(this, args);
+            }
+            return true;
+        }
+
+        private bool HandlerAvatarPropertiesUpdate(IClientAPI sender, Packet Pack)
+        {
+            AvatarPropertiesUpdatePacket avatarProps = (AvatarPropertiesUpdatePacket)Pack;
+
+            #region Packet Session and User Check
+            if (m_checkPackets)
+            {
+                if (avatarProps.AgentData.SessionID != SessionId ||
+                    avatarProps.AgentData.AgentID != AgentId)
+                    return true;
+            }
+            #endregion
+
+            UpdateAvatarProperties handlerUpdateAvatarProperties = OnUpdateAvatarProperties;
+            if (handlerUpdateAvatarProperties != null)
+            {
+                AvatarPropertiesUpdatePacket.PropertiesDataBlock Properties = avatarProps.PropertiesData;
+                UserProfileData UserProfile = new UserProfileData();
+                UserProfile.ID = AgentId;
+                UserProfile.AboutText = Utils.BytesToString(Properties.AboutText);
+                UserProfile.FirstLifeAboutText = Utils.BytesToString(Properties.FLAboutText);
+                UserProfile.FirstLifeImage = Properties.FLImageID;
+                UserProfile.Image = Properties.ImageID;
+                UserProfile.ProfileUrl = Utils.BytesToString(Properties.ProfileURL);
+
+                handlerUpdateAvatarProperties(this, UserProfile);
+            }
+            return true;
+        }
+
         #endregion Packet Handlers

         public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question)
@@ -5003,13 +5100,13 @@
                 return;
             }

-            const bool m_checkPackets = true;
+

             // Main packet processing conditional
             switch (Pack.Type)
             {
                 #region Scene/Avatar
-
+                /*
                 case PacketType.AvatarPropertiesRequest:
                     AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack;

@@ -5029,7 +5126,7 @@
                     }

                     break;
-
+
                 case PacketType.ChatFromViewer:
                     ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack;

@@ -5068,7 +5165,7 @@
                             handlerChatFromClient(this, args);
                     }
                     break;
-
+
                 case PacketType.AvatarPropertiesUpdate:
                     AvatarPropertiesUpdatePacket avatarProps = (AvatarPropertiesUpdatePacket)Pack;

@@ -5096,7 +5193,7 @@
                         handlerUpdateAvatarProperties(this, UserProfile);
                     }
                     break;
-
+                */
                 case PacketType.ScriptDialogReply:
                     ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack;


Improved comment

Improved comment

--- MedallionShell/Streams/ProcessStreamReader.cs
+++ MedallionShell/Streams/ProcessStreamReader.cs
@@ -17,7 +17,7 @@
         internal ProcessStreamReader() { }

         /// <summary>
-        /// Provides access to the underlying stream
+        /// Provides access to the underlying <see cref="Stream"/>. Equivalent to <see cref="StreamReader.BaseStream"/>
         /// </summary>
         public abstract Stream BaseStream { get; }