diff --git a/frontend/src/pages/home_page.tsx b/frontend/src/pages/home_page.tsx index a245619..a2ed060 100644 --- a/frontend/src/pages/home_page.tsx +++ b/frontend/src/pages/home_page.tsx @@ -7,6 +7,7 @@ import { useTranslation } from "../utils/i18n"; import { useAppContext } from "../components/AppContext.tsx"; import Select from "../components/select.tsx"; import { useNavigate } from "react-router"; +import { useNavigator } from "../components/navigator.tsx"; export default function HomePage() { useEffect(() => { @@ -65,6 +66,7 @@ let cachedPinnedResources: Resource[] | null = null; function PinnedResources() { const [pinnedResources, setPinnedResources] = useState([]); + const navigator = useNavigator(); useEffect(() => { if (cachedPinnedResources != null) { @@ -72,6 +74,9 @@ function PinnedResources() { return; } const prefetchData = app.getPreFetchData(); + if (prefetchData && prefetchData.background) { + navigator.setBackground(network.getResampledImageUrl(prefetchData.background)); + } if (prefetchData && prefetchData.pinned) { cachedPinnedResources = prefetchData.pinned; setPinnedResources(cachedPinnedResources!); diff --git a/server/middleware/frontend_middleware.go b/server/middleware/frontend_middleware.go index 48eeb56..69cca38 100644 --- a/server/middleware/frontend_middleware.go +++ b/server/middleware/frontend_middleware.go @@ -157,9 +157,11 @@ func serveIndexHtml(c fiber.Ctx) error { } } else if path == "/" || path == "" { pinned, err := service.GetPinnedResources() - if err == nil { + random, err1 := service.RandomCover() + if err == nil && err1 == nil { preFetchDataJson, _ := json.Marshal(map[string]interface{}{ - "pinned": pinned, + "pinned": pinned, + "background": random, }) preFetchData = url.PathEscape(string(preFetchDataJson)) } diff --git a/server/service/resource.go b/server/service/resource.go index 9bc26d2..a0710d6 100644 --- a/server/service/resource.go +++ b/server/service/resource.go @@ -288,6 +288,22 @@ func RandomResource(host string) (*model.ResourceDetailView, error) { return &v, nil } +var lastSuccessCover uint + +func RandomCover() (uint, error) { + for retries := 0; retries < 5; retries++ { + v, err := dao.RandomResource() + if err != nil { + return 0, err + } + if len(v.Images) > 0 { + lastSuccessCover = v.Images[0].ID + return v.Images[0].ID, nil + } + } + return lastSuccessCover, nil +} + func GetPinnedResources() ([]model.ResourceView, error) { ids := config.PinnedResources() var views []model.ResourceView