import { startTransition, useEffect, useState } from "react" import { useStore } from "@/app/store" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import { upscaleImage } from "@/app/engine/render" import { sleep } from "@/lib/sleep" import { Share } from "../share" import { About } from "../about" import { SettingsDialog } from "../settings-dialog" import { useLocalStorage } from "usehooks-ts" import { localStorageKeys } from "../settings-dialog/localStorageKeys" import { defaultSettings } from "../settings-dialog/defaultSettings" function BottomBar() { // deprecated, as HTML-to-bitmap didn't work that well for us // const page = useStore(state => state.page) // const download = useStore(state => state.download) // const pageToImage = useStore(state => state.pageToImage) const isGeneratingStory = useStore(state => state.isGeneratingStory) const prompt = useStore(state => state.prompt) const panelGenerationStatus = useStore(state => state.panelGenerationStatus) const preset = useStore(state => state.preset) const allStatus = Object.values(panelGenerationStatus) const remainingImages = allStatus.reduce((acc, s) => (acc + (s ? 1 : 0)), 0) const upscaleQueue = useStore(state => state.upscaleQueue) const renderedScenes = useStore(state => state.renderedScenes) const removeFromUpscaleQueue = useStore(state => state.removeFromUpscaleQueue) const setRendered = useStore(state => state.setRendered) const [isUpscaling, setUpscaling] = useState(false) const [hasGeneratedAtLeastOnce, setHasGeneratedAtLeastOnce] = useLocalStorage( localStorageKeys.hasGeneratedAtLeastOnce, defaultSettings.hasGeneratedAtLeastOnce ) const handleUpscale = () => { setUpscaling(true) startTransition(() => { const fn = async () => { for (let [panelId, renderedScene] of Object.entries(upscaleQueue)) { try { console.log(`upscaling panel ${panelId} (${renderedScene.renderId})`) const result = await upscaleImage(renderedScene.assetUrl) await sleep(1000) if (result.assetUrl) { console.log(`upscale successful, removing ${panelId} (${renderedScene.renderId}) from upscale queue`) setRendered(panelId, { ...renderedScene, assetUrl: result.assetUrl }) removeFromUpscaleQueue(panelId) } } catch (err) { console.error(`failed to upscale: ${err}`) } } setUpscaling(false) } fn() }) } const handlePrint = () => { window.print() } const hasFinishedGeneratingImages = allStatus.length > 0 && (allStatus.length - remainingImages) === allStatus.length // keep track of the first generation, independently of the login status useEffect(() => { if (hasFinishedGeneratingImages && !hasGeneratedAtLeastOnce) { setHasGeneratedAtLeastOnce(true) } }, [hasFinishedGeneratingImages, hasGeneratedAtLeastOnce]) return (
{/* Thank you clip factory for your service 🫡 */}
{/**/} {/*
*/}
) } export default BottomBar