From fac05281487fc0c223ac812175f2c4fad148f72b Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 19 Jan 2024 14:20:24 +0100 Subject: [PATCH] Add quality selector in settings --- front/packages/models/src/resources/user.ts | 23 ++++++++++++ front/packages/ui/src/settings/index.tsx | 39 +++++++++++++++++++++ front/translations/en.json | 7 ++++ front/translations/fr.json | 7 ++++ 4 files changed, 76 insertions(+) diff --git a/front/packages/models/src/resources/user.ts b/front/packages/models/src/resources/user.ts index e63b4c74..3be389aa 100644 --- a/front/packages/models/src/resources/user.ts +++ b/front/packages/models/src/resources/user.ts @@ -34,6 +34,29 @@ export const UserP = ResourceP("user").extend({ * The list of permissions of the user. The format of this is implementation dependent. */ permissions: z.array(z.string()), + /** + * User settings + */ + settings: z + .object({ + downloadQuality: z + .union([ + z.literal("original"), + z.literal("8k"), + z.literal("4k"), + z.literal("1440p"), + z.literal("1080p"), + z.literal("720p"), + z.literal("480p"), + z.literal("360p"), + z.literal("240p"), + ]) + .default("original") + .catch("original"), + }) + .catchall(z.string()) + // keep a default for older versions of the api + .default({}), }); export type User = z.infer; diff --git a/front/packages/ui/src/settings/index.tsx b/front/packages/ui/src/settings/index.tsx index 4d3cfb2c..838095c7 100644 --- a/front/packages/ui/src/settings/index.tsx +++ b/front/packages/ui/src/settings/index.tsx @@ -61,6 +61,7 @@ import Mail from "@material-symbols/svg-400/outlined/mail.svg"; import Password from "@material-symbols/svg-400/outlined/password.svg"; import Logout from "@material-symbols/svg-400/rounded/logout.svg"; import Delete from "@material-symbols/svg-400/rounded/delete.svg"; +import Quality from "@material-symbols/svg-400/rounded/high_quality.svg"; import Android from "@material-symbols/svg-400/rounded/android.svg"; import Public from "@material-symbols/svg-400/rounded/public.svg"; @@ -386,6 +387,43 @@ const AccountSettings = ({ setPopup }: { setPopup: (e?: ReactElement) => void }) ); }; +const DownloadSettings = () => { + const { t } = useTranslation(); + const account = useAccount(); + + const queryClient = useQueryClient(); + const { mutateAsync } = useMutation({ + mutationFn: async (update: Partial) => + await queryFn({ + path: ["auth", "me"], + method: "PATCH", + body: update, + }), + onSettled: async () => await queryClient.invalidateQueries({ queryKey: ["auth", "me"] }), + }); + + if (!account) return null; + return ( + + +