[scrobbles] Add tagging from labels
All checks were successful
build & deploy / test (push) Successful in 1m45s
build & deploy / deploy (push) Successful in 21s

This commit is contained in:
2026-03-24 10:42:10 -04:00
parent 24c7c33ac2
commit 41bb52c551
2 changed files with 38 additions and 3 deletions

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-24 14:14
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("scrobbles", "0073_delete_chartrecord"),
]
operations = [
migrations.AddField(
model_name="scrobble",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -12,8 +12,9 @@ import pytz
from beers.models import Beer
from boardgames.models import BoardGame
from books.koreader import process_koreader_sqlite_file
from books.models import Book, Paper, BookPageLogData, BookLogData
from books.models import Book, BookLogData, BookPageLogData, Paper
from bricksets.models import BrickSet
from charts.utils import build_charts
from dataclass_wizard.errors import ParseError
from django.conf import settings
from django.contrib.auth import get_user_model
@ -42,15 +43,15 @@ from profiles.utils import (
from puzzles.models import Puzzle
from scrobbles import dataclasses as logdata
from scrobbles.constants import (
AUTO_FINISH_MEDIA,
LONG_PLAY_MEDIA,
MEDIA_END_PADDING_SECONDS,
AUTO_FINISH_MEDIA,
)
from scrobbles.importers.lastfm import LastFM
from scrobbles.notifications import ScrobbleNtfyNotification
from charts.utils import build_charts
from scrobbles.utils import get_file_md5_hash, media_class_to_foreign_key
from sports.models import SportEvent
from taggit.managers import TaggableManager
from tasks.models import Task
from trails.models import Trail
from videogames import retroarch
@ -447,6 +448,7 @@ class Scrobble(TimeStampedModel):
decoder=logdata.ScrobbleLogDataDecoder,
)
timezone = models.CharField(max_length=50, **BNULL)
tags = TaggableManager(blank=True)
# Fields for keeping track of video game data
videogame_save_data = models.FileField(
@ -1296,6 +1298,8 @@ class Scrobble(TimeStampedModel):
]
)
self._add_labels_as_tags()
class_name = self.media_obj.__class__.__name__
if class_name in LONG_PLAY_MEDIA.values():
self.finish_long_play()
@ -1313,6 +1317,11 @@ class Scrobble(TimeStampedModel):
},
)
def _add_labels_as_tags(self) -> None:
if self.logdata and hasattr(self.logdata, "labels") and self.logdata.labels:
for label in self.logdata.labels:
self.tags.add(label)
def pause(self) -> None:
if self.is_paused:
logger.warning(f"{self.id} - already paused - {self.source}")