mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-25 11:04:07 +00:00
Updated channel numbers from integer to float
This commit is contained in:
parent
5be2b9ab56
commit
88866cc905
4 changed files with 41 additions and 10 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
),
|
||||
]
|
||||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue