Consistent formatting

This commit is contained in:
Tim 2024-07-12 16:18:37 +08:00
parent 9615aac8e9
commit 806e47de41
2 changed files with 67 additions and 44 deletions

View File

@ -1,12 +1,13 @@
'''
"""
All the logic for filtering media from channels to work out if we should skip downloading it or not
'''
"""
from common.logger import log
from .models import Source, Media, MediaServer
from .models import Media
from datetime import datetime, timedelta
from django.utils import timezone
# Check the filter conditions for instance, return is if the Skip property has changed so we can do other things
def filter_media(instance: Media):
# Assume we aren't skipping it, if any of these conditions are true, we skip it
@ -24,7 +25,7 @@ def filter_media(instance: Media):
if filter_source_cutoff(instance):
skip = True
# Check if we have filter_text and filter text matches, set unskip
# Check if we have filter_text and filter text matches
if filter_filter_text(instance):
skip = True
@ -35,7 +36,9 @@ def filter_media(instance: Media):
# Check if skipping
if instance.skip != skip:
instance.skip = skip
log.info(f'Media: {instance.source} / {instance} has changed skip setting to {skip}')
log.info(
f"Media: {instance.source} / {instance} has changed skip setting to {skip}"
)
return True
return False
@ -44,8 +47,10 @@ def filter_media(instance: Media):
def filter_published(instance: Media):
# Check if the instance is not published, we have to skip then
if not isinstance(instance.published, datetime):
log.info(f'Media: {instance.source} / {instance} has no published date '
f'set, marking to be skipped')
log.info(
f"Media: {instance.source} / {instance} has no published date "
f"set, marking to be skipped"
)
return True
return False
@ -59,12 +64,16 @@ def filter_filter_text(instance: Media):
# We match the filter text, so don't skip downloading this
if instance.source.is_regex_match(instance.title):
log.info(f'Media: {instance.source} / {instance} has a valid '
f'title filter, marking to be unskipped')
log.info(
f"Media: {instance.source} / {instance} has a valid "
f"title filter, not marking to be skipped"
)
return False
log.info(f'Media: {instance.source} / {instance} doesn\'t match '
f'title filter, marking to be skipped')
log.info(
f"Media: {instance.source} / {instance} doesn't match "
f"title filter, marking to be skipped"
)
return True
@ -72,13 +81,17 @@ def filter_filter_text(instance: Media):
def filter_max_cap(instance: Media):
max_cap_age = instance.source.download_cap_date
if not max_cap_age:
log.debug(f'Media: {instance.source} / {instance} has not max_cap_age '
f'so not skipping based on max_cap_age')
log.debug(
f"Media: {instance.source} / {instance} has not max_cap_age "
f"so not skipping based on max_cap_age"
)
return False
if instance.published <= max_cap_age:
log.info(f'Media: {instance.source} / {instance} is too old for '
f'the download cap date, marking to be skipped')
log.info(
f"Media: {instance.source} / {instance} is too old for "
f"the download cap date, marking to be skipped"
)
return True
return False
@ -89,14 +102,18 @@ def filter_source_cutoff(instance: Media):
if instance.source.delete_old_media and instance.source.days_to_keep > 0:
if not isinstance(instance.published, datetime):
# Media has no known published date or incomplete metadata
log.info(f'Media: {instance.source} / {instance} has no published date, skipping')
log.info(
f"Media: {instance.source} / {instance} has no published date, skipping"
)
return True
delta = timezone.now() - timedelta(days=instance.source.days_to_keep)
if instance.published < delta:
# Media was published after the cutoff date, skip it
log.info(f'Media: {instance.source} / {instance} is older than '
f'{instance.source.days_to_keep} days, skipping')
log.info(
f"Media: {instance.source} / {instance} is older than "
f"{instance.source.days_to_keep} days, skipping"
)
return True
return False
@ -116,20 +133,26 @@ def filter_duration(instance: Media):
instance.duration = duration
instance.save()
else:
log.info(f'Media: {instance.source} / {instance} has no duration stored, not skipping')
log.info(
f"Media: {instance.source} / {instance} has no duration stored, not skipping"
)
return False
duration_limit = instance.source.filter_seconds
if instance.source.filter_seconds_min and duration < duration_limit:
# Filter out videos that are shorter than the minimum
log.info(f'Media: {instance.source} / {instance} is shorter ({duration}) than '
f'the minimum duration ({duration_limit}), skipping')
log.info(
f"Media: {instance.source} / {instance} is shorter ({duration}) than "
f"the minimum duration ({duration_limit}), skipping"
)
return True
if not instance.source.filter_seconds_min and duration > duration_limit:
# Filter out videos that are greater than the maximum
log.info(f'Media: {instance.source} / {instance} is longer ({duration}) than '
f'the maximum duration ({duration_limit}), skipping')
log.info(
f"Media: {instance.source} / {instance} is longer ({duration}) than "
f"the maximum duration ({duration_limit}), skipping"
)
return True
return False
return False

View File

@ -3,51 +3,51 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sync', '0022_add_delete_files_on_disk'),
("sync", "0022_add_delete_files_on_disk"),
]
operations = [
migrations.AddField(
model_name='media',
name='title',
model_name="media",
name="title",
field=models.CharField(
verbose_name='title',
verbose_name="title",
max_length=100,
blank=True,
null=False,
default='',
help_text='Video title'
default="",
help_text="Video title",
),
),
migrations.AddField(
model_name='media',
name='duration',
model_name="media",
name="duration",
field=models.PositiveIntegerField(
verbose_name='duration',
verbose_name="duration",
blank=True,
null=True,
help_text='Duration of media in seconds'
help_text="Duration of media in seconds",
),
),
migrations.AddField(
model_name='source',
name='filter_seconds',
model_name="source",
name="filter_seconds",
field=models.PositiveIntegerField(
verbose_name='filter seconds',
verbose_name="filter seconds",
blank=True,
null=True,
help_text='Filter Media based on Min/Max duration. Leave blank or 0 to disable filtering'
help_text="Filter Media based on Min/Max duration. Leave blank or 0 to disable filtering",
),
),
migrations.AddField(
model_name='source',
name='filter_seconds_min',
model_name="source",
name="filter_seconds_min",
field=models.BooleanField(
verbose_name='filter seconds min/max',
choices=[(True, 'Minimum Length'), (False, 'Maximum Length')],
verbose_name="filter seconds min/max",
choices=[(True, "Minimum Length"), (False, "Maximum Length")],
default=True,
help_text='When Filter Seconds is > 0, do we skip on minimum (video shorter than limit) or maximum ('
'video greater than maximum) video duration'
help_text="When Filter Seconds is > 0, do we skip on minimum (video shorter than limit) or maximum ("
"video greater than maximum) video duration",
),
),
]