@@ -219,17 +219,20 @@ def upload_file(self, request, folder_id):
219219 return HttpResponseNotFound (f"FolderModel<{ folder_id } > not found." )
220220 if request .content_type != 'multipart/form-data' or 'upload_file' not in request .FILES :
221221 return HttpResponse ("Bad encoding type or missing payload." , status = 415 )
222+ realm = self .get_realm (request )
222223 model = FileModel .objects .get_model_for (request .FILES ['upload_file' ].content_type )
223224 new_file = model .objects .create_from_upload (
225+ realm ,
224226 request .FILES ['upload_file' ],
225227 folder = folder ,
226228 owner = request .user ,
227229 )
228- return JsonResponse ({'file_info' : new_file .as_dict })
230+ return JsonResponse ({'file_info' : new_file .as_dict ( realm ) })
229231
230232 def update_inode (self , request , folder_id ):
231233 if response := self .check_for_valid_post_request (request , folder_id ):
232234 return response
235+ realm = self .get_realm (request )
233236 body = json .loads (request .body )
234237 try :
235238 inode_obj = self .get_object (request , body ['id' ])
@@ -252,7 +255,7 @@ def update_inode(self, request, folder_id):
252255 if update_values :
253256 inode_obj .save (update_fields = list (update_values .keys ()))
254257 return JsonResponse ({
255- 'new_inode' : self .serialize_inode (inode_obj ),
258+ 'new_inode' : self .serialize_inode (realm , inode_obj ),
256259 'favorite_folders' : self .get_favorite_folders (request , current_folder ),
257260 })
258261
@@ -280,7 +283,10 @@ def move_inodes(self, request, folder_id):
280283 body = json .loads (request .body )
281284 current_folder = self .get_object (request , folder_id )
282285 if 'target_id' in body :
283- target_folder = self .get_object (request , body ['target_id' ])
286+ if body ['target_id' ] == 'parent' :
287+ target_folder = current_folder .parent
288+ else :
289+ target_folder = self .get_object (request , body ['target_id' ])
284290 if not target_folder :
285291 msg = gettext ("Folder named “{folder}” not found." )
286292 return HttpResponseNotFound (msg .format (folder = body ['target_id' ]))
@@ -315,23 +321,25 @@ def delete_inodes(self, request, folder_id):
315321 trash_folder = self .get_trash_folder (request )
316322 if current_folder .id == trash_folder .id :
317323 return HttpResponse ("Cannot move inodes from trash folder into itself." , status = 409 )
324+ realm = self .get_realm (request )
318325 trash_ordering = trash_folder .get_max_ordering ()
319326 inode_ids = body .get ('inode_ids' , [])
320327 for entry in FolderModel .objects .filter_unified (id__in = inode_ids ):
321328 inode = FolderModel .objects .get_inode (id = entry ['id' ])
329+ update_fields = ['parent' , 'ordering' ]
322330 if entry ['is_folder' ]:
323331 PinnedFolder .objects .filter (folder = inode ).delete ()
324332 while trash_folder .listdir (name = inode .name , is_folder = True ).exists ():
325333 inode .name = f"{ inode .name } .renamed"
326- inode . save ( update_fields = [ 'name' ] )
334+ update_fields . append ( 'name' )
327335 DiscardedInode .objects .create (
328336 inode = inode .id ,
329337 previous_parent = inode .parent ,
330338 )
331339 trash_ordering += 1
332340 inode .ordering = trash_ordering
333341 inode .parent = trash_folder
334- inode .save (update_fields = [ 'parent' ] )
342+ inode .save (update_fields = update_fields )
335343 current_folder .reorder ()
336344 return JsonResponse ({
337345 'favorite_folders' : self .get_favorite_folders (request , current_folder ),
@@ -354,12 +362,16 @@ def undo_discarded_inodes(self, request):
354362 def erase_trash_folder (self , request ):
355363 if request .method != 'DELETE' :
356364 return HttpResponseNotAllowed (f"Method { request .method } not allowed. Only DELETE requests are allowed." )
365+ realm = self .get_realm (request )
357366 trash_folder_entries = self .get_trash_folder (request ).listdir ()
358367 DiscardedInode .objects .filter (inode__in = list (trash_folder_entries .values_list ('id' , flat = True ))).delete ()
359368 for entry in trash_folder_entries :
360- # bulk delete does not work here because file must be erased from disk
369+ # bulk delete does not work here because each file must be erased from disk
361370 proxy_obj = InodeManager .get_proxy_object (entry )
362- proxy_obj .delete ()
371+ if proxy_obj .is_folder :
372+ proxy_obj .delete ()
373+ else :
374+ proxy_obj .erase_and_delete (realm )
363375 fallback_folder = self .get_fallback_folder (request )
364376 return JsonResponse ({
365377 'success_url' : reverse (
@@ -373,6 +385,7 @@ def add_folder(self, request, folder_id):
373385 return response
374386 parent_folder = self .get_object (request , folder_id )
375387 assert parent_folder .is_folder
388+ realm = self .get_realm (request )
376389 body = json .loads (request .body )
377390 if parent_folder .listdir (name = body ['name' ], is_folder = True ).exists ():
378391 msg = gettext ("A folder named “{name}” already exists." )
@@ -383,13 +396,14 @@ def add_folder(self, request, folder_id):
383396 owner = request .user ,
384397 ordering = parent_folder .get_max_ordering () + 1 ,
385398 )
386- return JsonResponse ({'new_folder' : self .serialize_inode (new_folder )})
399+ return JsonResponse ({'new_folder' : self .serialize_inode (realm , new_folder )})
387400
388401 def get_or_create_folder (self , request , folder_id ):
389402 if response := self .check_for_valid_post_request (request , folder_id ):
390403 return response
391404 if not (folder := self .get_object (request , folder_id )):
392405 return HttpResponseNotFound (f"FolderModel<{ folder_id } > not found." )
406+ realm = self .get_realm (request )
393407 ordering = folder .get_max_ordering () + 1
394408 body = json .loads (request .body )
395409 for folder_name in body ['relative_path' ].split ('/' ):
@@ -400,4 +414,4 @@ def get_or_create_folder(self, request, folder_id):
400414 )
401415 if created :
402416 ordering += 1
403- return JsonResponse ({'folder' : self .serialize_inode (folder )})
417+ return JsonResponse ({'folder' : self .serialize_inode (realm , folder )})
0 commit comments