feat: Manage avatar favorites

This commit is contained in:
2026-06-30 01:53:17 +07:00
parent 5d983fdbd1
commit d7af72a505
15 changed files with 462 additions and 63 deletions
+5 -2
View File
@@ -9,7 +9,7 @@ import type { SocialSnapshot, UserProfile, UserStatus } from "./types/user";
import type { DiscoverCategory, FavoriteWorldFolder, World, WorldSnapshot } from "./types/world";
import type { CreateInstanceInput, Instance, InstanceRegion } from "./types/instance";
import type { UnityStatus } from "./types/unity";
import type { Avatar, AvatarEdit, AvatarSnapshot } from "./types/avatar";
import type { Avatar, AvatarEdit, AvatarSnapshot, FavoriteGroupEdit } from "./types/avatar";
import type { RepoStats, StoredEntity } from "./types/repository";
import type { AccountSettings, ContentFilterKey, Pending2Fa, RecoveryCode } from "./types/settings";
import type { Group, GroupSnapshot } from "./types/group";
@@ -64,7 +64,10 @@ export interface IpcRequests {
"avatar:select": (avatarId: string) => IpcResult<void>;
"avatar:update": (p: { avatarId: string; edit: AvatarEdit }) => IpcResult<Avatar>;
"avatar:delete": (avatarId: string) => IpcResult<void>;
"avatar:setFavorited": (p: { avatarId: string; favorited: boolean }) => IpcResult<void>;
"avatar:favorite": (p: { avatarId: string; folder?: string }) => IpcResult<void>;
"avatar:unfavorite": (avatarId: string) => IpcResult<void>;
"avatar:moveFavorite": (p: { avatarId: string; folder: string }) => IpcResult<void>;
"avatar:updateFavoriteFolder": (p: { folder: string; edit: FavoriteGroupEdit }) => IpcResult<void>;
"group:byUser": (userId: string) => IpcResult<Group[]>;
"group:represented": (userId: string) => IpcResult<Group | null>;
+14
View File
@@ -29,14 +29,28 @@ export interface AvatarEdit {
releaseStatus?: string;
}
export type FavoriteVisibility = "private" | "friends" | "public";
export interface FavoriteAvatarFolder {
name: string;
displayName: string;
visibility: FavoriteVisibility;
avatarIds: string[];
}
export interface FavoriteLimits {
maxGroups: number;
maxPerGroup: number;
}
export interface FavoriteGroupEdit {
displayName?: string;
visibility?: FavoriteVisibility;
}
export interface AvatarSnapshot {
avatars: Avatar[];
mineIds: string[];
favorites: FavoriteAvatarFolder[];
favoriteLimits: FavoriteLimits;
}