@@ -208,8 +208,8 @@ private static function copyFilesToUser($sourcePath, $owner, $targetPath, $user,
208208
209209 $ view = new View ('/ ' );
210210
211- $ target = $ user . '/files_trashbin/files/ ' . $ targetFilename . ' .d ' . $ timestamp ;
212- $ source = $ owner . '/files_trashbin/files/ ' . $ sourceFilename . ' .d ' . $ timestamp ;
211+ $ target = $ user . '/files_trashbin/files/ ' . static :: getTrashFilename ( $ targetFilename, $ timestamp) ;
212+ $ source = $ owner . '/files_trashbin/files/ ' . static :: getTrashFilename ( $ sourceFilename, $ timestamp) ;
213213 $ free = $ view ->free_space ($ target );
214214 $ isUnknownOrUnlimitedFreeSpace = $ free < 0 ;
215215 $ isEnoughFreeSpaceLeft = $ view ->filesize ($ source ) < $ free ;
@@ -276,7 +276,7 @@ public static function move2trash($file_path, $ownerOnly = false) {
276276 $ lockingProvider = \OC ::$ server ->getLockingProvider ();
277277
278278 // disable proxy to prevent recursive calls
279- $ trashPath = '/files_trashbin/files/ ' . $ filename . ' .d ' . $ timestamp ;
279+ $ trashPath = '/files_trashbin/files/ ' . static :: getTrashFilename ( $ filename, $ timestamp) ;
280280 $ gotLock = false ;
281281
282282 while (!$ gotLock ) {
@@ -292,7 +292,7 @@ public static function move2trash($file_path, $ownerOnly = false) {
292292
293293 $ timestamp = $ timestamp + 1 ;
294294
295- $ trashPath = '/files_trashbin/files/ ' . $ filename . ' .d ' . $ timestamp ;
295+ $ trashPath = '/files_trashbin/files/ ' . static :: getTrashFilename ( $ filename, $ timestamp) ;
296296 }
297297 }
298298
@@ -357,7 +357,7 @@ public static function move2trash($file_path, $ownerOnly = false) {
357357 \OC ::$ server ->getLogger ()->error ('trash bin database couldn \'t be updated ' , ['app ' => 'files_trashbin ' ]);
358358 }
359359 \OCP \Util::emitHook ('\OCA\Files_Trashbin\Trashbin ' , 'post_moveToTrash ' , ['filePath ' => Filesystem::normalizePath ($ file_path ),
360- 'trashPath ' => Filesystem::normalizePath ($ filename . ' .d ' . $ timestamp )]);
360+ 'trashPath ' => Filesystem::normalizePath (static :: getTrashFilename ( $ filename, $ timestamp) )]);
361361
362362 self ::retainVersions ($ filename , $ owner , $ ownerPath , $ timestamp );
363363
@@ -394,15 +394,15 @@ private static function retainVersions($filename, $owner, $ownerPath, $timestamp
394394
395395 if ($ rootView ->is_dir ($ owner . '/files_versions/ ' . $ ownerPath )) {
396396 if ($ owner !== $ user ) {
397- self ::copy_recursive ($ owner . '/files_versions/ ' . $ ownerPath , $ owner . '/files_trashbin/versions/ ' . basename ($ ownerPath ) . ' .d ' . $ timestamp , $ rootView );
397+ self ::copy_recursive ($ owner . '/files_versions/ ' . $ ownerPath , $ owner . '/files_trashbin/versions/ ' . static :: getTrashFilename ( basename ($ ownerPath ), $ timestamp) , $ rootView );
398398 }
399- self ::move ($ rootView , $ owner . '/files_versions/ ' . $ ownerPath , $ user . '/files_trashbin/versions/ ' . $ filename . ' .d ' . $ timestamp );
399+ self ::move ($ rootView , $ owner . '/files_versions/ ' . $ ownerPath , $ user . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename, $ timestamp) );
400400 } elseif ($ versions = \OCA \Files_Versions \Storage::getVersions ($ owner , $ ownerPath )) {
401401 foreach ($ versions as $ v ) {
402402 if ($ owner !== $ user ) {
403- self ::copy ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ owner . '/files_trashbin/versions/ ' . $ v ['name ' ] . '.v ' . $ v ['version ' ] . ' .d ' . $ timestamp );
403+ self ::copy ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ owner . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ v ['name ' ] . '.v ' . $ v ['version ' ], $ timestamp) );
404404 }
405- self ::move ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ user . '/files_trashbin/versions/ ' . $ filename . '.v ' . $ v ['version ' ] . ' .d ' . $ timestamp );
405+ self ::move ($ rootView , $ owner . '/files_versions ' . $ v ['path ' ] . '.v ' . $ v ['version ' ], $ user . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename . '.v ' . $ v ['version ' ], $ timestamp) );
406406 }
407407 }
408408 }
@@ -560,7 +560,7 @@ private static function restoreVersions(View $view, $file, $filename, $uniqueFil
560560 } elseif ($ versions = self ::getVersionsFromTrash ($ versionedFile , $ timestamp , $ user )) {
561561 foreach ($ versions as $ v ) {
562562 if ($ timestamp ) {
563- $ rootView ->rename ($ user . '/files_trashbin/versions/ ' . $ versionedFile . '.v ' . $ v . ' .d ' . $ timestamp , $ owner . '/files_versions/ ' . $ ownerPath . '.v ' . $ v );
563+ $ rootView ->rename ($ user . '/files_trashbin/versions/ ' . static :: getTrashFilename ( $ versionedFile . '.v ' . $ v, $ timestamp) , $ owner . '/files_versions/ ' . $ ownerPath . '.v ' . $ v );
564564 } else {
565565 $ rootView ->rename ($ user . '/files_trashbin/versions/ ' . $ versionedFile . '.v ' . $ v , $ owner . '/files_versions/ ' . $ ownerPath . '.v ' . $ v );
566566 }
@@ -661,7 +661,7 @@ public static function delete($filename, $user, $timestamp = null) {
661661 ->andWhere ($ query ->expr ()->eq ('timestamp ' , $ query ->createNamedParameter ($ timestamp )));
662662 $ query ->execute ();
663663
664- $ file = $ filename . ' .d ' . $ timestamp ;
664+ $ file = static :: getTrashFilename ( $ filename, $ timestamp) ;
665665 } else {
666666 $ file = $ filename ;
667667 }
@@ -704,8 +704,8 @@ private static function deleteVersions(View $view, $file, $filename, $timestamp,
704704 } elseif ($ versions = self ::getVersionsFromTrash ($ filename , $ timestamp , $ user )) {
705705 foreach ($ versions as $ v ) {
706706 if ($ timestamp ) {
707- $ size += $ view ->filesize ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v . ' .d ' . $ timestamp );
708- $ view ->unlink ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v . ' .d ' . $ timestamp );
707+ $ size += $ view ->filesize ('/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename . '.v ' . $ v, $ timestamp) );
708+ $ view ->unlink ('/files_trashbin/versions/ ' . static :: getTrashFilename ( $ filename . '.v ' . $ v, $ timestamp) );
709709 } else {
710710 $ size += $ view ->filesize ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v );
711711 $ view ->unlink ('/files_trashbin/versions/ ' . $ filename . '.v ' . $ v );
@@ -728,7 +728,7 @@ public static function file_exists($filename, $timestamp = null) {
728728 $ view = new View ('/ ' . $ user );
729729
730730 if ($ timestamp ) {
731- $ filename = $ filename . ' .d ' . $ timestamp ;
731+ $ filename = static :: getTrashFilename ( $ filename, $ timestamp) ;
732732 }
733733
734734 $ target = Filesystem::normalizePath ('files_trashbin/files/ ' . $ filename );
@@ -1126,4 +1126,23 @@ public static function isEmpty($user) {
11261126 public static function preview_icon ($ path ) {
11271127 return \OC ::$ server ->getURLGenerator ()->linkToRoute ('core_ajax_trashbin_preview ' , ['x ' => 32 , 'y ' => 32 , 'file ' => $ path ]);
11281128 }
1129+
1130+ /**
1131+ * Return the filename used in the trash bin
1132+ */
1133+ public static function getTrashFilename (string $ filename , int $ timestamp ): string {
1134+ $ trashFilename = $ filename . '.d ' . $ timestamp ;
1135+ $ length = strlen ($ trashFilename );
1136+ // oc_filecache `name` column has a limit of 250 chars
1137+ $ maxLength = 250 ;
1138+ if ($ length > $ maxLength ) {
1139+ $ trashFilename = substr_replace (
1140+ $ trashFilename ,
1141+ '' ,
1142+ $ maxLength / 2 ,
1143+ $ length - $ maxLength
1144+ );
1145+ }
1146+ return $ trashFilename ;
1147+ }
11291148}
0 commit comments