[scrobbles] Add tagging from labels
This commit is contained in:
@ -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",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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}")
|
||||||
|
|||||||
Reference in New Issue
Block a user