mirror of
https://github.com/karl0ss/homepage.git
synced 2025-05-04 06:23:40 +01:00
Merge branch 'main' into add-lidarr
This commit is contained in:
commit
7e99b3e505
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,6 +90,10 @@
|
|||||||
"queued": "Queued",
|
"queued": "Queued",
|
||||||
"books": "Books"
|
"books": "Books"
|
||||||
},
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
|
},
|
||||||
"ombi": {
|
"ombi": {
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
"approved": "Approved",
|
"approved": "Approved",
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,11 @@
|
|||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configuré",
|
||||||
"errored": "Errored"
|
"errored": "En erreur"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,5 +147,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,16 +45,16 @@
|
|||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Wanted",
|
||||||
"queued": "Queued",
|
"queued": "Queued",
|
||||||
"movies": "Movies"
|
"movies": "Phim"
|
||||||
},
|
},
|
||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Đang tìm",
|
||||||
"queued": "Queued",
|
"queued": "Đang chờ",
|
||||||
"books": "Books"
|
"books": "Sách"
|
||||||
},
|
},
|
||||||
"ombi": {
|
"ombi": {
|
||||||
"pending": "Pending",
|
"pending": "Đang xử lý",
|
||||||
"approved": "Approved",
|
"approved": "Đã duyệt",
|
||||||
"available": "Available"
|
"available": "Available"
|
||||||
},
|
},
|
||||||
"jellyseerr": {
|
"jellyseerr": {
|
||||||
@ -88,25 +88,25 @@
|
|||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"weather": {
|
"weather": {
|
||||||
"current": "Current Location",
|
"current": "Vị trí hiện tại",
|
||||||
"allow": "Click to allow",
|
"allow": "Bấm để đồng ý",
|
||||||
"updating": "Updating",
|
"updating": "Đang cập nhật",
|
||||||
"wait": "Please wait"
|
"wait": "Vui lòng chờ"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
"approved": "Approved",
|
"approved": "Đã duyệt",
|
||||||
"available": "Available"
|
"available": "Available"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Rate",
|
"rate": "Rate",
|
||||||
"queue": "Queue",
|
"queue": "Hàng chờ",
|
||||||
"timeleft": "Time Left"
|
"timeleft": "Thời gian còn lại"
|
||||||
},
|
},
|
||||||
"nzbget": {
|
"nzbget": {
|
||||||
"rate": "Rate",
|
"rate": "Rate",
|
||||||
"remaining": "Remaining",
|
"remaining": "Remaining",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Đã tải"
|
||||||
},
|
},
|
||||||
"coinmarketcap": {
|
"coinmarketcap": {
|
||||||
"configure": "Configure one or more crypto currencies to track",
|
"configure": "Configure one or more crypto currencies to track",
|
||||||
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,5 +136,9 @@
|
|||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configured",
|
"configured": "Configured",
|
||||||
"errored": "Errored"
|
"errored": "Errored"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"missingEpisodes": "Missing Episodes",
|
||||||
|
"missingMovies": "Missing Movies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import Sonarr from "./widgets/service/sonarr";
|
|||||||
import Radarr from "./widgets/service/radarr";
|
import Radarr from "./widgets/service/radarr";
|
||||||
import Lidarr from "./widgets/service/lidarr";
|
import Lidarr from "./widgets/service/lidarr";
|
||||||
import Readarr from "./widgets/service/readarr";
|
import Readarr from "./widgets/service/readarr";
|
||||||
|
import Bazarr from "./widgets/service/bazarr";
|
||||||
import Ombi from "./widgets/service/ombi";
|
import Ombi from "./widgets/service/ombi";
|
||||||
import Portainer from "./widgets/service/portainer";
|
import Portainer from "./widgets/service/portainer";
|
||||||
import Emby from "./widgets/service/emby";
|
import Emby from "./widgets/service/emby";
|
||||||
@ -31,6 +32,7 @@ const widgetMappings = {
|
|||||||
radarr: Radarr,
|
radarr: Radarr,
|
||||||
lidarr: Lidarr,
|
lidarr: Lidarr,
|
||||||
readarr: Readarr,
|
readarr: Readarr,
|
||||||
|
bazarr: Bazarr,
|
||||||
ombi: Ombi,
|
ombi: Ombi,
|
||||||
portainer: Portainer,
|
portainer: Portainer,
|
||||||
emby: Emby,
|
emby: Emby,
|
||||||
|
36
src/components/services/widgets/service/bazarr.jsx
Normal file
36
src/components/services/widgets/service/bazarr.jsx
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import useSWR from "swr";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
import Widget from "../widget";
|
||||||
|
import Block from "../block";
|
||||||
|
|
||||||
|
import { formatApiUrl } from "utils/api-helpers";
|
||||||
|
|
||||||
|
export default function Bazarr({ service }) {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const config = service.widget;
|
||||||
|
|
||||||
|
const { data: episodesData, error: episodesError } = useSWR(formatApiUrl(config, "episodes"));
|
||||||
|
const { data: moviesData, error: moviesError } = useSWR(formatApiUrl(config, "movies"));
|
||||||
|
|
||||||
|
if (episodesError || moviesError) {
|
||||||
|
return <Widget error={t("widget.api_error")} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!episodesData || !moviesData) {
|
||||||
|
return (
|
||||||
|
<Widget>
|
||||||
|
<Block label={t("bazarr.missingEpisodes")} />
|
||||||
|
<Block label={t("bazarr.missingMovies")} />
|
||||||
|
</Widget>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Widget>
|
||||||
|
<Block label={t("bazarr.missingEpisodes")} value={episodesData.total} />
|
||||||
|
<Block label={t("bazarr.missingMovies")} value={moviesData.total} />
|
||||||
|
</Widget>
|
||||||
|
);
|
||||||
|
}
|
@ -69,6 +69,8 @@ export default function Search({ options }) {
|
|||||||
autoCapitalize="off"
|
autoCapitalize="off"
|
||||||
autoCorrect="off"
|
autoCorrect="off"
|
||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
|
// eslint-disable-next-line jsx-a11y/no-autofocus
|
||||||
|
autoFocus={options.focus}
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
|
@ -14,6 +14,7 @@ const serviceProxyHandlers = {
|
|||||||
sonarr: genericProxyHandler,
|
sonarr: genericProxyHandler,
|
||||||
lidarr: genericProxyHandler,
|
lidarr: genericProxyHandler,
|
||||||
readarr: genericProxyHandler,
|
readarr: genericProxyHandler,
|
||||||
|
bazarr: genericProxyHandler,
|
||||||
speedtest: genericProxyHandler,
|
speedtest: genericProxyHandler,
|
||||||
tautulli: genericProxyHandler,
|
tautulli: genericProxyHandler,
|
||||||
traefik: genericProxyHandler,
|
traefik: genericProxyHandler,
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import dynamic from "next/dynamic";
|
import dynamic from "next/dynamic";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
import ServicesGroup from "components/services/group";
|
import ServicesGroup from "components/services/group";
|
||||||
import BookmarksGroup from "components/bookmarks/group";
|
import BookmarksGroup from "components/bookmarks/group";
|
||||||
@ -30,7 +32,10 @@ export async function getStaticProps() {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Home({ settings }) {
|
export default function Home({ settings }) {
|
||||||
|
const { i18n } = useTranslation();
|
||||||
|
|
||||||
const { data: services } = useSWR("/api/services");
|
const { data: services } = useSWR("/api/services");
|
||||||
const { data: bookmarks } = useSWR("/api/bookmarks");
|
const { data: bookmarks } = useSWR("/api/bookmarks");
|
||||||
const { data: widgets } = useSWR("/api/widgets");
|
const { data: widgets } = useSWR("/api/widgets");
|
||||||
@ -41,6 +46,12 @@ export default function Home({ settings }) {
|
|||||||
wrappedStyle.backgroundSize = "cover";
|
wrappedStyle.backgroundSize = "cover";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (settings.language) {
|
||||||
|
i18n.changeLanguage(settings.language);
|
||||||
|
}
|
||||||
|
}, [i18n, settings.language]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ColorProvider>
|
<ColorProvider>
|
||||||
<ThemeProvider>
|
<ThemeProvider>
|
||||||
|
@ -16,6 +16,7 @@ const formats = {
|
|||||||
npm: `{url}/api/{endpoint}`,
|
npm: `{url}/api/{endpoint}`,
|
||||||
lidarr: `{url}/api/v1/{endpoint}?apikey={key}`,
|
lidarr: `{url}/api/v1/{endpoint}?apikey={key}`,
|
||||||
readarr: `{url}/api/v1/{endpoint}?apikey={key}`,
|
readarr: `{url}/api/v1/{endpoint}?apikey={key}`,
|
||||||
|
bazarr: `{url}/api/{endpoint}/wanted?apikey={key}`,
|
||||||
sabnzbd: `{url}/api/?apikey={key}&output=json&mode={endpoint}`,
|
sabnzbd: `{url}/api/?apikey={key}&output=json&mode={endpoint}`,
|
||||||
coinmarketcap: `https://pro-api.coinmarketcap.com/{endpoint}`,
|
coinmarketcap: `https://pro-api.coinmarketcap.com/{endpoint}`,
|
||||||
gotify: `{url}/{endpoint}`,
|
gotify: `{url}/{endpoint}`,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user