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

Configure Feed

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

fix: WebDAV tweaks

+26 -40
+1 -1
src/Javascript/UI/audio.ts
··· 387 387 // Audio node 388 388 const audio = new Audio() 389 389 audio.setAttribute("id", item.trackId) 390 - audio.setAttribute("crossorigin", "use-credentials") 390 + audio.setAttribute("crossorigin", "anonymous") 391 391 audio.setAttribute("data-initial-progress", JSON.stringify(item.progress)) 392 392 audio.setAttribute("data-is-preload", item.isPreload ? "true" : "false") 393 393 audio.setAttribute("muted", "true")
+23 -38
src/Javascript/Workers/service.ts
··· 67 67 }) 68 68 69 69 70 - self.addEventListener("fetch", event => { 70 + self.addEventListener("fetch", fetchEvent => { 71 + const event = fetchEvent as FetchEvent 72 + 71 73 const isInternal = 72 74 !!event.request.url.match(new RegExp("^" + self.location.origin)) 73 75 ··· 87 89 const url = new URL(event.request.url) 88 90 const token = url.searchParams.get("basic_auth") 89 91 90 - url.searchParams.delete("basic_auth") 91 - url.search = "?" + url.searchParams.toString() 92 - 93 - newRequestWithAuth( 94 - event, 92 + event.respondWith(newRequestWithAuth( 93 + event.request, 95 94 url.toString(), 96 95 "Basic " + token 97 - ) 96 + )) 98 97 99 98 // When doing a request with access token in the url, put it in the headers instead 100 99 } else if (event.request.url.includes("bearer_token=")) { ··· 106 105 url.searchParams.delete("bearer_token") 107 106 url.search = "?" + url.searchParams.toString() 108 107 109 - newRequestWithAuth( 110 - event, 108 + event.respondWith(newRequestWithAuth( 109 + event.request, 111 110 url.toString(), 112 111 "Bearer " + token 113 - ) 112 + )) 114 113 115 114 // Use cache if internal request and not using native app 116 115 } else if (isInternal) { ··· 122 121 123 122 } else if (event.request.url && event.request.url.startsWith(GOOGLE_DRIVE) && event.request.url.includes("alt=media")) { 124 123 // For some reason Safari starts using the non bearer-token URL while playing audio 125 - googleDriveToken 126 - ? newRequestWithAuth( 127 - event, 128 - event.request.url.toString(), 129 - "Bearer " + googleDriveToken 130 - ) 131 - : event.respondWith( 132 - network(event) 133 - ) 124 + event.respondWith( 125 + googleDriveToken 126 + ? newRequestWithAuth( 127 + event.request, 128 + event.request.url.toString(), 129 + "Bearer " + googleDriveToken 130 + ) 131 + : network(event) 132 + ) 134 133 135 134 } 136 135 }) ··· 163 162 // ⚗️ 164 163 165 164 166 - function newRequestWithAuth(event: FetchEvent, urlWithoutToken: string, authToken: string) { 167 - const request = event.request 168 - const newHeaders = new Headers(event.request.headers) 165 + function newRequestWithAuth(request: Request, newUrl: string, authToken: string): Promise<Response> { 166 + const newHeaders = new Headers(request.headers) 169 167 newHeaders.append("authorization", authToken) 170 168 171 - const newRequest = new Request( 172 - new Request(urlWithoutToken, event.request), 173 - { 174 - headers: newHeaders, 175 - credentials: request.credentials, 176 - cache: request.cache, 177 - method: request.method, 178 - mode: request.mode, 179 - redirect: request.redirect, 180 - referrer: request.referrer, 181 - } 182 - ) 169 + const newRequest = new Request(request, { headers: newHeaders }) 183 170 184 - const makeFetch = () => fetch(newRequest).then(r => { 171 + const makeFetch = () => fetch(newRequest).then(async r => { 185 172 if (r.ok) { 186 173 return r 187 174 } else { ··· 191 178 } 192 179 }) 193 180 194 - event.respondWith( 195 - makeFetch() 196 - ) 181 + return makeFetch() 197 182 }
+2 -1
src/Static/About/CORS.md
··· 29 29 "HEAD" 30 30 ], 31 31 "AllowedOrigins": [ 32 - "*" 32 + "https://diffuse.sh", 33 + "http://127.0.0.1:44999" 33 34 ], 34 35 "ExposeHeaders": [ 35 36 "Accept-Ranges",