Optimize feedback

Optimize feedback

--- WalletWasabi.Gui/ViewModels/StatusBarViewModel.cs
+++ WalletWasabi.Gui/ViewModels/StatusBarViewModel.cs
@@ -42,20 +42,20 @@
 		public StatusBarViewModel(NodesCollection nodes, WasabiSynchronizer synchronizer, UpdateChecker updateChecker)
 		{
 			UpdateStatus = UpdateStatus.Latest;
-			Peers = nodes.Count;
+			SetPeers(nodes.Count);
 			BlocksLeft = 0;
 			FiltersLeft = synchronizer.GetFiltersLeft();

 			Observable.FromEventPattern<NodeEventArgs>(nodes, nameof(nodes.Added))
 				.Subscribe(x =>
 				{
-					Peers = nodes.Count;
+					SetPeers(nodes.Count);
 				}).DisposeWith(Disposables);

 			Observable.FromEventPattern<NodeEventArgs>(nodes, nameof(nodes.Removed))
 				.Subscribe(x =>
 				{
-					Peers = nodes.Count;
+					SetPeers(nodes.Count);
 				}).DisposeWith(Disposables);

 			Observable.FromEventPattern<int>(typeof(WalletService), nameof(WalletService.ConcurrentBlockDownloadNumberChanged))
@@ -71,7 +71,7 @@

 			synchronizer.WhenAnyValue(x => x.TorStatus).Subscribe(_ =>
 			{
-				Tor = synchronizer.TorStatus;
+				SetTor(synchronizer.TorStatus);
 			}).DisposeWith(Disposables);

 			synchronizer.WhenAnyValue(x => x.BackendStatus).Subscribe(_ =>
@@ -295,6 +295,19 @@
 			}
 		}

+		private void SetPeers(int peers)
+		{
+			// Set peers to 0 if Tor is not running, because we get Tor status from backend answer so it's seem to the user that peers are connected over clearnet, while they don't.
+			Peers = Tor == TorStatus.Running ? peers : 0;
+		}
+
+		private void SetTor(TorStatus tor)
+		{
+			// Set peers to 0 if Tor is not running, because we get Tor status from backend answer so it's seem to the user that peers are connected over clearnet, while they don't.
+			Tor = tor;
+			SetPeers(Peers);
+		}
+
 		#region IDisposable Support

 		private volatile bool _disposedValue = false; // To detect redundant calls


Locking firing for a moment at start

Locking firing for a moment at start

--- RobotFrog/Assets/Scripts/Player.cs
+++ RobotFrog/Assets/Scripts/Player.cs
@@ -59,7 +59,7 @@
     void Start () {
         ////landTimer.SetTime(0.45f);
         landTimer.IsLooping = false;
-        canShootTimeStamp = Time.time;
+        canShootTimeStamp = Time.time + 0.25f;
     }

     void Update ()


+ comments for UnionFind class

+ comments for UnionFind class

--- RogueSharp/Algorithms/UnionFind.cs
+++ RogueSharp/Algorithms/UnionFind.cs
@@ -3,19 +3,18 @@
 namespace RogueSharp.Algorithms
 {
    /// <summary>
-   ///
+   /// The UnionFind class represents a union-find data type also known as the disjoint-sets data type.
+   /// It models connectivity among a set of N sites named 0 through N - 1.
    /// </summary>
-   /// <see>
-   ///    http://algs4.cs.princeton.edu/15uf/UF.java.html
-   ///    http://algs4.cs.princeton.edu/15uf
-   ///    Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
-   /// </see>
+   /// <seealso cref="http://algs4.cs.princeton.edu/15uf/UF.java.html">
+   /// UF class from Princeton University's Java Algorithms
+   /// </seealso>
    public class UnionFind
    {
       private readonly int[] _id;
       private readonly int[] _size;
       /// <summary>
-      ///    Create an empty union-find data structure with "count" isolated sets
+      /// Create an empty union-find data structure with "count" isolated sets
       /// </summary>
       /// <param name="count">The number of isolated sets in the data strucutre</param>
       public UnionFind( int count )
@@ -34,14 +33,15 @@
          }
       }
       /// <summary>
-      ///
+      /// Returns the number of components in this data structure
       /// </summary>
+      /// <returns>The number of components in this data structure</returns>
       public int Count { get; private set; }
       /// <summary>
-      ///    Return the id of the component corresponding to object p.
+      /// Returns the component identifier of the component containing site p
       /// </summary>
-      /// <param name="p"></param>
-      /// <returns></returns>
+      /// <param name="p">An integer representing one object</param>
+      /// <returns>The component identifier of the component containing site p</returns>
       public int Find( int p )
       {
          if ( p < 0 || p >= _id.Length )
@@ -55,20 +55,20 @@
          return p;
       }
       /// <summary>
-      ///    Are objects p and q in the same set?
+      /// Are objects p and q in the same set?
       /// </summary>
-      /// <param name="p"></param>
-      /// <param name="q"></param>
-      /// <returns></returns>
+      /// <param name="p">An integer representing one site</param>
+      /// <param name="q">An integer representing the other site</param>
+      /// <returns>true if the two sites p and q are in the same component; false otherwise</returns>
       public bool Connected( int p, int q )
       {
          return Find( p ) == Find( q );
       }
       /// <summary>
-      ///    Replace sets containing p and q with their union
+      /// Merges the component containing site p with the component containing site q
       /// </summary>
-      /// <param name="p"></param>
-      /// <param name="q"></param>
+      /// <param name="p">An integer representing one site</param>
+      /// <param name="q">An integer representing the other site</param>
       public void Union( int p, int q )
       {
          int i = Find( p );


Update InterfaceUrl.cs

Update InterfaceUrl.cs

--- RongCloudServerSDK/InterfaceUrl.cs
+++ RongCloudServerSDK/InterfaceUrl.cs
@@ -8,7 +8,7 @@
 {
     class InterfaceUrl
     {
-        public static String server_addr = "https://api.cn.ronghub.com";
+        public static String server_addr = "http://api.cn.ronghub.com";

         public static String getTokenUrl = server_addr+"/user/getToken.json";
         public static String joinGroupUrl = server_addr + "/group/join.json";


All passes means window matches.

All passes means window matches.

--- Rusty/Core/Common/WindowManager.cs
+++ Rusty/Core/Common/WindowManager.cs
@@ -196,7 +196,7 @@
                             return false;
                 }

-                return false;
+                return true;
             }

             bool TitleCompare(string a, string b)


skip elements with null category

skip elements with null category

--- RvtVa3c/Properties/AssemblyInfo.cs
+++ RvtVa3c/Properties/AssemblyInfo.cs
@@ -40,7 +40,8 @@
 // 2014-09-04 2015.0.0.23 added new models, theo confirmed it works, added name property to materials
 // 2014-09-22 2015.0.0.24 added all six standard revit sample models
 // 2014-10-28 2015.0.0.25 added support for runtime reading of user settings and switch between indented JSON or not to optionally reduce file size
-// 2014-11-24 2015.0.0.26 skip elements with null category
+// 2014-10-29 2015.0.0.26 user setting enhancements
+// 2014-11-24 2015.0.0.27 skip elements with null category
 //
-[assembly: AssemblyVersion( "2015.0.0.26" )]
-[assembly: AssemblyFileVersion( "2015.0.0.26" )]
+[assembly: AssemblyVersion( "2015.0.0.27" )]
+[assembly: AssemblyFileVersion( "2015.0.0.27" )]


- Add thread-safe starting and stopping of listener server; - Add functionality for preferences to be saved and loaded by the user;

--- SWBF2-AutomationTool/Forms/Main.cs
+++ SWBF2-AutomationTool/Forms/Main.cs
@@ -137,17 +137,17 @@
 				}
 			}

-			SetUpdateStatusBar(updateAvailable);
-		}
-
-
-		/// <summary>
-		///
-		/// </summary>
-		/// <param name="available"></param>
+
+		}
+
+
 		public void SetUpdateStatusBar(bool available)
 		{
-
+			this.SetUpdateStatusBar(available, null);
+		}
+		public void SetUpdateStatusBar(bool available, string downloadUrl)
+		{
+			// do stuff
 		}

@@ -164,6 +164,10 @@
 		}

+		/// <summary>
+		/// If there is an internet connection, checks for updates and returns true if an update is available.
+		/// </summary>
+		/// <returns>True if an update is available, false if not.</returns>
 		public static bool CheckForUpdates()
 		{
 			Trace.WriteLine("Checking for application updates...");
@@ -195,6 +199,9 @@
 		}

+		/// <summary>
+		/// Starts the update flow (duh).
+		/// </summary>
 		public static void StartUpdateFlow()
 		{
 			OpenWindow_Updates();


Allow rotating the screen without crashing by overriding the Configuration changes.

Restarting the activity is not a choice on orientation changes.

--- SampleGame.Android/MainActivity.cs
+++ SampleGame.Android/MainActivity.cs
@@ -5,19 +5,25 @@
 using Android.OS;
 using Android.Content.PM;
 using Android.Views;
+using System;
+using Android.Runtime;
+using Android.Content.Res;

 namespace SampleGame.Android
 {
-    [Activity(Label = "SampleGame", MainLauncher = true, ScreenOrientation = ScreenOrientation.Landscape, Theme = "@android:style/Theme.NoTitleBar")]
+    [Activity(Label = "SampleGame", ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, MainLauncher = true, Theme = "@android:style/Theme.NoTitleBar")]
     public class MainActivity : Activity
     {
+        private SampleGameView sampleGameView;
+
         protected override void OnCreate(Bundle savedInstanceState)
         {
             base.OnCreate(savedInstanceState);

             Window.AddFlags(WindowManagerFlags.Fullscreen);
             Window.AddFlags(WindowManagerFlags.KeepScreenOn);
-            SetContentView(new SampleGameView(this));
+
+            SetContentView(sampleGameView = new SampleGameView(this));
         }
     }
 }


Update the active move on MouseWheel events in the MovesTextBox.

--- Sandra.UI.WF.Chess/MovesTextBox.cs
+++ Sandra.UI.WF.Chess/MovesTextBox.cs
@@ -441,15 +441,7 @@
         {
             if (!ModifierKeys.HasFlag(Keys.Control) && game != null)
             {
-                UpdatingGame = true;
-                try
-                {
-                    game.HandleMouseWheelEvent(e.Delta);
-                }
-                finally
-                {
-                    UpdatingGame = false;
-                }
+                game.HandleMouseWheelEvent(e.Delta);
             }

             base.OnMouseWheel(e);


Although the first ply of a side line generally will not have any alternatives, changed type of FirstPly to PGNPlyWithSidelines anyway. FirstPly.SideLines is then null.

--- Sandra.UI.WF.Chess/MovesTextBox.cs
+++ Sandra.UI.WF.Chess/MovesTextBox.cs
@@ -139,7 +139,7 @@

         private class PGNSideLine
         {
-            public PGNPly FirstPly;
+            public PGNPlyWithSidelines FirstPly;
             public PGNLine Line;
         }

@@ -169,7 +169,8 @@
                 {
                     if (plyWithSidelines.SideLines == null) plyWithSidelines.SideLines = new List<PGNSideLine>();
                     PGNSideLine pgnSideLine = new PGNSideLine();
-                    pgnSideLine.FirstPly = new PGNPly(plyCount, moveFormatter.FormatMove(game, sideLine.Move), sideLine);
+                    pgnSideLine.FirstPly = new PGNPlyWithSidelines();
+                    pgnSideLine.FirstPly.Ply = new PGNPly(plyCount, moveFormatter.FormatMove(game, sideLine.Move), sideLine);
                     pgnSideLine.Line = generatePGNLine(game);
                     plyWithSidelines.SideLines.Add(pgnSideLine);

@@ -205,7 +206,7 @@
                     foreach (var pgnSideLine in plyWithSidelines.SideLines)
                     {
                         yield return new SideLineStartSymbol();
-                        foreach (var symbol in pgnSideLine.FirstPly.GenerateTerminalSymbols(false)) yield return symbol;
+                        foreach (var symbol in pgnSideLine.FirstPly.Ply.GenerateTerminalSymbols(false)) yield return symbol;
                         foreach (var element in generatePGNTerminalSymbols(pgnSideLine.Line, true).ToList()) yield return element;
                         yield return new SideLineEndSymbol();
                         previousWasMoveSymbol = false;


Changed type of updatedElement back to TextElement.

--- Sandra.UI.WF.Chess/MovesTextBox.cs
+++ Sandra.UI.WF.Chess/MovesTextBox.cs
@@ -347,12 +347,12 @@
                 // Append new element texts.
                 while (agreeIndex < updatedElementCount)
                 {
-                    var updatedElement = updated[agreeIndex];
+                    var updatedElement = new TextElement() { TerminalSymbol = updated[agreeIndex] };
                     updatedElement.Start = TextLength;
-                    AppendText(updatedElement.GetText());
+                    AppendText(updatedElement.TerminalSymbol.GetText());
                     updatedElement.Length = TextLength - updatedElement.Start;
                     ++agreeIndex;
-                    elements.Add(new TextElement() { TerminalSymbol = updatedElement });
+                    elements.Add(updatedElement);
                 }

                 // Make the active move bold.


Sending commands password compares with settings

--- ScadaComm/ScadaCommCtrl/FrmMain.cs
+++ ScadaComm/ScadaCommCtrl/FrmMain.cs
@@ -137,10 +137,6 @@
         /// Имя файла ошибок
         /// </summary>
         private const string ErrFileName = "ScadaCommCtrl.err";
-        /// <summary>
-        /// Пароль для отправки команды ТУ
-        /// </summary>
-        private const string CmdPwd = "12345";
         /// <summary>
         /// Нулевое время, отформатированное в соответствии с культурой приложения
         /// </summary>
@@ -2562,7 +2558,7 @@
         #region Обработка событий на странице команд
         private void txtCmdPwd_TextChanged(object sender, EventArgs e)
         {
-            gbKpCmd.Visible = txtCmdPwd.Text == CmdPwd;
+            gbKpCmd.Visible = txtCmdPwd.Text == origSettings.Params.ServerPwd;

             if (gbKpCmd.Visible)
             {


Elaborating signals a bit more

Elaborating signals a bit more

--- Services/DateTimeCachingService.cs
+++ Services/DateTimeCachingService.cs
@@ -93,7 +93,8 @@
         // Invalidates the memory cache and all the dynamic caches which have been tagged.
         public Task InvalidateCachedDateTimeAsync()
         {
-            // As mentioned ISignal service is used to invalidate the memory cache.
+            // As mentioned ISignal service is used to invalidate the memory cache. This will invalidate all cache
+            // entries if there are multiple ones related to the token.
             _signal.SignalToken(MemoryCacheKey);

             // ITagCache.RemoveTagAsync will invalidate all the dynamic caches which are tagged with the given tag.
@@ -101,7 +102,8 @@
         }

         // This change token is generated based on the cache key using the ISignal service. It is used to invalidate the
-        // memory cache.
+        // memory cache. You can use this not just as another way to invalidate specific entries but also a way to
+        // invalidate many at the same time: You can use tie multiple cache entries to the same signal too.
         private IChangeToken GetMemoryCacheChangeToken() => _signal.GetToken(MemoryCacheKey);

         private async Task<DateTime> GetOrCreateDynamicCachedDateTimeAsync(CacheContext cacheContext)


Fix sharpmake version parsing when using the debug project generator

--- Sharpmake/DebugProjectGenerator.cs
+++ Sharpmake/DebugProjectGenerator.cs
@@ -123,7 +123,7 @@
         private static string s_sharpmakeGeneratorDllPath;
         private static string s_sharpmakeApplicationExePath;
         private static bool s_useLocalSharpmake = false;
-        private static readonly Regex s_assemblyVersionRegex = new Regex(@"(.*) \((.*)\)", RegexOptions.Compiled);
+        private static readonly Regex s_assemblyVersionRegex = new Regex(@"([^\s]+)(?:\s*\((.+)\))?", RegexOptions.Compiled);

         /// <summary>
         /// Add references to Sharpmake to given configuration.
@@ -143,7 +143,9 @@

                 s_sharpmakePackageVersion = match.Groups[1].Value;
                 string assemblyProductVariation = match.Groups[2].Value;
-                s_sharpmakePackageName = $"{assemblyProductName}-{assemblyProductVariation}";
+                s_sharpmakePackageName = $"{assemblyProductName}";
+                if (!string.IsNullOrWhiteSpace(assemblyProductVariation))
+                    s_sharpmakePackageName += $"-{assemblyProductVariation}";

                 if (assemblyProductVariation == "LocalBuild")
                 {


Disables TargetCopy on build-only dependencies.

--- Sharpmake/Project.Configuration.cs
+++ Sharpmake/Project.Configuration.cs
@@ -1902,13 +1902,17 @@

                                 if ((Output == OutputType.Exe || ExecuteTargetCopy) && dependency.TargetPath != TargetPath)
                                 {
-                                    _resolvedTargetCopyFiles.Add(Path.Combine(dependency.TargetPath, dependency.TargetFileFullName + ".dll"));
-                                    if (!isExport) // Add PDBs only if the dependency is not an [export] project
+                                    // If using OnlyBuildOrder, ExecuteTargetCopy must be set to enable the copy.
+                                    if (dependencySetting != DependencySetting.OnlyBuildOrder || ExecuteTargetCopy)
                                     {
-                                        _resolvedTargetCopyFiles.Add(dependency.LinkerPdbFilePath);
-
-                                        if (dependency.CopyCompilerPdbToDependentTargets)
-                                            _resolvedTargetCopyFiles.Add(dependency.CompilerPdbFilePath);
+                                        _resolvedTargetCopyFiles.Add(Path.Combine(dependency.TargetPath, dependency.TargetFileFullName + ".dll"));
+                                        if (!isExport) // Add PDBs only if the dependency is not an [export] project
+                                        {
+                                            _resolvedTargetCopyFiles.Add(dependency.LinkerPdbFilePath);
+
+                                            if (dependency.CopyCompilerPdbToDependentTargets)
+                                                _resolvedTargetCopyFiles.Add(dependency.CompilerPdbFilePath);
+                                        }
                                     }
                                     _resolvedEventPreBuildExe.AddRange(dependency.EventPreBuildExe);
                                     _resolvedEventPostBuildExe.AddRange(dependency.EventPostBuildExe);


Removed dropped GUI

Removed dropped GUI

--- Shelter/Mod/Interface/Reconnect.cs
+++ Shelter/Mod/Interface/Reconnect.cs
@@ -1,40 +0,0 @@
-using UnityEngine;
-
-namespace Mod.Interface
-{
-    public class Reconnect : Gui
-    {
-        private GUIStyle _text;
-//        private GUIStyle _button;
-        private Texture2D _backgroundTexture;
-
-        protected override void OnShow()
-        {
-            _text = new GUIStyle
-            {
-                normal = {textColor = UnityEngine.Color.white},
-                fontSize = 20
-            };
-            _backgroundTexture = Texture(255, 255, 255, 63);
-        }
-
-        protected override void Render()
-        {
-            const float WIDTH = 500;
-            const float HEIGHT = 150;
-            GUI.DrawTexture(windowRect = new Rect(Screen.width / 2f - WIDTH / 2f, Screen.height / 2f - HEIGHT / 2f, WIDTH, HEIGHT), _backgroundTexture);
-            GUILayout.BeginArea(windowRect);
-            GUILayout.Label("asd", _text);
-            GUILayout.EndArea();
-//            GUI.Label(, "We are trying to reconnect you to " + LastRoom, _text);
-//            GUI.Button(new Rect(windowRect.x + 100f, windowRect.y + windowRect.height - 125f, windowRect.width / 2f - 125f, 100), "re", _button);
-        }
-
-        protected override void OnHide()
-        {
-            Destroy(_backgroundTexture);
-        }
-
-        public static Room LastRoom { get; set; }
-    }
-}


undo test

undo test

--- Source/Mosa.HelloWorld.x86/Boot.cs
+++ Source/Mosa.HelloWorld.x86/Boot.cs
@@ -15,35 +15,15 @@
 	/// <summary>
 	///
 	/// </summary>
-	unsafe public static class Boot
+	public static class Boot
 	{
 		public static ConsoleSession Console;
-
-		public static T GetValueTypeFromAddress<T>(uint address) where T : struct
-		{
-			return default(T);
-		}
-
-		public static T GetValueTypeFromAddress<T>(void* address) where T : struct
-		{
-			return default(T);
-		}
-
-		public static void TEST()
-		{
-		}

 		/// <summary>
 		/// Main
 		/// </summary>
 		public static void Main()
 		{
-			uint addr = 5;
-			DTEntry* add2 = (DTEntry*)5;
-
-			GetValueTypeFromAddress<DTEntry>(addr);
-			GetValueTypeFromAddress<DTEntry>(add2);
-
 			Mosa.Kernel.x86.Kernel.Setup();

 			Console = ConsoleManager.Controller.Boot;


Fixes for ToIso8061 methods.

Fixes for ToIso8061 methods.

--- Source/Sugar/DateTimeExtensions.cs
+++ Source/Sugar/DateTimeExtensions.cs
@@ -76,13 +76,14 @@
         }

         /// <summary>
-        /// Parses a datetime string formatted using the ISO 8601 format.
-        /// Examples: 2009-10-08T08:22:02Z, 20091008T082202
-        /// </summary>
-        /// <param name="value">The date time in the ISO 8601 format.</param>
-        /// <returns></returns>
-        public static DateTime ToDateTimeFromIso8601(this string value)
-        {
+        /// Converts the ISO 8601 string to a DateTime.
+        /// </summary>
+        /// <param name="value">The value.</param>
+        /// <returns></returns>
+        private static DateTime? ConvertFromIso8601(this string value)
+        {
+            DateTime? result = null;
+
             var formats = new[]
                               {
                                   "yyyy-MM-ddTHH:mm:ssK",
@@ -110,15 +111,55 @@

             foreach (var format in formats)
             {
-                DateTime result;
-
-                if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
+                DateTime resultForFormat;
+
+                if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out resultForFormat))
                 {
-                    return result;
+                    result = resultForFormat;
+                    break;
                 }
             }

+            return result;
+        }
+
+        /// <summary>
+        /// Parses a datetime string formatted using the ISO 8601 format.
+        /// Examples: 2009-10-08T08:22:02Z, 20091008T082202
+        /// </summary>
+        /// <param name="value">The date time in the ISO 8601 format.</param>
+        /// <returns></returns>
+        public static DateTime ToDateTimeFromIso8601(this string value)
+        {
+            var result = value.ConvertFromIso8601();
+
+            if (result.HasValue)
+            {
+                return result.Value;
+            }
+
             throw new ApplicationException("The given date-time string was not in an ISO8061 format.");
+        }
+
+        /// <summary>
+        /// Tries to convert an ISO 8601 (e.g. 20100130T235959) value to a <see cref="DateTime"/> value.
+        /// </summary>
+        /// <param name="value">The value.</param>
+        /// <param name="time">The time in the ISO 8601 format.</param>
+        /// <returns></returns>
+        public static bool TryToDateTimeFromIso8601(this string value, out DateTime time)
+        {
+            var result = value.ConvertFromIso8601();
+
+            time = new DateTime();
+
+            if (result.HasValue)
+            {
+                time = result.Value;
+                return true;
+            }
+
+            return false;
         }

         /// <summary>


+ image rotation fixed.

+ image rotation fixed.

--- Source/lib/BarcodeReaderGeneric.cs
+++ Source/lib/BarcodeReaderGeneric.cs
@@ -1,4 +1,4 @@
-/*
+	/*
  * Copyright 2012 ZXing.Net authors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -250,7 +250,9 @@
                     !AutoRotate)
                     break;

-                binaryBitmap = new BinaryBitmap(CreateBinarizer(luminanceSource.rotateCounterClockwise()));
+                luminanceSource = luminanceSource.rotateCounterClockwise();
+                binarizer = CreateBinarizer(luminanceSource);
+                binaryBitmap = new BinaryBitmap(binarizer);
             }

             if (result != null)


Fixed CLA Exception

Fixed CLA Exception

--- Sum_Of_Multiples/SumOfMultiples.cs
+++ Sum_Of_Multiples/SumOfMultiples.cs
@@ -7,7 +7,7 @@
 		public static void Main(string[] args)
 		{

-			if (args.Length <= 1)
+			if (args.Length < 2)
 			{
 				Console.WriteLine("This program requires 1 integer input and 1 multiple input!\n");
 				Console.WriteLine("NOTE: This program can handle multiple 'Multiple integer' inputs...\n");


file repository interface is changed

file repository interface is changed

--- TIKSN.Core/Data/IFileRepository.cs
+++ TIKSN.Core/Data/IFileRepository.cs
@@ -17,13 +17,13 @@

     public interface IFileRepository<TIdentity> where TIdentity : IEquatable<TIdentity>
     {
-        Task DeleteAsync(TIdentity id, CancellationToken cancellationToken = default);
+        Task DeleteByIdAsync(TIdentity id, CancellationToken cancellationToken = default);

-        Task<bool> ExistsAsync(TIdentity id, CancellationToken cancellationToken = default);
+        Task<bool> ExistsByIdAsync(TIdentity id, CancellationToken cancellationToken = default);

         Task<IFile<TIdentity>> DownloadByIdAsync(TIdentity id, CancellationToken cancellationToken = default);

-        Task UploadAsync(TIdentity id, string path, byte[] content, CancellationToken cancellationToken = default);
+        Task UploadByIdAsync(TIdentity id, string path, byte[] content, CancellationToken cancellationToken = default);
     }

     public interface IFileRepository<TIdentity, TMetadata> where TIdentity : IEquatable<TIdentity>


Documentation for IRemovalListener.

Documentation for IRemovalListener.

--- Tamarind/Cache/IRemovalListener.cs
+++ Tamarind/Cache/IRemovalListener.cs
@@ -6,8 +6,24 @@

 namespace Tamarind.Cache
 {
+    /// <summary>
+    ///     An object that can receive a notification when an entry is removed from a cache. The removal
+    ///     resulting in notification could have occured to an entry being manually removed or replaced, or
+    ///     due to eviction resulting from timed expiration, exceeding a maximum size, or garbage
+    ///     collection.
+    ///     <para>
+    ///         This class holds strong references to the key and value, regardless of the type of references the cache may
+    ///         be using.
+    ///     </para>
+    /// </summary>
+    /// <typeparam name="TKey">The type of the key.</typeparam>
+    /// <typeparam name="TValue">The type of the value.</typeparam>
     public interface IRemovalListener<TKey, TValue>
     {
+        /// <summary>
+        /// Notifies the listener that a removel has occured (at some point in the past).
+        /// </summary>
+        /// <param name="notification">The cache item removal notification.</param>
         void onRemoval(RemovalNotification<TKey, TValue> notification);
     }
 }


* Display error if TAQ server is down. * Fix a bug that fails to update aqi of sites.

--- Taq.Uwp/ViewModels/TaqViewModel.cs
+++ Taq.Uwp/ViewModels/TaqViewModel.cs
@@ -151,6 +151,8 @@
             var content = new HttpStringContent(JsonConvert.SerializeObject(jTaqReq), UnicodeEncoding.Utf8, "application/json");
             var taqRegResMsg = await taqHttpClient.PostAsync(new Uri(Params.uriHost + "userReg"), content);
             var taqResStr = await taqRegResMsg.Content.ReadAsStringAsync();
+            if (!taqRegResMsg.IsSuccessStatusCode)
+                throw new Exception("TAQ server error! Please contact the developer. Error message: " + taqResStr);
             var jTaqRegRes = JsonValue.Parse(taqResStr).GetObject();
             var err = jTaqRegRes.GetNamedString("error");
             if (err != "")
@@ -182,8 +184,8 @@
         // Has to be run by UI context!
         public void loadDict2Sites(string aqName)
         {
-            // sites is uninitialized.
             var isSiteUninit = sites.Count() == 0;
+            // if sites is uninitialized.
             if (isSiteUninit)
             {
                 foreach (var s in m.sitesStrDict)
@@ -193,7 +195,6 @@
                     {
                         siteName = s.Key,
                         county = s.Value["County"],
-                        aqi = m.getValidAqVal(siteDict["AQI"]),
                         twd97Lat = double.Parse(siteDict["TWD97Lat"]),
                         twd97Lon = double.Parse(siteDict["TWD97Lon"]),
                     });
@@ -203,6 +204,7 @@
             foreach (var site in sites)
             {
                 var aqLevel = m.getAqLevel(site.siteName, aqName);
+                site.aqi = m.getValidAqVal(m.sitesStrDict[site.siteName]["AQI"]);
                 site.CircleColor = StaticTaqModel.aqColors[aqName][aqLevel];
                 site.CircleText = site.siteName + "\n" + m.sitesStrDict[site.siteName][aqName];
                 site.ListText = m.sitesStrDict[site.siteName][aqName];


Confine to IWindow.ClientSize rather than calculating by scale

--- osu.Framework/Input/UserInputManager.cs
+++ osu.Framework/Input/UserInputManager.cs
@@ -36,8 +36,8 @@
                     // confine cursor
                     if (Host.Window != null && Host.Window.CursorState.HasFlag(CursorState.Confined))
                     {
-                        float scale = (Host.Window as DesktopWindow)?.Scale ?? 1f;
-                        mouse.Position = Vector2.Clamp(mouse.Position, Vector2.Zero, new Vector2(Host.Window.Width * scale, Host.Window.Height * scale));
+                        var clientSize = Host.Window.ClientSize;
+                        mouse.Position = Vector2.Clamp(mouse.Position, Vector2.Zero, new Vector2(clientSize.Width, clientSize.Height));
                     }

                     break;


Give the root drawnode a vertex batch

Give the root drawnode a vertex batch

--- osu.Framework/Input/UserInputManager.cs
+++ osu.Framework/Input/UserInputManager.cs
@@ -24,6 +24,7 @@
             // UserInputManager is at the very top of the draw hierarchy, so it has no parnt updating its IsAlive state
             IsAlive = true;
             UseParentInput = false;
+            ForceLocalVertexBatch = true;
         }

         public override void HandleInputStateChange(InputStateChangeEvent inputStateChange)


Fix slider samples playing twice when additions are present

--- osu.Game.Rulesets.Osu/Objects/Slider.cs
+++ osu.Game.Rulesets.Osu/Objects/Slider.cs
@@ -61,6 +61,7 @@
         public int RepeatCount { get; set; } = 1;

         private int stackHeight;
+
         public override int StackHeight
         {
             get { return stackHeight; }
@@ -130,6 +131,17 @@
                     var distanceProgress = d / length;
                     var timeProgress = reversed ? 1 - distanceProgress : distanceProgress;

+                    var firstSample = Samples.FirstOrDefault();
+                    var sampleList = new List<SampleInfo>();
+
+                    if (firstSample != null)
+                        sampleList.Add(new SampleInfo
+                        {
+                            Bank = firstSample?.Bank,
+                            Volume = firstSample?.Volume ?? 100,
+                            Name = @"slidertick",
+                        });
+
                     AddNested(new SliderTick
                     {
                         RepeatIndex = repeat,
@@ -138,12 +150,7 @@
                         StackHeight = StackHeight,
                         Scale = Scale,
                         ComboColour = ComboColour,
-                        Samples = new List<SampleInfo>(Samples.Select(s => new SampleInfo
-                        {
-                            Bank = s.Bank,
-                            Name = @"slidertick",
-                            Volume = s.Volume
-                        }))
+                        Samples = sampleList
                     });
                 }
             }


Add back missing rethrow

Add back missing rethrow

--- osu.Game/Database/DatabaseWriteUsage.cs
+++ osu.Game/Database/DatabaseWriteUsage.cs
@@ -40,6 +40,7 @@
             catch (Exception e)
             {
                 Errors.Add(e);
+                throw;
             }
             finally
             {


Fix score tracker not tracking non-online scores correctly

--- osu.Game/Online/ScoreDownloadTracker.cs
+++ osu.Game/Online/ScoreDownloadTracker.cs
@@ -35,7 +35,11 @@
                 return;

             // Used to interact with manager classes that don't support interface types. Will eventually be replaced.
-            var scoreInfo = new ScoreInfo { OnlineScoreID = TrackedItem.OnlineScoreID };
+            var scoreInfo = new ScoreInfo
+            {
+                ID = TrackedItem.ID,
+                OnlineScoreID = TrackedItem.OnlineScoreID
+            };

             if (Manager.IsAvailableLocally(scoreInfo))
                 UpdateState(DownloadState.LocallyAvailable);


Remove redundant using directive

Remove redundant using directive

--- osu.Game/Overlays/Direct/DirectPanel.cs
+++ osu.Game/Overlays/Direct/DirectPanel.cs
@@ -18,7 +18,6 @@
 using osu.Game.Beatmaps.Drawables;
 using osu.Game.Graphics;
 using osu.Game.Graphics.Sprites;
-using osu.Game.Rulesets;
 using osuTK;
 using osuTK.Graphics;


Keep the placement hitobject time up-to-date

--- osu.Game/Rulesets/Edit/PlacementMask.cs
+++ osu.Game/Rulesets/Edit/PlacementMask.cs
@@ -6,6 +6,7 @@
 using osu.Framework.Graphics.Containers;
 using osu.Framework.Input;
 using osu.Framework.Input.Events;
+using osu.Framework.Timing;
 using osu.Game.Beatmaps;
 using osu.Game.Rulesets.Objects;
 using OpenTK;
@@ -24,14 +25,18 @@
         /// </summary>
         protected readonly HitObject HitObject;

+        private IAdjustableClock clock;
+
         public PlacementMask(HitObject hitObject)
         {
             HitObject = hitObject;
         }

         [BackgroundDependencyLoader]
-        private void load(IBindableBeatmap workingBeatmap)
+        private void load(IBindableBeatmap workingBeatmap, IAdjustableClock clock)
         {
+            this.clock = clock;
+
             HitObject.ApplyDefaults(workingBeatmap.Value.Beatmap.ControlPointInfo, workingBeatmap.Value.Beatmap.BeatmapInfo.BaseDifficulty);
         }

@@ -39,6 +44,13 @@
         /// Finishes the placement of <see cref="HitObject"/>.
         /// </summary>
         public void Finish() => PlacementFinished?.Invoke(HitObject);
+
+        protected override void Update()
+        {
+            base.Update();
+
+            HitObject.StartTime = clock.CurrentTime;
+        }

         public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => Parent?.ReceivePositionalInputAt(screenSpacePos) ?? false;


Update docstring

Update docstring

Co-Authored-By: pavlukivan <cefe517471aac8657785d917b755725c777c0e0f@outlook.com>

--- osu.Game/Rulesets/Objects/HitWindows.cs
+++ osu.Game/Rulesets/Objects/HitWindows.cs
@@ -58,7 +58,8 @@
         /// <summary>
         /// Whether it's possible to achieve this <see cref="HitResult"/>.
         /// </summary>
-        /// <param name="result">The result.</param>
+        /// <param name="result">The result type to check.</param>
+        /// <returns>Whether the <see cref="HitResult"/> can be achieved.</returns>
         public virtual bool IsHitResultAllowed(HitResult result)
         {
             switch (result)


Don't obtain DependencyContainer via DI

Don't obtain DependencyContainer via DI

--- osu.Game/Screens/Tournament/Drawings.cs
+++ osu.Game/Screens/Tournament/Drawings.cs
@@ -53,7 +53,7 @@
             dependencies = new DependencyContainer(base.CreateLocalDependencies(parent));

         [BackgroundDependencyLoader]
-        private void load(TextureStore textures, Storage storage, DependencyContainer dependencies)
+        private void load(TextureStore textures, Storage storage)
         {
             this.storage = storage;


fixed handling of invalid characters for InfoGraphic export

--- ARKBreedingStats/Form1.library.cs
+++ ARKBreedingStats/Form1.library.cs
@@ -1380,10 +1380,18 @@
             int imagesCreated = 0;
             string firstImageFilePath = null;

+            var invalidCharacters = Path.GetInvalidFileNameChars();
+
             foreach (ListViewItem li in si)
             {
                 var c = (Creature)li.Tag;
-                var filePath = Path.Combine(folderPath, $"ARK_info_{c.Species.name}_{c.name}.png");
+
+                var fileName = $"{c.Species.name}_{c.name}";
+                foreach (var invalidChar in invalidCharacters)
+                    fileName = fileName.Replace(invalidChar, '_');
+
+                var filePath = Path.Combine(folderPath, $"ARK_info_{fileName}.png");
+
                 if (File.Exists(filePath))
                 {
                     switch (MessageBox.Show($"The file\n{filePath}\nalready exists.\nOverwrite the file?", "File exists already", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning))


removed downscaling

removed downscaling

--- Aiv.Research.Visualizer2D/Main.cs
+++ Aiv.Research.Visualizer2D/Main.cs
@@ -109,19 +109,16 @@

                 using (Bitmap hBmp = m_hPenDrawer.Clear(out hSamples))
                 {
-                    using (Bitmap hDownscaled = hBmp.ResizeImage(320, 240))
+                    string sFilename = $"Sample{m_hSamples.Items.Count}.bmp";
+                    IdealInputForm hIdealInput = new IdealInputForm(m_hPenDrawer.Network.OutputSize);
+
+                    if (hIdealInput.ShowDialog() == DialogResult.OK)
                     {
-                        string sFilename = $"Sample{m_hSamples.Items.Count}.bmp";
-                        IdealInputForm hIdealInput = new IdealInputForm(m_hPenDrawer.Network.OutputSize);
-
-                        if (hIdealInput.ShowDialog() == DialogResult.OK)
-                        {
-                            double[] hIdeal = hIdealInput.Ideal;
-                            hDownscaled.Save(sFilename, ImageFormat.Bmp);
-                            Sample hSample = new Sample(sFilename, hSamples, hIdeal);
-                            m_hPenDrawer.Network.Samples.Add(hSample);
-                            m_hSamples.Items.Add(hSample);
-                        }
+                        double[] hIdeal = hIdealInput.Ideal;
+                        hBmp.Save(sFilename, ImageFormat.Bmp);
+                        Sample hSample = new Sample(sFilename, hSamples, hIdeal);
+                        m_hPenDrawer.Network.Samples.Add(hSample);
+                        m_hSamples.Items.Add(hSample);
                     }
                 }


Duplicate signs and glitched pink cubes are now shown as numbers in brackets (rather than showing 122/120 signs and 15/13 cubes)

--- AntichamberSaveWatcher/Program.cs
+++ AntichamberSaveWatcher/Program.cs
@@ -204,16 +204,45 @@

 				if (trackSigns)
 				{
+					List<int> signNums = new List<int>();
+					int extraSigns = 0;
+
 					foreach (Trigger trigger in save.SavedTriggers)
+						signNums.Add(trigger.SignNum);
+
+					if (signNums.Contains(55) && signNums.Contains(120)) extraSigns++;
+					if (signNums.Contains(106) && signNums.Contains(142)) extraSigns++;
+					signs -= extraSigns;
+
+					string signExtra = extraSigns == 0 ? "" : " (+" + extraSigns.ToString() + ")";
+
+					foreach (Trigger trigger in save.SavedTriggers)
+					{
 						if (trigger.SignNum > 0 && !previousSigns.Contains(trigger.SignNum))
-							Console.WriteLine(String.Format("{0} - SIGN {1}/120 - {2}", new TimeSpan(0, 0, (int)save.PlayTime), ++signs, trigger.SignText));
+							Console.WriteLine(String.Format("{0} - SIGN {1}/120{3} - {2}", new TimeSpan(0, 0, (int)save.PlayTime), ++signs, trigger.SignText, signExtra));
+
+					}
 				}

 				if (trackCubes)
 				{
+					List<string> secretNames = new List<string>();
+					int extraCubes = 0;
+
 					foreach (Secret secret in save.SavedSecrets)
+						secretNames.Add(secret.FullName);
+
+					if (secretNames.Contains("HazardSeamless.TheWorld:PersistentLevel.HazardSecretTile_15")) extraCubes++;
+					if (secretNames.Contains("HazardIGFChinaSplit.TheWorld:PersistentLevel.HazardSecretTile_0")) extraCubes++;
+					cubes -= extraCubes;
+
+					string cubeExtra = extraCubes == 0 ? "" : " (+" + extraCubes.ToString() + ")";
+
+					foreach (Secret secret in save.SavedSecrets)
+					{
 						if (!previousCubes.Contains(secret.FullName))
-							Console.WriteLine(String.Format("{0} - PINK CUBE {1}/13", new TimeSpan(0, 0, (int)save.PlayTime), ++cubes));
+							Console.WriteLine(String.Format("{0} - PINK CUBE {1}/13{2}", new TimeSpan(0, 0, (int)save.PlayTime), ++cubes, cubeExtra));
+					}
 				}

 				if (trackGuns)


Added Query Condition Handler for Item Properties

--- Aras.Model/Conditions/Property.cs
+++ Aras.Model/Conditions/Property.cs
@@ -96,6 +96,17 @@
                             return "(" + proptype.ColumnName + OperatorString(this.Operator) + "'" + this.Value.ToString().Replace('*', '%') + "')";
                         }

+                    case "Item":
+
+                        if (this.Value != null)
+                        {
+                            return "(" + proptype.ColumnName + OperatorString(this.Operator) + "'" + this.Value.ToString() + "')";
+                        }
+                        else
+                        {
+                            return null;
+                        }
+
                     case "Integer":
                     case "Decimal":


Updated Grid Filter Search to allow *

Updated Grid Filter Search to allow *

--- Aras.ViewModel/Dialogs/Filters.cs
+++ Aras.ViewModel/Dialogs/Filters.cs
@@ -87,7 +87,7 @@

                         if (!String.IsNullOrEmpty(((Properties.Federated)prop).Value))
                         {
-                            condition = Aras.Conditions.Like(((Properties.Federated)prop).PropertyType.Name, "%" + ((Properties.Federated)prop).Value + "%");
+                            condition = Aras.Conditions.Like(((Properties.Federated)prop).PropertyType.Name, ((Properties.Federated)prop).Value);
                         }

                         break;
@@ -127,7 +127,7 @@

                         if (!String.IsNullOrEmpty(((Properties.Sequence)prop).Value))
                         {
-                            condition = Aras.Conditions.Like(((Properties.Sequence)prop).PropertyType.Name, "%" + ((Properties.Sequence)prop).Value + "%");
+                            condition = Aras.Conditions.Like(((Properties.Sequence)prop).PropertyType.Name, ((Properties.Sequence)prop).Value);
                         }

                         break;
@@ -135,7 +135,7 @@

                         if (!String.IsNullOrEmpty(((Properties.String)prop).Value))
                         {
-                            condition = Aras.Conditions.Like(((Properties.String)prop).PropertyType.Name, "%" + ((Properties.String)prop).Value + "%");
+                            condition = Aras.Conditions.Like(((Properties.String)prop).PropertyType.Name, ((Properties.String)prop).Value);
                         }

                         break;
@@ -143,7 +143,7 @@

                         if (!String.IsNullOrEmpty(((Properties.Text)prop).Value))
                         {
-                            condition = Aras.Conditions.Like(((Properties.Text)prop).PropertyType.Name, "%" + ((Properties.Text)prop).Value + "%");
+                            condition = Aras.Conditions.Like(((Properties.Text)prop).PropertyType.Name, ((Properties.Text)prop).Value);
                         }

                         break;


autosave enabled by default

autosave enabled by default

--- Assets/AutoSaver/Editor/Config.cs
+++ Assets/AutoSaver/Editor/Config.cs
@@ -75,6 +75,7 @@
             // If the first key is missing then just assume we have no data to load and go with defaults.
             if (!EditorPrefs.HasKey(PACKAGE_NAME + " - AS"))
             {
+                autoSaveEnabled = true;
                 return;
             }


Always create a new ProjectComponent to remove data of old cities

--- Assets/Scripts/DataModel/Model.cs
+++ Assets/Scripts/DataModel/Model.cs
@@ -76,8 +76,7 @@
             if (baseComponent == null || components == null)
                 return null;

-            if (project == null)
-                project = new ProjectComponent(baseComponent);
+            project = new ProjectComponent(baseComponent);

             lock (project)
             {


Documented AtomEventStream<T>.Storage.

Documented AtomEventStream<T>.Storage.

--- AtomEventStore/AtomEventStream.cs
+++ AtomEventStore/AtomEventStream.cs
@@ -210,6 +210,14 @@
             get { return this.id; }
         }

+        /// <summary>
+        /// Gets the underlying storage mechanism.
+        /// </summary>
+        /// <value>
+        /// The underlying storage mechanism, as originally supplied via the
+        /// constructor.
+        /// </value>
+        /// <seealso cref="AtomEventStream{T}(UuidIri, IAtomEventStorage)" />
         public IAtomEventStorage Storage
         {
             get { return this.storage; }


Failing to download dependency walker removes its directory so next start will invoke a retry of the download. #11

--- AutoDependencyDetector/Program.cs
+++ AutoDependencyDetector/Program.cs
@@ -21,7 +21,6 @@
             {
                 var logger = new ConsoleLogger();

-

                 var options = new Options();
                 var res =  CommandLine.Parser.Default.ParseArguments( args,options );
@@ -32,6 +31,7 @@

                 // See #4, even a start without params should provide the minimum configuration setup, which is config and dependency walker
                 var config = _readConfig( options.Config );
+
                 var pathOfDependsRoot = _getDependencyWalkerIfMissing( logger, options.ProxyUser, options.ProxyPassword );

@@ -101,15 +101,26 @@

             logger.Warn( "Detected missing dependency walker. Trying to obtain" );
             // Missing depends. Download
-            var dwo = new DependencyWalkerObtainer( finalDir,proxyUser, proxyPassword );
+            var dwo = new DependencyWalkerObtainer( finalDir, proxyUser, proxyPassword );

-            dwo.DownloadFiles().Wait();
+            try
+            {

-            var fileCount = Directory.GetFiles( finalDir, "*.exe", SearchOption.AllDirectories ).Length;
-            if ( fileCount != 2 )
+                dwo.DownloadFiles().Wait();
+                var fileCount = Directory.GetFiles( finalDir, "*.exe", SearchOption.AllDirectories ).Length;
+                if ( fileCount != 2 )
+                {
+                    // Remove directory because this would prevent a download next time
+                    throw new InvalidOperationException( $"Failed to obtain dependency walker. Expected two executables to find in {finalDir}, found {fileCount}" );
+                }
+            }
+            catch ( Exception )
             {
-                throw new InvalidOperationException( $"Failed to obtain dependency walker. Expected two executables to find in {finalDir}, found {fileCount}" );
+                Directory.Delete( finalDir, true );
+                throw;
             }
+
+
             logger.Info( "Successfully obtained dependency walker" );

             return finalDir;


accepted suggest on issue #16

accepted suggest on issue #16

--- AzureDirectory/AzureIndexInput.cs
+++ AzureDirectory/AzureIndexInput.cs
@@ -64,9 +64,12 @@
                         fFileNeeded = true;
                     else
                     {
-                        // there seems to be an error of 1 tick which happens every once in a while
-                        // for now we will say that if they are within 1 tick of each other and same length
-                        var cachedLastModifiedUTC = new DateTime(CacheDirectory.FileModified(fileName), DateTimeKind.Local).ToUniversalTime();
+
+                        // cachedLastModifiedUTC was not ouputting with a date (just time) and the time was always off
+                        long unixDate = CacheDirectory.FileModified(fileName);
+                        DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+                        var cachedLastModifiedUTC = start.AddMilliseconds(unixDate).ToUniversalTime();
+
                         if (cachedLastModifiedUTC != blobLastModifiedUTC)
                         {
                             var timeSpan = blobLastModifiedUTC.Subtract(cachedLastModifiedUTC);


Comment out reference to TypeAccessor.

Comment out reference to TypeAccessor.

Comment out reference to TypeAccessor.

--- DevelopmentInProgress.DipMapper/DipMapper.cs
+++ DevelopmentInProgress.DipMapper/DipMapper.cs
@@ -691,11 +691,12 @@
                 reader = command.ExecuteReader();

                 var newT = New<T>(optimiseObjectCreation);
-                var typeAccessor = TypeAccessor.Create(typeof(T));
+                //var typeAccessor = TypeAccessor.Create(typeof(T));

                 while (reader.Read())
                 {
-                    var t = DbHelpers[connType].ReadData<T>(reader, newT(), propertyInfos, typeAccessor);
+                    //var t = DbHelpers[connType].ReadData<T>(reader, newT(), propertyInfos, typeAccessor);
+                    var t = DbHelpers[connType].ReadData<T>(reader, newT(), propertyInfos);
                     result.Add(t);
                 }
             }
@@ -735,7 +736,7 @@
             string GetSqlSelectWithIdentity<T>(string sqlInsert, IEnumerable<PropertyInfo> propertyInfos, string identityField);
             string GetParameterName(string name, bool isWhereClause = false);
             void AddDataParameter(IDbCommand comnmand, string parameterName, object data);
-            T ReadData<T>(IDataReader reader, T t, IEnumerable<PropertyInfo> propertyInfos, TypeAccessor typeAccessor);
+            T ReadData<T>(IDataReader reader, T t, IEnumerable<PropertyInfo> propertyInfos);
         }

         internal class DefaultDbHelper : IDbHelper
@@ -758,12 +759,13 @@
                 return sqlInsert;
             }

-            public virtual T ReadData<T>(IDataReader reader, T t, IEnumerable<PropertyInfo> propertyInfos, TypeAccessor typeAccessor)
+            public virtual T ReadData<T>(IDataReader reader, T t, IEnumerable<PropertyInfo> propertyInfos)
             {
                 foreach (var propertyInfo in propertyInfos)
                 {
                     var value = reader[propertyInfo.Name];
-                    typeAccessor[t, propertyInfo.Name] = value == DBNull.Value ? null : value;
+                    //typeAccessor[t, propertyInfo.Name] = value == DBNull.Value ? null : value;
+                    propertyInfo.SetValue(t, value);
                 }

                 return t;
@@ -826,7 +828,7 @@
                 return isWhereClause ? ":p" + name : ":" + name;
             }

-            public override T ReadData<T>(IDataReader reader, T t, IEnumerable<PropertyInfo> propertyInfos, TypeAccessor typeAccessor)
+            public override T ReadData<T>(IDataReader reader, T t, IEnumerable<PropertyInfo> propertyInfos)
             {

                 for (int i = 0; i < reader.FieldCount; i++)


DeviceAttribute_Max had a wrong value for the flags

--- ColorManagerTests/ICC/Data/StructsData.cs
+++ ColorManagerTests/ICC/Data/StructsData.cs
@@ -113,7 +113,7 @@
         public static readonly byte[] DeviceAttribute_Min = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
         public static readonly byte[] DeviceAttribute_Var1 = { 0x50, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF };
         public static readonly byte[] DeviceAttribute_Var2 = { 0xA0, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00 };
-        public static readonly byte[] DeviceAttribute_Max = { 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };
+        public static readonly byte[] DeviceAttribute_Max = { 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };

         #endregion


Removed a couple of test-vars which I wasn't using and forgot to take out.

--- DieFledermaus/DieFledermauZEmptyDirectory.cs
+++ DieFledermaus/DieFledermauZEmptyDirectory.cs
@@ -162,8 +162,8 @@
         internal static void CheckStream(DieFledermausStream stream)
         {
             const int ForwardSlashReadByte = '/';
-            int readByte1 = -5, readByte2 = -5;
-            if (DieFledermausStream._textEncoding.GetByteCount(stream.Filename) > byte.MaxValue || (readByte1 = stream.ReadByte()) != ForwardSlashReadByte || (readByte2 = stream.ReadByte()) >= 0 ||
+
+            if (DieFledermausStream._textEncoding.GetByteCount(stream.Filename) > byte.MaxValue || stream.ReadByte() != ForwardSlashReadByte || stream.ReadByte() >= 0 ||
                 stream.ModifiedTime.HasValue || stream.CreatedTime.HasValue)
                 throw new InvalidDataException(TextResources.InvalidDataMaus);
         }


Just a rebuild

Just a rebuild

--- Test/TestsModel/OrderModelTests.cs
+++ Test/TestsModel/OrderModelTests.cs
@@ -43,7 +43,8 @@
             expectedFields.Add(new NameAndType("RequestNum", "System.String", new List<string>()));
             expectedFields.Add(new NameAndType("ResultsFileIdentifier", "System.String", new List<string>()));
             expectedFields.Add(new NameAndType("Status", "System.String", new List<string>()));
-            expectedFields.Add(new NameAndType("Updated", "System.DateTime", new List<string>()));
+            expectedFields.Add(new NameAndType("Updated", "System.DateTime", new List<string>()));
+
             #endregion Arrange

             AttributeAndFieldValidation.ValidateFieldsAndAttributes(expectedFields, typeof(Order));


dispose of the streams in CommitSignature

--- CompressImagesFunction/CommitSignature.cs
+++ CompressImagesFunction/CommitSignature.cs
@@ -10,12 +10,14 @@
     {
         public static string Sign(string commitMessage, string privateKey, string password)
         {
-            var privateKeyStream = new MemoryStream(Encoding.ASCII.GetBytes(privateKey));
-            var outputStream = new MemoryStream();
-            var signedMessage = DoSigning(commitMessage, privateKeyStream, outputStream, password.ToCharArray());
-
-            // cutoff the actual message, we just want the signature
-            return signedMessage.Substring(signedMessage.IndexOf("-----BEGIN PGP SIGNATURE", StringComparison.Ordinal));
+            using (var privateKeyStream = new MemoryStream(Encoding.ASCII.GetBytes(privateKey)))
+            using (var outputStream = new MemoryStream())
+            {
+                var signedMessage = DoSigning(commitMessage, privateKeyStream, outputStream, password.ToCharArray());
+
+                // cutoff the actual message, we just want the signature
+                return signedMessage.Substring(signedMessage.IndexOf("-----BEGIN PGP SIGNATURE", StringComparison.Ordinal));
+            }
         }

         private static string DoSigning(string input, Stream keyIn, Stream outputStream, char[] pass)
@@ -34,42 +36,40 @@
                 signatureGenerator.SetHashedSubpackets(subpacketGenerator.Generate());
             }

-            Stream inputStream = new MemoryStream(Encoding.ASCII.GetBytes(input));
-            var armoredOut = new ArmoredOutputStream(outputStream);
-
-            armoredOut.BeginClearText(digest);
-
-            // note the last \n/\r/\r\n in the file is ignored
-            var lineOut = new MemoryStream();
-            int lookAhead = ReadInputLine(lineOut, inputStream);
-
-            ProcessLine(armoredOut, signatureGenerator, lineOut.ToArray());
-
-            if (lookAhead != -1)
-            {
-                do
-                {
-                    lookAhead = ReadInputLine(lineOut, lookAhead, inputStream);
-
-                    signatureGenerator.Update((byte)'\n');
-
+            using (var inputStream = new MemoryStream(Encoding.ASCII.GetBytes(input)))
+            using (var armoredOut = new ArmoredOutputStream(outputStream))
+            {
+                armoredOut.BeginClearText(digest);
+
+                // note the last \n/\r/\r\n in the file is ignored
+                using (var lineOut = new MemoryStream())
+                {
+                    int lookAhead = ReadInputLine(lineOut, inputStream);
                     ProcessLine(armoredOut, signatureGenerator, lineOut.ToArray());
-                }
-                while (lookAhead != -1);
-            }
-
-            inputStream.Close();
-
-            armoredOut.EndClearText();
-
-            var bcpgOutput = new BcpgOutputStream(armoredOut);
-
-            signatureGenerator.Generate().Encode(bcpgOutput);
-
-            armoredOut.Close();
-
-            outputStream.Seek(0, 0);
-            return new StreamReader(outputStream).ReadToEnd();
+
+                    if (lookAhead != -1)
+                    {
+                        do
+                        {
+                            lookAhead = ReadInputLine(lineOut, lookAhead, inputStream);
+                            signatureGenerator.Update((byte)'\n');
+                            ProcessLine(armoredOut, signatureGenerator, lineOut.ToArray());
+                        }
+                        while (lookAhead != -1);
+                    }
+
+                    inputStream.Close();
+                    armoredOut.EndClearText();
+
+                    using (var bcpgOutput = new BcpgOutputStream(armoredOut))
+                    {
+                        signatureGenerator.Generate().Encode(bcpgOutput);
+                        armoredOut.Close();
+                        outputStream.Seek(0, 0);
+                        return new StreamReader(outputStream).ReadToEnd();
+                    }
+                }
+            }
         }

         private static PgpSecretKeyRingBundle CreatePgpSecretKeyRingBundle(Stream keyInStream)


Added logging for when leaving webq.

Added logging for when leaving webq.

--- ConDep.Console/Deploy/CmdDeployHandler.cs
+++ ConDep.Console/Deploy/CmdDeployHandler.cs
@@ -67,6 +67,7 @@
             {
                 if (_webQ != null)
                 {
+                    Logger.Info("Leaving WebQ");
                     _webQ.LeaveQueue();
                 }


Fix Core build

Fix Core build

--- Tests/Linq/Data/RetryPolicyTest.cs
+++ Tests/Linq/Data/RetryPolicyTest.cs
@@ -98,6 +98,7 @@
 			Assert.AreEqual(2, ret.Count); // 1 - open connection, 1 - execute command
 		}

+#if !NOASYNC
 		[Test, DataContextSource(false)]
 		public void RetryPoliceTestAsync(string context)
 		{
@@ -118,5 +119,6 @@

 			Assert.AreEqual(2, ret.Count); // 1 - open connection, 1 - execute command
 		}
+#endif
 	}
 }


[Package Explorer] Do not block the UI when connecting to package source.

--- Tools/NuGet/NuGetPackageExplorer/PackageViewModel/PackageChooser/PackageChooserViewModel.cs
+++ Tools/NuGet/NuGetPackageExplorer/PackageViewModel/PackageChooser/PackageChooserViewModel.cs
@@ -4,6 +4,7 @@
 using System.ComponentModel;
 using System.Diagnostics;
 using System.Linq;
+using System.Threading;
 using System.Threading.Tasks;
 using NuGet;
 using PackageExplorerViewModel.Types;
@@ -83,19 +84,21 @@
             }
         }

+        /// <summary>
+        /// This method needs to be run on background thread so as not to block UI thread
+        /// </summary>
+        /// <returns></returns>
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
-        private IPackageRepository PackageRepository {
-            get {
-                if (_packageRepository == null || _packageRepository.Source != PackageSource) {
-                    try {
-                        _packageRepository = PackageRepositoryFactory.Default.CreateRepository(PackageSource);
-                    }
-                    catch (Exception) {
-                        _packageRepository = null;
-                    }
-                }
-                return _packageRepository;
-            }
+        private IPackageRepository GetPackageRepository() {
+            if (_packageRepository == null || _packageRepository.Source != PackageSource) {
+                try {
+                    _packageRepository = PackageRepositoryFactory.Default.CreateRepository(PackageSource);
+                }
+                catch (Exception) {
+                    _packageRepository = null;
+                }
+            }
+            return _packageRepository;
         }

         public ObservableCollection<string> PackageSources
@@ -213,13 +216,13 @@
                     if (result.IsFaulted) {
                         AggregateException exception = result.Exception;
                         StatusContent = (exception.InnerException ?? exception).Message;
-
                         ClearPackages();
                     }
                     else if (!result.IsCanceled) {
                         ShowPackages(result.Result.Item1, result.Result.Item2, page);
                         StatusContent = String.Empty;
-                        OnPropertyChanged("SortDirection");
+                        // update sort column glyph
+                        SortCounter++;
                     }

                     IsEditable = true;
@@ -237,37 +240,51 @@
         }

         private void LoadPackages() {
-            if (PackageRepository == null) {
-                return;
-            }
-
-            var query = PackageRepository.GetPackages();
-            if (!String.IsNullOrEmpty(_currentSearch)) {
-                query = query.Find(_currentSearch.Split(' '));
-            }
-
-            switch (SortColumn) {
-                case "Id":
-                    query = SortDirection == ListSortDirection.Descending ? query.OrderByDescending(p => p.Id) : query.OrderBy(p => p.Id);
-                    break;
-
-                case "Authors":
-                    query = SortDirection == ListSortDirection.Descending ? query.OrderByDescending(p => p.Authors) : query.OrderBy(p => p.Authors);
-                    break;
-
-                case "VersionDownloadCount":
-                    query = SortDirection == ListSortDirection.Descending ? query.OrderByDescending(p => p.VersionDownloadCount) : query.OrderBy(p => p.VersionDownloadCount);
-                    break;
-
-                default:
-                    query = query.OrderByDescending(p => p.VersionDownloadCount);
-                    break;
-            }
-
-            _currentQuery = query;
-
-            // every time the search query changes, we reset to page 0
-            LoadPage(0);
+            StatusContent = "Connecting to package source...";
+
+            TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
+            Task.Factory.StartNew<IPackageRepository>(GetPackageRepository).ContinueWith(
+                task => {
+                    IPackageRepository repository = task.Result;
+                    if (repository == null)
+                    {
+                        StatusContent = String.Empty;
+                        ClearPackages();
+                        return;
+                    }
+
+                    var query = repository.GetPackages();
+                    if (!String.IsNullOrEmpty(_currentSearch)) {
+                        query = query.Find(_currentSearch.Split(' '));
+                    }
+
+                    switch (SortColumn) {
+                        case "Id":
+                            query = SortDirection == ListSortDirection.Descending ? query.OrderByDescending(p => p.Id) : query.OrderBy(p => p.Id);
+                            break;
+
+                        case "Authors":
+                            query = SortDirection == ListSortDirection.Descending ? query.OrderByDescending(p => p.Authors) : query.OrderBy(p => p.Authors);
+                            break;
+
+                        case "VersionDownloadCount":
+                            query = SortDirection == ListSortDirection.Descending ? query.OrderByDescending(p => p.VersionDownloadCount) : query.OrderBy(p => p.VersionDownloadCount);
+                            break;
+
+                        default:
+                            query = query.OrderByDescending(p => p.VersionDownloadCount);
+                            break;
+                    }
+
+                    _currentQuery = query;
+
+                    // every time the search query changes, we reset to page 0
+                    LoadPage(0);
+                },
+                CancellationToken.None,
+                TaskContinuationOptions.OnlyOnRanToCompletion,
+                uiScheduler
+            );
         }

         public void Search(string searchTerm) {
@@ -302,14 +319,10 @@
         public void ChangePackageSource(string source) {
             if (PackageSource != source || _currentQuery == null) {
                 PackageSource = source;
+                // add the new source to MRU list
                 _packageSourceManager.NotifyPackageSourceAdded(source);

-                if (PackageRepository != null) {
-                    LoadPackages();
-                }
-                else {
-                    ClearPackages();
-                }
+                LoadPackages();
             }
         }


Turned the IsLargeAddressAware() into an Extension method of Assembly.

--- Easy.Common/Extensions/AssemblyExtensions.cs
+++ Easy.Common/Extensions/AssemblyExtensions.cs
@@ -121,7 +121,7 @@
         /// Queries the assembly's headers to find if it is <c>LARGEADDRESSAWARE</c>.
         /// <remarks>The method is equivalent to running <c>DumpBin</c> on the assembly.</remarks>
         /// </summary>
-        public static bool IsAssemblyLargeAddressAware(Assembly assembly) =>
+        public static bool IsAssemblyLargeAddressAware(this Assembly assembly) =>
             ApplicationHelper.IsLargeAddressAware(assembly.Location);
     }
 }


Fixed bug where benchmark would use wrong GPU

git-svn-id: c5150317060de8552ff1058b2431ffc13c353cb7@465 0d3f3ea6-ac51-0410-a1de-edb5cd2a854a

--- EncogOpenCLBenchmark/BenchmarkWindow.xaml.cs
+++ EncogOpenCLBenchmark/BenchmarkWindow.xaml.cs
@@ -328,7 +328,6 @@
                 BasicNetwork network = EncogUtility.SimpleFeedForward(
                     training.InputSize, this.paramHidden1Neurons, this.paramHidden2Neurons, training.IdealSize, true);

-                EncogCLDevice device = EncogFramework.Instance.CL.ChooseDevice();
                 OpenCLTrainingProfile profile = new OpenCLTrainingProfile(device,
                     this.paramLocalRatio, this.paramGlobalRatio, this.paramSegRatio);


Generate LeftShift assignment as well

Generate LeftShift assignment as well

--- CorsairKeyboardLayoutGenerator/Program.cs
+++ CorsairKeyboardLayoutGenerator/Program.cs
@@ -86,6 +86,15 @@
         {
             byte[] bytes = BaseLayoutGuid.ToByteArray();
             Array.Copy(BitConverter.GetBytes(DeterministicHashString(name)), 0, bytes, 16 - 4, 4);
+            return new Guid(bytes);
+        }
+
+        static Guid BaseSwitchActionGuid = new Guid("CECD94C6-9F92-4E08-9D53-8222754D3DF1");
+
+        static Guid MakeSwitchActionGuid(string targetLayoutName)
+        {
+            byte[] bytes = BaseSwitchActionGuid.ToByteArray();
+            Array.Copy(BitConverter.GetBytes(DeterministicHashString(targetLayoutName)), 0, bytes, 16 - 4, 4);
             return new Guid(bytes);
         }

@@ -140,7 +149,7 @@
                 if (Modes.TryGetValue(guid, out modes))
                 {
                     foreach (XmlNode mode in modes)
-                        DoLayout(layout, mode);
+                        DoLayout(layoutName, layout, mode);
                 }
                 else
                 {
@@ -151,7 +160,7 @@
                     newMode.SelectSingleNode("skipped").InnerText = layoutName.Contains("shift") ? "1" : "0";
                     template.ParentNode.InsertAfter(newMode, template);

-                    DoLayout(layout, newMode);
+                    DoLayout(layoutName, layout, newMode);
                 }
             }

@@ -206,6 +215,47 @@
                 actionsNode.AppendChild(newAction);
             }

+            foreach (string targetLayoutName in Layouts.Keys.Where(key => key.Contains("shift")))
+            {
+                Guid actionGuid = MakeSwitchActionGuid(targetLayoutName);
+                if (actions.Contains(actionGuid))
+                    continue;
+
+                Guid targetGuid = MakeLayoutGuid(targetLayoutName);
+
+                XmlDocumentFragment newAction = xml.CreateDocumentFragment();
+                newAction.InnerXml = $@"
+  <Action version=""7"" Type=""modeSwitch"">
+   <Id>{actionGuid.ToString("B")}</Id>
+   <Name>Mode switching to Symbols ({SecurityElement.Escape(targetLayoutName)})</Name>
+   <Note></Note>
+   <Date>2016-03-25</Date>
+   <BindCounter>1</BindCounter>
+   <Visible>0</Visible>
+   <Predefined>0</Predefined>
+   <ExecutionHints>
+    <ExecEvent>press</ExecEvent>
+    <TerminateWhenStartedAgain>false</TerminateWhenStartedAgain>
+    <RestartWhenStartedAgain>false</RestartWhenStartedAgain>
+   </ExecutionHints>
+   <RepeatOptions version=""1"">
+    <Mode>1</Mode>
+    <DelayMode>0</DelayMode>
+    <AmountOfRepeats>1</AmountOfRepeats>
+    <Delay>0</Delay>
+    <RandomDelayFrom>0</RandomDelayFrom>
+    <RandomDelayTo>0</RandomDelayTo>
+   </RepeatOptions>
+   <ActionLighting>{{00000000-0000-0000-0000-000000000000}}</ActionLighting>
+   <SwitchingType>1</SwitchingType>
+   <DirectModeId>{targetGuid.ToString("B")}</DirectModeId>
+   <OptionSelected>1</OptionSelected>
+   <MKeyName></MKeyName>
+  </Action>";
+
+                actionsNode.AppendChild(newAction);
+            }
+
             XmlWriterSettings settings = new XmlWriterSettings
             {
                 NewLineChars = "\n",
@@ -217,7 +267,7 @@
                 xml.Save(writer);
         }

-        static void DoLayout(Layout layout, XmlNode mode)
+        static void DoLayout(string layoutName, Layout layout, XmlNode mode)
         {
             XmlNode assignments = mode.SelectSingleNode("assigments");
             int[] letterTable = layout.KeyTable;
@@ -229,16 +279,22 @@
                            .Attributes["action"].InnerText = key.ToString("B");
             }

-            if (layout.NumTableName == null)
-                return;
-
-            int[] numberTable = layout.NumberTable;
-
-            for (int i = 0; i < 10; i++)
-            {
-                Guid key = MakeKeyGuid(numberTable[i]);
-                assignments.SelectSingleNode("assigment[@key='" + i + "']")
-                           .Attributes["action"].InnerText = key.ToString("B");
+            if (layout.NumTableName != null)
+            {
+                int[] numberTable = layout.NumberTable;
+
+                for (int i = 0; i < 10; i++)
+                {
+                    Guid key = MakeKeyGuid(numberTable[i]);
+                    assignments.SelectSingleNode("assigment[@key='" + i + "']")
+                               .Attributes["action"].InnerText = key.ToString("B");
+                }
+            }
+
+            if (!layoutName.Contains("shift") && Layouts.ContainsKey(layoutName + " shift"))
+            {
+                assignments.SelectSingleNode("assigment[@key='LeftShift']")
+                           .Attributes["action"].InnerText = MakeSwitchActionGuid(layoutName + " shift").ToString("B");
             }
         }
     }


Fix an issue that Callback.MachineStart and MachineStop called in the reverse order when the machien is hot-reloaded.

--- CreviceApp/GM.ReloadableGestureMachine.cs
+++ CreviceApp/GM.ReloadableGestureMachine.cs
@@ -158,8 +158,8 @@
                         }
                         else
                         {
+                            Instance = gmCluster;
                             gmCluster.Run();
-                            Instance = gmCluster;
                             if (runtimeError == null)
                             {
                                 _config.MainForm.ShowInfoBalloon(gmCluster);


Fixes #16 - Asserts in some tests have "Expected" and "Actual" mixed

--- FlacLibSharp/FlacLibSharp.Test/ParseTests.cs
+++ FlacLibSharp/FlacLibSharp.Test/ParseTests.cs
@@ -56,7 +56,6 @@
         [TestMethod]
         public void OpenFlacFileAndCheckStreamInfo()
         {
-
             using (FlacFile file = new FlacFile(@"Data\testfile1.flac"))
             {
                 //Assert.IsTrue(file.Metadata.Count > 0, "No metadata blocks were found for the test file, this is not correct!");
@@ -66,15 +65,15 @@
                     {
                         StreamInfo info = (StreamInfo)block;
                         string md5sum = Helpers.ByteHelper.ByteArrayToString(info.MD5Signature);
-                        Assert.AreEqual(md5sum, "1d2e54a059ea776787ef66f1f93d3e34");
-                        Assert.AreEqual(info.MinimumBlockSize, 4096);
-                        Assert.AreEqual(info.MaximumBlockSize, 4096);
-                        Assert.AreEqual(info.MinimumFrameSize, (uint)1427);
-                        Assert.AreEqual(info.MaximumFrameSize, (uint)7211);
-                        Assert.AreEqual(info.SampleRateHz, (uint)44100);
-                        Assert.AreEqual(info.Channels, 1);
-                        Assert.AreEqual(info.BitsPerSample, 16);
-                        Assert.AreEqual(info.Samples, 1703592);
+                        Assert.AreEqual("1d2e54a059ea776787ef66f1f93d3e34", md5sum);
+                        Assert.AreEqual(4096, info.MinimumBlockSize);
+                        Assert.AreEqual(4096, info.MaximumBlockSize);
+                        Assert.AreEqual<uint>(1427, info.MinimumFrameSize);
+                        Assert.AreEqual<uint>(7211, info.MaximumFrameSize);
+                        Assert.AreEqual<uint>(44100, info.SampleRateHz);
+                        Assert.AreEqual(1, info.Channels);
+                        Assert.AreEqual(16, info.BitsPerSample);
+                        Assert.AreEqual(1703592, info.Samples);
                     }
                 }
             }
@@ -110,18 +109,18 @@
                     if (block.Header.Type == MetadataBlockHeader.MetadataBlockType.VorbisComment)
                     {
                         VorbisComment info = (VorbisComment)block;
-                        Assert.AreEqual(info["ARTIST"], "Ziggystar");
-                        Assert.AreEqual(info.Artist, "Ziggystar");
-                        Assert.AreEqual(info["TITLE"], "Roland jx3p demo");
-                        Assert.AreEqual(info.Title, "Roland jx3p demo");
-                        Assert.AreEqual(info["ALBUM"], "Wiki Commons");
-                        Assert.AreEqual(info.Album, "Wiki Commons");
-                        Assert.AreEqual(info["DATE"], "2005");
-                        Assert.AreEqual(info.Date, "2005");
-                        Assert.AreEqual(info["TRACKNUMBER"], "01");
-                        Assert.AreEqual(info.TrackNumber, "01");
-                        Assert.AreEqual(info["GENRE"], "Electronic");
-                        Assert.AreEqual(info.Genre, "Electronic");
+                        Assert.AreEqual("Ziggystar", info["ARTIST"]);
+                        Assert.AreEqual("Ziggystar", info.Artist);
+                        Assert.AreEqual("Roland jx3p demo", info["TITLE"]);
+                        Assert.AreEqual("Roland jx3p demo", info.Title);
+                        Assert.AreEqual("Wiki Commons", info["ALBUM"]);
+                        Assert.AreEqual("Wiki Commons", info.Album);
+                        Assert.AreEqual("2005", info["DATE"]);
+                        Assert.AreEqual("2005", info.Date);
+                        Assert.AreEqual("01", info["TRACKNUMBER"]);
+                        Assert.AreEqual("01", info.TrackNumber);
+                        Assert.AreEqual("Electronic", info["GENRE"]);
+                        Assert.AreEqual("Electronic", info.Genre);
                         Assert.IsFalse(info.ContainsField("UNEXISTINGKEY"));
                     }
                 }
@@ -134,10 +133,10 @@
         [TestMethod]
         public void CheckFastFlacFunctions()
         {
-            Assert.AreEqual(FastFlac.GetTitle(@"Data\testfile1.flac"), "Roland jx3p demo");
-            Assert.AreEqual(FastFlac.GetArtist(@"Data\testfile1.flac"), "Ziggystar");
-            Assert.AreEqual(FastFlac.GetAlbum(@"Data\testfile1.flac"), "Wiki Commons");
-            Assert.AreEqual(FastFlac.GetDuration(@"Data\testfile1.flac"), 38);
+            Assert.AreEqual("Roland jx3p demo", FastFlac.GetTitle(@"Data\testfile1.flac"));
+            Assert.AreEqual("Ziggystar", FastFlac.GetArtist(@"Data\testfile1.flac"));
+            Assert.AreEqual("Wiki Commons", FastFlac.GetAlbum(@"Data\testfile1.flac"));
+            Assert.AreEqual(38, FastFlac.GetDuration(@"Data\testfile1.flac"));
         }

         /// <summary>
@@ -155,8 +154,8 @@
                     if (block.Header.Type == MetadataBlockHeader.MetadataBlockType.Picture)
                     {
                         Picture info = (Picture)block;
-                        Assert.AreEqual(info.Height, (UInt32)213);
-                        Assert.AreEqual(info.Width, (UInt32)400);
+                        Assert.AreEqual<UInt32>(213, info.Height);
+                        Assert.AreEqual<UInt32>(400, info.Width);
                         Assert.AreEqual(info.PictureType, PictureType.CoverFront);
                         Assert.AreEqual(info.MIMEType, "image/jpeg");
                     }
@@ -196,21 +195,21 @@
                 // There's a seekpoint every 2 seconds so there should be 20 seekpoints ...
                 Assert.AreEqual(20, seekTable.SeekPoints.Count);
                 // We know seekpoint 0 should start at sample number 0, with an offset of 0 and number of samples = 4096
-                Assert.AreEqual(seekTable.SeekPoints.Values[0].FirstSampleNumber, (ulong)0);
-                Assert.AreEqual(seekTable.SeekPoints.Values[0].ByteOffset, (ulong)0);
-                Assert.AreEqual(seekTable.SeekPoints.Values[0].NumberOfSamples, (ushort)4096);
+                Assert.AreEqual<ulong>(0, seekTable.SeekPoints.Values[0].FirstSampleNumber);
+                Assert.AreEqual<ulong>(0, seekTable.SeekPoints.Values[0].ByteOffset);
+                Assert.AreEqual<ulong>(4096, seekTable.SeekPoints.Values[0].NumberOfSamples);
                 // We know seekpoint 2 should start at sample number 176128, with an offset of 121744 and number of samples = 4096
-                Assert.AreEqual(seekTable.SeekPoints.Values[2].FirstSampleNumber, (ulong)176128);
-                Assert.AreEqual(seekTable.SeekPoints.Values[2].ByteOffset, (ulong)121744);
-                Assert.AreEqual(seekTable.SeekPoints.Values[2].NumberOfSamples, (ushort)4096);
+                Assert.AreEqual<ulong>(176128, seekTable.SeekPoints.Values[2].FirstSampleNumber);
+                Assert.AreEqual<ulong>(121744, seekTable.SeekPoints.Values[2].ByteOffset);
+                Assert.AreEqual<ushort>(4096, seekTable.SeekPoints.Values[2].NumberOfSamples);
                 // We know seekpoint 5 should start at sample number 438272, with an offset of 302152 and number of samples = 4096
-                Assert.AreEqual(seekTable.SeekPoints.Values[5].FirstSampleNumber, (ulong)438272);
-                Assert.AreEqual(seekTable.SeekPoints.Values[5].ByteOffset, (ulong)302152);
-                Assert.AreEqual(seekTable.SeekPoints.Values[5].NumberOfSamples, (ushort)4096);
+                Assert.AreEqual<ulong>(438272, seekTable.SeekPoints.Values[5].FirstSampleNumber);
+                Assert.AreEqual<ulong>(302152, seekTable.SeekPoints.Values[5].ByteOffset);
+                Assert.AreEqual<ushort>(4096, seekTable.SeekPoints.Values[5].NumberOfSamples);
                 // We know seekpoint 19 should start at sample number 1675264, with an offset of 1451579 and number of samples = 4096
-                Assert.AreEqual(seekTable.SeekPoints.Values[19].FirstSampleNumber, (ulong)1675264);
-                Assert.AreEqual(seekTable.SeekPoints.Values[19].ByteOffset, (ulong)1451579);
-                Assert.AreEqual(seekTable.SeekPoints.Values[19].NumberOfSamples, (ushort)4096);
+                Assert.AreEqual<ulong>(1675264, seekTable.SeekPoints.Values[19].FirstSampleNumber);
+                Assert.AreEqual<ulong>(1451579, seekTable.SeekPoints.Values[19].ByteOffset);
+                Assert.AreEqual<ushort>(4096, seekTable.SeekPoints.Values[19].NumberOfSamples);
                 // Not testing ALL seekpoints ...
             }
         }
@@ -271,40 +270,40 @@
                 var cueSheet = file.CueSheet;
                 Assert.IsNotNull(cueSheet, "No cuesheet found.");

-                Assert.AreEqual(cueSheet.Header.MetaDataBlockLength, (UInt32)600);
-                Assert.AreEqual<ulong>(cueSheet.LeadInSampleCount, 88200);
-                Assert.AreEqual(cueSheet.TrackCount, 4);
-                Assert.AreEqual(cueSheet.MediaCatalog, String.Empty);
+                Assert.AreEqual<UInt32>(600, cueSheet.Header.MetaDataBlockLength);
+                Assert.AreEqual<ulong>(88200, cueSheet.LeadInSampleCount);
+                Assert.AreEqual(4, cueSheet.TrackCount);
+                Assert.AreEqual(String.Empty, cueSheet.MediaCatalog);

                 Assert.AreEqual(cueSheet.TrackCount, cueSheet.Tracks.Count);

-                Assert.AreEqual<ulong>(cueSheet.Tracks[0].TrackOffset, 0);
-                Assert.AreEqual(cueSheet.Tracks[0].IndexPointCount, 1);
-                Assert.AreEqual(cueSheet.Tracks[0].TrackNumber, 1);
-                Assert.AreEqual(cueSheet.Tracks[0].IndexPointCount, cueSheet.Tracks[0].IndexPoints.Count);
-                Assert.AreEqual(cueSheet.Tracks[0].IsAudioTrack, true);
-                Assert.AreEqual(cueSheet.Tracks[0].IsPreEmphasis, false);
-                Assert.AreEqual(cueSheet.Tracks[0].ISRC, String.Empty);
-
-                Assert.AreEqual<ulong>(cueSheet.Tracks[1].TrackOffset, 661500);
-                Assert.AreEqual(cueSheet.Tracks[1].IndexPointCount, 2);
-                Assert.AreEqual(cueSheet.Tracks[1].TrackNumber, 2);
-                Assert.AreEqual(cueSheet.IsCDCueSheet, false);
-                Assert.AreEqual(cueSheet.Tracks[1].IndexPointCount, cueSheet.Tracks[1].IndexPoints.Count);
-                Assert.AreEqual(cueSheet.Tracks[1].IsAudioTrack, true);
-                Assert.AreEqual(cueSheet.Tracks[1].IsPreEmphasis, false);
-                Assert.AreEqual(cueSheet.Tracks[1].ISRC, String.Empty);
-
-                Assert.AreEqual<ulong>(cueSheet.Tracks[2].TrackOffset, 1102500);
-                Assert.AreEqual(cueSheet.Tracks[2].IndexPointCount, 2);
-                Assert.AreEqual(cueSheet.Tracks[2].TrackNumber, 3);
-                Assert.AreEqual(cueSheet.Tracks[2].IndexPointCount, cueSheet.Tracks[2].IndexPoints.Count);
-                Assert.AreEqual(cueSheet.Tracks[2].IsAudioTrack, true);
-                Assert.AreEqual(cueSheet.Tracks[2].IsPreEmphasis, false);
-                Assert.AreEqual(cueSheet.Tracks[2].ISRC, String.Empty);
-
-                Assert.AreEqual<ulong>(cueSheet.Tracks[3].TrackOffset, 1703592);
-                Assert.AreEqual(cueSheet.Tracks[3].TrackNumber, 170); // Lead-out
+                Assert.AreEqual<ulong>(0, cueSheet.Tracks[0].TrackOffset);
+                Assert.AreEqual(1, cueSheet.Tracks[0].IndexPointCount);
+                Assert.AreEqual(1, cueSheet.Tracks[0].TrackNumber);
+                Assert.AreEqual(cueSheet.Tracks[0].IndexPoints.Count, cueSheet.Tracks[0].IndexPointCount);
+                Assert.AreEqual(true, cueSheet.Tracks[0].IsAudioTrack);
+                Assert.AreEqual(false, cueSheet.Tracks[0].IsPreEmphasis);
+                Assert.AreEqual(String.Empty, cueSheet.Tracks[0].ISRC);
+
+                Assert.AreEqual<ulong>(661500, cueSheet.Tracks[1].TrackOffset);
+                Assert.AreEqual(2, cueSheet.Tracks[1].IndexPointCount);
+                Assert.AreEqual(2, cueSheet.Tracks[1].TrackNumber);
+                Assert.AreEqual(false, cueSheet.IsCDCueSheet);
+                Assert.AreEqual(cueSheet.Tracks[1].IndexPoints.Count, cueSheet.Tracks[1].IndexPointCount, cueSheet.Tracks[1].IndexPoints.Count);
+                Assert.AreEqual(true, cueSheet.Tracks[1].IsAudioTrack);
+                Assert.AreEqual(false, cueSheet.Tracks[1].IsPreEmphasis);
+                Assert.AreEqual(String.Empty, cueSheet.Tracks[1].ISRC);
+
+                Assert.AreEqual<ulong>(1102500, cueSheet.Tracks[2].TrackOffset);
+                Assert.AreEqual(2, cueSheet.Tracks[2].IndexPointCount);
+                Assert.AreEqual(3, cueSheet.Tracks[2].TrackNumber);
+                Assert.AreEqual(cueSheet.Tracks[2].IndexPoints.Count, cueSheet.Tracks[2].IndexPointCount);
+                Assert.AreEqual(true, cueSheet.Tracks[2].IsAudioTrack);
+                Assert.AreEqual(false, cueSheet.Tracks[2].IsPreEmphasis);
+                Assert.AreEqual(String.Empty, cueSheet.Tracks[2].ISRC);
+
+                Assert.AreEqual<ulong>(1703592, cueSheet.Tracks[3].TrackOffset);
+                Assert.AreEqual(170, cueSheet.Tracks[3].TrackNumber); // Lead-out
             }
         }


Codefix: StatefulSequence: cheaper check first

@glen3b, thanks for this code fix - null check first is a good idea.
Also, one more method now documented. :)

--- FontEffectsLib/CoreTypes/StatefulSequence.cs
+++ FontEffectsLib/CoreTypes/StatefulSequence.cs
@@ -44,6 +44,9 @@
         /// </summary>
         protected List<bool> _sequenceCompleted = new List<bool>();

+        /// <summary>
+        /// Gets a dictionary which stores boolean values in corresponding positions to the <see cref="T:List"/> of <see cref="IStateful"/> objects.
+        /// </summary>
         public Dictionary<Type, object> MonitoredStates
         {
             get { return _monitoredStates; }
@@ -172,7 +175,7 @@
                     }

                     //If all items completed the sequence, raise SequenceReachedMonitoredState event
-                    if (_sequenceCompleted.All<bool>(b => b) && SequenceReachedMonitoredState != null)
+                    if (SequenceReachedMonitoredState != null && _sequenceCompleted.All<bool>(b => b))
                     {
                         SequenceReachedMonitoredState();
                     }


Some minor improvements

Some minor improvements

--- DailyReviewCLI/Utils/FileSystemWrapper.cs
+++ DailyReviewCLI/Utils/FileSystemWrapper.cs
@@ -27,7 +27,6 @@

 		public FileSystemWrapper() {
 			// Проверить наличие папки Dropbox и DayNotes, создать при необходимости
-
 			if (getDropboxFolder() == null) {
 				_dropboxTodo = new DirectoryInfo(getCurrentFolderPath());
 				_markdownFolder = new DirectoryInfo(getCurrentFolderPath() + @"\DayNotes\");
@@ -39,7 +38,6 @@
 			if (!_dropboxTodo.Exists) {
 				_dropboxTodo.Create();
 			}
-
 		}

 		#region Files, folders and paths
@@ -110,11 +108,12 @@
 			foreach (var task in tasks) {
 				lines.Add("[ ] " + task.Trim());
 			}
-			lines.AddRange(new [] { "---", "# Под чертой:", "", "" });
+			lines.AddRange(new [] { "---", "", "" });
 			lines.AddRange(weather);
 			lines.AddRange(new [] {
 				"# Триста букв:", "", "",
-				"# События и результаты:", "", ""
+				"# События и результаты:", "", "",
+				"# Хронодекс:", ""
 			});

 			return lines.ToArray();
@@ -287,9 +286,9 @@
 			ProcessStartInfo psi = new ProcessStartInfo(enscript,  @" importNotes /s " + file + @" /n Timeline");
 			psi.UseShellExecute = false;
 			Process p = Process.Start(psi);
-
+
 			p.WaitForExit();
-
+
 			File.Delete(_markdownFolder.FullName + @"\" + curDate + ".png");
 			File.Delete(_markdownFolder.FullName + @"\" + curDate + ".enex");
 			File.Move(_markdownFolder.FullName + @"\" + curDate + ".md", _markdownFolder.FullName + @"\" + curDate + ".closed" );


[Dependencies] Refresh module search bar results when adding modules

--- Dependencies/DependencyModuleList.xaml.cs
+++ Dependencies/DependencyModuleList.xaml.cs
@@ -58,6 +58,9 @@
             NewModule.DoFindModuleInTreeCommand = DoFindModuleInTreeCommand;

             this.ModulesList.Items.Add(NewModule);
+
+            // Refresh search view
+            ModuleSearchFilter_OnTextChanged(null, null);
         }


did not mean to commit program.cs

did not mean to commit program.cs

--- Digipost.Api.Client.Testklient/Program.cs
+++ Digipost.Api.Client.Testklient/Program.cs
@@ -29,52 +29,18 @@

         private static void Main(string[] args)
         {
-
-            uc02();
+            CompareLogic comparelogic = new CompareLogic();
+
+            var v = comparelogic.Compare(new SearchDetails(){DigipostAddress = "Halloen"}, new SearchDetails());
+            List<Difference> diff = v.Differences;
+            var descr = diff.ElementAt(0).GetWhatIsCompared();
+
             //Performance();
-            //Send();
+            Send();
             Console.ReadKey();

-        }
-
-        private static readonly string yourThumbprint = "d8 6e 19 1b 8f 9b 0b 57 3e db 72 db a8 09 1f dc 6a 10 18 fd";
-        private static readonly string yourSenderId = "106818904";
-        private static readonly string yourPersonalIdentification = "31108446911";
-        private static readonly string filePathString = "E:\\TestDocument.txt";
-        private static readonly string URIToDigipost = "https://qa2.api.digipost.no";
-        public static void uc02()
-        {
-
-            //Init Client
-            var config = new ClientConfig(senderId: yourSenderId) { ApiUrl = new Uri(URIToDigipost) };
-            var client = new DigipostClient(config, thumbprint: yourThumbprint);
-
-            //Compose Recipient by name and address
-            var recipientByNameAndAddress = new RecipientByNameAndAddress(
-                fullName: "Ola Nordmann",
-                addressLine: "Prinsensveien 123",
-                postalCode: "0460",
-                city: "Oslo"
-               );
-
-            //Compose message
-            var message = new Message(
-                new Recipient(recipientByNameAndAddress),
-                new Document(subject: "document subject", fileType: "txt", path: filePathString)
-                );
-
-            try
-            {
-                var result = client.SendMessage(message);
-            }
-            catch (Exception e)
-            {
-
-
-            }
-
         }

         private static void Performance()


gleði

gleði

--- TextDuck/Views/Home/Contact.cshtml
+++ TextDuck/Views/Home/Contact.cshtml
@@ -6,7 +6,7 @@
 <fieldset>
     <legend>Hafa Samband</legend>

Leidbeiningar um siduna ma finna her.

-
Ef adrar spurningar vakna er einnig haegt ad senda post a stjornendur sidunnar: samband@skjatextar.is

+
Ef adrar spurningar vakna er einnig haegt ad senda post a stjornendur sidunnar: samband@skjatextar.is

 </fieldset>


add summary to IAbpPerRequestRedisCacheManager

--- src/Abp.AspNetCore.PerRequestRedisCache/Runtime/Caching/Redis/IAbpPerRequestRedisCacheManager.cs
+++ src/Abp.AspNetCore.PerRequestRedisCache/Runtime/Caching/Redis/IAbpPerRequestRedisCacheManager.cs
@@ -1,5 +1,15 @@
 namespace Abp.Runtime.Caching.Redis
 {
+    /// <summary>
+    /// An upper level container for <see cref="ICache"/> objects.
+    /// <para>
+    /// ICache objects requested from <see cref="IAbpPerRequestRedisCacheManager"/> stores redis caches per http context. And it does not try to pull it again from redis during the http context.
+    /// It should not be used if the changes on this data in one instance of the project can causes an error in the other instance of the project.
+    /// It is only recommended to use it in cases that you know cache will never be changed until current http context is done or it is not an important value. (for example some ui view settings etc.)
+    /// Otherwise use <see cref="ICacheManager"/>
+    /// </para>
+    /// A cache manager should work as Singleton and track and manage <see cref="ICache"/> objects.
+    /// </summary>
     public interface IAbpPerRequestRedisCacheManager : ICacheManager
     {
     }


Changed mismatch with DateTimes (UTC/Local)

--- src/Bossr.Scraper/Bossr.Scraper/Factories/YesterdayLocalDateFactory/YesterdayLocalDateFactory.cs
+++ src/Bossr.Scraper/Bossr.Scraper/Factories/YesterdayLocalDateFactory/YesterdayLocalDateFactory.cs
@@ -9,7 +9,7 @@
     {
         public LocalDate GetYesterdaysDate()
         {
-            return LocalDate.FromDateTime(DateTime.Today).Minus(Period.FromDays(1));
+            return LocalDate.FromDateTime(DateTime.UtcNow.Date).Minus(Period.FromDays(1));
         }
     }
 }


Fixed correctly encoding paths with spaces for Backblaze (B2) backend.

--- Duplicati/Library/Backend/Backblaze/B2.cs
+++ Duplicati/Library/Backend/Backblaze/B2.cs
@@ -36,6 +36,7 @@

         private string m_bucketname;
         private string m_prefix;
+		private string m_urlencodedprefix;
         private string m_bucketType;
         private B2AuthHelper m_helper;
         private UploadUrlResponse m_uploadUrl;
@@ -60,6 +61,8 @@
             // For B2 we do not use a leading slash
             while(m_prefix.StartsWith("/"))
                 m_prefix = m_prefix.Substring(1);
+
+			m_urlencodedprefix = string.Join("/", m_prefix.Split(new [] { '/' }).Select(x => Library.Utility.Uri.UrlPathEncode(x)));

             m_bucketType = DEFAULT_BUCKET_TYPE;
             if (options.ContainsKey(B2_CREATE_BUCKET_TYPE_OPTION))
@@ -206,7 +209,7 @@
                         req.Method = "POST";
                         req.Headers["Authorization"] = UploadUrlData.AuthorizationToken;
                         req.Headers["X-Bz-Content-Sha1"] = sha1;
-                        req.Headers["X-Bz-File-Name"] = m_prefix + remotename;
+						req.Headers["X-Bz-File-Name"] = m_urlencodedprefix + Utility.Uri.UrlPathEncode(remotename);
                         req.ContentType = "application/octet-stream";
                         req.ContentLength = stream.Length;
                     },
@@ -263,7 +266,7 @@
             if (m_filecache != null && m_filecache.ContainsKey(remotename))
                 req = new AsyncHttpRequest(m_helper.CreateRequest(string.Format("{0}/b2api/v1/b2_download_file_by_id?fileId={1}", m_helper.DownloadUrl, Library.Utility.Uri.UrlEncode(GetFileID(remotename)))));
             else
-                req = new AsyncHttpRequest(m_helper.CreateRequest(string.Format("{0}/{1}{2}", m_helper.DownloadUrl, m_prefix, Library.Utility.Uri.UrlEncode(remotename))));
+				req = new AsyncHttpRequest(m_helper.CreateRequest(string.Format("{0}/{1}{2}", m_helper.DownloadUrl, m_urlencodedprefix, Library.Utility.Uri.UrlPathEncode(remotename))));

             try
             {


Fix json exception on null paths

Fix json exception on null paths

--- EDDiscovery/EliteDangerous/EDCommander.cs
+++ EDDiscovery/EliteDangerous/EDCommander.cs
@@ -306,11 +306,12 @@
             JObject jo = new JObject();
             foreach (EDCommander cmdr in _commandersDict.Values)
             {
-                jo[cmdr.Name] = new JObject(new
-                {
-                    NetLogDir = cmdr.NetLogDir,
-                    JournalDir = cmdr.JournalDir
-                });
+                JObject j = new JObject();
+                if (cmdr.NetLogDir != null)
+                    jo["NetLogDir"] = cmdr.NetLogDir;
+                if (cmdr.JournalDir != null)
+                    jo["JournalDir"] = cmdr.JournalDir;
+                jo[cmdr.Name] = j;
             }

             using (Stream stream = File.OpenWrite(Path.Combine(EDDConfig.Options.AppDataDirectory, "CommanderPaths.json.tmp")))


Add comment.

Add comment.

--- src/Features/CSharp/Portable/UseIndexOrRangeOperator/CSharpUseRangeOperatorDiagnosticAnalyzer.cs
+++ src/Features/CSharp/Portable/UseIndexOrRangeOperator/CSharpUseRangeOperatorDiagnosticAnalyzer.cs
@@ -59,6 +59,8 @@
             var cancellationToken = context.CancellationToken;
             var invocation = (IInvocationOperation)context.Operation;

+            // Validate we're on a piece of syntax we expect.  While not necessary for analysis, we
+            // want to make sure we're on something the fixer will know how to actually fix.
             var invocationSyntax = invocation.Syntax as InvocationExpressionSyntax;
             if (invocationSyntax is null ||
                 invocationSyntax.ArgumentList is null)


Exit timer callback when timer is stopped

--- EDDiscovery/EliteDangerous/NetLogClass.cs
+++ EDDiscovery/EliteDangerous/NetLogClass.cs
@@ -332,6 +332,8 @@

         private void ScanTick(object sender, EventArgs e)
         {
+            var timer = sender as System.Windows.Forms.Timer;
+
             Debug.Assert(Application.MessageLoop);              // ensure.. paranoia

             try
@@ -373,6 +375,11 @@
                         visitedSystems.Add(dbsys);
                         OnNewPosition(dbsys);
                         lastnfi.TravelLogUnit.Update();
+
+                        if (!timer.Enabled)
+                        {
+                            break;
+                        }
                     }
                 }
             }


Simplify

Simplify

--- src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/Grammar/GrammarGenerator.cs
+++ src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/Grammar/GrammarGenerator.cs
@@ -170,3 +170,4 @@
         internal const int ListKind = 1; // See SyntaxKind.
     }
 }
+


IList.TrySingle()

IList.TrySingle()

--- Gu.Reactive/Internals/Extensions/IListExt.cs
+++ Gu.Reactive/Internals/Extensions/IListExt.cs
@@ -6,6 +6,18 @@
     // ReSharper disable once InconsistentNaming
     internal static class IListExt
     {
+        internal static bool TrySingle(this IList source, out object item)
+        {
+            if (source.Count == 1)
+            {
+                item = source[0];
+                return true;
+            }
+
+            item = null;
+            return false;
+        }
+
         internal static bool All(this IList source, Func<object, bool> predicate)
         {
             foreach (var item in source)


Changed to Member ID

Changed to Member ID

--- HRI/Views/Partials/RegisterMemberForm.cshtml
+++ HRI/Views/Partials/RegisterMemberForm.cshtml
@@ -71,7 +71,7 @@
                 @Html.ValidationMessageFor(m => registerModel.MemberProperties[5].Value)
             </div>
             <div class="span7">
-                @Html.Label("Primary Members ID")
+                @Html.Label("Member ID")
                 @Html.EditorFor(m => registerModel.MemberProperties[6].Value)
                 @Html.HiddenFor(m => registerModel.MemberProperties[6].Value)
                 @Html.ValidationMessageFor(m => registerModel.MemberProperties[6].Value)