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
|
-- | 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)
|
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 :: Comparison ReleaseType
|
||||||
releaseTypeComparison =
|
releaseTypeComparison = listIndexComparison allReleaseTypesSorted
|
||||||
listIndexComparison
|
|
||||||
[ releaseTypeAlbum,
|
allReleaseTypesSorted :: [ReleaseType]
|
||||||
releaseTypeLiveAlbum,
|
allReleaseTypesSorted =
|
||||||
releaseTypeAnthology,
|
[ releaseTypeAlbum,
|
||||||
releaseTypeSoundtrack,
|
releaseTypeLiveAlbum,
|
||||||
releaseTypeEP,
|
releaseTypeAnthology,
|
||||||
releaseTypeCompilation,
|
releaseTypeSoundtrack,
|
||||||
releaseTypeSingle,
|
releaseTypeEP,
|
||||||
releaseTypeRemix,
|
releaseTypeCompilation,
|
||||||
releaseTypeBootleg,
|
releaseTypeSingle,
|
||||||
releaseTypeInterview,
|
releaseTypeRemix,
|
||||||
releaseTypeMixtape,
|
releaseTypeBootleg,
|
||||||
releaseTypeDemo,
|
releaseTypeInterview,
|
||||||
releaseTypeConcertRecording,
|
releaseTypeMixtape,
|
||||||
releaseTypeDJMix,
|
releaseTypeDemo,
|
||||||
releaseTypeUnknown,
|
releaseTypeConcertRecording,
|
||||||
releaseTypeProducedBy,
|
releaseTypeDJMix,
|
||||||
releaseTypeComposition,
|
releaseTypeUnknown,
|
||||||
releaseTypeRemixedBy,
|
releaseTypeProducedBy,
|
||||||
releaseTypeGuestAppearance
|
releaseTypeComposition,
|
||||||
]
|
releaseTypeRemixedBy,
|
||||||
|
releaseTypeGuestAppearance
|
||||||
|
]
|
||||||
|
|
||||||
releaseTypeAlbum, releaseTypeSoundtrack, releaseTypeEP, releaseTypeAnthology, releaseTypeCompilation, releaseTypeSingle, releaseTypeLiveAlbum, releaseTypeRemix, releaseTypeBootleg, releaseTypeInterview, releaseTypeMixtape, releaseTypeDemo, releaseTypeConcertRecording, releaseTypeDJMix, releaseTypeUnknown, releaseTypeProducedBy, releaseTypeComposition, releaseTypeRemixedBy, releaseTypeGuestAppearance :: ReleaseType
|
releaseTypeAlbum, releaseTypeSoundtrack, releaseTypeEP, releaseTypeAnthology, releaseTypeCompilation, releaseTypeSingle, releaseTypeLiveAlbum, releaseTypeRemix, releaseTypeBootleg, releaseTypeInterview, releaseTypeMixtape, releaseTypeDemo, releaseTypeConcertRecording, releaseTypeDJMix, releaseTypeUnknown, releaseTypeProducedBy, releaseTypeComposition, releaseTypeRemixedBy, releaseTypeGuestAppearance :: ReleaseType
|
||||||
releaseTypeAlbum = ReleaseType "Album"
|
releaseTypeAlbum = ReleaseType 1 "Album"
|
||||||
releaseTypeSoundtrack = ReleaseType "Soundtrack"
|
releaseTypeSoundtrack = ReleaseType 3 "Soundtrack"
|
||||||
releaseTypeEP = ReleaseType "EP"
|
releaseTypeEP = ReleaseType 5 "EP"
|
||||||
releaseTypeAnthology = ReleaseType "Anthology"
|
releaseTypeAnthology = ReleaseType 6 "Anthology"
|
||||||
releaseTypeCompilation = ReleaseType "Compilation"
|
releaseTypeCompilation = ReleaseType 7 "Compilation"
|
||||||
releaseTypeSingle = ReleaseType "Single"
|
releaseTypeSingle = ReleaseType 9 "Single"
|
||||||
releaseTypeLiveAlbum = ReleaseType "Live album"
|
releaseTypeLiveAlbum = ReleaseType 11 "Live album"
|
||||||
releaseTypeRemix = ReleaseType "Remix"
|
releaseTypeRemix = ReleaseType 13 "Remix"
|
||||||
releaseTypeBootleg = ReleaseType "Bootleg"
|
releaseTypeBootleg = ReleaseType 14 "Bootleg"
|
||||||
releaseTypeInterview = ReleaseType "Interview"
|
releaseTypeInterview = ReleaseType 15 "Interview"
|
||||||
releaseTypeMixtape = ReleaseType "Mixtape"
|
releaseTypeMixtape = ReleaseType 16 "Mixtape"
|
||||||
releaseTypeDemo = ReleaseType "Demo"
|
releaseTypeDemo = ReleaseType 17 "Demo"
|
||||||
releaseTypeConcertRecording = ReleaseType "Concert Recording"
|
releaseTypeConcertRecording = ReleaseType 18 "Concert Recording"
|
||||||
releaseTypeDJMix = ReleaseType "DJ Mix"
|
releaseTypeDJMix = ReleaseType 19 "DJ Mix"
|
||||||
releaseTypeUnknown = ReleaseType "Unknown"
|
releaseTypeUnknown = ReleaseType 21 "Unknown"
|
||||||
releaseTypeProducedBy = ReleaseType "Produced By"
|
releaseTypeProducedBy = ReleaseType 1021 "Produced By"
|
||||||
releaseTypeComposition = ReleaseType "Composition"
|
releaseTypeComposition = ReleaseType 1022 "Composition"
|
||||||
releaseTypeRemixedBy = ReleaseType "Remixed By"
|
releaseTypeRemixedBy = ReleaseType 1023 "Remixed By"
|
||||||
releaseTypeGuestAppearance = ReleaseType "Guest Appearance"
|
releaseTypeGuestAppearance = ReleaseType 1024 "Guest Appearance"
|
||||||
|
|
||||||
data TorrentGroupJson = TorrentGroupJson
|
data TorrentGroupJson = TorrentGroupJson
|
||||||
{ groupName :: Text,
|
{ groupName :: Text,
|
||||||
|
|
@ -684,7 +695,7 @@ getBestTorrents opts = do
|
||||||
groupId <- Dec.fromField @Int
|
groupId <- Dec.fromField @Int
|
||||||
torrentId <- Dec.fromField @Int
|
torrentId <- Dec.fromField @Int
|
||||||
seedingWeight <- Dec.fromField @Int
|
seedingWeight <- Dec.fromField @Int
|
||||||
releaseType <- ReleaseType <$> Dec.text
|
releaseType <- releaseTypeFromTextOrIntKey <$> Dec.text
|
||||||
artists <- Dec.json $
|
artists <- Dec.json $
|
||||||
Json.eachInArray $ do
|
Json.eachInArray $ do
|
||||||
id_ <- Json.keyLabel @"artistId" "id" (Json.asIntegral @_ @Int)
|
id_ <- Json.keyLabel @"artistId" "id" (Json.asIntegral @_ @Int)
|
||||||
|
|
|
||||||
|
|
@ -941,7 +941,7 @@ mkBestTorrentsTable opts fresh = do
|
||||||
{Html.toHtml @Text b.torrentGroupJson.groupName}
|
{Html.toHtml @Text b.torrentGroupJson.groupName}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</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 @Natural b.torrentGroupJson.groupYear}</td>
|
||||||
<td>{Html.toHtml @Int b.seedingWeight}</td>
|
<td>{Html.toHtml @Int b.seedingWeight}</td>
|
||||||
<td>{Html.toHtml @Text b.torrentFormat}</td>
|
<td>{Html.toHtml @Text b.torrentFormat}</td>
|
||||||
|
|
@ -951,7 +951,7 @@ mkBestTorrentsTable opts fresh = do
|
||||||
)
|
)
|
||||||
let section :: NonEmpty (TorrentData (Label "percentDone" Percentage)) -> Html
|
let section :: NonEmpty (TorrentData (Label "percentDone" Percentage)) -> Html
|
||||||
section rows = do
|
section rows = do
|
||||||
let releaseType = rows & NonEmpty.head & (.releaseType.unReleaseType)
|
let releaseType = rows & NonEmpty.head & (.releaseType.stringKey)
|
||||||
[hsx|
|
[hsx|
|
||||||
<h2>{releaseType}s</h2>
|
<h2>{releaseType}s</h2>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue