fix issues updating avatar (#870)
This commit is contained in:
42
db/main.go
42
db/main.go
@@ -99,6 +99,7 @@ func registerMigrations(app *pocketbase.PocketBase) {
|
|||||||
|
|
||||||
func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceManager) {
|
func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceManager) {
|
||||||
app.OnRecordAfterCreateSuccess("users").BindFunc(createUserHandler(client))
|
app.OnRecordAfterCreateSuccess("users").BindFunc(createUserHandler(client))
|
||||||
|
app.OnRecordAfterUpdateSuccess("users").BindFunc(updateUserHandler(client))
|
||||||
|
|
||||||
app.OnRecordAfterCreateSuccess("trails").BindFunc(createTrailHandler(client))
|
app.OnRecordAfterCreateSuccess("trails").BindFunc(createTrailHandler(client))
|
||||||
app.OnRecordAfterUpdateSuccess("trails").BindFunc(updateTrailHandler(client))
|
app.OnRecordAfterUpdateSuccess("trails").BindFunc(updateTrailHandler(client))
|
||||||
@@ -224,6 +225,47 @@ func createUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEve
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
||||||
|
return func(e *core.RecordEvent) error {
|
||||||
|
actor, err := e.App.FindFirstRecordByData("activitypub_actors", "user", e.Record.Id)
|
||||||
|
if err != nil {
|
||||||
|
return e.Next()
|
||||||
|
}
|
||||||
|
|
||||||
|
icon := ""
|
||||||
|
origin := os.Getenv("ORIGIN")
|
||||||
|
if origin != "" && e.Record.GetString("avatar") != "" {
|
||||||
|
icon = fmt.Sprintf("%s/api/v1/files/_pb_users_auth_/%s/%s", origin, e.Record.Id, e.Record.GetString("avatar"))
|
||||||
|
}
|
||||||
|
actor.Set("icon", icon)
|
||||||
|
if err := e.App.Save(actor); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
trails, err := e.App.FindRecordsByFilter("trails", "author={:author}", "", -1, 0, dbx.Params{"author": actor.Id})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(trails) > 0 {
|
||||||
|
if err := util.IndexTrails(e.App, trails, client); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lists, err := e.App.FindRecordsByFilter("lists", "author={:author}", "", -1, 0, dbx.Params{"author": actor.Id})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(lists) > 0 {
|
||||||
|
if err := util.IndexLists(e.App, lists, client); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func createDefaultUserSettings(app core.App, userId string) error {
|
func createDefaultUserSettings(app core.App, userId string) error {
|
||||||
collection, err := app.FindCollectionByNameOrId("settings")
|
collection, err := app.FindCollectionByNameOrId("settings")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let { user }: Props = $props();
|
let { user }: Props = $props();
|
||||||
|
const navUser = $derived($currentUser ?? user);
|
||||||
|
|
||||||
let navBarItems = [
|
let navBarItems = [
|
||||||
{ text: "Home", value: "/" },
|
{ text: "Home", value: "/" },
|
||||||
@@ -139,7 +140,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr class="my-6 border-input-border" />
|
<hr class="my-6 border-input-border" />
|
||||||
<div class="flex flex-col basis-full">
|
<div class="flex flex-col basis-full">
|
||||||
{#if user}
|
{#if navUser}
|
||||||
<a class="btn-primary text-center mx-4" href="/trail/edit/new"
|
<a class="btn-primary text-center mx-4" href="/trail/edit/new"
|
||||||
><i class="fa fa-plus mr-2"></i>{$_("new-trail")}</a
|
><i class="fa fa-plus mr-2"></i>{$_("new-trail")}</a
|
||||||
>
|
>
|
||||||
@@ -148,26 +149,26 @@
|
|||||||
<div class="flex gap-4 items-center justify-between m-4">
|
<div class="flex gap-4 items-center justify-between m-4">
|
||||||
<a
|
<a
|
||||||
class="shrink-0"
|
class="shrink-0"
|
||||||
href="/profile/@{user.username.toLowerCase()}"
|
href="/profile/@{navUser.username.toLowerCase()}"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="rounded-full w-10 aspect-square"
|
class="rounded-full w-10 aspect-square"
|
||||||
src={getFileURL(user, user.avatar) ||
|
src={getFileURL(navUser, navUser.avatar) ||
|
||||||
`https://api.dicebear.com/7.x/initials/svg?seed=${user.username.toLowerCase()}&backgroundType=gradientLinear`}
|
`https://api.dicebear.com/7.x/initials/svg?seed=${navUser.username.toLowerCase()}&backgroundType=gradientLinear`}
|
||||||
alt="avatar"
|
alt="avatar"
|
||||||
/>
|
/>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="/profile/@{user.username.toLowerCase()}"
|
href="/profile/@{navUser.username.toLowerCase()}"
|
||||||
style="width: calc(100% - 104px)"
|
style="width: calc(100% - 104px)"
|
||||||
>
|
>
|
||||||
<p class="text-sm overflow-hidden text-ellipsis">
|
<p class="text-sm overflow-hidden text-ellipsis">
|
||||||
{user.username}
|
{navUser.username}
|
||||||
</p>
|
</p>
|
||||||
<p
|
<p
|
||||||
class="text-sm text-gray-500 overflow-hidden text-ellipsis"
|
class="text-sm text-gray-500 overflow-hidden text-ellipsis"
|
||||||
>
|
>
|
||||||
{user.email}
|
{navUser.email}
|
||||||
</p>
|
</p>
|
||||||
</a>
|
</a>
|
||||||
<button
|
<button
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<a class="font-semibold z-10" href={item.value}>{item.text}</a>
|
<a class="font-semibold z-10" href={item.value}>{item.text}</a>
|
||||||
{/each}
|
{/each}
|
||||||
</menu>
|
</menu>
|
||||||
{#if user}
|
{#if navUser}
|
||||||
<div class="hidden lg:flex gap-6 items-center">
|
<div class="hidden lg:flex gap-6 items-center">
|
||||||
<button
|
<button
|
||||||
aria-label="Toggle theme"
|
aria-label="Toggle theme"
|
||||||
@@ -257,8 +258,8 @@
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="rounded-full w-full h-full"
|
class="rounded-full w-full h-full"
|
||||||
src={getFileURL(user, user.avatar) ||
|
src={getFileURL(navUser, navUser.avatar) ||
|
||||||
`https://api.dicebear.com/7.x/initials/svg?seed=${user.username.toLowerCase()}&backgroundType=gradientLinear`}
|
`https://api.dicebear.com/7.x/initials/svg?seed=${navUser.username.toLowerCase()}&backgroundType=gradientLinear`}
|
||||||
alt="avatar"
|
alt="avatar"
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -139,7 +139,17 @@ export async function users_update(user: User | { [K in keyof User]?: User[K] },
|
|||||||
}
|
}
|
||||||
|
|
||||||
const model: User = await r.json();
|
const model: User = await r.json();
|
||||||
currentUser.set(model);
|
const existing = get(currentUser);
|
||||||
|
const merged: User = {
|
||||||
|
...(existing ?? {}),
|
||||||
|
...model,
|
||||||
|
} as User;
|
||||||
|
|
||||||
|
if (!(merged as any).actor && (existing as any)?.actor) {
|
||||||
|
(merged as any).actor = (existing as any).actor;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentUser.set(merged);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function users_delete(user: User) {
|
export async function users_delete(user: User) {
|
||||||
|
|||||||
Reference in New Issue
Block a user