@@ -203,8 +203,8 @@ private static function copyFilesToUser($sourcePath, $owner, $targetPath, $user,
203203
204204 $ view = new View ('/ ' );
205205
206- $ target = $ user . '/files_trashbin/files/ ' . $ targetFilename . ' .d ' . $ timestamp ;
207- $ source = $ owner . '/files_trashbin/files/ ' . $ sourceFilename . ' .d ' . $ timestamp ;
206+ $ target = $ user . '/files_trashbin/files/ ' . static :: getTrashFilename ( $ targetFilename, $ timestamp) ;
207+ $ source = $ owner . '/files_trashbin/files/ ' . static :: getTrashFilename ( $ sourceFilename, $ timestamp) ;
208208 $ free = $ view ->free_space ($ target );
209209 $ isUnknownOrUnlimitedFreeSpace = $ free < 0 ;
210210 $ isEnoughFreeSpaceLeft = $ view ->filesize ($ source ) < $ free ;
@@ -278,7 +278,7 @@ public static function move2trash($file_path, $ownerOnly = false) {
278278 $ lockingProvider = \OC ::$ server ->getLockingProvider ();
279279
280280 // disable proxy to prevent recursive calls
281- $ trashPath = '/files_trashbin/files/ ' . $ filename . ' .d ' . $ timestamp ;
281+ $ trashPath = '/files_trashbin/files/ ' . static :: getTrashFilename ( $ filename, $ timestamp) ;
282282 $ gotLock = false ;
283283
284284 while (!$ gotLock ) {
@@ -294,7 +294,7 @@ public static function move2trash($file_path, $ownerOnly = false) {
294294
295295 $ timestamp = $ timestamp + 1 ;
296296
297- $ trashPath = '/files_trashbin/files/ ' . $ filename . ' .d ' . $ timestamp ;
297+ $ trashPath = '/files_trashbin/files/ ' . static :: getTrashFilename ( $ filename, $ timestamp) ;
298298 }
299299 }
300300
@@ -358,7 +358,7 @@ public static function move2trash($file_path, $ownerOnly = false) {
358358 \OC ::$ server ->get (LoggerInterface::class)->error ('trash bin database couldn \'t be updated ' , ['app ' => 'files_trashbin ' ]);
359359 }
360360 \OCP \Util::emitHook ('\OCA\Files_Trashbin\Trashbin ' , 'post_moveToTrash ' , ['filePath ' => Filesystem::normalizePath ($ file_path ),
361- 'trashPath ' => Filesystem::normalizePath ($ filename . ' .d ' . $ timestamp )]);
361+ 'trashPath ' => Filesystem::normalizePath (static :: getTrashFilename ( $ filename, $ timestamp) )]);
362362
363363 self ::retainVersions ($ filename , $ owner , $ ownerPath , $ timestamp );
364364
@@ -395,15 +395,15 @@ private static function retainVersions($filename, $owner, $ownerPath, $timestamp
395395
396396 if ($ rootView ->is_dir ($ owner . '/files_versions/ ' . $ ownerPath )) {
397397 if ($ owner !== $ user ) {
398- self ::copy_recursive ($ owner . '/files_versions/ ' . $ ownerPath , $ owner . '/files_trashbin/versions/ ' . basename ($ ownerPath ) . ' .d ' . $ timestamp , $ rootView );
398+ self ::copy_recursive ($ owner . '/files_versions/ ' . $ ownerPath , $ owner . '/files_trashbin/versions/ ' . static :: getTrashFilename ( basename ($ ownerPath ), $ timestamp) , $ rootView );
399399 }
400- self ::move ($ rootView , $ owner . '/files_versions/ ' . $ ownerPath , $ user . '/files_trashbin/versions/ ' . $ filename . ' .d ' . $ timestamp );
400+ self ::move ($ rootView , $ owner . '/files_versions/ ' . $ ownerPath , $ user . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename, $ timestamp) );
401401 } elseif ($ versions = \OCA \Files_Versions \Storage::getVersions ($ owner , $ ownerPath )) {
402402 foreach ($ versions as $ v ) {
403403 if ($ owner !== $ user ) {
404- self ::copy ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ owner . '/files_trashbin/versions/ ' . $ v ['name ' ] . '.v ' . $ v ['version ' ] . ' .d ' . $ timestamp );
404+ self ::copy ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ owner . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ v ['name ' ] . '.v ' . $ v ['version ' ], $ timestamp) );
405405 }
406- self ::move ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ user . '/files_trashbin/versions/ ' . $ filename . '.v ' . $ v ['version ' ] . ' .d ' . $ timestamp );
406+ self ::move ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ user . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename . '.v ' . $ v ['version ' ], $ timestamp) );
407407 }
408408 }
409409 }
@@ -561,7 +561,7 @@ private static function restoreVersions(View $view, $file, $filename, $uniqueFil
561561 } elseif ($ versions = self ::getVersionsFromTrash ($ versionedFile , $ timestamp , $ user )) {
562562 foreach ($ versions as $ v ) {
563563 if ($ timestamp ) {
564- $ rootView ->rename ($ user . '/files_trashbin/versions/ ' . $ versionedFile . '.v ' . $ v . ' .d ' . $ timestamp , $ owner . '/files_versions/ ' . $ ownerPath . '.v ' . $ v );
564+ $ rootView ->rename ($ user . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ versionedFile . '.v ' . $ v, $ timestamp) , $ owner . '/files_versions/ ' . $ ownerPath . '.v ' . $ v );
565565 } else {
566566 $ rootView ->rename ($ user . '/files_trashbin/versions/ ' . $ versionedFile . '.v ' . $ v , $ owner . '/files_versions/ ' . $ ownerPath . '.v ' . $ v );
567567 }
@@ -662,7 +662,7 @@ public static function delete($filename, $user, $timestamp = null) {
662662 ->andWhere ($ query ->expr ()->eq ('timestamp ' , $ query ->createNamedParameter ($ timestamp )));
663663 $ query ->executeStatement ();
664664
665- $ file = $ filename . ' .d ' . $ timestamp ;
665+ $ file = static :: getTrashFilename ( $ filename, $ timestamp) ;
666666 } else {
667667 $ file = $ filename ;
668668 }
@@ -705,8 +705,8 @@ private static function deleteVersions(View $view, $file, $filename, $timestamp,
705705 } elseif ($ versions = self ::getVersionsFromTrash ($ filename , $ timestamp , $ user )) {
706706 foreach ($ versions as $ v ) {
707707 if ($ timestamp ) {
708- $ size += $ view ->filesize ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v . ' .d ' . $ timestamp );
709- $ view ->unlink ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v . ' .d ' . $ timestamp );
708+ $ size += $ view ->filesize ('/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename . '.v ' . $ v, $ timestamp) );
709+ $ view ->unlink ('/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename . '.v ' . $ v, $ timestamp) );
710710 } else {
711711 $ size += $ view ->filesize ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v );
712712 $ view ->unlink ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v );
@@ -729,7 +729,7 @@ public static function file_exists($filename, $timestamp = null) {
729729 $ view = new View ('/ ' . $ user );
730730
731731 if ($ timestamp ) {
732- $ filename = $ filename . ' .d ' . $ timestamp ;
732+ $ filename = static :: getTrashFilename ( $ filename, $ timestamp) ;
733733 }
734734
735735 $ target = Filesystem::normalizePath ('files_trashbin/files/ ' . $ filename );
@@ -1125,4 +1125,23 @@ public static function isEmpty($user) {
11251125 public static function preview_icon ($ path ) {
11261126 return \OC ::$ server ->getURLGenerator ()->linkToRoute ('core_ajax_trashbin_preview ' , ['x ' => 32 , 'y ' => 32 , 'file ' => $ path ]);
11271127 }
1128+
1129+ /**
1130+ * Return the filename used in the trash bin
1131+ */
1132+ public static function getTrashFilename (string $ filename , int $ timestamp ): string {
1133+ $ trashFilename = $ filename . '.d ' . $ timestamp ;
1134+ $ length = strlen ($ trashFilename );
1135+ // oc_filecache `name` column has a limit of 250 chars
1136+ $ maxLength = 250 ;
1137+ if ($ length > $ maxLength ) {
1138+ $ trashFilename = substr_replace (
1139+ $ trashFilename ,
1140+ '' ,
1141+ $ maxLength / 2 ,
1142+ $ length - $ maxLength
1143+ );
1144+ }
1145+ return $ trashFilename ;
1146+ }
11281147}
0 commit comments