From 7fa21c27ea25c945e504ad4e86ddc36df97c0aa8 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Mon, 19 Feb 2024 19:22:13 -0500 Subject: [PATCH] [locations] Remove RawGeoLocation model and ScrobbledPage model --- vrobbler/apps/locations/admin.py | 17 +--- .../migrations/0006_delete_rawgeolocation.py | 16 ++++ vrobbler/apps/locations/models.py | 9 -- vrobbler/apps/scrobbles/admin.py | 11 --- .../migrations/0050_delete_scrobbledpage.py | 16 ++++ vrobbler/apps/scrobbles/models.py | 93 ------------------- 6 files changed, 33 insertions(+), 129 deletions(-) create mode 100644 vrobbler/apps/locations/migrations/0006_delete_rawgeolocation.py create mode 100644 vrobbler/apps/scrobbles/migrations/0050_delete_scrobbledpage.py diff --git a/vrobbler/apps/locations/admin.py b/vrobbler/apps/locations/admin.py index cc2c07d..7666b28 100644 --- a/vrobbler/apps/locations/admin.py +++ b/vrobbler/apps/locations/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from locations.models import GeoLocation, RawGeoLocation +from locations.models import GeoLocation from scrobbles.admin import ScrobbleInline @@ -19,18 +19,3 @@ class GeoLocationAdmin(admin.ModelAdmin): inlines = [ ScrobbleInline, ] - - -@admin.register(RawGeoLocation) -class RawGeoLocationAdmin(admin.ModelAdmin): - date_hierarchy = "created" - list_display = ( - "lat", - "lon", - "altitude", - "speed", - ) - ordering = ( - "lat", - "lon", - ) diff --git a/vrobbler/apps/locations/migrations/0006_delete_rawgeolocation.py b/vrobbler/apps/locations/migrations/0006_delete_rawgeolocation.py new file mode 100644 index 0000000..ae01609 --- /dev/null +++ b/vrobbler/apps/locations/migrations/0006_delete_rawgeolocation.py @@ -0,0 +1,16 @@ +# Generated by Django 4.2.9 on 2024-02-20 00:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("locations", "0005_alter_rawgeolocation_options_and_more"), + ] + + operations = [ + migrations.DeleteModel( + name="RawGeoLocation", + ), + ] diff --git a/vrobbler/apps/locations/models.py b/vrobbler/apps/locations/models.py index f0c93d4..c2aec39 100644 --- a/vrobbler/apps/locations/models.py +++ b/vrobbler/apps/locations/models.py @@ -120,12 +120,3 @@ class GeoLocation(ScrobblableMixin): lon__lte=lon_max, lon__gte=lon_min, ) - - -class RawGeoLocation(TimeStampedModel): - user = models.ForeignKey(User, on_delete=models.CASCADE) - lat = models.FloatField() - lon = models.FloatField() - altitude = models.FloatField(**BNULL) - speed = models.FloatField(**BNULL) - timestamp = models.DateTimeField(**BNULL) diff --git a/vrobbler/apps/scrobbles/admin.py b/vrobbler/apps/scrobbles/admin.py index ec28c80..98310d6 100644 --- a/vrobbler/apps/scrobbles/admin.py +++ b/vrobbler/apps/scrobbles/admin.py @@ -7,7 +7,6 @@ from scrobbles.models import ( LastFmImport, RetroarchImport, Scrobble, - ScrobbledPage, ) from scrobbles.mixins import Genre @@ -126,13 +125,3 @@ class ScrobbleAdmin(admin.ModelAdmin): def playback_percent(self, obj): return obj.percent_played - - -@admin.register(ScrobbledPage) -class ScrobbledPageAdmin(admin.ModelAdmin): - list_display = ( - "number", - "scrobble", - "notes", - ) - raw_id_fields = ("scrobble",) diff --git a/vrobbler/apps/scrobbles/migrations/0050_delete_scrobbledpage.py b/vrobbler/apps/scrobbles/migrations/0050_delete_scrobbledpage.py new file mode 100644 index 0000000..f1dedf1 --- /dev/null +++ b/vrobbler/apps/scrobbles/migrations/0050_delete_scrobbledpage.py @@ -0,0 +1,16 @@ +# Generated by Django 4.2.9 on 2024-02-20 00:21 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("scrobbles", "0049_rename_webpage_scrobble_web_page"), + ] + + operations = [ + migrations.DeleteModel( + name="ScrobbledPage", + ), + ] diff --git a/vrobbler/apps/scrobbles/models.py b/vrobbler/apps/scrobbles/models.py index 840c062..927b0fe 100644 --- a/vrobbler/apps/scrobbles/models.py +++ b/vrobbler/apps/scrobbles/models.py @@ -955,96 +955,3 @@ class Scrobble(TimeStampedModel): f"{self.id} - {self.playback_position_seconds} - {self.source}" ) self.save(update_fields=["playback_position_seconds"]) - - -class ScrobbledPage(TimeStampedModel): - scrobble = models.ForeignKey(Scrobble, on_delete=models.DO_NOTHING) - number = models.IntegerField() - start_time = models.DateTimeField(**BNULL) - end_time = models.DateTimeField(**BNULL) - duration_seconds = models.IntegerField(**BNULL) - notes = models.CharField(max_length=255, **BNULL) - - def __str__(self): - return f"Page {self.number} of {self.book.pages} in {self.book.title}" - - def save(self, *args, **kwargs): - if not self.end_time and self.duration_seconds: - self._set_end_time() - - return super(ScrobbledPage, self).save(*args, **kwargs) - - @cached_property - def book(self): - return self.scrobble.book - - @property - def next(self): - user_pages_qs = self.book.scrobbledpage_set.filter( - user=self.scrobble.user - ) - page = user_pages_qs.filter(number=self.number + 1).first() - if not page: - page = ( - user_pages_qs.filter(created__gt=self.created) - .order_by("created") - .first() - ) - return page - - @property - def previous(self): - user_pages_qs = self.book.scrobbledpage_set.filter( - user=self.scrobble.user - ) - page = user_pages_qs.filter(number=self.number - 1).first() - if not page: - page = ( - user_pages_qs.filter(created__lt=self.created) - .order_by("-created") - .first() - ) - return page - - @property - def seconds_to_next_page(self) -> int: - seconds = 999999 # Effectively infnity time as we have no next - if not self.end_time: - self._set_end_time() - if self.next: - seconds = (self.next.start_time - self.end_time).seconds - return seconds - - @property - def is_scrobblable(self) -> bool: - """A page defines the start of a scrobble if the seconds to next page - are greater than an hour, or 3600 seconds, and it's not a single page, - so the next seconds to next_page is less than an hour as well. - - As a special case, the first recorded page is a scrobble, so we establish - when the book was started. - - """ - is_scrobblable = False - over_an_hour_since_last_page = False - if not self.previous: - is_scrobblable = True - - if self.previous: - over_an_hour_since_last_page = ( - self.previous.seconds_to_next_page >= 3600 - ) - blip = self.seconds_to_next_page >= 3600 - - if over_an_hour_since_last_page and not blip: - is_scrobblable = True - return is_scrobblable - - def _set_end_time(self) -> None: - if self.end_time: - return - - self.end_time = self.start_time + datetime.timedelta( - seconds=self.duration_seconds - ) - self.save(update_fields=["end_time"])