Correct sql Query String on Server figure's points were being sent to web app in wrong order

--- Server/API.Repositories/LineRepository.cs
+++ Server/API.Repositories/LineRepository.cs
@@ -195,7 +195,7 @@

         //SQL Functions
         private static readonly string SELECT_ALL_LINES = "SELECT id, boardId, isClosedForm, lineStyleId, lineColor FROM dbo.GetLinesInfo(@boardId) ORDER BY id";
-        private static readonly string SELECT_ALL_LINES_POINTS = "SELECT id, boardId, linePointX, linePointY, linePointIdx, pointWidth FROM dbo.GetLinesPoints(@boardId) ORDER BY id";
+        private static readonly string SELECT_ALL_LINES_POINTS = "SELECT id, boardId, linePointX, linePointY, linePointIdx, pointWidth FROM dbo.GetLinesPoints(@boardId) ORDER BY linePointIdx";

         private static readonly string SELECT_LINES = "SELECT id, boardId, isClosedForm, lineStyleId, lineColor FROM dbo.GetLinesInfo(@boardId) WHERE id=@id";
         private static readonly string SELECT_LINES_POINTS = "SELECT id, boardId, linePointX, linePointY, linePointIdx, pointWidth FROM dbo.GetLinesPoints(@boardId) WHERE id=@id";


Commit of updated VersionAssemblyInfo.cs files from last build.

--- Properties/VersionAssemblyInfo.cs
+++ Properties/VersionAssemblyInfo.cs
@@ -16,7 +16,7 @@

 [assembly: AssemblyVersion("3.0.0.0")]
 [assembly: AssemblyFileVersion("3.0.1.0")]
-[assembly: AssemblyConfiguration("Release built on 2013-12-05 16:05")]
+[assembly: AssemblyConfiguration("Release built on 2013-12-27 15:23")]
 [assembly: AssemblyCopyright("Copyright © 2013 Autofac Contributors")]
 [assembly: AssemblyDescription("Autofac.Extras.Moq 3.0.1")]


TODO Fill out local hex information

TODO Fill out local hex information

--- SettlersOfCatanAnalysis/Objects/Vertex.cs
+++ SettlersOfCatanAnalysis/Objects/Vertex.cs
@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;

 namespace SettlersOfCatanAnalysis.Objects
 {
@@ -23,6 +24,11 @@
         /// Integer representation of the current colour occupying a vertex
         /// </summary>
         public Player.Colour Colour { get; private set; }
+
+        /// <summary>
+        /// TODO
+        /// </summary>
+        public List<int> LocalHexes { get; } = new List<int> {-1, -1, -1, -1, -1, -1};

         /// <summary>
         /// Initialises a vertex


Incluse DbType.AnsiString support on MySqlDialect.

--- SharpData/Databases/MySql/MySqlDialect.cs
+++ SharpData/Databases/MySql/MySqlDialect.cs
@@ -74,6 +74,7 @@

     	protected override string GetDbTypeString(DbType type, int precision) {
             switch (type) {
+                case DbType.AnsiString:
                 case DbType.String:
                     if (precision == 0) {
                         return "VARCHAR(255)";


Changed assembly file version back to 1.0

--- SignalR.Client/Properties/AssemblyInfo.cs
+++ SignalR.Client/Properties/AssemblyInfo.cs
@@ -33,4 +33,4 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyFileVersion("1.0.*")]
+[assembly: AssemblyFileVersion("1.0.0.0")]


(TFS CS 3936)

(TFS CS 3936)

--- Signum.Web/Controllers/ErrorController.cs
+++ Signum.Web/Controllers/ErrorController.cs
@@ -27,6 +27,9 @@
             ViewData["url"] = url;

             if (LogException != null) {
+                //  Check if error is accessing to a static file
+                // since IIS will get the request and serve it
+                if (url.EndsWith(".js") || url.EndsWith(".css")) return;
                 HandleErrorInfo hei = new HandleErrorInfo(
                     new Exception("Error 404 accessing url '" + url + "'"),
                     (string)this.RouteData.Values["controller"],


Generator: pass Generator.Encoding to SW ctor

It seems that overriding StreamWriter.Encoding
does absolutely nothing. Instead pass
Generator.Encoding to
StreamWriter(Stream, Encoding), which does
actually write the bytes in the desired
encoding.

Fixes iOS .strings files (should have been
UTF-16LE, not UTF8).

--- Vernacular.Tool/Vernacular.Generators/Generator.cs
+++ Vernacular.Tool/Vernacular.Generators/Generator.cs
@@ -76,15 +76,9 @@

         protected sealed class GeneratorWriter : StreamWriter
         {
-            private Encoding encoding;
-            public override Encoding Encoding {
-                get { return encoding; }
-            }
-
             public GeneratorWriter (Stream stream, Encoding encoding)
-                : base (stream)
+                : base (stream, encoding)
             {
-                this.encoding = encoding;
                 NewLine = "\n";
             }
         }


comment ngui

comment ngui

--- Unity/Editor/EditorTools_Font.cs
+++ Unity/Editor/EditorTools_Font.cs
@@ -292,11 +292,11 @@

-		// UILabel []objs = null ;
-
-		var objs = GameObject.FindObjectsOfType<UILabel>() ;
-
-		Debug.LogWarning("objs.Length=" + objs.Length );
+		UILabel []objs = null ;
+
+		// var objs = GameObject.FindObjectsOfType<UILabel>() ;
+
+		// Debug.LogWarning("objs.Length=" + objs.Length );

@@ -328,9 +328,9 @@

 				{

-					var uiLabel = comp as UILabel ;
-
-					uiLabel.trueTypeFont = selectFont  as Font;
+					// var uiLabel = comp as UILabel ;
+
+					// uiLabel.trueTypeFont = selectFont  as Font;

 				}


Checks simulation for divergence

Checks simulation for divergence

--- Circuit/Simulation.cs
+++ Circuit/Simulation.cs
@@ -263,17 +263,17 @@

             _t = (double)processor.DynamicInvoke(parameters.ToArray());

-            //// Check the last samples for infinity/NaN.
-            //foreach (KeyValuePair<Expression, double[]> i in Output)
-            //{
-            //    double v = i.Value[i.Value.Length - 1];
-            //    if (double.IsInfinity(v) || double.IsNaN(v))
-            //    {
-            //        Log.WriteLine(MessageType.Error, "Simulation diverged at " + _t.ToString() + " s.");
-            //        Reset();
-            //        return;
-            //    }
-            //}
+            // Check the last samples for infinity/NaN.
+            foreach (KeyValuePair<Expression, double[]> i in Output)
+            {
+                double v = i.Value[i.Value.Length - 1];
+                if (double.IsInfinity(v) || double.IsNaN(v))
+                {
+                    //Log.WriteLine(MessageType.Error, "Simulation diverged at " + _t.ToString() + " s.");
+                    Reset();
+                    return;
+                }
+            }
         }

         /// <summary>
@@ -549,7 +549,7 @@
         }

         // Generate a for loop given the header and body expressions.
-        private void For(
+        private static void For(
             IList<LinqExpression> Target,
             Action Init,
             LinqExpression Condition,
@@ -579,7 +579,7 @@
         }

         // Generate a for loop given the header and body expressions.
-        private void For(
+        private static void For(
             IList<LinqExpression> Target,
             Action Init,
             LinqExpression Condition,
@@ -590,7 +590,7 @@
         }

         // Generate a while loop given the condition and body expressions.
-        private void While(
+        private static void While(
             IList<LinqExpression> Target,
             LinqExpression Condition,
             Action<LinqExpressions.LabelTarget, LinqExpressions.LabelTarget> Body)
@@ -614,7 +614,7 @@
         }

         // Generate a while loop given the condition and body expressions.
-        private void While(
+        private static void While(
             IList<LinqExpression> Target,
             LinqExpression Condition,
             Action Body)
@@ -623,7 +623,7 @@
         }

         // Generate a do-while loop given the condition and body expressions.
-        private void DoWhile(
+        private static void DoWhile(
             IList<LinqExpression> Target,
             Action<LinqExpressions.LabelTarget, LinqExpressions.LabelTarget> Body,
             LinqExpression Condition)
@@ -646,7 +646,7 @@
         }

         // Generate a do-while loop given the condition and body expressions.
-        private void DoWhile(
+        private static void DoWhile(
             IList<LinqExpression> Target,
             Action Body,
             LinqExpression Condition)


upping version

upping version

--- SlackbotAnchor/Properties/AssemblyInfo.cs
+++ SlackbotAnchor/Properties/AssemblyInfo.cs
@@ -14,5 +14,5 @@

 [assembly: Guid("6950db62-9f07-43cd-81ec-be2a900f940e")]

-[assembly: AssemblyVersion("1.0.4.0")]
-[assembly: AssemblyFileVersion("1.0.4.0")]
+[assembly: AssemblyVersion("1.1.0.0")]
+[assembly: AssemblyFileVersion("1.1.0.0")]


modification pour acceleration du snake

modification pour acceleration du snake

--- Snake-DesignPatterns/Controllers/CTick.cs
+++ Snake-DesignPatterns/Controllers/CTick.cs
@@ -22,11 +22,24 @@

         private volatile bool shouldStop;
         public volatile int Speed;
+        //We count 10 ticks and we accelerate the snake
+        private int count;
+
+        public int Count { get => count; }
+
+        //Method to re-initialize the Speed
+        public bool SpeedInit()
+        {
+            count = 0;
+            return true;
+        }

         Thread worker;
         public CTick()
         {
+            //We need  to reduce the tick to highten the speed
             Speed = 250;
+            count = 0;
             worker = new Thread(work);
         }

@@ -52,6 +65,16 @@
             {
                 //Wait 1 seconds and send a Tick
                 Thread.Sleep(Speed);
+
+                //each count=30*count(30,60,90....), we accelerate the snake, and if Speed = 40, we won't accelerate anymore (enough)
+                if (count.Equals(30 * count) || ((Speed - 20).Equals(20)))
+                {
+                    Speed = Speed - 20;
+                    count = 0;
+                }
+
+                //modify the speed using the count
+                count++;
                 EventManager.Instance.TriggerEvent(Event.ClockTick);
             }
         }


Corrected copyright

Corrected copyright

--- SnowyImageCopy/Properties/AssemblyInfo.cs
+++ SnowyImageCopy/Properties/AssemblyInfo.cs
@@ -12,7 +12,7 @@
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("Snowy")]
-[assembly: AssemblyCopyright("Copyright © EMO 2014")]
+[assembly: AssemblyCopyright("Copyright © 2014 EMO")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]


Fix to red border no longer appearing after first hit

--- SolarSmuggler/Assets/Scripts/HUDScript.cs
+++ SolarSmuggler/Assets/Scripts/HUDScript.cs
@@ -70,8 +70,15 @@
         Color c = redBorder.color;
         c.a = 1;
         redBorder.color = c;
-
-        redBorder.CrossFadeAlpha(0,3f,false);
+        //redBorder.CrossFadeAlpha(0.01f,3f,false);
+        StartCoroutine("FadeOut");
+    }
+
+    IEnumerator FadeOut() {
+        redBorder.CrossFadeAlpha(1.0f,0.1f,false);
+        yield return new WaitForSeconds(0.1f);
+        redBorder.CrossFadeAlpha(0.01f, 3.0f, false);
+        yield return null;
     }

     public void HealthUpdate (int health, int max_Health)


If no data is submitted to the controller, return accepted.

--- Source/Api/Controllers/EventController.cs
+++ Source/Api/Controllers/EventController.cs
@@ -392,6 +392,9 @@
         [Authorize(Roles = AuthorizationRoles.Client)]
         [ConfigurationResponseFilter]
         public async Task <IHttpActionResult> PostAsync([NakedBody]byte[] data, string projectId = null, int version = 2, [UserAgent]string userAgent = null) {
+            if (data == null || data.Length == 0)
+                return StatusCode(HttpStatusCode.Accepted);
+
             await _metricsClient.CounterAsync(MetricNames.PostsSubmitted);

             if (projectId == null)


Fixed mark fixed api routes.

Fixed mark fixed api routes.

--- Source/Api/Controllers/StackController.cs
+++ Source/Api/Controllers/StackController.cs
@@ -103,7 +103,7 @@
         /// </summary>
         [HttpPost]
         [Route("~/api/v1/stack/markfixed")]
-        [Route("~/api/v{version:int=2}/stack/mark-fixed")]
+        [Route("~/api/v{version:int=2}/stacks/mark-fixed")]
         [OverrideAuthorization]
         [Authorize(Roles = AuthorizationRoles.Client)]
         public IHttpActionResult MarkFixed(JObject data, int version = 1) {
@@ -146,7 +146,7 @@
         /// </summary>
         [HttpPost]
         [Route("~/api/v1/stack/addlink")]
-        [Route("~/api/v{version:int=2}/stack/add-link")]
+        [Route("~/api/v{version:int=2}/stacks/add-link")]
         [OverrideAuthorization]
         [Authorize(Roles = AuthorizationRoles.Client)]
         public IHttpActionResult AddLink(JObject data, int version = 1) {


Added CSV export for item data. Added extra "unknown" data field for English item data (between names and log names). Disable both the Item Type combobox and the Export menu item while the list view for items is being populated.

--- PlayOnline.Utils.FFXIDataBrowser/MainWindow.cs
+++ PlayOnline.Utils.FFXIDataBrowser/MainWindow.cs
@@ -4,6 +4,7 @@
 using System.Collections;
 using System.ComponentModel;
 using System.IO;
+using System.Globalization;
 using System.Text;
 using System.Threading;
 using System.Windows.Forms;
@@ -108,6 +109,9 @@
     private System.Windows.Forms.MenuItem mnuIDEnglish;
     private System.Windows.Forms.MenuItem mnuIDJapanese;
     private System.Windows.Forms.TabPage tabViewerStringTable;
+    private System.Windows.Forms.ContextMenu mnuItemDataContext;
+    private System.Windows.Forms.MenuItem mnuIDCExport;
+    private System.Windows.Forms.SaveFileDialog dlgExportItemData;

     private System.ComponentModel.IContainer components;

@@ -180,6 +184,8 @@
       this.lstItems.Items.Clear();
       this.lstItems.Columns.Clear();
       this.lstItems.HeaderStyle = ColumnHeaderStyle.Nonclickable;
+      this.cmbItemType.Enabled = false;
+      this.mnuIDCExport.Enabled = false;
     bool AddImages = false;
       if (this.ilItemIcons.Images.Count == 0) {
 	AddImages = true;
@@ -212,7 +218,8 @@
       }
       this.lstItems.Columns.Add("Japanese Name", 125, HorizontalAlignment.Left);
       this.lstItems.Columns.Add("English Name",  125, HorizontalAlignment.Left);
-      if ((this.cmbItemType.SelectedIndex % 2) == 0) { // English data has two additional text fields
+      if ((this.cmbItemType.SelectedIndex % 2) == 0) { // English data has an extra byte, and two additional text fields
+	this.lstItems.Columns.Add("Unknown 4", 70, HorizontalAlignment.Left);
 	this.lstItems.Columns.Add("Log Name (Singular)", 200, HorizontalAlignment.Left);
 	this.lstItems.Columns.Add("Log Name (Plural)",   200, HorizontalAlignment.Left);
       }
@@ -271,7 +278,8 @@
 	}
 	else { // EN
 	  LVI.SubItems.Add(E.GetString(BR.ReadBytes(22)).TrimEnd('\0'));
-	  LVI.SubItems.Add(E.GetString(BR.ReadBytes(34)).TrimEnd('\0'));
+	  LVI.SubItems.Add(E.GetString(BR.ReadBytes(32)).TrimEnd('\0')); // Maybe just 22 after all, with 12 unknown bytes after it?
+	  LVI.SubItems.Add(String.Format("{0:X4} ({0})", BR.ReadUInt16()));
 	  LVI.SubItems.Add(E.GetString(BR.ReadBytes(64)).TrimEnd('\0'));
 	  LVI.SubItems.Add(E.GetString(BR.ReadBytes(64)).TrimEnd('\0'));
 	}
@@ -284,9 +292,11 @@
 	LVI.SubItems.Add(FI.Image.ToString());
 	Application.DoEvents();
       }
-      this.lstItems.HeaderStyle = ColumnHeaderStyle.Clickable;
       if (AddImages)
 	this.cmbImageChooser.SelectedIndex = 0;
+      this.lstItems.HeaderStyle = ColumnHeaderStyle.Clickable;
+      this.cmbItemType.Enabled = true;
+      this.mnuIDCExport.Enabled = true;
     }

     private void cmbItemType_SelectedIndexChanged(object sender, System.EventArgs e) {
@@ -370,6 +380,8 @@
       this.tabViewers = new System.Windows.Forms.TabControl();
       this.tabViewerItems = new System.Windows.Forms.TabPage();
       this.lstItems = new System.Windows.Forms.ListView();
+      this.mnuItemDataContext = new System.Windows.Forms.ContextMenu();
+      this.mnuIDCExport = new System.Windows.Forms.MenuItem();
       this.ilItemIcons = new System.Windows.Forms.ImageList(this.components);
       this.label2 = new System.Windows.Forms.Label();
       this.cmbItemType = new System.Windows.Forms.ComboBox();
@@ -384,6 +396,7 @@
       this.colXIEntryText = new System.Windows.Forms.ColumnHeader();
       this.pnlNoViewers = new System.Windows.Forms.Panel();
       this.lblNoViewers = new System.Windows.Forms.Label();
+      this.dlgExportItemData = new System.Windows.Forms.SaveFileDialog();
       this.pnlViewerArea.SuspendLayout();
       this.tabViewers.SuspendLayout();
       this.tabViewerItems.SuspendLayout();
@@ -1092,6 +1105,7 @@
       this.lstItems.AllowColumnReorder = true;
       this.lstItems.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("lstItems.Anchor")));
       this.lstItems.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lstItems.BackgroundImage")));
+      this.lstItems.ContextMenu = this.mnuItemDataContext;
       this.lstItems.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("lstItems.Dock")));
       this.lstItems.Enabled = ((bool)(resources.GetObject("lstItems.Enabled")));
       this.lstItems.Font = ((System.Drawing.Font)(resources.GetObject("lstItems.Font")));
@@ -1110,6 +1124,22 @@
       this.lstItems.Text = resources.GetString("lstItems.Text");
       this.lstItems.View = System.Windows.Forms.View.Details;
       this.lstItems.Visible = ((bool)(resources.GetObject("lstItems.Visible")));
+      //
+      // mnuItemDataContext
+      //
+      this.mnuItemDataContext.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+										       this.mnuIDCExport});
+      this.mnuItemDataContext.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("mnuItemDataContext.RightToLeft")));
+      //
+      // mnuIDCExport
+      //
+      this.mnuIDCExport.Enabled = ((bool)(resources.GetObject("mnuIDCExport.Enabled")));
+      this.mnuIDCExport.Index = 0;
+      this.mnuIDCExport.Shortcut = ((System.Windows.Forms.Shortcut)(resources.GetObject("mnuIDCExport.Shortcut")));
+      this.mnuIDCExport.ShowShortcut = ((bool)(resources.GetObject("mnuIDCExport.ShowShortcut")));
+      this.mnuIDCExport.Text = resources.GetString("mnuIDCExport.Text");
+      this.mnuIDCExport.Visible = ((bool)(resources.GetObject("mnuIDCExport.Visible")));
+      this.mnuIDCExport.Click += new System.EventHandler(this.mnuIDCExport_Click);
       //
       // ilItemIcons
       //
@@ -1397,6 +1427,11 @@
       this.lblNoViewers.Text = resources.GetString("lblNoViewers.Text");
       this.lblNoViewers.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("lblNoViewers.TextAlign")));
       this.lblNoViewers.Visible = ((bool)(resources.GetObject("lblNoViewers.Visible")));
+      //
+      // dlgExportItemData
+      //
+      this.dlgExportItemData.Filter = resources.GetString("dlgExportItemData.Filter");
+      this.dlgExportItemData.Title = resources.GetString("dlgExportItemData.Title");
       //
       // MainWindow
       //
@@ -1618,6 +1653,29 @@

     #endregion

+    #region Item Data Context Menu Events
+
+    private void mnuIDCExport_Click(object sender, System.EventArgs e) {
+      this.dlgExportItemData.FileName = "exported-item-data.csv";
+      if (this.dlgExportItemData.ShowDialog() == DialogResult.OK) {
+      StreamWriter SW = new StreamWriter(this.dlgExportItemData.FileName, false, Encoding.UTF8);
+	SW.Write("{0}Index{0}", '"');
+	foreach (ColumnHeader CH in this.lstItems.Columns)
+	  SW.Write("{0}{1}{2}{1}", CultureInfo.CurrentCulture.TextInfo.ListSeparator, '"', CH.Text.Replace("\"", "\"\""));
+	SW.WriteLine();
+      long Index = 0;
+	foreach (ListViewItem LVI in this.lstItems.Items) {
+	  SW.Write(++Index);
+	  foreach (ListViewItem.ListViewSubItem LVSI in LVI.SubItems)
+	    SW.Write("{0}{1}{2}{1}", CultureInfo.CurrentCulture.TextInfo.ListSeparator, '"', LVSI.Text);
+	  SW.WriteLine();
+	}
+	SW.Close();
+      }
+    }
+
+    #endregion
+
     #region Main Menu Events

     private readonly string DummyText = "--DUMMY--";


CSP changes dev mode rollback

CSP changes dev mode rollback

--- CollAction/Startup.cs
+++ CollAction/Startup.cs
@@ -135,15 +135,19 @@
                 new CultureInfo("nl-NL")
             };

-            // Ensure our middleware handles proxied https, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
-            var forwardedHeaderOptions = new ForwardedHeadersOptions()
-            {
-                ForwardedHeaders = ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedHost,
-                ForwardLimit = 3
-            };
-            forwardedHeaderOptions.KnownProxies.Clear();
-            forwardedHeaderOptions.KnownNetworks.Clear();
-            app.UseForwardedHeaders(forwardedHeaderOptions);
+            if (env.IsProduction())
+            {
+                // Ensure our middleware handles proxied https, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
+                var forwardedHeaderOptions = new ForwardedHeadersOptions()
+                {
+                    ForwardedHeaders = ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedHost,
+                    ForwardLimit = 3
+                };
+                forwardedHeaderOptions.KnownProxies.Clear();
+                forwardedHeaderOptions.KnownNetworks.Clear();
+                app.UseForwardedHeaders(forwardedHeaderOptions);
+                app.UseRewriter(new RewriteOptions().AddRedirectToHttpsPermanent());
+            }

             if (!Configuration.GetValue<bool>("CspDisable"))
             {
@@ -162,66 +166,66 @@
                        cspBuilder.AddFormAction().Self() // Only allow form actions to our own site, or mailinator, or social media logins, or configured sources
                                                  .Sources.AddRange(new[]
                                                                    {
-                                                                       "https://collaction.us14.list-manage.com/",
-                                                                       "https://www.facebook.com/",
-                                                                       "https://m.facebook.com",
-                                                                       "https://accounts.google.com/",
-                                                                       "https://api.twitter.com/",
-                                                                       "https://www.twitter.com/"
+                                                                   "https://collaction.us14.list-manage.com/",
+                                                                   "https://www.facebook.com/",
+                                                                   "https://m.facebook.com",
+                                                                   "https://accounts.google.com/",
+                                                                   "https://api.twitter.com/",
+                                                                   "https://www.twitter.com/"
                                                                    }.Concat(Configuration["CspFormAction"]?.Split(";") ?? new string[0]));
                        cspBuilder.AddConnectSrc().Self() // Only allow API calls to self, and the websites we use for the share buttons, app insights or configured sources
                                                  .Sources.AddRange(new[]
                                                                    {
-                                                                       "https://www.linkedin.com/",
-                                                                       "https://linkedin.com/",
-                                                                       "https://www.twitter.com/",
-                                                                       "https://twitter.com/",
-                                                                       "https://www.facebook.com/",
-                                                                       "https://facebook.com/",
-                                                                       "https://graph.facebook.com/",
-                                                                       "https://dc.services.visualstudio.com/"
+                                                                   "https://www.linkedin.com/",
+                                                                   "https://linkedin.com/",
+                                                                   "https://www.twitter.com/",
+                                                                   "https://twitter.com/",
+                                                                   "https://www.facebook.com/",
+                                                                   "https://facebook.com/",
+                                                                   "https://graph.facebook.com/",
+                                                                   "https://dc.services.visualstudio.com/"
                                                                    }.Concat(Configuration["CspConnectSrc"]?.Split(";") ?? new string[0]));
                        cspBuilder.AddImgSrc().Self() // Only allow self-hosted images, or google analytics (for tracking images), or configured sources
                                              .Data()    // Used for project creation image preview
                                              .Sources.AddRange(new[]
                                                                {
-                                                                   "https://www.google-analytics.com",
-                                                                   $"https://s3.{Configuration["S3Region"]}.amazonaws.com"
+                                                               "https://www.google-analytics.com",
+                                                               $"https://s3.{Configuration["S3Region"]}.amazonaws.com"
                                                                }.Concat(Configuration["CspImgSrc"]?.Split(";") ?? new string[0]));
                        cspBuilder.AddStyleSrc().Self() // Only allow style/css from these sources (note: css injection can actually be dangerous), or configured sources
                                                .UnsafeInline() // Unfortunately this is necessary, the backend passess some things that are directly passed into css style attributes, especially on the project page. TODO: We should try to get rid of this.
                                                .Sources.AddRange(new[]
                                                                  {
-                                                                     "https://maxcdn.bootstrapcdn.com/",
-                                                                     "https://fonts.googleapis.com/"
+                                                                 "https://maxcdn.bootstrapcdn.com/",
+                                                                 "https://fonts.googleapis.com/"
                                                                  }.Concat(Configuration["CspStyleSrc"]?.Split(";") ?? new string[0]));
                        cspBuilder.AddFontSrc().Self() // Only allow fonts from these sources, or configured sources
                                               .Sources.AddRange(new[]
                                                                {
-                                                                   "https://maxcdn.bootstrapcdn.com/",
-                                                                   "https://fonts.googleapis.com/",
-                                                                   "https://fonts.gstatic.com"
+                                                               "https://maxcdn.bootstrapcdn.com/",
+                                                               "https://fonts.googleapis.com/",
+                                                               "https://fonts.gstatic.com"
                                                                }.Concat(Configuration["CspFontSrc"]?.Split(";") ?? new string[0]));
                        cspBuilder.AddFrameAncestors().Sources.AddRange(Configuration["CspFrameAncestors"]?.Split(";") ?? new string[0]); // Only allow configured sources
                        cspBuilder.AddMediaSrc().Self()
-                                               .Sources.AddRange(Configuration["CspMediaSrc"]?.Split(";") ?? new string[0]); // Only allow self-hosted videos, or configured sources
+                                                   .Sources.AddRange(Configuration["CspMediaSrc"]?.Split(";") ?? new string[0]); // Only allow self-hosted videos, or configured sources
                        cspBuilder.AddFrameAncestors().None(); // No framing allowed here (put us inside a frame tag)
                        cspBuilder.AddScriptSrc() // Only allow scripts from our own site, the aspnetcdn site, app insights and google analytics
-                                 .Self()
+                                 .Self()
                                  .Sources.AddRange(new[]
                                                    {
-                                                       "https://ajax.aspnetcdn.com",
-                                                       "https://www.googletagmanager.com",
-                                                       "https://www.google-analytics.com",
-                                                       "https://js.stripe.com",
-                                                       "*.msecnd.net",
-                                                       "'sha256-EHA5HNhe/+uz3ph6Fw34N85vHxX87fsJ5cH4KbZKIgU='"
-                                                   }.Concat(Configuration["CspScriptSrc"]?.Split(";") ?? new string[0]));
-                    })
+                                                   "https://ajax.aspnetcdn.com",
+                                                   "https://www.googletagmanager.com",
+                                                   "https://www.google-analytics.com",
+                                                   "https://js.stripe.com",
+                                                   "*.msecnd.net",
+                                                   "'sha256-EHA5HNhe/+uz3ph6Fw34N85vHxX87fsJ5cH4KbZKIgU='"
+                                                   }.Concat(Configuration["CspScriptSrc"]?.Split(";") ?? new string[0])
+                                                    .Concat(env.IsDevelopment() ? new[] { "'unsafe-eval'" } : // In development mode webpack uses eval to load debug information
+                                                                                Enumerable.Empty<string>()));
+                   })
                 );
             }
-
-            app.UseRewriter(new RewriteOptions().AddRedirectToHttpsPermanent());

             app.UseRequestLocalization(new RequestLocalizationOptions
             {


Logintype changed

Logintype changed

--- Presentation.Web/Controllers/BaseController.cs
+++ Presentation.Web/Controllers/BaseController.cs
@@ -44,7 +44,7 @@

             if (httpUser[0] == "WIN-KT4GI14GFC1")
             {
-                //httpUser[1] = ConfigurationManager.AppSettings["HTTPTESTUSER"];
+                httpUser[1] = ConfigurationManager.AppSettings["HTTPTESTUSER"];
                 httpUser[0] = "MIRACLE";
             }


add filter to workgroups to filter out administrative workgroup.s

--- Purchasing.Web/Services/IOrderAccessService.cs
+++ Purchasing.Web/Services/IOrderAccessService.cs
@@ -72,7 +72,7 @@
             var currentStatus = order.StatusCode;

             // get the user's role in the workgroup
-            var permissions = workgroup.Permissions.Where(a => a.User == user).ToList();
+            var permissions = workgroup.Permissions.Where(a => a.User == user && !a.Workgroup.Administrative).ToList();

             // current approvals
             var approvals = order.Approvals.Where(a => a.StatusCode.Level == currentStatus.Level && !a.Completed).ToList();


Changed method name.

Changed method name.

--- ReClass.NET/Nodes/BitFieldNode.cs
+++ ReClass.NET/Nodes/BitFieldNode.cs
@@ -89,7 +89,7 @@
 		/// <summary>Converts the memory value to a bit string.</summary>
 		/// <param name="memory">The process memory.</param>
 		/// <returns>The value converted to a bit string.</returns>
-		private string ConvertValueToGroupedBitString(MemoryBuffer memory)
+		private string ConvertValueToBitString(MemoryBuffer memory)
 		{
 			Contract.Requires(memory != null);
 			Contract.Ensures(Contract.Result<string>() != null);
@@ -139,7 +139,7 @@
 				AddHotSpot(view, rect, string.Empty, i, HotSpotType.Edit);
 			}

-			var value = ConvertValueToGroupedBitString(view.Memory);
+			var value = ConvertValueToBitString(view.Memory);

 			x = AddText(view, x, y, view.Settings.ValueColor, HotSpot.NoneId, value) + view.Font.Width;


Adds dump size output for AnalysisMemoryTester.

--- Python/Product/AnalysisMemoryTester/Program.cs
+++ Python/Product/AnalysisMemoryTester/Program.cs
@@ -115,13 +115,15 @@
             using (var factory = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version, "Test Factory", dbPath))
             using (var analyzer = PythonAnalyzer.CreateAsync(factory).WaitAndUnwrapExceptions()) {
                 var modules = new Dictionary<string, IPythonProjectEntry>();
+                var state = new State();

                 foreach (var tuple in SplitCommands(commands)) {
                     RunCommand(
                         tuple.Item1,
                         tuple.Item2,
                         analyzer,
-                        modules
+                        modules,
+                        state
                     );
                 }
             }
@@ -187,11 +189,16 @@
             }
         }

+        private class State {
+            public long LastDumpSize;
+        }
+
         private static void RunCommand(
             string cmd,
             string args,
             PythonAnalyzer analyzer,
-            Dictionary<string, IPythonProjectEntry> modules
+            Dictionary<string, IPythonProjectEntry> modules,
+            State state
         ) {
             switch (cmd.ToLower()) {
                 case "print":
@@ -259,8 +266,24 @@
                     break;
                 case "dump": {
                         var fullPath = Path.GetFullPath(args);
-                        WriteDump(Process.GetCurrentProcess(), fullPath, MiniDumpType.FullDump);
-                        Console.WriteLine("Dump written to {0}", fullPath);
+                        var length = WriteDump(Process.GetCurrentProcess(), fullPath, MiniDumpType.FullDump);
+                        Console.WriteLine(
+                            "Dump written to {0} at {1:F1}MB ({2} bytes)",
+                            fullPath,
+                            length / (1024.0 * 1024.0),
+                            length
+                        );
+                        if (state.LastDumpSize > 0 && state.LastDumpSize != length) {
+                            var delta = Math.Abs(length - state.LastDumpSize);
+                            var direction = (length > state.LastDumpSize) ? "larger" : "smaller";
+                            Console.WriteLine(
+                                "Dump is {0:F1}MB ({1} bytes) {2} than previous",
+                                delta / (1024.0 * 1024.0),
+                                delta,
+                                direction
+                            );
+                        }
+                        state.LastDumpSize = length;
                         break;
                     }
                 default:
@@ -328,7 +351,7 @@
         [return: MarshalAs(UnmanagedType.Bool)]
         static extern bool MiniDumpWriteDump(IntPtr hProcess, uint ProcessId, IntPtr hFile, MiniDumpType DumpType, IntPtr ExceptionParam, IntPtr UserStreamParam, IntPtr CallbackParam);

-        public static void WriteDump(Process proc, string dump, MiniDumpType type) {
+        public static long WriteDump(Process proc, string dump, MiniDumpType type) {
             Directory.CreateDirectory(Path.GetDirectoryName(dump));

             FileStream stream = null;
@@ -367,6 +390,7 @@
                 if (!MiniDumpWriteDump(proc.Handle, (uint)proc.Id, stream.SafeFileHandle.DangerousGetHandle(), type, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero)) {
                     throw new Win32Exception();
                 }
+                return stream.Length;
             }
         }


Updated coroutine helpers

Updated coroutine helpers

--- Source/RoaringFangs/Utility/Coroutines.cs
+++ Source/RoaringFangs/Utility/Coroutines.cs
@@ -23,6 +23,7 @@
 */

 using UnityEngine;
+using System;

 #if UNITY_EDITOR

@@ -69,5 +70,30 @@
             return target.StartCoroutine(work);
 #endif
         }
+
+        /// <summary>
+        /// Wraps each enumerator step of <paramref name="coroutine"/> in a try-catch statement.
+        /// If the enumerator throws an exception, the exception message is logged
+        /// as an error and the coroutine is aborted.
+        /// </summary>
+        /// <param name="coroutine">The coroutine enumerator to wrap.</param>
+        /// <returns>The wrapped coroutine.</returns>
+        public static IEnumerator GetSafeCoroutine(this IEnumerator coroutine)
+        {
+            for (;;)
+            {
+                try
+                {
+                    if (!coroutine.MoveNext() || coroutine.Current == null)
+                        break;
+                }
+                catch (Exception ex)
+                {
+                    Debug.LogError(ex);
+                    break;
+                }
+                yield return coroutine.Current;
+            }
+        }
     }
 }


Mirrored from local repository @ 06/21/2022 22:07

--- Source/Runtime/Properties/AssemblyInfo.cs
+++ Source/Runtime/Properties/AssemblyInfo.cs
@@ -28,5 +28,5 @@
 //      Build Number
 //      Revision
 //
-[assembly: AssemblyVersion("1.0.15.0")]
-[assembly: AssemblyFileVersion("1.0.15.0")]
+[assembly: AssemblyVersion("1.0.16.0")]
+[assembly: AssemblyFileVersion("1.0.16.0")]


Adding a test to confirm FileSystemResolver's ability to resolve directory

--- SquishIt.Tests/FileSystemResolverTests.cs
+++ SquishIt.Tests/FileSystemResolverTests.cs
@@ -58,5 +58,21 @@
                 Assert.AreEqual(values[key], resolvedFile[0], key);
             }
         }
+
+		[Test]
+		public void CanResolveDirectory()
+		{
+			string path = Guid.NewGuid().ToString();
+			var directory = Directory.CreateDirectory(path);
+			File.Create(Path.Combine(directory.FullName, "file1")).Close();
+			File.Create(Path.Combine(directory.FullName, "file2")).Close();
+
+			var result = new FileSystemResolver().TryResolve(path).ToList();
+			Assert.AreEqual (2, result.Count);
+			Assert.Contains (path + Path.DirectorySeparatorChar + "file1", result);
+			Assert.Contains (path + Path.DirectorySeparatorChar + "file2", result);
+
+			Directory.Delete(path, true);
+		}
     }
 }


Update ValuesOut.cs

Update ValuesOut.cs

--- RegistryPlugin.LastVisitedPidlMRU/ValuesOut.cs
+++ RegistryPlugin.LastVisitedPidlMRU/ValuesOut.cs
@@ -29,7 +29,7 @@
         public string BatchKeyPath { get; set; }
         public string BatchValueName { get; set; }
         public string BatchValueData1 => $"Exe: {Executable} Folder: {Executable} Absolute path: {AbsolutePath}";
-        public string BatchValueData2 => $"Opened: {OpenedOn?.ToUniversalTime():yyyy-MM-dd HH:mm:ss.fffffff})";
+        public string BatchValueData2 => $"Opened: {OpenedOn?.ToUniversalTime():yyyy-MM-dd HH:mm:ss.fffffff}";
         public string BatchValueData3 => $"MRU: {MruPosition} Details: {Details}";
     }
-}+}


Changed version

Changed version

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


Use PlayerControl renderscript list in script chain.

--- RenderScripts/Mpdn.ScriptChain.ConfigDialog.cs
+++ RenderScripts/Mpdn.ScriptChain.ConfigDialog.cs
@@ -16,13 +16,7 @@
             {
                 InitializeComponent();

-                var renderScripts =
-                    from t in Assembly.GetExecutingAssembly().GetTypes()
-                    let constructor = t.GetConstructor(Type.EmptyTypes)
-                    where t.IsClass
-                          && typeof (IRenderChainUi).IsAssignableFrom(t)
-                          && constructor != null
-                    select (IRenderChainUi) constructor.Invoke(new object[0]);
+                var renderScripts = PlayerControl.RenderScripts.Where(script => script is IRenderChainUi);

                 foreach (var script in renderScripts)
                 {


Fixes #402

Fixes #402

--- Runtime/MacroCompiler/Binder/Binder.Literal.cs
+++ Runtime/MacroCompiler/Binder/Binder.Literal.cs
@@ -214,6 +214,10 @@
                                 Int32.TryParse(args[1], out month) &&
                                 Int32.TryParse(args[2], out day))
                             {
+                                if (year == 0 || month == 0 || day == 0)
+                                {
+                                    return Constant.CreateDefault(Compilation.Get(NativeType.VODate));
+                                }
                                 if (Options.VODateConstants)
                                     return Constant.CreateVODate(year, month, day);
                                 else


update version

update version

--- CommonAssemblyInfo.cs
+++ CommonAssemblyInfo.cs
@@ -4,5 +4,5 @@
 [assembly: AssemblyProduct("PropertyChanged")]
 [assembly: AssemblyCompany("Simon Cropp and Contributors")]
 [assembly: AssemblyDescription("Fody add-in for injecting INotifyPropertyChanged code into properties.")]
-[assembly: AssemblyVersion("2.0.0")]
-[assembly: AssemblyFileVersion("2.0.0")]+[assembly: AssemblyVersion("2.0.1")]
+[assembly: AssemblyFileVersion("2.0.1")]


Remove unused field

Remove unused field

--- Compiler/BuildFile.cs
+++ Compiler/BuildFile.cs
@@ -201,7 +201,6 @@
 			}

 			Dictionary<string, BuildVarCanonicalized> varLookup = GenerateBuildVars(buildInput, desiredTarget, targetName);
-			Dictionary<string, string> aliases = new Dictionary<string, string>();

 			flattened.Sources = desiredTarget.SourcesNonNull.Union<SourceItem>(flattened.SourcesNonNull).ToArray();
 			flattened.Output = FileUtil.GetCanonicalizeUniversalPath(DoReplacement(targetName, desiredTarget.Output ?? flattened.Output));


switch between source types in GetEmotions

--- Scripts/Services/AlchemyAPI/AlchemyLanguage.cs
+++ Scripts/Services/AlchemyAPI/AlchemyLanguage.cs
@@ -480,12 +480,13 @@
             req.Forms = new Dictionary<string, RESTConnector.Form>();

             string service;
-            if(source.StartsWith("http"))
+            string normalizedSource = source.Trim().ToLower();
+            if(normalizedSource.StartsWith("http://") || normalizedSource.StartsWith("https://"))
             {
                 service = SERVICE_GET_EMOTION_URL;
                 req.Forms["url"] = new RESTConnector.Form(source);
             }
-            else if(source.EndsWith(".html"))
+            else if(Path.GetExtension(normalizedSource).EndsWith(".html"))
             {
                 service = SERVICE_GET_EMOTION_HTML;
                 string htmlData = default(string);


Update IMongoRepository.cs

Update IMongoRepository.cs

--- TIKSN.Core/Data/Mongo/IMongoRepository.cs
+++ TIKSN.Core/Data/Mongo/IMongoRepository.cs
@@ -4,7 +4,7 @@

 namespace TIKSN.Data.Mongo
 {
-    public interface IMongoRepository<TDocument, TIdentity> : IRepository<TDocument>, IQueryRepository<TDocument, TIdentity> where TDocument : IEntity<TIdentity> where TIdentity : IEquatable<TIdentity>
+    public interface IMongoRepository<TDocument, TIdentity> : IRepository<TDocument>, IQueryRepository<TDocument, TIdentity>, IStreamRepository<TDocument> where TDocument : IEntity<TIdentity> where TIdentity : IEquatable<TIdentity>
     {
         Task AddOrUpdateAsync(TDocument entity, CancellationToken cancellationToken);
     }


Fix  typo in RequestHandler (#187)

Fix  typo in RequestHandler (#187)

--- dropbox-sdk-dotnet/Dropbox.Api/DropboxRequestHandler.cs
+++ dropbox-sdk-dotnet/Dropbox.Api/DropboxRequestHandler.cs
@@ -154,7 +154,7 @@
         /// <param name="route">The route name.</param>
         /// <param name="auth">The auth type of the route.</param>
         /// <param name="requestEncoder">The request encoder.</param>
-        /// <param name="resposneDecoder">The response decoder.</param>
+        /// <param name="responseDecoder">The response decoder.</param>
         /// <param name="errorDecoder">The error decoder.</param>
         /// <returns>An asynchronous task for the response.</returns>
         /// <exception cref="ApiException{TError}">
@@ -166,7 +166,7 @@
             string route,
             string auth,
             IEncoder<TRequest> requestEncoder,
-            IDecoder<TResponse> resposneDecoder,
+            IDecoder<TResponse> responseDecoder,
             IDecoder<TError> errorDecoder)
         {
             var serializedArg = JsonWriter.Write(request, requestEncoder);
@@ -179,7 +179,7 @@
                     res.ObjectResult, errorDecoder, () => new ApiException<TError>(res.RequestId));
             }

-            return JsonReader.Read(res.ObjectResult, resposneDecoder);
+            return JsonReader.Read(res.ObjectResult, responseDecoder);
         }

         /// <summary>
@@ -194,7 +194,7 @@
         /// <param name="route">The route name.</param>
         /// <param name="auth">The auth type of the route.</param>
         /// <param name="requestEncoder">The request encoder.</param>
-        /// <param name="resposneDecoder">The response decoder.</param>
+        /// <param name="responseDecoder">The response decoder.</param>
         /// <param name="errorDecoder">The error decoder.</param>
         /// <returns>An asynchronous task for the response.</returns>
         /// <exception cref="ApiException{TError}">
@@ -207,7 +207,7 @@
             string route,
             string auth,
             IEncoder<TRequest> requestEncoder,
-            IDecoder<TResponse> resposneDecoder,
+            IDecoder<TResponse> responseDecoder,
             IDecoder<TError> errorDecoder)
         {
             var serializedArg = JsonWriter.Write(request, requestEncoder, true);
@@ -220,7 +220,7 @@
                     res.ObjectResult, errorDecoder, () => new ApiException<TError>(res.RequestId));
             }

-            return JsonReader.Read(res.ObjectResult, resposneDecoder);
+            return JsonReader.Read(res.ObjectResult, responseDecoder);
         }

         /// <summary>
@@ -234,7 +234,7 @@
         /// <param name="route">The route name.</param>
         /// <param name="auth">The auth type of the route.</param>
         /// <param name="requestEncoder">The request encoder.</param>
-        /// <param name="resposneDecoder">The response decoder.</param>
+        /// <param name="responseDecoder">The response decoder.</param>
         /// <param name="errorDecoder">The error decoder.</param>
         /// <returns>An asynchronous task for the response.</returns>
         /// <exception cref="ApiException{TError}">
@@ -246,7 +246,7 @@
             string route,
             string auth,
             IEncoder<TRequest> requestEncoder,
-            IDecoder<TResponse> resposneDecoder,
+            IDecoder<TResponse> responseDecoder,
             IDecoder<TError> errorDecoder)
         {
             var serializedArg = JsonWriter.Write(request, requestEncoder, true);
@@ -259,7 +259,7 @@
                     res.ObjectResult, errorDecoder, () => new ApiException<TError>(res.RequestId));
             }

-            var response = JsonReader.Read(res.ObjectResult, resposneDecoder);
+            var response = JsonReader.Read(res.ObjectResult, responseDecoder);
             return new DownloadResponse<TResponse>(response, res.HttpResponse);
         }


[Modify] Add it

[Modify] Add it

--- websocket-sharp/Net/HttpListener.cs
+++ websocket-sharp/Net/HttpListener.cs
@@ -465,6 +465,21 @@
         ares.Complete (ex);
     }

+    private void cleanupWaitQueue (Exception exception)
+    {
+      HttpListenerAsyncResult[] aress = null;
+      lock (_waitQueueSync) {
+        if (_waitQueue.Count == 0)
+          return;
+
+        aress = _waitQueue.ToArray ();
+        _waitQueue.Clear ();
+      }
+
+      foreach (var ares in aress)
+        ares.Complete (exception);
+    }
+
     private void close (bool force)
     {
       EndPointManager.RemoveListener (this);


[Modify] Remove it

[Modify] Remove it

--- websocket-sharp/Net/HttpListener.cs
+++ websocket-sharp/Net/HttpListener.cs
@@ -674,23 +674,6 @@
       }
     }

-    internal AuthenticationSchemes SelectAuthenticationScheme (
-      HttpListenerRequest request
-    )
-    {
-      var selector = _authSchemeSelector;
-
-      if (selector == null)
-        return _authSchemes;
-
-      try {
-        return selector (request);
-      }
-      catch {
-        return AuthenticationSchemes.None;
-      }
-    }
-
     internal void UnregisterContext (HttpListenerContext context)
     {
       lock (_contextRegistrySync)


[Modify] Replace it

[Modify] Replace it

--- websocket-sharp/Net/HttpListener.cs
+++ websocket-sharp/Net/HttpListener.cs
@@ -561,10 +561,8 @@

       _contextQueue.Clear ();

-      foreach (var ctx in ctxs) {
-        ctx.ErrorStatusCode = 503;
-        ctx.SendError ();
-      }
+      foreach (var ctx in ctxs)
+        ctx.SendError (503);
     }

     private void cleanupContextRegistry ()


Add subfolder for easier upload

Add subfolder for easier upload

--- WalletWasabi.Packager/Program.cs
+++ WalletWasabi.Packager/Program.cs
@@ -311,6 +311,9 @@
 			}

 			var deterministicFilenameTag = IsContinuousDelivery ? $"{DateTimeOffset.UtcNow:ddMMyyyy}" : VersionPrefix;
+			var deliveryPath = IsContinuousDelivery ? Path.Combine(BinDistDirectory, "cdelivery") : BinDistDirectory;
+
+			IoHelpers.EnsureDirectoryExists(deliveryPath);

 			foreach (string target in Targets)
 			{
@@ -465,7 +468,7 @@
 						continue; // In Windows build at this moment it does not matter though.
 					}

-					ZipFile.CreateFromDirectory(currentBinDistDirectory, Path.Combine(BinDistDirectory, $"Wasabi-{deterministicFilenameTag}-{target}.zip"));
+					ZipFile.CreateFromDirectory(currentBinDistDirectory, Path.Combine(deliveryPath, $"Wasabi-{deterministicFilenameTag}-{target}.zip"));

 					if (IsContinuousDelivery)
 					{
@@ -480,7 +483,7 @@
 						continue;
 					}

-					ZipFile.CreateFromDirectory(currentBinDistDirectory, Path.Combine(BinDistDirectory, $"Wasabi-{deterministicFilenameTag}-{target}.zip"));
+					ZipFile.CreateFromDirectory(currentBinDistDirectory, Path.Combine(deliveryPath, $"Wasabi-{deterministicFilenameTag}-{target}.zip"));

 					if (IsContinuousDelivery)
 					{
@@ -500,7 +503,7 @@
 						continue;
 					}

-					ZipFile.CreateFromDirectory(currentBinDistDirectory, Path.Combine(BinDistDirectory, $"Wasabi-{deterministicFilenameTag}-{target}.zip"));
+					ZipFile.CreateFromDirectory(currentBinDistDirectory, Path.Combine(deliveryPath, $"Wasabi-{deterministicFilenameTag}-{target}.zip"));

 					if (IsContinuousDelivery)
 					{


Update software description

Update software description

--- WalletWasabi.Packager/Program.cs
+++ WalletWasabi.Packager/Program.cs
@@ -679,7 +679,7 @@
 						$"License: Open Source (MIT)\n" +
 						$"Installed-Size: {installedSizeKb}\n" +
 						$"Description: open-source, non-custodial, privacy focused Bitcoin wallet\n" +
-						$"  Built-in Tor, CoinJoin and Coin Control features.\n";
+						$"  Built-in Tor, CoinJoin, PayJoin and Coin Control features.\n";

 					File.WriteAllText(controlFilePath, controlFileContent, Encoding.ASCII);


updates lexer test to use deterministic grammer

--- tests/Pliant.Tests.Unit/LexerTests.cs
+++ tests/Pliant.Tests.Unit/LexerTests.cs
@@ -23,14 +23,10 @@
                         .Rule("S", "L")
                         .Lambda())
                     .Production("W", r=>r
-                        .Rule(new WhitespaceTerminal(), "W`"))
-                    .Production("W`", r=>r
-                        .Rule(new WhitespaceTerminal(), "W`")
+                        .Rule(new WhitespaceTerminal(), "W")
                         .Lambda())
                     .Production("L", r=>r
-                        .Rule(new RangeTerminal('a', 'z'), "L`"))
-                    .Production("L`", r=>r
-                        .Rule(new RangeTerminal('a', 'z'), "L`")
+                        .Rule(new RangeTerminal('a', 'z'), "L")
                         .Lambda()))
                 .GetGrammar();


MailingClient.GetWebMailBody with title on untrusted images

--- Signum.Web.Extensions/Mailing/MailingClient.cs
+++ Signum.Web.Extensions/Mailing/MailingClient.cs
@@ -289,56 +289,72 @@

             var dic = attachments.Where(a => a.File.FullWebPath.HasText()).ToDictionary(a => a.ContentId, a => r.Content(a.File.FullWebPath));

-            var result = Regex.Replace(body, "src=\"(?<link>[^\"]*)\"", m =>
+            var result = Regex.Replace(body, @"<img [^>]*>", img =>
+            {
+                string prevSource = null;
+
+                var newImg = Regex.Replace(img.Value, "src=\"(?<link>[^\"]*)\"", src =>
+                {
+                    var value = src.Groups["link"].Value;
+
+                    if (!value.StartsWith("cid:"))
+                    {
+                        if (untrustedImage != null)
+                        {
+                            hasUntrustedInternal = true;
+                            prevSource = value;
+                            return "src=\"{0}\"".Formato(r.Content(untrustedImage));
+                        }
+
+                        return src.Value;
+
+                    }
+
+                    value = value.After("cid:");
+
+                    var link = dic.TryGetC(value);
+
+                    if (link == null)
+                        return src.Value;
+
+                    return "src=\"{0}\"".Formato(r.Content(link));
+                });
+
+                if (prevSource == null)
+                    return newImg;
+
+                var title = prevSource;
+
+                var alt = Regex.Match(img.Value, "alt=\"(?<alt>[^\"]*)\"");
+                if (alt.Success && alt.Groups["alt"].Value.HasText())
+                    title = alt.Groups["alt"].Value + "\r\n" + title;
+
+                return newImg.Insert("<img ".Length, "title=\"" + title + "\" ");
+            });
+
+            hasUntrusted = hasUntrustedInternal;
+
+            return result;
+        }
+
+        public static string SetWebMailBody(string body, IEnumerable<EmailAttachmentDN> attachments)
+        {
+            if (!attachments.Any())
+                return body;
+
+            var r = RouteHelper.New();
+
+            var dic = attachments.Where(a => a.File.FullWebPath.HasText()).ToDictionary(a => r.Content(a.File.FullWebPath), a => a.ContentId);
+
+            return Regex.Replace(body, "src=\"(?<link>[^\"]*)\"", m =>
             {
                 var value = m.Groups["link"].Value;
-
-                if (!value.StartsWith("cid:"))
-                {
-                    hasUntrustedInternal = true;
-
-                    if (untrustedImage != null)
-                    {
-                        return "src=\"{0}\"".Formato(r.Content(untrustedImage));
-                    }
-
-                    return m.Value;
-
-                }
-
-                value = value.After("cid:");

                 var link = dic.TryGetC(value);

                 if (link == null)
                     return m.Value;

-                return "src=\"{0}\"".Formato(r.Content(link));
-            });
-
-            hasUntrusted = hasUntrustedInternal;
-
-            return result;
-        }
-
-        public static string SetWebMailBody(string body, IEnumerable<EmailAttachmentDN> attachments)
-        {
-            if (!attachments.Any())
-                return body;
-
-            var r = RouteHelper.New();
-
-            var dic = attachments.Where(a => a.File.FullWebPath.HasText()).ToDictionary(a => r.Content(a.File.FullWebPath), a => a.ContentId);
-
-            return Regex.Replace(body, "src=\"(?<link>[^\"]*)\"", m =>
-            {
-                var value = m.Groups["link"].Value;
-
-                var link = dic.TryGetC(value);
-
-                if (link == null)
-                    return m.Value;
-
                 return "src=\"cid:{0}\"".Formato(link);
             });
         }


Part of #114

Part of #114

--- Snittlistan.Web/Areas/V2/V2AreaRegistration.cs
+++ Snittlistan.Web/Areas/V2/V2AreaRegistration.cs
@@ -68,6 +68,12 @@
                 "MatchResult/Register/{season}",
                 new { controller = "MatchResult", action = "Register" });

+            // view roster
+            context.MapRoute(
+                "ViewRoster",
+                "Roster/{season}/{turn}",
+                new { controller = "Roster", action = "View", turn = UrlParameter.Optional });
+
             // default route
             context.MapRoute(
                 "V2_default",


fix cast tick gap (#2780)

fix cast tick gap (#2780)

--- Source/ACE.Server/WorldObjects/Player_Magic.cs
+++ Source/ACE.Server/WorldObjects/Player_Magic.cs
@@ -1396,7 +1396,12 @@

                 var actionChain = new ActionChain();
                 actionChain.AddDelayForOneTick();
-                actionChain.AddAction(this, () => DoCastSpell(MagicState));
+                actionChain.AddAction(this, () =>
+                {
+                    if (!MagicState.IsCasting) return;
+
+                    DoCastSpell(MagicState);
+                });
                 actionChain.EnqueueChain();
             }
         }
@@ -1421,6 +1426,8 @@
             actionChain.AddDelayForOneTick();
             actionChain.AddAction(this, () =>
             {
+                if (!MagicState.IsCasting) return;
+
                 if (!MagicState.CastMotionDone)
                     DoWindup(MagicState.WindupParams);
                 else


WPF: Dialog resizing/minimizable/maximizable flags are now handled properly and have correct defaults

--- Source/Eto.Platform.Wpf/Forms/DialogHandler.cs
+++ Source/Eto.Platform.Wpf/Forms/DialogHandler.cs
@@ -21,20 +21,13 @@
 			base.Initialize ();
 			Control.ShowInTaskbar = false;
 			Resizable = false;
-		}
-
-		public override bool Resizable
-		{
-			get { return Control.ResizeMode == sw.ResizeMode.CanResize || Control.ResizeMode == sw.ResizeMode.CanResizeWithGrip; }
-			set
-			{
-				Control.ResizeMode = value ? sw.ResizeMode.CanResizeWithGrip : sw.ResizeMode.NoResize;
-			}
+			Minimizable = false;
+			Maximizable = false;
 		}

 		public DialogDisplayMode DisplayMode { get; set; }

-		public DialogResult ShowDialog (Control parent)
+		public virtual DialogResult ShowDialog (Control parent)
 		{
 			if (parent != null) {
 				var parentWindow = parent.ParentWindow;


Simplified test

Simplified test

Different mono version can give a different amount of errors

--- Source/ReferenceTests/Commands/AddTypeTests.cs
+++ Source/ReferenceTests/Commands/AddTypeTests.cs
@@ -171,7 +171,7 @@
                 ReferenceHost.RawExecute("add-type -name Test -memberdefinition 'public WriteLine() ---'", false);
             });
            ErrorRecord[] errorRecords = ReferenceHost.GetLastRawErrorRecords();
-           Assert.AreEqual(2, errorRecords.Length, "Should be 2 compiler errors");
+           Assert.That(errorRecords, Is.Not.Empty);
         }

         [Test]


Added ctors.

Added ctors.

--- WmcSoft.Business/GatewayError.cs
+++ WmcSoft.Business/GatewayError.cs
@@ -37,9 +37,28 @@
     public class GatewayError
     {
         /// <summary>
+        /// Creates an instance of <see cref="GatewayError"/> without code or description.
+        /// </summary>
+        public GatewayError()
+        {
+        }
+
+        /// <summary>
+        /// Creates an intance of <see cref="GatewayError"/> with the given <paramref name="code"/> and <paramref name="description"/>.
+        /// </summary>
+        /// <param name="code">The code of the error.</param>
+        /// <param name="description">The description of the error.</param>
+        public GatewayError(string code, string description = null)
+        {
+            Code = code;
+            Description = description;
+        }
+
+        /// <summary>
         /// The code for this error.
         /// </summary>
         public string Code { get; set; }
+
         /// <summary>
         /// The description for this error.
         /// </summary>


If the payload has not been read, that means it has not changed. So there's no need to write it when the address has not changed.

--- Trie/OptimizedTrie.cs
+++ Trie/OptimizedTrie.cs
@@ -228,6 +228,7 @@
                 if (haschildren)
                 {
                     var payloadLength = buffer.ReadUshort(ref address);
+                    result.PayloadAddress = address;
                     result.Payload = new Bufferpart(buffer, address, payloadLength).GetBytes();
                     address += payloadLength;
                 }
@@ -276,13 +277,23 @@
                 if (HasChildren)
                     storage.WriteUshort(address, (ushort)PayloadSize, out address);
                 if (Payload != null)
+                {
+                    if( PayloadAddress != address)
                     storage.WriteBytes(address, Payload, out address);
+                    else
+                    {
+                        // no need to write
+                        address += PayloadSize;
+                    }
+                }
                 else
                     foreach (var child in Children)
                     {
                         child.Write(storage, ref address);
                     }
             }
+
+            public int PayloadAddress { get; set; }

             public TrieItem FindParentOf(Bufferpart key, out Bufferpart keyLeft)
             {


Fixed attachment upload

Fixed attachment upload

--- Visma.net/lib/DAta/CustomerInvoiceData.cs
+++ Visma.net/lib/DAta/CustomerInvoiceData.cs
@@ -55,10 +55,8 @@

 	    public async Task<string> AddAttachmentToInvoice(string invoiceNumber, string content, string fileName)
 	    {
-	        using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
-	        {
-	            return await AddAttachmentToInvoice(invoiceNumber, memoryStream, fileName);
-	        }
+	        var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(content));
+	        return await AddAttachmentToInvoice(invoiceNumber, memoryStream, fileName);
 	    }
         public async Task<string> AddAttachmentToInvoice(string invoiceNumber, Stream stream, string fileName)
 	    {


Junk script! Go away!

Junk script! Go away!

--- ViveGrip/Scripts/ViveGrip_Interactable.cs
+++ ViveGrip/Scripts/ViveGrip_Interactable.cs
@@ -1,15 +0,0 @@
-using UnityEngine;
-using System.Collections;
-
-public class ViveGrip_Interactable : MonoBehaviour {
-
-	// Use this for initialization
-	void Start () {
-
-	}
-
-	// Update is called once per frame
-	void Update () {
-
-	}
-}


Improve BitcoinMock

Improve BitcoinMock

--- WalletWasabi.Tests/Helpers/BitcoinMock.cs
+++ WalletWasabi.Tests/Helpers/BitcoinMock.cs
@@ -27,15 +27,12 @@
 		{
 			var km = RandomKeyManager();
 			var tx = Transaction.Create(Network.Main);
-			var ownInputCount = ownInputs.Count();
-			var ownOutputCount = ownOutputs.Count();
-			var walletInputs = new HashSet<SmartCoin>(ownInputCount);
-			var walletOutputs = new HashSet<SmartCoin>(ownOutputCount);
+			var walletInputs = new HashSet<SmartCoin>();
+			var walletOutputs = new HashSet<SmartCoin>();

 			for (int i = 0; i < othersInputCount; i++)
 			{
-				var sc = RandomSmartCoin(RandomHdPubKey(km), 1m);
-				tx.Inputs.Add(sc.OutPoint);
+				tx.Inputs.Add(RandomOutPoint());
 			}
 			var idx = (uint)othersInputCount - 1;
 			foreach (var txo in ownInputs)
@@ -93,6 +90,17 @@
 			return new SmartCoin(stx, index, pubKey);
 		}

+		public static OutPoint RandomOutPoint()
+			=> new OutPoint(RandomUint256(), (uint)CryptoHelpers.RandomInt(0, 100));
+
+		public static uint256 RandomUint256()
+		{
+			var rand = new UnsecureRandom();
+			var bytes = new byte[32];
+			rand.GetBytes(bytes);
+			return new uint256(bytes);
+		}
+
 		public static TransactionFactory CreateTransactionFactory(
 		   IEnumerable<(string Label, int KeyIndex, decimal Amount, bool Confirmed, int AnonymitySet)> coins,
 		   bool allowUnconfirmed = true,


Rewrite Login view markup

Rewrite Login view markup

--- WebApplication/Views/Account/Login.cshtml
+++ WebApplication/Views/Account/Login.cshtml
@@ -12,37 +12,39 @@

-            <form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"] method="post" class="form-horizontal" role="form">
-
Use a local account to log in.

+            <form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal" role="form">
+
Use a local account to log in.

-

-
-

-                        <input asp-for="Email" class="form-control" />
-
-

-

-

-
-

-                        <input asp-for="Password" class="form-control" />
-
-

-

-

-

-

-                            <input asp-for="RememberMe" />
-
-

-

-

-

-

-                        <button type="submit" class="btn btn-default">Log in</button>
-

-

+                <fieldset>
+

+
+

+                          <input asp-for="Email" class="form-control" />
+
+

+

+

+
+

+                          <input asp-for="Password" class="form-control" />
+
+

+

+

+

+

+                              <input asp-for="RememberMe" />
+
+

+

+

+

+

+                          <button type="submit" class="btn btn-default">Log in</button>
+

+

+                </fieldset>

                     Register as a new user?


removed unused using

removed unused using

--- RoboterApp/MainWindowViewModel.cs
+++ RoboterApp/MainWindowViewModel.cs
@@ -1,7 +1,6 @@
 using System;
 using System.Collections.ObjectModel;
 using System.ComponentModel;
-using System.Net;
 using System.Runtime.CompilerServices;
 using System.Windows.Input;
 using JetBrains.Annotations;


Added empty test cases for Likeness Proxy property.

--- Src/SemanticComparisonUnitTest/LikenessTest.cs
+++ Src/SemanticComparisonUnitTest/LikenessTest.cs
@@ -820,6 +820,96 @@
             // Teardown
         }

+        [Fact]
+        public void ProxyIsNotNull()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyIsCorrect()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyInstanceIsDifferentThanSourceInstance()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyDoesNotEqualNullObject()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyDoesNotEqualNullSource()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyEqualsSemanticallySameObject()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyEqualsSemanticallySameAnonymousObject()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ProxyEqualsItSelf()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void GetHashCodeReturnsHashCodeOfProxiedObject()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
+        [Fact]
+        public void ToStringReturnsToStringOfProxiedObject()
+        {
+            // Fixture setup
+            // Exercise system
+            // Verify outcome
+            // Teardown
+        }
+
         private static void CompareLikenessToObject<TSource, TDestination>(TSource likenObject, TDestination comparee, bool expectedResult)
         {
             // Fixture setup


Fix erroneous assertion when loading game

--- WorldModel/WorldModel/Scripts/IfScript.cs
+++ WorldModel/WorldModel/Scripts/IfScript.cs
@@ -164,10 +164,10 @@

         public void SetElse(IScript elseScript)
         {
-            System.Diagnostics.Debug.Assert(elseScript == null || !m_hasElse, "UndoSetElse assumes that we only ever set the Else script once");
-
             if (base.UndoLog != null)
             {
+                System.Diagnostics.Debug.Assert(elseScript == null || !m_hasElse, "UndoSetElse assumes that we only ever set the Else script once");
+
                 base.UndoLog.StartTransaction("Add Else script");
                 base.UndoLog.AddUndoAction(new UndoSetElse(this, m_elseScript, elseScript, m_hasElse, true));
             }


[WIN-2414] Paste of files only pastes one file

--- Xwt.XamMac/Xwt.Mac/MacClipboardBackend.cs
+++ Xwt.XamMac/Xwt.Mac/MacClipboardBackend.cs
@@ -137,25 +137,21 @@
 			return NSPasteboard.GeneralPasteboard.Types.Contains (type.ToUTI ());
 		}

-
 		public override object GetData (TransferDataType type)
 		{
+
 			if (type == TransferDataType.Uri) {
-				NSUrl url = null;
-				try {
-					// could be null, could be malformed URI
-					// Uri.Parse and NSUrl really like to throw exceptions for parse errors :-( instead of just returning null
-					url = NSUrl.FromPasteboard(NSPasteboard.GeneralPasteboard);
-				} catch (Exception ex) {
-					Console.Error.WriteLine("Xwt/TheBrainMac/MacClipboardBackend.GetData: error creating URL from clipboard:\n", ex.Message);
-					return null;
-				}
-				if(url != null && url.IsFileUrl) {
-					return new Uri(url.Path);
-				} else if (url != null) {
-					return (Uri)url;
-				}
-				return null;
+				NSPasteboard pasteBoard = NSPasteboard.GeneralPasteboard;
+				NSArray nsArray = (NSArray)pasteBoard.GetPropertyListForType(NSPasteboard.NSFilenamesType);
+				NSString[] pathArray = NSArray.FromArray<NSString>(nsArray);
+				string[] uriArray = new string[pathArray.Length];
+				for(int i = 0; i < pathArray.Length; i++) {
+					Uri fileUrl = new Uri(pathArray[i].ToString());
+					if(fileUrl != null && fileUrl.IsFile) {
+						uriArray[i] = pathArray[i].ToString();
+					}
+				}
+				return uriArray;
 			}

 			if(type == TransferDataType.Image) {


removed unnecessary invokes and switched to setters

--- TCC.Core/ViewModels/SettingsWindowViewModel.cs
+++ TCC.Core/ViewModels/SettingsWindowViewModel.cs
@@ -28,13 +28,13 @@
                 isCooldownWindowVisible = value;
                 if (isCooldownWindowVisible)
                 {
-                    WindowManager.CooldownWindow.Dispatcher.Invoke(() => WindowManager.CooldownWindow.Visibility = Visibility.Visible);
+                    WindowManager.CooldownWindow.SetVisibility(Visibility.Visible);
                     SettingsManager.CooldownWindowSettings.Visibility = Visibility.Visible;

                 }
                 else
                 {
-                    WindowManager.CooldownWindow.Dispatcher.Invoke(() => WindowManager.CooldownWindow.Visibility = Visibility.Hidden);
+                    WindowManager.CooldownWindow.SetVisibility(Visibility.Hidden);
                     SettingsManager.CooldownWindowSettings.Visibility = Visibility.Hidden; ;
                 }

@@ -63,12 +63,12 @@
                 isBuffWindowVisible = value;
                 if (isBuffWindowVisible)
                 {
-                    WindowManager.BuffBar.Dispatcher.Invoke(() => WindowManager.BuffBar.Visibility = Visibility.Visible);
+                    WindowManager.BuffBar.SetVisibility(Visibility.Visible);
                     SettingsManager.BuffBarWindowSettings.Visibility = Visibility.Visible;
                 }
                 else
                 {
-                    WindowManager.BuffBar.Dispatcher.Invoke(() => WindowManager.BuffBar.Visibility = Visibility.Hidden);
+                    WindowManager.BuffBar.SetVisibility(Visibility.Hidden);
                     SettingsManager.BuffBarWindowSettings.Visibility = Visibility.Hidden;
                 }
                 RaisePropertyChanged("IsBuffWindowVisible");
@@ -98,12 +98,12 @@

                 if (isBossWindowVisible)
                 {
-                    WindowManager.BossGauge.Dispatcher.Invoke(() => WindowManager.BossGauge.Visibility = Visibility.Visible);
+                    WindowManager.BossGauge.SetVisibility(Visibility.Visible);
                     SettingsManager.BossGaugeWindowSettings.Visibility = Visibility.Visible;
                 }
                 else
                 {
-                    WindowManager.BossGauge.Dispatcher.Invoke(() => WindowManager.BossGauge.Visibility = Visibility.Hidden);
+                    WindowManager.BossGauge.SetVisibility(Visibility.Hidden);
                     SettingsManager.BossGaugeWindowSettings.Visibility = Visibility.Hidden;
                 }

@@ -132,12 +132,12 @@
                 isCharacterWindowVisible = value;
                 if (isCharacterWindowVisible)
                 {
-                    WindowManager.CharacterWindow.Dispatcher.Invoke(() => WindowManager.CharacterWindow.Visibility = Visibility.Visible);
+                    WindowManager.CharacterWindow.SetVisibility(Visibility.Visible);
                     SettingsManager.CharacterWindowSettings.Visibility = Visibility.Visible;
                 }
                 else
                 {
-                    WindowManager.CharacterWindow.Dispatcher.Invoke(() => WindowManager.CharacterWindow.Visibility = Visibility.Hidden);
+                    WindowManager.CharacterWindow.SetVisibility(Visibility.Hidden);
                     SettingsManager.CharacterWindowSettings.Visibility = Visibility.Hidden;
                 }

@@ -165,12 +165,12 @@
                 isGroupWindowVisible = value;
                 if (isGroupWindowVisible)
                 {
-                    WindowManager.GroupWindow.Dispatcher.Invoke(() => WindowManager.GroupWindow.Visibility = Visibility.Visible);
+                    WindowManager.GroupWindow.SetVisibility(Visibility.Visible);
                     SettingsManager.GroupWindowSettings.Visibility = Visibility.Visible;
                 }
                 else
                 {
-                    WindowManager.GroupWindow.Dispatcher.Invoke(() => WindowManager.GroupWindow.Visibility = Visibility.Hidden);
+                    WindowManager.GroupWindow.SetVisibility(Visibility.Hidden);
                     SettingsManager.GroupWindowSettings.Visibility = Visibility.Hidden;
                 }

@@ -198,12 +198,12 @@
                 isClassWindowVisible = value;
                 if (isClassWindowVisible)
                 {
-                    WindowManager.ClassWindow.Dispatcher.Invoke(() => WindowManager.ClassWindow.Visibility = Visibility.Visible);
+                    WindowManager.ClassWindow.SetVisibility(Visibility.Visible);
                     SettingsManager.ClassWindowSettings.Visibility = Visibility.Visible;
                 }
                 else
                 {
-                    WindowManager.ClassWindow.Dispatcher.Invoke(() => WindowManager.ClassWindow.Visibility = Visibility.Hidden);
+                    WindowManager.ClassWindow.SetVisibility(Visibility.Hidden);
                     SettingsManager.ClassWindowSettings.Visibility = Visibility.Hidden;
                 }

@@ -219,7 +219,7 @@
             {
                 if (SettingsManager.CooldownWindowSettings.ClickThru == value) return;
                 SettingsManager.CooldownWindowSettings.ClickThru = value;
-                WindowManager.CooldownWindow.Dispatcher.Invoke(() => WindowManager.CooldownWindow.SetClickThru(SettingsManager.CooldownWindowSettings.ClickThru));
+                WindowManager.CooldownWindow.SetClickThru(SettingsManager.CooldownWindowSettings.ClickThru);
                 RaisePropertyChanged("IsCooldownWindowTransparent");
             }
         }
@@ -230,7 +230,7 @@
             {
                 if (SettingsManager.CharacterWindowSettings.ClickThru == value) return;
                 SettingsManager.CharacterWindowSettings.ClickThru = value;
-                WindowManager.CharacterWindow.Dispatcher.Invoke(() => WindowManager.CharacterWindow.SetClickThru(SettingsManager.CharacterWindowSettings.ClickThru));
+                WindowManager.CharacterWindow.SetClickThru(SettingsManager.CharacterWindowSettings.ClickThru);
                 RaisePropertyChanged("IsCharacterWindowTransparent");
             }
         }
@@ -241,8 +241,7 @@
             {
                 if (SettingsManager.BuffBarWindowSettings.ClickThru == value) return;
                 SettingsManager.BuffBarWindowSettings.ClickThru = value;
-                WindowManager.BuffBar.Dispatcher.Invoke(() =>
-                WindowManager.BuffBar.SetClickThru(SettingsManager.BuffBarWindowSettings.ClickThru));
+                WindowManager.BuffBar.SetClickThru(SettingsManager.BuffBarWindowSettings.ClickThru);
                 RaisePropertyChanged("IsBuffWindowTransparent");
             }
         }
@@ -253,7 +252,7 @@
             {
                 if (SettingsManager.BossGaugeWindowSettings.ClickThru == value) return;
                 SettingsManager.BossGaugeWindowSettings.ClickThru = value;
-                WindowManager.BossGauge.Dispatcher.Invoke(() => WindowManager.BossGauge.SetClickThru(SettingsManager.BossGaugeWindowSettings.ClickThru));
+                WindowManager.BossGauge.SetClickThru(SettingsManager.BossGaugeWindowSettings.ClickThru);
                 RaisePropertyChanged("IsBossWindowTransparent");
             }
         }
@@ -264,7 +263,7 @@
             {
                 if (SettingsManager.GroupWindowSettings.ClickThru == value) return;
                 SettingsManager.GroupWindowSettings.ClickThru = value;
-                WindowManager.GroupWindow.Dispatcher.Invoke(() => WindowManager.GroupWindow.SetClickThru(SettingsManager.GroupWindowSettings.ClickThru));
+                WindowManager.GroupWindow.SetClickThru(SettingsManager.GroupWindowSettings.ClickThru);
                 RaisePropertyChanged("IsGroupWindowTransparent");
             }
         }
@@ -275,7 +274,7 @@
             {
                 if (SettingsManager.ClassWindowSettings.ClickThru == value) return;
                 SettingsManager.ClassWindowSettings.ClickThru = value;
-                WindowManager.ClassWindow.Dispatcher.Invoke(() => WindowManager.ClassWindow.SetClickThru(SettingsManager.ClassWindowSettings.ClickThru));
+                WindowManager.ClassWindow.SetClickThru(SettingsManager.ClassWindowSettings.ClickThru);
                 RaisePropertyChanged("IsClassWindowTransparent");
             }
         }


Add comments

Add comments

--- Tests/Cosmos.TestRunner.Core/Engine.Helpers.cs
+++ Tests/Cosmos.TestRunner.Core/Engine.Helpers.cs
@@ -265,13 +265,14 @@
         private void RunNasm(string inputFile, string outputFile, bool isElf)
         {
             bool xUsingUserkit = false;
-            string xYasmPath = Path.Combine(FindCosmosRoot(), "Tools", "Nasm");
-            if (!Directory.Exists(xYasmPath))
+            //Path to nasm starter
+            string xNasmPath = Path.Combine(FindCosmosRoot(), "Tools", "Nasm");
+            if (!Directory.Exists(xNasmPath))
             {
                 xUsingUserkit = true;
-                xYasmPath = Path.Combine(GetCosmosUserkitFolder(), "Build", "Nasm");
-            }
-            if (!Directory.Exists(xYasmPath))
+                xNasmPath = Path.Combine(GetCosmosUserkitFolder(), "Build", "Nasm");
+            }
+            if (!Directory.Exists(xNasmPath))
             {
                 throw new DirectoryNotFoundException("NASM path not found.");
             }
@@ -286,13 +287,13 @@

             if (xUsingUserkit)
             {
-                RunProcess("NASM.exe", xYasmPath, xArgs);
+                RunProcess("NASM.exe", xNasmPath, xArgs);
             }
             else
             {
                 xArgs.Insert(0, "run");
                 xArgs.Insert(1, " -- ");
-                RunProcess("dotnet", xYasmPath, xArgs);
+                RunProcess("dotnet", xNasmPath, xArgs);
             }
         }


modified:   Dragon/Source/Stmt.cs

modified:   Dragon/Source/Stmt.cs

--- Dragon/Source/Stmt.cs
+++ Dragon/Source/Stmt.cs
@@ -123,7 +123,7 @@
         {
             this.After = after;
             int label = this.NewLable();
-            this.Gen(beginning, label);
+            this.Stmt.Gen(beginning, label);
             this.EmitLabel(label);
             this.Expr.Jumping(beginning, 0);
         }


Update MainActivity.cs

Update MainActivity.cs

--- Droid/MainActivity.cs
+++ Droid/MainActivity.cs
@@ -114,6 +114,7 @@
             ParserFunction.RegisterFunction("AddWidgetData",      new AddWidgetDataFunction());
             ParserFunction.RegisterFunction("AddWidgetImages",    new AddWidgetImagesFunction());
             ParserFunction.RegisterFunction("AddBorder",          new AddBorderFunction());
+            ParserFunction.RegisterFunction("AutoScale",          new AutoScaleFunction());
             ParserFunction.RegisterFunction("AddAction",          new AddActionFunction());
             ParserFunction.RegisterFunction("GetLocation",        new GetLocationFunction());
             ParserFunction.RegisterFunction("ShowView",           new ShowHideFunction(true));
@@ -135,20 +136,20 @@
             ParserFunction.RegisterFunction("DisplayHeight",      new GadgetSizeFunction(false));
             ParserFunction.RegisterFunction("CallNative",         new InvokeNativeFunction());
 	        //ParserFunction.RegisterFunction("SetOptions", new SetOptionsFunction());
-	        string script = "";
-	        AssetManager assets = TheView.Assets;
-	        using (StreamReader sr = new StreamReader(assets.Open("script.cscs"))) {
-	            script = sr.ReadToEnd();
-	        }
-
-	        Variable result = null;
-	        try {
-	            result = Interpreter.Instance.Process(script);
-	        }
-	        catch (Exception exc) {
-	            Console.WriteLine("Exception: " + exc.Message);
-	            ParserFunction.InvalidateStacksAfterLevel(0);
-	        }
+            string script = "";
+            AssetManager assets = TheView.Assets;
+            using (StreamReader sr = new StreamReader(assets.Open("script.cscs"))) {
+                script = sr.ReadToEnd();
+            }
+
+            Variable result = null;
+            try {
+                result = Interpreter.Instance.Process(script);
+            }
+            catch (Exception exc) {
+                Console.WriteLine("Exception: " + exc.Message);
+                ParserFunction.InvalidateStacksAfterLevel(0);
+            }
 	    }
         public static void AddView(View view, ViewGroup parent)
         {


restored code erased by mistake in 1da9c43dce25f0ad034cb50045b9e5733305b467 that broke singleton pattern;

--- ForwardingDecision.cs
+++ ForwardingDecision.cs
@@ -35,6 +35,7 @@
     /// </summary>
     public sealed class Drop : ForwardingDecision {
       // We only need to keep a single instance of Drop, so we use a singleton pattern.
+      private Drop () {}
       public static Drop Instance { get; } = new Drop();
     }


Buried some dead code.

Buried some dead code.

--- Framework/Backstab.cs
+++ Framework/Backstab.cs
@@ -115,7 +115,6 @@
 	[ReadOnly] public int recievedSize;
 	[ReadOnly] public NetworkError recError;

-	private IPAddress broadcastAddress = IPAddress.Parse("224.0.0.224");
 	public int broadcastPort = 8889;

 	private UdpClient broadcastClient;
@@ -142,7 +141,6 @@
 			//NetworkTransport.StartSendMulticast(localSocketId, broadcastPort, broadcastKey, broadcastVersion, broadcastSubVersion, m, packetSize, 1000, out error);

 			if (error != (byte)NetworkError.Ok) Debug.LogError("Failed to start broadcast discovery.");
-			//StartBroadcast();

 			foreach (NetScript inst in NetScript.Instances) inst.OnBackstabStartServer();
 		} else {
@@ -268,37 +266,6 @@
 		inst.RecieveRpc(rpc);
 	}

-	//Broadcast Discovery
-
-	public void StartBroadcast () {
-		broadcastClient = new UdpClient();
-		broadcastClient.JoinMulticastGroup(broadcastAddress);
-		remoteEnd = new IPEndPoint(broadcastAddress, broadcastPort);
-		InvokeRepeating("Broadcast", 0, 1);
-	}
-
-	void Broadcast () {
-		byte[] buffer = Serialize(broadcastMessage);
-		broadcastClient.Send(buffer, buffer.Length, remoteEnd);
-	}
-
-	void StopBroadcast () {
-		CancelInvoke("Broadcast");
-	}
-
-	private void StartListeningForBroadcast () {
-		remoteEnd = new IPEndPoint(IPAddress.Any, broadcastPort);
-		broadcastClient = new UdpClient(remoteEnd);
-		broadcastClient.JoinMulticastGroup(broadcastAddress);
-		broadcastClient.BeginReceive(new AsyncCallback(GotBroadcastCallback), null);
-	}
-
-	void GotBroadcastCallback (IAsyncResult ar) {
-		string recMessage = Deserialize(broadcastClient.EndReceive(ar, ref remoteEnd)).ToString();
-		string recServerIp = remoteEnd.Address.ToString();
-		TryAddBroadcaster(recServerIp, broadcastPort, recMessage);
-	}
-
 	//Private functions

 	private ConnectionConfig GetConnectionConfig () {


Just some formatting

Just some formatting

--- hibernate/Program.cs
+++ hibernate/Program.cs
@@ -2,11 +2,11 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
-using System.Threading; 	// Thread
+using System.Threading;           // Thread
 using System.Threading.Tasks;
-//using System.Diagnostics;   // Process
-using System.Windows.Forms; // Application
-using Microsoft.Win32; 		// Registry
+using System.Diagnostics;         // Process
+using System.Windows.Forms;       // Application
+using Microsoft.Win32;            // Registry

 namespace hibernate
 {
@@ -87,4 +87,4 @@
             return true;
         }
     }
-}
+}


Fix SavedCameras being null

Fix SavedCameras being null

--- GUI/Utils/Settings.cs
+++ GUI/Utils/Settings.cs
@@ -39,6 +39,11 @@
             }

             BackgroundColor = ColorTranslator.FromHtml(Config.BackgroundColor);
+
+            if (Config.SavedCameras == null)
+            {
+                Config.SavedCameras = new Dictionary<string, float[]>();
+            }
         }

         public static void Save()


[TIMOB-16711] Fixed url and base64 decoding in the xhrproxy.

--- mobileweb/templates/packages/wp8/{{ProjectName}}/XHRProxy.cs
+++ mobileweb/templates/packages/wp8/{{ProjectName}}/XHRProxy.cs
@@ -145,7 +145,8 @@
 									return;
 								}

-								string decodedUrl = url.Substring(q + urlPrefix.Length);
+								string encodedUrl = url.Substring(q + urlPrefix.Length);
+								string decodedUrl = HttpUtility.UrlDecode(encodedUrl).Replace(' ', '+');
 								byte[] data = Convert.FromBase64String(decodedUrl);
 								url = Encoding.UTF8.GetString(data, 0, data.Length);
 								if (url.IndexOf("http://") == 0 || url.IndexOf("https://") == 0) {


Fix navigator.getUserMedia webkit(TypeError: Illegal invocation) + moz(typo)

--- Web/Html/Navigator.cs
+++ Web/Html/Navigator.cs
@@ -3,10 +3,10 @@

 namespace System.Html {
 	public partial class Navigator {
-		[InlineCode("(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozUserMedia || navigator.msGetUserMedia)({params}, {onsuccess})")]
+		[InlineCode("(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia).call(navigator, {params}, {onsuccess})")]
 		public static void GetUserMedia(MediaStreamOptions @params, Action<LocalMediaStream> onsuccess) {}

-		[InlineCode("(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozUserMedia || navigator.msGetUserMedia)({params}, {onsuccess}, {onerror})")]
+		[InlineCode("(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia).call(navigator, {params}, {onsuccess}, {onerror})")]
 		public static void GetUserMedia(MediaStreamOptions @params, Action<LocalMediaStream> onsuccess, Action<string> onerror) {}
 	}
 }


Detect misuses of the OwnershipTransferUTF8Marshaler.

--- ksp_plugin_adapter/utf8_marshaler.cs
+++ ksp_plugin_adapter/utf8_marshaler.cs
@@ -8,6 +8,52 @@

 // A marshaler that knows how to encode/decode UTF-8 strings.
 internal abstract class UTF8Marshaler : MonoMarshaler {
+  public object MarshalNativeToManagedImplementation(IntPtr native_data) {
+    int size;
+    for (size = 0; Marshal.ReadByte(native_data, size) != 0; ++size) { }
+    byte[] bytes = new byte[size];
+    Marshal.Copy(native_data, bytes, 0, size);
+    var result = utf8_.GetString(bytes, 0, size);
+    return result;
+  }
+
+  protected static readonly Encoding utf8_ = new UTF8Encoding(
+      encoderShouldEmitUTF8Identifier : false,
+      throwOnInvalidBytes             : true);
+}
+
+// A marshaler for UTF-8 strings whose ownership is taken from C++.  Useful for
+// out parameters and returned values.
+internal class OwnershipTransferUTF8Marshaler : UTF8Marshaler {
+  public static ICustomMarshaler GetInstance(string s) {
+    return instance_;
+  }
+
+  public override void CleanUpNativeDataImplementation(IntPtr native_data) {
+    throw Log.Fatal("use |MarshalAs(UnmanagedType.LPWStr)| for in parameters");
+  }
+
+  public override IntPtr MarshalManagedToNativeImplementation(
+      object managed_object) {
+    throw Log.Fatal("use |MarshalAs(UnmanagedType.LPWStr)| for in parameters");
+  }
+
+  public override object MarshalNativeToManaged(IntPtr native_data) {
+    var result = MarshalNativeToManagedImplementation(native_data);
+    Interface.DeleteString(ref native_data);
+    return result;
+  }
+
+  private static readonly OwnershipTransferUTF8Marshaler instance_ =
+      new OwnershipTransferUTF8Marshaler();
+}
+
+// A marshaler for UTF-8 strings whose ownership is not taken from C++.
+internal class NoOwnershipTransferUTF8Marshaler : UTF8Marshaler {
+  public static ICustomMarshaler GetInstance(string s) {
+    return instance_;
+  }
+
   public override void CleanUpNativeDataImplementation(IntPtr native_data) {
     Marshal.FreeHGlobal(native_data);
   }
@@ -29,43 +75,6 @@
     return buffer;
   }

-  public  object MarshalNativeToManagedImplementation(IntPtr native_data) {
-    int size;
-    for (size = 0; Marshal.ReadByte(native_data, size) != 0; ++size) { }
-    byte[] bytes = new byte[size];
-    Marshal.Copy(native_data, bytes, 0, size);
-    var result = utf8_.GetString(bytes, 0, size);
-    return result;
-  }
-
-  protected static readonly Encoding utf8_ = new UTF8Encoding(
-      encoderShouldEmitUTF8Identifier : false,
-      throwOnInvalidBytes             : true);
-}
-
-// A marshaler for UTF-8 strings whose ownership is taken from C++.  Useful for
-// out parameters and returned values.
-internal class OwnershipTransferUTF8Marshaler : UTF8Marshaler {
-  public static ICustomMarshaler GetInstance(string s) {
-    return instance_;
-  }
-
-  public override object MarshalNativeToManaged(IntPtr native_data) {
-    var result = MarshalNativeToManagedImplementation(native_data);
-    Interface.DeleteString(ref native_data);
-    return result;
-  }
-
-  private static readonly OwnershipTransferUTF8Marshaler instance_ =
-      new OwnershipTransferUTF8Marshaler();
-}
-
-// A marshaler for UTF-8 strings whose ownership is not taken from C++.
-internal class NoOwnershipTransferUTF8Marshaler : UTF8Marshaler {
-  public static ICustomMarshaler GetInstance(string s) {
-    return instance_;
-  }
-
   public override object MarshalNativeToManaged(IntPtr native_data) {
     return MarshalNativeToManagedImplementation(native_data);
   }


[AVCamBarcode] handle session unteruption


Fix regression with Xaml context manager interaction

--- Source/Csla/ApplicationContext.cs
+++ Source/Csla/ApplicationContext.cs
@@ -27,6 +27,7 @@
     public ApplicationContext(ApplicationContextAccessor applicationContextAccessor)
     {
       ApplicationContextAccessor = applicationContextAccessor;
+      ApplicationContextAccessor.GetContextManager().ApplicationContext = this;
     }

     internal ApplicationContextAccessor ApplicationContextAccessor { get; set; }


Fixed bug in ToImageList

Fixed bug in ToImageList

--- WIndows.Forms/Extensions/ImageListExtension.cs
+++ WIndows.Forms/Extensions/ImageListExtension.cs
@@ -80,7 +80,7 @@
 			if (nilfi == null) throw new PlatformNotSupportedException();
 			var nil = nilfi.FieldType;
 			// Create a new instance with the handle param
-			var nili = nil.Assembly.CreateInstance(nil.FullName, false, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic, null, new object[] { dhiml }, null, null);
+			var nili = nil.Assembly.CreateInstance(nil.FullName, false, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic, null, new object[] { dhiml.DangerousGetHandle() }, null, null);
 			// Create a new ImageList and initialize with settings from handle
 			var il = new ImageList();
 			nilfi.SetValue(il, nili);


removed unused things.

removed unused things.

--- WPPMM/WPPMM/WPPMM/Pages/LiveViewScreen.xaml.cs
+++ WPPMM/WPPMM/WPPMM/Pages/LiveViewScreen.xaml.cs
@@ -28,16 +28,11 @@
         private bool isRequestingLiveview = false;
         private BitmapImage screenBitmapImage;
         private MemoryStream screenMemoryStream;
-        private WriteableBitmap screenWritableBitmap;

         private byte[] screenData;
         private int screenDataLen;

-        private Direct3DInterop m_d3dInterop = null;
         private Stopwatch watch;
-
-        private System.Text.StringBuilder stringBuilder;
-

         public LiveViewScreen()
         {
@@ -55,14 +50,9 @@

             screenData = new byte[1];
-            screenDataLen = screenData.Length;

-            screenWritableBitmap = new WriteableBitmap(640, 480);
-
-            screenMemoryStream = new MemoryStream();
             watch = new Stopwatch();
             watch.Start();
-            stringBuilder = new System.Text.StringBuilder();

         }

@@ -80,39 +70,14 @@
         public void LiveViewUpdateListener(byte[] data)
         {

-
             Debug.WriteLine("[" + watch.ElapsedMilliseconds + "ms" + "][LiveViewScreen] from last calling. ");

             int size = data.Length;
-            // Debug.WriteLine("debug value: " + m_d3dInterop.GetDebugValue());
-            stringBuilder.Clear();
-            stringBuilder.Append("data: ");
-            for (int i = 1000; i < 1050; i++)
-            {
-                stringBuilder.Append(" ");
-                stringBuilder.Append(data[i].ToString());
-            }
-            Debug.WriteLine(stringBuilder.ToString());
-
             ScreenImage.Source = null;

-            screenMemoryStream = new MemoryStream(data, 0, data.Length);
-
-
+            screenMemoryStream = new MemoryStream(data, 0, size);
             screenBitmapImage.SetSource(screenMemoryStream);
-
-           //  WriteableBitmap bmp = new WriteableBitmap(screenBitmapImage);
-            // screenWritableBitmap.SetSource(screenMemoryStream);
-
-            Debug.WriteLine("[" + watch.ElapsedMilliseconds + "ms" + "][LiveViewScreen] set source to WritableBitmap. " + size + "bytes. ");
-
-
-            // m_d3dInterop.setTexture(out screenWritableBitmap.Pixels[0], screenWritableBitmap.PixelWidth, screenWritableBitmap.PixelHeight);
-
             ScreenImage.Source = screenBitmapImage;
-
-
-
             screenMemoryStream.Close();

         }


Refactor the clean method.

Refactor the clean method.

Signed-off-by: onevcat <58d0c0df3ea9eba666b421252347024513bf8bb5@gmail.com>

--- XUPorter/XCProject.cs
+++ XUPorter/XCProject.cs
@@ -543,6 +543,33 @@
 			_objects = consolidated;
 			consolidated = null;
 		}
+
+		public void Backup()
+		{
+			string backupPath = Path.Combine( this.filePath, "project.backup.pbxproj" );
+
+			// Delete previous backup file
+			if( File.Exists( backupPath ) )
+				File.Delete( backupPath );
+
+			// Backup original pbxproj file first
+			File.Copy( System.IO.Path.Combine( this.filePath, "project.pbxproj" ), backupPath );
+		}
+
+		private void DeleteExisting(string path)
+		{
+            // Delete old project file
+            if( File.Exists( path ))
+                File.Delete( path );
+		}
+
+		private void CreateNewProject(PBXDictionary result, string path)
+		{
+			PBXParser parser = new PBXParser();
+			StreamWriter saveFile = File.CreateText( path );
+			saveFile.Write( parser.Encode( result, false ) );
+			saveFile.Close();
+		}

 		/// <summary>
 		/// Saves a project after editing.
@@ -559,25 +586,13 @@

 			result.Add( "rootObject", _rootObjectKey );

-			string backupPath = Path.Combine( this.filePath, "project.backup.pbxproj" );
-            string projectPath = Path.Combine( this.filePath, "project.pbxproj" );
-
-			// Delete previous backup file
-			if( File.Exists( backupPath ) )
-				File.Delete( backupPath );
-
-			// Backup original pbxproj file first
-			File.Copy( projectPath, backupPath );
-
-            // Delete project file
-            if( File.Exists( projectPath ))
-                File.Delete( projectPath );
-
+			string projectPath = Path.Combine( this.filePath, "project.pbxproj" );
+
+			// Delete old project file, in case of an IOException 'Sharing violation on path Error'
+			DeleteExisting(projectPath);
+
 			// Parse result object directly into file
-			PBXParser parser = new PBXParser();
-			StreamWriter saveFile = File.CreateText( projectPath );
-			saveFile.Write( parser.Encode( result, false ) );
-			saveFile.Close();
+			CreateNewProject(result,projectPath);
 		}

 		/**
@@ -595,4 +610,4 @@

 	   	}
 	}
-}
+}


CI: updated AssemblyInfo version to 2.6.1121.2