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