updates to digiserver app server

This commit is contained in:
2026-09-10 21:03:16 +03:00
parent 046f5e5efd
commit 1c5186463a
129 changed files with 33014 additions and 17 deletions
+48
View File
@@ -21,6 +21,10 @@ class Content(db.Model):
id = db.Column(db.Integer, primary_key=True)
filename = db.Column(db.String(255), nullable=False, unique=True, index=True)
# The pristine original filename as uploaded. `filename` gets overwritten
# with an edited_media/... path when a player edits the content, so this
# column preserves the original so it can always be referenced/restored.
original_filename = db.Column(db.String(255), nullable=True, index=True)
content_type = db.Column(db.String(50), nullable=False, index=True)
duration = db.Column(db.Integer, default=10, nullable=True)
file_size = db.Column(db.BigInteger, nullable=True)
@@ -52,6 +56,28 @@ class Content(db.Model):
def group_count(self) -> int:
"""Get number of groups containing this content."""
return self.groups.count()
@property
def original_display_name(self) -> str:
"""Name of the original (unedited) file for display purposes."""
return self.original_filename or self.filename
@property
def original_media_path(self) -> str:
"""Path (relative to uploads/) where the original unedited file lives.
When a player edits content the original file is archived under
edited_media/<id>/original_<name>. If never edited, the original IS the
current file.
"""
if self.original_filename and self.original_filename != self.filename:
return f"edited_media/{self.id}/original_{self.original_filename}"
return self.filename
@property
def current_media_path(self) -> str:
"""Path (relative to uploads/) of the current/latest version to display."""
return self.filename
def is_image(self) -> bool:
"""Check if content is an image."""
@@ -68,3 +94,25 @@ class Content(db.Model):
def is_weblink(self) -> bool:
"""Check if content is a web link (URL) rather than an uploaded file."""
return self.content_type == 'weblink'
@property
def has_player_edits(self) -> bool:
"""Whether this content has been edited on a player."""
return self.edits.count() > 0
@property
def original_display_name(self) -> str:
"""Display name of the original (unedited) file."""
return self.original_filename or self.filename
@property
def original_media_path(self) -> str:
"""uploads/-relative path of the pristine original file.
After a player edit the original is archived at
edited_media/<id>/original_<name>; before any edit it is simply the
current file.
"""
if self.original_filename and self.filename != self.original_filename:
return f"edited_media/{self.id}/original_{self.original_filename}"
return self.filename