22
22
namespace OCA \GroupFolders \Trash ;
23
23
24
24
use OC \Encryption \Exceptions \DecryptionFailedException ;
25
+ use OC \Files \ObjectStore \ObjectStoreStorage ;
25
26
use OC \Files \Storage \Wrapper \Encryption ;
26
27
use OC \Files \Storage \Wrapper \Jail ;
27
28
use OCA \Files_Trashbin \Expiration ;
41
42
use OCP \Files \NotPermittedException ;
42
43
use OCP \Files \Storage \IStorage ;
43
44
use OCP \IUser ;
45
+ use OCP \IUserSession ;
44
46
use Psr \Log \LoggerInterface ;
45
47
46
48
class TrashBackend implements ITrashBackend {
@@ -53,6 +55,7 @@ class TrashBackend implements ITrashBackend {
53
55
private $ versionsBackend = null ;
54
56
private IRootFolder $ rootFolder ;
55
57
private LoggerInterface $ logger ;
58
+ private IUserSession $ userSession ;
56
59
57
60
public function __construct (
58
61
FolderManager $ folderManager ,
@@ -61,7 +64,8 @@ public function __construct(
61
64
MountProvider $ mountProvider ,
62
65
ACLManagerFactory $ aclManagerFactory ,
63
66
IRootFolder $ rootFolder ,
64
- LoggerInterface $ logger
67
+ LoggerInterface $ logger ,
68
+ IUserSession $ userSession ,
65
69
) {
66
70
$ this ->folderManager = $ folderManager ;
67
71
$ this ->trashManager = $ trashManager ;
@@ -70,6 +74,7 @@ public function __construct(
70
74
$ this ->aclManagerFactory = $ aclManagerFactory ;
71
75
$ this ->rootFolder = $ rootFolder ;
72
76
$ this ->logger = $ logger ;
77
+ $ this ->userSession = $ userSession ;
73
78
}
74
79
75
80
public function setVersionsBackend (VersionsBackend $ versionsBackend ): void {
@@ -309,9 +314,11 @@ private function moveFromEncryptedStorage(IStorage $sourceStorage, IStorage $tar
309
314
$ sourceStorage = $ sourceStorage ->getWrapperStorage ();
310
315
}
311
316
317
+ /** @psalm-suppress TooManyArguments */
312
318
$ result = $ targetStorage ->copyFromStorage ($ sourceStorage , $ sourceInternalPath , $ targetInternalPath , true );
313
319
if ($ result ) {
314
- if ($ sourceStorage ->instanceOfStorage (ObjectStoreStorage::class)) {
320
+ // hacky workaround to make sure we don't rely on a newer minor version
321
+ if ($ sourceStorage ->instanceOfStorage (ObjectStoreStorage::class) && is_callable ([$ sourceStorage , 'setPreserveCacheOnDelete ' ])) {
315
322
/** @var ObjectStoreStorage $sourceStorage */
316
323
$ sourceStorage ->setPreserveCacheOnDelete (true );
317
324
}
@@ -322,7 +329,7 @@ private function moveFromEncryptedStorage(IStorage $sourceStorage, IStorage $tar
322
329
$ result = $ sourceStorage ->unlink ($ sourceInternalPath );
323
330
}
324
331
} finally {
325
- if ($ sourceStorage ->instanceOfStorage (ObjectStoreStorage::class)) {
332
+ if ($ sourceStorage ->instanceOfStorage (ObjectStoreStorage::class) && is_callable ([ $ sourceStorage , ' setPreserveCacheOnDelete ' ]) ) {
326
333
/** @var ObjectStoreStorage $sourceStorage */
327
334
$ sourceStorage ->setPreserveCacheOnDelete (false );
328
335
}
@@ -355,6 +362,7 @@ private function getNodeForTrashItem(IUser $user, ITrashItem $trashItem): ?Node
355
362
$ folders = $ this ->folderManager ->getFoldersForUser ($ user );
356
363
foreach ($ folders as $ groupFolder ) {
357
364
if ($ groupFolder ['folder_id ' ] === $ folderId ) {
365
+ /** @var Folder $trashRoot */
358
366
$ trashRoot = $ this ->rootFolder ->get ('/ ' . $ user ->getUID () . '/files_trashbin/groupfolders/ ' . $ folderId );
359
367
try {
360
368
$ node = $ trashRoot ->get ($ path );
@@ -421,6 +429,8 @@ private function getTrashForFolders(IUser $user, array $folders): array {
421
429
// ensure the trash folder exists
422
430
$ this ->getTrashFolder ($ folderId );
423
431
432
+
433
+ /** @var Folder $trashFolder */
424
434
$ trashFolder = $ this ->rootFolder ->get ('/ ' . $ user ->getUID () . '/files_trashbin/groupfolders/ ' . $ folderId );
425
435
$ content = $ trashFolder ->getDirectoryListing ();
426
436
$ this ->aclManagerFactory ->getACLManager ($ user )->preloadRulesForFolder ($ this ->getUnJailedPath ($ trashFolder ));
0 commit comments