3
3
namespace Spatie \DirectoryCleanup ;
4
4
5
5
use Carbon \Carbon ;
6
- use Illuminate \Support \Collection ;
7
6
use Illuminate \Filesystem \Filesystem ;
7
+ use Illuminate \Support \Collection ;
8
8
use Spatie \DirectoryCleanup \Policies \CleanupPolicy ;
9
9
10
10
class DirectoryCleaner
@@ -15,6 +15,9 @@ class DirectoryCleaner
15
15
/** @var string */
16
16
protected $ directory ;
17
17
18
+ /** @var Carbon */
19
+ protected $ timeInPast ;
20
+
18
21
public function __construct (Filesystem $ filesystem )
19
22
{
20
23
$ this ->filesystem = $ filesystem ;
@@ -27,24 +30,41 @@ public function setDirectory(string $directory)
27
30
return $ this ;
28
31
}
29
32
30
- public function deleteFilesOlderThanMinutes ( int $ minutes ) : Collection
33
+ public function setMinutes ( $ minutes )
31
34
{
32
- $ timeInPast = Carbon::now ()->subMinutes ($ minutes );
35
+ $ this ->timeInPast = Carbon::now ()->subMinutes ($ minutes );
36
+
37
+ return $ this ;
38
+ }
33
39
34
- return collect ($ this ->filesystem ->allFiles ($ this ->directory , true ))
35
- ->filter (function ($ file ) use ($ timeInPast ) {
40
+ public function deleteFilesOlderThanMinutes ($ amountOfFilesDeleted = 0 , $ directory = null ): int
41
+ {
42
+ $ workingDir = $ directory ?: realpath ($ this ->directory );
43
+ $ directories = collect ($ this ->filesystem ->directories ($ workingDir ));
44
+ if ($ directory === null ) {
45
+ $ directories = $ directories ->add ($ workingDir );
46
+ }
47
+
48
+ foreach ($ directories as $ subDirectory ) {
49
+ $ amountOfFilesDeleted = $ this ->deleteFilesOlderThanMinutes ($ amountOfFilesDeleted , $ subDirectory );
50
+ }
51
+
52
+ $ files = collect ($ this ->filesystem ->files ($ workingDir , true ))
53
+ ->filter (function ($ file ) {
36
54
return Carbon::createFromTimestamp (filemtime ($ file ))
37
- ->lt ($ timeInPast );
55
+ ->lt ($ this -> timeInPast );
38
56
})
39
57
->filter (function ($ file ) {
40
58
return $ this ->policy ()->shouldDelete ($ file );
41
59
})
42
60
->each (function ($ file ) {
43
61
$ this ->filesystem ->delete ($ file );
44
62
});
63
+
64
+ return $ amountOfFilesDeleted + $ files ->count ();
45
65
}
46
66
47
- public function deleteEmptySubdirectories () : Collection
67
+ public function deleteEmptySubdirectories (): Collection
48
68
{
49
69
return collect ($ this ->filesystem ->directories ($ this ->directory ))
50
70
->filter (function ($ directory ) {
@@ -55,7 +75,7 @@ public function deleteEmptySubdirectories() : Collection
55
75
});
56
76
}
57
77
58
- protected function policy () : CleanupPolicy
78
+ protected function policy (): CleanupPolicy
59
79
{
60
80
return resolve (config (
61
81
'laravel-directory-cleanup.cleanup_policy ' ,
0 commit comments