Browse Source

Major update to v15.5

deadmoon 1 year ago
parent
commit
283461e40f

+ 10 - 0
CHANGELOG.md

@@ -1,3 +1,13 @@
+## [15.5] - 2023-07-22
+- New: Fully translated into Persian/Farsi (thanks to https://github.com/MjavadH - MjavadH)
+- New: RustDesk in Apps > Internet section
+- New: Confirmation before restarting (#343)
+- New: Include WWW CNAME prefix in Hosts
+- Improved: Various localization updates
+- Improved: Error logger now supports unhandled exceptions
+- Improved: UI on low resolution displays
+- Improved: Default app downloads folder set to user's downloads folder
+
 ## [15.4] - 2023-06-14
 - New: Restore Classic Photo Viewer in Windows 10/11 (#342)
 - Hotfix: Addressed various UI glitches

+ 1 - 1
Optimizer/CleanHelper.cs

@@ -150,7 +150,7 @@ namespace Optimizer
                     if (Directory.Exists(x)) Directory.Delete(x);
                     if (File.Exists(x)) File.Delete(x);
                 }
-                catch { }
+                catch { continue; }
             }
         }
 

+ 37 - 0
Optimizer/Constants.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Optimizer
+{
+    internal static class Constants
+    {
+        internal static string DOWNLOADS_FOLDER = "OptimizerDownloads";
+
+        internal static string ENGLISH = "English";
+        internal static string RUSSIAN = "Русский";
+        internal static string TURKISH = "Türkçe";
+        internal static string HELLENIC = "Ελληνικά";
+        internal static string GERMAN = "Deutsch";
+        internal static string PORTUGUESE = "Português";
+        internal static string FRENCH = "Français";
+        internal static string SPANISH = "Español";
+        internal static string ITALIAN = "Italiano";
+        internal static string CHINESE = "简体中文";
+        internal static string TAIWANESE = "繁體中文";
+        internal static string CZECH = "Čeština";
+        internal static string KOREAN = "한국어";
+        internal static string POLISH = "Polski";
+        internal static string ARABIC = "العربية";
+        internal static string KURDISH = "کوردی";
+        internal static string HUNGARIAN = "Magyar";
+        internal static string ROMANIAN = "Română";
+        internal static string DUTCH = "Nederlands";
+        internal static string UKRAINIAN = "українська";
+        internal static string JAPANESE = "日本語";
+        internal static string PERSIAN = "فارسی";
+    }
+}

+ 10 - 0
Optimizer/Enums.cs

@@ -109,4 +109,14 @@
         JA, // japanese
         FA //farsi
     }
+
+    public enum KnownFolder
+    {
+        Contacts,
+        Downloads,
+        Favorites,
+        Links,
+        SavedGames,
+        SavedSearches
+    }
 }

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


+ 86 - 54
Optimizer/Forms/MainForm.cs

@@ -30,7 +30,7 @@ namespace Optimizer
         List<string> _hostsEntries = new List<string>();
         List<string> _customCommands = new List<string>();
         List<string> _desktopItems = new List<string>();
-        List<KeyValuePair<string, string>> _modernApps = new List<KeyValuePair<string, string>>();
+        Dictionary<string, string> _modernApps = new Dictionary<string, string>();
 
         bool _trayMenu = false;
 
@@ -59,6 +59,9 @@ namespace Optimizer
         //readonly string _changelogLink = "https://github.com/hellzerg/optimizer/blob/master/CHANGELOG.md";
         readonly string _changelogRawLink = "https://raw.githubusercontent.com/hellzerg/optimizer/master/CHANGELOG.md";
 
+        readonly string _bugReportLink = "https://github.com/hellzerg/optimizer/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=";
+        readonly string _featureRequestLink = "https://github.com/hellzerg/optimizer/issues/new?assignees=&labels=&projects=&template=feature_request.md&title=";
+
         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.";
@@ -771,7 +774,7 @@ namespace Optimizer
             Options.CurrentOptions.DisableFaxService = faxSw.ToggleChecked;
         }
 
-        //INIT
+        //ROOT
         public MainForm(SplashForm _splashForm, bool disableIndicium = false, bool disableHostsEditor = false, bool disableCommonApps = false, bool disableUWPApps = false, bool disableStartups = false, bool disableCleaner = false, bool disableIntegrator = false, bool disablePinger = false)
         {
             InitializeComponent();
@@ -1020,8 +1023,8 @@ namespace Optimizer
 
             if (string.IsNullOrEmpty(Options.CurrentOptions.AppsFolder))
             {
-                txtDownloadFolder.Text = Path.Combine(Application.StartupPath, "OptimizerDownloads");
-                Options.CurrentOptions.AppsFolder = Path.Combine(Application.StartupPath, "OptimizerDownloads");
+                Options.CurrentOptions.AppsFolder = Path.Combine(KnownFolders.GetPath(KnownFolder.Downloads), Constants.DOWNLOADS_FOLDER);
+                txtDownloadFolder.Text = Options.CurrentOptions.AppsFolder;
                 Directory.CreateDirectory(Options.CurrentOptions.AppsFolder);
                 Options.SaveSettings();
             }
@@ -1164,7 +1167,7 @@ namespace Optimizer
         {
             if (Options.CurrentOptions.LanguageCode == LanguageCode.EN)
             {
-                boxLang.Text = "English";
+                boxLang.Text = Constants.ENGLISH;
                 Translate(true);
             }
             else
@@ -1175,87 +1178,87 @@ namespace Optimizer
             // set default window size to fit content
             if (Options.CurrentOptions.LanguageCode == LanguageCode.RU)
             {
-                boxLang.Text = "Русский";
+                boxLang.Text = Constants.RUSSIAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.TR)
             {
-                boxLang.Text = "Türkçe";
+                boxLang.Text = Constants.TURKISH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.EL)
             {
-                boxLang.Text = "Ελληνικά";
+                boxLang.Text = Constants.HELLENIC;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.DE)
             {
-                boxLang.Text = "Deutsch";
+                boxLang.Text = Constants.GERMAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.PT)
             {
-                boxLang.Text = "Português";
+                boxLang.Text = Constants.PORTUGUESE;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.FR)
             {
-                boxLang.Text = "Français";
+                boxLang.Text = Constants.FRENCH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.ES)
             {
-                boxLang.Text = "Español";
+                boxLang.Text = Constants.SPANISH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.IT)
             {
-                boxLang.Text = "Italiano";
+                boxLang.Text = Constants.ITALIAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.CN)
             {
-                boxLang.Text = "简体中文";
+                boxLang.Text = Constants.CHINESE;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.TW)
             {
-                boxLang.Text = "繁體中文";
+                boxLang.Text = Constants.TAIWANESE;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.CZ)
             {
-                boxLang.Text = "Čeština";
+                boxLang.Text = Constants.CZECH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.KO)
             {
-                boxLang.Text = "한국어";
+                boxLang.Text = Constants.KOREAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.PL)
             {
-                boxLang.Text = "Polski";
+                boxLang.Text = Constants.POLISH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.AR)
             {
-                boxLang.Text = "العربية";
+                boxLang.Text = Constants.ARABIC;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.KU)
             {
-                boxLang.Text = "کوردی";
+                boxLang.Text = Constants.KURDISH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.HU)
             {
-                boxLang.Text = "Magyar";
+                boxLang.Text = Constants.HUNGARIAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.RO)
             {
-                boxLang.Text = "Română";
+                boxLang.Text = Constants.ROMANIAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.NL)
             {
-                boxLang.Text = "Nederlands";
+                boxLang.Text = Constants.DUTCH;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.UA)
             {
-                boxLang.Text = "українська";
+                boxLang.Text = Constants.UKRAINIAN;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.JA)
             {
-                boxLang.Text = "日本語";
+                boxLang.Text = Constants.JAPANESE;
             }
             if (Options.CurrentOptions.LanguageCode == LanguageCode.FA)
             {
-                boxLang.Text = "فارسی";
+                boxLang.Text = Constants.PERSIAN;
             }
         }
 
@@ -2592,6 +2595,11 @@ namespace Optimizer
                 string domain = txtDomain.Text.Trim();
 
                 HostsHelper.AddEntry(HostsHelper.SanitizeEntry(ip) + " " + HostsHelper.SanitizeEntry(domain));
+                if (chkIncludeWww.Checked)
+                {
+                    domain = $"www.{domain}";
+                    HostsHelper.AddEntry(HostsHelper.SanitizeEntry(ip) + " " + HostsHelper.SanitizeEntry(domain));
+                }
 
                 GetHostsEntries();
 
@@ -3526,9 +3534,7 @@ namespace Optimizer
             addHostB.Enabled = !chkReadOnly.Checked;
             removeAllHostsB.Enabled = !chkReadOnly.Checked;
             removeHostB.Enabled = !chkReadOnly.Checked;
-            refreshHostsB.Enabled = !chkReadOnly.Checked;
             linkRestoreDefault.Enabled = !chkReadOnly.Checked;
-            chkBlock.Enabled = !chkReadOnly.Checked;
             txtDomain.Enabled = !chkReadOnly.Checked;
             txtIP.Enabled = !chkReadOnly.Checked;
 
@@ -4283,112 +4289,112 @@ namespace Optimizer
 
         private void boxLang_SelectedIndexChanged(object sender, EventArgs e)
         {
-            if (boxLang.Text == "English")
+            if (boxLang.Text == Constants.ENGLISH)
             {
                 picFlag.Image = Properties.Resources.united_kingdom;
                 Options.CurrentOptions.LanguageCode = LanguageCode.EN;
             }
-            else if (boxLang.Text == "Русский")
+            else if (boxLang.Text == Constants.RUSSIAN)
             {
                 picFlag.Image = Properties.Resources.russia;
                 Options.CurrentOptions.LanguageCode = LanguageCode.RU;
             }
-            else if (boxLang.Text == "Ελληνικά")
+            else if (boxLang.Text == Constants.HELLENIC)
             {
                 picFlag.Image = Properties.Resources.greece;
                 Options.CurrentOptions.LanguageCode = LanguageCode.EL;
             }
-            else if (boxLang.Text == "Deutsch")
+            else if (boxLang.Text == Constants.GERMAN)
             {
                 picFlag.Image = Properties.Resources.germany;
                 Options.CurrentOptions.LanguageCode = LanguageCode.DE;
             }
-            else if (boxLang.Text == "Italiano")
+            else if (boxLang.Text == Constants.ITALIAN)
             {
                 picFlag.Image = Properties.Resources.italy;
                 Options.CurrentOptions.LanguageCode = LanguageCode.IT;
             }
-            else if (boxLang.Text == "Čeština")
+            else if (boxLang.Text == Constants.CZECH)
             {
                 picFlag.Image = Properties.Resources.czech;
                 Options.CurrentOptions.LanguageCode = LanguageCode.CZ;
             }
-            else if (boxLang.Text == "Türkçe")
+            else if (boxLang.Text == Constants.TURKISH)
             {
                 picFlag.Image = Properties.Resources.turkey;
                 Options.CurrentOptions.LanguageCode = LanguageCode.TR;
             }
-            else if (boxLang.Text == "Español")
+            else if (boxLang.Text == Constants.SPANISH)
             {
                 picFlag.Image = Properties.Resources.spain;
                 Options.CurrentOptions.LanguageCode = LanguageCode.ES;
             }
-            else if (boxLang.Text == "Português")
+            else if (boxLang.Text == Constants.PORTUGUESE)
             {
                 picFlag.Image = Properties.Resources.brazil;
                 Options.CurrentOptions.LanguageCode = LanguageCode.PT;
             }
-            else if (boxLang.Text == "Français")
+            else if (boxLang.Text == Constants.FRENCH)
             {
                 picFlag.Image = Properties.Resources.france;
                 Options.CurrentOptions.LanguageCode = LanguageCode.FR;
             }
-            else if (boxLang.Text == "简体中文")
+            else if (boxLang.Text == Constants.CHINESE)
             {
                 picFlag.Image = Properties.Resources.china;
                 Options.CurrentOptions.LanguageCode = LanguageCode.CN;
             }
-            else if (boxLang.Text == "繁體中文")
+            else if (boxLang.Text == Constants.TAIWANESE)
             {
                 picFlag.Image = Properties.Resources.taiwan;
                 Options.CurrentOptions.LanguageCode = LanguageCode.TW;
             }
-            else if (boxLang.Text == "한국어")
+            else if (boxLang.Text == Constants.KOREAN)
             {
                 picFlag.Image = Properties.Resources.korea;
                 Options.CurrentOptions.LanguageCode = LanguageCode.KO;
             }
-            else if (boxLang.Text == "Polski")
+            else if (boxLang.Text == Constants.POLISH)
             {
                 picFlag.Image = Properties.Resources.poland;
                 Options.CurrentOptions.LanguageCode = LanguageCode.PL;
             }
-            else if (boxLang.Text == "العربية")
+            else if (boxLang.Text == Constants.ARABIC)
             {
                 picFlag.Image = Properties.Resources.egypt;
                 Options.CurrentOptions.LanguageCode = LanguageCode.AR;
             }
-            else if (boxLang.Text == "کوردی")
+            else if (boxLang.Text == Constants.KURDISH)
             {
                 picFlag.Image = Properties.Resources.kurdish;
                 Options.CurrentOptions.LanguageCode = LanguageCode.KU;
             }
-            else if (boxLang.Text == "Magyar")
+            else if (boxLang.Text == Constants.HUNGARIAN)
             {
                 picFlag.Image = Properties.Resources.hungary;
                 Options.CurrentOptions.LanguageCode = LanguageCode.HU;
             }
-            else if (boxLang.Text == "Română")
+            else if (boxLang.Text == Constants.ROMANIAN)
             {
                 picFlag.Image = Properties.Resources.romania;
                 Options.CurrentOptions.LanguageCode = LanguageCode.RO;
             }
-            else if (boxLang.Text == "Nederlands")
+            else if (boxLang.Text == Constants.DUTCH)
             {
                 picFlag.Image = Properties.Resources.dutch;
                 Options.CurrentOptions.LanguageCode = LanguageCode.NL;
             }
-            else if (boxLang.Text == "українська")
+            else if (boxLang.Text == Constants.UKRAINIAN)
             {
                 picFlag.Image = Properties.Resources.ukraine;
                 Options.CurrentOptions.LanguageCode = LanguageCode.UA;
             }
-            else if (boxLang.Text == "日本語")
+            else if (boxLang.Text == Constants.JAPANESE)
             {
                 picFlag.Image = Properties.Resources.japan;
                 Options.CurrentOptions.LanguageCode = LanguageCode.JA;
             }
-            else if (boxLang.Text == "فارسی")
+            else if (boxLang.Text == Constants.PERSIAN)
             {
                 picFlag.Image = Properties.Resources.iran;
                 Options.CurrentOptions.LanguageCode = LanguageCode.FA;
@@ -4408,6 +4414,15 @@ namespace Optimizer
 
         private void checkSelectAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
+            if (listCleanPreview.Items.Count < 1)
+            {
+                foreach (CheckBox x in panel1.Controls.OfType<CheckBox>())
+                {
+                    x.Checked = !x.Checked;
+                }
+                return;
+            }
+
             _cleanSelectAll = !_cleanSelectAll;
             for (int i = 0; i < listCleanPreview.Items.Count; i++)
             {
@@ -4671,8 +4686,7 @@ namespace Optimizer
 
         private void picRestartNeeded_Click(object sender, EventArgs e)
         {
-            Options.SaveSettings();
-            Utilities.Reboot();
+            ConfirmAndReboot();
         }
 
         private void ShowRestartNeeded()
@@ -4703,8 +4717,7 @@ namespace Optimizer
 
         private void restartAndApply_Click(object sender, EventArgs e)
         {
-            Options.SaveSettings();
-            Utilities.Reboot();
+            ConfirmAndReboot();
         }
 
         private void colorPicker1_ColorChanged(object sender, EventArgs e)
@@ -4761,5 +4774,24 @@ namespace Optimizer
             Microsoft.Win32.Registry.SetValue(@"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce", "*OptimizerDisableDefender", Assembly.GetExecutingAssembly().Location + " /silentdisabledefender", Microsoft.Win32.RegistryValueKind.String);
             Program.RestartInSafeMode();
         }
+
+        private void ConfirmAndReboot()
+        {
+            if (MessageBox.Show(_uwpRestoreMessage, "Optimizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
+            {
+                Options.SaveSettings();
+                Utilities.Reboot();
+            }
+        }
+
+        private void linkLabel4_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+            Process.Start(_bugReportLink);
+        }
+
+        private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+        {
+            Process.Start(_featureRequestLink);
+        }
     }
 }

+ 28 - 1
Optimizer/Forms/MainForm.resx

@@ -153,6 +153,33 @@
         bxL3sceReHrs9kjcxx5H4umx2yNxH3sciafHbo/EfexxJJ4euz0S97HHkXh67PZI3MceR+LpsdsjcR97
         HImnx26PxH3scSSeHrs9Evexx5F4euz2SNzHHm8yMi128yYjfexxBan3GLbgzFLrcWzJmaXWc9iiM0qd
         MWzhmaTGfmz5zHL2YrFYLH7mcnkHBniDBBEQJcMAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="pictureBox6.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        wQAADsEBuJFr7QAAAXJJREFUaEPtz0FuIzEMBED//9MJMCgQURR5yBF34YPq5ha7bb+O4zg+39cNZ5/J
+        b7zlfOI5RaWP3TS1gacUlR42S1QHnlJUetgsUw/iFJUeNsvUg/hPTv4N31GmHsRLzvrZL1MP4rec9rJd
+        ph7El9+ff7qOO9ktUw/ii+j//AmbJaoDTxfRRTTx3MNmisrE80UUxANPfey+5fQREwNPvWxPPD9mZuCp
+        n/0g3mYuiPvZD+Jt5oK4n/0g3mYuiPvZD+Jt5oK4n/0g3mYuiPvZD+Jt5oK4n/0g3mYuiPvZD+Jt5oK4
+        l+2J58fMTDzvs/eW0zL1t5w+YyNFJU0tRaVGt0T1lvMS1Ty9gaeLaOJ5yVmZep5eEA88DTwtOStTz9ML
+        4onnIF5yVqaepxfEE89BvOSsTD1PL4gnnoN4yVmZep7ewFMQDzwtOStTz9MrUb3lvES1RjdN7ZbzNLVn
+        bNxynqZ2y/keW0vOytSXnB3HcXys1+sbU0gKg8uLU5AAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="pictureBox5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        wQAADsEBuJFr7QAAAgBJREFUaEPlz1Fu3DAMBcDc/9ItoExpsLRsUfFmG3Q+3yNp+eO/9muR8X+Lty2x
+        sszaIHoN37hlfJm1QfQ6vnPJ6BIrQfy9fDuILxkt1N/Ltx/l9Ov53kv4RI/dIC7Uj3Dy9KbqmtkpY0H8
+        KKd7b5HdMt7+0b8ZmzJ2OWfkk+zW3ew41mCtUD//AzPOtFlfZq3H7ikjW5xYZm2PG4lqixMtVvvsJ6ot
+        TrRY7bOfqLY4Uagf/145KN7iRKEeRImqz34Qb3GiUCeqIO6xm6jarBfqQh3EPXaDuM16oT5lJIjX2Qvi
+        NuuFespYEM+ZmzLWYjVR3TIexOfMTBlbZq1QL7ESxJX+ktElVgr1Eiu3lobH0CIrhXqZtSWP/YDxQt1i
+        dYmVgzyILxkt1C1WE9UgCuKDfBBdMlqo26wHcRAH8UE+iKaMFeo264kqiIP4IB9Ep4wkqi1OJKpEFcQH
+        +SAq1IlqmzOJKlEF8SdZECeqRLXNmURVqIP4IB9EQZyotjhRqE8ZGUSZLpxlf4yFTU4U6n3u3DK+xYlL
+        RvvsXzLaZn2ZtT77p4y0WJ2azYzlHfYL9TJrU8YS1SDa48aUsSBeYqVQB/E+dx7j7JSxIP46977EqUtG
+        g/g57m5zZspYEL+PdwTxlLFB9F7eEsRTxgbRe3lLEP8M3hzEP4d3B/HDPj5+A7KDH5iJTSF/AAAAAElF
+        TkSuQmCC
 </value>
   </data>
   <data name="pictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -722,7 +749,7 @@ any application only by typing your desired keyword.</value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC0
-        GgAAAk1TRnQBSQFMAgEBCQEAAXgBDgF4AQ4BIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
+        GgAAAk1TRnQBSQFMAgEBCQEAAagBDgGoAQ4BIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
         AwABYAMAAQEBAAEgBgABwP8A/wD/AP8A/wD/AP8A/wAeAANHAYB0//8AiQADRwGAdP//AIkAAyoBQANH
         AYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANH
         AYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGA/wD/AP8A

+ 6 - 2
Optimizer/HostsHelper.cs

@@ -202,8 +202,12 @@ namespace Optimizer
         {
             try
             {
-                comment = (!string.IsNullOrEmpty(comment)) ? $"#{comment}" : string.Empty;
-                File.AppendAllText(HostsFile, NewLine + $"{entry} {comment}");
+                if (string.IsNullOrEmpty(comment))
+                {
+                    File.AppendAllText(HostsFile, NewLine + $"{entry}");
+                    return;
+                }
+                File.AppendAllText(HostsFile, NewLine + $"{entry} #{comment}");
             }
             catch (Exception ex)
             {

+ 2 - 0
Optimizer/Optimizer.csproj

@@ -201,6 +201,7 @@
     <Compile Include="Forms\MainForm.Designer.cs">
       <DependentUpon>MainForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="Constants.cs" />
     <Compile Include="NetworkAdapter.cs" />
     <Compile Include="NetworkMonitor.cs" />
     <Compile Include="OptimizeHelper.cs" />
@@ -240,6 +241,7 @@
     <Compile Include="TelemetryData.cs" />
     <Compile Include="TelemetryHelper.cs" />
     <Compile Include="TokenPrivilege.cs" />
+    <Compile Include="UserFoldersHelper.cs" />
     <Compile Include="Utilities.cs" />
     <Compile Include="UWPHelper.cs" />
     <EmbeddedResource Include="Controls\ToggleCard.resx">

+ 2 - 1
Optimizer/Options.cs

@@ -216,8 +216,9 @@ namespace Optimizer
                 else
                 {
                     // DEFAULT OPTIONS
+                    
                     CurrentOptions.Theme = Color.FromArgb(153, 102, 204);
-                    CurrentOptions.AppsFolder = Path.Combine(Application.StartupPath, "OptimizerDownloads");
+                    CurrentOptions.AppsFolder = Path.Combine(KnownFolders.GetPath(KnownFolder.Downloads), Constants.DOWNLOADS_FOLDER);
                     Directory.CreateDirectory(Options.CurrentOptions.AppsFolder);
                     CurrentOptions.EnableTray = false;
                     CurrentOptions.AutoStart = false;

+ 8 - 1
Optimizer/Program.cs

@@ -14,7 +14,7 @@ namespace Optimizer
         /* DO NOT LEAVE THEM EMPTY */
 
         internal readonly static float Major = 15;
-        internal readonly static float Minor = 4;
+        internal readonly static float Minor = 5;
 
         internal readonly static bool EXPERIMENTAL_BUILD = false;
         internal static bool SILENT_MODE = false;
@@ -63,6 +63,7 @@ namespace Optimizer
         {
             EmbeddedAssembly.Load(_jsonAssembly, _jsonAssembly.Replace("Optimizer.", string.Empty));
             AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
+            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
 
             DPI_PREFERENCE = Convert.ToInt32(Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager", "LastLoadedDPI", "96"));
             if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware();
@@ -271,6 +272,12 @@ namespace Optimizer
             }
         }
 
+        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+        {
+            Exception error = (Exception)e.ExceptionObject;
+            ErrorLogger.LogError("[Program.Main-UnhandledException]", error.Message, error.StackTrace);
+        }
+
         private static void LoadSettings()
         {
             // for backward compatibility (legacy)

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

@@ -440,8 +440,8 @@
 	"btnRestoreUwp": "恢复所有 UWP",
 	"restoreUwpMessage": "你确定要这么做吗?",
 	"telemetrySvcToggle": "禁用优化器遥测",
-	"edgeAiSw": "禁用边缘发现",
-	"edgeTelemetrySw": "禁用边缘遥测",
+	"edgeAiSw": "禁用 Edge 发现栏",
+	"edgeTelemetrySw": "禁用 Edge 遥测",
 	"edgeAiTip": "删除 Edge 中的发现栏。",
 	"edgeTelemetryTip": "在 Edge 中禁用 SmartScreen、Spotlight 和遥测服务。",
 	"hpetSw": "禁用 HPET",

+ 3 - 3
Optimizer/UWPHelper.cs

@@ -6,9 +6,9 @@ namespace Optimizer
 {
     internal static class UWPHelper
     {
-        internal static List<KeyValuePair<string, string>> GetUWPApps(bool showAll)
+        internal static Dictionary<string, string> GetUWPApps(bool showAll)
         {
-            List<KeyValuePair<string, string>> modernApps = new List<KeyValuePair<string, string>>();
+            Dictionary<string, string> modernApps = new Dictionary<string, string>();
             if (Utilities.CurrentWindowsVersion == WindowsVersion.Windows8)
             {
                 showAll = true;
@@ -41,7 +41,7 @@ namespace Optimizer
                 foreach (PSObject x in psResult)
                 {
                     tmp = x.ToString().Replace("@", string.Empty).Replace("{", string.Empty).Replace("}", string.Empty).Replace("Name=", string.Empty).Replace("InstallLocation=", string.Empty).Trim().Split(';');
-                    modernApps.Add(new KeyValuePair<string, string>(tmp[0], tmp[1]));
+                    modernApps.Add(tmp[0], tmp[1]);
                 }
             }
 

+ 33 - 0
Optimizer/UserFoldersHelper.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Optimizer
+{
+    internal static class KnownFolders
+    {
+        private static readonly Dictionary<KnownFolder, Guid> _guids = new Dictionary<KnownFolder, Guid>
+        {
+            [KnownFolder.Contacts] = new Guid("56784854-C6CB-462B-8169-88E350ACB882"),
+            [KnownFolder.Downloads] = new Guid("374DE290-123F-4565-9164-39C4925E467B"),
+            [KnownFolder.Favorites] = new Guid("1777F761-68AD-4D8A-87BD-30B759FA33DD"),
+            [KnownFolder.Links] = new Guid("BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968"),
+            [KnownFolder.SavedGames] = new Guid("4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4"),
+            [KnownFolder.SavedSearches] = new Guid("7D1D3A04-DEBB-4115-95CF-2F29DA2920DA")
+        };
+
+        internal static string GetPath(KnownFolder knownFolder)
+        {
+            return SHGetKnownFolderPath(_guids[knownFolder], 0);
+        }
+
+        [DllImport("shell32",
+            CharSet = CharSet.Unicode, ExactSpelling = true, PreserveSig = false)]
+        private static extern string SHGetKnownFolderPath(
+            [MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags,
+            uint hToken = 0);
+    }
+}

+ 4 - 4
README.md

@@ -3,7 +3,7 @@
 </p>
 
 <p align="center">
-	<a href="https://github.com/hellzerg/optimizer/releases/download/15.4/Optimizer-15.4.exe" target="_blank">
+	<a href="https://github.com/hellzerg/optimizer/releases/download/15.5/Optimizer-15.5.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">
@@ -106,9 +106,9 @@ https://github.com/hellzerg/optimizer/blob/master/LEGACY.md
 
 ### 📊 Details:
 
-- Latest version: 15.4
-- Released: June 14, 2023
-- SHA256: B62AB6E0FABFC3E58B7AF5777FB4BDBC5FDD807F4A44F7CF91DBF9518721F2B1
+- Latest version: 15.5
+- Released: July 22, 2023
+- SHA256: 94531808191C84249AFD12B983424CA43B688D0C2822E15F30E2BF1ADF8304BA
 
 <hr>
 

File diff suppressed because it is too large
+ 0 - 0
feed.json


BIN
images/feed.zip


BIN
images/feed/rustdesk.png


+ 1 - 1
version.txt

@@ -1 +1 @@
-15.4
+15.5

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