A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
2.8 kB · 114 lines
Elm
at commit bce88033
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115module Brain.Sources.Processing.Common exposing (Model, Msg(..), contextToTagsContext, isProcessing, reportError, reportHttpError, tracksFromTagsContext, translateHttpError)
import Alienimport Brain.Reply exposing (Reply(..))import Dict.Ext as Dictimport Http exposing (Error(..))import Json.Encode as Encodeimport List.Extra as Listimport Maybe.Extra as Maybeimport Sources exposing (Service, Source)import Sources.Processing exposing (..)import Sources.Services as Servicesimport Timeimport Tracks exposing (Track)
-- 🌳
type alias Model = { currentTime : Time.Posix , origin : String , status : Status }
-- 📣
type Msg = Process Arguments | NextInLine ----------------------------------------- -- Steps ----------------------------------------- | PrepareStep Context (Result Http.Error String) | TreeStep Context (Result Http.Error String) | TreeStepRemoveTracks String (List String) | TagsStep ContextForTags ----------------------------------------- -- Bits & Pieces ----------------------------------------- | SetCurrentTime Time.Posix
-- 🔱
contextToTagsContext : Context -> ContextForTagscontextToTagsContext context = { nextFilePaths = context.filePaths , receivedFilePaths = [] , receivedTags = [] , sourceId = context.source.id , urlsForTags = [] }
isProcessing : Status -> BoolisProcessing status = case status of Processing _ _ -> True
NotProcessing -> False
reportHttpError : Source -> Http.Error -> ReplyreportHttpError source err = reportError source (translateHttpError source.service err)
reportError : Source -> String -> ReplyreportError source error = [ ( "sourceId", Encode.string source.id ) , ( "sourceName", Encode.string (Dict.fetch "name" "Unnamed" source.data) ) , ( "error", Encode.string error ) ] |> Encode.object |> GiveUI Alien.ReportProcessingError
tracksFromTagsContext : ContextForTags -> List TracktracksFromTagsContext context = context.receivedTags |> List.zip context.receivedFilePaths |> List.filter (Tuple.second >> Maybe.isJust) |> List.map (Tuple.mapSecond (Maybe.withDefault Tracks.emptyTags)) |> List.map (Tracks.makeTrack context.sourceId)
translateHttpError : Service -> Http.Error -> StringtranslateHttpError service err = case err of NetworkError -> "Cannot connect to this source"
Timeout -> "Source did not respond (timeout)"
BadUrl _ -> "Diffuse error, invalid url was used"
BadStatus _ -> "Got a faulty response from this source"
BadBody response -> Services.parseErrorResponse service response