corpus

self-hosted listenbrainz and last.fm proxy
Log | Files | Refs | README | LICENSE

Types.elm (3017B)


      1 module Types exposing (ActiveFilter, Flags, Listen, Model, Msg(..), Period(..), SimilarState(..), SimilarTrack, Stats, StatsEntry, Tab(..), UserInfo)
      2 
      3 import Browser
      4 import Browser.Navigation as Nav
      5 import Dict exposing (Dict)
      6 import Http
      7 import Set exposing (Set)
      8 import Time
      9 import Url
     10 
     11 
     12 type alias UserInfo =
     13     { slug : String
     14     , name : String
     15     }
     16 
     17 
     18 type alias Flags =
     19     { userSlug : String
     20     , allUsers : List UserInfo
     21     }
     22 
     23 
     24 
     25 -- TYPES
     26 
     27 
     28 type Tab
     29     = ListensTab
     30     | StatsTab
     31     | AboutTab
     32 
     33 
     34 type Period
     35     = AllTime
     36     | LastDays Int
     37     | CustomRange String String
     38 
     39 
     40 type alias ActiveFilter =
     41     { field : String
     42     , value : String
     43     }
     44 
     45 
     46 type alias Listen =
     47     { trackName : Maybe String
     48     , artistName : Maybe String
     49     , releaseName : Maybe String
     50     , listenedAt : Maybe Int
     51     , genre : Maybe String
     52     , label : Maybe String
     53     , releaseMbid : Maybe String
     54     , caaReleaseMbid : Maybe String
     55     }
     56 
     57 
     58 type alias StatsEntry =
     59     { name : String
     60     , count : Int
     61     }
     62 
     63 
     64 type alias Stats =
     65     { genres : List StatsEntry
     66     , labels : List StatsEntry
     67     , years : List StatsEntry
     68     , artists : List StatsEntry
     69     , tracks : List StatsEntry
     70     }
     71 
     72 
     73 type alias SimilarTrack =
     74     { artist : String
     75     , track : String
     76     , score : Maybe Float
     77     , videoUri : Maybe String
     78     }
     79 
     80 
     81 type SimilarState
     82     = SimilarLoading
     83     | SimilarLoaded (List SimilarTrack)
     84     | SimilarError String
     85 
     86 
     87 
     88 -- MODEL
     89 
     90 
     91 type alias Model =
     92     { navKey : Nav.Key
     93     , listens : List Listen
     94     , stats : Maybe Stats
     95     , error : Maybe String
     96     , loading : Bool
     97     , currentTime : Maybe Time.Posix
     98     , failedCovers : Set String
     99     , hoveredCover : Maybe Int
    100     , expandedSections : Set String
    101     , loadedSections : Set String
    102     , offset : Int
    103     , limit : Int
    104     , activeTab : Tab
    105     , activeFilter : Maybe ActiveFilter
    106     , statsPeriod : Period
    107     , customInput : String
    108     , showCustomInput : Bool
    109     , customError : Maybe String
    110     , userSlug : String
    111     , similarStates : Dict String SimilarState
    112     , allUsers : List UserInfo
    113     , searchInput : String
    114     , activeSearch : Maybe String
    115     , tabsVisible : Bool
    116     }
    117 
    118 
    119 type Msg
    120     = GotListens (Result Http.Error (List Listen))
    121     | GotStats (Result Http.Error Stats)
    122     | GotSectionData String (Result Http.Error (List StatsEntry))
    123     | Tick Time.Posix
    124     | GotTime Time.Posix
    125     | ImageError String
    126     | NextPage
    127     | PrevPage
    128     | SwitchTab Tab
    129     | ToggleTabs
    130     | SetStatsPeriod Period
    131     | OpenCustomInput
    132     | UpdateCustomInput String
    133     | ApplyCustomPeriod
    134     | FilterBy String String
    135     | ClearFilter
    136     | HoverCover Int
    137     | UnhoverCover
    138     | ExpandSection String
    139     | ShowAllSection String
    140     | CollapseSection String
    141     | FetchSimilar Int String String
    142     | FetchSimilarTracks Int String String (Result Http.Error (List SimilarTrack))
    143     | UpdateSearchInput String
    144     | SubmitSearch
    145     | ClearSearch
    146     | UrlRequested Browser.UrlRequest
    147     | UrlChanged Url.Url
    148 
    149 
    150 
    151 -- UPDATE