fix(users/Profpatsch/whatcd-resolver): numeric release types
The RED Gazelle API is so inconsistent, smh. Sometimes they return the release type string, sometimes the integer representing it. So let’s handle both! Change-Id: Ie99f01342a13269df5c1e2036aaede54d7149516 Reviewed-on: https://cl.tvl.fyi/c/depot/+/13223 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
2ed3f7c026
commit
cf80c75a69
2 changed files with 56 additions and 45 deletions
|
|
@ -539,53 +539,64 @@ data TorrentData transmissionInfo = TorrentData
|
|||
}
|
||||
|
||||
-- | https://redacted.sh/wiki.php?action=article&id=455#_1804298149
|
||||
newtype ReleaseType = ReleaseType {unReleaseType :: Text}
|
||||
data ReleaseType = ReleaseType {intKey :: Int, stringKey :: Text}
|
||||
deriving stock (Eq, Show)
|
||||
|
||||
releaseTypeFromTextOrIntKey :: Text -> ReleaseType
|
||||
releaseTypeFromTextOrIntKey t =
|
||||
allReleaseTypesSorted
|
||||
& List.find
|
||||
( \rt -> do
|
||||
rt.stringKey == t || buildText intDecimalT rt.intKey == t
|
||||
)
|
||||
& fromMaybe (ReleaseType {intKey = (-1), stringKey = t})
|
||||
|
||||
releaseTypeComparison :: Comparison ReleaseType
|
||||
releaseTypeComparison =
|
||||
listIndexComparison
|
||||
[ releaseTypeAlbum,
|
||||
releaseTypeLiveAlbum,
|
||||
releaseTypeAnthology,
|
||||
releaseTypeSoundtrack,
|
||||
releaseTypeEP,
|
||||
releaseTypeCompilation,
|
||||
releaseTypeSingle,
|
||||
releaseTypeRemix,
|
||||
releaseTypeBootleg,
|
||||
releaseTypeInterview,
|
||||
releaseTypeMixtape,
|
||||
releaseTypeDemo,
|
||||
releaseTypeConcertRecording,
|
||||
releaseTypeDJMix,
|
||||
releaseTypeUnknown,
|
||||
releaseTypeProducedBy,
|
||||
releaseTypeComposition,
|
||||
releaseTypeRemixedBy,
|
||||
releaseTypeGuestAppearance
|
||||
]
|
||||
releaseTypeComparison = listIndexComparison allReleaseTypesSorted
|
||||
|
||||
allReleaseTypesSorted :: [ReleaseType]
|
||||
allReleaseTypesSorted =
|
||||
[ releaseTypeAlbum,
|
||||
releaseTypeLiveAlbum,
|
||||
releaseTypeAnthology,
|
||||
releaseTypeSoundtrack,
|
||||
releaseTypeEP,
|
||||
releaseTypeCompilation,
|
||||
releaseTypeSingle,
|
||||
releaseTypeRemix,
|
||||
releaseTypeBootleg,
|
||||
releaseTypeInterview,
|
||||
releaseTypeMixtape,
|
||||
releaseTypeDemo,
|
||||
releaseTypeConcertRecording,
|
||||
releaseTypeDJMix,
|
||||
releaseTypeUnknown,
|
||||
releaseTypeProducedBy,
|
||||
releaseTypeComposition,
|
||||
releaseTypeRemixedBy,
|
||||
releaseTypeGuestAppearance
|
||||
]
|
||||
|
||||
releaseTypeAlbum, releaseTypeSoundtrack, releaseTypeEP, releaseTypeAnthology, releaseTypeCompilation, releaseTypeSingle, releaseTypeLiveAlbum, releaseTypeRemix, releaseTypeBootleg, releaseTypeInterview, releaseTypeMixtape, releaseTypeDemo, releaseTypeConcertRecording, releaseTypeDJMix, releaseTypeUnknown, releaseTypeProducedBy, releaseTypeComposition, releaseTypeRemixedBy, releaseTypeGuestAppearance :: ReleaseType
|
||||
releaseTypeAlbum = ReleaseType "Album"
|
||||
releaseTypeSoundtrack = ReleaseType "Soundtrack"
|
||||
releaseTypeEP = ReleaseType "EP"
|
||||
releaseTypeAnthology = ReleaseType "Anthology"
|
||||
releaseTypeCompilation = ReleaseType "Compilation"
|
||||
releaseTypeSingle = ReleaseType "Single"
|
||||
releaseTypeLiveAlbum = ReleaseType "Live album"
|
||||
releaseTypeRemix = ReleaseType "Remix"
|
||||
releaseTypeBootleg = ReleaseType "Bootleg"
|
||||
releaseTypeInterview = ReleaseType "Interview"
|
||||
releaseTypeMixtape = ReleaseType "Mixtape"
|
||||
releaseTypeDemo = ReleaseType "Demo"
|
||||
releaseTypeConcertRecording = ReleaseType "Concert Recording"
|
||||
releaseTypeDJMix = ReleaseType "DJ Mix"
|
||||
releaseTypeUnknown = ReleaseType "Unknown"
|
||||
releaseTypeProducedBy = ReleaseType "Produced By"
|
||||
releaseTypeComposition = ReleaseType "Composition"
|
||||
releaseTypeRemixedBy = ReleaseType "Remixed By"
|
||||
releaseTypeGuestAppearance = ReleaseType "Guest Appearance"
|
||||
releaseTypeAlbum = ReleaseType 1 "Album"
|
||||
releaseTypeSoundtrack = ReleaseType 3 "Soundtrack"
|
||||
releaseTypeEP = ReleaseType 5 "EP"
|
||||
releaseTypeAnthology = ReleaseType 6 "Anthology"
|
||||
releaseTypeCompilation = ReleaseType 7 "Compilation"
|
||||
releaseTypeSingle = ReleaseType 9 "Single"
|
||||
releaseTypeLiveAlbum = ReleaseType 11 "Live album"
|
||||
releaseTypeRemix = ReleaseType 13 "Remix"
|
||||
releaseTypeBootleg = ReleaseType 14 "Bootleg"
|
||||
releaseTypeInterview = ReleaseType 15 "Interview"
|
||||
releaseTypeMixtape = ReleaseType 16 "Mixtape"
|
||||
releaseTypeDemo = ReleaseType 17 "Demo"
|
||||
releaseTypeConcertRecording = ReleaseType 18 "Concert Recording"
|
||||
releaseTypeDJMix = ReleaseType 19 "DJ Mix"
|
||||
releaseTypeUnknown = ReleaseType 21 "Unknown"
|
||||
releaseTypeProducedBy = ReleaseType 1021 "Produced By"
|
||||
releaseTypeComposition = ReleaseType 1022 "Composition"
|
||||
releaseTypeRemixedBy = ReleaseType 1023 "Remixed By"
|
||||
releaseTypeGuestAppearance = ReleaseType 1024 "Guest Appearance"
|
||||
|
||||
data TorrentGroupJson = TorrentGroupJson
|
||||
{ groupName :: Text,
|
||||
|
|
@ -684,7 +695,7 @@ getBestTorrents opts = do
|
|||
groupId <- Dec.fromField @Int
|
||||
torrentId <- Dec.fromField @Int
|
||||
seedingWeight <- Dec.fromField @Int
|
||||
releaseType <- ReleaseType <$> Dec.text
|
||||
releaseType <- releaseTypeFromTextOrIntKey <$> Dec.text
|
||||
artists <- Dec.json $
|
||||
Json.eachInArray $ do
|
||||
id_ <- Json.keyLabel @"artistId" "id" (Json.asIntegral @_ @Int)
|
||||
|
|
|
|||
|
|
@ -941,7 +941,7 @@ mkBestTorrentsTable opts fresh = do
|
|||
{Html.toHtml @Text b.torrentGroupJson.groupName}
|
||||
</a>
|
||||
</td>
|
||||
<td>{Html.toHtml @Text b.releaseType.unReleaseType}</td>
|
||||
<td>{Html.toHtml @Text b.releaseType.stringKey}</td>
|
||||
<td>{Html.toHtml @Natural b.torrentGroupJson.groupYear}</td>
|
||||
<td>{Html.toHtml @Int b.seedingWeight}</td>
|
||||
<td>{Html.toHtml @Text b.torrentFormat}</td>
|
||||
|
|
@ -951,7 +951,7 @@ mkBestTorrentsTable opts fresh = do
|
|||
)
|
||||
let section :: NonEmpty (TorrentData (Label "percentDone" Percentage)) -> Html
|
||||
section rows = do
|
||||
let releaseType = rows & NonEmpty.head & (.releaseType.unReleaseType)
|
||||
let releaseType = rows & NonEmpty.head & (.releaseType.stringKey)
|
||||
[hsx|
|
||||
<h2>{releaseType}s</h2>
|
||||
<table class="table">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue