From 716d8a766ae0c4e2539f2df601269a3203bcd715 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Wed, 16 Nov 2022 23:00:10 -0700 Subject: Show post images --- activities/models/post_attachment.py | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 activities/models/post_attachment.py (limited to 'activities/models/post_attachment.py') diff --git a/activities/models/post_attachment.py b/activities/models/post_attachment.py new file mode 100644 index 0000000..ee77d29 --- /dev/null +++ b/activities/models/post_attachment.py @@ -0,0 +1,55 @@ +from django.db import models + +from stator.models import State, StateField, StateGraph, StatorModel + + +class PostAttachmentStates(StateGraph): + new = State(try_interval=30000) + fetched = State() + + new.transitions_to(fetched) + + @classmethod + async def handle_new(cls, instance): + # TODO: Fetch images to our own media storage + pass + + +class PostAttachment(StatorModel): + """ + An attachment to a Post. Could be an image, a video, etc. + """ + + post = models.ForeignKey( + "activities.post", + on_delete=models.CASCADE, + related_name="attachments", + ) + + state = StateField(graph=PostAttachmentStates) + + mimetype = models.CharField(max_length=200) + + # File may not be populated if it's remote and not cached on our side yet + file = models.FileField(upload_to="attachments/%Y/%m/%d/", null=True, blank=True) + + remote_url = models.CharField(max_length=500, null=True, blank=True) + + # This is the description for images, at least + name = models.TextField(null=True, blank=True) + + width = models.IntegerField(null=True, blank=True) + height = models.IntegerField(null=True, blank=True) + focal_x = models.IntegerField(null=True, blank=True) + focal_y = models.IntegerField(null=True, blank=True) + blurhash = models.TextField(null=True, blank=True) + + def is_image(self): + return self.mimetype in [ + "image/apng", + "image/avif", + "image/gif", + "image/jpeg", + "image/png", + "image/webp", + ] -- cgit v1.2.3