Added new Column Role - Style

Added new Column Role - Style

--- src/Google.DataTable.Net.Wrapper/ColumnRole.cs
+++ src/Google.DataTable.Net.Wrapper/ColumnRole.cs
@@ -115,5 +115,22 @@
         {
             get { return "data"; }
         }
+
+        /// <summary>
+        /// Styles certain properties of different aspects of your data. Those values are:
+        /// color
+        /// opacity
+        /// stroke-width
+        /// stroke-color
+        /// stroke-opacity
+        /// fill-color
+        /// fill-opacity
+        /// </summary>
+        public static string Style
+        {
+            get { return "style";  }
+        }
+
+
     }
 }


Improve menu item coloring

Improve menu item coloring

--- src/HearThis/UI/ToolStripColorArrowRenderer.cs
+++ src/HearThis/UI/ToolStripColorArrowRenderer.cs
@@ -20,5 +20,34 @@
 			e.ArrowColor = e.Item.ForeColor; // why on earth isn't this the default??
 			base.OnRenderArrow(e);
 		}
+
+		/// <summary>
+		/// Without this, for some reason the menu item hovered over goes white and thus almost
+		/// disappears against the very light grey background of the menu. (But, we need to exclude
+		/// the top-level button from the fix, since it doesn't need to go black.)
+		/// </summary>
+		/// <param name="e"></param>
+		protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
+		{
+			if (e.Item.Selected && !(e.Item is ToolStripDropDownButton))
+				e.TextColor = Color.Black;
+			base.OnRenderItemText(e);
+		}
+
+		/// <summary>
+		/// Since all the menu items are black, making the hovered one black doesn't give any feedback.
+		/// Giving a little color to the background provides some. The hightlight color may be too bright,
+		/// but it seemed the most appropriate of the colors already in our palette.
+		/// </summary>
+		/// <param name="e"></param>
+		protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
+		{
+			if (e.Item.Selected)
+			{
+				e.Graphics.FillRectangle(AppPallette.HighlightBrush, new Rectangle(Point.Empty, e.Item.Size));
+				return;
+			}
+			base.OnRenderMenuItemBackground(e);
+		}
 	}
 }


return 404 if game is not found with given game id

--- results/Controllers/ResultsController.cs
+++ results/Controllers/ResultsController.cs
@@ -105,14 +105,21 @@
         [HttpGet("{gameId}")]
         public async Task<IActionResult> Get(string gameId)
         {
-            var user = await this.FetchGame(gameId);
-            var game = new GameModel()
+            try
             {
-                Game_id = user.id.ToString(),
-                Team_1 = user.name,
-                Team_2 = user.username
-            };
-            return Json(game);
+                var user = await this.FetchGame(gameId);
+                var game = new GameModel()
+                {
+                    Game_id = user.id.ToString(),
+                    Team_1 = user.name,
+                    Team_2 = user.username
+                };
+                return Json(game);
+            }
+            catch (ArgumentException e)
+            {
+                return StatusCode(404);
+            }
         }

         private async Task<UserModel> FetchGame(string gameId)
@@ -123,8 +130,15 @@
                 {
                     client.BaseAddress = new Uri(API_ENDPOINT);
                     var response = await client.GetAsync("/users/" + gameId);
-                    var stringResponse = await response.Content.ReadAsStringAsync();
-                    return JsonConvert.DeserializeObject<UserModel>(stringResponse);
+                    if (response.IsSuccessStatusCode)
+                    {
+                        var stringResponse = await response.Content.ReadAsStringAsync();
+                        return JsonConvert.DeserializeObject<UserModel>(stringResponse);
+                    }
+                    else
+                    {
+                        throw new ArgumentException("Invalid gameId " + gameId);
+                    }
                 }
                 catch (HttpRequestException e)
                 {


Fix uninitialization. Also upon installing remove the dummy content folder

--- src/Kephas.Plugins.NuGet/NuGetPluginManager.cs
+++ src/Kephas.Plugins.NuGet/NuGetPluginManager.cs
@@ -334,7 +334,7 @@
             this.AssertPluginsDisabled();

             var (pluginFolder, state, version) = this.GetInstalledPluginData(plugin);
-            if (state != PluginState.Enabled || state != PluginState.Disabled)
+            if (state != PluginState.Enabled && state != PluginState.Disabled)
             {
                 throw new InvalidOperationException($"Cannot uninitialize plugin {plugin} while in state '{state}'.");
             }
@@ -648,6 +648,12 @@
             {
                 await packageReader.CopyFilesAsync(pluginFolder, contentItem.Items, (src, target, stream) => this.ExtractPackageFile(src, target, contentFolderName, flatten: false), this.nativeLogger, cancellationToken).PreserveThreadContext();
             }
+
+            var contentFolder = Path.Combine(pluginFolder, contentFolderName);
+            if (Directory.Exists(contentFolder))
+            {
+                Directory.Delete(contentFolder, recursive: true);
+            }
         }

         private string ExtractPackageFile(string sourceFile, string targetPath, string subFolder, bool flatten)


Add my own TimeoutTask delegate so i don't have to modify TimerDispatcher.

svn path=/trunk/bitsharp/; revision=113203

--- src/MonoTorrent/MonoTorrent.Client/MainLoop.cs
+++ src/MonoTorrent/MonoTorrent.Client/MainLoop.cs
@@ -37,6 +37,8 @@
 {
     public delegate object MainLoopJob();
     public delegate void MainLoopTask();
+    public delegate bool TimeoutTask();
+
     public class MainLoop : IDisposable
     {
         private class DelegateTask
@@ -152,12 +154,12 @@
             return t.Result;
         }

-        public uint QueueTimeout(TimeSpan span, TimeoutHandler task)
+        public uint QueueTimeout(TimeSpan span, TimeoutTask task)
         {
             return dispatcher.Add(span, delegate {
                 return (bool)QueueWait(delegate {
                     TimeSpan s = TimeSpan.Zero;
-                    return task(null, ref s);
+                    return task();
                 });
             });
         }


Add failure messages back into unit test

This is addressing a comment by user bahusoid on my previous PR

--- src/NHibernate.Test/Hql/SimpleFunctionsTest.cs
+++ src/NHibernate.Test/Hql/SimpleFunctionsTest.cs
@@ -56,7 +56,7 @@
 			args.Clear();
 			args.Add("'123'");
 			args.Add("NO_TYPE");
-			Assert.Throws<QueryException>(() => cf.Render(args, factoryImpl));
+			Assert.Throws<QueryException>(() => cf.Render(args, factoryImpl), "Invalid type accepted");
 		}

 		[Test]
@@ -112,6 +112,52 @@

 		[Test]
 		public void ClassicSum()
+		{
+			//ANSI-SQL92 definition
+			//<general set function> ::=
+			//<set function type> <left paren> [ <setquantifier> ] <value expression> <right paren>
+			//<set function type> : := AVG | MAX | MIN | SUM | COUNT
+			//<setquantifier> ::= DISTINCT | ALL
+			IList args = new ArrayList();
+
+			ClassicSumFunction csf = new ClassicSumFunction();
+			args.Add("va1");
+			Assert.AreEqual("sum(va1)", csf.Render(args, factoryImpl).ToString());
+
+			args.Clear();
+			args.Add("distinct");
+			args.Add("va2");
+			Assert.AreEqual("sum(distinct va2)", csf.Render(args, factoryImpl).ToString());
+
+			args.Clear();
+			args.Add("va1");
+			args.Add("va2");
+			Assert.Throws<QueryException>(() => csf.Render(args, factoryImpl));
+		}
+
+		[Test]
+		public void ClassicCount()
+		{
+			//ANSI-SQL92 definition
+			//COUNT < leftparen> <asterisk> < right paren>
+			IList args = new ArrayList();
+
+			ClassicCountFunction ccf = new ClassicCountFunction();
+			args.Add("va1");
+			Assert.AreEqual("count(va1)", ccf.Render(args, factoryImpl).ToString());
+
+			args.Clear();
+			args.Add("*");
+			Assert.AreEqual("count(*)", ccf.Render(args, factoryImpl).ToString());
+
+			args.Clear();
+			args.Add("va1");
+			args.Add("va2");
+			Assert.Throws<QueryException>(() => ccf.Render(args, factoryImpl), "No exception 2 argument without <setquantifier>");
+		}
+
+		[Test]
+		public void ClassicAvg()
 		{
 			//ANSI-SQL92 definition
 			//<general set function> ::=
@@ -120,85 +166,39 @@
 			//<setquantifier> ::= DISTINCT | ALL
 			IList args = new ArrayList();

-			ClassicSumFunction csf = new ClassicSumFunction();
-			args.Add("va1");
-			Assert.AreEqual("sum(va1)", csf.Render(args, factoryImpl).ToString());
+			ClassicAvgFunction caf = new ClassicAvgFunction();
+			args.Add("va1");
+			Assert.AreEqual("avg(va1)", caf.Render(args, factoryImpl).ToString());

 			args.Clear();
 			args.Add("distinct");
 			args.Add("va2");
-			Assert.AreEqual("sum(distinct va2)", csf.Render(args, factoryImpl).ToString());
-
-			args.Clear();
-			args.Add("va1");
-			args.Add("va2");
-			Assert.Throws<QueryException>(() => csf.Render(args, factoryImpl));
-		}
-
-		[Test]
-		public void ClassicCount()
-		{
-			//ANSI-SQL92 definition
-			//COUNT < leftparen> <asterisk> < right paren>
-			IList args = new ArrayList();
-
-			ClassicCountFunction ccf = new ClassicCountFunction();
-			args.Add("va1");
-			Assert.AreEqual("count(va1)", ccf.Render(args, factoryImpl).ToString());
-
-			args.Clear();
-			args.Add("*");
-			Assert.AreEqual("count(*)", ccf.Render(args, factoryImpl).ToString());
-
-			args.Clear();
-			args.Add("va1");
-			args.Add("va2");
-			Assert.Throws<QueryException>(() => ccf.Render(args, factoryImpl));
-		}
-
-		[Test]
-		public void ClassicAvg()
-		{
-			//ANSI-SQL92 definition
-			//<general set function> ::=
-			//<set function type> <leftparen> [ <setquantifier> ] <value expression> <right paren>
-			//<set function type> : := AVG | MAX | MIN | SUM | COUNT
-			//<setquantifier> ::= DISTINCT | ALL
-			IList args = new ArrayList();
-
-			ClassicAvgFunction caf = new ClassicAvgFunction();
-			args.Add("va1");
-			Assert.AreEqual("avg(va1)", caf.Render(args, factoryImpl).ToString());
+			Assert.AreEqual("avg(distinct va2)", caf.Render(args, factoryImpl).ToString());
+
+			args.Clear();
+			args.Add("va1");
+			args.Add("va2");
+			Assert.Throws<QueryException>(() => caf.Render(args, factoryImpl), "No exception 2 argument without <setquantifier>");
+		}
+
+		[Test]
+		public void ClassicAggregate()
+		{
+			IList args = new ArrayList();
+
+			ClassicAggregateFunction caf = new ClassicAggregateFunction("max", false);
+			args.Add("va1");
+			Assert.AreEqual("max(va1)", caf.Render(args, factoryImpl).ToString());

 			args.Clear();
 			args.Add("distinct");
 			args.Add("va2");
-			Assert.AreEqual("avg(distinct va2)", caf.Render(args, factoryImpl).ToString());
-
-			args.Clear();
-			args.Add("va1");
-			args.Add("va2");
-			Assert.Throws<QueryException>(() => caf.Render(args, factoryImpl));
-		}
-
-		[Test]
-		public void ClassicAggregate()
-		{
-			IList args = new ArrayList();
-
-			ClassicAggregateFunction caf = new ClassicAggregateFunction("max", false);
-			args.Add("va1");
-			Assert.AreEqual("max(va1)", caf.Render(args, factoryImpl).ToString());
-
-			args.Clear();
-			args.Add("distinct");
-			args.Add("va2");
 			Assert.AreEqual("max(distinct va2)", caf.Render(args, factoryImpl).ToString());

 			args.Clear();
 			args.Add("va1");
 			args.Add("va2");
-			Assert.Throws<QueryException>(() => caf.Render(args, factoryImpl));
+			Assert.Throws<QueryException>(() => caf.Render(args, factoryImpl), "No exception 2 argument without <setquantifier>");

 			args.Clear();
 			args.Add("*");
@@ -223,13 +223,13 @@
 			Assert.AreEqual("substring(var1 from 3 for 4)", asf.Render(args, factoryImpl).ToString());

 			args.Clear();
-			Assert.Throws<QueryException>(() => asf.Render(args, factoryImpl));
+			Assert.Throws<QueryException>(() => asf.Render(args, factoryImpl), "Expected 'Not enough parameters' exception");
 			args.Clear();
 			args.Add("1");
 			args.Add("2");
 			args.Add("3");
 			args.Add("4");
-			Assert.Throws<QueryException>(() => asf.Render(args, factoryImpl));
+			Assert.Throws<QueryException>(() => asf.Render(args, factoryImpl), "Expected 'Not enough parameters' exception");
 		}
 	}
 }


Forgot to cache if SetSettings is used

Forgot to cache if SetSettings is used

--- src/NadekoBot/Services/GreetSettingsService.cs
+++ src/NadekoBot/Services/GreetSettingsService.cs
@@ -67,6 +67,9 @@
                 conf.SendChannelByeMessage = settings.SendChannelByeMessage;

                 await uow.CompleteAsync().ConfigureAwait(false);
+
+                var toAdd = GreetSettings.Create(conf);
+                GuildConfigsCache.AddOrUpdate(guildId, toAdd, (key, old) => toAdd);
             }

             return true;


Code cleanup

Code cleanup

--- src/NppXmlTreeviewPlugin.Parsers/NppXmlNode.cs
+++ src/NppXmlTreeviewPlugin.Parsers/NppXmlNode.cs
@@ -13,7 +13,7 @@
     /// </summary>
     public class NppXmlNode
     {
-        private static int nodeId = 1;
+        private static int _nodeId = 1;

         /// <summary>
         ///     The start position of the node.
@@ -43,7 +43,7 @@
         /// <summary>
         ///     The parent of the node.
         /// </summary>
-        public NppXmlNode Parent { get; }
+        private NppXmlNode Parent { get; }

         /// <summary>
         ///     Flag to indicate if the node has child nodes.
@@ -61,10 +61,10 @@
         {
             Name = name;
             StartPosition = startPosition;
-            Id = nodeId;
+            Id = _nodeId;
             _childNodes = new List<NppXmlNode>();

-            nodeId++;
+            _nodeId++;
         }

         /// <summary>
@@ -78,10 +78,10 @@
             Name = name;
             StartPosition = startPosition;
             Parent = parent;
-            Id = nodeId;
+            Id = _nodeId;
             _childNodes = new List<NppXmlNode>();

-            nodeId++;
+            _nodeId++;
         }

         /// <summary>
@@ -136,7 +136,7 @@
         public static bool TryParse(string xml, string nodeNameAttribute, ILogger logger, out NppXmlNode nppXmlNode)
         {
             nppXmlNode = null;
-            nodeId = 1;
+            _nodeId = 1;

             try
             {


Enahnce documentation

Enahnce documentation

--- src/NppXmlTreeviewPlugin.Parsers/NppXmlNode.cs
+++ src/NppXmlTreeviewPlugin.Parsers/NppXmlNode.cs
@@ -141,7 +141,8 @@
         /// </summary>
         /// <param name="xmlTextReader">The XML text reader.</param>
         /// <param name="currentDepth">The current depth on the XML tree.</param>
-        /// <param name="node">The XML node</param>
+        /// <param name="node">The XML node.</param>
+        /// <param name="nodeNameAttribute">The node attribute name.</param>
         private static void ReadChildOrSibling(XmlTextReader xmlTextReader, int currentDepth, NppXmlNode node, string nodeNameAttribute)
         {
             var nodeName = xmlTextReader.Name;


Sorted usings

Sorted usings

--- src/OmniSharp/AspNet5/DesignTimeHostManager.cs
+++ src/OmniSharp/AspNet5/DesignTimeHostManager.cs
@@ -1,7 +1,7 @@
 using System;
 using System.Diagnostics;
+using System.IO;
 using System.Linq;
-using System.IO;
 using System.Net;
 using System.Net.Sockets;
 using System.Threading;


Fix incorrect mapping in REPL

Fix incorrect mapping in REPL

--- src/Package/Impl/Expansions/ExpansionClient.cs
+++ src/Package/Impl/Expansions/ExpansionClient.cs
@@ -205,16 +205,12 @@
             var vsTextLines = TextBuffer.GetBufferAdapter<IVsTextLines>();
             if (ErrorHandler.Succeeded(vsTextLines.GetPositionOfLineIndex(ts[0].iStartLine, ts[0].iStartIndex, out startPos)) &&
                 ErrorHandler.Succeeded(vsTextLines.GetPositionOfLineIndex(ts[0].iEndLine, ts[0].iEndIndex, out endPos))) {
-                SnapshotSpan viewSpan = new SnapshotSpan(TextView.TextBuffer.CurrentSnapshot, startPos, endPos - startPos);
-
-                NormalizedSnapshotSpanCollection mappedSpans = TextView.BufferGraph.MapDownToBuffer(
-                    viewSpan, SpanTrackingMode.EdgeInclusive, TextBuffer);
-                Debug.Assert(mappedSpans.Count == 1);
-
-                if (mappedSpans.Count > 0) {
-                    RangeFormatter.FormatRange(TextView, TextBuffer,
-                        new TextRange(mappedSpans[0].Start, mappedSpans[0].Length),
-                        REditorSettings.FormatOptions);
+
+                var rStart = TextView.MapDownToR(startPos);
+                var rEnd = TextView.MapDownToR(endPos);
+
+                if (rStart.HasValue && rEnd.HasValue && rStart.Value < rEnd.Value) {
+                    RangeFormatter.FormatRange(TextView, TextBuffer, TextRange.FromBounds(rStart.Value, rEnd.Value), REditorSettings.FormatOptions);
                 }
             }
             return hr;


make the data variable outside

make the data variable outside

--- src/Plivo/Resource/Message/MessageInterface.cs
+++ src/Plivo/Resource/Message/MessageInterface.cs
@@ -39,9 +39,10 @@
             string url = null, string method = null, bool? log = null, bool? trackable = null, string powerpackUUID = null)
         {
             string _dst = string.Join("<", dst);
+            var data = null;
             var mandatoryParams = new List<string> {""};
             if (src != null && powerpackUUID == null){
-                var data = CreateData(
+                data = CreateData(
                 mandatoryParams,
                 new
                 {
@@ -54,8 +55,8 @@
                     log,
                     trackable
                 });
-            } else if (powerpackUUID ! =null && src == null){
-                var data = CreateData(
+            } else if (powerpackUUID ! = null && src == null){
+                data = CreateData(
                 mandatoryParams,
                 new
                 {


file search support linq Pattern

file search support linq Pattern

--- src/SharpCompress/Writers/IWriterExtensions.cs
+++ src/SharpCompress/Writers/IWriterExtensions.cs
@@ -2,6 +2,8 @@
 using System;
 #endif
 using System.IO;
+using System.Linq;
+using System.Linq.Expressions;

 namespace SharpCompress.Writers
 {
@@ -30,22 +32,33 @@
             writer.Write(entryPath, new FileInfo(source));
         }

-        public static void WriteAll(this IWriter writer, string directory, string searchPattern = "*",
+        public static void WriteAll(this IWriter writer, string directory, string searchPattern = "*", SearchOption option = SearchOption.TopDirectoryOnly)
+        {
+            writer.WriteAll(directory, searchPattern, null, option);
+        }
+
+        public static void WriteAll(this IWriter writer, string directory, string searchPattern = "*", Expression<Func<string, bool>> fileSearchFunc = null,
                                     SearchOption option = SearchOption.TopDirectoryOnly)
         {
             if (!Directory.Exists(directory))
             {
                 throw new ArgumentException("Directory does not exist: " + directory);
             }
+
+            if (fileSearchFunc == null)
+            {
+                fileSearchFunc = n => true;
+            }
 #if NET35
-            foreach (var file in Directory.GetDirectories(directory, searchPattern, option))
+            foreach (var file in Directory.GetDirectories(directory, searchPattern, option).Where(fileSearchFunc.Compile()))
 #else
-            foreach (var file in Directory.EnumerateFiles(directory, searchPattern, option))
+            foreach (var file in Directory.EnumerateFiles(directory, searchPattern, option).Where(fileSearchFunc.Compile()))
 #endif
             {
                 writer.Write(file.Substring(directory.Length), file);
             }
         }
+
 #endif
     }
 }


82.2: whitespaces

82.2: whitespaces

--- src/SharpConnect.MySql/Internal/Connections.cs
+++ src/SharpConnect.MySql/Internal/Connections.cs
@@ -1067,6 +1067,7 @@
             {
                 startIndex = 0;//reset
                 //***
+                //TODO: review here
                 recvIO.StartReceive();
             }
             else if (startIndex > maxBuffer)
@@ -1219,7 +1220,8 @@
                     {
                         //process some data
                         //there some data to process
-                        //parse the data
+                        //parse the data
+
                         _mysqlParserMx.ParseData(recvIO);
                         //please note that: result packet may not ready in first round
                         if (_mysqlParserMx.ResultPacket != null)
@@ -1272,15 +1274,14 @@
                     break;
             }
         }
-
+

         internal void StartReceive(Action<MySqlResult> whenCompleteAction)
         {
             this.whenRecvComplete = whenCompleteAction;
             recvIO.StartReceive();
         }
-
-
+
         public void Connect(Action onAsyncComplete = null)
         {
             if (State == ConnectionState.Connected)


Quick new join message when bot joins a new guild

--- src/Siotrix.Discord/Services/CommandHandler.cs
+++ src/Siotrix.Discord/Services/CommandHandler.cs
@@ -29,7 +29,10 @@
             _client = client;
             _map = map;
             _map.Add(new InteractiveService(_client));
-        }
+            client.JoinedGuild += Siotrix_JoinedGuild;
+        }
+
+        public object Interactive { get; private set; }

         public async Task StartAsync()
         {
@@ -86,7 +89,7 @@
                     var arr = db.Gprefixs.Where(p => p.GuildId == guild_id.ToLong());
                     if (arr == null || arr.ToList().Count <= 0)
                     {
-                        spec = "!";
+                        spec = "!";
                     }
                     else
                     {
@@ -121,12 +124,94 @@

                     if (result is ExecuteResult r)
                         PrettyConsole.NewLine(r.Exception.ToString());
-                    else {
-                    var embed = new EmbedBuilder().WithColor(new Color(255, 0, 0)).WithTitle("**Error:**").WithDescription(result.ErrorReason);
-                    await context.Channel.SendMessageAsync("", false, embed.Build());
-                    }
-                }
-            }
+                    else
+                    {
+                        var embed = new EmbedBuilder().WithColor(new Color(255, 0, 0)).WithTitle("**Error:**").WithDescription(result.ErrorReason);
+                        await context.Channel.SendMessageAsync("", false, embed.Build());
+                    }
+                }
+            }
+        }
+
+        private async Task Siotrix_JoinedGuild(SocketGuild guild)
+        {
+            var gowner = guild.Owner; // Get Guild owner of guild Siotrix just joined.
+
+            try
+            {
+                bool cansend = true;
+                foreach (var p in guild.DefaultChannel.PermissionOverwrites)
+                {
+                    if (p.Permissions.SendMessages == PermValue.Deny)
+                        cansend = false;
+                }
+
+                var builder = new EmbedBuilder()
+                 .WithAuthor(new EmbedAuthorBuilder()
+                 .WithIconUrl("https://i.imgur.com/3sc5OG3.png")
+                 .WithName("Siotrix Bot")
+                 .WithUrl("https://discord.gg/e6sku22"))
+                 .WithColor(new Color(1, 1, 1))
+                 .WithThumbnailUrl("http://img04.imgland.net/WyZ5FoM.png")
+                 .WithTitle($"Hi {guild.Name}!")
+                 .WithDescription($"Thank-You for inviting me to {guild.Name}! It's great to be here! I've already messaged {gowner.Username} about how to configure me, but I " +
+                                        "also have an extensive help system as well. I'm completely customizable to make me look however you want!")
+                 .AddField(new EmbedFieldBuilder() { IsInline = true, Name = "Live Support: ", Value = "https://discord.gg/e6sku22" })
+                 .AddField(new EmbedFieldBuilder() { IsInline = true, Name = "Invite me to another guild: ", Value = "https://discordapp.com/oauth2/authorize?client_id={application.Id}&scope=bot>" })
+                 .WithFooter(new EmbedFooterBuilder()
+                 .WithIconUrl("http://img04.imgland.net/WyZ5FoM.png")
+                 .WithText("A global bot with a local feel."))
+                 .WithTimestamp(DateTime.UtcNow);
+
+                if (!cansend)
+                {
+                    SocketTextChannel channel = null;
+                    bool pes = true;
+                    foreach (var cha in guild.TextChannels)
+                    {
+                        pes = true;
+                        foreach (var per in cha.PermissionOverwrites)
+                        {
+                            if (per.Permissions.SendMessages == PermValue.Deny)
+                            {
+                                pes = false;
+                                break;
+                            }
+                        }
+                        if (pes == true)
+                        {
+                            channel = cha;
+                            break;
+                        }
+                    }
+                    builder.AddField(new EmbedFieldBuilder() { IsInline = true, Name = ":sob:", Value = "I was not able to send this in the default Channel" });
+                    await channel.SendMessageAsync("", false, builder);
+                }
+                else
+                {
+                    await guild.DefaultChannel.SendMessageAsync("", false, builder);
+                }
+                PrettyConsole.NewLine($"Just joined {guild.Name} ({guild.Id}). Guild Owner: {gowner.Username}");
+            }
+            catch (Exception e)
+            {
+                PrettyConsole.NewLine($"GUILD JOIN ERROR: {e.ToString()}");
+            }
+
+
+            // Initiate Direct Message with guild owner to offer setup of Siotrix
+            /* var ownerdm = await gowner.CreateDMChannelAsync();
+             await ownerdm.SendMessageAsync($"Hi {gowner.Username}, I see you are the owner of {guild.Name}. Since you just invited me to your guild I wanted to see if you'd be interested in a quick interactive setup?\n\n" +
+                                                         "You can answer with a simple yes or no.");
+             var response = await Interactive.WaitForMessage(Context.User, Context.Channel, TimeSpan.FromSeconds(30));
+             if (response.Content == "no") return;
+
+             var appInfo = await _client.GetApplicationInfoAsync(); // Get app info of our bot
+             var channel = await appInfo.Owner.CreateDMChannelAsync(); // Get the DM channel with our app owner, create it if it doesn't exist
+
+
+             var msg = $"I just joined a guild: `{guild.Name}` ({guild.Id})";
+             await channel.SendMessageAsync(msg); // Send a new message in our DM channel */
         }
     }
 }


BUGFIX Support references in composite primary keys.

--- src/Sooda.CodeGen/CodeDomClassStubGenerator.cs
+++ src/Sooda.CodeGen/CodeDomClassStubGenerator.cs
@@ -457,12 +457,28 @@
                             new CodeTypeReferenceExpression(typeof(SoodaTuple)), "GetValue", getPrimaryKeyValue, new CodePrimitiveExpression(primaryKeyComponentNumber));
                     }

-                    prop.GetStatements.Add(
-                        new CodeMethodReturnStatement(
-                        new CodeCastExpression(
-                        prop.Type,
-                        getPrimaryKeyValue
-                        )));
+                    if (fi.References != null)
+                    {
+                        prop.GetStatements.Add(
+                            new CodeMethodReturnStatement(
+                            new CodeMethodInvokeExpression(
+                                LoaderClass(fi.ReferencedClass),
+                                "GetRef",
+                                GetTransaction(),
+                                new CodeCastExpression(
+                                    GetReturnType(actualNotNullRepresentation, fi),
+                                    getPrimaryKeyValue
+                            ))));
+                    }
+                    else
+                    {
+                        prop.GetStatements.Add(
+                            new CodeMethodReturnStatement(
+                            new CodeCastExpression(
+                            prop.Type,
+                            getPrimaryKeyValue
+                            )));
+                    }

                     if (!classInfo.ReadOnly)
                     {
@@ -476,11 +492,14 @@
                         }
                         else
                         {
+                            CodeExpression plainValue = new CodePropertySetValueReferenceExpression();
+                            if (fi.References != null)
+                                plainValue = new CodeMethodInvokeExpression(plainValue, "GetPrimaryKeyValue");
                             prop.SetStatements.Add(
                                 new CodeExpressionStatement(
                                 new CodeMethodInvokeExpression(
                                 new CodeThisReferenceExpression(), "SetPrimaryKeySubValue",
-                                new CodePropertySetValueReferenceExpression(),
+                                plainValue,
                                 new CodePrimitiveExpression(primaryKeyComponentNumber),
                                 new CodePrimitiveExpression(classInfo.GetPrimaryKeyFields().Length))));
                         }


fixup! Add PdfVersion Write methods

fixup! Add PdfVersion Write methods

--- test/DocumentFormat.Pdf.Tests/PdfVersionTests.cs
+++ test/DocumentFormat.Pdf.Tests/PdfVersionTests.cs
@@ -26,7 +26,7 @@
         {
             // Arrange
             var version = new PdfVersion(1, 2);
-            string writed;
+            string result;

             // Act
             using (var pdfStream = new MemoryStream())
@@ -34,11 +34,11 @@
                 var writer = new PdfWriter(pdfStream);
                 version.Write(writer);
                 writer.Flush();
-                writed = ReadAsString(pdfStream);
+                result = ReadAsString(pdfStream);
             }

             // Assert
-            Assert.Equal("1.2", writed);
+            Assert.Equal("1.2", result);
         }

         [Fact]
@@ -46,7 +46,7 @@
         {
             // Arrange
             var version = new PdfVersion(1, 2);
-            string writed;
+            string result;

             // Act
             using (var pdfStream = new MemoryStream())
@@ -54,11 +54,11 @@
                 var writer = new PdfWriter(pdfStream);
                 version.WriteHeader(writer);
                 writer.Flush();
-                writed = ReadAsString(pdfStream);
+                result = ReadAsString(pdfStream);
             }

             // Assert
-            Assert.Equal("%PDF-1.2\r\n", writed);
+            Assert.Equal("%PDF-1.2\r\n", result);
         }

         [Theory]


fix tests

fix tests

--- test/UnitTests/Models/ResourceDefinitionTests.cs
+++ test/UnitTests/Models/ResourceDefinitionTests.cs
@@ -29,8 +29,7 @@
             var attrs = resource.GetOutputAttrs(null);

             // assert
-            Assert.Single(attrs);
-            Assert.Equal(nameof(Model.Password), attrs[0].InternalAttributeName);
+            Assert.DoesNotContain(attrs, a => a.InternalAttributeName == nameof(Model.AlwaysExcluded));
         }

         [Fact]
@@ -43,7 +42,8 @@
             var attrs = resource.GetOutputAttrs(null);

             // assert
-            Assert.Empty(attrs);
+            Assert.DoesNotContain(attrs, a => a.InternalAttributeName == nameof(Model.AlwaysExcluded));
+            Assert.DoesNotContain(attrs, a => a.InternalAttributeName == nameof(Model.Password));
         }

         [Fact]
@@ -57,8 +57,7 @@
             var attrs = resource.GetOutputAttrs(model);

             // assert
-            Assert.Single(attrs);
-            Assert.Equal(nameof(Model.Password), attrs[0].InternalAttributeName);
+            Assert.DoesNotContain(attrs, a => a.InternalAttributeName == nameof(Model.AlwaysExcluded));
         }

         [Fact]
@@ -72,7 +71,8 @@
             var attrs = resource.GetOutputAttrs(model);

             // assert
-            Assert.Empty(attrs);
+            Assert.DoesNotContain(attrs, a => a.InternalAttributeName == nameof(Model.AlwaysExcluded));
+            Assert.DoesNotContain(attrs, a => a.InternalAttributeName == nameof(Model.Password));
         }

         [Fact]


Fix Midnight Hour track naming bug

Fix Midnight Hour track naming bug

--- iTunesAssistantLib/GratefulDeadTrackFixer.cs
+++ iTunesAssistantLib/GratefulDeadTrackFixer.cs
@@ -223,7 +223,6 @@
             else if (trackNameKey.Contains("greenonions")) { trackName = "Green Onions"; }
             else if (trackNameKey.Contains("greenriver")) { trackName = "Green River"; }
             else if (trackNameKey.Contains("happinessisdrumming")) { trackName = "Happiness Is Drumming"; }
-            else if (trackNameKey.Contains("hth")) { trackName = "Hard To Handle"; }
             else if (trackNameKey.Contains("h2h")) { trackName = "Hard To Handle"; }
             else if (trackNameKey.Contains("hardtohandle")) { trackName = "Hard To Handle"; }
             else if (trackNameKey.Contains("hewasafriendofmine")) { trackName = "He Was A Friend Of Mine"; }


Fixing the broken rotation.

Fixing the broken rotation.

--- eFormCore/Core.cs
+++ eFormCore/Core.cs
@@ -2296,6 +2296,7 @@
                                     using GetObjectResponse response =
                                         await GetFileFromS3Storage(fileName);
                                     using var image = new MagickImage(response.ResponseStream);
+                                    image.Rotate(90); // This is done, since all images are apparently rotated 90 degrees in the wrong direction.
                                     fileContent = image.ToBase64();
                                 }
                                 catch (Exception e)


Fixed Icon Bug

Fixed Icon Bug

--- philameter/Views/Home/Dashboard.cshtml
+++ philameter/Views/Home/Dashboard.cshtml
@@ -23,7 +23,7 @@

@item.Name this year

                          @item.Name

-
+


Fixing the queries for saving answers.

Fixing the queries for saving answers.

--- eFormCore/Core.cs
+++ eFormCore/Core.cs
@@ -3646,19 +3646,20 @@
             log.LogStandard("Core.SaveAnswer", $"ended {DateTime.UtcNow}");
         }

-        public async Task GetAnswersForQuestionSet(int? questionSetId)
-        {
-            if (questionSetId == null)
+        public async Task GetAnswersForQuestionSet(int? apiQuestionSetId)
+        {
+            if (apiQuestionSetId == null)
                 return;

             using (var db = dbContextHelper.GetDbContext())
             {
                 int numAnswers = 10;
                 question_sets questionSet =
-                    await db.question_sets.SingleOrDefaultAsync(x => x.MicrotingUid == questionSetId).ConfigureAwait(false);
+                    await db.question_sets.SingleOrDefaultAsync(x => x.MicrotingUid == apiQuestionSetId).ConfigureAwait(false);
                 if (questionSet != null)
                 {
-                    var lastAnswer = await db.answers.LastOrDefaultAsync(x => x.QuestionSetId == questionSet.Id).ConfigureAwait(false);
+                    var questionSetId = questionSet.Id;
+                    var lastAnswer = await db.answers.OrderByDescending(x => x.Id).FirstOrDefaultAsync(x => x.QuestionSetId == questionSetId).ConfigureAwait(false);
                     JObject parsedData = null;
                     if (lastAnswer != null)
                     {
@@ -3666,12 +3667,12 @@
                         {
                             try
                             {
-                                lastAnswer = await db.answers.LastOrDefaultAsync(x => x.QuestionSetId == questionSet.Id)
+                                lastAnswer = await db.answers.OrderByDescending(x => x.Id).FirstOrDefaultAsync(x => x.QuestionSetId == questionSetId)
                                     .ConfigureAwait(false);
                                 if (lastAnswer != null)
                                 {
                                     parsedData = JObject.Parse(await _communicator
-                                        .GetLastAnswer((int) questionSetId, (int) lastAnswer.MicrotingUid)
+                                        .GetLastAnswer((int) apiQuestionSetId, (int) lastAnswer.MicrotingUid)
                                         .ConfigureAwait(false));
                                     numAnswers = await SaveAnswers(questionSet, parsedData).ConfigureAwait(false);
                                 }
@@ -3688,19 +3689,19 @@
                     }
                     else
                     {
-                        parsedData = JObject.Parse(await _communicator.GetLastAnswer((int)questionSetId, 0).ConfigureAwait(false));
+                        parsedData = JObject.Parse(await _communicator.GetLastAnswer((int)apiQuestionSetId, 0).ConfigureAwait(false));
                         numAnswers = await SaveAnswers(questionSet, parsedData).ConfigureAwait(false);

                         while (numAnswers > 9)
                         {
                             try
                             {
-                                lastAnswer = await db.answers.LastOrDefaultAsync(x => x.QuestionSetId == questionSet.Id)
+                                lastAnswer = await db.answers.OrderByDescending(x => x.Id).FirstOrDefaultAsync(x => x.QuestionSetId == questionSetId)
                                     .ConfigureAwait(false);
                                 if (lastAnswer != null)
                                 {
                                     parsedData = JObject.Parse(await _communicator
-                                        .GetLastAnswer((int) questionSetId, (int) lastAnswer.MicrotingUid)
+                                        .GetLastAnswer((int) apiQuestionSetId, (int) lastAnswer.MicrotingUid)
                                         .ConfigureAwait(false));
                                     numAnswers = await SaveAnswers(questionSet, parsedData).ConfigureAwait(false);
                                 }


Added buttons to Adapter

Added buttons to Adapter

--- Namely/Adapters/BabyNameListAdapter.cs
+++ Namely/Adapters/BabyNameListAdapter.cs
@@ -26,8 +26,8 @@
         ImageView babyNameIcon;
         TextView babyName;
         TextView babyNamePronunciation;
-        Button deleteButton;
-        Button editButton;
+        Button deleteName;
+        Button editName;

         public BabyNameListAdapter(Activity context, List<BabyName> items) : base()
@@ -75,6 +75,14 @@

             babyNameIcon = convertView.FindViewById<ImageView>(Resource.Id.babyNameImageView);
             babyNameIcon.SetImageBitmap(imageBitmap);
+
+            deleteName = convertView.FindViewById<Button>(Resource.Id.deleteNameButton);
+            deleteName.Tag = position;
+
+            editName = convertView.FindViewById<Button>(Resource.Id.editNameButton);
+            editName.Tag = position;
+
+            convertView.Tag = position;

             return convertView;
         }


Updated and added more unit tests

Updated and added more unit tests

--- NativeApps/ChromeCACTests/UnitTest1.cs
+++ NativeApps/ChromeCACTests/UnitTest1.cs
@@ -3,38 +3,92 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using System.Security.Cryptography.Pkcs;
 using System.Text;
+using System.Security.Cryptography;

 namespace ChromeCACTests
 {
     [TestClass]
     public class UnitTest1
     {
+        //MG: I signed "foobar" from ChromeCAC with my CAC.
+        public SignatureResponse ValidSig
+        {
+            get
+            {
+                return new SignatureResponse
+                {
+                    publicKey = "MIIBCgKCAQEAqbiNs4keODB+5DESkQypMEgOFLA3laOqlDxZ8BJvyoUodx8VBnV3KOqY9WT8bPjhnpL7EPjiVM65/m5aDS8npT64bcdHsfAKYpgqrzRXrt119moDEENsr0zFPQ1T0NPtT0pUqbTFqiFENduUChU9d5W3KjAggsSixYaEgbdYw6zBn6OMlF9ZiE9DwU3tyZtK0NGaZfJILHUGL/pW9ZW45W50vZJPByteuVT0TL6pFrFxBDlUNun1TE5wLUIB77ddp0pwJXFUHPEYI26NBInjfHWS7Cuf4+rFNlsD2hfCA8/xKHWad5yF8ALDuda2qhSvITS+Ai5pfryONHQ9xFSnnQIDAQAB",
+                    signature = "MIIGzwYJKoZIhvcNAQcCoIIGwDCCBrwCAQExCzAJBgUrDgMCGgUAMBUGCSqGSIb3DQEHAaAIBAZmb29iYXKgggUCMIIE/jCCA+agAwIBAgIDFYG0MA0GCSqGSIb3DQEBBQUAMF0xCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRgwFgYDVQQDEw9ET0QgRU1BSUwgQ0EtMzEwHhcNMTQwNTA1MDAwMDAwWhcNMTcwNTA0MjM1OTU5WjB3MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsTA1BLSTEMMAoGA1UECxMDVVNOMSQwIgYDVQQDExtHQUxMSUdBTi5NQVRUSEVXLjEyOTEwODg5MTcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpuI2ziR44MH7kMRKRDKkwSA4UsDeVo6qUPFnwEm/KhSh3HxUGdXco6pj1ZPxs+OGekvsQ+OJUzrn+bloNLyelPrhtx0ex8ApimCqvNFeu3XX2agMQQ2yvTMU9DVPQ0+1PSlSptMWqIUQ125QKFT13lbcqMCCCxKLFhoSBt1jDrMGfo4yUX1mIT0PBTe3Jm0rQ0Zpl8kgsdQYv+lb1lbjlbnS9kk8HK165VPRMvqkWsXEEOVQ26fVMTnAtQgHvt12nSnAlcVQc8Rgjbo0EieN8dZLsK5/j6sU2WwPaF8IDz/EodZp3nIXwAsO51raqFK8hNL4CLml+vI40dD3EVKedAgMBAAGjggGrMIIBpzAfBgNVHSMEGDAWgBSG8Vtob90w85SCaNRM90QduMpogTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmRpc2EubWlsL2NybC9ET0RFTUFJTENBXzMxLmNybDAOBgNVHQ8BAf8EBAMCBsAwIwYDVR0gBBwwGjALBglghkgBZQIBCwkwCwYJYIZIAWUCAQsTMB0GA1UdDgQWBBSMeYb90TaASt5kgHtn4EJ9Myq0VjBoBggrBgEFBQcBAQRcMFowNgYIKwYBBQUHMAKGKmh0dHA6Ly9jcmwuZGlzYS5taWwvc2lnbi9ET0RFTUFJTENBXzMxLmNlcjAgBggrBgEFBQcwAYYUaHR0cDovL29jc3AuZGlzYS5taWwwQgYDVR0RBDswOYEXTUdBTExJR0BTUEFXQVIuTkFWWS5NSUygHgYKKwYBBAGCNxQCA6AQDA4xMjkxMDg4OTE3QG1pbDAbBgNVHQkEFDASMBAGCCsGAQUFBwkEMQQTAlVTMCkGA1UdJQQiMCAGCisGAQQBgjcUAgIGCCsGAQUFBwMCBggrBgEFBQcDBDANBgkqhkiG9w0BAQUFAAOCAQEAKsv2o1wARw3fmbOgLZHXN4Ungiu+YE+uhv9CTc+th9ajhxQhIaNppDbDtWeTKcGUr/8GXVw05biTq+8fkzwxnsDSXb+ysN7PuNJ+kbd4PJZoTvyJKzbwNhh2AMnrgoQ+9/p/VsnGbKzr5r7spsp8KXH2hGSQgbhlJCIm/9iscalksagUWfkZ4FeN4mU/uAO6/Rp+5gh6V2CW22hBGnymPcIje27OfFKqiCEPrd+ScI/CJAaY03mxfYMob0g/ejXTh7YNgs+AR8CuRsY4rZUXHZ76/5+xSLsYKBi5G17QfA/Z/Qke+3CVDykpSmu7vQAbH8vv7rJMl/xV9yH29RlSSjGCAYswggGHAgEBMGQwXTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEMMAoGA1UECxMDRG9EMQwwCgYDVQQLEwNQS0kxGDAWBgNVBAMTD0RPRCBFTUFJTCBDQS0zMQIDFYG0MAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEggEAn00UenVP5JukV2O7RF8+o5kVsHtO5kNNTstNcJKaxYfozCrZCp9vszJRK4bXtWGffwfoh2t4vAW0SlzIk/EfbarUYToynxTi8OdWzojeqBqmcnk78HlGmw2zW+osaXAZVzomifi4TTtvBZ5lJ8wjCoY324km87mBJculyLYLWpHNal0AG2HZFGC3QJeVYqswnuv8zLTBZMSxjNjDvkdOMuO+VWynKmmZthp8wfW4zmSqZomkRYRyfoKAsJm0s7d5calA6xp8oZkKZhnwie/6ctLbhTT8X+Qxg4uTviPLC8grpMl5PaiGbRaXt51N8pKRRXSzw2U31a9uZtJwJJ3bug=="
+                };
+            }
+        }
+
         [TestMethod]
-        public void TestMethod1()
+        public void TestValidSignatureWithoutVerifyingCert()
         {
-            //MG: I signed "foobar" from ChromeCAC with my CAC.
-            ChromeCAC.SignatureResponse response = new SignatureResponse
-            {
-                 fullSig = null,
-                 publicKey = "MIIBCgKCAQEAqbiNs4keODB+5DESkQypMEgOFLA3laOqlDxZ8BJvyoUodx8VBnV3KOqY9WT8bPjhnpL7EPjiVM65/m5aDS8npT64bcdHsfAKYpgqrzRXrt119moDEENsr0zFPQ1T0NPtT0pUqbTFqiFENduUChU9d5W3KjAggsSixYaEgbdYw6zBn6OMlF9ZiE9DwU3tyZtK0NGaZfJILHUGL/pW9ZW45W50vZJPByteuVT0TL6pFrFxBDlUNun1TE5wLUIB77ddp0pwJXFUHPEYI26NBInjfHWS7Cuf4+rFNlsD2hfCA8/xKHWad5yF8ALDuda2qhSvITS+Ai5pfryONHQ9xFSnnQIDAQAB",
-                 signature = "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"
-
-            };
             ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes("foobar"));
-
-            //SignedCms signedCms = new SignedCms(contentInfo, true);
+
             SignedCms signedCms = new SignedCms(contentInfo,false);

-            signedCms.Decode(Convert.FromBase64String(response.signature));
+            signedCms.Decode(Convert.FromBase64String(ValidSig.signature));
+
+            // Check without verifying cert
+            signedCms.CheckSignature(true);
+        }

-            // This checks if the signature is valid, but doensn't actually verify the cert (TODO)
+        /// <summary>
+        /// If this method fails and TestValidSignatureWithoutVerifyingCert does not,
+        /// you are probably missing the DOD certs
+        /// Get them at https://militarycac.com/dodcerts.htm
+        /// </summary>
+        [TestMethod]
+        public void TestValidSignatureAndCert()
+        {
+            ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes("foobar"));
+
+            SignedCms signedCms = new SignedCms(contentInfo, false);
+
+            signedCms.Decode(Convert.FromBase64String(ValidSig.signature));
+
+            // Check without verifying cert
             signedCms.CheckSignature(true);

-
+            // Check with verifying cert
+            signedCms.CheckSignature(false);
+        }

-            signedCms.CheckSignature(false);
+        [TestMethod]
+        [ExpectedException(typeof(CryptographicException))]
+        public void TestInvalidSignature()
+        {
+            ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes("foobar"));

-
+            SignedCms signedCms = new SignedCms(contentInfo, true);
+
+            // Mess up the signature
+            signedCms.Decode(Convert.FromBase64String(ValidSig.signature.Replace('A', 'B')));
+
+            // Check without verifying cert
+            signedCms.CheckSignature(true);
+
+            // Should throw an exception and stop
+        }
+
+        [TestMethod]
+        [ExpectedException(typeof(CryptographicException))]
+        public void TestInvalidContent()
+        {
+            // changed "foobar" to "modified content"
+            ContentInfo contentInfo = new ContentInfo(Encoding.UTF8.GetBytes("modified content"));
+
+            SignedCms signedCms = new SignedCms(contentInfo, true);
+
+            signedCms.Decode(Convert.FromBase64String(ValidSig.signature));
+
+            // Check without verifying cert
+            signedCms.CheckSignature(true);
+
+            // Should throw an exception and stop
         }
     }
 }


QOL - Order plugin controls by name

QOL - Order plugin controls by name


Adjusted all tests to use the default comment delimiter of ';' rather than '#'. Continuation tests: Test the new line continuation functionality. CommentAfterKey, NoCommentAfterKey: Tests adding comments after keys.

--- Nini/Source/Test/Ini/IniReaderTests.cs
+++ Nini/Source/Test/Ini/IniReaderTests.cs
@@ -23,8 +23,8 @@
 		{
 			StringWriter writer = new StringWriter ();
 			writer.WriteLine ("");
-			writer.WriteLine (" ; Something");
-			writer.WriteLine (" #   Some comment  ");
+			writer.WriteLine (" ; Something");
+			writer.WriteLine (" ;   Some comment  ");
 			writer.WriteLine (" ;");
 			IniReader reader = new IniReader (new StringReader (writer.ToString ()));

@@ -53,7 +53,7 @@
 		public void NormalSectionAndKey ()
 		{
 			StringWriter writer = new StringWriter ();
-			writer.WriteLine ("[Logging] ; Logging section");
+			writer.WriteLine ("[Logging]");
 			writer.WriteLine (" great logger =   log4net  ");
 			writer.WriteLine ("  [Pets] ; pets comment  ");
 			IniReader reader = new IniReader (new StringReader (writer.ToString ()));
@@ -64,7 +64,7 @@
 			Assert.AreEqual (IniType.Section, reader.Type);
 			Assert.AreEqual ("Logging", reader.Name);
 			Assert.AreEqual ("", reader.Value);
-			Assert.AreEqual ("Logging section", reader.Comment);
+			Assert.IsNull (reader.Comment);

 			Assert.IsTrue (reader.Read ());
 			Assert.AreEqual (IniType.Key, reader.Type);
@@ -76,7 +76,7 @@
 			Assert.AreEqual (IniType.Section, reader.Type);
 			Assert.AreEqual ("Pets", reader.Name);
 			Assert.AreEqual ("", reader.Value);
-			Assert.AreEqual ("pets comment", reader.Comment);
+			Assert.IsNull (reader.Comment);
 		}

 		[Test]
@@ -115,7 +115,7 @@
 		{
 			StringWriter writer = new StringWriter ();
 			writer.WriteLine ("; Test");
-			writer.WriteLine ("# Test 1");
+			writer.WriteLine ("; Test 1");
 			writer.WriteLine ("[Nini Thing");
 			IniReader reader = new IniReader (new StringReader (writer.ToString ()));

@@ -180,12 +180,11 @@
 		public void IgnoreComments ()
 		{
 			StringWriter writer = new StringWriter ();
-			writer.WriteLine ("[Nini] ; my comment 1");
+			writer.WriteLine ("[Nini]");
 			writer.WriteLine (" some key = something ; my comment 1");
 			IniReader reader = new IniReader (new StringReader (writer.ToString ()));

 			Assert.IsTrue (reader.Read ());
-			Assert.AreEqual ("my comment 1", reader.Comment);
 			reader.IgnoreComments = true;
 			Assert.IsTrue (reader.Read ());
 			Assert.AreEqual (null, reader.Comment);
@@ -267,7 +266,7 @@
 		public void NoEndOfLineComment ()
 		{
 			StringWriter writer = new StringWriter ();
-			writer.Write (" #   Some comment  ");
+			writer.Write (" ;   Some comment  ");

 			IniReader reader = new IniReader (new StringReader (writer.ToString ()));
 			reader.Read ();
@@ -330,6 +329,134 @@
 			Assert.AreEqual ("float2", reader.Name);
 			Assert.AreEqual ("2.0", reader.Value);
 		}
+
+		[Test]
+		[ExpectedException (typeof (IniException))]
+		public void NoLineContinuation ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option = this will be \\ ");
+			writer.WriteLine ("continued later");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+		}
+
+		[Test]
+		public void LineContinuation ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option = this will be \\ ");
+			writer.WriteLine ("continued later");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+			reader.LineContinuation = true;
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("this will be continued later", reader.Value);
+			Assert.IsFalse (reader.Read ());
+		}
+
+		[Test]
+		public void LineContinuationMoreSpace ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option = this will be \\ ");
+			writer.WriteLine ("     continued later");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+			reader.LineContinuation = true;
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("this will be      continued later", reader.Value);
+			Assert.IsFalse (reader.Read ());
+		}
+
+		[Test]
+		public void LineContinuationAnotherChar ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option1 = this will be \\ continued");
+			writer.WriteLine (" option2 = this will be continued");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+			reader.LineContinuation = true;
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("this will be \\ continued", reader.Value);
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("this will be continued", reader.Value);
+			Assert.IsFalse (reader.Read ());
+		}
+
+		[Test]
+		public void LineContinuationNoSpace ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option = this will be \\");
+			writer.WriteLine ("continued later");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+			reader.LineContinuation = true;
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("this will be continued later", reader.Value);
+			Assert.IsFalse (reader.Read ());
+		}
+
+		[Test]
+		public void CommentAfterKey ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option = someValue ; some comment");
+			writer.WriteLine ("");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+			reader.AcceptCommentAfterKey = true;
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("someValue", reader.Value);
+			Assert.AreEqual ("some comment", reader.Comment);
+			Assert.IsTrue (reader.Read ());
+		}
+
+		[Test]
+		public void NoCommentAfterKey ()
+		{
+			StringWriter writer = new StringWriter ();
+			writer.WriteLine ("[Test]");
+			writer.WriteLine (" option = someValue ; some comment");
+			writer.WriteLine ("");
+
+			IniReader reader = new IniReader
+				(new StringReader (writer.ToString ()));
+			reader.AcceptCommentAfterKey = false;
+
+			Assert.IsTrue (reader.Read ());
+			Assert.IsTrue (reader.Read ());
+			Assert.AreEqual ("someValue ; some comment", reader.Value);
+			Assert.IsTrue (reader.Read ());
+		}
 		#endregion

 		#region Private methods


[KMS] Tooltip.CashPackage (2)

[KMS] Tooltip.CashPackage (2)

--- WzComparerR2/CharaSimControl/CashPackageRender.cs
+++ WzComparerR2/CharaSimControl/CashPackageRender.cs
@@ -137,7 +137,7 @@
             }

             picH = 10;
-            TextRenderer.DrawText(g, CashPackage.name, GearGraphics.ItemNameFont2, new Point(cashBitmap.Width, picH), Color.White, TextFormatFlags.HorizontalCenter);
+            TextRenderer.DrawText(g, CashPackage.name, GearGraphics.ItemNameFont2, new Point(cashBitmap.Width, picH), Color.White, TextFormatFlags.HorizontalCenter | TextFormatFlags.NoPrefix);
             picH += 14;
             if (commodityPackage.termStart > 0 || commodityPackage.termEnd > 0)
             {


Default theme should still be light

Default theme should still be light

--- src/Certify.UI/MainWindow.xaml.cs
+++ src/Certify.UI/MainWindow.xaml.cs
@@ -167,6 +167,10 @@
                 if (uiSettings.UITheme != null)
                 {
                     ((Certify.UI.App)App.Current).ToggleTheme(uiSettings.UITheme);
+                } else
+                {
+                    // default to light theme
+                    ((Certify.UI.App)App.Current).ToggleTheme("Light");
                 }

                 if (uiSettings.Scaling > 0.5 && uiSettings.Scaling < 2)
@@ -175,6 +179,10 @@
                 }

                 _appViewModel.UISettings = uiSettings;
+            } else
+            {
+                // default to light theme
+                ((Certify.UI.App)App.Current).ToggleTheme("Light");
             }

             await PerformAppStartupChecks();


Edited comment

Edited comment

--- Octokit/Models/Request/IssueRequest.cs
+++ Octokit/Models/Request/IssueRequest.cs
@@ -121,7 +121,7 @@
     }

     /// <summary>
-    /// Range of states for "Issues", "Milestones" and "Pull Request" API.
+    /// Range of states for Issues, Milestones and PullRequest API.
     /// </summary>
     public enum ItemStateFilter
     {


Updated NativeMethods xml docs and final CA issues

--- src/CleanProject/NativeMethods.cs
+++ src/CleanProject/NativeMethods.cs
@@ -7,48 +7,140 @@
     internal static class NativeMethods
     {
         ///
-        ///     The find window.
+        ///     Retrieves a handle to the top-level window whose class name and window name match the specified strings. This
+        ///     function does not search child windows. This function does not perform a case-sensitive search.
+        ///     <para>
+        ///         PInvode map to the
+        ///
+        ///             FindWindow
+        ///
+        ///         function
+        ///     </para>
         ///
         /// <param name="sClassName">
-        ///     The s class name.
+        ///     <para>
+        ///         The class name or a class atom created by a previous call to the
+        ///
+        ///             RegisterClass
+        ///
+        ///         or
+        ///
+        ///             RegisterClassEx
+        ///
+        ///         function. The atom must be in the low-order word of lpClassName; the high-order word must be zero.
+        ///     </para>
+        ///     <para>
+        ///         If lpClassName points to a string, it specifies the window class name. The class name can be any name
+        ///         registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.
+        ///     </para>
+        ///     <para>If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.</para>
         /// </param>
         /// <param name="sAppName">
-        ///     The s app name.
+        ///     The window name (the window's title). If this parameter is NULL, all window names match.
         /// </param>
         /// <returns>
+        ///     <para>
+        ///         If the function succeeds, the return value is a handle to the window that has the specified class name and
+        ///         window name.
+        ///     </para>
+        ///     <para>
+        ///         If the function fails, the return value is NULL. To get extended error information, call
+        ///
+        ///             GetLastError
+        ///
+        ///         .
+        ///     </para>
         /// </returns>
-        [DllImport("user32.dll")]
+        /// <remarks>
+        ///     If the lpWindowName parameter is not NULL, FindWindow calls the
+        ///
+        ///         GetWindowText
+        ///
+        ///     function to retrieve the window name for comparison.
+        ///     <para>For a description of a potential problem that can arise, see the Remarks for GetWindowText.</para>
+        /// </remarks>
+        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
         public static extern IntPtr FindWindow(string sClassName, string sAppName);

         ///
-        ///     The get long path name.
+        ///     Converts the specified path to its long form.
+        ///     <para>
+        ///         PInvode map to the
+        ///
+        ///             GetLongPathName
+        ///
+        ///         function
+        ///     </para>
         ///
         /// <param name="path">
-        ///     The path.
+        ///     The path to be converted.
         /// </param>
         /// <param name="pszPath">
-        ///     The psz path.
+        ///     A pointer to the buffer to receive the long path.
         /// </param>
         /// <param name="cchPath">
-        ///     The cch path.
+        ///     The size of the buffer lpszLongPath points to, in TCHARs.
         /// </param>
         /// <returns>
-        ///     The get long path name.
+        ///     If the function succeeds, the return value is the length, in TCHARs, of the string copied to lpszLongPath, not
+        ///     including the terminating null character.
+        ///     <para>
+        ///         If the lpBuffer buffer is too small to contain the path, the return value is the size, in TCHARs, of the
+        ///         buffer that is required to hold the path and the terminating null character.
+        ///     </para>
         /// </returns>
-        [DllImport("kernel32.dll")]
+        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
         public static extern int GetLongPathName(string path, StringBuilder pszPath, int cchPath);

-        ///
-        ///     The show window.
-        ///
-        /// <param name="hWnd">
-        ///     The h wnd.
-        /// </param>
+        /// Shows a Window
+        /// <remarks>
+        ///     <para>
+        ///         To perform certain special effects when showing or hiding a
+        ///         window, use AnimateWindow.
+        ///     </para>
+        ///     <para>
+        ///         The first time an application calls ShowWindow, it should use
+        ///         the WinMain function's nCmdShow parameter as its nCmdShow parameter.
+        ///         Subsequent calls to ShowWindow must use one of the values in the
+        ///         given list, instead of the one specified by the WinMain function's
+        ///         nCmdShow parameter.
+        ///     </para>
+        ///     <para>
+        ///         As noted in the discussion of the nCmdShow parameter, the
+        ///         nCmdShow value is ignored in the first call to ShowWindow if the
+        ///         program that launched the application specifies startup information
+        ///         in the structure. In this case, ShowWindow uses the information
+        ///         specified in the STARTUPINFO structure to show the window. On
+        ///         subsequent calls, the application must call ShowWindow with nCmdShow
+        ///         set to SW_SHOWDEFAULT to use the startup information provided by the
+        ///         program that launched the application. This behavior is designed for
+        ///         the following situations:
+        ///     </para>
+        ///     <list type="">
+        ///         <item>
+        ///             Applications create their main window by calling CreateWindow
+        ///             with the WS_VISIBLE flag set.
+        ///         </item>
+        ///         <item>
+        ///             Applications create their main window by calling CreateWindow
+        ///             with the WS_VISIBLE flag cleared, and later call ShowWindow with the
+        ///             SW_SHOW flag set to make it visible.
+        ///         </item>
+        ///     </list>
+        /// </remarks>
+        /// <param name="hWnd">Handle to the window.</param>
         /// <param name="nCmdShow">
-        ///     The n cmd show.
+        ///     Specifies how the window is to be shown.
+        ///     This parameter is ignored the first time an application calls
+        ///     ShowWindow, if the program that launched the application provides a
+        ///     STARTUPINFO structure. Otherwise, the first time ShowWindow is called,
+        ///     the value should be the value obtained by the WinMain function in its
+        ///     nCmdShow parameter. In subsequent calls, this parameter can be one of
+        ///     the WindowShowStyle members.
         /// </param>
         /// <returns>
-        ///     The show window.
+        ///     If the window was previously visible, the return value is nonzero.
+        ///     If the window was previously hidden, the return value is zero.
         /// </returns>
         [DllImport("user32.dll")]
         public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);


Update BehaviorOfT.cs

Update BehaviorOfT.cs

--- src/Avalonia.Xaml.Interactivity/BehaviorOfT.cs
+++ src/Avalonia.Xaml.Interactivity/BehaviorOfT.cs
@@ -11,7 +11,7 @@
     /// and allow for typed associated objects.
     /// </summary>
     /// <typeparam name="T">The object type to attach to</typeparam>
-    public abstract class Behavior<T> : Behavior where T : notnull, AvaloniaObject
+    public abstract class Behavior<T> : Behavior where T : AvaloniaObject
     {
         /// <summary>
         /// Gets the object to which this behavior is attached.


Fixed localizable false positive

Fixed localizable false positive

--- src/Common/Native/WindowsUtils.cs
+++ src/Common/Native/WindowsUtils.cs
@@ -554,7 +554,7 @@
         /// </summary>
         /// <param name="message">A unique string used to identify the message type session-wide.</param>
         /// <returns>A unique ID number used to identify the message type session-wide.</returns>
-        public static int RegisterWindowMessage(string message)
+        public static int RegisterWindowMessage([Localizable(false)] string message)
         {
             return IsWindows ? NativeMethods.RegisterWindowMessage(message) : 0;
         }


Fix CancelAllOrdersAsync

Fix CancelAllOrdersAsync

--- src/Binance/Extensions/BinanceApiExtensions.cs
+++ src/Binance/Extensions/BinanceApiExtensions.cs
@@ -186,15 +186,12 @@
         {
             Throw.IfNull(api, nameof(api));

-            var symbols = string.IsNullOrWhiteSpace(symbol)
-                ? await api.SymbolsAsync(token).ConfigureAwait(false)
-                : new [] { symbol };
-
-            var cancelOrderIds = new List<string>();
-
-            foreach (var s in symbols)
-            {
-                var orders = await api.GetOpenOrdersAsync(user, s, recvWindow, token)
+             var cancelOrderIds = new List<string>();
+
+            IEnumerable<Order> orders;
+            do
+            {
+                orders = await api.GetOpenOrdersAsync(user, symbol, recvWindow, token)
                     .ConfigureAwait(false);

                 foreach (var order in orders)
@@ -204,7 +201,7 @@

                     cancelOrderIds.Add(cancelOrderId);
                 }
-            }
+            } while (orders.Any());

             return cancelOrderIds;
         }


:rose:  将FileController类的Get(...)方法的异步申明改为非异步方式。 :tomato:

--- src/Controllers/FileController.cs
+++ src/Controllers/FileController.cs
@@ -82,7 +82,7 @@
 		/// 下载指定路径的文件。
 		/// </summary>
 		/// <param name="path">指定要下载的文件的相对路径或绝对路径（绝对路径以/斜杠打头）。</param>
-		public async Task<HttpResponseMessage> Get(string path)
+		public HttpResponseMessage Get(string path)
 		{
 			if(string.IsNullOrWhiteSpace(path))
 				throw new ArgumentNullException("path");


Fix English in comment

Fix English in comment

--- src/Build/BackEnd/BuildManager/BuildManager.cs
+++ src/Build/BackEnd/BuildManager/BuildManager.cs
@@ -1016,7 +1016,7 @@

                             KnownTelemetry.BuildTelemetry.UpdateEventProperties();
                             loggingService.LogTelemetry(buildEventContext: null, KnownTelemetry.BuildTelemetry.EventName, KnownTelemetry.BuildTelemetry.Properties);
-                            // Clean telemetry which makes it ready for next build submission.
+                            // Clean telemetry to make it ready for next build submission.
                             KnownTelemetry.BuildTelemetry = null;
                         }
                     }


-Changed the visibility of the Application property on the Bootstrapper to protected so it's harder to abuse. -Added some documentation to clarify the use of the "useApplication" parameter of the Bootstrapper's ctor.

--- src/Caliburn.Micro.Silverlight/Bootstrapper.cs
+++ src/Caliburn.Micro.Silverlight/Bootstrapper.cs
@@ -17,12 +17,12 @@
         /// <summary>
         /// The application.
         /// </summary>
-        public Application Application { get; protected set; }
-
+        protected Application Application { get; set; }

         /// <summary>
         /// Creates an instance of the bootstrapper.
         /// </summary>
+        /// <param name="useApplication">Set this to false when hosting Caliburn.Micro inside and Office or WinForms application. The default is true.</param>
         public Bootstrapper(bool useApplication = true) {
             this.useApplication = useApplication;

@@ -72,11 +72,6 @@
         }

         /// <summary>
-        /// Override to configure the framework and setup your IoC container.
-        /// </summary>
-        protected virtual void Configure() { }
-
-        /// <summary>
         /// Provides an opportunity to hook into the application object.
         /// </summary>
         protected virtual void PrepareApplication() {
@@ -88,6 +83,11 @@
 #endif
             Application.Exit += OnExit;
         }
+
+        /// <summary>
+        /// Override to configure the framework and setup your IoC container.
+        /// </summary>
+        protected virtual void Configure() { }

         /// <summary>
         /// Override to tell the framework where to find assemblies to inspect for views, etc.


Remove lambda compilation from RelatedModelsCollection.

On iOS it might be a problem and on Android there was one weird crash
related to the Expression<..> compilation, thus moving to a precompiled
versions.

--- Phoebe/Data/RelatedModelsCollection.cs
+++ Phoebe/Data/RelatedModelsCollection.cs
@@ -48,13 +48,21 @@

         private Expression<Func<TInter, bool>> InterLookupQuery {
             get {
-                Expression<Func<TInter, bool>> q;
                 if (reverse) {
-                    q = (inter) => inter.ToId == model.Id;
+                    return (inter) => inter.ToId == model.Id;
                 } else {
-                    q = (inter) => inter.FromId == model.Id;
-                }
-                return q;
+                    return (inter) => inter.FromId == model.Id;
+                }
+            }
+        }
+
+        private Func<TInter, bool> InterLookupFunc {
+            get {
+                if (reverse) {
+                    return (inter) => inter.ToId == model.Id;
+                } else {
+                    return (inter) => inter.FromId == model.Id;
+                }
             }
         }

@@ -88,7 +96,7 @@
                 return;

             relations = new List<TInter> ();
-            var cachedInters = Model.Manager.Cached<TInter> ().Where (InterLookupQuery.Compile ());
+            var cachedInters = Model.Manager.Cached<TInter> ().Where (InterLookupFunc);
             var dbInters = Model.Query<TInter> (InterLookupQuery);
             var inters = cachedInters.Union (dbInters).Where (IsOurInter);
             foreach (var inter in inters) {


Tutorial img responsive bugfix. Added tutorial class to div.

--- src/DevelopersSite/Views/Tutorial/Index.cshtml
+++ src/DevelopersSite/Views/Tutorial/Index.cshtml
@@ -13,7 +13,7 @@
                 }

-

+

@Html.Raw(Model.Post.Title.Rendered)

@Html.Raw(Model.Post.Content.Rendered)


DNN-9329: update code after review.

DNN-9329: update code after review.

--- src/Dnn.PersonaBar.Library/DTO/UserSettings.cs
+++ src/Dnn.PersonaBar.Library/DTO/UserSettings.cs
@@ -37,7 +37,8 @@
     public class UserSettings : Dictionary<string, object>, IXmlSerializable
     {
         [IgnoreDataMember]
-        public bool ExpandPersonaBar{
+        public bool ExpandPersonaBar
+        {
             get => Convert.ToBoolean(this["expandPersonaBar"]);
             set => this["expandPersonaBar"] = value;
         }
@@ -61,8 +62,7 @@
                     ReadSettings(reader);
                     break;
                 default:
-                    //the method add for backward compatible, should remove this in future release.
-                    ReadLegencySettings(reader);
+                    ReadLegacySettings(reader);
                     break;

             }
@@ -89,7 +89,8 @@
             reader.ReadEndElement();
         }

-        private void ReadLegencySettings(XmlReader reader)
+        [Obsolete("The method add for backward compatible, should remove this in future release.")]
+        private void ReadLegacySettings(XmlReader reader)
         {
             while(!reader.EOF && reader.NodeType != XmlNodeType.EndElement)
             {


#2396 No completions in django template for variables on VS 2010/2012
Handles RequestContext instances being passed to the dictionary parameter instead of the context_instance parameter.

#2403 Error trying to debug unit test
Makes base-64 encoded secret use URL safe encoding so the port supplier does not think a path has been specified.
Also explicitly provides URL scheme when attaching to the remote process.

#2422 Failed to get command on Web Project
Skips the CreatePythonCommand task if the target property is null. This causes the build to succeed but the function getting the command to fail.
Display a helpful error message when the project has no startup file set.

#2423 Hide Worker Role template
Changes template to hidden.

#2424 Need to prompt to restart VS after installing Azure Tools
Adds details to prompt.

#2425 Add readme for cloud project
Adds readme with instructions for adding new roles and a link to our actual documentation.

#2427 This file can be deleted message in readme
Clarifies message.

#2428 readme.mht file missing db steps in django template
Adds missing steps.

#2429 readme.mht should mark optional steps as optional
Adds [optional] tag to heading.

#2431 We should give an error when trying to publish to azure web site without a virtual env
Adds error when publishing to Web Sites is detected and a virtual environment is not being deployed.

Also removes Bottle.targets and Flask.targets, updates templates and adds upgrade step.

--- Product/TestAdapter/VisualStudioApp.cs
+++ Product/TestAdapter/VisualStudioApp.cs
@@ -144,7 +144,8 @@
             if (transport == null) {
                 return false;
             }
-            var processes = debugger3.GetProcesses(transport, string.Format("{0}@localhost:{1}", secret, port));
+
+            var processes = debugger3.GetProcesses(transport, string.Format("tcp://{0}@localhost:{1}", secret, port));
             if (processes.Count < 1) {
                 return false;
             }


Fixed a problem with Simian horizontal jump impulse, fixed swimming at improper water level sometimes.

git-svn-id: c32cf1ecefca26b8770d7b0740bc0c5c174087e4@2169 c754d5e9-d413-0410-bcdf-9574c9dba6b7

--- Programs/Simian/Extensions/Movement.cs
+++ Programs/Simian/Extensions/Movement.cs
@@ -17,8 +17,8 @@
         const float FLY_SPEED = 10f; //meters/sec
         const float FALL_DELAY = 0.33f; //seconds before starting animation
         const float FALL_FORGIVENESS = 0.25f; //fall buffer in meters
-        const float JUMP_IMPULSE_VERTICAL = 8f; //boost amount in meters/sec
-        const float JUMP_IMPULSE_HORIZONTAL = 40f; //boost amount in meters/sec
+        const float JUMP_IMPULSE_VERTICAL = 8.5f; //boost amount in meters/sec
+        const float JUMP_IMPULSE_HORIZONTAL = 10f; //boost amount in meters/sec (no clue why this is so high)
         const float PREJUMP_DELAY = 0.25f; //seconds before actually jumping
         const float AVATAR_TERMINAL_VELOCITY = 54f; //~120mph

@@ -184,7 +184,7 @@
                             gravity = 0f;
                             agent.Avatar.Velocity *= 0.5f;
                             agent.Avatar.Velocity.Z = 0f;
-                            if (move.Z < 0) agent.Avatar.Position.Z = waterChestHeight;
+                            if (move.Z < 1) agent.Avatar.Position.Z = waterChestHeight;

                             if (move.Z > 0)
                             {
@@ -240,8 +240,8 @@
                                     animsChanged = true;

                                 agent.Avatar.Velocity.Z = JUMP_IMPULSE_VERTICAL * seconds;
-                                agent.Avatar.Velocity.X += agent.Avatar.Acceleration.X * JUMP_IMPULSE_HORIZONTAL * seconds;
-                                agent.Avatar.Velocity.Y += agent.Avatar.Acceleration.Y * JUMP_IMPULSE_HORIZONTAL * seconds;
+                                agent.Avatar.Velocity.X += agent.Avatar.Acceleration.X * JUMP_IMPULSE_HORIZONTAL;
+                                agent.Avatar.Velocity.Y += agent.Avatar.Acceleration.Y * JUMP_IMPULSE_HORIZONTAL;
                             }
                             else move.Z = 0; //override Z control
                         }


Remove test case which is better illustrated by other lifecycle tests.

--- src/Fixie.Tests/LifecycleTests.cs
+++ src/Fixie.Tests/LifecycleTests.cs
@@ -259,12 +259,6 @@
             static void TestTearDown() => WhereAmI();
         }

-        class BuggyExecution : Execution
-        {
-            public void Execute(TestClass testClass)
-                => throw new Exception("Unsafe custom execution threw!");
-        }
-
         class ShortCircuitClassExecution : Execution
         {
             public void Execute(TestClass testClass)
@@ -768,17 +762,5 @@

             output.ShouldHaveLifecycle();
         }
-
-        public void ShouldFailAllTestsWhenCustomExecutionThrows()
-        {
-            var output = Run<SampleTestClass, BuggyExecution>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail failed: Unsafe custom execution threw!",
-                "SampleTestClass.Pass failed: Unsafe custom execution threw!",
-                "SampleTestClass.Skip failed: Unsafe custom execution threw!");
-
-            output.ShouldHaveLifecycle();
-        }
     }
 }


Reorder members to match the test class lifecycle flows under test.

--- src/Fixie.Tests/LifecycleTests.cs
+++ src/Fixie.Tests/LifecycleTests.cs
@@ -385,6 +385,98 @@
                 "TestSetUp", ".ctor", "Pass", "Dispose", "TestTearDown");
         }

+        public void ShouldFailCaseWhenConstructingPerCaseAndTestSetUpThrows()
+        {
+            FailDuring("TestSetUp");
+
+            var output = Run<SampleTestClass, CreateInstancePerCase>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail failed: 'TestSetUp' failed!",
+                "SampleTestClass.Pass failed: 'TestSetUp' failed!",
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle("TestSetUp", "TestSetUp");
+        }
+
+        public void ShouldFailCaseWhenConstructingPerCaseAndConstructorThrows()
+        {
+            FailDuring(".ctor");
+
+            var output = Run<SampleTestClass, CreateInstancePerCase>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail failed: '.ctor' failed!",
+                "SampleTestClass.Pass failed: '.ctor' failed!",
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle(
+                "TestSetUp", ".ctor", "TestTearDown",
+                "TestSetUp", ".ctor", "TestTearDown");
+        }
+
+        public void ShouldFailCaseWhenConstructingPerCaseAndDisposeThrows()
+        {
+            FailDuring("Dispose");
+
+            var output = Run<SampleTestClass, CreateInstancePerCase>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail failed: 'Fail' failed!",
+                "SampleTestClass.Fail failed: 'Dispose' failed!",
+                "SampleTestClass.Pass failed: 'Dispose' failed!",
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle(
+                "TestSetUp", ".ctor", "Fail", "Dispose", "TestTearDown",
+                "TestSetUp", ".ctor", "Pass", "Dispose", "TestTearDown");
+        }
+
+        public void ShouldFailCasesAlongsidePrimaryResultsWhenConstructingPerCaseAndTestTearDownThrows()
+        {
+            FailDuring("TestTearDown");
+
+            var output = Run<SampleTestClass, CreateInstancePerCase>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail failed: 'Fail' failed!",
+                "SampleTestClass.Fail failed: 'TestTearDown' failed!",
+
+                "SampleTestClass.Pass passed",
+                "SampleTestClass.Pass failed: 'TestTearDown' failed!",
+
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle(
+                "TestSetUp", ".ctor", "Fail", "Dispose", "TestTearDown",
+                "TestSetUp", ".ctor", "Pass", "Dispose", "TestTearDown");
+        }
+
+        public void ShouldSkipLifecycleWhenConstructingPerCaseAndAllCasesAreSkipped()
+        {
+            var output = Run<AllSkippedTestClass, CreateInstancePerCase>();
+
+            output.ShouldHaveResults(
+                "AllSkippedTestClass.SkipA skipped",
+                "AllSkippedTestClass.SkipB skipped",
+                "AllSkippedTestClass.SkipC skipped");
+
+            output.ShouldHaveLifecycle();
+        }
+
+        public void ShouldSkipLifecycleWhenConstructingPerCaseButAllCasesFailCustomParameterGeneration()
+        {
+            discovery.Parameters.Add<BuggyParameterSource>();
+
+            var output = Run<ParameterizedSampleTestClass, CreateInstancePerCase>();
+
+            output.ShouldHaveResults(
+                "ParameterizedSampleTestClass.BoolArg failed: Exception thrown while attempting to yield input parameters for method: BoolArg",
+                "ParameterizedSampleTestClass.IntArg failed: Exception thrown while attempting to yield input parameters for method: IntArg");
+
+            output.ShouldHaveLifecycle("TestSetUp", "TestSetUp");
+        }
+
         public void ShouldAllowConstructingPerClass()
         {
             var output = Run<SampleTestClass, CreateInstancePerClass>();
@@ -399,104 +491,6 @@
                 "TestSetUp", "CaseSetUp", "Fail", "CaseTearDown", "TestTearDown",
                 "TestSetUp", "CaseSetUp", "Pass", "CaseTearDown", "TestTearDown",
                 "Dispose");
-        }
-
-        public void ShouldSkipAllTestsWhenShortCircuitingClassExecution()
-        {
-            var output = Run<SampleTestClass, ShortCircuitClassExecution>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail skipped",
-                "SampleTestClass.Pass skipped",
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle();
-        }
-
-        public void ShouldSkipAllTestsWhenShortCircuitingTestExecution()
-        {
-            var output = Run<SampleTestClass, ShortCircuitTestExection>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail skipped",
-                "SampleTestClass.Pass skipped",
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle();
-        }
-
-        public void ShouldSkipAllCasesWhenShortCircuitingCaseExecution()
-        {
-            var output = Run<SampleTestClass, ShortCircuitCaseExection>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail skipped",
-                "SampleTestClass.Pass skipped",
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle();
-        }
-
-        public void ShouldFailCaseWhenConstructingPerCaseAndTestSetUpThrows()
-        {
-            FailDuring("TestSetUp");
-
-            var output = Run<SampleTestClass, CreateInstancePerCase>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail failed: 'TestSetUp' failed!",
-                "SampleTestClass.Pass failed: 'TestSetUp' failed!",
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle("TestSetUp", "TestSetUp");
-        }
-
-        public void ShouldFailCaseWhenConstructingPerCaseAndConstructorThrows()
-        {
-            FailDuring(".ctor");
-
-            var output = Run<SampleTestClass, CreateInstancePerCase>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail failed: '.ctor' failed!",
-                "SampleTestClass.Pass failed: '.ctor' failed!",
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle(
-                "TestSetUp", ".ctor", "TestTearDown",
-                "TestSetUp", ".ctor", "TestTearDown");
-        }
-
-        public void ShouldFailCasesAlongsidePrimaryResultsWhenConstructingPerCaseAndTestTearDownThrows()
-        {
-            FailDuring("TestTearDown");
-
-            var output = Run<SampleTestClass, CreateInstancePerCase>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail failed: 'Fail' failed!",
-                "SampleTestClass.Fail failed: 'TestTearDown' failed!",
-
-                "SampleTestClass.Pass passed",
-                "SampleTestClass.Pass failed: 'TestTearDown' failed!",
-
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle(
-                "TestSetUp", ".ctor", "Fail", "Dispose", "TestTearDown",
-                "TestSetUp", ".ctor", "Pass", "Dispose", "TestTearDown");
-        }
-
-        public void ShouldFailAllMethodsWhenCustomExecutionThrows()
-        {
-            var output = Run<SampleTestClass, BuggyExecution>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail failed: Unsafe custom execution threw!",
-                "SampleTestClass.Pass failed: Unsafe custom execution threw!",
-                "SampleTestClass.Skip failed: Unsafe custom execution threw!");
-
-            output.ShouldHaveLifecycle();
         }

         public void ShouldFailAllMethodsWhenConstructingPerClassAndConstructorThrows()
@@ -590,23 +584,6 @@
                 "Dispose");
         }

-        public void ShouldFailCaseWhenConstructingPerCaseAndDisposeThrows()
-        {
-            FailDuring("Dispose");
-
-            var output = Run<SampleTestClass, CreateInstancePerCase>();
-
-            output.ShouldHaveResults(
-                "SampleTestClass.Fail failed: 'Fail' failed!",
-                "SampleTestClass.Fail failed: 'Dispose' failed!",
-                "SampleTestClass.Pass failed: 'Dispose' failed!",
-                "SampleTestClass.Skip skipped");
-
-            output.ShouldHaveLifecycle(
-                "TestSetUp", ".ctor", "Fail", "Dispose", "TestTearDown",
-                "TestSetUp", ".ctor", "Pass", "Dispose", "TestTearDown");
-        }
-
         public void ShouldFailAllMethodsAfterReportingPrimaryResultsWhenConstructingPerClassAndDisposeThrows()
         {
             FailDuring("Dispose");
@@ -629,41 +606,16 @@
                 "Dispose");
         }

-        public void ShouldSkipLifecycleWhenConstructingPerCaseAndAllCasesAreSkipped()
-        {
-            var output = Run<AllSkippedTestClass, CreateInstancePerCase>();
+        public void ShouldNotSkipLifecycleWhenConstructingPerClassAndAllCasesAreSkipped()
+        {
+            var output = Run<AllSkippedTestClass, CreateInstancePerClass>();

             output.ShouldHaveResults(
                 "AllSkippedTestClass.SkipA skipped",
                 "AllSkippedTestClass.SkipB skipped",
                 "AllSkippedTestClass.SkipC skipped");

-            output.ShouldHaveLifecycle();
-        }
-
-        public void ShouldNotSkipLifecycleWhenConstructingPerClassAndAllCasesAreSkipped()
-        {
-            var output = Run<AllSkippedTestClass, CreateInstancePerClass>();
-
-            output.ShouldHaveResults(
-                "AllSkippedTestClass.SkipA skipped",
-                "AllSkippedTestClass.SkipB skipped",
-                "AllSkippedTestClass.SkipC skipped");
-
             output.ShouldHaveLifecycle(".ctor", "Dispose");
-        }
-
-        public void ShouldSkipLifecycleWhenConstructingPerCaseButAllCasesFailCustomParameterGeneration()
-        {
-            discovery.Parameters.Add<BuggyParameterSource>();
-
-            var output = Run<ParameterizedSampleTestClass, CreateInstancePerCase>();
-
-            output.ShouldHaveResults(
-                "ParameterizedSampleTestClass.BoolArg failed: Exception thrown while attempting to yield input parameters for method: BoolArg",
-                "ParameterizedSampleTestClass.IntArg failed: Exception thrown while attempting to yield input parameters for method: IntArg");
-
-            output.ShouldHaveLifecycle("TestSetUp", "TestSetUp");
         }

         public void ShouldNotSkipLifecycleWhenConstructingPerClassAndAllCasesFailCustomParameterGeneration()
@@ -722,5 +674,53 @@
                 "TestSetUp", "Fail", "TestTearDown",
                 "TestSetUp", "Pass", "TestTearDown");
         }
+
+        public void ShouldSkipAllTestsWhenShortCircuitingClassExecution()
+        {
+            var output = Run<SampleTestClass, ShortCircuitClassExecution>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail skipped",
+                "SampleTestClass.Pass skipped",
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle();
+        }
+
+        public void ShouldSkipAllTestsWhenShortCircuitingTestExecution()
+        {
+            var output = Run<SampleTestClass, ShortCircuitTestExection>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail skipped",
+                "SampleTestClass.Pass skipped",
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle();
+        }
+
+        public void ShouldSkipAllCasesWhenShortCircuitingCaseExecution()
+        {
+            var output = Run<SampleTestClass, ShortCircuitCaseExection>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail skipped",
+                "SampleTestClass.Pass skipped",
+                "SampleTestClass.Skip skipped");
+
+            output.ShouldHaveLifecycle();
+        }
+
+        public void ShouldFailAllMethodsWhenCustomExecutionThrows()
+        {
+            var output = Run<SampleTestClass, BuggyExecution>();
+
+            output.ShouldHaveResults(
+                "SampleTestClass.Fail failed: Unsafe custom execution threw!",
+                "SampleTestClass.Pass failed: Unsafe custom execution threw!",
+                "SampleTestClass.Skip failed: Unsafe custom execution threw!");
+
+            output.ShouldHaveLifecycle();
+        }
     }
 }


Fixes an issue where desired heat / cool requires current value of its opposite

--- src/HomeAutio.Mqtt.Ecobee/EcobeeMqttService.cs
+++ src/HomeAutio.Mqtt.Ecobee/EcobeeMqttService.cs
@@ -119,7 +119,7 @@
             switch (thermostatTopic)
             {
                 case "desiredCool/set":
-                    if (int.TryParse(message, out int desiredCoolValue))
+                    if (int.TryParse(message, out int desiredCoolValue) && int.TryParse(_thermostatStatus[thermostatId].Status["desiredHeat"], out int currentDesiredHeatValue))
                     {
                         request.Functions = new List<Function>
                         {
@@ -128,7 +128,8 @@
                                 Params = new SetHoldParams
                                 {
                                     HoldType = "nextTransition",
-                                    CoolHoldTemp = desiredCoolValue * 10
+                                    CoolHoldTemp = desiredCoolValue * 10,
+                                    HeatHoldTemp = currentDesiredHeatValue * 10
                                 }
                             }
                         };
@@ -160,7 +161,7 @@

                     break;
                 case "desiredHeat/set":
-                    if (int.TryParse(message, out int desiredHeatValue))
+                    if (int.TryParse(message, out int desiredHeatValue) && int.TryParse(_thermostatStatus[thermostatId].Status["desiredHeat"], out int currentDesiredCoolValue))
                     {
                         request.Functions = new List<Function>
                         {
@@ -169,6 +170,7 @@
                                 Params = new SetHoldParams
                                 {
                                     HoldType = "nextTransition",
+                                    CoolHoldTemp = currentDesiredCoolValue * 10,
                                     HeatHoldTemp = desiredHeatValue * 10
                                 }
                             }


Tweaking the constructor

Tweaking the constructor

--- src/GitHub.Api/Git/GitLogEntry.cs
+++ src/GitHub.Api/Git/GitLogEntry.cs
@@ -11,7 +11,7 @@
         private const string Today = "Today";
         private const string Yesterday = "Yesterday";

-        public static GitLogEntry Default = new GitLogEntry(String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, new List<GitStatusEntry>(), String.Empty, String.Empty);
+        public static GitLogEntry Default = new GitLogEntry(String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, DateTimeOffset.MinValue, DateTimeOffset.MinValue, new List<GitStatusEntry>(), String.Empty, String.Empty);

         public string commitID;
         public string mergeA;
@@ -61,43 +61,6 @@
             this.mergeB = mergeB ?? string.Empty;
         }

-        public GitLogEntry(string commitID,
-            string authorName, string authorEmail,
-            string commitName, string commitEmail,
-            string summary,
-            string description,
-            string timeString, string commitTimeString,
-            List<GitStatusEntry> changes,
-            string mergeA = null, string mergeB = null) : this()
-        {
-            Guard.ArgumentNotNull(commitID, "commitID");
-            Guard.ArgumentNotNull(authorName, "authorName");
-            Guard.ArgumentNotNull(authorEmail, "authorEmail");
-            Guard.ArgumentNotNull(commitEmail, "commitEmail");
-            Guard.ArgumentNotNull(commitName, "commitName");
-            Guard.ArgumentNotNull(summary, "summary");
-            Guard.ArgumentNotNull(description, "description");
-            Guard.ArgumentNotNull(timeString, "timeString");
-            Guard.ArgumentNotNull(commitTimeString, "commitTimeString");
-            Guard.ArgumentNotNull(changes, "changes");
-
-            this.commitID = commitID;
-            this.authorName = authorName;
-            this.authorEmail = authorEmail;
-            this.commitEmail = commitEmail;
-            this.commitName = commitName;
-            this.summary = summary;
-            this.description = description;
-
-            this.timeString = timeString;
-            this.commitTimeString = commitTimeString;
-
-            this.changes = changes;
-
-            this.mergeA = mergeA ?? string.Empty;
-            this.mergeB = mergeB ?? string.Empty;
-        }
-
         public string PrettyTimeString
         {
             get
@@ -118,7 +81,15 @@
             {
                 if (!timeValue.HasValue)
                 {
-                    timeValue = DateTimeOffset.ParseExact(TimeString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None);
+                    DateTimeOffset result;
+                    if (DateTimeOffset.TryParseExact(TimeString, Constants.Iso8601Format, CultureInfo.InvariantCulture,DateTimeStyles.None, out result))
+                    {
+                        timeValue = result;
+                    }
+                    else
+                    {
+                        Time = DateTimeOffset.MinValue;
+                    }
                 }

                 return timeValue.Value;
@@ -137,7 +108,15 @@
             {
                 if (!commitTimeValue.HasValue)
                 {
-                    commitTimeValue = DateTimeOffset.ParseExact(CommitTimeString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None);
+                    DateTimeOffset result;
+                    if (DateTimeOffset.TryParseExact(CommitTimeString, Constants.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
+                    {
+                        commitTimeValue = result;
+                    }
+                    else
+                    {
+                        CommitTime = DateTimeOffset.MinValue;
+                    }
                 }

                 return commitTimeValue.Value;