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