CleanHelper.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. namespace Optimizer
  7. {
  8. internal static class CleanHelper
  9. {
  10. [DllImport("Shell32.dll")]
  11. static extern int SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlag dwFlags);
  12. // SYSTEM FOLDERS
  13. internal static readonly string System32Folder = Environment.GetFolderPath(Environment.SpecialFolder.System);
  14. internal static readonly string TempFolder = Path.GetTempPath();
  15. internal static readonly string ProfileAppDataRoaming = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
  16. internal static readonly string ProgramData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
  17. internal static readonly string ProfileAppDataLocal = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
  18. //internal static readonly string ProfileAppDataLocalLow = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "Low";
  19. //internal static readonly string OSDrive = System32Folder.Substring(0, 3);
  20. internal static readonly string OSDriveWindows = Environment.GetEnvironmentVariable("WINDIR", EnvironmentVariableTarget.Machine);
  21. // INTERNET EXPLORER CACHE
  22. static string[] ieCache =
  23. {
  24. Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\INetCache\\IE"),
  25. Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WebCache.old")
  26. };
  27. // CHROME FOLDERS
  28. static string chromeFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData\\Local\\Google\\Chrome\\User Data");
  29. static string[] chromeUserDataCacheDirs = { "Default\\Cache", "Default\\Code Cache\\", "Default\\GPUCache\\", "ShaderCache", "Default\\Service Worker\\CacheStorage\\", "Default\\Service Worker\\ScriptCache\\", "GrShaderCache\\GPUCache\\", "Default\\File System\\", "Default\\JumpListIconsMostVisited\\", "Default\\JumpListIconsRecentClosed\\", "Default\\Service Worker\\Database" };
  30. static string chromePasswordsDir = Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\Login Data");
  31. static string[] chromeSessionDirs =
  32. {
  33. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\Sessions"),
  34. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\Session Storage"),
  35. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\Extension State"),
  36. };
  37. static string[] chromeCookiesDirs =
  38. {
  39. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\IndexedDB"),
  40. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\Cookies"),
  41. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\Cookies-journal")
  42. };
  43. static string[] chromeHistoryDirs =
  44. {
  45. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\History"),
  46. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\History Provider Cache"),
  47. Path.Combine(ProfileAppDataLocal, "Google\\Chrome\\User Data\\Default\\History-journal")
  48. };
  49. // FIREFOX FOLDERS
  50. static string firefoxRoaming = Path.Combine(ProfileAppDataRoaming, "Mozilla\\Firefox\\Profiles");
  51. static string firefoxLocal = Path.Combine(ProfileAppDataLocal, "Mozilla\\Firefox\\Profiles");
  52. // EDGE FOLDERS
  53. static string edgeHistory = Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\History");
  54. static string[] edgeCookies =
  55. {
  56. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Cookies"),
  57. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\IndexedDB")
  58. };
  59. static string[] edgeSession =
  60. {
  61. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Sessions"),
  62. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Session Storage"),
  63. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Extension State")
  64. };
  65. static string[] edgeCache =
  66. {
  67. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Cache"),
  68. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Code Cache"),
  69. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\GPUCache"),
  70. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\ShaderCache"),
  71. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Service Worker\\CacheStorage"),
  72. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Service Worker\\ScriptCache"),
  73. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\GrShaderCache\\GPUCache"),
  74. Path.Combine(ProfileAppDataLocal, "Microsoft\\Edge\\User Data\\Default\\Service Worker\\Database"),
  75. };
  76. // BRAVE FOLDERS
  77. static string braveFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data");
  78. static string[] braveUserDataCacheDirs = { "Default\\Cache", "Default\\Code Cache\\", "Default\\GPUCache\\", "ShaderCache", "Default\\Service Worker\\CacheStorage\\", "Default\\Service Worker\\ScriptCache\\", "GrShaderCache\\GPUCache\\", "Default\\File System\\", "Default\\JumpListIconsMostVisited\\", "Default\\JumpListIconsRecentClosed\\", "Default\\Service Worker\\Database" };
  79. static string bravePasswordsDir = Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\Login Data");
  80. static string[] braveSessionDirs =
  81. {
  82. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\Sessions"),
  83. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\Session Storage"),
  84. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\Extension State"),
  85. };
  86. static string[] braveCookiesDirs =
  87. {
  88. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\IndexedDB"),
  89. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\Cookies"),
  90. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\Cookies-journal")
  91. };
  92. static string[] braveHistoryDirs =
  93. {
  94. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\History"),
  95. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\History Provider Cache"),
  96. Path.Combine(ProfileAppDataLocal, "BraveSoftware\\Brave-Browser\\User Data\\Default\\History-journal")
  97. };
  98. internal static List<string> PreviewCleanList = new List<string>();
  99. internal static ByteSize PreviewSizeToBeFreed = new ByteSize(0);
  100. internal static void PreviewFolder(string path)
  101. {
  102. try
  103. {
  104. if (File.Exists(path))
  105. {
  106. PreviewCleanList.Add(path);
  107. return;
  108. }
  109. DirectoryInfo di = new DirectoryInfo(path);
  110. foreach (FileInfo file in di.GetFiles("*", SearchOption.AllDirectories))
  111. {
  112. try
  113. {
  114. PreviewCleanList.Add(file.FullName);
  115. }
  116. catch { }
  117. }
  118. foreach (DirectoryInfo dir in di.GetDirectories("*", SearchOption.AllDirectories))
  119. {
  120. try
  121. {
  122. PreviewCleanList.Add(dir.FullName);
  123. }
  124. catch { }
  125. }
  126. }
  127. catch { }
  128. }
  129. internal static void Clean()
  130. {
  131. foreach (string x in PreviewCleanList)
  132. {
  133. try
  134. {
  135. if (Directory.Exists(x)) Directory.Delete(x);
  136. if (File.Exists(x)) File.Delete(x);
  137. }
  138. catch { continue; }
  139. }
  140. }
  141. internal static void EmptyRecycleBin()
  142. {
  143. SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlag.SHERB_NOSOUND | RecycleFlag.SHERB_NOCONFIRMATION);
  144. }
  145. internal static void PreviewTemp()
  146. {
  147. PreviewFolder(TempFolder);
  148. PreviewSizeToBeFreed += CalculateSize(TempFolder);
  149. }
  150. internal static void PreviewMinidumps()
  151. {
  152. PreviewFolder(Path.Combine(OSDriveWindows, "Minidump"));
  153. PreviewSizeToBeFreed += CalculateSize(Path.Combine(OSDriveWindows, "Minidump"));
  154. }
  155. internal static void PreviewErrorReports()
  156. {
  157. PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportArchive"));
  158. PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportQueue"));
  159. PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\Temp"));
  160. PreviewFolder(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ERC"));
  161. PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportArchive"));
  162. PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportQueue"));
  163. PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\Temp"));
  164. PreviewFolder(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ERC"));
  165. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportArchive"));
  166. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ReportQueue"));
  167. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\Temp"));
  168. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProfileAppDataLocal, "Microsoft\\Windows\\WER\\ERC"));
  169. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportArchive"));
  170. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ReportQueue"));
  171. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\Temp"));
  172. PreviewSizeToBeFreed += CalculateSize(Path.Combine(ProgramData, "Microsoft\\Windows\\WER\\ERC"));
  173. }
  174. internal static ByteSize CalculateSize(string fileOrFolder)
  175. {
  176. ByteSize totalSize = new ByteSize(0);
  177. bool isFolder = Directory.Exists(fileOrFolder);
  178. try
  179. {
  180. if (isFolder)
  181. {
  182. DirectoryInfo dir = new DirectoryInfo(fileOrFolder);
  183. totalSize += totalSize.AddBytes(dir.EnumerateFiles("*", SearchOption.AllDirectories).Sum(file => file.Length));
  184. }
  185. else
  186. {
  187. FileInfo file = new FileInfo(fileOrFolder);
  188. totalSize = totalSize.AddBytes(file.Length);
  189. }
  190. }
  191. catch { }
  192. return totalSize;
  193. }
  194. internal static void PreviewEdgeClean(bool cache, bool cookies, bool seachHistory, bool session)
  195. {
  196. if (cache)
  197. {
  198. foreach (string x in edgeCache)
  199. {
  200. PreviewFolder(x);
  201. PreviewSizeToBeFreed += CalculateSize(x);
  202. }
  203. }
  204. if (cookies)
  205. {
  206. foreach (string x in edgeCookies)
  207. {
  208. PreviewFolder(x);
  209. PreviewSizeToBeFreed += CalculateSize(x);
  210. }
  211. }
  212. if (seachHistory)
  213. {
  214. PreviewFolder(edgeHistory);
  215. PreviewSizeToBeFreed += CalculateSize(edgeHistory);
  216. }
  217. if (session)
  218. {
  219. foreach (string x in edgeSession)
  220. {
  221. PreviewFolder(x);
  222. PreviewSizeToBeFreed += CalculateSize(x);
  223. }
  224. }
  225. }
  226. internal static void PreviewInternetExplorerCache()
  227. {
  228. foreach (string x in ieCache)
  229. {
  230. PreviewFolder(x);
  231. PreviewSizeToBeFreed += CalculateSize(x);
  232. }
  233. }
  234. internal static void PreviewFireFoxClean(bool cache, bool cookies, bool searchHistory)
  235. {
  236. if (Directory.Exists(firefoxRoaming))
  237. {
  238. foreach (string x in Directory.EnumerateDirectories(firefoxRoaming))
  239. {
  240. if (x.ToLowerInvariant().Contains("release"))
  241. {
  242. if (cookies)
  243. {
  244. PreviewFolder(Path.Combine(x, "cookies.sqlite"));
  245. PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "cookies.sqlite"));
  246. }
  247. if (searchHistory)
  248. {
  249. PreviewFolder(Path.Combine(x, "places.sqlite"));
  250. PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "places.sqlite"));
  251. }
  252. if (cache)
  253. {
  254. PreviewFolder(Path.Combine(x, "shader-cache"));
  255. PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "shader-cache"));
  256. }
  257. }
  258. }
  259. }
  260. if (cache)
  261. {
  262. if (Directory.Exists(firefoxLocal))
  263. {
  264. foreach (string x in Directory.EnumerateDirectories(firefoxLocal))
  265. {
  266. if (x.ToLowerInvariant().Contains("release"))
  267. {
  268. PreviewFolder(Path.Combine(x, "cache2"));
  269. PreviewSizeToBeFreed += CalculateSize(Path.Combine(x, "cache2"));
  270. }
  271. }
  272. }
  273. }
  274. }
  275. internal static void PreviewBraveClean(bool cache, bool cookies, bool searchHistory, bool session, bool passwords)
  276. {
  277. if (cache)
  278. {
  279. foreach (string x in braveUserDataCacheDirs)
  280. {
  281. PreviewFolder(Path.Combine(braveFolder, x));
  282. PreviewSizeToBeFreed += CalculateSize(Path.Combine(braveFolder, x));
  283. }
  284. }
  285. if (session)
  286. {
  287. foreach (string x in braveSessionDirs)
  288. {
  289. PreviewFolder(x);
  290. PreviewSizeToBeFreed += CalculateSize(x);
  291. }
  292. }
  293. if (cookies)
  294. {
  295. foreach (string x in braveCookiesDirs)
  296. {
  297. PreviewFolder(x);
  298. PreviewSizeToBeFreed += CalculateSize(x);
  299. }
  300. }
  301. if (searchHistory)
  302. {
  303. foreach (string x in braveHistoryDirs)
  304. {
  305. PreviewFolder(x);
  306. PreviewSizeToBeFreed += CalculateSize(x);
  307. }
  308. }
  309. if (passwords)
  310. {
  311. PreviewFolder(bravePasswordsDir);
  312. PreviewSizeToBeFreed += CalculateSize(bravePasswordsDir);
  313. }
  314. }
  315. internal static void PreviewChromeClean(bool cache, bool cookies, bool searchHistory, bool session, bool passwords)
  316. {
  317. if (cache)
  318. {
  319. foreach (string x in chromeUserDataCacheDirs)
  320. {
  321. PreviewFolder(Path.Combine(chromeFolder, x));
  322. PreviewSizeToBeFreed += CalculateSize(Path.Combine(chromeFolder, x));
  323. }
  324. }
  325. if (session)
  326. {
  327. foreach (string x in chromeSessionDirs)
  328. {
  329. PreviewFolder(x);
  330. PreviewSizeToBeFreed += CalculateSize(x);
  331. }
  332. }
  333. if (cookies)
  334. {
  335. foreach (string x in chromeCookiesDirs)
  336. {
  337. PreviewFolder(x);
  338. PreviewSizeToBeFreed += CalculateSize(x);
  339. }
  340. }
  341. if (searchHistory)
  342. {
  343. foreach (string x in chromeHistoryDirs)
  344. {
  345. PreviewFolder(x);
  346. PreviewSizeToBeFreed += CalculateSize(x);
  347. }
  348. }
  349. if (passwords)
  350. {
  351. PreviewFolder(chromePasswordsDir);
  352. PreviewSizeToBeFreed += CalculateSize(chromePasswordsDir);
  353. }
  354. }
  355. }
  356. }