From 21972d9630e34a17619c0eae81f5f2080eb4dcb4 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 13 Mar 2020 16:16:47 +0100
Subject: [PATCH] See #170: fixed several feed parsing issues, again 2

---
 api/config/settings/common.py          |  2 ++
 api/funkwhale_api/audio/serializers.py | 18 +++++++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/api/config/settings/common.py b/api/config/settings/common.py
index 8af05491fd..373c196d66 100644
--- a/api/config/settings/common.py
+++ b/api/config/settings/common.py
@@ -989,3 +989,5 @@ PODCASTS_THIRD_PARTY_VISIBILITY = env("PODCASTS_THIRD_PARTY_VISIBILITY", default
 PODCASTS_RSS_FEED_REFRESH_DELAY = env.int(
     "PODCASTS_RSS_FEED_REFRESH_DELAY", default=60 * 60 * 24
 )
+# maximum items loaded through XML feed
+PODCASTS_RSS_FEED_MAX_ITEMS = env.int("PODCASTS_RSS_FEED_MAX_ITEMS", default=250)
diff --git a/api/funkwhale_api/audio/serializers.py b/api/funkwhale_api/audio/serializers.py
index 8f46edc9a9..310176238a 100644
--- a/api/funkwhale_api/audio/serializers.py
+++ b/api/funkwhale_api/audio/serializers.py
@@ -366,8 +366,10 @@ def get_channel_from_rss_url(url):
         )
     )
     if parsed_feed.feed.get("rights"):
-        track_defaults["copyright"] = parsed_feed.feed.rights
-    for entry in entries:
+        track_defaults["copyright"] = parsed_feed.feed.rights[
+            : music_models.MAX_LENGTHS["COPYRIGHT"]
+        ]
+    for entry in entries[: settings.PODCASTS_RSS_FEED_MAX_ITEMS]:
         logger.debug("Importing feed item %s", entry.id)
         s = RssFeedItemSerializer(data=entry)
         if not s.is_valid():
@@ -510,7 +512,9 @@ class RssFeedSerializer(serializers.Serializer):
             **artist_kwargs,
             defaults={
                 "attributed_to": service_actor,
-                "name": validated_data["title"],
+                "name": validated_data["title"][
+                    : music_models.MAX_LENGTHS["ARTIST_NAME"]
+                ],
                 "content_category": "podcast",
             },
         )
@@ -695,12 +699,16 @@ class RssFeedItemSerializer(serializers.Serializer):
             {
                 "disc_number": validated_data.get("itunes_season", 1),
                 "position": validated_data.get("itunes_episode", 1),
-                "title": validated_data["title"],
+                "title": validated_data["title"][
+                    : music_models.MAX_LENGTHS["TRACK_TITLE"]
+                ],
                 "artist": channel.artist,
             }
         )
         if "rights" in validated_data:
-            track_defaults["rights"] = validated_data["rights"]
+            track_defaults["rights"] = validated_data["rights"][
+                : music_models.MAX_LENGTHS["COPYRIGHT"]
+            ]
 
         if "published_parsed" in validated_data:
             track_defaults["creation_date"] = datetime.datetime.fromtimestamp(
-- 
GitLab