Added support for custom notification sounds

This commit is contained in:
Ghostie 2025-01-12 16:51:59 -05:00
parent 518586b6ab
commit 25f00b1dc7
4 changed files with 31 additions and 2 deletions

View File

@ -58,6 +58,7 @@ class ProfileController extends Controller
$incoming_fields = $request->validate ([
"avatar" => "image|max:4096",
"song" => "file|mimes:audio/mpeg,mp3|max:4096",
"notification_sound" => "file|mimes:audio/mpeg,mp3|max:1024",
"bio" => "sometimes|nullable|string",
"about_you" => "sometimes|nullable|string",
"status" => "sometimes|nullable|string",
@ -76,9 +77,11 @@ class ProfileController extends Controller
$changing_avatar = false;
$changing_song = false;
$changing_notification_sound = false;
$old_avatar = null;
$old_song = null;
$old_notification_sound = null;
if (isset ($incoming_fields["avatar"]) && !empty ($incoming_fields["avatar"]))
{
$manager = new ImageManager (new Driver ());
@ -104,6 +107,16 @@ class ProfileController extends Controller
$changing_song = true;
}
if (isset ($incoming_fields ["notification_sound"]) && !empty ($incoming_fields["notification_sound"]))
{
$file = $request->file ("notification_sound");
Storage::disk ("public")->put ("notification_sounds/" . $fname . ".mp3", file_get_contents ($file));
$old_notification_sound = "notification_sounds/" . $user->notification_sound;
$user->notification_sound = $fname . ".mp3";
$changing_notification_sound = true;
}
$user->bio = $incoming_fields["bio"];
$user->about_you = $incoming_fields["about_you"];
$user->status = $incoming_fields["status"];
@ -128,6 +141,9 @@ class ProfileController extends Controller
if ($changing_song)
Storage::disk ("public")->delete (str_replace ("/storage/", "", $old_song));
if ($changing_notification_sound)
Storage::disk ("public")->delete (str_replace ("/storage/", "", $old_notification_sound));
$response = ActionsUser::update_profile ();
if (isset ($response["error"]))
return back ()->with ("error", "Error updating profile: " . $response["error"]);

View File

@ -82,6 +82,13 @@ class User extends Authenticatable
});
}
protected function notificationSound () : Attribute
{
return Attribute::make (get: function ($value) {
return $value ? "/storage/notification_sounds/" . $value : "/resources/sounds/notification.mp3";
});
}
public function actor ()
{
return $this->hasOne (Actor::class);

View File

@ -44,7 +44,7 @@
@if (auth ()->check ())
<script>
const notification_sound = new Audio ("/resources/sounds/notification.mp3")
const notification_sound = new Audio ("{{ auth ()->user ()->notification_sound }}")
function register_echo ()
{

View File

@ -36,8 +36,14 @@
@error("song")
<p class="error">{{ $message }}</p>
@enderror
<small>Max file size: 4MB</small>
<br><br>
<small>Select custom notification sound:</small>
<input type="file" name="notification_sound" accept="audio/*"><br>
@error("notification_sound")
<p class="error">{{ $message }}</p>
@enderror
<small>Max file size: 1MB</small>
<br>
<h1>Bio:</h1>
<br>
<textarea name="bio" id="bio" cols="58" placeholder="Bio">{{ $user->bio }}</textarea>