feat(subsonic): add avatar support

closes: #228
This commit is contained in:
Brian Doherty
2022-07-20 23:16:13 +01:00
committed by sentriz
parent 7ab378accb
commit 5e66261f0c
15 changed files with 288 additions and 28 deletions

View File

@@ -0,0 +1,26 @@
{{ define "user" }}
<div class="padded box">
<div class="box-title">
<i class="mdi mdi-account-key"></i> changing {{ .SelectedUser.Name }}'s avatar
</div>
{{ if ne (len .SelectedUser.Avatar) 0 }}
<form class="block" action="{{ printf "/admin/delete_avatar_do?user=%s" .SelectedUser.Name | path }}" method="post">
<input type="submit" value="delete avatar">
</form>
{{ end }}
<form
class="block file-upload"
enctype="multipart/form-data"
action="{{ printf "/admin/change_avatar_do?user=%s" .SelectedUser.Name | path }}"
method="post"
>
<div style="position: relative;">
<input style="position: absolute; opacity: 0;" name="avatar" type="file" accept="image/jpeg image/png image/gif" />
<input type="button" value="upload avatar">
</div>
{{ if ne (len .SelectedUser.Avatar) 0 }}
<p><img class="avatar-preview" src="data:image/jpg;base64,{{ .SelectedUser.Avatar | base64 }}"/></p>
{{ end }}
</form>
</div>
{{ end }}

View File

@@ -0,0 +1,26 @@
{{ define "user" }}
<div class="padded box">
<div class="box-title">
<i class="mdi mdi-account-key"></i> changing account avatar
</div>
{{ if ne (len .SelectedUser.Avatar) 0 }}
<form class="block" action="{{ path "/admin/delete_own_avatar_do" }}" method="post">
<input type="submit" value="delete avatar">
</form>
{{ end }}
<form
class="block file-upload"
enctype="multipart/form-data"
action="{{ path "/admin/change_own_avatar_do" }}"
method="post"
>
<div style="position: relative;">
<input style="position: absolute; opacity: 0;" name="avatar" type="file" accept="image/jpeg image/png image/gif" />
<input type="button" value="upload avatar">
</div>
{{ if ne (len .SelectedUser.Avatar) 0 }}
<p><img class="avatar-preview" src="data:image/jpg;base64,{{ .SelectedUser.Avatar | base64 }}"/></p>
{{ end }}
</form>
</div>
{{ end }}

View File

@@ -82,6 +82,8 @@
<span class="text-light">&#124;</span>
<a href="{{ printf "/admin/change_password?user=%s" $user.Name | path }}">password&#8230;</a>
<span class="text-light">&#124;</span>
<a href="{{ printf "/admin/change_avatar?user=%s" $user.Name | path }}">change avatar&#8230;</a>
<span class="text-light">&#124;</span>
{{ if $user.IsAdmin }}
<span class="text-light">delete&#8230;</span>
{{ else }}
@@ -100,6 +102,8 @@
<a href="{{ path "/admin/change_own_username" }}" class="button">change username&#8230;</a>
<span class="text-light">&#124;</span>
<a href="{{ path "/admin/change_own_password" }}" class="button">change password&#8230;</a>
<span class="text-light">&#124;</span>
<a href="{{ path "/admin/change_own_avatar" }}" class="button">change avatar&#8230;</a>
</div>
{{ end }}
</div>
@@ -260,17 +264,16 @@
{{ end }}
</table>
<form
id="playlist-upload-form"
class="file-upload"
enctype="multipart/form-data"
action="{{ path "/admin/upload_playlist_do" }}"
method="post"
>
<div style="position: relative;">
<input id="playlist-upload-input" style="position: absolute; opacity: 0;" name="playlist-files" type="file" multiple />
<input style="position: absolute; opacity: 0;" name="playlist-files" type="file" multiple />
<input type="button" value="upload m3u8">
</div>
</form>
<script src="{{ path "/admin/static/playlist-upload.js" }}"></script>
</div>
</div>
{{ end }}

View File

@@ -5,4 +5,5 @@
<link rel="shortcut icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
<link rel="icon" href="{{ path "/admin/static/favicon.ico" }}" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script src="{{ path "/admin/static/main.js" }}" defer></script>
{{ end }}

View File

@@ -178,3 +178,9 @@ a:hover {
.angry {
background-color: #f4433669;
}
.avatar-preview {
width: 64px;
height: 64px;
object-fit: cover;
}

View File

@@ -0,0 +1,5 @@
for (const form of document.querySelectorAll("form.file-upload") || []) {
const input = form.querySelector("input[type=file]");
if (!input) continue;
input.onchange = (e) => form.submit();
}

View File

@@ -1,3 +0,0 @@
document.getElementById("playlist-upload-input").onchange = e => {
document.getElementById("playlist-upload-form").submit();
};