mirror of
https://github.com/meeb/tubesync.git
synced 2025-06-23 13:36:35 +00:00
Merge pull request #1031 from tcely/patch-10
Create a media entry after deletion
This commit is contained in:
commit
5db77e3b82
@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
|
||||
from background_task.signals import task_failed
|
||||
from background_task.models import Task
|
||||
from common.logger import log
|
||||
from .models import Source, Media, MediaServer
|
||||
from .models import Source, Media, MediaServer, Metadata
|
||||
from .tasks import (delete_task_by_source, delete_task_by_media, index_source_task,
|
||||
download_media_thumbnail, download_media_metadata,
|
||||
map_task_to_instance, check_source_directory_exists,
|
||||
@ -317,12 +317,36 @@ def media_pre_delete(sender, instance, **kwargs):
|
||||
# Remove thumbnail file for deleted media
|
||||
if instance.thumb:
|
||||
instance.thumb.delete(save=False)
|
||||
# Save the metadata site & thumbnail URL to the metadata column
|
||||
existing_metadata = instance.loaded_metadata
|
||||
metadata_str = instance.metadata or '{}'
|
||||
arg_dict = instance.metadata_loads(metadata_str)
|
||||
site_field = instance.get_metadata_field('extractor_key')
|
||||
thumbnail_field = instance.get_metadata_field('thumbnail')
|
||||
arg_dict.update({
|
||||
site_field: instance.get_metadata_first_value(
|
||||
'extractor_key',
|
||||
'Youtube',
|
||||
arg_dict=existing_metadata,
|
||||
),
|
||||
thumbnail_field: thumbnail_url,
|
||||
})
|
||||
instance.metadata = instance.metadata_dumps(arg_dict=arg_dict)
|
||||
# Do not create more tasks before deleting
|
||||
instance.manual_skip = True
|
||||
instance.save()
|
||||
|
||||
|
||||
@receiver(post_delete, sender=Media)
|
||||
def media_post_delete(sender, instance, **kwargs):
|
||||
# Remove the video file, when configured to do so
|
||||
if instance.source.delete_files_on_disk and instance.media_file:
|
||||
remove_files = (
|
||||
instance.source and
|
||||
instance.source.delete_files_on_disk and
|
||||
instance.downloaded and
|
||||
instance.media_file
|
||||
)
|
||||
if remove_files:
|
||||
video_path = Path(str(instance.media_file.path)).resolve(strict=False)
|
||||
instance.media_file.delete(save=False)
|
||||
# the other files we created have these known suffixes
|
||||
@ -377,3 +401,47 @@ def media_post_delete(sender, instance, **kwargs):
|
||||
log.info(f'Deleting file for: {instance} path: {file}')
|
||||
delete_file(file)
|
||||
|
||||
# Create a media entry for the indexing task to find
|
||||
# Requirements:
|
||||
# source, key, duration, title, published
|
||||
created = False
|
||||
create_for_indexing_task = (
|
||||
not (
|
||||
#not instance.downloaded and
|
||||
instance.skip and
|
||||
instance.manual_skip
|
||||
)
|
||||
)
|
||||
if create_for_indexing_task:
|
||||
skipped_media, created = Media.objects.get_or_create(
|
||||
key=instance.key,
|
||||
source=instance.source,
|
||||
)
|
||||
if created:
|
||||
old_metadata = instance.loaded_metadata
|
||||
site_field = instance.get_metadata_field('extractor_key')
|
||||
thumbnail_url = instance.thumbnail
|
||||
thumbnail_field = instance.get_metadata_field('thumbnail')
|
||||
skipped_media.downloaded = False
|
||||
skipped_media.duration = instance.duration
|
||||
arg_dict=dict(
|
||||
_media_instance_was_deleted=True,
|
||||
)
|
||||
arg_dict.update({
|
||||
site_field: old_metadata.get(site_field),
|
||||
thumbnail_field: thumbnail_url,
|
||||
})
|
||||
skipped_media.metadata = skipped_media.metadata_dumps(
|
||||
arg_dict=arg_dict,
|
||||
)
|
||||
skipped_media.published = instance.published
|
||||
skipped_media.title = instance.title
|
||||
skipped_media.skip = True
|
||||
skipped_media.manual_skip = True
|
||||
skipped_media.save()
|
||||
Metadata.objects.filter(
|
||||
media__isnull=True,
|
||||
site=old_metadata.get(site_field) or 'Youtube',
|
||||
key=skipped_media.key,
|
||||
).update(media=skipped_media)
|
||||
|
||||
|
@ -933,6 +933,10 @@ def delete_all_media_for_source(source_id, source_name, source_directory):
|
||||
for media in qs_gen(mqs):
|
||||
log.info(f'Deleting media for source: {source_name} item: {media.name}')
|
||||
with atomic():
|
||||
#media.downloaded = False
|
||||
media.skip = True
|
||||
media.manual_skip = True
|
||||
media.save()
|
||||
media.delete()
|
||||
# Remove the directory, if the user requested that
|
||||
directory_path = Path(source_directory)
|
||||
|
@ -1836,5 +1836,6 @@ class TasksTestCase(TestCase):
|
||||
cleanup_old_media()
|
||||
|
||||
self.assertEqual(src1.media_source.all().count(), 3)
|
||||
self.assertEqual(src2.media_source.all().count(), 2)
|
||||
self.assertEqual(src2.media_source.all().count(), 3)
|
||||
self.assertEqual(Media.objects.filter(pk=m22.pk).exists(), False)
|
||||
self.assertEqual(Media.objects.filter(source=src2, key=m22.key, skip=True).exists(), True)
|
||||
|
Loading…
Reference in New Issue
Block a user