diff --git a/tubesync/sync/views.py b/tubesync/sync/views.py index ec9e9c4a..5ed2ba78 100644 --- a/tubesync/sync/views.py +++ b/tubesync/sync/views.py @@ -410,11 +410,38 @@ class DeleteSourceView(DeleteView, FormMixin): context_object_name = 'source' def post(self, request, *args, **kwargs): + source = self.get_object() + media_source = dict( + uuid=None, + index_schedule=IndexSchedule.NEVER, + download_media=False, + index_videos=False, + index_streams=False, + filter_text=str(source.pk), + ) + copy_fields = set(map(lambda f: f.name, source._meta.fields)) - set(media_source.keys()) + for k, v in source.__dict__.items(): + if k in copy_fields: + media_source[k] = v + media_source = Source(**media_source) delete_media_val = request.POST.get('delete_media', False) delete_media = True if delete_media_val is not False else False + # overload this boolean for our own use + media_source.delete_removed_media = delete_media + # adjust the directory and key on the source to be deleted + source.directory = source.directory + '/deleted' + source.key = source.key + '/deleted' + source.name = f'[Deleting] {source.name}' + source.save(update_fields={'directory', 'key', 'name'}) + source.refresh_from_db() + # save the new media source now that it is not a duplicate + media_source.uuid = None + media_source.save() + media_source.refresh_from_db() + # switch the media to the new source instance + Media.objects.filter(source=source).update(source=media_source) if delete_media: - source = self.get_object() - directory_path = pathlib.Path(source.directory_path) + directory_path = pathlib.Path(media_source.directory_path) mkdir_p(directory_path) (directory_path / '.to_be_removed').touch(exist_ok=True) return super().post(request, *args, **kwargs)