|
| 1 | +from django.db import migrations |
| 2 | +from django.conf import settings |
| 3 | +from app.models import MediaTypes |
| 4 | +from app.providers import services |
| 5 | +import logging |
| 6 | + |
| 7 | +logger = logging.getLogger(__name__) |
| 8 | + |
| 9 | +def update_episode_images(apps, schema_editor): |
| 10 | + Item = apps.get_model('app', 'Item') |
| 11 | + |
| 12 | + # Get all episode items with default image |
| 13 | + episode_items = Item.objects.filter( |
| 14 | + media_type=MediaTypes.EPISODE.value, |
| 15 | + image=settings.IMG_NONE |
| 16 | + ) |
| 17 | + |
| 18 | + if not episode_items.exists(): |
| 19 | + return |
| 20 | + |
| 21 | + logger.info("Starting episode image update migration") |
| 22 | + logger.info("Found %s episodes with default images to process", episode_items.count()) |
| 23 | + |
| 24 | + items_to_update = [] |
| 25 | + |
| 26 | + for item in episode_items: |
| 27 | + try: |
| 28 | + |
| 29 | + logger.info( |
| 30 | + "Updating image for %s S%sE%s", |
| 31 | + item.title, |
| 32 | + item.season_number, |
| 33 | + item.episode_number |
| 34 | + ) |
| 35 | + season_metadata = services.get_media_metadata( |
| 36 | + MediaTypes.SEASON.value, |
| 37 | + item.media_id, |
| 38 | + item.source, |
| 39 | + [item.season_number] |
| 40 | + ) |
| 41 | + |
| 42 | + for ep_meta in season_metadata.get('episodes', []): |
| 43 | + if ep_meta['episode_number'] == int(item.episode_number): |
| 44 | + if ep_meta.get('still_path'): |
| 45 | + item.image = f"https://image.tmdb.org/t/p/original{ep_meta['still_path']}" |
| 46 | + elif 'image' in ep_meta: |
| 47 | + item.image = ep_meta['image'] |
| 48 | + items_to_update.append(item) |
| 49 | + break |
| 50 | + |
| 51 | + except Exception as e: |
| 52 | + print(f"Failed to update image for episode {item.id}: {str(e)}") |
| 53 | + |
| 54 | + if items_to_update: |
| 55 | + Item.objects.bulk_update(items_to_update, ['image']) |
| 56 | + |
| 57 | +class Migration(migrations.Migration): |
| 58 | + dependencies = [ |
| 59 | + ('app', '0043_remove_historicalanime_progress_changed_and_more'), |
| 60 | + ] |
| 61 | + |
| 62 | + operations = [ |
| 63 | + migrations.RunPython(update_episode_images, reverse_code=migrations.RunPython.noop), |
| 64 | + ] |
0 commit comments