Commit 32c3a93483a5a2126d831342139a67e18a3e4ef1

Authored by Schwirg László
1 parent 2a636a78

v1.30.1

- File cleaner/unblocker üzenet formátumok szépítgetése
Vrh.Log4Pro.MaintenanceConsole/Manager - FileCleanerManager.cs
@@ -68,7 +68,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -68,7 +68,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
68 else if (sr.Result == Menu.SelectionResult.Error) { return o; } 68 else if (sr.Result == Menu.SelectionResult.Error) { return o; }
69 else if (sr.Result == Menu.SelectionResult.Ok) { } 69 else if (sr.Result == Menu.SelectionResult.Ok) { }
70 else { } 70 else { }
71 - foreach (var p in sr.SelectedParameterList) { OneFolderClean(p.Parameters as FolderToClean); } 71 + foreach (var p in sr.SelectedParameterList) { OneFolderProcess(p.Parameters as FolderToClean, FileCleanerManagerCore.FolderProcessingMode.UnblockFiles); }
72 return o; 72 return o;
73 } 73 }
74 private static object FolderClean(object parameter, object o) 74 private static object FolderClean(object parameter, object o)
@@ -86,16 +86,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -86,16 +86,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
86 else if (sr.Result == Menu.SelectionResult.Error) { return o; } 86 else if (sr.Result == Menu.SelectionResult.Error) { return o; }
87 else if (sr.Result == Menu.SelectionResult.Ok) { } 87 else if (sr.Result == Menu.SelectionResult.Ok) { }
88 else { } 88 else { }
89 - foreach (var p in sr.SelectedParameterList) { OneFolderClean(p.Parameters as FolderToClean); } 89 + foreach (var p in sr.SelectedParameterList) { OneFolderProcess(p.Parameters as FolderToClean, FileCleanerManagerCore.FolderProcessingMode.DeleteFiles); }
90 return o; 90 return o;
91 } 91 }
92 - private static void OneFolderClean(FolderToClean ftc) 92 + private static void OneFolderProcess(FolderToClean ftc, FileCleanerManagerCore.FolderProcessingMode operation)
93 { 93 {
94 try 94 try
95 { 95 {
96 var di = new DirectoryInfo(ftc.Xml_DirectoryPath); 96 var di = new DirectoryInfo(ftc.Xml_DirectoryPath);
97 - var success = FileCleanerManagerCore.CleanFolderFiles(di, ftc, enableexecute: true);  
98 - ColorConsole.WriteLine($"Folder cleaned. Name:{ftc.Xml_DirectoryPath}", ConsoleColor.Green); 97 + var r = FileCleanerManagerCore.ProcessFolderFiles(operation,di, ftc, recursionlevel:0);
  98 + ColorConsole.WriteLine($"Folder processed with '{operation}' . Name:{ftc.Xml_DirectoryPath}. Total files: {r.Item1}, total size: {r.Item2}bytes", ConsoleColor.Green);
99 } 99 }
100 catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } 100 catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); }
101 } 101 }
@@ -137,13 +137,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -137,13 +137,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
137 var operationcolor = ws.Xml_OperationUnblockEnable ? ConsoleColor.Yellow : ws.Xml_OperationDeleteEnable ? ConsoleColor.Red : ConsoleColor.Green; 137 var operationcolor = ws.Xml_OperationUnblockEnable ? ConsoleColor.Yellow : ws.Xml_OperationDeleteEnable ? ConsoleColor.Red : ConsoleColor.Green;
138 var removeemptyfoldertext = ws.Xml_RemoveEmptyFolder ? " with remove empty folders" : ""; 138 var removeemptyfoldertext = ws.Xml_RemoveEmptyFolder ? " with remove empty folders" : "";
139 ColorConsole.Write(operationtext + removeemptyfoldertext, operationcolor, prefix: "Operation:", bracket: "[]", suffix: ". "); 139 ColorConsole.Write(operationtext + removeemptyfoldertext, operationcolor, prefix: "Operation:", bracket: "[]", suffix: ". ");
140 - ColorConsole.Write(ws.SizeSelectedBeforeClean.ToString(), ConsoleColor.Yellow, prefix: "Size of filtered files now:");  
141 if (ws.Xml_OperationDeleteEnable) 140 if (ws.Xml_OperationDeleteEnable)
142 { 141 {
143 - ColorConsole.Write(ws.SizeSelectedAfterClean.ToString(), ConsoleColor.Yellow, prefix: ", after cleaning:", suffix: ". "); 142 + ColorConsole.Write($"{ws.SizeSelectedBeforeClean} ({ws.NumofSelectedCleaned} files)", ConsoleColor.Yellow, prefix: "Size(num of) of filtered files now:");
  143 + ColorConsole.Write(ws.SizeSelectedAfterClean.ToString(), ConsoleColor.Yellow, prefix: ", after cleaning:", suffix: ". ");
144 ColorConsole.Write(ws.SizeSelectedCleaned.ToString(), ConsoleColor.Red, prefix: "To clean:", suffix: "."); 144 ColorConsole.Write(ws.SizeSelectedCleaned.ToString(), ConsoleColor.Red, prefix: "To clean:", suffix: ".");
145 } 145 }
146 - ColorConsole.WriteLine(" "); 146 + if (ws.Xml_OperationUnblockEnable)
  147 + {
  148 + ColorConsole.Write(ws.NumofSelectedCleaned.ToString(), ConsoleColor.Yellow, prefix: "Num of filtered files:");
  149 + }
  150 + ColorConsole.WriteLine(" ");
147 return Menu.MenuItemDisplayerReturnValue.NEXTLINE; 151 return Menu.MenuItemDisplayerReturnValue.NEXTLINE;
148 } 152 }
149 else if (lineix == 1) 153 else if (lineix == 1)
@@ -194,13 +198,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -194,13 +198,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
194 ftc.SizeFolderTotal= 0; 198 ftc.SizeFolderTotal= 0;
195 ftc.SizeSelectedBeforeClean = 0; 199 ftc.SizeSelectedBeforeClean = 0;
196 ftc.SizeSelectedCleaned = 0; 200 ftc.SizeSelectedCleaned = 0;
  201 + ftc.NumofSelectedCleaned = 0;
197 ftc.FolderExists = Directory.Exists(ftc.Xml_DirectoryPath); 202 ftc.FolderExists = Directory.Exists(ftc.Xml_DirectoryPath);
198 if (ftc.FolderExists) 203 if (ftc.FolderExists)
199 { 204 {
200 var di = new DirectoryInfo(ftc.Xml_DirectoryPath); 205 var di = new DirectoryInfo(ftc.Xml_DirectoryPath);
201 ftc.SizeFolderTotal = FileCleanerManagerCore.DirSize(di,"*","","",ftc.Xml_Recurse); 206 ftc.SizeFolderTotal = FileCleanerManagerCore.DirSize(di,"*","","",ftc.Xml_Recurse);
202 ftc.SizeSelectedBeforeClean = FileCleanerManagerCore.DirSize(di, ftc.Xml_IncludeMask,ftc.Xml_ExcludeMaskList, ftc.Xml_IncludeFullpathRegexp, ftc.Xml_Recurse); 207 ftc.SizeSelectedBeforeClean = FileCleanerManagerCore.DirSize(di, ftc.Xml_IncludeMask,ftc.Xml_ExcludeMaskList, ftc.Xml_IncludeFullpathRegexp, ftc.Xml_Recurse);
203 - ftc.SizeSelectedCleaned = FileCleanerManagerCore.CleanFolderFiles(di,ftc,enableexecute:false); 208 + var r = FileCleanerManagerCore.ProcessFolderFiles(FileCleanerManagerCore.FolderProcessingMode.GetInfo, di, ftc, recursionlevel: 0);
  209 + ftc.SizeSelectedCleaned = r.Item2;
  210 + ftc.NumofSelectedCleaned = r.Item1;
204 } 211 }
205 return ftc; 212 return ftc;
206 } 213 }
@@ -245,8 +252,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -245,8 +252,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
245 return size; 252 return size;
246 } 253 }
247 #endregion public GetDirSize 254 #endregion public GetDirSize
248 - #region public FileIsToDelete  
249 - public static bool FileIsToDelete(FileInfo fi, FolderToClean ftc) 255 + #region public FileIsToProcess
  256 + public static bool FileIsToProcess(FileInfo fi, FolderToClean ftc)
250 { 257 {
251 var rgx = new Regex(ftc.Xml_IncludeFullpathRegexp); 258 var rgx = new Regex(ftc.Xml_IncludeFullpathRegexp);
252 var rgxmatch = rgx.Match(fi.FullName); 259 var rgxmatch = rgx.Match(fi.FullName);
@@ -308,9 +315,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -308,9 +315,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
308 } 315 }
309 return false; 316 return false;
310 } 317 }
311 - #endregion public FileIsToDelete  
312 - #region public UnblockMany,UnblockOne  
313 - [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] 318 + #endregion public FileIsToProcess
  319 + #region public UnblockMany,UnblockOne
  320 + [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
314 [return: MarshalAs(UnmanagedType.Bool)] 321 [return: MarshalAs(UnmanagedType.Bool)]
315 private static extern bool DeleteFile(string name); 322 private static extern bool DeleteFile(string name);
316 323
@@ -324,49 +331,80 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -324,49 +331,80 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
324 string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories); 331 string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories);
325 foreach (string file in files) { UnblockOne(file); } 332 foreach (string file in files) { UnblockOne(file); }
326 } 333 }
327 - #endregion public UnblockMany,UnblockOne  
328 - #region public CleanFolderFiles  
329 - public static long CleanFolderFiles(DirectoryInfo d,FolderToClean ftc, bool enableexecute) 334 + #endregion public UnblockMany,UnblockOne
  335 + #region public ProcessFolderFiles
  336 + public static (int,long) ProcessFolderFiles(FolderProcessingMode operation ,DirectoryInfo d,FolderToClean ftc, int recursionlevel)
330 { 337 {
  338 + if (operation == FolderProcessingMode.GetInfo || ftc.Xml_OperationUnblockEnable && operation == FolderProcessingMode.UnblockFiles || ftc.Xml_OperationDeleteEnable && operation == FolderProcessingMode.DeleteFiles){ }
  339 + else
  340 + {
  341 + ColorConsole.WriteLine("Function is not available for this folder!", ConsoleColor.Red);
  342 + return (0,0);
  343 + }
  344 + const int MAXPRINTLENGTH = 100;
  345 + const int MAXPRINTRECURSIONLEVEL = 2;
  346 +
  347 + Func<string,int,string> maxandpad = (text,w) => { return (text.Length <= w ? text : (text.Substring(0, w) + "...")).PadRight(w + 3, ' '); };
  348 + Action<string,bool,ConsoleColor?> printoneline = (text,linefeed,color) =>
  349 + {
  350 + text = maxandpad(text, MAXPRINTLENGTH);
  351 + if (color.HasValue) { ColorConsole.Write(text, color); } else { ColorConsole.Write(text); };
  352 + if (linefeed) { ColorConsole.WriteLine(); } else { ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); };
  353 + };
  354 + int filesprocessed = 0;
331 long cleanedsize = 0; 355 long cleanedsize = 0;
332 // Add file sizes. 356 // Add file sizes.
333 FileInfo[] fis = d.GetFiles(ftc.Xml_IncludeMask, SearchOption.TopDirectoryOnly); 357 FileInfo[] fis = d.GetFiles(ftc.Xml_IncludeMask, SearchOption.TopDirectoryOnly);
334 foreach (FileInfo fi in fis) 358 foreach (FileInfo fi in fis)
335 { 359 {
336 - if (FileIsToDelete(fi, ftc)) 360 + if (FileIsToProcess(fi, ftc))
337 { 361 {
338 var fl = fi.Length; 362 var fl = fi.Length;
339 try 363 try
340 { 364 {
341 - if (Regex.Match(fi.Name, ZipTools.FileNameMaskListToRegex(ftc.Xml_ExcludeMaskList)).Success) continue;  
342 - if (enableexecute) 365 + if (!string.IsNullOrEmpty(ftc.Xml_ExcludeMaskList) && Regex.Match(fi.Name, ZipTools.FileNameMaskListToRegex(ftc.Xml_ExcludeMaskList)).Success) continue;
  366 + if (operation != FolderProcessingMode.GetInfo)
343 { 367 {
344 - if (ftc.Xml_OperationUnblockEnable) { UnblockOne(fi.FullName); }  
345 - else if (ftc.Xml_OperationDeleteEnable) { System.IO.File.Delete(fi.FullName); }  
346 - ColorConsole.Write(fi.FullName); ColorConsole.SetCursorPosition(0, ColorConsole.CursorTop); 368 + if (ftc.Xml_OperationUnblockEnable && operation == FolderProcessingMode.UnblockFiles) { UnblockOne(fi.FullName); }
  369 + else if (ftc.Xml_OperationDeleteEnable && operation == FolderProcessingMode.DeleteFiles) { System.IO.File.Delete(fi.FullName); }
  370 + printoneline(fi.FullName,false,null);
347 } 371 }
  372 + filesprocessed++;
348 cleanedsize += fl; 373 cleanedsize += fl;
349 } 374 }
350 - catch { } 375 + catch (Exception ex)
  376 + {
  377 + Func<string> x = () => { var errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } return errmsg; };
  378 + ColorConsole.WriteLine(x(), ConsoleColor.Red);
  379 + //string errmsg2 = (new Func<string>(() => { var errmsg = ""; while (ex != null) { errmsg += ex.Message; ex = ex.InnerException; } return errmsg; }))();
  380 + //ColorConsole.WriteLine(errmsg2, ConsoleColor.Red);
  381 + }
351 } 382 }
352 } 383 }
353 // Add subdirectory sizes. 384 // Add subdirectory sizes.
354 if (ftc.Xml_Recurse) 385 if (ftc.Xml_Recurse)
355 { 386 {
356 - foreach (DirectoryInfo di in d.GetDirectories()) { cleanedsize += /*recursion*/ CleanFolderFiles(di, ftc, enableexecute); } 387 + foreach (DirectoryInfo di in d.GetDirectories())
  388 + {
  389 + var r = /*recursion*/ ProcessFolderFiles(operation,di, ftc, recursionlevel+1);
  390 + filesprocessed += r.Item1;
  391 + cleanedsize += r.Item2;
  392 + }
357 } 393 }
358 if (ftc.Xml_RemoveEmptyFolder && IsDirectoryEmpty(d)) 394 if (ftc.Xml_RemoveEmptyFolder && IsDirectoryEmpty(d))
359 { 395 {
360 try { Directory.Delete(d.FullName, ftc.Xml_Recurse); } catch { } 396 try { Directory.Delete(d.FullName, ftc.Xml_Recurse); } catch { }
361 } 397 }
362 - return cleanedsize; 398 + if (operation != FolderProcessingMode.GetInfo && recursionlevel < MAXPRINTRECURSIONLEVEL) printoneline($"{maxandpad(d.FullName,55)} Processed files:{maxandpad(filesprocessed.ToString(),7)} bytes:{maxandpad(cleanedsize.ToString(),10)}",true,ConsoleColor.White);
  399 + return (filesprocessed, cleanedsize);
363 } 400 }
364 - #endregion public CleanFolderFiles  
365 - }  
366 - #endregion class FileCleanerManagerCore 401 + public enum FolderProcessingMode { DeleteFiles, UnblockFiles, GetInfo, }
  402 + #endregion public ProcessFolderFiles
  403 + }
  404 + #endregion class FileCleanerManagerCore
367 405
368 - #region FileCleanerManagerCoreXmlProcessor class  
369 - public class FileCleanerManagerXmlProcessor : XmlParser 406 + #region FileCleanerManagerCoreXmlProcessor class
  407 + public class FileCleanerManagerXmlProcessor : XmlParser
370 { 408 {
371 private List<FolderToClean> _foldertocleanlist; 409 private List<FolderToClean> _foldertocleanlist;
372 #region constructor 410 #region constructor
@@ -426,6 +464,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS @@ -426,6 +464,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.FileCleanerManagerNS
426 public long SizeSelectedBeforeClean; 464 public long SizeSelectedBeforeClean;
427 public long SizeSelectedAfterClean { get { return SizeSelectedBeforeClean - SizeSelectedCleaned; } } 465 public long SizeSelectedAfterClean { get { return SizeSelectedBeforeClean - SizeSelectedCleaned; } }
428 public long SizeSelectedCleaned; 466 public long SizeSelectedCleaned;
  467 + public long NumofSelectedCleaned;
429 468
430 public int? common_limitdays; 469 public int? common_limitdays;
431 public int? common_limitbytes; 470 public int? common_limitbytes;
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 // You can specify all the values or you can default the Build and Revision Numbers 32 // You can specify all the values or you can default the Build and Revision Numbers
33 // by using the '*' as shown below: 33 // by using the '*' as shown below:
34 // [assembly: AssemblyVersion("1.0.*")] 34 // [assembly: AssemblyVersion("1.0.*")]
35 -[assembly: AssemblyVersion("1.30.0.0")]  
36 -[assembly: AssemblyFileVersion("1.30.0.0")] 35 +[assembly: AssemblyVersion("1.30.1.0")]
  36 +[assembly: AssemblyFileVersion("1.30.1.0")]