A music player that connects to your cloud/distributed storage.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Adjust shuffle logic

+20 -11
+20 -11
src/Applications/UI/Queue/Fill.elm
··· 9 9 import Maybe.Extra as Maybe 10 10 import Queue exposing (Item) 11 11 import Random exposing (Generator, Seed) 12 + import Set exposing (Set) 12 13 import Time 13 14 import Tracks exposing (IdentifiedTrack) 14 15 import UI.Queue.Common exposing (makeItem) ··· 95 96 96 97 97 98 shuffled : Time.Posix -> List IdentifiedTrack -> State -> List Item 98 - shuffled timestamp unfilteredTracks state = 99 + shuffled timestamp unfilteredTracks s = 99 100 let 101 + state = 102 + if List.isEmpty s.future && not (List.isEmpty s.past) then 103 + -- We played every available track, 104 + -- disregard the past tracks. 105 + { s | past = [] } 106 + 107 + else 108 + s 109 + 100 110 idsToIgnore = 101 111 [ state.ignored 102 112 , state.past ··· 129 139 timestamp 130 140 |> Time.posixToMillis 131 141 |> Random.initialSeed 132 - |> generateIndexes generator howMany [] 142 + |> generateIndexes generator howMany Set.empty 143 + |> Set.toList 133 144 |> List.foldl 134 145 (\idx acc -> 135 146 case Array.get idx tracks of ··· 171 182 `squirrel` = accumulator, ie. collected indexes 172 183 173 184 -} 174 - generateIndexes : Generator Int -> Int -> List Int -> Seed -> List Int 185 + generateIndexes : Generator Int -> Int -> Set Int -> Seed -> Set Int 175 186 generateIndexes generator howMany squirrel seed = 176 187 let 177 188 ( index, newSeed ) = 178 189 Random.step generator seed 190 + in 191 + if Set.member index squirrel then 192 + generateIndexes generator howMany squirrel newSeed 179 193 180 - newSquirrel = 181 - -- We could check if the generated index is already one we have, 182 - -- but I don't think that ever happens (because of the use of `Random.step`) 183 - index :: squirrel 184 - in 185 - if howMany - 1 > 0 then 186 - generateIndexes generator (howMany - 1) newSquirrel newSeed 194 + else if howMany - 1 > 0 then 195 + generateIndexes generator (howMany - 1) (Set.insert index squirrel) newSeed 187 196 188 197 else 189 - newSquirrel 198 + Set.insert index squirrel 190 199 191 200 192 201