From f3abe9289a582481cb889f15a69ba9756ca16e25 Mon Sep 17 00:00:00 2001 From: Corban-Lee Jones Date: Mon, 8 Jul 2024 22:31:32 +0100 Subject: [PATCH] image fetch attribute --- apps/api/serializers.py | 8 ++--- apps/api/views.py | 2 +- ...tent_unique_guid_guild_id_pair_and_more.py | 34 +++++++++++++++++++ apps/home/models.py | 9 +++-- apps/static/js/home/subscriptions.js | 9 +++-- apps/templates/home/includes/submodal.html | 9 +++++ 6 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 apps/home/migrations/0012_remove_trackedcontent_unique_guid_guild_id_pair_and_more.py diff --git a/apps/api/serializers.py b/apps/api/serializers.py index 63d72c2..5b488c7 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -147,7 +147,7 @@ class SubscriptionSerializer_GET(DynamicModelSerializer): model = Subscription fields = ( "id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", - "filters", "article_title_mutators", "article_desc_mutators", "embed_colour", "active" + "filters", "article_title_mutators", "article_desc_mutators", "article_fetch_image", "embed_colour", "active" ) @@ -160,7 +160,7 @@ class SubscriptionSerializer_POST(DynamicModelSerializer): model = Subscription fields = ( "id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", - "filters", "article_title_mutators", "article_desc_mutators", "embed_colour", "active" + "filters", "article_title_mutators", "article_desc_mutators", "article_fetch_image", "embed_colour", "active" ) @@ -183,7 +183,7 @@ class TrackedContentSerializer_GET(DynamicModelSerializer): class Meta: model = TrackedContent - fields = ("id", "guid", "title", "url", "subscription", "blocked", "creation_datetime") + fields = ("id", "guid", "title", "url", "subscription", "channel_id", "blocked", "creation_datetime") class TrackedContentSerializer_POST(DynamicModelSerializer): """ @@ -192,4 +192,4 @@ class TrackedContentSerializer_POST(DynamicModelSerializer): class Meta: model = TrackedContent - fields = ("id", "guid", "title", "url", "subscription", "blocked", "creation_datetime") + fields = ("id", "guid", "title", "url", "subscription", "channel_id", "blocked", "creation_datetime") diff --git a/apps/api/views.py b/apps/api/views.py index 649cfb0..eda1310 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -403,7 +403,7 @@ class TrackedContent_ListView(generics.ListCreateAPIView): queryset = TrackedContent.objects.all().order_by("-creation_datetime") filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] - filterset_fields = ["guid", "title", "url", "subscription", "subscription__guild_id", "blocked", "creation_datetime"] + filterset_fields = ["guid", "title", "url", "subscription", "subscription__guild_id", "channel_id", "blocked", "creation_datetime"] read_serializer_class = TrackedContentSerializer_GET write_serializer_class = TrackedContentSerializer_POST diff --git a/apps/home/migrations/0012_remove_trackedcontent_unique_guid_guild_id_pair_and_more.py b/apps/home/migrations/0012_remove_trackedcontent_unique_guid_guild_id_pair_and_more.py new file mode 100644 index 0000000..9df57fc --- /dev/null +++ b/apps/home/migrations/0012_remove_trackedcontent_unique_guid_guild_id_pair_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 5.0.4 on 2024-07-05 13:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0011_remove_trackedcontent_unique_guid_guild_id_pair_and_more'), + ] + + operations = [ + migrations.RemoveConstraint( + model_name='trackedcontent', + name='unique guid & guild_id pair', + ), + migrations.RemoveConstraint( + model_name='trackedcontent', + name='unique url & guild_id pair', + ), + migrations.AddField( + model_name='subscription', + name='article_fetch_image', + field=models.BooleanField(default=True, help_text='Will the resulting article have an image?'), + ), + migrations.AddConstraint( + model_name='trackedcontent', + constraint=models.UniqueConstraint(fields=('guid', 'channel_id'), name='unique guid & channel_id pair'), + ), + migrations.AddConstraint( + model_name='trackedcontent', + constraint=models.UniqueConstraint(fields=('url', 'channel_id'), name='unique url & channel_id pair'), + ), + ] diff --git a/apps/home/models.py b/apps/home/models.py index 0c327a6..a63a283 100644 --- a/apps/home/models.py +++ b/apps/home/models.py @@ -230,6 +230,11 @@ class Subscription(models.Model): blank=True ) + article_fetch_image = models.BooleanField( + default=True, + help_text="Will the resulting article have an image?" + ) + active = models.BooleanField(default=True) class Meta: @@ -280,6 +285,8 @@ class TrackedContent(models.Model): subscription = models.ForeignKey(to=Subscription, on_delete=models.CASCADE) + channel_id = models.CharField(max_length=128) + blocked = models.BooleanField(default=False) creation_datetime = models.DateTimeField( @@ -287,8 +294,6 @@ class TrackedContent(models.Model): editable=False ) - channel_id = models.CharField(max_length=128) - class Meta: verbose_name = "tracked content" diff --git a/apps/static/js/home/subscriptions.js b/apps/static/js/home/subscriptions.js index 437cf0a..b52c049 100644 --- a/apps/static/js/home/subscriptions.js +++ b/apps/static/js/home/subscriptions.js @@ -148,6 +148,7 @@ $("#subTable").on("change", ".sub-toggle-active", async function () { desc: sub.article_desc_mutators.map(mutator => mutator.id) }, sub.embed_colour, + sub.article_fetch_image, active, handleErrorMsg=false ); @@ -195,6 +196,7 @@ async function showEditSubModal(subId) { // $("#subImagePreview small").show(); $("#subResetEmbedColour").click(); + $("#subArticleFetchImage").prop("checked", true); } else { $("#subFormModal .form-create, #subAdvancedModal .form-create").hide(); @@ -223,6 +225,7 @@ async function showEditSubModal(subId) { $("#subFilters").val(subscription.filters).change(); subSetHexColour(`#${subscription.embed_colour}`); + $("#subArticleFetchImage").prop("checked", subscription.article_fetch_image); } $("#subId").val(subId); @@ -244,9 +247,10 @@ $("#subForm").on("submit", async function(event) { desc: $("#subDescMutators option:selected").toArray().map(mutator => parseInt(mutator.value)) } subEmbedColour = $("#subEmbedColour").val().split("#")[1]; + articleFetchImage = $("#subArticleFetchImage").prop("checked") active = $("#subActive").prop("checked"); - var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, subFilters, subMutators, subEmbedColour, active); + var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, subFilters, subMutators, subEmbedColour, articleFetchImage, active); if (!subPrimaryKey) { alert("prevented /subscriptions/false/subchannels"); @@ -265,7 +269,7 @@ $("#subForm").on("submit", async function(event) { $("#subFormModal").modal("hide"); }); -async function saveSubscription(id, name, url, guildId, extraNotes, filters, mutators, embedColour, active, handleErrorMsg=true) { +async function saveSubscription(id, name, url, guildId, extraNotes, filters, mutators, embedColour, articleFetchImage, active, handleErrorMsg=true) { var formData = new FormData(); formData.append("name", name); formData.append("url", url); @@ -275,6 +279,7 @@ async function saveSubscription(id, name, url, guildId, extraNotes, filters, mut mutators.title.forEach(mutator => formData.append("article_title_mutators", mutator)); mutators.desc.forEach(mutator => formData.append("article_desc_mutators", mutator)); formData.append("embed_colour", embedColour); + formData.append("article_fetch_image", articleFetchImage) formData.append("active", active); var response; diff --git a/apps/templates/home/includes/submodal.html b/apps/templates/home/includes/submodal.html index ef6dd8c..bb31b60 100644 --- a/apps/templates/home/includes/submodal.html +++ b/apps/templates/home/includes/submodal.html @@ -123,6 +123,15 @@
Colour of each article's embed in Discord.
+
+
+ +
+ +
+
Not all articles have images, but should PYRSS try to find and attach them to the embed?
+
+