sessions / 5ac4625af9246a594e79194e85377d7390fc93ab

/home/powellc/src/code.unbl.ink/secstate/vrobbler

This commit has no recorded session.

diff

ignore whitespace

commit 5ac4625af9246a594e79194e85377d7390fc93abAuthor: Colin Powell <colin@unbl.ink>Date:   Thu Jun 11 19:06:37 2026 -0400    [books] Fix bug in scrobbling comic booksdiff --git a/PROJECT.org b/PROJECT.orgindex c48a721..fea4953 100644--- a/PROJECT.org+++ b/PROJECT.org@@ -88,7 +88,7 @@ fetching and simple saving. *** Metadata sources **** Scraper -* Backlog [0/14] :vrobbler:project:personal:+* Backlog [1/15] :vrobbler:project:personal: ** TODO [#C] Create small utility to clean up tracks scrobbled with wonky playback times :vrobbler:personal:bug:music:scrobbles: :PROPERTIES: :ID:       702462cf-d54b-48c6-8a7c-78b8de751deb@@ -518,6 +518,17 @@ log a warning and move on. We should have a global view `/favorites/` that shows the logged in users's favorited media objects. +** DONE [#A] Fix scrobbling comic books :books:scrobbles:bug:+:PROPERTIES:+:ID:       8dfbff19-3fa4-f3b8-21c7-7a416498000c+:END:++*** Description++At some point logdata and log got confused, and now when you try+to scrobble a comic book, it just throws errors. We should look+into where the confusion happened and fix it.+ * Version 51.0 [3/3] ** DONE [#B] Fix koreader scrobble imports to use DST properly :bug:books:imports: :PROPERTIES:diff --git a/vrobbler/apps/scrobbles/models.py b/vrobbler/apps/scrobbles/models.pyindex e568a83..6f165a3 100644--- a/vrobbler/apps/scrobbles/models.py+++ b/vrobbler/apps/scrobbles/models.py@@ -225,7 +225,9 @@ class KoReaderImport(BaseFileImportMixin):          self.mark_started()         try:-            scrobbles = process_koreader_sqlite_file(self.upload_file_path, self.user.id)+            scrobbles = process_koreader_sqlite_file(+                self.upload_file_path, self.user.id+            )             self.record_log(scrobbles)         except Exception as e:             self.record_error(f"Import failed: {e}")@@ -272,7 +274,9 @@ class AudioScrobblerTSVImport(BaseFileImportMixin):          self.mark_started()         try:-            scrobbles = import_audioscrobbler_tsv_file(self.upload_file_path, self.user.id)+            scrobbles = import_audioscrobbler_tsv_file(+                self.upload_file_path, self.user.id+            )             self.record_log(scrobbles)         except Exception as e:             self.record_error(f"Import failed: {e}")@@ -936,6 +940,8 @@ class Scrobble(TimeStampedModel):             logdata_cls = logdata.BaseLogData          log_dict = self.log+        if isinstance(log_dict, logdata.BaseLogData):+            log_dict = log_dict.asdict         if isinstance(self.log, str):             # There's nothing stopping django from saving a string in a JSONField :(             logger.warning(@@ -1440,7 +1446,7 @@ class Scrobble(TimeStampedModel):                         start_ts=int(timezone.now().timestamp()),                     )                 }-            )+            ).asdict          logger.info(             f"[scrobbling] creating new scrobble",@@ -1455,7 +1461,7 @@ class Scrobble(TimeStampedModel):             "calories", None         ):             if media.calories:-                scrobble_data["log"] = FoodLogData(calories=media.calories)+                scrobble_data["log"] = FoodLogData(calories=media.calories).asdict          scrobble = cls.create(scrobble_data)         return scrobble@@ -1778,7 +1784,7 @@ class Scrobble(TimeStampedModel):         return False      def calculate_reading_stats(self, commit=True):-        page_data = self.log.get("page_data")+        page_data = self.logdata.page_data          if page_data:             if isinstance(page_data, dict):@@ -1838,9 +1844,7 @@ class FavoriteMedia(TimeStampedModel):     birding_location = models.ForeignKey(         BirdingLocation, on_delete=models.CASCADE, **BNULL     )-    media_type = models.CharField(-        max_length=20, choices=Scrobble.MediaType.choices-    )+    media_type = models.CharField(max_length=20, choices=Scrobble.MediaType.choices)     sent_to_mopidy = models.BooleanField(default=False)      class Meta: