diff --git a/PROJECT.org b/PROJECT.org index 94ce6e3..74fe283 100644 --- a/PROJECT.org +++ b/PROJECT.org @@ -1,115 +1,103 @@ -#+title: TODOs +#+title: Vrobbler Project -* Backlog [1/20] -** TODO [#A] Add email importer for BG stats file uploads :vrobbler:feature:boardgames:personal:project: +* Overview +* Features +** Beer +*** Triggers +**** Bookmarklet +**** Manual +*** Metadata sources +**** Untappd +** Book +*** Triggers +**** Webdav via KoReader +**** Manual +*** Metadata sources +**** Google Books +This is the preferred method at this time. Also, the Book model implements a +`find_or_create` classmethod which is an example of an interface we can use for +other data models to get metadata in a way that provides easy testing, bulk +fetching and simple saving. +**** OpenLibrary +**** ComicVine +** Board Game +*** Triggers +**** IMAP import +**** Bookmarklet +**** Manual +** Location +*** Triggers +**** GPSLogger (Android) +*** Metadata sources +**** User input +** Music +*** Triggers +**** Last.FM +**** Rockbox files +**** Mopidy +**** Jellyfin +*** Metadata sources +**** Musicbrainz +** Podcast +*** Triggers +**** Mopidy +*** Metadata sources +**** Google Podcasts +**** PodcastIndex +** Sport +*** Triggers +**** Bookmarklet +**** Manual +*** Metadata sources +**** Thes Sports DB +** Task +*** Triggers +**** Todoist +**** Org-mode +*** Metadata sources +**** User profile +** Trails +** Video +*** Triggers +**** Jellyfin +**** Bookmarklet +**** Manual +*** Metadata sources +**** IMDB +**** Youtube +** Web Page +*** Triggers +**** Bookmarklet +*** Metadata sources +**** Scraper +* Release history +* Chores +** DONE Document various vrobbler features :chore:personal:project:vrobbler:documentation: :PROPERTIES: -:ID: 116fe738-7966-615c-d195-ccff0337b101 +:ID: 514e9285-96f1-265f-56df-118c12f60918 +:END: +:LOGBOOK: +CLOCK: [2025-07-09 Wed 09:55]--[2025-07-09 Wed 10:15] => 0:20 +:END: +* Backlog [3/23] +** TODO Add timezone awarness to IMAP importer :personal:project:vrobbler:feature:importer:imap:timezones: +** DONE Track timezone changes for profiles :vrobbler:feature:profiles:personal:project: +:PROPERTIES: +:ID: 89ec867f-29fd-82f1-be17-b49dddc30c78 +:END: +[2025-07-11 14:23] +** TODO [#A] Add classmethod for metadata fetching to tracks :vrobbler:feature:music:personal:project: +:PROPERTIES: +:ID: bc4b45e5-4c65-13c5-ab7b-1937d3fbf5c2 +:END: +:LOGBOOK: +CLOCK: [2025-07-09 Wed 10:15] :END: -#+begin_src json example of a file -{ - "about": "This is a Play file that can be read by Board Game Stats. If you see this text, try to use a share, export or open-in function to open it with Board Game Stats.", - "players": [ - { - "uuid": "31f8b92e-11d8-4162-88b1-fd9c79eea249", - "id": 2, - "name": "Colin", - "isAnonymous": false, - "modificationDate": "2025-07-01 18:10:32", - "metaData": "{\"isNpc\":0}" - }, - { - "uuid": "00074700-cf4e-4ad3-b334-d35805bb0d90", - "id": 4, - "name": "Asa Sewell", - "isAnonymous": false, - "modificationDate": "2025-07-01 18:03:37" - } - ], - "locations": [ - { - "uuid": "14f7389c-767f-4725-9b35-906c407b293c", - "id": 3, - "name": "Timberwyck Farm", - "modificationDate": "2025-07-01 18:03:38" - } - ], - "games": [ - { - "uuid": "043a2851-f201-467a-a60c-0b0a7e9c33d2", - "id": 333, - "name": "Ghost Fightin' Treasure Hunters: Anniversary Edition", - "modificationDate": "2025-07-02 01:37:14", - "cooperative": true, - "highestWins": true, - "noPoints": false, - "usesTeams": false, - "urlThumb": "https://cf.geekdo-images.com/DHA-mcH3zzw_OjfDxOPj1A__thumb/img/UhaIm4KIDIiraUc44QIvSAbMUXI=/fit-in/200x150/filters:strip_icc()/pic8266874.jpg", - "urlImage": "https://cf.geekdo-images.com/DHA-mcH3zzw_OjfDxOPj1A__original/img/2-Lb6nLePhn0I0Hh2j1pOtbO4rg=/0x0/filters:format(jpeg)/pic8266874.jpg", - "bggName": "Ghost Fightin' Treasure Hunters: Anniversary Edition", - "bggYear": 2024, - "bggId": 422668, - "designers": "Brian Yu", - "isBaseGame": 1, - "isExpansion": 0, - "rating": 75, - "minPlayerCount": 2, - "maxPlayerCount": 5, - "minPlayTime": 30, - "maxPlayTime": 0, - "minAge": 8 - } - ], - "plays": [ - { - "uuid": "bae3f29e-5e1e-45d8-b409-47a665c8d5b5", - "modificationDate": "2025-07-02 01:37:59", - "entryDate": "2025-07-02 01:31:38", - "playDate": "2025-07-02 01:31:38", - "usesTeams": false, - "durationMin": 23, - "ignored": false, - "manualWinner": true, - "rounds": 3, - "scoresheet": "{\"bggId\":244711,\"version\":1,\"langCode\":\"en\",\"scoreType\":\"bestTotalWins\",\"groups\":[{\"templateId\":\"1\",\"maxRepeat\":-1,\"repetition\":1,\"hasSubTotal\":false,\"hideSingleGroupLabel\":false,\"isExtra\":false,\"rows\":[{\"templateId\":\"vptrack\",\"label\":\"VP track\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}},{\"templateId\":\"objectives\",\"label\":\"Objectives\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}},{\"templateId\":\"mastercards\",\"label\":\"Master cards\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}}]}]}", - "locationRefId": 3, - "gameRefId": 333, - "board": "", - "scoringSetting": 4, - "metaData": "{\"playUsedGameCopy\":2}", - "playerScores": [ - { - "score": "", - "winner": true, - "newPlayer": true, - "startPlayer": false, - "playerRefId": 4, - "role": "", - "rank": 0, - "seatOrder": 0, - "metaData": "{\"scoreUuid\":\"00074700-cf4e-4ad3-b334-d35805bb0d90\"}" - }, - { - "score": "", - "winner": true, - "newPlayer": true, - "startPlayer": false, - "playerRefId": 2, - "role": "", - "rank": 0, - "seatOrder": 0, - "metaData": "{\"scoreUuid\":\"31f8b92e-11d8-4162-88b1-fd9c79eea249\"}" - } - ], - "expansionPlays": [] - } - ], - "userInfo": { - "meRefId": 2 - } -} -#+end_src -** TODO Add youtube link in place of IMDB on video detail page :vrobbler:feature:videos:personal:project: +** TODO [#A] Geolocation notifications should go out for named locations :vrobbler:feature:geoloc:personal:project: +:PROPERTIES: +:ID: 5d086625-877c-df81-15b8-7ae0bc1ba2fc +:END: ** TODO [#A] Tasks from org-mode should properly update notes and leave them out of the body :vrobbler:bug:tasks: ** TODO [#A] Fix small bug in views for TV series where next episode is now None :vrobbler:bug:personal:videos: @@ -147,6 +135,7 @@ The page data has the canonical date something was read in it, but it seems to b Also, we'd need to adjust any old scrobbles that took place with DST off to roll them back by an hour. ** TODO [#A] Create small utility to clean up tracks scrobbled with wonky playback times :vrobbler:personal:bug:music:scrobbles: +** TODO [#B] Aservicedd youtube link in place of IMDB on video detail page :vrobbler:feature:videos:personal:project: ** TODO [#B] Add AllTrails as a source for Trail data :vrobbler:trails:feature:personal:project: Pretty clear, I would love to make trails more useful. Historically I wasn't hiking a lot, which made the source for this a bit silly. But it's clear that @@ -462,6 +451,114 @@ it's annoying. ** TODO [#C] Allow users to see tasks on calendar view :vrobbler:personal:project:templates:feature: https://codepen.io/oliviale/pen/QYqybo ** TODO [#C] Come up with a possible flow using WebDAV and super-productivity for tasks :personal:feature:project:vrobbler:tasks: +** DONE [#A] Add email importer for BG stats file uploads :vrobbler:feature:boardgames:personal:project: +:PROPERTIES: +:ID: 116fe738-7966-615c-d195-ccff0337b101 +:END: +#+begin_src json example of a file +{ + "about": "This is a Play file that can be read by Board Game Stats. If you see this text, try to use a share, export or open-in function to open it with Board Game Stats.", + "players": [ + { + "uuid": "31f8b92e-11d8-4162-88b1-fd9c79eea249", + "id": 2, + "name": "Colin", + "isAnonymous": false, + "modificationDate": "2025-07-01 18:10:32", + "metaData": "{\"isNpc\":0}" + }, + { + "uuid": "00074700-cf4e-4ad3-b334-d35805bb0d90", + "id": 4, + "name": "Asa Sewell", + "isAnonymous": false, + "modificationDate": "2025-07-01 18:03:37" + } + ], + "locations": [ + { + "uuid": "14f7389c-767f-4725-9b35-906c407b293c", + "id": 3, + "name": "Timberwyck Farm", + "modificationDate": "2025-07-01 18:03:38" + } + ], + "games": [ + { + "uuid": "043a2851-f201-467a-a60c-0b0a7e9c33d2", + "id": 333, + "name": "Ghost Fightin' Treasure Hunters: Anniversary Edition", + "modificationDate": "2025-07-02 01:37:14", + "cooperative": true, + "highestWins": true, + "noPoints": false, + "usesTeams": false, + "urlThumb": "https://cf.geekdo-images.com/DHA-mcH3zzw_OjfDxOPj1A__thumb/img/UhaIm4KIDIiraUc44QIvSAbMUXI=/fit-in/200x150/filters:strip_icc()/pic8266874.jpg", + "urlImage": "https://cf.geekdo-images.com/DHA-mcH3zzw_OjfDxOPj1A__original/img/2-Lb6nLePhn0I0Hh2j1pOtbO4rg=/0x0/filters:format(jpeg)/pic8266874.jpg", + "bggName": "Ghost Fightin' Treasure Hunters: Anniversary Edition", + "bggYear": 2024, + "bggId": 422668, + "designers": "Brian Yu", + "isBaseGame": 1, + "isExpansion": 0, + "rating": 75, + "minPlayerCount": 2, + "maxPlayerCount": 5, + "minPlayTime": 30, + "maxPlayTime": 0, + "minAge": 8 + } + ], + "plays": [ + { + "uuid": "bae3f29e-5e1e-45d8-b409-47a665c8d5b5", + "modificationDate": "2025-07-02 01:37:59", + "entryDate": "2025-07-02 01:31:38", + "playDate": "2025-07-02 01:31:38", + "usesTeams": false, + "durationMin": 23, + "ignored": false, + "manualWinner": true, + "rounds": 3, + "scoresheet": "{\"bggId\":244711,\"version\":1,\"langCode\":\"en\",\"scoreType\":\"bestTotalWins\",\"groups\":[{\"templateId\":\"1\",\"maxRepeat\":-1,\"repetition\":1,\"hasSubTotal\":false,\"hideSingleGroupLabel\":false,\"isExtra\":false,\"rows\":[{\"templateId\":\"vptrack\",\"label\":\"VP track\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}},{\"templateId\":\"objectives\",\"label\":\"Objectives\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}},{\"templateId\":\"mastercards\",\"label\":\"Master cards\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}}]}]}", + "locationRefId": 3, + "gameRefId": 333, + "board": "", + "scoringSetting": 4, + "metaData": "{\"playUsedGameCopy\":2}", + "playerScores": [ + { + "score": "", + "winner": true, + "newPlayer": true, + "startPlayer": false, + "playerRefId": 4, + "role": "", + "rank": 0, + "seatOrder": 0, + "metaData": "{\"scoreUuid\":\"00074700-cf4e-4ad3-b334-d35805bb0d90\"}" + }, + { + "score": "", + "winner": true, + "newPlayer": true, + "startPlayer": false, + "playerRefId": 2, + "role": "", + "rank": 0, + "seatOrder": 0, + "metaData": "{\"scoreUuid\":\"31f8b92e-11d8-4162-88b1-fd9c79eea249\"}" + } + ], + "expansionPlays": [] + } + ], + "userInfo": { + "meRefId": 2 + } +} + +#+end_src ** DONE [#B] Fix task app to only use one tag for the context a task was done in and allow configurable contexts by user profile :personal:vrobbler:feature:tasks:project: :PROPERTIES: :ID: 23f485e3-988c-6198-c79d-91fdf92f001c