f56b088643
Base Image Build / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
# Generated migration to backfill stream_hash for existing custom streams
|
|
|
|
from django.db import migrations
|
|
import hashlib
|
|
|
|
|
|
def backfill_custom_stream_hashes(apps, schema_editor):
|
|
"""
|
|
Generate stream_hash for all custom streams that don't have one.
|
|
Uses stream ID to create a stable hash that won't change when name/url is edited.
|
|
"""
|
|
Stream = apps.get_model('dispatcharr_channels', 'Stream')
|
|
|
|
custom_streams_without_hash = Stream.objects.filter(
|
|
is_custom=True,
|
|
stream_hash__isnull=True
|
|
)
|
|
|
|
updated_count = 0
|
|
for stream in custom_streams_without_hash:
|
|
# Generate a stable hash using the stream's ID
|
|
# This ensures the hash never changes even if name/url is edited
|
|
unique_string = f"custom_stream_{stream.id}"
|
|
stream.stream_hash = hashlib.sha256(unique_string.encode()).hexdigest()
|
|
stream.save(update_fields=['stream_hash'])
|
|
updated_count += 1
|
|
|
|
if updated_count > 0:
|
|
print(f"Backfilled stream_hash for {updated_count} custom streams")
|
|
else:
|
|
print("No custom streams needed stream_hash backfill")
|
|
|
|
|
|
def reverse_backfill(apps, schema_editor):
|
|
"""
|
|
Reverse migration - clear stream_hash for custom streams.
|
|
Note: This will break preview functionality for custom streams.
|
|
"""
|
|
Stream = apps.get_model('dispatcharr_channels', 'Stream')
|
|
|
|
custom_streams = Stream.objects.filter(is_custom=True)
|
|
count = custom_streams.update(stream_hash=None)
|
|
print(f"Cleared stream_hash for {count} custom streams")
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('dispatcharr_channels', '0028_channel_created_at_channel_updated_at'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(backfill_custom_stream_hashes, reverse_backfill),
|
|
]
|