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.

Improve identifying performance

+96 -61
+33 -37
src/Library/Tracks/Collection/Internal/Arrange.elm
··· 1 1 module Tracks.Collection.Internal.Arrange exposing (arrange) 2 2 3 - import Dict 3 + import Dict exposing (Dict) 4 4 import Time 5 5 import Time.Ext as Time 6 6 import Tracks exposing (..) ··· 37 37 38 38 groupByInsertedAt : CollectionDependencies -> Collection -> Collection 39 39 groupByInsertedAt deps collection = 40 - let 41 - groupedTracksDictionary = 42 - List.foldl 43 - (\( i, t ) -> 44 - let 45 - ( year, month ) = 46 - ( Time.toYear Time.utc t.insertedAt 47 - , Time.toMonth Time.utc t.insertedAt 48 - ) 49 - 50 - item = 51 - ( { i 52 - | group = 53 - Just 54 - { name = insertedAtGroupName year month 55 - , index = 0 56 - } 57 - } 58 - , t 59 - ) 60 - in 61 - Dict.update 62 - (year * 1000 + Time.monthNumber month) 63 - (\maybeList -> 64 - case maybeList of 65 - Just list -> 66 - Just (item :: list) 67 - 68 - Nothing -> 69 - Just [ item ] 70 - ) 71 - ) 72 - Dict.empty 73 - collection.identified 74 - in 75 - groupedTracksDictionary 40 + collection.identified 41 + |> List.foldl groupByInsertedAt_ Dict.empty 76 42 |> Dict.values 77 43 |> List.reverse 78 44 |> List.map (Sorting.sort deps.sortBy deps.sortDirection >> List.indexedMap setIndexInGroup) 79 45 |> List.concat 80 46 |> (\arranged -> { collection | arranged = arranged }) 47 + 48 + 49 + groupByInsertedAt_ : IdentifiedTrack -> Dict Int (List IdentifiedTrack) -> Dict Int (List IdentifiedTrack) 50 + groupByInsertedAt_ ( i, t ) = 51 + let 52 + ( year, month ) = 53 + ( Time.toYear Time.utc t.insertedAt 54 + , Time.toMonth Time.utc t.insertedAt 55 + ) 56 + 57 + group = 58 + { name = insertedAtGroupName year month 59 + , index = 0 60 + } 61 + 62 + item = 63 + ( { i | group = Just group } 64 + , t 65 + ) 66 + in 67 + Dict.update 68 + (year * 1000 + Time.monthNumber month) 69 + (\maybeList -> 70 + case maybeList of 71 + Just list -> 72 + Just (item :: list) 73 + 74 + Nothing -> 75 + Just [ item ] 76 + ) 81 77 82 78 83 79 insertedAtGroupName : Int -> Time.Month -> String
+57 -23
src/Library/Tracks/Collection/Internal/Identify.elm
··· 1 1 module Tracks.Collection.Internal.Identify exposing (identify) 2 2 3 + import Dict 3 4 import List.Extra as List 4 5 import Time.Ext as Time 5 6 import Tracks exposing (..) ··· 13 14 identify : Parcel -> Parcel 14 15 identify ( deps, collection ) = 15 16 let 16 - ( identifiedUnsorted, missingFavourites ) = 17 + ( favouritesDictionary, simplifiedFavourites ) = 18 + List.foldr 19 + (\fav ( dict, acc ) -> 20 + let 21 + simpl = 22 + Favourites.simplified fav 23 + in 24 + ( Dict.insert simpl fav dict 25 + , simpl :: acc 26 + ) 27 + ) 28 + ( Dict.empty, [] ) 29 + deps.favourites 30 + 31 + ( identifiedUnsorted, missingFavouritesSimplified ) = 17 32 List.foldl 18 33 (identifyTrack 19 34 deps.enabledSourceIds 20 - deps.favourites 35 + simplifiedFavourites 21 36 deps.nowPlaying 22 37 ) 23 - ( [], deps.favourites ) 38 + ( [], simplifiedFavourites ) 24 39 collection.untouched 40 + 41 + missingFavourites = 42 + List.foldr 43 + (\simpl acc -> 44 + case Dict.get simpl favouritesDictionary of 45 + Just fav -> 46 + fav :: acc 47 + 48 + Nothing -> 49 + acc 50 + ) 51 + [] 52 + missingFavouritesSimplified 25 53 in 26 54 identifiedUnsorted 27 55 |> List.append (List.map makeMissingFavouriteTrack missingFavourites) ··· 35 63 36 64 identifyTrack : 37 65 List String 38 - -> List Favourite 66 + -> List String 39 67 -> Maybe IdentifiedTrack 40 68 -> Track 41 - -> ( List IdentifiedTrack, List Favourite ) 42 - -> ( List IdentifiedTrack, List Favourite ) 69 + -> ( List IdentifiedTrack, List String ) 70 + -> ( List IdentifiedTrack, List String ) 43 71 identifyTrack enabledSourceIds favourites nowPlaying track = 44 72 case List.member track.sourceId enabledSourceIds of 45 73 True -> ··· 50 78 51 79 52 80 partTwo : 53 - List Favourite 81 + List String 54 82 -> Maybe IdentifiedTrack 55 83 -> Track 56 - -> ( List IdentifiedTrack, List Favourite ) 57 - -> ( List IdentifiedTrack, List Favourite ) 84 + -> ( List IdentifiedTrack, List String ) 85 + -> ( List IdentifiedTrack, List String ) 58 86 partTwo favourites nowPlaying track ( acc, remainingFavourites ) = 59 87 let 60 88 isNP = 61 - nowPlaying 62 - |> Maybe.map (Tuple.second >> .id >> (==) track.id) 63 - |> Maybe.withDefault False 89 + case nowPlaying of 90 + Just ( _, { id } ) -> 91 + track.id == id 92 + 93 + Nothing -> 94 + False 64 95 65 96 isFavourite_ = 66 97 isFavourite track ··· 69 100 List.any isFavourite_ favourites 70 101 71 102 identifiedTrack = 72 - ( { indexInList = 0 73 - , indexInPlaylist = Nothing 74 - , isFavourite = isFav 103 + ( { isFavourite = isFav 75 104 , isMissing = False 76 105 , isNowPlaying = isNP 77 106 , isSelected = False 107 + 108 + -- 109 + , group = Nothing 110 + , indexInList = 0 111 + , indexInPlaylist = Nothing 78 112 } 79 113 , track 80 114 ) ··· 104 138 -- FAVOURITES 105 139 106 140 107 - isFavourite : Track -> (Favourite -> Bool) 141 + isFavourite : Track -> String -> Bool 108 142 isFavourite track = 109 - Favourites.match 110 - { artist = track.tags.artist 111 - , title = track.tags.title 112 - } 143 + (==) (String.toLower track.tags.artist ++ String.toLower track.tags.title) 113 144 114 145 115 146 makeMissingFavouriteTrack : Favourite -> IdentifiedTrack ··· 126 157 , year = Nothing 127 158 } 128 159 in 129 - ( { indexInList = 0 130 - , indexInPlaylist = Nothing 131 - , isFavourite = True 160 + ( { isFavourite = True 132 161 , isMissing = True 133 162 , isNowPlaying = False 134 163 , isSelected = False 164 + 165 + -- 166 + , group = Nothing 167 + , indexInList = 0 168 + , indexInPlaylist = Nothing 135 169 } 136 170 , { tags = tags 137 171 , id = missingId
+6 -1
src/Library/Tracks/Favourites.elm
··· 1 - module Tracks.Favourites exposing (match, toggleInFavouritesList, toggleInTracksList) 1 + module Tracks.Favourites exposing (match, simplified, toggleInFavouritesList, toggleInTracksList) 2 2 3 3 import List.Extra as List 4 4 import Tracks exposing (Favourite, IdentifiedTrack, Track) ··· 22 22 ) 23 23 in 24 24 aa == ba && at == bt 25 + 26 + 27 + simplified : Favourite -> String 28 + simplified fav = 29 + String.toLower fav.artist ++ String.toLower fav.title 25 30 26 31 27 32 toggleInTracksList : Track -> List IdentifiedTrack -> List IdentifiedTrack