unitTempUtils.pas 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. unit unitTempUtils;
  2. {$mode objfpc}{$H+}
  3. interface
  4. procedure RegisterTempCoverFile(const Path: string);
  5. procedure CleanupSessionTempCovers;
  6. procedure CleanupOldTempCoverFiles(MaxAgeHours: Integer);
  7. implementation
  8. uses
  9. Classes, SysUtils, LazFileUtils, DateUtils;
  10. var
  11. GTempCovers: TStringList;
  12. procedure EnsureList;
  13. begin
  14. if GTempCovers = nil then
  15. begin
  16. GTempCovers := TStringList.Create;
  17. GTempCovers.Sorted := False;
  18. GTempCovers.Duplicates := dupIgnore;
  19. end;
  20. end;
  21. procedure RegisterTempCoverFile(const Path: string);
  22. begin
  23. if (Trim(Path) = '') then Exit;
  24. if not FileExistsUTF8(Path) then Exit;
  25. EnsureList;
  26. GTempCovers.Add(Path);
  27. end;
  28. procedure CleanupSessionTempCovers;
  29. var i: Integer;
  30. begin
  31. if GTempCovers = nil then Exit;
  32. for i := 0 to GTempCovers.Count - 1 do
  33. begin
  34. try
  35. if FileExistsUTF8(GTempCovers[i]) then
  36. DeleteFileUTF8(GTempCovers[i]);
  37. except
  38. // ignore
  39. end;
  40. end;
  41. FreeAndNil(GTempCovers);
  42. end;
  43. procedure CleanupOldTempCoverFiles(MaxAgeHours: Integer);
  44. var
  45. sr: TSearchRec;
  46. mask, tmpDir, path: string;
  47. fileAge: LongInt;
  48. dt: TDateTime;
  49. ageHours: Double;
  50. begin
  51. if MaxAgeHours <= 0 then Exit;
  52. tmpDir := GetTempDir(False);
  53. mask := IncludeTrailingPathDelimiter(tmpDir) + 'mybookshelf_cover_*.png';
  54. if FindFirstUTF8(mask, faAnyFile and faArchive, sr) = 0 then
  55. try
  56. repeat
  57. path := IncludeTrailingPathDelimiter(tmpDir) + sr.Name;
  58. try
  59. fileAge := FileAgeUTF8(path);
  60. if fileAge >= 0 then
  61. begin
  62. dt := FileDateToDateTime(fileAge);
  63. ageHours := HoursBetween(Now, dt);
  64. if ageHours >= MaxAgeHours then
  65. DeleteFileUTF8(path);
  66. end;
  67. except
  68. // ignore per-file errors
  69. end;
  70. until FindNextUTF8(sr) <> 0;
  71. finally
  72. FindCloseUTF8(sr);
  73. end;
  74. end;
  75. finalization
  76. // ensure list is freed
  77. if GTempCovers <> nil then
  78. GTempCovers.Free;
  79. end.