A music player that connects to your cloud/distributed storage.
1module Brain.User.Hypaethral exposing (..)
2
3import Alien
4import Brain.Task.Ports
5import Json.Decode
6import Json.Encode
7import Task exposing (Task)
8import TaskPort
9import TaskPort.Extra as TaskPort
10import User.Layer exposing (..)
11
12
13
14-- RETRIEVAL
15
16
17retrieveDropbox : String -> HypaethralBit -> Task String (Maybe Json.Decode.Value)
18retrieveDropbox accessToken bit =
19 [ ( "fileName", fileName bit )
20 , ( "token", Json.Encode.string accessToken )
21 ]
22 |> TaskPort.call
23 { function = "fromDropbox"
24 , valueDecoder = Json.Decode.maybe Json.Decode.value
25 , argsEncoder = Json.Encode.object
26 }
27 |> Task.mapError TaskPort.errorToStringCustom
28
29
30retrieveIpfs : String -> HypaethralBit -> Task String (Maybe Json.Decode.Value)
31retrieveIpfs apiOrigin bit =
32 [ ( "fileName", fileName bit )
33 , ( "apiOrigin", Json.Encode.string apiOrigin )
34 ]
35 |> TaskPort.call
36 { function = "fromIpfs"
37 , valueDecoder = Json.Decode.maybe Json.Decode.value
38 , argsEncoder = Json.Encode.object
39 }
40 |> Task.mapError TaskPort.errorToStringCustom
41
42
43retrieveRemoteStorage : { token : String, userAddress : String } -> HypaethralBit -> Task String (Maybe Json.Decode.Value)
44retrieveRemoteStorage { token, userAddress } bit =
45 [ ( "fileName", fileName bit )
46 , ( "token", Json.Encode.string token )
47 , ( "userAddress", Json.Encode.string userAddress )
48 ]
49 |> TaskPort.call
50 { function = "fromRemoteStorage"
51 , valueDecoder = Json.Decode.maybe Json.Decode.value
52 , argsEncoder = Json.Encode.object
53 }
54 |> Task.mapError TaskPort.errorToStringCustom
55
56
57retrieveLocal : HypaethralBit -> Task String (Maybe Json.Decode.Value)
58retrieveLocal bit =
59 Json.Decode.value
60 |> Brain.Task.Ports.fromCacheWithSuffix
61 Alien.SyncLocal
62 (hypaethralBitFileName bit)
63 |> Task.mapError TaskPort.errorToStringCustom
64
65
66
67-- STORAGE
68
69
70saveDropbox : String -> HypaethralBit -> Json.Decode.Value -> Task String ()
71saveDropbox accessToken bit data =
72 [ ( "fileName", fileName bit )
73 , ( "data", data )
74 , ( "token", Json.Encode.string accessToken )
75 ]
76 |> TaskPort.call
77 { function = "toDropbox"
78 , valueDecoder = TaskPort.ignoreValue
79 , argsEncoder = Json.Encode.object
80 }
81 |> Task.mapError TaskPort.errorToStringCustom
82
83
84saveIpfs : String -> HypaethralBit -> Json.Decode.Value -> Task String ()
85saveIpfs apiOrigin bit data =
86 [ ( "apiOrigin", Json.Encode.string apiOrigin )
87 , ( "fileName", fileName bit )
88 , ( "data", data )
89 ]
90 |> TaskPort.call
91 { function = "toIpfs"
92 , valueDecoder = TaskPort.ignoreValue
93 , argsEncoder = Json.Encode.object
94 }
95 |> Task.mapError TaskPort.errorToStringCustom
96
97
98saveRemoteStorage : { token : String, userAddress : String } -> HypaethralBit -> Json.Decode.Value -> Task String ()
99saveRemoteStorage { token, userAddress } bit data =
100 [ ( "fileName", fileName bit )
101 , ( "data", data )
102 , ( "token", Json.Encode.string token )
103 , ( "userAddress", Json.Encode.string userAddress )
104 ]
105 |> TaskPort.call
106 { function = "toRemoteStorage"
107 , valueDecoder = TaskPort.ignoreValue
108 , argsEncoder = Json.Encode.object
109 }
110 |> Task.mapError TaskPort.errorToStringCustom
111
112
113saveLocal : HypaethralBit -> Json.Decode.Value -> Task String ()
114saveLocal bit data =
115 data
116 |> Brain.Task.Ports.toCacheWithSuffix
117 Alien.SyncLocal
118 (hypaethralBitFileName bit)
119 |> Task.mapError TaskPort.errorToStringCustom
120
121
122
123-- 🛠
124
125
126fileName : HypaethralBit -> Json.Decode.Value
127fileName =
128 Json.Encode.string << hypaethralBitFileName