diff --git a/.env-example b/.env-example new file mode 100644 index 0000000..27cfbc1 --- /dev/null +++ b/.env-example @@ -0,0 +1,7 @@ +# You can generate encryption key from setup page. +ENCRYPTION_KEY="" +# You can use any random string for JWT_KEY, it is recommended to use a strong key by combining characters, numbers and symbols. +JWT_KEY="" +# Domain name of your website. Used for fetching the og-image from public directory. +# Example: https://drive.example.com +NEXT_PUBLIC_DOMAIN="" \ No newline at end of file diff --git a/.gitignore b/.gitignore index ae6b38a..84e2806 100644 --- a/.gitignore +++ b/.gitignore @@ -25,8 +25,8 @@ yarn-debug.log* yarn-error.log* # local env file -.env* -.env*.local +.env +.env.local # vercel .vercel @@ -34,10 +34,8 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts -!/src/pages/api/test.ts # personal docs /docs /.next /.vscode -/.idea \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..d8e9561 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/src/components/Breadcrumb/index.tsx b/src/components/Breadcrumb/index.tsx index 7d67b8a..cb11175 100644 --- a/src/components/Breadcrumb/index.tsx +++ b/src/components/Breadcrumb/index.tsx @@ -13,7 +13,6 @@ type Props = { export default function Breadcrumb({ data, isLoading }: Props) { const limitItem = 2; const [limitedPath, setLimitedPath] = useState([]); - const [slicedPath, setSlicedPath] = useState(); const [isLimited, setIsLimited] = useState(); // const [isLoading, setIsLoading] = useState(true); @@ -21,12 +20,12 @@ export default function Breadcrumb({ data, isLoading }: Props) { // setIsLoading(true); if (data.length > 0) { const findRoot = data.find((item) => item.id === config.files.rootFolder); + let _data = data; if (findRoot) { - data = data.filter((item) => item.id !== config.files.rootFolder); + _data = _data.filter((item) => item.id !== config.files.rootFolder); } - setLimitedPath(data.slice(0, limitItem).reverse()); - setSlicedPath(data.slice(limitItem)[0]); - setIsLimited(data.length > limitItem); + setLimitedPath(_data.slice(0, limitItem).reverse()); + setIsLimited(_data.length > limitItem); // setIsLoading(false); } }, [data]); @@ -61,7 +60,7 @@ export default function Breadcrumb({ data, isLoading }: Props) { / {idx === limitedPath.length - 1 ? ( - + {parent.name} ) : ( diff --git a/src/components/File/Grid.tsx b/src/components/File/Grid.tsx index 337a2e8..26bfa3d 100644 --- a/src/components/File/Grid.tsx +++ b/src/components/File/Grid.tsx @@ -37,7 +37,7 @@ export default function GridFile({ data }: Props) { {data.videoMediaMetadata && ( <> - + {formatDuration(data.videoMediaMetadata.durationMillis!)} diff --git a/src/components/layout/FileDetails/DetailsButtons.tsx b/src/components/layout/FileDetails/DetailsButtons.tsx index 40e0477..a6dcb1e 100644 --- a/src/components/layout/FileDetails/DetailsButtons.tsx +++ b/src/components/layout/FileDetails/DetailsButtons.tsx @@ -70,7 +70,7 @@ export default function DetailsButtons({ data, hash }: Props) { Copy direct link - {!config.files.allowDownloadProtectedWithoutAccess && ( + {hash && !config.files.allowDownloadProtectedWithoutAccess && (
diff --git a/src/components/layout/FileDetails/index.tsx b/src/components/layout/FileDetails/index.tsx index 3dcd48a..c685ec1 100644 --- a/src/components/layout/FileDetails/index.tsx +++ b/src/components/layout/FileDetails/index.tsx @@ -1,13 +1,10 @@ -import { ErrorResponse, FileResponse, TFile } from "@/types/googleapis"; +import { TFile } from "@/types/googleapis"; import { drive_v3 } from "googleapis"; import LoadingFeedback from "@components/APIFeedback/Loading"; import { formatBytes, formatDate, formatDuration } from "@utils/formatHelper"; import { useEffect, useState } from "react"; import DetailsButtons from "@components/layout/FileDetails/DetailsButtons"; -import ImagePreview from "@components/FilePreview/ImagePreview"; -import MarkdownRender from "@components/utility/MarkdownRender"; -import fetcher from "@utils/swrFetch"; -import useSWR from "swr"; +import { getFilePreview } from "@utils/mimeTypesHelper"; type Props = { data: TFile | drive_v3.Schema$File; @@ -18,6 +15,20 @@ export default function FileDetails({ data, hash }: Props) { const [metadata, setMetadata] = useState<{ label: string; value: string }[]>( [], ); + const [PreviewComponent, setPreviewComponent] = useState( + null, + ); + + useEffect(() => { + const Preview = getFilePreview(data.fileExtension as string); + setPreviewComponent( + , + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); useEffect(() => { if (data) { @@ -73,12 +84,13 @@ export default function FileDetails({ data, hash }: Props) {
- {data.mimeType?.startsWith("image") && ( - - )} + {PreviewComponent} + {/*{data.mimeType?.startsWith("image") && (*/} + {/* */} + {/*)}*/} {/*{data.mimeType?.startsWith("audio") && (*/}
{/* { - setSize(size + 1); + setSize(size + 1).then((r) => r); }} className='w-full rounded-lg' > diff --git a/src/components/layout/Files/ListLayout.tsx b/src/components/layout/Files/ListLayout.tsx index eb4abed..6722100 100644 --- a/src/components/layout/Files/ListLayout.tsx +++ b/src/components/layout/Files/ListLayout.tsx @@ -59,7 +59,7 @@ export default function ListLayout({ data, pagination }: Props) {