Basic idea how we to check whether logging is enabled for a particular kind of message.

--- src/LibLog/Logging.cs
+++ src/LibLog/Logging.cs
@@ -673,6 +673,7 @@
         private static readonly Type LogEntryType;
         private static readonly Type LoggerType;
         private static readonly Action<string, string, TraceEventType> WriteLogEntry;
+        private static Func<string, TraceEventType, bool> ShouldLogEntry;

         static EntLibLogProvider()
         {
@@ -683,6 +684,7 @@
                 return;
             }
             WriteLogEntry = GetWriteLogEntry();
+            ShouldLogEntry = GetShouldLogEntry();
         }

         public EntLibLogProvider()
@@ -701,7 +703,7 @@

         public ILog GetLogger(string name)
         {
-            return new EntLibLogger(name, WriteLogEntry);
+            return new EntLibLogger(name, WriteLogEntry, ShouldLogEntry);
         }

         public static bool IsLoggerAvailable()
@@ -712,14 +714,48 @@
         private static Action<string, string, TraceEventType> GetWriteLogEntry()
         {
             // new LogEntry(...)
-            var entryType = LogEntryType;
             var logNameParameter = Expression.Parameter(typeof(string), "logName");
             var messageParameter = Expression.Parameter(typeof(string), "message");
             var severityParameter = Expression.Parameter(typeof(TraceEventType), "severity");

+            MemberInitExpression memberInit = GetWriteLogExpression(messageParameter, severityParameter, logNameParameter);
+
+            //Logger.Write(new LogEntry(....));
+            MethodInfo writeLogEntryMethod = LoggerType.GetMethod("Write", new[] { LogEntryType });
+            var writeLogEntryExpression = Expression.Call(writeLogEntryMethod, memberInit);
+
+            return Expression.Lambda<Action<string, string, TraceEventType>>(
+                writeLogEntryExpression,
+                logNameParameter,
+                messageParameter,
+                severityParameter).Compile();
+        }
+
+        private static Func<string, TraceEventType, bool> GetShouldLogEntry()
+        {
+            // new LogEntry(...)
+            var logNameParameter = Expression.Parameter(typeof(string), "logName");
+            var severityParameter = Expression.Parameter(typeof(TraceEventType), "severity");
+
+            MemberInitExpression memberInit = GetWriteLogExpression(Expression.Constant("***dummy***"), severityParameter, logNameParameter);
+
+            //Logger.Write(new LogEntry(....));
+            MethodInfo writeLogEntryMethod = LoggerType.GetMethod("ShouldLog", new[] { LogEntryType });
+            var writeLogEntryExpression = Expression.Call(writeLogEntryMethod, memberInit);
+
+            return Expression.Lambda<Func<string, TraceEventType, bool>>(
+                writeLogEntryExpression,
+                logNameParameter,
+                severityParameter).Compile();
+        }
+
+        private static MemberInitExpression GetWriteLogExpression(Expression message,
+            ParameterExpression severityParameter, ParameterExpression logNameParameter)
+        {
+            var entryType = LogEntryType;
             MemberInitExpression memberInit = Expression.MemberInit(Expression.New(entryType), new MemberBinding[]
             {
-                Expression.Bind(entryType.GetProperty("Message"), messageParameter),
+                Expression.Bind(entryType.GetProperty("Message"), message),
                 Expression.Bind(entryType.GetProperty("Severity"), severityParameter),
                 Expression.Bind(entryType.GetProperty("TimeStamp"),
                     Expression.Property(null, typeof (DateTime).GetProperty("UtcNow"))),
@@ -729,32 +765,29 @@
                         typeof (List<string>).GetMethod("Add", new[] {typeof (string)}),
                         logNameParameter))
             });
-
-            //Logger.Write(new LogEntry(....));
-            MethodInfo writeLogEntryMethod = LoggerType.GetMethod("Write", new[] { LogEntryType });
-            var writeLogEntryExpression = Expression.Call(writeLogEntryMethod, memberInit);
-
-            return Expression.Lambda<Action<string, string, TraceEventType>>(
-                writeLogEntryExpression,
-                logNameParameter,
-                messageParameter,
-                severityParameter).Compile();
+            return memberInit;
         }

         public class EntLibLogger : ILog
         {
             private readonly string _loggerName;
             private readonly Action<string, string, TraceEventType> _writeLog;
-
-            internal EntLibLogger(string loggerName, Action<string, string, TraceEventType> writeLog)
+            private readonly Func<string, TraceEventType, bool> _shouldLog;
+
+            internal EntLibLogger(string loggerName, Action<string, string, TraceEventType> writeLog, Func<string, TraceEventType, bool> shouldLog)
             {
                 _loggerName = loggerName;
                 _writeLog = writeLog;
+                _shouldLog = shouldLog;
             }

             public bool Log(LogLevel logLevel, Func<string> messageFunc)
             {
                 var severity = MapSeverity(logLevel);
+                if (messageFunc == null)
+                {
+                    return _shouldLog(_loggerName, severity);
+                }
                 _writeLog(_loggerName, messageFunc(), severity);
                 return true;
             }


COmments

COmments

--- src/LoginException.cs
+++ src/LoginException.cs
@@ -9,7 +9,7 @@
             // LastPass returned errors
             LastPassInvalidUsername,
             LastPassInvalidPassword,
-            LastPassOther,
+            LastPassOther, // Message property contains the message given by the LastPass server
             LastPassUnknown,

             // Other


Name variable more consistently

Name variable more consistently

--- src/Moq/MethodCall.cs
+++ src/Moq/MethodCall.cs
@@ -17,7 +17,7 @@
 {
 	internal sealed partial class MethodCall : SetupWithOutParameterSupport
 	{
-		private Action<object[]> afterReturnCallback;
+		private Action<object[]> afterReturnCallbackResponse;
 		private Action<object[]> callbackResponse;
 		private LimitInvocationCountResponse limitInvocationCountResponse;
 		private Condition condition;
@@ -131,7 +131,7 @@
 					}
 				}

-				this.afterReturnCallback?.Invoke(invocation.Arguments);
+				this.afterReturnCallbackResponse?.Invoke(invocation.Arguments);
 			}
 		}

@@ -174,7 +174,7 @@
 			}

 			ref Action<object[]> response = ref this.returnOrThrowResponse == null ? ref this.callbackResponse
-			                                                                       : ref this.afterReturnCallback;
+			                                                                       : ref this.afterReturnCallbackResponse;

 			if (callback is Action callbackWithoutArguments)
 			{


Added URL field to Book

Added URL field to Book

--- AnApiOfIceAndFire/Models/v0/Book.cs
+++ AnApiOfIceAndFire/Models/v0/Book.cs
@@ -5,6 +5,11 @@
 {
     public class Book
     {
+        /// <summary>
+        /// The hypermedia URL of this resource
+        /// </summary>
+        public string URL { get; }
+
         /// <summary>
         /// The name of this book
         /// </summary>
@@ -36,12 +41,12 @@
         public string Country { get; }

         /// <summary>
-        /// The media type of this book.
+        /// The media type of this book
         /// </summary>
         public MediaType MediaType { get; }

         /// <summary>
-        /// The date this book was released.
+        /// The date this book was released
         /// </summary>
         public DateTime Released { get; }


Implemented stringification

Implemented stringification

--- AngleSharp/DOM/Collections/Range.cs
+++ AngleSharp/DOM/Collections/Range.cs
@@ -544,6 +544,33 @@
             return (_end > new Boundary { Node = parent, Offset = offset } && _start < new Boundary { Node = parent, Offset = offset + 1 });
         }

+        public override String ToString()
+        {
+            var s = Pool.NewStringBuilder();
+            var offset = Start;
+            var dest = End;
+            var startText = Head as IText;
+            var endText = Tail as IText;
+
+            if (startText != null && Head == Tail)
+                return startText.Substring(offset, dest - offset);
+            else if (startText != null)
+                s.Append(startText.Substring(offset, startText.Length - offset));
+
+            var nodes = CommonAncestor.Descendents<IText>();
+
+            foreach (var node in nodes)
+            {
+                if (_start < new Boundary { Node = node, Offset = 0 } && _end > new Boundary { Node = node, Offset = node.Length })
+                    s.Append(node.Text);
+            }
+
+            if (endText != null)
+                s.Append(endText.Substring(0, dest));
+
+            return s.ToPool();
+        }
+
         #endregion

         #region Helpers


fixed dmoe app not working

fixed dmoe app not working

--- AngularProto/Views/Home/Demo.cshtml
+++ AngularProto/Views/Home/Demo.cshtml
@@ -23,6 +23,6 @@

 		<script src='/bower_components/angular/angular.js'></script>
 		<script src='/bower_components/angular-route/angular-route.js'></script>
-		@Scripts.Render("~/bundles/Demo")
+		@Scripts.Render("~/bundles/DemoApp")
 	</body>
 </html>


elementary support for move by type of pawn

--- JsMate.Api/Modules/MoveModule.cs
+++ JsMate.Api/Modules/MoveModule.cs
@@ -35,9 +35,15 @@
                             x => x.PieceType.Equals(piece)
                                 && x.PieceTeam.Equals(team == "0" ? PieceTeam.Black : PieceTeam.White)
                                 && x.PieceNumber.Equals(pieceNumber));
-
-                    pieceToMove.BoardPosition.Row++;

+
+                    // TODO: Ick, but it shows both white & black pieces moving forward
+                    if (pieceToMove.PieceTeam.Equals(PieceTeam.Black))
+                        pieceToMove.BoardPosition.Row++;
+                    else
+                    {
+                        pieceToMove.BoardPosition.Row--;
+                    }

                     foundBoard.ValidateCollision();
                     pieceToMove.BoardPosition.ValidateBoardBounds();


Regenerated with latest OpenAPI specification

--- build/src/main/csharp/CellStore/Api/DataApi.cs
+++ build/src/main/csharp/CellStore/Api/DataApi.cs
@@ -340,6 +340,38 @@
         /// <param name="contentType">Content-Type of the request, as an HTTP header. It must be set to \"application/json\" when providing a filing in json format, or to \"application/xbrlx\" when providing a ZIP Deflate-compressed XBRL filing. (optional, default to null)</param>
         /// <returns>ApiResponse of Object</returns>
         ApiResponse<Object> InsertFilingsWithHttpInfo (string token, Object filing, string profileName = null, string formatIndent = null, string aid = null, string filingDetectionProfileName = null, bool? taxonomy = null, bool? insertEntity = null, string contentType = null);
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <remarks>
+        ///
+        /// </remarks>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>Object</returns>
+        Object InsertTaxonomies (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null);
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <remarks>
+        ///
+        /// </remarks>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>ApiResponse of Object</returns>
+        ApiResponse<Object> InsertTaxonomiesWithHttpInfo (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null);

         /// <summary>
         /// Retrieve a summary for all components of a given filing
@@ -1838,6 +1870,38 @@
         System.Threading.Tasks.Task<ApiResponse<Object>> InsertFilingsAsyncWithHttpInfo (string token, Object filing, string profileName = null, string formatIndent = null, string aid = null, string filingDetectionProfileName = null, bool? taxonomy = null, bool? insertEntity = null, string contentType = null);

         /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <remarks>
+        ///
+        /// </remarks>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>Task of Object</returns>
+        System.Threading.Tasks.Task<Object> InsertTaxonomiesAsync (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null);
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <remarks>
+        ///
+        /// </remarks>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>Task of ApiResponse (Object)</returns>
+        System.Threading.Tasks.Task<ApiResponse<Object>> InsertTaxonomiesAsyncWithHttpInfo (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null);
+
+        /// <summary>
         /// Retrieve a summary for all components of a given filing
         /// </summary>
         /// <remarks>
@@ -5034,6 +5098,204 @@
                 throw new ApiException (localVarStatusCode, "Error calling InsertFilings: " + localVarResponse.Content, localVarResponse.Content);
             else if (localVarStatusCode == 0)
                 throw new ApiException (localVarStatusCode, "Error calling InsertFilings: " + localVarResponse.ErrorMessage, localVarResponse.ErrorMessage);
+
+            return new ApiResponse<Object>(localVarStatusCode,
+                localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
+                (Object) Configuration.ApiClient.Deserialize(localVarResponse, typeof(Object)));
+
+        }
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>Object</returns>
+        public Object InsertTaxonomies (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null)
+        {
+             ApiResponse<Object> localVarResponse = InsertTaxonomiesWithHttpInfo(token, eid, entrypoint, profileName, aid, insertEntity);
+             return localVarResponse.Data;
+        }
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>ApiResponse of Object</returns>
+        public ApiResponse< Object > InsertTaxonomiesWithHttpInfo (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null)
+        {
+
+            // verify the required parameter 'token' is set
+            if (token == null)
+                throw new ApiException(400, "Missing required parameter 'token' when calling DataApi->InsertTaxonomies");
+
+            // verify the required parameter 'eid' is set
+            if (eid == null)
+                throw new ApiException(400, "Missing required parameter 'eid' when calling DataApi->InsertTaxonomies");
+
+            // verify the required parameter 'entrypoint' is set
+            if (entrypoint == null)
+                throw new ApiException(400, "Missing required parameter 'entrypoint' when calling DataApi->InsertTaxonomies");
+
+
+            var localVarPath = "/api/taxonomies";
+
+            var localVarPathParams = new Dictionary<String, String>();
+            var localVarQueryParams = new Dictionary<String, List<String>>();
+            var localVarHeaderParams = new Dictionary<String, String>(Configuration.DefaultHeader);
+            var localVarFormParams = new Dictionary<String, String>();
+            var localVarFileParams = new Dictionary<String, FileParameter>();
+            Object localVarPostBody = null;
+
+            // to determine the Content-Type header
+            String[] localVarHttpContentTypes = new String[] {
+                "application/json"
+            };
+            String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
+
+            // to determine the Accept header
+            String[] localVarHttpHeaderAccepts = new String[] {
+                "application/json"
+            };
+            String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
+            if (localVarHttpHeaderAccept != null)
+                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
+
+
+
+            if (profileName != null) localVarQueryParams.Add("profile-name", Configuration.ApiClient.ParameterToString(profileName)); // query parameter
+            if (token != null) localVarQueryParams.Add("token", Configuration.ApiClient.ParameterToString(token)); // query parameter
+            if (aid != null) localVarQueryParams.Add("aid", Configuration.ApiClient.ParameterToString(aid)); // query parameter
+            if (eid != null) localVarQueryParams.Add("eid", Configuration.ApiClient.ParameterToString(eid)); // query parameter
+            if (entrypoint != null) localVarQueryParams.Add("entrypoint", Configuration.ApiClient.ParameterToString(entrypoint)); // query parameter
+            if (insertEntity != null) localVarQueryParams.Add("insert-entity", Configuration.ApiClient.ParameterToString(insertEntity)); // query parameter
+
+
+
+
+
+
+
+
+            // make the HTTP request
+            IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath,
+                Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
+                localVarPathParams, localVarHttpContentType);
+
+            int localVarStatusCode = (int) localVarResponse.StatusCode;
+
+            if (localVarStatusCode >= 400)
+                throw new ApiException (localVarStatusCode, "Error calling InsertTaxonomies: " + localVarResponse.Content, localVarResponse.Content);
+            else if (localVarStatusCode == 0)
+                throw new ApiException (localVarStatusCode, "Error calling InsertTaxonomies: " + localVarResponse.ErrorMessage, localVarResponse.ErrorMessage);
+
+            return new ApiResponse<Object>(localVarStatusCode,
+                localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
+                (Object) Configuration.ApiClient.Deserialize(localVarResponse, typeof(Object)));
+
+        }
+
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>Task of Object</returns>
+        public async System.Threading.Tasks.Task<Object> InsertTaxonomiesAsync (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null)
+        {
+             ApiResponse<Object> localVarResponse = await InsertTaxonomiesAsyncWithHttpInfo(token, eid, entrypoint, profileName, aid, insertEntity);
+             return localVarResponse.Data;
+
+        }
+
+        /// <summary>
+        /// Adds a new taxonomy filing given one or more entrypoints. The taxonomy filing is identified with an Archive ID (AID).
+        /// </summary>
+        /// <exception cref="CellStore.Client.ApiException">Thrown when fails to make API call</exception>
+        /// <param name="token">The token that allows you to use this API. Gives you read (GET) and/or write (POST, DELETE, PATCH) credentials.</param>
+        /// <param name="eid">The EID (scheme + local name) of a company, to add a new taxonomy.</param>
+        /// <param name="entrypoint">The URI of a taxonomy entrypoint.</param>
+        /// <param name="profileName">Specifies which profile to use, which will enable some parameters or modify hypercube queries accordingly. The default depends on the underlying repository (optional, default to null)</param>
+        /// <param name="aid">Archive ID of the new filing or taxonomy. (optional, default to null)</param>
+        /// <param name="insertEntity">If false, and one or more of the archive entities are not present in the repository an error is raised. If true, the missing entity is inserted. (Default is true) (optional, default to true)</param>
+        /// <returns>Task of ApiResponse (Object)</returns>
+        public async System.Threading.Tasks.Task<ApiResponse<Object>> InsertTaxonomiesAsyncWithHttpInfo (string token, string eid, List<string> entrypoint, string profileName = null, string aid = null, bool? insertEntity = null)
+        {
+            // verify the required parameter 'token' is set
+            if (token == null) throw new ApiException(400, "Missing required parameter 'token' when calling InsertTaxonomies");
+            // verify the required parameter 'eid' is set
+            if (eid == null) throw new ApiException(400, "Missing required parameter 'eid' when calling InsertTaxonomies");
+            // verify the required parameter 'entrypoint' is set
+            if (entrypoint == null) throw new ApiException(400, "Missing required parameter 'entrypoint' when calling InsertTaxonomies");
+
+
+            var localVarPath = "/api/taxonomies";
+
+            var localVarPathParams = new Dictionary<String, String>();
+            var localVarQueryParams = new Dictionary<String, List<String>>();
+            var localVarHeaderParams = new Dictionary<String, String>(Configuration.DefaultHeader);
+            var localVarFormParams = new Dictionary<String, String>();
+            var localVarFileParams = new Dictionary<String, FileParameter>();
+            Object localVarPostBody = null;
+
+            // to determine the Content-Type header
+            String[] localVarHttpContentTypes = new String[] {
+                "application/json"
+            };
+            String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
+
+            // to determine the Accept header
+            String[] localVarHttpHeaderAccepts = new String[] {
+                "application/json"
+            };
+            String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
+            if (localVarHttpHeaderAccept != null)
+                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
+
+
+
+            if (profileName != null) localVarQueryParams.Add("profile-name", Configuration.ApiClient.ParameterToString(profileName)); // query parameter
+            if (token != null) localVarQueryParams.Add("token", Configuration.ApiClient.ParameterToString(token)); // query parameter
+            if (aid != null) localVarQueryParams.Add("aid", Configuration.ApiClient.ParameterToString(aid)); // query parameter
+            if (eid != null) localVarQueryParams.Add("eid", Configuration.ApiClient.ParameterToString(eid)); // query parameter
+            if (entrypoint != null) localVarQueryParams.Add("entrypoint", Configuration.ApiClient.ParameterToString(entrypoint)); // query parameter
+            if (insertEntity != null) localVarQueryParams.Add("insert-entity", Configuration.ApiClient.ParameterToString(insertEntity)); // query parameter
+
+
+
+
+
+
+
+
+            // make the HTTP request
+            IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath,
+                Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
+                localVarPathParams, localVarHttpContentType);
+
+            int localVarStatusCode = (int) localVarResponse.StatusCode;
+
+            if (localVarStatusCode >= 400)
+                throw new ApiException (localVarStatusCode, "Error calling InsertTaxonomies: " + localVarResponse.Content, localVarResponse.Content);
+            else if (localVarStatusCode == 0)
+                throw new ApiException (localVarStatusCode, "Error calling InsertTaxonomies: " + localVarResponse.ErrorMessage, localVarResponse.ErrorMessage);

             return new ApiResponse<Object>(localVarStatusCode,
                 localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),


Muuttujia nimetty uudestaan

Muuttujia nimetty uudestaan

Osa muutettu label1 jne. järkevämpään.

--- Timetable/MainForm.Designer.cs
+++ Timetable/MainForm.Designer.cs
@@ -34,31 +34,31 @@
             this.wednesdayLabel = new System.Windows.Forms.Label();
             this.thursdayLabel = new System.Windows.Forms.Label();
             this.fridayLabel = new System.Windows.Forms.Label();
-            this.label1 = new System.Windows.Forms.Label();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label3 = new System.Windows.Forms.Label();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label5 = new System.Windows.Forms.Label();
-            this.label6 = new System.Windows.Forms.Label();
-            this.label7 = new System.Windows.Forms.Label();
-            this.label8 = new System.Windows.Forms.Label();
+            this.time1Label = new System.Windows.Forms.Label();
+            this.time2Label = new System.Windows.Forms.Label();
+            this.time3Label = new System.Windows.Forms.Label();
+            this.time4Llabel = new System.Windows.Forms.Label();
+            this.time5Label = new System.Windows.Forms.Label();
+            this.time6Label = new System.Windows.Forms.Label();
+            this.time7Label = new System.Windows.Forms.Label();
+            this.time8Label = new System.Windows.Forms.Label();
             this.menuStrip1 = new System.Windows.Forms.MenuStrip();
-            this.tiedostoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.uusiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.avaaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.tallennaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.tulostaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.poistuToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.FileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.NewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.courseManagerPanel = new System.Windows.Forms.TableLayoutPanel();
             this.addCourseButton = new System.Windows.Forms.Button();
-            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            this.courseManagerSplitContainer = new System.Windows.Forms.SplitContainer();
             this.coursesListBox = new System.Windows.Forms.ListBox();
             this.timetableLayoutPanel.SuspendLayout();
             this.menuStrip1.SuspendLayout();
             this.courseManagerPanel.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
-            this.splitContainer1.Panel1.SuspendLayout();
-            this.splitContainer1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.courseManagerSplitContainer)).BeginInit();
+            this.courseManagerSplitContainer.Panel1.SuspendLayout();
+            this.courseManagerSplitContainer.SuspendLayout();
             this.SuspendLayout();
             //
             // timetableLayoutPanel
@@ -77,14 +77,14 @@
             this.timetableLayoutPanel.Controls.Add(this.wednesdayLabel, 3, 0);
             this.timetableLayoutPanel.Controls.Add(this.thursdayLabel, 4, 0);
             this.timetableLayoutPanel.Controls.Add(this.fridayLabel, 5, 0);
-            this.timetableLayoutPanel.Controls.Add(this.label1, 0, 1);
-            this.timetableLayoutPanel.Controls.Add(this.label2, 0, 2);
-            this.timetableLayoutPanel.Controls.Add(this.label3, 0, 3);
-            this.timetableLayoutPanel.Controls.Add(this.label4, 0, 4);
-            this.timetableLayoutPanel.Controls.Add(this.label5, 0, 5);
-            this.timetableLayoutPanel.Controls.Add(this.label6, 0, 6);
-            this.timetableLayoutPanel.Controls.Add(this.label7, 0, 7);
-            this.timetableLayoutPanel.Controls.Add(this.label8, 0, 8);
+            this.timetableLayoutPanel.Controls.Add(this.time1Label, 0, 1);
+            this.timetableLayoutPanel.Controls.Add(this.time2Label, 0, 2);
+            this.timetableLayoutPanel.Controls.Add(this.time3Label, 0, 3);
+            this.timetableLayoutPanel.Controls.Add(this.time4Llabel, 0, 4);
+            this.timetableLayoutPanel.Controls.Add(this.time5Label, 0, 5);
+            this.timetableLayoutPanel.Controls.Add(this.time6Label, 0, 6);
+            this.timetableLayoutPanel.Controls.Add(this.time7Label, 0, 7);
+            this.timetableLayoutPanel.Controls.Add(this.time8Label, 0, 8);
             this.timetableLayoutPanel.Location = new System.Drawing.Point(204, 39);
             this.timetableLayoutPanel.Name = "timetableLayoutPanel";
             this.timetableLayoutPanel.RowCount = 9;
@@ -147,169 +147,171 @@
             this.fridayLabel.TabIndex = 4;
             this.fridayLabel.Text = "PE";
             //
-            // label1
-            //
-            this.label1.AutoSize = true;
-            this.label1.Location = new System.Drawing.Point(4, 44);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(28, 13);
-            this.label1.TabIndex = 5;
-            this.label1.Text = "8:15";
-            //
-            // label2
-            //
-            this.label2.AutoSize = true;
-            this.label2.Location = new System.Drawing.Point(4, 87);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(28, 13);
-            this.label2.TabIndex = 6;
-            this.label2.Text = "9:15";
-            //
-            // label3
-            //
-            this.label3.AutoSize = true;
-            this.label3.Location = new System.Drawing.Point(4, 130);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(34, 13);
-            this.label3.TabIndex = 7;
-            this.label3.Text = "10:15";
-            //
-            // label4
-            //
-            this.label4.AutoSize = true;
-            this.label4.Location = new System.Drawing.Point(4, 173);
-            this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(34, 13);
-            this.label4.TabIndex = 8;
-            this.label4.Text = "11:15";
-            //
-            // label5
-            //
-            this.label5.AutoSize = true;
-            this.label5.Location = new System.Drawing.Point(4, 216);
-            this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(34, 13);
-            this.label5.TabIndex = 9;
-            this.label5.Text = "12:15";
-            //
-            // label6
-            //
-            this.label6.AutoSize = true;
-            this.label6.Location = new System.Drawing.Point(4, 259);
-            this.label6.Name = "label6";
-            this.label6.Size = new System.Drawing.Size(34, 13);
-            this.label6.TabIndex = 10;
-            this.label6.Text = "13:15";
-            //
-            // label7
-            //
-            this.label7.AutoSize = true;
-            this.label7.Location = new System.Drawing.Point(4, 302);
-            this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(34, 13);
-            this.label7.TabIndex = 11;
-            this.label7.Text = "14:15";
-            //
-            // label8
-            //
-            this.label8.AutoSize = true;
-            this.label8.Location = new System.Drawing.Point(4, 345);
-            this.label8.Name = "label8";
-            this.label8.Size = new System.Drawing.Size(34, 13);
-            this.label8.TabIndex = 12;
-            this.label8.Text = "15:15";
+            // time1Label
+            //
+            this.time1Label.AutoSize = true;
+            this.time1Label.Location = new System.Drawing.Point(4, 44);
+            this.time1Label.Name = "time1Label";
+            this.time1Label.Size = new System.Drawing.Size(28, 13);
+            this.time1Label.TabIndex = 5;
+            this.time1Label.Text = "8:15";
+            //
+            // time2Label
+            //
+            this.time2Label.AutoSize = true;
+            this.time2Label.Location = new System.Drawing.Point(4, 87);
+            this.time2Label.Name = "time2Label";
+            this.time2Label.Size = new System.Drawing.Size(28, 13);
+            this.time2Label.TabIndex = 6;
+            this.time2Label.Text = "9:15";
+            //
+            // time3Label
+            //
+            this.time3Label.AutoSize = true;
+            this.time3Label.Location = new System.Drawing.Point(4, 130);
+            this.time3Label.Name = "time3Label";
+            this.time3Label.Size = new System.Drawing.Size(34, 13);
+            this.time3Label.TabIndex = 7;
+            this.time3Label.Text = "10:15";
+            //
+            // time4Llabel
+            //
+            this.time4Llabel.AutoSize = true;
+            this.time4Llabel.Location = new System.Drawing.Point(4, 173);
+            this.time4Llabel.Name = "time4Llabel";
+            this.time4Llabel.Size = new System.Drawing.Size(34, 13);
+            this.time4Llabel.TabIndex = 8;
+            this.time4Llabel.Text = "11:15";
+            //
+            // time5Label
+            //
+            this.time5Label.AutoSize = true;
+            this.time5Label.Location = new System.Drawing.Point(4, 216);
+            this.time5Label.Name = "time5Label";
+            this.time5Label.Size = new System.Drawing.Size(34, 13);
+            this.time5Label.TabIndex = 9;
+            this.time5Label.Text = "12:15";
+            //
+            // time6Label
+            //
+            this.time6Label.AutoSize = true;
+            this.time6Label.Location = new System.Drawing.Point(4, 259);
+            this.time6Label.Name = "time6Label";
+            this.time6Label.Size = new System.Drawing.Size(34, 13);
+            this.time6Label.TabIndex = 10;
+            this.time6Label.Text = "13:15";
+            //
+            // time7Label
+            //
+            this.time7Label.AutoSize = true;
+            this.time7Label.Location = new System.Drawing.Point(4, 302);
+            this.time7Label.Name = "time7Label";
+            this.time7Label.Size = new System.Drawing.Size(34, 13);
+            this.time7Label.TabIndex = 11;
+            this.time7Label.Text = "14:15";
+            //
+            // time8Label
+            //
+            this.time8Label.AutoSize = true;
+            this.time8Label.Location = new System.Drawing.Point(4, 345);
+            this.time8Label.Name = "time8Label";
+            this.time8Label.Size = new System.Drawing.Size(34, 13);
+            this.time8Label.TabIndex = 12;
+            this.time8Label.Text = "15:15";
             //
             // menuStrip1
             //
             this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.tiedostoToolStripMenuItem});
+            this.FileToolStripMenuItem});
             this.menuStrip1.Location = new System.Drawing.Point(0, 0);
             this.menuStrip1.Name = "menuStrip1";
             this.menuStrip1.Size = new System.Drawing.Size(739, 24);
             this.menuStrip1.TabIndex = 1;
             this.menuStrip1.Text = "menuStrip1";
             //
-            // tiedostoToolStripMenuItem
-            //
-            this.tiedostoToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.uusiToolStripMenuItem,
-            this.avaaToolStripMenuItem,
-            this.tallennaToolStripMenuItem,
-            this.tulostaToolStripMenuItem,
-            this.poistuToolStripMenuItem});
-            this.tiedostoToolStripMenuItem.Name = "tiedostoToolStripMenuItem";
-            this.tiedostoToolStripMenuItem.Size = new System.Drawing.Size(65, 20);
-            this.tiedostoToolStripMenuItem.Text = "Tiedosto";
-            //
-            // uusiToolStripMenuItem
-            //
-            this.uusiToolStripMenuItem.Name = "uusiToolStripMenuItem";
-            this.uusiToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
-            this.uusiToolStripMenuItem.Text = "Uusi";
-            //
-            // avaaToolStripMenuItem
-            //
-            this.avaaToolStripMenuItem.Name = "avaaToolStripMenuItem";
-            this.avaaToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
-            this.avaaToolStripMenuItem.Text = "Avaa";
-            //
-            // tallennaToolStripMenuItem
-            //
-            this.tallennaToolStripMenuItem.Name = "tallennaToolStripMenuItem";
-            this.tallennaToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
-            this.tallennaToolStripMenuItem.Text = "Tallenna";
-            //
-            // tulostaToolStripMenuItem
-            //
-            this.tulostaToolStripMenuItem.Name = "tulostaToolStripMenuItem";
-            this.tulostaToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
-            this.tulostaToolStripMenuItem.Text = "Tulosta";
-            //
-            // poistuToolStripMenuItem
-            //
-            this.poistuToolStripMenuItem.Name = "poistuToolStripMenuItem";
-            this.poistuToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
-            this.poistuToolStripMenuItem.Text = "Poistu";
+            // FileToolStripMenuItem
+            //
+            this.FileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.NewToolStripMenuItem,
+            this.openToolStripMenuItem,
+            this.saveToolStripMenuItem,
+            this.printToolStripMenuItem,
+            this.exitToolStripMenuItem});
+            this.FileToolStripMenuItem.Name = "FileToolStripMenuItem";
+            this.FileToolStripMenuItem.Size = new System.Drawing.Size(65, 20);
+            this.FileToolStripMenuItem.Text = "Tiedosto";
+            //
+            // NewToolStripMenuItem
+            //
+            this.NewToolStripMenuItem.Name = "NewToolStripMenuItem";
+            this.NewToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
+            this.NewToolStripMenuItem.Text = "Uusi";
+            //
+            // openToolStripMenuItem
+            //
+            this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+            this.openToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
+            this.openToolStripMenuItem.Text = "Avaa";
+            //
+            // saveToolStripMenuItem
+            //
+            this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
+            this.saveToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
+            this.saveToolStripMenuItem.Text = "Tallenna";
+            //
+            // printToolStripMenuItem
+            //
+            this.printToolStripMenuItem.Name = "printToolStripMenuItem";
+            this.printToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
+            this.printToolStripMenuItem.Text = "Tulosta";
+            //
+            // exitToolStripMenuItem
+            //
+            this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+            this.exitToolStripMenuItem.Size = new System.Drawing.Size(118, 22);
+            this.exitToolStripMenuItem.Text = "Poistu";
             //
             // courseManagerPanel
             //
             this.courseManagerPanel.ColumnCount = 1;
             this.courseManagerPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
             this.courseManagerPanel.Controls.Add(this.addCourseButton, 0, 0);
-            this.courseManagerPanel.Controls.Add(this.splitContainer1, 0, 1);
+            this.courseManagerPanel.Controls.Add(this.courseManagerSplitContainer, 0, 1);
             this.courseManagerPanel.Location = new System.Drawing.Point(0, 40);
+            this.courseManagerPanel.Margin = new System.Windows.Forms.Padding(0);
             this.courseManagerPanel.Name = "courseManagerPanel";
             this.courseManagerPanel.RowCount = 2;
-            this.courseManagerPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
-            this.courseManagerPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 83.33333F));
-            this.courseManagerPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+            this.courseManagerPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.11111F));
+            this.courseManagerPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 88.88889F));
             this.courseManagerPanel.Size = new System.Drawing.Size(200, 391);
             this.courseManagerPanel.TabIndex = 2;
             //
             // addCourseButton
             //
             this.addCourseButton.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.addCourseButton.Location = new System.Drawing.Point(3, 3);
+            this.addCourseButton.Location = new System.Drawing.Point(5, 5);
+            this.addCourseButton.Margin = new System.Windows.Forms.Padding(5);
             this.addCourseButton.Name = "addCourseButton";
-            this.addCourseButton.Size = new System.Drawing.Size(194, 59);
+            this.addCourseButton.Size = new System.Drawing.Size(190, 33);
             this.addCourseButton.TabIndex = 0;
             this.addCourseButton.Text = "Lisää kurssi";
             this.addCourseButton.UseVisualStyleBackColor = true;
             this.addCourseButton.Click += new System.EventHandler(this.addCourseButton_Click);
             //
-            // splitContainer1
-            //
-            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.splitContainer1.Location = new System.Drawing.Point(3, 68);
-            this.splitContainer1.Name = "splitContainer1";
-            this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
-            //
-            // splitContainer1.Panel1
-            //
-            this.splitContainer1.Panel1.Controls.Add(this.coursesListBox);
-            this.splitContainer1.Size = new System.Drawing.Size(194, 320);
-            this.splitContainer1.SplitterDistance = 163;
-            this.splitContainer1.TabIndex = 2;
+            // courseManagerSplitContainer
+            //
+            this.courseManagerSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.courseManagerSplitContainer.Location = new System.Drawing.Point(0, 43);
+            this.courseManagerSplitContainer.Margin = new System.Windows.Forms.Padding(0);
+            this.courseManagerSplitContainer.Name = "courseManagerSplitContainer";
+            this.courseManagerSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+            //
+            // courseManagerSplitContainer.Panel1
+            //
+            this.courseManagerSplitContainer.Panel1.Controls.Add(this.coursesListBox);
+            this.courseManagerSplitContainer.Size = new System.Drawing.Size(200, 348);
+            this.courseManagerSplitContainer.SplitterDistance = 177;
+            this.courseManagerSplitContainer.TabIndex = 2;
             //
             // coursesListBox
             //
@@ -320,7 +322,7 @@
             this.coursesListBox.Location = new System.Drawing.Point(0, 0);
             this.coursesListBox.MultiColumn = true;
             this.coursesListBox.Name = "coursesListBox";
-            this.coursesListBox.Size = new System.Drawing.Size(194, 163);
+            this.coursesListBox.Size = new System.Drawing.Size(200, 177);
             this.coursesListBox.TabIndex = 1;
             this.coursesListBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.coursesListBox_MouseDown);
             //
@@ -340,9 +342,9 @@
             this.menuStrip1.ResumeLayout(false);
             this.menuStrip1.PerformLayout();
             this.courseManagerPanel.ResumeLayout(false);
-            this.splitContainer1.Panel1.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
-            this.splitContainer1.ResumeLayout(false);
+            this.courseManagerSplitContainer.Panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.courseManagerSplitContainer)).EndInit();
+            this.courseManagerSplitContainer.ResumeLayout(false);
             this.ResumeLayout(false);
             this.PerformLayout();

@@ -356,25 +358,25 @@
         private System.Windows.Forms.Label wednesdayLabel;
         private System.Windows.Forms.Label thursdayLabel;
         private System.Windows.Forms.Label fridayLabel;
-        private System.Windows.Forms.Label label1;
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Label label3;
-        private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.Label label5;
-        private System.Windows.Forms.Label label6;
-        private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.Label time1Label;
+        private System.Windows.Forms.Label time2Label;
+        private System.Windows.Forms.Label time3Label;
+        private System.Windows.Forms.Label time4Llabel;
+        private System.Windows.Forms.Label time5Label;
+        private System.Windows.Forms.Label time6Label;
+        private System.Windows.Forms.Label time7Label;
+        private System.Windows.Forms.Label time8Label;
         private System.Windows.Forms.MenuStrip menuStrip1;
-        private System.Windows.Forms.ToolStripMenuItem tiedostoToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem uusiToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem avaaToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem tallennaToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem tulostaToolStripMenuItem;
-        private System.Windows.Forms.ToolStripMenuItem poistuToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem FileToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem NewToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem printToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
         private System.Windows.Forms.TableLayoutPanel courseManagerPanel;
         private System.Windows.Forms.Button addCourseButton;
         private System.Windows.Forms.ListBox coursesListBox;
-        private System.Windows.Forms.SplitContainer splitContainer1;
+        private System.Windows.Forms.SplitContainer courseManagerSplitContainer;
     }
 }


Tiny resharping

Tiny resharping

--- Mapsui/Layers/LayerCollection.cs
+++ Mapsui/Layers/LayerCollection.cs
@@ -96,7 +96,7 @@

         private void OnLayerMoved(ILayer layer)
         {
-            if (LayerMoved != null) LayerMoved(layer);
+            LayerMoved?.Invoke(layer);
         }

         public IEnumerable<ILayer> FindLayer(string layername)
@@ -104,4 +104,4 @@
             return _layers.Where(layer => layer.Name.Contains(layername));
         }
     }
-}
+}


Made the foldout button take parameters as input

- Made the button take parameters as input instead of just outputting "invoked".
- Rearranged the drawing methods for better readability.

--- Assets/EasyButtons/Editor/Button.cs
+++ Assets/EasyButtons/Editor/Button.cs
@@ -43,15 +43,67 @@
         {
             DrawWithEnabledGUI(_enabled, () =>
             {
-                if (_hasParams)
+                DrawWithSpacing(_spacing.HasFlag(ButtonSpacing.Before), _spacing.HasFlag(ButtonSpacing.After), () =>
                 {
-                    DrawFoldout();
-                }
-                else
-                {
-                    DrawButtonWithSpacing(targets);
-                }
+                    if (_hasParams)
+                    {
+                        (Rect foldoutRect, Rect buttonRect) = GetFoldoutAndButtonRects(_name);
+
+                        _expanded = DrawInFoldout(foldoutRect, _expanded, _name, () =>
+                        {
+                            foreach (ParamInfo param in _parameters)
+                            {
+                                param.Draw();
+                            }
+                        });
+
+                        if (GUI.Button(buttonRect, "Invoke"))
+                            Invoke(targets);
+                    }
+                    else
+                    {
+                        if (GUILayout.Button(_name))
+                            Invoke(targets);
+                    }
+                });
             });
+        }
+
+        private static bool DrawInFoldout(Rect foldoutRect, bool expanded, string header, Action drawStuff)
+        {
+            expanded = EditorGUI.BeginFoldoutHeaderGroup(foldoutRect, expanded, header);
+
+            if (expanded)
+            {
+                EditorGUI.indentLevel++;
+                drawStuff();
+                EditorGUI.indentLevel--;
+            }
+
+            EditorGUILayout.EndFoldoutHeaderGroup();
+
+            return expanded;
+        }
+
+        private static (Rect, Rect) GetFoldoutAndButtonRects(string header)
+        {
+            const float buttonWidth = 60f;
+
+            var foldoutWithoutButton = GUILayoutUtility.GetRect(new GUIContent(header), EditorStyles.foldoutHeader); // TODO: replace new GUIContent
+
+            var foldoutRect = new Rect(
+                foldoutWithoutButton.x,
+                foldoutWithoutButton.y,
+                foldoutWithoutButton.width - buttonWidth,
+                foldoutWithoutButton.height);
+
+            var buttonRect = new Rect(
+                foldoutWithoutButton.xMax - buttonWidth,
+                foldoutWithoutButton.y,
+                buttonWidth,
+                foldoutWithoutButton.height);
+
+            return (foldoutRect, buttonRect);
         }

         private void Invoke(IEnumerable<Object> objects)
@@ -64,29 +116,17 @@
             }
         }

-        private void DrawButtonWithSpacing(IEnumerable<Object> targets)
+        private static void DrawWithSpacing(bool before, bool after, Action drawStuff)
         {
             const float spacingHeight = 10f;

-            if (_spacing.HasFlag(ButtonSpacing.Before))
+            if (before)
                 GUILayout.Space(spacingHeight);

-            if (GUILayout.Button(_name))
-                Invoke(targets);
+            drawStuff();

-            if (_spacing.HasFlag(ButtonSpacing.After))
+            if (after)
                 GUILayout.Space(spacingHeight);
-        }
-
-        private void DrawFoldout()
-        {
-            _expanded = DrawInFoldout(_expanded, _name, () =>
-            {
-                foreach (ParamInfo param in _parameters)
-                {
-                    param.Draw();
-                }
-            });
         }

         private static void DrawWithEnabledGUI(bool enabled, Action drawStuff)
@@ -95,30 +135,6 @@
             GUI.enabled = enabled;
             drawStuff();
             GUI.enabled = previousValue;
-        }
-
-        private static bool DrawInFoldout(bool expanded, string name, Action drawStuff)
-        {
-            var foldoutRect = GUILayoutUtility.GetRect(new GUIContent(name), EditorStyles.foldoutHeader);
-
-            var buttonRect = new Rect(foldoutRect.xMax - 50f, foldoutRect.y, 50f, foldoutRect.height);
-            var actualFoldoutRect = new Rect(foldoutRect.position, new Vector2(foldoutRect.width - 50f, foldoutRect.height));
-
-            expanded = EditorGUI.BeginFoldoutHeaderGroup(actualFoldoutRect, expanded, name);
-
-            if (expanded)
-            {
-                EditorGUI.indentLevel++;
-                drawStuff();
-                EditorGUI.indentLevel--;
-            }
-
-            EditorGUILayout.EndFoldoutHeaderGroup();
-
-            if (GUI.Button(buttonRect, "Invoke"))
-                Debug.Log("invoked");
-
-            return expanded;
         }

         private readonly struct ParamInfo


Fixed summary so that only success paths are displayed on summary

--- Assets/Editor/MapperWindowEditor.cs
+++ Assets/Editor/MapperWindowEditor.cs
@@ -334,10 +334,10 @@
 				summary += "\nDead paths: " + deaths.Count;

 				// How many paths killed how many enemies
-				List<Path> all = new List<Path>(paths);
-				all.AddRange(deaths);
 				Dictionary<int, int> map = new Dictionary<int, int>();
-				foreach (Path p in all) {
+				for (int i = 0; i < SpaceState.Editor.enemies.Length; i++)
+					map.Add(i, 0);
+				foreach (Path p in paths) {
 					int killed = 0;
 					foreach (Node n in p.points)
 						if (n.died != null)


fixed missing kernel registration for StringComponent

--- Underscore.cs/Setup/Utility.cs
+++ Underscore.cs/Setup/Utility.cs
@@ -7,10 +7,11 @@
 	{
 		public void Load(Kernel kernel)
 		{
+			kernel.Register<ICompactComponent, CompactComponent>();
 			kernel.Register<IFunctionComponent, FunctionComponent>();
 			kernel.Register<IMathComponent, MathComponent>();
 			kernel.Register<IObjectComponent, ObjectComponent>();
-			kernel.Register<ICompactComponent, CompactComponent>();
+			kernel.Register<IStringComponent, StringComponent>();
 			kernel.Register<Module.Utility>();
 		}
 	}


Added NVRInteractables.GetAllInteractables()

Should be a bit faster (and less allocations) than getting all the keys and turning that into a list / array

--- Assets/NewtonVR/NVRInteractables.cs
+++ Assets/NewtonVR/NVRInteractables.cs
@@ -9,6 +9,7 @@
     {
         private static Dictionary<Collider, NVRInteractable> ColliderMapping;
         private static Dictionary<NVRInteractable, Collider[]> NVRInteractableMapping;
+        private static List<NVRInteractable> NVRInteractableList;

         private static bool Initialized = false;

@@ -16,6 +17,7 @@
         {
             ColliderMapping = new Dictionary<Collider, NVRInteractable>();
             NVRInteractableMapping = new Dictionary<NVRInteractable, Collider[]>();
+            NVRInteractableList = new List<NVRInteractable>();

             Initialized = true;
         }
@@ -33,6 +35,11 @@
             {
                 ColliderMapping[colliders[index]] = interactable;
             }
+
+            if (NVRInteractableList.Contains(interactable) == false)
+            {
+                NVRInteractableList.Add(interactable);
+            }
         }

         public static void Deregister(NVRInteractable interactable)
@@ -45,7 +52,9 @@
             NVRPlayer.DeregisterInteractable(interactable);

             ColliderMapping = ColliderMapping.Where(mapping => mapping.Value != interactable).ToDictionary(mapping => mapping.Key, mapping => mapping.Value);
-            NVRInteractableMapping.Remove(interactable);
+            NVRInteractableMapping.Remove(interactable);
+
+            NVRInteractableList.Remove(interactable);
         }

         public static NVRInteractable GetInteractable(Collider collider)
@@ -59,5 +68,10 @@
             ColliderMapping.TryGetValue(collider, out interactable);
             return interactable;
         }
+
+        public static List<NVRInteractable> GetAllInteractables()
+        {
+            return NVRInteractableList;
+        }
     }
 }


Fix bug with warp dialog not taking mod into account

--- Assets/Scripts/DosBox/WarpDialog.cs
+++ Assets/Scripts/DosBox/WarpDialog.cs
@@ -110,7 +110,7 @@
 					warpActor = GetComponent<DosBox>().Player;
 				}

-				Vector3 offset = GetComponent<DosBox>().GetMousePosition(warpActor.Room, warpActor.Floor) - warpActor.LocalPosition;
+				Vector3 offset = GetComponent<DosBox>().GetMousePosition(warpActor.Room, warpActor.Floor) - (warpActor.LocalPosition + warpActor.Mod);
 				offset = new Vector3(Mathf.RoundToInt(offset.x), 0.0f, Mathf.RoundToInt(offset.z));
 				MoveActor(offset);
 			}
@@ -137,7 +137,8 @@

 		if (!AdvancedMode.BoolValue)
 		{
-			TryParsePosition(positionX, positionY, positionZ, out local, warpActor.LocalPosition);
+			TryParsePosition(positionX, positionY, positionZ, out local, warpActor.LocalPosition + warpActor.Mod);
+			local -= warpActor.Mod;

 			//apply offset to world/bound
 			Vector3 offset = local - warpActor.LocalPosition;
@@ -149,8 +150,10 @@
 		{
 			Vector3 boundingPos;
 			TryParsePosition(boundingPosX, boundingPosY, boundingPosZ, out boundingPos, warpActor.BoundingPos);
-			TryParsePosition(localPosX, localPosY, localPosZ, out local, warpActor.LocalPosition);
-			TryParsePosition(worldPosX, worldPosY, worldPosZ, out world, warpActor.WorldPosition);
+			TryParsePosition(localPosX, localPosY, localPosZ, out local, warpActor.LocalPosition + warpActor.Mod);
+			TryParsePosition(worldPosX, worldPosY, worldPosZ, out world, warpActor.WorldPosition + warpActor.Mod);
+			local -= warpActor.Mod;
+			world -= warpActor.Mod;

 			Vector3 offset = boundingPos - warpActor.BoundingPos;
 			lowerBound = warpActor.BoundingLower + offset;
@@ -185,7 +188,7 @@
 		lastTimeKeyPressed = Time.time;
 	}

-	//input keys
+	//input keys or warp
 	void MoveActor(Vector3 offset)
 	{
 		Vector3 local = warpActor.LocalPosition + offset;
@@ -203,12 +206,12 @@
 		boundingPosX.text = actor.BoundingPos.x.ToString();
 		boundingPosY.text = actor.BoundingPos.y.ToString();
 		boundingPosZ.text = actor.BoundingPos.z.ToString();
-		localPosX.text = positionX.text = actor.LocalPosition.x.ToString();
-		localPosY.text = positionY.text = actor.LocalPosition.y.ToString();
-		localPosZ.text = positionZ.text = actor.LocalPosition.z.ToString();
-		worldPosX.text = actor.WorldPosition.x.ToString();
-		worldPosY.text = actor.WorldPosition.y.ToString();
-		worldPosZ.text = actor.WorldPosition.z.ToString();
+		localPosX.text = positionX.text = (actor.LocalPosition.x + actor.Mod.x).ToString();
+		localPosY.text = positionY.text = (actor.LocalPosition.y + actor.Mod.y).ToString();
+		localPosZ.text = positionZ.text = (actor.LocalPosition.z + actor.Mod.z).ToString();
+		worldPosX.text = (actor.WorldPosition.x + actor.Mod.x).ToString();
+		worldPosY.text = (actor.WorldPosition.y + actor.Mod.y).ToString();
+		worldPosZ.text = (actor.WorldPosition.z + actor.Mod.z).ToString();
 	}

 	void UpdateAngleInputField(Box actor)


style: End of lines

style: End of lines

--- Assets/Udacity/Scripts/AddCamera.cs
+++ Assets/Udacity/Scripts/AddCamera.cs
@@ -1,18 +1,18 @@
-using UnityEngine;
-
-public class AddCamera : MonoBehaviour {
-
+using UnityEngine;
+
+public class AddCamera : MonoBehaviour {
+
 	public Canvas canvas;

 	// Use this for initialization
-	void Start() {
-		canvas.renderMode = RenderMode.ScreenSpaceCamera;
+	void Start() {
+		canvas.renderMode = RenderMode.ScreenSpaceCamera;
 	}

 	// Update is called once per frame
-	void Update() {
-		if (canvas.worldCamera == null) {
+	void Update() {
+		if (canvas.worldCamera == null) {
 			canvas.worldCamera = GameObject.Find("Main Camera Right").GetComponent<Camera>();
-		}
-	}
-}
+		}
+	}
+}


Attempt to make threading tests more robust

--- MaxMind.Db.Test/ThreadingTest.cs
+++ MaxMind.Db.Test/ThreadingTest.cs
@@ -16,34 +16,36 @@
         [TestCase(FileAccessMode.Memory)]
         public void TestParallelFor(FileAccessMode mode)
         {
-            var reader = new Reader(Path.Combine("..", "..", "TestData", "GeoLite2-City.mmdb"), mode);
             var count = 0;
             var ipsAndResults = new Dictionary<IPAddress, string>();
             var rand = new Random();
-            while (count < 10000)
+            using (var reader = new Reader(Path.Combine("..", "..", "TestData", "GeoLite2-City.mmdb"), mode))
             {
-                var ip = new IPAddress(rand.Next(int.MaxValue));
-                var resp = reader.Find(ip);
-                if (resp != null)
+                while (count < 10000)
                 {
-                    ipsAndResults.Add(ip, resp.ToString());
-                    count++;
+                    var ip = new IPAddress(rand.Next(int.MaxValue));
+                    var resp = reader.Find(ip);
+                    if (resp != null)
+                    {
+                        ipsAndResults.Add(ip, resp.ToString());
+                        count++;
+                    }
                 }
+
+                var ips = ipsAndResults.Keys.ToArray();
+                var start = DateTime.Now;
+                Parallel.For(0, ips.Length, i =>
+                {
+                    var ipAddress = ips[i];
+                    var result = reader.Find(ipAddress);
+                    var resultString = result.ToString();
+                    var expectedString = ipsAndResults[ipAddress];
+                    if (resultString != expectedString)
+                        throw new Exception(string.Format("Non-matching result. Expected {0}, found {1}", expectedString, resultString));
+                });
+                var stop = DateTime.Now;
+                Console.WriteLine("Requests per second: " + count / (stop - start).TotalSeconds);
             }
-
-            var ips = ipsAndResults.Keys.ToArray();
-            var start = DateTime.Now;
-            Parallel.For(0, ips.Length, i =>
-            {
-                var ipAddress = ips[i];
-                var result = reader.Find(ipAddress);
-                var resultString = result.ToString();
-                var expectedString = ipsAndResults[ipAddress];
-                if (resultString != expectedString)
-                    throw new Exception(string.Format("Non-matching result. Expected {0}, found {1}", expectedString, resultString));
-            });
-            var stop = DateTime.Now;
-            Console.WriteLine("Requests per second: " + count / (stop - start).TotalSeconds);
         }

         [Test]
@@ -54,7 +56,10 @@
         {
             Parallel.For(0, 1000, i =>
             {
-                var reader = new Reader(Path.Combine("..", "..", "TestData", "GeoLite2-City.mmdb"), mode);
+                using (var reader = new Reader(Path.Combine("..", "..", "TestData", "GeoLite2-City.mmdb"), mode))
+                {
+                    reader.Find("1.1.1.1");
+                }
             });
         }
     }


Corrected reaction on unknown command

Corrected reaction on unknown command

--- VKDiscordBot/CommandHandler.cs
+++ VKDiscordBot/CommandHandler.cs
@@ -49,13 +49,15 @@
             await message.Channel.TriggerTypingAsync();
             var result = await commands.ExecuteAsync(context, prefixInt, _services);
             if (!result.IsSuccess)
-            {
-                List<GuildEmote> emotes = new List<GuildEmote>(context.Guild.Emotes);
-                if (emotes.Count != 0)
+            {
+                await message.AddReactionAsync(new Emoji("❔")).ContinueWith(async (s) =>
                 {
-                    await message.AddReactionAsync(emotes[_random.Next(0, emotes.Count - 1)]);
-                }
-                await message.AddReactionAsync(new Emoji("❔"));
+                    List<GuildEmote> emotes = new List<GuildEmote>(context.Guild.Emotes);
+                    if (emotes.Count != 0)
+                    {
+                        await message.AddReactionAsync(emotes[_random.Next(0, emotes.Count - 1)]);
+                    }
+                });
             }
         }
     }


Changing mood names to be more conventional

--- Mood/Migrations/Configuration.cs
+++ Mood/Migrations/Configuration.cs
@@ -15,11 +15,11 @@

         protected override void Seed(ApplicationDBContext context)
         {
-            context.Moods.AddOrUpdate(m => m.Description,
+            context.Moods.AddOrUpdate(m => m.IconName,
                 new Models.Mood() { Description = "Angry", IconName = "Angry" },
-                new Models.Mood() { Description = "Miffed", IconName = "Miffed" },
-                new Models.Mood() { Description = "Neutral", IconName = "Neutral" },
-                new Models.Mood() { Description = "Ok", IconName = "Ok" },
+                new Models.Mood() { Description = "Unhappy", IconName = "Miffed" },
+                new Models.Mood() { Description = "OK", IconName = "Neutral" },
+                new Models.Mood() { Description = "Good", IconName = "Ok" },
                 new Models.Mood() { Description = "Fantastic", IconName = "Fantastic" });

             try


Reset bindings so updated details are displayed

--- MultiMiner.Win/DetailsControl.cs
+++ MultiMiner.Win/DetailsControl.cs
@@ -4,8 +4,6 @@
 using System.Linq;
 using System.Windows.Forms;
 using MultiMiner.Xgminer;
-using MultiMiner.Coin.Api;
-using MultiMiner.Engine.Configuration;
 using MultiMiner.Engine;
 using MultiMiner.Xgminer.Api.Responses;
 using MultiMiner.Win.Extensions;
@@ -95,10 +93,13 @@
                 cryptoCoinBindingSource.DataSource = deviceViewModel.Coin;
             else
                 cryptoCoinBindingSource.DataSource = new CryptoCoin();
+            cryptoCoinBindingSource.ResetBindings(false);

             deviceInformationResponseBindingSource.DataSource = deviceInformation;
-
+            deviceInformationResponseBindingSource.ResetBindings(false);
+
             deviceBindingSource.DataSource = deviceViewModel;
+            deviceBindingSource.ResetBindings(false);

             switch (deviceViewModel.Kind)
             {


Fix flashing bug introduced in 152a7d719b15b3fb4559bea09b378b963555fe45

part of #565

--- Wox/ViewModel/MainViewModel.cs
+++ Wox/ViewModel/MainViewModel.cs
@@ -453,6 +453,7 @@
                     }
                 };
                 action.Invoke();
+
                 var plugins = PluginManager.ValidPluginsForQuery(query);
                 foreach (var plugin in plugins)
                 {
@@ -466,9 +467,9 @@
                         });
                     }
                 }
-            }
-
-            IsProgressBarTooltipVisible = false;
+
+
+            }
         }

         private void ResetQueryHistoryIndex()
@@ -479,8 +480,7 @@

         private void UpdateResultViewInternal(List<Result> list, PluginMetadata metadata)
         {
-            Stopwatch.Normal($"UI update cost for {metadata.Name}",
-                    () => { Results.AddResults(list, metadata.ID); });
+            Results.AddResults(list, metadata.ID);
         }

         private void DisplayQueryHistory(HistoryItem history)
@@ -562,13 +562,9 @@
                 });
             }

-            if (list.Count > 0)
+            if (list.Count > 0 && ! ResultListBoxVisibility.IsVisible())
             {
                 ResultListBoxVisibility = Visibility.Visible;
-            }
-            else
-            {
-                ResultListBoxVisibility = Visibility.Collapsed;
             }

         }


fix process id not being parsed correctly on test folders

--- BitSharp.Core.Test/TempDirectory.cs
+++ BitSharp.Core.Test/TempDirectory.cs
@@ -8,19 +8,19 @@
     public class TempDirectory
     {
         public static string BaseDirectory { get; private set; }
-
+
         // cleanup the entire base directory on first initialization
         static TempDirectory()
         {
             BaseDirectory = Path.Combine(Path.GetTempPath(), "BitSharp", "Tests");
-
+
             if (Directory.Exists(BaseDirectory))
             {
                 // delete any subfolders, unless they are named with an active process id, which is another test currently in progress
                 foreach (var subFolder in Directory.EnumerateDirectories(BaseDirectory))
                 {
                     int processId;
-                    var isOtherTestFolder = int.TryParse(subFolder, out processId) && IsProcessRunning(processId);
+                    var isOtherTestFolder = int.TryParse(Path.GetFileName(subFolder), out processId) && IsProcessRunning(processId);

                     if (!isOtherTestFolder)
                         DeleteDirectory(subFolder);


Missed some summaries

Missed some summaries

--- XPlatUtils/ServiceContainer.cs
+++ XPlatUtils/ServiceContainer.cs
@@ -111,11 +111,17 @@
             }
         }

+        /// <summary>
+        /// Adds a "scope" which is a way to register a service on a stack to be popped off at a later time
+        /// </summary>
         public static void AddScope()
         {
             scopedServices.Push(new Dictionary<Type, object>());
         }

+        /// <summary>
+        /// Removes the current "scope" which pops off some local services
+        /// </summary>
         public static void RemoveScope()
         {
             if (scopedServices.Count > 0)


Fixed: TextLayout should be disposed to free backend resources

--- Xwt/Xwt.Drawing/VectorImage.cs
+++ Xwt/Xwt.Drawing/VectorImage.cs
@@ -666,6 +666,7 @@
 					var la = new TextLayout (toolkit);
 					lad.InitLayout (la);
 					handler.DrawTextLayout (ctx, la, cm.Doubles [di++], cm.Doubles [di++]);
+					la.Dispose();
 					break;
 				case DrawingCommand.Fill:
 					handler.Fill (ctx);


Fixed search test for events

Fixed search test for events

--- BreweryDB/BreweryDB.Tests/Events.cs
+++ BreweryDB/BreweryDB.Tests/Events.cs
@@ -83,11 +83,11 @@
             Assert.IsTrue(response.Status == "success");
             Assert.IsTrue(response.CurrentPage == 1);
             Assert.IsTrue(response.NumberOfPages >= 1);
-            Assert.IsTrue(response.TotalResults >= 36);
+            Assert.IsTrue(response.TotalResults >= 1);

             var _event = response.Data.FirstOrDefault();
-            Assert.IsTrue(_event?.Id == "cJio9R");
-            Assert.IsTrue(_event.Name == "Brewers Association");
+            Assert.IsTrue(_event?.Id == "28OVyf");
+            Assert.IsTrue(_event.Name == "B'dam BrewJAM");
         }

     }


IStasd should inherit from idisposable

IStasd should inherit from idisposable

--- src/StatsN/IStatsd.cs
+++ src/StatsN/IStatsd.cs
@@ -5,7 +5,7 @@

 namespace StatsN
 {
-    public interface IStatsd
+    public interface IStatsd : IDisposable
     {
         /// <summary>
         /// Simple Counter


update

update

--- CSharpGL/0Foundations/Maths/mat4.cs
+++ CSharpGL/0Foundations/Maths/mat4.cs
@@ -1,6 +1,5 @@
 using System;
 using System.ComponentModel;
-using System.Runtime.InteropServices;

 namespace CSharpGL
 {


(build) Switch off CodeCov by default

(build) Switch off CodeCov by default

- Still not sure why this is failing on some projects
- But for now, let's switch it off by default

--- Cake.Recipe/Content/parameters.cake
+++ Cake.Recipe/Content/parameters.cake
@@ -389,7 +389,7 @@
         bool shouldExecuteGitLink = true,
         bool shouldRunDupFinder = true,
         bool shouldRunInspectCode = true,
-        bool shouldRunCodecov = true,
+        bool shouldRunCodecov = false,
         bool shouldRunDotNetCorePack = false,
         bool shouldBuildNugetSourcePackage = false,
         bool shouldRunIntegrationTests = false,


rename

rename

--- NJasmine/GivenWhenThenFixture.cs
+++ NJasmine/GivenWhenThenFixture.cs
@@ -34,7 +34,7 @@
             }
         }

-        private PositionContext SetPositionForNestedReentry_then_Restore_then_NextSibling()
+        private PositionContext SetPositionForNestedReentry_then_Restore_and_Advance_for_Next()
         {
             var position = base.CurrentPosition;
             var nextPosition = base.CurrentPosition.GetNextSiblingPosition();
@@ -47,7 +47,7 @@

         public void describe(string description, Action specification)
         {
-            using(var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using(var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitFork(SpecElement.describe, description, specification, context.Position);
             }
@@ -55,7 +55,7 @@

         public void given(string givenPhrase, Action specification)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitFork(SpecElement.given, "given " + givenPhrase, specification, context.Position);
             }
@@ -63,7 +63,7 @@

         public void when(string whenPhrase, Action specification)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitFork(SpecElement.when, "when " + whenPhrase, specification, context.Position);
             }
@@ -71,7 +71,7 @@

         public void then(string thenPhrase, Action test)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitTest(SpecElement.then, "then " + thenPhrase, test, context.Position);
             }
@@ -79,7 +79,7 @@

         public void then(string thenPhrase)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitTest(SpecElement.then, "then " + thenPhrase, null, context.Position);
             }
@@ -87,7 +87,7 @@

         public void it(string itPhrase, Action action)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitTest(SpecElement.it, itPhrase, action, context.Position);
             }
@@ -95,7 +95,7 @@

         public void it(string itPhrase)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitTest(SpecElement.it, itPhrase, null, context.Position);
             }
@@ -103,7 +103,7 @@

         public void afterEach(Action cleanup)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitAfterEach(SpecElement.afterEach, cleanup, context.Position);
             }
@@ -111,7 +111,7 @@

         public void cleanup(Action cleanup)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitAfterEach(SpecElement.cleanup, cleanup, context.Position);
             }
@@ -119,7 +119,7 @@

         public void beforeEach(Action action)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitBeforeEach(SpecElement.beforeEach, delegate()
                     {
@@ -132,7 +132,7 @@

         public void arrange(Action arrangeAction)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitBeforeEach(SpecElement.arrange, delegate()
                     {
@@ -145,7 +145,7 @@

         public T arrange<T>(Func<T> arrangeAction)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 return base.Visitor.visitBeforeEach(SpecElement.arrange, arrangeAction, context.Position);
             }
@@ -153,7 +153,7 @@

         public TArranged arrange<TArranged>() where TArranged : class, new()
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 Func<TArranged> factory = delegate { return new TArranged(); };

@@ -164,7 +164,7 @@

         public void beforeAll(Action action)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitBeforeAll<string>(SpecElement.beforeAll, delegate
                     {
@@ -177,7 +177,7 @@

         public T beforeAll<T>(Func<T> action)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 return base.Visitor.visitBeforeAll(SpecElement.beforeAll, action, context.Position);
             }
@@ -185,7 +185,7 @@

         public void afterAll(Action action)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitAfterAll(SpecElement.afterAll, action, context.Position);
             }
@@ -198,7 +198,7 @@

         public void ignoreBecause(string reason)
         {
-            using (var context = SetPositionForNestedReentry_then_Restore_then_NextSibling())
+            using (var context = SetPositionForNestedReentry_then_Restore_and_Advance_for_Next())
             {
                 base.Visitor.visitIgnoreBecause(reason, context.Position);
             }


update documentation

update documentation

--- CmcLibNet.Export/IExportSettings.cs
+++ CmcLibNet.Export/IExportSettings.cs
@@ -42,47 +42,52 @@
         /// </remarks>
         bool UseThids { get; set; }
         /// <summary>
-        /// Headermode, i.e. what to use for columnames (text, html, excel) or nodenames (xml, json). Default is <see cref="Export.HeaderMode.Fieldname"/>.
+        /// Headermode, i.e. what to use for columnames (<see cref="ExportFormat.Text"/>, <see cref="ExportFormat.Html"/>, <see cref="ExportFormat.Excel"/>)
+        /// or nodenames (<see cref="ExportFormat.Xml"/>, <see cref="ExportFormat.Json"/>). Default is <see cref="Export.HeaderMode.Fieldname"/>.
         /// </summary>
         HeaderMode HeaderMode { get; set;}
         /// <summary>
-        /// Use custom columnheaders. THey must match the number of fields in the cursor.
+        /// Use custom columnheaders.
         /// </summary>
         /// <remarks>You cannot use custom headers in combination with <see cref="ExportSettings.NestConnectedItems"/>.
         /// <para>You must supply custom headers for all columns in the cursor, even when you have set <see cref="SkipConnectedItems"/> to <c>true</c>.</para>
-        /// <para>Type is <c>object</c> for compatibility with COM.</para>
+        /// <para>Type is <c>object[]</c> for compatibility with COM.</para>
         /// </remarks>
         object[] CustomHeaders { get; set;}
         /// <summary>
-        /// Data format the export engine should generate. Default is XML.
+        /// Data format the export engine should generate. Default is <see cref="ExportFormat.Xml"/>.
         /// </summary>
         ExportFormat ExportFormat { get; set;}
         /// <summary>
-        /// Ignore connected items.
-        /// </summary>
-        /// <remarks>Note that they may still be read from the database (e.g. when exporting views), just ignored in the output.
+        /// Ignore connected items.
+        /// </summary>
+        /// <remarks>Note that connected data will still be read if defined, just ignored in the output.
         /// <para>Not all exports respect this setting.</para>
-        /// <para>The recommended way to ignore connected items is simply to create a custom cursor or view that does not include them.</para></remarks>
+        /// <para>For best performance create a custom cursor or view that does not include connected columns.</para></remarks>
         bool SkipConnectedItems { get; set; }
         /// <summary>
-        /// External CSS file to be associated with an HTML export. It will not be in-lined.
+        /// External CSS file to be linked with an HTML export. Location is the output path.
         /// Only applies to HTML exports. Default is empty (no CSSFile).
         /// </summary>
         string CSSFile { get; set; }
         /// <summary>
-        /// Text-delimiter used in a Text export. Only applies to Text and HTML exports. Default is tab character.
+        /// Text-delimiter used in a Text export. Only applies to <see cref="ExportFormat.Text"/> and <see cref="ExportFormat.Html"/> exports.
+        /// Default is tab character.
         /// </summary>
         string TextDelimiter { get; set; }
         /// <summary>
-        /// Text-delimiter used for connected values. Only applies to Text and HTML exports. Default is new-line character (same as Commence uses).
+        /// Text-delimiter used for connected values. Only applies to <see cref="ExportFormat.Text"/> and <see cref="ExportFormat.Html"/> exports.
+        /// Default is newline character (same as Commence uses).
         /// </summary>
         string TextDelimiterConnections { get; set; }
         /// <summary>
-        /// Text-qualifier used in a Text export. Only applies to Text and HTML exports. Default is " (double-quote).
+        /// Text-qualifier. Only applies to <see cref="ExportFormat.Text"/> and <see cref="ExportFormat.Html"/> exports.
+        /// Default is " (double-quote).
         /// </summary>
         string TextQualifier { get; set; } // we really want a char, but COM Interop will complain
         /// <summary>
-        /// Use headers on the first row in table-like exports (like Text, HTML, Excel). Default is <c>true</c>.
+        /// Use headers on the first row in table-like exports (like <see cref="ExportFormat.Text"/>, <see cref="ExportFormat.Html"/>, <see cref="ExportFormat.Excel"/>).
+        /// Default is <c>true</c>.
         /// </summary>
         bool HeadersOnFirstRow { get; set; }
         /// <summary>
@@ -107,27 +112,31 @@
         bool UseDDE { get; set; }
         /// <summary>
         /// Include all connected items.
-        /// Supported formats are <see cref="ExportFormat.Xml"/>, <see cref="ExportFormat.Json"/>, <see cref="ExportFormat.Excel"/>
+        /// Supported only for <see cref="ExportFormat.Xml"/>, <see cref="ExportFormat.Json"/>, <see cref="ExportFormat.Excel"/>
         /// Overrides <see cref="Canonical"/>, <see cref="ISO8601Format"/>, <see cref="SkipConnectedItems"/>,
         /// <see cref="SplitConnectedItems"/>, <see cref="ExcelUpdateOptions"/>.
         /// </summary>
-        /// <remarks>Use this if connected items are truncated. Will be significantly slower due to multiple data reads.
-        /// <para>Alternatively, you can adjust the <see cref="MaxFieldSize"/> parameter.
-        /// Which setting is faster depends on the data. A high <see cref="MaxFieldSize"/> much degrades Commence performance.
-        /// <see cref="PreserveAllConnections"/> uses the optimal sizes when it comes to performance.</para>
+        /// <remarks>The Commence API returns connected field values as a string, subject to <see cref="ExportSettings.MaxFieldSize"/> .
+        /// This means that if there are a large number of connected items, not all data may be retrieved.
+        /// <see cref="PreserveAllConnections"/> will ensure all connected data are read.
+        /// There is a performance penalty involved because it will perform multiple reads.
+        /// <para>Alternatively, you can try adjust the <see cref="MaxFieldSize"/> parameter.
+        /// Which setting is faster depends on the data. A high <see cref="MaxFieldSize"/> also significantly degrades Commence performance.
+        /// </para>
+        /// <para>There is no golden rule to this, but for production environment exports you probably want to set this to <c>true</c> just to be safe.</para>
         /// </remarks>
         bool PreserveAllConnections { get; set; }
         /// <summary>
         /// Get serialized XML with a XmlSchema (XSD).
-        /// Only applies with <see cref="PreserveAllConnections"/> in combination with <see cref="ExportFormat.Xml"/>.
+        /// Only applies to <see cref="PreserveAllConnections"/> in combination with <see cref="ExportFormat.Xml"/>.
         /// Default is <c>false</c>.
         /// </summary>
-        /// <remarks>Uses ADO.NET built-in serialization. Allows for importing into SQL Server and performing your own query logic.</remarks>
+        /// <remarks>Uses ADO.NET built-in serialization.
+        /// Allows for importing into SQL Server as well as performing your own query logic on the result.</remarks>
         bool WriteSchema { get; set; }
         /// <summary>
         /// Include additional connection information. Only applies to <see cref="ExportFormat.Json"/>. Default is <c>true</c>.
         /// </summary>
-        // TODO: should we also incorporate this in XML exports? As attributes perhaps?
         bool IncludeConnectionInfo { get; set; }
         /// <summary>
         /// Split connected values into separate nodes/elements. Only applies to <see cref="ExportFormat.Json"/> and <see cref="ExportFormat.Xml"/>.
@@ -142,7 +151,7 @@
         /// or <see cref="Database.CursorColumns.AddRelatedColumn(string, string, string)"/>.</description></item>
         /// <item><term><see cref="Database.CmcCursorType.View"/></term><description>Always</description></item>
         /// </list>
-        /// <para>On a regular cursor, i.e. with the connections defined as 'direct columns' (the default behaviour),
+        /// <para>On a cursor with the connections defined as 'direct columns',
         /// connected items are returned by Commence as comma-delimited strings without a text-qualifier,
         /// making it impossible to split them meaningfully.</para>
         /// </remarks>
@@ -154,7 +163,7 @@
         int NumRows { get; set; }
         /// <summary>
         /// Maximum number of characters to retrieve from fields. This includes connected fields.
-        /// The default when exporting from the export engine is ~500.000, which is about five times the Commence default.
+        /// The default is ~500.000, skabout five times the Commence default.
         /// </summary>
         /// <remarks>Severely impacts memory usage. When set to >2^20, <see cref="NumRows"/> may be overridden to prevent your system from exploding.</remarks>
         int MaxFieldSize { get; set; }
@@ -168,9 +177,9 @@
         /// </summary>
         ExcelUpdateOptions XlUpdateOptions { get; set; }
         /// <summary>
-        /// Custom root node for Xml, Json, Excel.
-        /// </summary>
-        /// <remarks>For Text, Html and Event writers this property is ignored
+        /// Custom root node for <see cref="ExportFormat.Xml"/>, <see cref="ExportFormat.Json"/>, <see cref="ExportFormat.Excel"/>.
+        /// </summary>
+        /// <remarks>For <see cref="ExportFormat.Text"/>, <see cref="ExportFormat.Html"/> and <see cref="ExportFormat.Event"/> writers this property is ignored
         /// <list type="table">
         /// <listheader><term>Export format</term><description>Notes</description></listheader>
         /// <item><term><see cref="ExportFormat.Excel"/></term><description>Custom sheetname</description></item>
@@ -178,8 +187,8 @@
         /// <item><term><see cref="ExportFormat.Xml"/></term><description>Custom root element name</description></item>
         /// </list>
         /// <para>Defaults to the datasource name.
-        /// For a view, this is the viewname,
-        /// for a category or cursor this is the category name.</para>
+        /// For a view that is the viewname,
+        /// for a category or custom cursor that is the category name.</para>
         /// </remarks>
         string CustomRootNode { get; set; }
         /// <summary>