Updated channel numbers from integer to float

This commit is contained in:
MooseyOnTheLoosey 2025-05-08 09:12:10 -05:00
parent 5be2b9ab56
commit 88866cc905
4 changed files with 41 additions and 10 deletions

View file

@ -23,6 +23,8 @@ import mimetypes
from rest_framework.pagination import PageNumberPagination
import logging
logger = logging.getLogger(__name__)
class OrInFilter(django_filters.Filter):
"""
@ -239,7 +241,7 @@ class ChannelViewSet(viewsets.ModelViewSet):
type=openapi.TYPE_INTEGER, description="ID of the stream to link"
),
"channel_number": openapi.Schema(
type=openapi.TYPE_INTEGER,
type=openapi.TYPE_NUMBER,
description="(Optional) Desired channel number. Must not be in use."
),
"name": openapi.Schema(
@ -255,6 +257,7 @@ class ChannelViewSet(viewsets.ModelViewSet):
if not stream_id:
return Response({"error": "Missing stream_id"}, status=status.HTTP_400_BAD_REQUEST)
stream = get_object_or_404(Stream, pk=stream_id)
logger.debug(f"Stream found: {stream.id}, Custom Properties: {stream.custom_properties}")
channel_group = stream.channel_group
name = request.data.get('name')
@ -266,17 +269,21 @@ class ChannelViewSet(viewsets.ModelViewSet):
channel_number = None
if 'tvg-chno' in stream_custom_props:
channel_number = int(stream_custom_props['tvg-chno'])
channel_number = float(stream_custom_props['tvg-chno'])
logger.debug(f"Channel number from tvg-chno: {channel_number}")
elif 'channel-number' in stream_custom_props:
channel_number = int(stream_custom_props['channel-number'])
channel_number = float(stream_custom_props['channel-number'])
logger.debug(f"Channel number from channel-number: {channel_number}")
if channel_number is None:
provided_number = request.data.get('channel_number')
logger.debug(f"Provided channel number: {provided_number}")
if provided_number is None:
channel_number = Channel.get_next_available_channel_number()
else:
try:
channel_number = int(provided_number)
channel_number = float(provided_number)
logger.debug(f"Provided channel number2: {provided_number}")
except ValueError:
return Response({"error": "channel_number must be an integer."}, status=status.HTTP_400_BAD_REQUEST)
# If the provided number is already used, return an error.
@ -295,6 +302,7 @@ class ChannelViewSet(viewsets.ModelViewSet):
'channel_group_id': channel_group.id,
'streams': [stream_id],
}
logger.debug(f"Final channel data: {channel_data}")
if stream.logo_url:
logo, _ = Logo.objects.get_or_create(url=stream.logo_url, defaults={
@ -330,7 +338,7 @@ class ChannelViewSet(viewsets.ModelViewSet):
type=openapi.TYPE_INTEGER, description="ID of the stream to link"
),
"channel_number": openapi.Schema(
type=openapi.TYPE_INTEGER,
type=openapi.TYPE_NUMBER,
description="(Optional) Desired channel number. Must not be in use."
),
"name": openapi.Schema(
@ -387,9 +395,9 @@ class ChannelViewSet(viewsets.ModelViewSet):
channel_number = None
if 'tvg-chno' in stream_custom_props:
channel_number = int(stream_custom_props['tvg-chno'])
channel_number = float(stream_custom_props['tvg-chno'])
elif 'channel-number' in stream_custom_props:
channel_number = int(stream_custom_props['channel-number'])
channel_number = float(stream_custom_props['channel-number'])
# Determine channel number: if provided, use it (if free); else auto assign.
if channel_number is None:
@ -398,7 +406,7 @@ class ChannelViewSet(viewsets.ModelViewSet):
channel_number = get_auto_number()
else:
try:
channel_number = int(provided_number)
channel_number = float(provided_number)
except ValueError:
errors.append({"item": item, "error": "channel_number must be an integer."})
continue

View file

@ -0,0 +1,18 @@
# Generated by Django 5.1.6 on 2025-05-08 14:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dispatcharr_channels', '0017_alter_channelgroup_name'),
]
operations = [
migrations.AlterField(
model_name='channel',
name='channel_number',
field=models.FloatField(db_index=True),
),
]

View file

@ -210,7 +210,8 @@ class ChannelManager(models.Manager):
class Channel(models.Model):
channel_number = models.IntegerField(db_index=True)
channel_number = models.FloatField(db_index=True)
logger.debug(f"Saving channel with channel_number: {channel_number}")
name = models.CharField(max_length=255)
logo = models.ForeignKey(
'Logo',

View file

@ -7,6 +7,9 @@ from django.urls import reverse
from rest_framework import serializers
from django.utils import timezone
import logging
logger = logging.getLogger(__name__)
class LogoSerializer(serializers.ModelSerializer):
cache_url = serializers.SerializerMethodField()
@ -114,7 +117,8 @@ class BulkChannelProfileMembershipSerializer(serializers.Serializer):
#
class ChannelSerializer(serializers.ModelSerializer):
# Show nested group data, or ID
channel_number = serializers.IntegerField(allow_null=True, required=False)
channel_number = serializers.FloatField(allow_null=True, required=False)
logger.debug(f"Serializer validating channel number: {channel_number}")
channel_group_id = serializers.PrimaryKeyRelatedField(
queryset=ChannelGroup.objects.all(),
source="channel_group",