瀏覽代碼

Feature update v13.0 - added enable Compact mode for Win11

deadmoon 3 年之前
父節點
當前提交
35a6957cfd

+ 6 - 0
CHANGELOG.md

@@ -1,3 +1,9 @@
+## [13.0] - 2022-05-04
+- New: Enable Compact mode in Files for Windows 11 (removes extra space between files)
+- New: Cleaner now estimates size based on your preferences
+- New: Shiny new update window
+- Hotfix: Using ```/disablehibernate & /enablehibernate``` switches throws config not found error
+
 ## [12.9] - 2022-05-03
 - New: Enable Defender automatically (```/restart=enabledefender``` switch)
 - New: Enable/Disable hibernation from command-line (```/disablehibernate & /enablehibernate```)

+ 48 - 44
Optimizer/CleanHelper.cs

@@ -82,6 +82,8 @@ namespace Optimizer
 
         internal static List<string> PreviewCleanList = new List<string>();
 
+        internal static ByteSize PreviewSizeToBeFreed = new ByteSize(0);
+
         internal static void PreviewFolder(string path)
         {
             try
@@ -136,67 +138,55 @@ namespace Optimizer
         internal static void PreviewTemp()
         {
             PreviewFolder(TempFolder);
+            PreviewSizeToBeFreed += CalculateSize(TempFolder);
         }
 
         internal static void PreviewMinidumps()
         {
-            PreviewFolder(OSDriveWindows + "\\Minidump");
+            PreviewFolder(Path.Combine(OSDriveWindows, "Minidump"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(OSDriveWindows, "Minidump"));
         }
 
         internal static void PreviewErrorReports()
         {
-            PreviewFolder(ProfileAppDataLocal + "\\Microsoft\\Windows\\WER\\ReportArchive");
-            PreviewFolder(ProfileAppDataLocal + "\\Microsoft\\Windows\\WER\\ReportQueue");
-            PreviewFolder(ProfileAppDataLocal + "\\Microsoft\\Windows\\WER\\Temp");
-            PreviewFolder(ProfileAppDataLocal + "\\Microsoft\\Windows\\WER\\ERC");
-            PreviewFolder(ProgramData + "\\Microsoft\\Windows\\WER\\ReportArchive");
-            PreviewFolder(ProgramData + "\\Microsoft\\Windows\\WER\\ReportQueue");
-            PreviewFolder(ProgramData + "\\Microsoft\\Windows\\WER\\Temp");
-            PreviewFolder(ProgramData + "\\Microsoft\\Windows\\WER\\ERC");
+            PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportArchive"));
+            PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportQueue"));
+            PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\Temp"));
+            PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ERC"));
+            PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportArchive"));
+            PreviewFolder(Path.Combine(ProgramData,"Microsoft\\Windows\\WER\\ReportQueue"));
+            PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\Temp"));
+            PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ERC"));
+
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportArchive"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportQueue"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\Temp"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ERC"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportArchive"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportQueue"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\Temp"));
+            PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ERC"));
         }
 
-        internal static ByteSize CheckFootprint()
+        internal static ByteSize CalculateSize(string fileOrFolder)
         {
             ByteSize totalSize = new ByteSize(0);
-            List<DirectoryInfo> dirs = new List<DirectoryInfo>();
+            bool isFolder = Directory.Exists(fileOrFolder);
 
             try
             {
-                foreach (string x in ieCache) dirs.Add(new DirectoryInfo(x));
-                dirs.Add(new DirectoryInfo(chromeFolder));
-                dirs.Add(new DirectoryInfo(@"C:\Users\deadmoon\AppData\Local\Microsoft\Edge"));
-                dirs.Add(new DirectoryInfo(firefoxLocal));
-                dirs.Add(new DirectoryInfo(firefoxRoaming));
-                dirs.Add(new DirectoryInfo(TempFolder));
-
-                foreach (DirectoryInfo di in dirs)
+                if (isFolder)
                 {
-                    try
-                    {
-                        if (!Directory.Exists(di.FullName)) { continue; }
-                        totalSize += totalSize.AddBytes(di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length));
-                    }
-                    catch { continue; }
+                    DirectoryInfo dir = new DirectoryInfo(fileOrFolder);
+                    totalSize += totalSize.AddBytes(dir.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length));
+                }
+                else
+                {
+                    FileInfo file = new FileInfo(fileOrFolder);
+                    totalSize = totalSize.AddBytes(file.Length);
                 }
-
-                //DirectoryInfo di;
-                //foreach (string x in PreviewCleanList)
-                //{
-                //    try
-                //    {
-                //        if (!Directory.Exists(x)) { continue; }
-                //        System.Windows.Forms.MessageBox.Show(x);
-                //        di = new DirectoryInfo(x);
-                //        totalSize += totalSize.AddBytes(di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length));
-                //    }
-                //    catch { continue; }
-                //}
-            }
-            catch (Exception ex)
-            {
-                ErrorLogger.LogError("CleanHelper.CleanLogs", ex.Message, ex.StackTrace);
-                return totalSize;
             }
+            catch { }
 
             return totalSize;
         }
@@ -208,6 +198,7 @@ namespace Optimizer
                 foreach (string x in edgeCache)
                 {
                     PreviewFolder(x);
+                    PreviewSizeToBeFreed += CalculateSize(x);
                 }
             }
 
@@ -216,12 +207,14 @@ namespace Optimizer
                 foreach (string x in edgeCookies)
                 {
                     PreviewFolder(x);
+                    PreviewSizeToBeFreed += CalculateSize(x);
                 }
             }
 
             if (seachHistory)
             {
                 PreviewFolder(edgeHistory);
+                PreviewSizeToBeFreed += CalculateSize(edgeHistory);
             }
 
             if (session)
@@ -229,6 +222,7 @@ namespace Optimizer
                 foreach (string x in edgeSession)
                 {
                     PreviewFolder(x);
+                    PreviewSizeToBeFreed += CalculateSize(x);
                 }
             }
         }
@@ -238,6 +232,7 @@ namespace Optimizer
             foreach (string x in ieCache)
             {
                 PreviewFolder(x);
+                PreviewSizeToBeFreed += CalculateSize(x);
             }
         }
 
@@ -250,27 +245,31 @@ namespace Optimizer
                     if (cookies)
                     {
                         PreviewFolder(Path.Combine(x, "cookies.sqlite"));
+                        PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "cookies.sqlite"));
                     }
 
                     if (searchHistory)
                     {
                         PreviewFolder(Path.Combine(x, "places.sqlite"));
+                        PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "places.sqlite"));
                     }
 
                     if (cache)
                     {
                         PreviewFolder(Path.Combine(x, "shader-cache"));
+                        PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "shader-cache"));
                     }
                 }
             }
 
             if (cache)
             {
-                foreach (string x in Directory.EnumerateFiles(firefoxLocal))
+                foreach (string x in Directory.EnumerateDirectories(firefoxLocal))
                 {
                     if (x.ToLowerInvariant().Contains("release"))
                     {
                         PreviewFolder(Path.Combine(x, "cache2"));
+                        PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "cache2"));
                     }
                 }
             }
@@ -283,6 +282,7 @@ namespace Optimizer
                 foreach (string x in chromeUserDataCacheDirs)
                 {
                     PreviewFolder(Path.Combine(chromeFolder, x));
+                    PreviewSizeToBeFreed += CalculateSize(Path.Combine(chromeFolder, x));
                 }
             }
 
@@ -291,6 +291,7 @@ namespace Optimizer
                 foreach (string x in chromeSessionDirs)
                 {
                     PreviewFolder(x);
+                    PreviewSizeToBeFreed += CalculateSize(x);
                 }
             }
 
@@ -299,6 +300,7 @@ namespace Optimizer
                 foreach (string x in chromeCookiesDirs)
                 {
                     PreviewFolder(x);
+                    PreviewSizeToBeFreed += CalculateSize(x);
                 }
             }
 
@@ -307,12 +309,14 @@ namespace Optimizer
                 foreach (string x in chromeHistoryDirs)
                 {
                     PreviewFolder(x);
+                    PreviewSizeToBeFreed += CalculateSize(x);
                 }
             }
 
             if (passwords)
             {
                 PreviewFolder(chromePasswordsDir);
+                PreviewSizeToBeFreed += CalculateSize(chromePasswordsDir);
             }
         }
     }

+ 0 - 4
Optimizer/Controls/ToggleCard.Designer.cs

@@ -43,8 +43,6 @@ namespace Optimizer
             this.Label.Size = new System.Drawing.Size(45, 19);
             this.Label.TabIndex = 1;
             this.Label.Text = "label1";
-            this.Label.MouseEnter += new System.EventHandler(this.Label_MouseEnter);
-            this.Label.MouseHover += new System.EventHandler(this.Label_MouseHover);
             // 
             // Panel
             // 
@@ -55,8 +53,6 @@ namespace Optimizer
             this.Panel.Name = "Panel";
             this.Panel.Size = new System.Drawing.Size(334, 25);
             this.Panel.TabIndex = 0;
-            this.Panel.MouseEnter += new System.EventHandler(this.Panel_MouseEnter);
-            this.Panel.MouseHover += new System.EventHandler(this.Panel_MouseHover);
             // 
             // Toggle
             // 

+ 4 - 26
Optimizer/Controls/ToggleCard.cs

@@ -16,10 +16,10 @@ namespace Optimizer
             Toggle.IsAccessible = true;
             Panel.IsAccessible = true;
 
-            this.AccessibleRole = AccessibleRole.StaticText;
-            Label.AccessibleRole = AccessibleRole.StaticText;
-            Toggle.AccessibleRole = AccessibleRole.StaticText;
-            Panel.AccessibleRole = AccessibleRole.StaticText;
+            //this.AccessibleRole = AccessibleRole.CheckButton;
+            //Label.AccessibleRole = AccessibleRole.CheckButton;
+            //Toggle.AccessibleRole = AccessibleRole.CheckButton;
+            //Panel.AccessibleRole = AccessibleRole.CheckButton;
 
             this.AccessibleName = LabelText;
             Label.AccessibleName = LabelText;
@@ -50,27 +50,5 @@ namespace Optimizer
         {
             if (ToggleClicked != null) ToggleClicked(sender, e);
         }
-
-        private void Label_MouseEnter(object sender, EventArgs e)
-        {
-            //Label.Focus();
-            //Label.Select();
-        }
-
-        private void Label_MouseHover(object sender, EventArgs e)
-        {
-            //Label.Focus();
-            //Label.Select();
-        }
-
-        private void Panel_MouseEnter(object sender, EventArgs e)
-        {
-
-        }
-
-        private void Panel_MouseHover(object sender, EventArgs e)
-        {
-
-        }
     }
 }

+ 0 - 1
Optimizer/Forms/InfoForm.Designer.cs

@@ -106,7 +106,6 @@
             this.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
             this.ForeColor = System.Drawing.Color.White;
             this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
-            this.MaximizeBox = false;
             this.MinimizeBox = false;
             this.Name = "InfoForm";
             this.ShowIcon = false;

File diff suppressed because it is too large
+ 4250 - 4017
Optimizer/Forms/MainForm.Designer.cs


+ 38 - 35
Optimizer/Forms/MainForm.cs

@@ -61,6 +61,7 @@ namespace Optimizer
 
         string _noNewVersionMessage = "You already have the latest version!";
         string _betaVersionMessage = "You are using an experimental version!";
+        string _newVersionMessage = "There is a new version available! Do you want to download it now?\nApp will restart in a few seconds.";
 
         readonly string _blockedIP = "0.0.0.0";
 
@@ -93,10 +94,7 @@ namespace Optimizer
         bool _cleanSelectAll = true;
         List<string> _cleanPreviewList;
 
-        private string NewVersionMessage(string latestVersion)
-        {
-            return Options.TranslationList["newVersion"].ToString().Replace("{LATEST}", latestVersion).Replace("{CURRENT}", Program.GetCurrentVersionTostring());
-        }
+        UpdateForm _updateForm;
 
         private string NewDownloadLink(string latestVersion)
         {
@@ -132,9 +130,9 @@ namespace Optimizer
                         return;
                     }
 
-                    if (MessageBox.Show(NewVersionMessage(latestVersion), "Optimizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
+                    _updateForm = new UpdateForm(_newVersionMessage, true, ParseChangelog(), latestVersion);
+                    if (_updateForm.ShowDialog() == DialogResult.Yes)
                     {
-                        // PATCHING PROCESS
                         try
                         {
                             Assembly currentAssembly = Assembly.GetEntryAssembly();
@@ -187,11 +185,19 @@ namespace Optimizer
                 }
                 else if (float.Parse(latestVersion) == Program.GetCurrentVersion())
                 {
-                    if (!silentCheck) MessageBox.Show(_noNewVersionMessage, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    if (!silentCheck)
+                    {
+                        _updateForm = new UpdateForm(_noNewVersionMessage, false, string.Empty, latestVersion);
+                        _updateForm.ShowDialog();
+                    }
                 }
                 else
                 {
-                    if (!silentCheck) MessageBox.Show(_betaVersionMessage, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    if (!silentCheck)
+                    {
+                        _updateForm = new UpdateForm(_betaVersionMessage, false, string.Empty, latestVersion);
+                        _updateForm.ShowDialog();
+                    }
                 }
             }
         }
@@ -245,6 +251,20 @@ namespace Optimizer
             chromeTelemetrySw.ToggleClicked += new EventHandler(ChromeTelemetrySw_ToggleClicked);
             vsSw.ToggleClicked += new EventHandler(VsSw_ToggleClicked);
             gameModeSw.ToggleClicked += new EventHandler(GameModeSw_ToggleClicked);
+            compactModeSw.ToggleClicked += CompactModeSw_ToggleClicked;
+        }
+
+        private void CompactModeSw_ToggleClicked(object sender, EventArgs e)
+        {
+            if (compactModeSw.ToggleChecked)
+            {
+                Optimize.EnableFilesCompactMode();
+            }
+            else
+            {
+                Optimize.DisableFilesCompactMode();
+            }
+            Options.CurrentOptions.CompactMode = compactModeSw.ToggleChecked;
         }
 
         private void GameModeSw_ToggleClicked(object sender, EventArgs e)
@@ -442,6 +462,7 @@ namespace Optimizer
             helpBox.SetToolTip(vsSw.Label, Options.TranslationList["vsTip"].ToString());
             helpBox.SetToolTip(chromeTelemetrySw.Label, Options.TranslationList["chromeTelemetryTip"].ToString());
             helpBox.SetToolTip(gameModeSw.Label, Options.TranslationList["gameModeTip"].ToString());
+            helpBox.SetToolTip(compactModeSw.Label, Options.TranslationList["compactModeTip"].ToString());
 
             //helpBox.ToolTipTitle = Options.TranslationList["tipWhatsThis"].ToString();
         }
@@ -1608,6 +1629,7 @@ namespace Optimizer
             {
                 _noNewVersionMessage = Options.TranslationList["noNewVersion"];
                 _betaVersionMessage = Options.TranslationList["betaVersion"];
+                _newVersionMessage = Options.TranslationList["newVersion"];
                 _restartMessage = Options.TranslationList["restartAndApply"];
                 _removeStartupItemsMessage = Options.TranslationList["removeAllStartup"];
                 _removeHostsEntriesMessage = Options.TranslationList["removeAllHosts"];
@@ -1659,7 +1681,8 @@ namespace Optimizer
 
         private void GetFootprint()
         {
-            ByteSize footprint = CleanHelper.CheckFootprint();
+            ByteSize footprint = CleanHelper.PreviewSizeToBeFreed;
+            //ByteSize footprint = CleanHelper.CheckFootprint();
             lblFootprint.Text = footprint.ToString();
         }
 
@@ -1770,7 +1793,6 @@ namespace Optimizer
             }
             finally
             {
-                //if (CleanHelper.PreviewCleanList.Count > 0) new CleanPreviewForm(CleanHelper.PreviewCleanList).ShowDialog();
                 _cleanPreviewList = CleanHelper.PreviewCleanList;
 
                 _cleanPreviewList.Sort();
@@ -3211,20 +3233,6 @@ namespace Optimizer
             CheckForUpdate();
         }
 
-        private void btnChangelog_Click(object sender, EventArgs e)
-        {
-            //try
-            //{
-            //    Process.Start(_changelogLink);
-            //}
-            //catch (Exception ex)
-            //{
-            //    ErrorLogger.LogError("MainForm.btnChangelog_Click", ex.Message, ex.StackTrace);
-            //    MessageBox.Show(ex.Message, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
-            //}
-            ParseChangelog();
-        }
-
         private void chkReadOnly_CheckedChanged(object sender, EventArgs e)
         {
             HostsHelper.ReadOnly(chkReadOnly.Checked);
@@ -3575,11 +3583,6 @@ namespace Optimizer
             pinger.Start();
         }
 
-        private void btnCheckFootprint_Click(object sender, EventArgs e)
-        {
-            CleanHelper.CheckFootprint();
-        }
-
         private void btnShodan_Click(object sender, EventArgs e)
         {
             IPAddress tryIP;
@@ -3985,7 +3988,7 @@ namespace Optimizer
             if (d.ShowDialog() == DialogResult.OK) File.WriteAllText(d.FileName, GetSpecsToString(specsTree), Encoding.UTF8);
         }
 
-        private void ParseChangelog()
+        private string ParseChangelog()
         {
             WebClient client = new WebClient
             {
@@ -4003,10 +4006,10 @@ namespace Optimizer
             {
                 ErrorLogger.LogError("MainForm.ParseChangelog", ex.Message, ex.StackTrace);
                 MessageBox.Show(ex.Message, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
-                return;
+                return string.Empty;
             }
 
-            if (changelogText.Count == 0) return;
+            if (changelogText.Count == 0) return string.Empty;
 
             int markVersion = 0;
             for (int d = 0; d < changelogText.Count; d++)
@@ -4024,11 +4027,10 @@ namespace Optimizer
             if (changelogText.Count <= 0)
             {
                 MessageBox.Show(_noNewVersionMessage, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
-                return;
+                return string.Empty;
             }
 
-            InfoForm f = new InfoForm(string.Join(Environment.NewLine, changelogText).Replace("##", "➤"));
-            f.ShowDialog(this);
+            return string.Join(Environment.NewLine, changelogText).Replace("##", "➤");
         }
 
         private void boxLang_SelectedIndexChanged(object sender, EventArgs e)
@@ -4165,6 +4167,7 @@ namespace Optimizer
 
         private void analyzeDriveB_Click(object sender, EventArgs e)
         {
+            CleanHelper.PreviewSizeToBeFreed = new ByteSize(0);
             CleanHelper.PreviewCleanList.Clear();
             listCleanPreview.Items.Clear();
             PreviewCleanPC();

+ 1 - 1
Optimizer/Forms/MainForm.resx

@@ -715,7 +715,7 @@ any application only by typing your desired keyword.</value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC8
-        GgAAAk1TRnQBSQFMAgEBCQEAAXABBAFwAQQBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
+        GgAAAk1TRnQBSQFMAgEBCQEAAUgBBQFIAQUBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
         AwABYAMAAQEBAAEgBgABwP8A/wD/AP8A/wD/AP8A/wAeAANHAYB0//8AiQADRwGAdP//AIkAAyoBQANH
         AYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANH
         AYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGA/wD/AP8A

+ 170 - 0
Optimizer/Forms/UpdateForm.Designer.cs

@@ -0,0 +1,170 @@
+
+namespace Optimizer
+{
+    partial class UpdateForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.txtMessage = new System.Windows.Forms.Label();
+            this.btnOK = new System.Windows.Forms.Button();
+            this.btnNo = new System.Windows.Forms.Button();
+            this.txtVersions = new System.Windows.Forms.Label();
+            this.txtChanges = new System.Windows.Forms.Label();
+            this.txtInfo = new System.Windows.Forms.TextBox();
+            this.SuspendLayout();
+            // 
+            // txtMessage
+            // 
+            this.txtMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtMessage.Font = new System.Drawing.Font("Segoe UI Semibold", 11.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.txtMessage.ForeColor = System.Drawing.Color.DodgerBlue;
+            this.txtMessage.Location = new System.Drawing.Point(11, 9);
+            this.txtMessage.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+            this.txtMessage.Name = "txtMessage";
+            this.txtMessage.Size = new System.Drawing.Size(562, 60);
+            this.txtMessage.TabIndex = 62;
+            this.txtMessage.Tag = "themeable";
+            this.txtMessage.Text = "Message";
+            // 
+            // btnOK
+            // 
+            this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnOK.BackColor = System.Drawing.Color.DodgerBlue;
+            this.btnOK.FlatAppearance.BorderSize = 0;
+            this.btnOK.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
+            this.btnOK.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
+            this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.btnOK.ForeColor = System.Drawing.Color.White;
+            this.btnOK.Location = new System.Drawing.Point(457, 464);
+            this.btnOK.Margin = new System.Windows.Forms.Padding(2);
+            this.btnOK.Name = "btnOK";
+            this.btnOK.Size = new System.Drawing.Size(116, 31);
+            this.btnOK.TabIndex = 63;
+            this.btnOK.Text = "Yes";
+            this.btnOK.UseVisualStyleBackColor = false;
+            // 
+            // btnNo
+            // 
+            this.btnNo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnNo.BackColor = System.Drawing.Color.DodgerBlue;
+            this.btnNo.FlatAppearance.BorderSize = 0;
+            this.btnNo.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
+            this.btnNo.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
+            this.btnNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.btnNo.ForeColor = System.Drawing.Color.White;
+            this.btnNo.Location = new System.Drawing.Point(337, 464);
+            this.btnNo.Margin = new System.Windows.Forms.Padding(2);
+            this.btnNo.Name = "btnNo";
+            this.btnNo.Size = new System.Drawing.Size(116, 31);
+            this.btnNo.TabIndex = 64;
+            this.btnNo.Text = "No";
+            this.btnNo.UseVisualStyleBackColor = false;
+            // 
+            // txtVersions
+            // 
+            this.txtVersions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtVersions.Font = new System.Drawing.Font("Segoe UI Semibold", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.txtVersions.ForeColor = System.Drawing.Color.White;
+            this.txtVersions.Location = new System.Drawing.Point(11, 80);
+            this.txtVersions.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+            this.txtVersions.Name = "txtVersions";
+            this.txtVersions.Size = new System.Drawing.Size(562, 39);
+            this.txtVersions.TabIndex = 66;
+            this.txtVersions.Tag = "";
+            this.txtVersions.Text = "-";
+            this.txtVersions.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+            // 
+            // txtChanges
+            // 
+            this.txtChanges.AutoSize = true;
+            this.txtChanges.Font = new System.Drawing.Font("Segoe UI Semibold", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.txtChanges.ForeColor = System.Drawing.Color.DodgerBlue;
+            this.txtChanges.Location = new System.Drawing.Point(11, 135);
+            this.txtChanges.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+            this.txtChanges.Name = "txtChanges";
+            this.txtChanges.Size = new System.Drawing.Size(102, 20);
+            this.txtChanges.TabIndex = 67;
+            this.txtChanges.Tag = "themeable";
+            this.txtChanges.Text = "View changes";
+            // 
+            // txtInfo
+            // 
+            this.txtInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.txtInfo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
+            this.txtInfo.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.txtInfo.Font = new System.Drawing.Font("Segoe UI Semibold", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.txtInfo.ForeColor = System.Drawing.Color.White;
+            this.txtInfo.Location = new System.Drawing.Point(15, 168);
+            this.txtInfo.Margin = new System.Windows.Forms.Padding(2);
+            this.txtInfo.Multiline = true;
+            this.txtInfo.Name = "txtInfo";
+            this.txtInfo.ReadOnly = true;
+            this.txtInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+            this.txtInfo.Size = new System.Drawing.Size(558, 280);
+            this.txtInfo.TabIndex = 68;
+            this.txtInfo.Text = "Integrator InfoBox";
+            // 
+            // UpdateForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
+            this.ClientSize = new System.Drawing.Size(584, 506);
+            this.Controls.Add(this.txtInfo);
+            this.Controls.Add(this.txtChanges);
+            this.Controls.Add(this.txtVersions);
+            this.Controls.Add(this.btnNo);
+            this.Controls.Add(this.btnOK);
+            this.Controls.Add(this.txtMessage);
+            this.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.ForeColor = System.Drawing.Color.White;
+            this.MinimizeBox = false;
+            this.Name = "UpdateForm";
+            this.ShowIcon = false;
+            this.ShowInTaskbar = false;
+            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Load += new System.EventHandler(this.UpdateForm_Load);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label txtMessage;
+        private System.Windows.Forms.Button btnOK;
+        private System.Windows.Forms.Button btnNo;
+        private System.Windows.Forms.Label txtVersions;
+        private System.Windows.Forms.Label txtChanges;
+        private System.Windows.Forms.TextBox txtInfo;
+    }
+}

+ 58 - 0
Optimizer/Forms/UpdateForm.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Optimizer
+{
+    public partial class UpdateForm : Form
+    {
+        public UpdateForm(string message, bool newUpdate, string changelog, string latestVersion)
+        {
+            InitializeComponent();
+            Options.ApplyTheme(this);
+
+            txtMessage.Text = message;
+
+            if (newUpdate)
+            {
+                this.Size = new Size(600, 545);
+                btnOK.Text = Options.TranslationList["btnYes"].ToString();
+                btnNo.Text = Options.TranslationList["btnNo"].ToString();
+                btnNo.Visible = true;
+                txtChanges.Text = Options.TranslationList["btnChangelog"].ToString();
+                txtVersions.Text = $"{Program.GetCurrentVersionTostring()} → {latestVersion}";
+                txtVersions.Visible = true;
+
+                btnOK.DialogResult = DialogResult.Yes;
+                btnNo.DialogResult = DialogResult.No;
+
+                txtInfo.Text = changelog;
+                txtInfo.Visible = true;
+                txtChanges.Visible = true;
+            }
+            else
+            {
+                this.Size = new Size(600, 188);
+                btnOK.Text = Options.TranslationList["btnAbout"].ToString();
+                btnNo.Visible = false;
+                txtVersions.Visible = false;
+
+                btnOK.DialogResult = DialogResult.OK;
+
+                txtInfo.Visible = false;
+                txtChanges.Visible = false;
+            }
+        }
+
+        private void UpdateForm_Load(object sender, EventArgs e)
+        {
+
+        }
+    }
+}

+ 120 - 0
Optimizer/Forms/UpdateForm.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 9 - 0
Optimizer/Optimizer.csproj

@@ -156,6 +156,12 @@
     <Compile Include="Forms\HelperForm.designer.cs">
       <DependentUpon>HelperForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="Forms\UpdateForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Forms\UpdateForm.Designer.cs">
+      <DependentUpon>UpdateForm.cs</DependentUpon>
+    </Compile>
     <Compile Include="Hardware.cs" />
     <Compile Include="Forms\HostsEditorForm.cs">
       <SubType>Form</SubType>
@@ -240,6 +246,9 @@
     <EmbeddedResource Include="Forms\MainForm.resx">
       <DependentUpon>MainForm.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Forms\UpdateForm.resx">
+      <DependentUpon>UpdateForm.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <SubType>Designer</SubType>

+ 2 - 0
Optimizer/Options.cs

@@ -75,6 +75,7 @@ namespace Optimizer
         public bool ClassicRibbon { get; set; }
         public bool ClassicMenu { get; set; }
         public bool DisableTPMCheck { get; set; }
+        public bool CompactMode { get; set; }
     }
 
     internal static class Options
@@ -256,6 +257,7 @@ namespace Optimizer
                 CurrentOptions.ClassicRibbon = false;
                 CurrentOptions.ClassicMenu = false;
                 CurrentOptions.DisableTPMCheck = false;
+                CurrentOptions.CompactMode = false;
 
                 using (FileStream fs = File.Open(SettingsFile, FileMode.CreateNew))
                 using (StreamWriter sw = new StreamWriter(fs))

+ 2 - 2
Optimizer/Program.cs

@@ -12,8 +12,8 @@ namespace Optimizer
         /* VERSION PROPERTIES */
         /* DO NOT LEAVE THEM EMPTY */
 
-        internal readonly static float Major = 12;
-        internal readonly static float Minor = 9;
+        internal readonly static float Major = 13;
+        internal readonly static float Minor = 0;
 
         internal readonly static bool EXPERIMENTAL_BUILD = false;
 

+ 6 - 2
Optimizer/Resources/i18n/AR.json

@@ -254,8 +254,10 @@
 	"removeAllItems": "هل أنت متأكد أنك تريد حذف كافة عناصر سطح المكتب؟",
 	"removeModernApps": "هل أنت متأكد من أنك تريد إزالة التطبيق(التطبيقات) التالية؟",
 	"errorModernApps": "تعذر إلغاء تثبيت التطبيق(التطبيقات) التالية:\n",
+	"latestVersionM": "أحدث إصدار: {LATEST}",
+	"currentVersionM": "الإصدار الحالي: {CURRENT}",
 	"resetMessage": "هل تريد بالتأكيد إعادة تعيين الإعدادات؟\nسيؤدي هذا إلى إعادة تعيين جميع تفضيلاتك، بما في ذلك أي أيقونات قمت باستخراجها أو تنزيلها باستخدام Integrator، ولكن لن تلمس أي شيء على جهاز الكمبيوتر الخاص بك!",
-	"newVersion": "يتوفر إصدار جديد!\n\nأحدث إصدار: {LATEST}\n الإصدار الحالي: {CURRENT}\n\nهل تريد تنزيله الآن؟\n\nسيتم إعادة تشغيل التطبيق في غضون ثوانٍ قليلة.",
+	"newVersion": "يتوفر إصدار جديد!هل تريد تنزيله الآن؟\nسيتم إعادة تشغيل التطبيق في غضون ثوانٍ قليلة.",
 	"flushDNSMessage": "هل أنت متأكد من رغبتك في مسح ذاكرة التخزين المؤقت لـ DNS الخاصة بـ Windows?\n\nسيؤدي ذلك إلى قطع الاتصال بالإنترنت للحظة وقد تكون هناك حاجة لإعادة التشغيل لتعمل بشكل صحيح.",
 	"downloadsFinished": "أنتها",
 	"downloadDirInvalid": "مجلد التنزيل المحدد غير صالح",
@@ -411,5 +413,7 @@ Windows Defender هو مضاد فيروسات مدمج في أنظمة Windows."
 	"classicRibbonTip": "يستعيد شريط ribbon  الكلاسيكي من Windows 10 في File Explorer.",
 	"classicContextTip": "يستعيد قائمة النقر بزر الماوس الأيمن الكلاسيكية ، ويزيل زر إظهار المزيد من الخيارات.",
 	"gameModeSw": "تمكين وضع الألعاب",
-	"gameModeTip": "لتمكين وضع الألعاب بالاشتراك مع جدولة وحدة معالجة الرسومات المسرَّعة للأجهزة."
+	"gameModeTip": "لتمكين وضع الألعاب بالاشتراك مع جدولة وحدة معالجة الرسومات المسرَّعة للأجهزة.",
+	"compactModeSw": "تمكين الوضع المضغوط في Explorer",
+	"compactModeTip": "يقلل المساحة والمساحة الزائدة بين الملفات في مستكشف الملفات."
 }

+ 6 - 2
Optimizer/Resources/i18n/CN.json

@@ -257,8 +257,10 @@
 	"removeAllItems": "您确定要删除所有桌面项目吗?",
 	"removeModernApps": "您确定要卸载以下应用程序吗??",
 	"errorModernApps": "以下应用程序无法卸载:\n",
+	"latestVersionM": "最新版本: {LATEST}",
+	"currentVersionM": "当前版本: {CURRENT}",
 	"resetMessage": "您确定要重置配置吗?\n这将重置所有您的首选项,包括您提取的任何图标\n或使用Integrator下载,但不会接触您的计算机上的任何东西!",
-	"newVersion": "有一个新的版本可用!\n\n最新版本: {LATEST}\n当前版本: {CURRENT}\n\n你想现在下载吗?\n\n应用程序将在几秒钟内重新启动.",
+	"newVersion": "有一个新的版本可用! 你想现在下载吗?\n应用程序将在几秒钟内重新启动.",
 	"downloadsFinished": "完成",
 	"downloadDirInvalid": "指定的下载文件夹无效",
 	"no64Download": "没有64位可用,正在下载32位",
@@ -409,5 +411,7 @@
 	"classicRibbonTip": "在文件资源管理器中恢复Windows 10的经典色带条.",
 	"classicContextTip": "恢复经典的右键菜单,删除 “显示更多选项”.",
 	"gameModeSw": "启用游戏模式",
-	"gameModeTip": "结合硬件加速 GPU 调度启用游戏模式"
+	"gameModeTip": "结合硬件加速 GPU 调度启用游戏模式",
+	"compactModeSw": "在资源管理器中启用紧凑模式",
+	"compactModeTip": "减少文件资源管理器中文件之间的额外空间和填充。"
 }

+ 6 - 2
Optimizer/Resources/i18n/CZ.json

@@ -255,8 +255,10 @@
 	"removeAllItems": "Opravdu chcete smazat všechny položky na ploše?",
 	"removeModernApps": "Opravdu chcete odinstalovat následující aplikace?",
 	"errorModernApps": "Následující aplikace se nepodařilo odinstalovat:\n",
+	"latestVersionM": "Nejnovější verze: {LATEST}",
+	"currentVersionM": "Současná verze: {CURRENT}",
 	"resetMessage": "Opravdu chcete resetovat konfiguraci?\nTím se resetují všechny vaše předvolby, včetně všech extrahovaných ikon\nkteré jste stáhli pomocí Integrátoru, ale program se nedotkne ničeho na vašem počítači!",
-	"newVersion": "K dispozici je nová verze!\n\nNejnovější verze: {LATEST}\nSoučasná verze: {CURRENT}\n\nChcete si je nyní stáhnout?\n\nAplikace se za několik sekund restartuje.",
+	"newVersion": "K dispozici je nová verze! Chcete si je nyní stáhnout?\nAplikace se za několik sekund restartuje.",
 	"downloadsFinished": "Dokončeno",
 	"downloadDirInvalid": "Zadaná složka pro stahování není platná",
 	"no64Download": "Není k dispozici 64bitová verze, stahuje se 32bitová verze",
@@ -411,5 +413,7 @@ Je to však považováno za riskantní procedůru. Obvykle se jedná o půlročn
 	"classicRibbonTip": "Obnoví klasický pás karet ze systému Windows 10 v Průzkumníkovi souborů.",
 	"classicContextTip": "Obnoví klasickou nabídku kliknutí pravým tlačítkem myši a odstraní 'Zobrazit další možnosti'.",
 	"gameModeSw": "Povolit herní režim",
-	"gameModeTip": "Umožňuje herní režim v kombinaci s hardwarově akcelerovaným plánováním GPU."
+	"gameModeTip": "Umožňuje herní režim v kombinaci s hardwarově akcelerovaným plánováním GPU.",
+	"compactModeSw": "Povolte v Průzkumníkovi kompaktní režim",
+	"compactModeTip": "Snižuje prostor navíc a odsazení mezi soubory v Průzkumníkovi souborů."
 }

+ 6 - 2
Optimizer/Resources/i18n/DE.json

@@ -255,8 +255,10 @@
 	"removeAllItems": "Sind Sie sicher, dass Sie alle Desktopelemente löschen möchten?",
 	"removeModernApps": "Sind Sie sicher, dass Sie die folgende(n) App(s) deinstallieren möchten?",
 	"errorModernApps": "Die folgende(n) App(s) konnte(n) nicht deinstalliert werden:\n",
+	"latestVersionM": "NLetzte Version: {LATEST}",
+	"currentVersionM": "Aktuelle Version: {CURRENT}",
 	"resetMessage": "Sind Sie sicher, dass Sie die Konfiguration zurücksetzen möchten?\nDies setzt alle Ihre Einstellungen zurück, einschließlich aller Symbole, die Sie mit Integrator extrahiert oder heruntergeladen haben, verändert jedoch nichts auf Ihrem Computer!",
-	"newVersion": "Es ist eine neue Version verfügbar!\n\nNLetzte Version: {LATEST}\nAktuelle Version: {CURRENT}\n\nMöchten Sie die Version {LATEST} jetzt herunterladen?\n\nDie App wird in ein paar Sekunden neu gestartet.",
+	"newVersion": "Es ist eine neue Version verfügbar! Möchten Sie jetzt herunterladen?\nDie App wird in ein paar Sekunden neu gestartet.",
 	"downloadsFinished": "Abgeschlossen",
 	"downloadDirInvalid": "Der angegebene Download-Ordner ist nicht gültig",
 	"no64Download": "Keine 64-Bit verfügbar, 32-Bit herunterladen",
@@ -387,5 +389,7 @@
 	"classicRibbonTip": "Stellt das klassische Windows 10-Menüband im Datei-Explorer wieder her.",
 	"classicContextTip": "Stellt das klassische Rechtsklickmenü wieder her und entfernt die Option 'Weitere Optionen anzeigen'.",
 	"gameModeSw": "Spielemodus aktivieren",
-	"gameModeTip": "Aktiviert den Gaming-Modus in Kombination mit hardwarebeschleunigter GPU-Planung."
+	"gameModeTip": "Aktiviert den Gaming-Modus in Kombination mit hardwarebeschleunigter GPU-Planung.",
+	"compactModeSw": "Aktivieren Sie den Kompaktmodus im Explorer",
+	"compactModeTip": "Reduziert zusätzlichen Platz und Auffüllung zwischen den Dateien im Datei-Explorer."
 }

+ 7 - 3
Optimizer/Resources/i18n/EL.json

@@ -66,7 +66,7 @@
 	"widgetsSw": "Απενεργοποίηση των Widgets",
 	"chatSw": "Απενεργοποίηση του Chat",
 	"smallerTaskbarSw": "Σμίκρυνση της Γραμμής Εργασιών",
-	"classicRibbonSw": "Επαναφορά Κλασσικης Κορδέλας στα Αρχεια",
+	"classicRibbonSw": "Επαναφορά Κλασσικης Κορδέλας στα Αρχεία",
 	"classicContextSw": "Επαναφορά Κλασσικού Μενού στο Δεξί Κλικ",
 	"refreshModernAppsButton": "Ανανέωση",
 	"uninstallModernAppsButton": "Διαγραφή",
@@ -255,8 +255,10 @@
 	"removeAllItems": "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα στοιχεία της επιφάνειας εργασίας;",
 	"removeModernApps": "Είστε βέβαιοι ότι θέλετε να απεγκαταστήσετε τις ακόλουθες εφαρμογές;",
 	"errorModernApps": "Δεν ήταν δυνατή η απεγκατάσταση των ακόλουθων εφαρμογών:\n",
+	"latestVersionM": "Τελευταία έκδοση: {LATEST}",
+	"currentVersionM": "Τρέχουσα έκδοση: {CURRENT}",
 	"resetMessage": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις ρυθμίσεις;\nΑυτό θα επαναφέρει όλες τις προτιμήσεις σας, συμπεριλαμβανομένων των εικονιδίων που έχετε εξαγάγει\nή έχετε κατεβάσει μέσω του Integrator, αλλά δεν θα αλλάξει τίποτα στον υπολογιστή σας!",
-	"newVersion": "Υπάρχει μια νέα έκδοση διαθέσιμη!\n\nΤελευταία έκδοση: {LATEST}\nΤρέχουσα έκδοση: {CURRENT}\n\nΘέλετε να την κατεβάσετε τώρα;\n\nΗ εφαρμογή θα κάνει επανακκίνηση σε λίγα δευτερόλεπτα",
+	"newVersion": "Υπάρχει μια νέα έκδοση διαθέσιμη! Θέλετε να την κατεβάσετε τώρα;\nΗ εφαρμογή θα κάνει επανακκίνηση σε λίγα δευτερόλεπτα",
 	"downloadsFinished": "Τέλος",
 	"downloadDirInvalid": "Ο φάκελος λήψης δεν είναι έγκυρος",
 	"no64Download": "Μη διαθέσιμα τα 64-bit, λήψη 32-bit",
@@ -407,5 +409,7 @@
 	"classicRibbonTip": "Επαναφέρει την κλασική γραμμή κορδέλας από τα Windows 10 στην Εξερεύνηση Αρχείων.",
 	"classicContextTip": "Επαναφέρει το κλασικό μενού με δεξί κλικ, καταργώντας την επιλογή 'Εμφάνιση περισσότερων επιλογών'.",
 	"gameModeSw": "Ενεργοποίηση Gaming Λειτουργίας",
-	"gameModeTip": "Ενεργοποιεί την λειτουργία Gaming των Windows"
+	"gameModeTip": "Ενεργοποιεί την λειτουργία Gaming των Windows",
+	"compactModeSw": "Ενεργοποίηση Compact Λειτουργίας στα Αρχεία",
+	"compactModeTip": "Μειώνει τον επιπλέον χώρο μεταξύ των αρχείων στην Εξερεύνηση αρχείων."
 }

+ 6 - 2
Optimizer/Resources/i18n/EN.json

@@ -253,8 +253,10 @@
 	"removeAllItems": "Are you sure you want to delete all desktop items?",
 	"removeModernApps": "Are you sure you want to uninstall the following app(s)?",
 	"errorModernApps": "The following app(s) couldn't be uninstalled:\n",
+	"latestVersionM": "Latest version: {LATEST}",
+	"currentVersionM": "Current version: {CURRENT}",
 	"resetMessage": "Are you sure you want to reset configuration?\nThis will reset all your preferences, including any icons you extracted\nor downloaded using Integrator, but will not touch anything on your computer!",
-	"newVersion": "There is a new version available!\n\nLatest version: {LATEST}\nCurrent version: {CURRENT}\n\nDo you want to download it now?\n\nApp will restart in a few seconds.",
+	"newVersion": "There is a new version available! Do you want to download it now?\nApp will restart in a few seconds.",
 	"flushDNSMessage": "Are you sure you wish to flush the DNS cache of Windows?\n\nThis will cause internet disconnection for a moment and it may be needed a restart to function properly.",
 	"downloadsFinished": "Finished",
 	"downloadDirInvalid": "Download folder specified is not valid",
@@ -411,5 +413,7 @@ However, they are considered a risky procedure. They are usually semi-annual rel
 	"classicContextTip": "Restores classic right-click menu, removing 'Show more options'.",
 	"gameModeSw": "Enable Gaming Mode",
 	"gameModeTip": "Enables Gaming mode in combination with hardware accelerated GPU scheduling.",
-	"systemRestoreM": "Are you sure you want to disable System Restore? This will delete your current backup images!"
+	"systemRestoreM": "Are you sure you want to disable System Restore? This will delete your current backup images!",
+	"compactModeSw": "Enable Compact Mode in Explorer",
+	"compactModeTip": "Reduces extra space and padding between the files in Files Explorer."
 }

+ 6 - 2
Optimizer/Resources/i18n/ES.json

@@ -256,8 +256,10 @@
 	"removeModernApps": "¿Está seguro de que desea desinstalar las siguientes aplicaciones?",
 	"errorModernApps": "No se pudieron desinstalar la(s) siguientes aplicaciones:\n",
 	"resetMessage": "¿Estás seguro de que quieres restablecer la configuración?\nEsto restablecerá todas sus preferencias, incluidos los iconos que extrajo\no descargado usando Integrator, ¡Pero no tocará nada en su computadora!",
-	"newVersion": "¡Hay una nueva versión disponible!\n\nUltima versión: {LATEST}\nVersión actual: {CURRENT}\n\n¿Quieres descargarlo ahora?\n\nLa aplicación se reiniciará en unos segundos.",
+	"newVersion": "¡Hay una nueva versión disponible! ¿Quieres descargarlo ahora?\nLa aplicación se reiniciará en unos segundos.",
 	"downloadsFinished": "Terminado",
+	"latestVersionM": "Ultima versión: {LATEST}",
+	"currentVersionM": "Versión actual: {CURRENT}",
 	"downloadDirInvalid": "La carpeta de descarga especificada no es válida",
 	"no64Download": "No hay 64 bits disponibles, descargando 32 bits",
 	"no32Download": "No hay 32 bits disponibles, omitiendo",
@@ -408,5 +410,7 @@ Sin embargo, se consideran un procedimiento riesgoso. Suelen ser lanzamientos se
 	"classicRibbonTip": "Restaura la barra de cinta clásica de Windows 10 en el Explorador de archivos.",
 	"classicContextTip": "Restaura el menú clásico del botón derecho del ratón, eliminando 'Mostrar más opciones'.",
 	"gameModeSw": "Habilitar modo de juego",
-	"gameModeTip": "Habilita el modo de juego en combinación con la programación de GPU acelerada por hardware."
+	"gameModeTip": "Habilita el modo de juego en combinación con la programación de GPU acelerada por hardware.",
+	"compactModeSw": "Habilitar el modo compacto en Explorer",
+	"compactModeTip": "Reduce el espacio adicional y el relleno entre los archivos en el Explorador de archivos."
 }

+ 6 - 2
Optimizer/Resources/i18n/FR.json

@@ -256,8 +256,10 @@
 	"removeModernApps": "Etes-vous sur de vouloir desinstaller les applications suivantes?",
 	"errorModernApps": "L'application suivante n'a pas pu etre desinstallee :\n",
 	"resetMessage": "Etes-vous sur de vouloir reinitialiser la configuration?\nCeci reinitialisera toutes vos preferences, y compris les icones que vous avez extraites\nou telechargees a l'aide d'Integrator, mais ne touchera rien sur votre ordinateur !",
-	"newVersion": "Une nouvelle version est disponible!\n\nDerniere version: {LATEST}\nVersion actuelle: {CURRENT}\n\nVoulez-vous la telecharger maintenant?\n\nL'application va redemarrer dans quelques secondes.",
+	"newVersion": "Une nouvelle version est disponible! Voulez-vous la telecharger maintenant?\nL'application va redemarrer dans quelques secondes.",
 	"downloadsFinished": "Fini",
+	"latestVersionM": "Derniere version: {LATEST}",
+	"currentVersionM": "Version actuelle: {CURRENT}",
 	"downloadDirInvalid": "Le dossier de telechargement specifie n'est pas valide",
 	"no64Download": "Pas de 64 bits disponibles, telechargement en 32 bits",
 	"no32Download": "Pas de 32 bits disponibles, suivant",
@@ -408,5 +410,7 @@ Cependant, elles sont considerees comme une procedure risquee. Il s'agit general
 	"classicRibbonTip": "Restaure la barre d'options classique de Windows 10 dans l'explorateur de fichiers.",
 	"classicContextTip": "Restaure le menu contextuel classique en supprimant 'Afficher plus d'options'.",
 	"gameModeSw": "Activer le mode jeu",
-	"gameModeTip": "Active le mode Gaming en combinaison avec la planification GPU accélérée par le matériel."
+	"gameModeTip": "Active le mode Gaming en combinaison avec la planification GPU accélérée par le matériel.",
+	"compactModeSw": "Activer le mode compact dans l'explorateur",
+	"compactModeTip": "Réduit l'espace supplémentaire et le rembourrage entre les fichiers dans l'explorateur de fichiers."
 }

+ 6 - 2
Optimizer/Resources/i18n/IT.json

@@ -246,8 +246,10 @@
 	"removeModernApps": "Sei sicuro di voler disinstallare le seguenti app?",
 	"errorModernApps": "Le seguenti applicazioni non possono essere disinstallate:\n",
 	"resetMessage": "Sei sicuro di voler reimpostare la configurazione?\nQuesto reimposterà tutte le tue preferenze, comprese icone estratte\n o scaricate usando l'integratore, ma non toccherà niente sul tuo computer!",
-	"newVersion": "C'è una nuova versione disponibile!\n\nUltima versione: {LATEST}\nVersione attuale: {CURRENT}\n\nVuoi scaricarla adesso?\n\nL'app si riavvierà tra pochi secondi.",
+	"newVersion": "C'è una nuova versione disponibile! Vuoi scaricarla adesso?\nL'app si riavvierà tra pochi secondi.",
 	"downloadsFinished": "Completato",
+	"latestVersionM": "Ultima versione: {LATEST}",
+	"currentVersionM": "Versione attuale: {CURRENT}",
 	"downloadDirInvalid": "La cartella di download specificata non è valida",
 	"no64Download": "64-bit non disponibile, download 32-bit in corso",
 	"no32Download": "32-bit non disponibile, impossibile proseguire",
@@ -406,5 +408,7 @@ Tuttavia, sono considerate procedure rischiose. Sono normalmente una release ogn
 	"classicRibbonTip": "Riprista il menu di Esplora File di Windows 10.",
 	"classicContextTip": "Ripristina il menu contestuale classico, rimuovendo 'Mostra più opzioni'.",
 	"gameModeSw": "Abilita la modalità di gioco",
-	"gameModeTip": "Abilita la modalità di gioco in combinazione con la pianificazione GPU con accelerazione hardware."
+	"gameModeTip": "Abilita la modalità di gioco in combinazione con la pianificazione GPU con accelerazione hardware.",
+	"compactModeSw": "Abilita la modalità compatta in Explorer",
+	"compactModeTip": "Riduce lo spazio aggiuntivo e il riempimento tra i file in Esplora file."
 }

+ 6 - 2
Optimizer/Resources/i18n/KO.json

@@ -254,8 +254,10 @@
 	"removeAllItems": "모든 바탕화면 항목을 삭제하시겠습니까?",
 	"removeModernApps": "다음 앱을 제거하시겠습니까?",
 	"errorModernApps": "다음 앱을 제거할 수 없습니다\n",
+	"latestVersionM": "최신 버전: {LATEST}",
+	"currentVersionM": "현재 버번: {CURRENT}",
 	"resetMessage": "구성을 재설정하시겠습니까?\n이렇게 하면 통합기를 사용하여 압축을 풀거나 다운로드한 아이콘을 포함하여\n모든 기본 설정이 재설정되지만 컴퓨터의 아무 것도 건드리지 않습니다!",
-	"newVersion": "사용 가능한 새 버전이 있습니다!\n\n최신 버전: {LATEST}\n현재 버번: {CURRENT}\n\n지금 다운로드하시겠습니까?\n\n몇 초 후에 앱이 다시 시작됩니다.",
+	"newVersion": "사용 가능한 새 버전이 있습니다! 지금 다운로드하시겠습니까?\n몇 초 후에 앱이 다시 시작됩니다.",
 	"flushDNSMessage": "Windows의 DNS 캐시를 플러시하시겠습니까?\n\n이로 인해 인터넷 연결이 잠시 끊기고 제대로 작동하려면 다시 시작해야 할 수 있습니다.",
 	"downloadsFinished": "마침",
 	"downloadDirInvalid": "지정한 다운로드 폴더가 잘못되었습니다",
@@ -411,5 +413,7 @@ Microsoft 계정 로그인이 필요합니다.",
 	"classicRibbonTip": "Windows 10에서 파일 탐색기의 기존 리본 막대를 복원합니다.",
 	"classicContextTip": "'추가 옵션 표시'를 제거하여 기존 마우스 오른쪽 버튼 메뉴를 복원합니다.",
 	"gameModeSw": "게임 모드 활성화",
-	"gameModeTip": "하드웨어 가속 GPU 스케줄링과 함께 게임 모드를 활성화합니다."
+	"gameModeTip": "하드웨어 가속 GPU 스케줄링과 함께 게임 모드를 활성화합니다.",
+	"compactModeSw": "탐색기에서 압축 모드 활성화",
+	"compactModeTip": "파일 탐색기에서 파일 사이의 추가 공간과 패딩을 줄입니다."
 }

+ 6 - 2
Optimizer/Resources/i18n/PL.json

@@ -254,9 +254,11 @@
 	"removeModernApps": "Jesteś pewien że chcesz odinstalować następujące programy?",
 	"errorModernApps": "Następujące programy nie mogły zostać odinstalowane:\n",
 	"resetMessage": "Jesteś pewien że chcesz zresetować konfigurację?\nSpowoduje to zresetowanie wszystkich ustawień użytkownika, w tym wszystkich ikon rozpakowanych lub pobranych przy użyciu Integratora, ale nie będzie ingerować w nic co zostało zmienione na komputerze!",
-	"newVersion": "Dostępna jest nowsza wersja!\n\nNajnowsza wersja: {LATEST}\nAkutalna wersja: {CURRENT}\n\nCzy chcesz pobrać ją teraz?\n\nProgram uruchomi się ponownie za kilka sekund.",
+	"newVersion": "Dostępna jest nowsza wersja! Czy chcesz pobrać ją teraz?\nProgram uruchomi się ponownie za kilka sekund.",
 	"flushDNSMessage": "Czy na pewno chcesz wyczyścić pamięć podręczną DNS systemu Windows?\n\nSpowoduje to chwilowe odłączenie od Internetu i być może będzie konieczne ponowne uruchomienie komputera, aby połączenie Internetowe mógło działać prawidłowo.",
 	"downloadsFinished": "Gotowe",
+	"latestVersionM": "Najnowsza wersja: {LATEST}",
+	"currentVersionM": "Akutalna wersja: {CURRENT}",
 	"downloadDirInvalid": "Podany folder pobierania jest nieprawidłowy",
 	"no64Download": "Wersja 64-bitowa nie dostępna, pobrano wersję 32-bitową!",
 	"no32Download": "Wersja 32-bitowa nie dostępna, pominięto pobieranie!",
@@ -408,5 +410,7 @@ Są one jednak uważane za ryzykowną procedurę. Zazwyczaj są wydawane co pó
 	"classicRibbonTip": "Przywraca klasyczną wstążkę z systemu Windows 10 w Eksploratorze plików.",
 	"classicContextTip": "Przywraca klasyczne menu kontekstowe, usuwając opcję 'Pokaż więcej opcji'.",
 	"gameModeSw": "Włącz tryb gier",
-	"gameModeTip": "Włącza tryb gier w połączeniu z przyspieszaniem sprzętowym harmonogramu GPU."
+	"gameModeTip": "Włącza tryb gier w połączeniu z przyspieszaniem sprzętowym harmonogramu GPU.",
+	"compactModeSw": "Włącz tryb kompaktowy w Eksploratorze",
+	"compactModeTip": "Zmniejsza dodatkową przestrzeń i dopełnienie między plikami w Eksploratorze plików."
 }

+ 6 - 2
Optimizer/Resources/i18n/PT.json

@@ -256,8 +256,10 @@
 	"removeModernApps": "Tem certeza de que deseja desinstalar os seguintes aplicativos?",
 	"errorModernApps": "Não foi possível desinstalar os seguintes aplicativos:\n",
 	"resetMessage": "Tem certeza de que deseja redefinir a configuração?\nIsso irá redefinir todas as suas preferências, incluindo quaisquer ícones que você extraiu\nou baixado usando o Integrator, mas não vai deletar nada do seu computador!",
-	"newVersion": "Existe uma nova versão disponível!\n\nVersão mais recente: {LATEST}\nVersão instalada no seu PC: {CURRENT}\n\nDeseja fazer o download agora para atualizar?\n\nO aplicativo irá R em alguns segundos.",
+	"newVersion": "Existe uma nova versão disponível! Deseja fazer o download agora para atualizar?\nO aplicativo irá R em alguns segundos.",
 	"downloadsFinished": "Finalizado",
+	"latestVersionM": "Versão mais recente: {LATEST}",
+	"currentVersionM": "Versão instalada: {CURRENT}",
 	"downloadDirInvalid": "A pasta de download especificada não é válida",
 	"no64Download": "Nenhum download disponível para 64-bit, baixando 32-bit",
 	"no32Download": "Nenhum download disponível para 32-bit, pular",
@@ -406,5 +408,7 @@ No entanto, eles são considerados um procedimento arriscado. Geralmente são la
 	"classicRibbonTip": "Restaura a barra de fita clássica do Windows 10 no File Explorer.",
 	"classicContextTip": "Restaura o menu clássico do botão direito, removendo 'Mostrar mais opções'.",
 	"gameModeSw": "Ativar o modo de jogo",
-	"gameModeTip": "Ativa o modo de jogo em combinação com o agendamento de GPU acelerado por hardware."
+	"gameModeTip": "Ativa o modo de jogo em combinação com o agendamento de GPU acelerado por hardware.",
+	"compactModeSw": "Ativar o modo compacto no Explorer",
+	"compactModeTip": "Reduz o espaço extra e o preenchimento entre os arquivos no Explorador de Arquivos."
 }

+ 6 - 2
Optimizer/Resources/i18n/RU.json

@@ -256,8 +256,10 @@
 	"removeModernApps": "Вы уверены, что хотите удалить следующие приложения?",
 	"errorModernApps": "Не удалось удалить следующие приложения:\n",
 	"resetMessage": "Вы уверены, что хотите сбросить конфигурацию?\nЭто сбросит все ваши настройки, включая все значки, которые вы извлекли\nили скачает с помощью Integrator, но ничего не тронет на вашем компьютере!",
-	"newVersion": "Доступна новая версия!\n\nПоследняя версия: {LATEST}\nТекущая версия: {CURRENT}\n\nВы хотите загрузить её сейчас?\n\nПриложение перезапустится через несколько секунд.",
+	"newVersion": "Доступна новая версия! Вы хотите загрузить её сейчас?\nПриложение перезапустится через несколько секунд.",
 	"downloadsFinished": "Готово",
+	"latestVersionM": "Последняя версия: {LATEST}",
+	"currentVersionM": "Текущая версия: {CURRENT}",
 	"downloadDirInvalid": "Указанная папка загрузки недействительна",
 	"no64Download": "64-битная версия недоступна, загружается 32-битная",
 	"no32Download": "32-битная версия недоступна, пропуская",
@@ -411,5 +413,7 @@
 	"classicRibbonTip": "Восстанавливает классическую панель ленты из Windows 10 в проводнике.",
 	"classicContextTip": "Восстанавливает классическое контекстное меню, удаляя «Показать дополнительные параметры».",
 	"gameModeSw": "Включить игровой режим",
-	"gameModeTip": "Включает игровой режим в сочетании с аппаратным ускорением планирования графического процессора."
+	"gameModeTip": "Включает игровой режим в сочетании с аппаратным ускорением планирования графического процессора.",
+	"compactModeSw": "Включить компактный режим в Проводнике",
+	"compactModeTip": "Уменьшает дополнительное пространство и отступы между файлами в проводнике."
 }

+ 6 - 2
Optimizer/Resources/i18n/TR.json

@@ -256,8 +256,10 @@
 	"removeModernApps": "Seçilen uygulamaları kaldırmak istediğinizden emin misiniz?",
 	"errorModernApps": "Seçilen uygulamalar kaldırılamadı:\n",
 	"resetMessage": "Yapılandırmayı sıfırlamak istediğinizden emin misiniz?\nEntegratör'ü kullanarak çıkardığınız veya indirdiğiniz simgeler de dahil olmak üzere tüm tercihlerinizi sıfırlar,\nancak bilgisayarınızdaki hiçbir şeye dokunmaz!",
-	"newVersion": "Yeni bir sürüm mevcut!\n\nEn son sürüm: {LATEST}\nŞimdiki versiyonu: {CURRENT}\n\nŞimdi indirmek istiyor musunuz?\n\nUygulama birkaç saniye içinde yeniden başlayacaktır.",
+	"newVersion": "Yeni bir sürüm mevcut! Şimdi indirmek istiyor musunuz?\nUygulama birkaç saniye içinde yeniden başlayacaktır.",
 	"downloadsFinished": "Tamamlandı",
+	"latestVersionM": "En son sürüm: {LATEST}",
+	"currentVersionM": "Şimdiki versiyonu: {CURRENT}",
 	"downloadDirInvalid": "Belirtilen indirme klasörü geçerli değil",
 	"no64Download": "64 bit mevcut değil, 32 bit indiriliyor",
 	"no32Download": "32 bit mevcut değil, atlanıyor",
@@ -409,5 +411,7 @@ Ancak, riskli bir prosedür olarak kabul edilirler. Genellikle altı aylık yay
 	"classicRibbonTip": "Dosya Gezgini'nde Windows 10'dan klasik şerit çubuğunu geri yükler.",
 	"classicContextTip": "'Daha fazla seçenek göster' seçeneğini kaldırarak klasik sağ tıklama menüsünü geri yükler.",
 	"gameModeSw": "Oyun Modunu Etkinleştir",
-	"gameModeTip": "Donanım hızlandırmalı GPU zamanlaması ile birlikte Oyun modunu etkinleştirir."
+	"gameModeTip": "Donanım hızlandırmalı GPU zamanlaması ile birlikte Oyun modunu etkinleştirir.",
+	"compactModeSw": "Explorer'da Kompakt Modu Etkinleştir",
+	"compactModeTip": "Dosya Gezgini'ndeki dosyalar arasındaki fazladan boşluğu ve dolguyu azaltır."
 }

+ 6 - 2
Optimizer/Resources/i18n/TW.json

@@ -258,7 +258,9 @@
 	"removeModernApps": "您確定要解除安裝以下應用程式嗎??",
 	"errorModernApps": "以下應用程式無法解除安裝:\n",
 	"resetMessage": "您確定要重設配置嗎?\n這將重設所有您的首選項,包括您提取的任何圖示\n或使用Integrator下載,但不會變更您的計算機上的任何東西!",
-	"newVersion": "有一個新的版本可用!\n\n最新版本: {LATEST}\n當前版本: {CURRENT}\n\n你想現在下載嗎?\n\n應用程式將在幾秒鐘內重新啟動.",
+	"newVersion": "有一個新的版本可用! 你想現在下載嗎?\n應用程式將在幾秒鐘內重新啟動.",
+	"latestVersionM": "n最新版本: {LATEST}",
+	"currentVersionM": "n當前版本: {CURRENT}",
 	"downloadsFinished": "完成",
 	"downloadDirInvalid": "指定的下載資料夾無效",
 	"no64Download": "沒有64位可用,正在下載32位",
@@ -409,5 +411,7 @@
 	"classicRibbonTip": "在文件資源管理器中恢復Windows 10的經典色帶條.",
 	"classicContextTip": "恢復經典的右鍵選單,而不是 Windows 11 的新選單.",
 	"gameModeSw": "啟用遊戲模式",
-	"gameModeTip": "結合硬件加速 GPU 調度啟用遊戲模式。"
+	"gameModeTip": "結合硬件加速 GPU 調度啟用遊戲模式。",
+	"compactModeSw": "在資源管理器中啟用緊湊模式",
+	"compactModeTip": "減少文件資源管理器中文件之間的額外空間和填充。"
 }

+ 1 - 0
Optimizer/SilentConfig.cs

@@ -59,5 +59,6 @@ namespace Optimizer
         public bool? ClassicRibbon { get; set; }
         public bool? ClassicMenu { get; set; }
         public bool? DisableTPMCheck { get; set; }
+        public bool? CompactMode { get; set; }
     }
 }

+ 16 - 0
Optimizer/SilentOps.cs

@@ -533,6 +533,18 @@ namespace Optimizer
                 }
             }
 
+            if (CurrentSilentConfig.CompactMode.HasValue)
+            {
+                if (CurrentSilentConfig.CompactMode.Value)
+                {
+                    Optimize.EnableFilesCompactMode();
+                }
+                else
+                {
+                    Optimize.DisableFilesCompactMode();
+                }
+            }
+
             if (CurrentSilentConfig.DisableSnapAssist.HasValue)
             {
                 if (CurrentSilentConfig.DisableSnapAssist.Value)
@@ -709,6 +721,10 @@ namespace Optimizer
             {
                 Options.CurrentOptions.TaskbarToLeft = CurrentSilentConfig.TaskbarToLeft.Value;
             }
+            if (CurrentSilentConfig.CompactMode.HasValue)
+            {
+                Options.CurrentOptions.CompactMode = CurrentSilentConfig.CompactMode.Value;
+            }
             if (CurrentSilentConfig.DisableSnapAssist.HasValue)
             {
                 Options.CurrentOptions.DisableSnapAssist = CurrentSilentConfig.DisableSnapAssist.Value;

+ 4 - 4
README.md

@@ -10,7 +10,7 @@ Optimizer is recommended after a fresh, clean installation of Windows to achieve
 
 Depending on your version of Windows, Optimizer will also allow you to perform some specific tweaks.
 <p align="center">
-	<a href="https://github.com/hellzerg/optimizer/releases/download/12.9/Optimizer-12.9.exe" target="_blank">
+	<a href="https://github.com/hellzerg/optimizer/releases/download/13.0/Optimizer-13.0.exe" target="_blank">
 		<img src="https://raw.githubusercontent.com/hellzerg/optimizer/master/download-button.png">
 		<br>
 		<img src="https://raw.githubusercontent.com/hellzerg/optimizer/master/flags.png">
@@ -93,6 +93,6 @@ https://github.com/hellzerg/optimizer/blob/master/FEED.md
 
 ## Details: ##
 
-* Latest version: 12.9
-* Released: May 3, 2022
-* SHA256: 21D2A3719D7023B150D07C2B42FF7AC281569B94CB173E3AA9DC7DBCDE46DA4A
+* Latest version: 13.0
+* Released: May 4, 2022
+* SHA256: BF1227C89A073C92C0901AF7FA0AB541597F869E4F2F6A0BFF2A8A1B89EC67FA

+ 1 - 0
confs/win11.conf

@@ -44,6 +44,7 @@
   "ClassicRibbon": false,
   "ClassicMenu": false,
   "DisableTPMCheck": false,
+  "CompactMode": false,
   "DisableVisualStudioTelemetry": false,
   "DisableFirefoxTemeletry": false,
   "DisableChromeTelemetry": false

+ 1 - 1
version.txt

@@ -1 +1 @@
-12.9
+13.0

Some files were not shown because too many files changed in this diff