Mark the directory for removal after the Source is deleted

This commit is contained in:
tcely 2025-03-14 11:32:34 -04:00
parent bdf9a69f48
commit 453b9eaa79
No known key found for this signature in database
GPG Key ID: B84DD241AF4C4274
2 changed files with 8 additions and 10 deletions

View File

@ -1,4 +1,5 @@
from pathlib import Path from pathlib import Path
from shutil import rmtree
from tempfile import TemporaryDirectory from tempfile import TemporaryDirectory
from django.conf import settings from django.conf import settings
from django.db.models.signals import pre_save, post_save, pre_delete, post_delete from django.db.models.signals import pre_save, post_save, pre_delete, post_delete
@ -151,6 +152,11 @@ def source_post_delete(sender, instance, **kwargs):
# Triggered after a source is deleted # Triggered after a source is deleted
log.info(f'Deleting tasks for source: {instance.name}') log.info(f'Deleting tasks for source: {instance.name}')
delete_task_by_source('sync.tasks.index_source_task', instance.pk) delete_task_by_source('sync.tasks.index_source_task', instance.pk)
source = instance
# Remove the directory, if the user requested that
directory_path = Path(source.directory_path)
if (directory_path / '.to_be_removed').is_file():
rmtree(directory_path, True)
@receiver(task_failed, sender=Task) @receiver(task_failed, sender=Task)

View File

@ -3,7 +3,6 @@ import os
import json import json
from base64 import b64decode from base64 import b64decode
import pathlib import pathlib
import shutil
import sys import sys
from django.conf import settings from django.conf import settings
from django.http import FileResponse, Http404, HttpResponseNotFound, HttpResponseRedirect from django.http import FileResponse, Http404, HttpResponseNotFound, HttpResponseRedirect
@ -415,15 +414,8 @@ class DeleteSourceView(DeleteView, FormMixin):
delete_media = True if delete_media_val is not False else False delete_media = True if delete_media_val is not False else False
if delete_media: if delete_media:
source = self.get_object() source = self.get_object()
for media in Media.objects.filter(source=source): directory_path = pathlib.Path(source.directory_path)
if media.media_file: (directory_path / '.to_be_removed').touch(exist_ok=True)
file_path = media.media_file.path
matching_files = glob.glob(os.path.splitext(file_path)[0] + '.*')
for file in matching_files:
delete_file(file)
directory_path = source.directory_path
if os.path.exists(directory_path):
shutil.rmtree(directory_path, True)
return super().post(request, *args, **kwargs) return super().post(request, *args, **kwargs)
def get_success_url(self): def get_success_url(self):