mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-07-30 13:48:07 +02:00
Fixes (#18893)
* i18n translated label fixes * Fix frame cache race bug Objects that were marked as false positives (that would later become true positives) would sometimes have their saved frame prematurely removed from the frame cache.
This commit is contained in:
parent
fd96cd5dae
commit
5593495abd
@ -426,7 +426,7 @@ class CameraState:
|
|||||||
current_thumb_frames = {
|
current_thumb_frames = {
|
||||||
obj.thumbnail_data["frame_time"]
|
obj.thumbnail_data["frame_time"]
|
||||||
for obj in tracked_objects.values()
|
for obj in tracked_objects.values()
|
||||||
if not obj.false_positive and obj.thumbnail_data is not None
|
if obj.thumbnail_data is not None
|
||||||
}
|
}
|
||||||
current_best_frames = {
|
current_best_frames = {
|
||||||
obj.thumbnail_data["frame_time"] for obj in self.best_objects.values()
|
obj.thumbnail_data["frame_time"] for obj in self.best_objects.values()
|
||||||
|
@ -264,9 +264,7 @@ function GeneralFilterButton({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (selectedLabels.length == 1) {
|
if (selectedLabels.length == 1) {
|
||||||
return t(selectedLabels[0], {
|
return getTranslatedLabel(selectedLabels[0]);
|
||||||
ns: "objects",
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return t("labels.count", {
|
return t("labels.count", {
|
||||||
|
@ -52,6 +52,7 @@ import useSWR from "swr";
|
|||||||
import { FrigateConfig } from "@/types/frigateConfig";
|
import { FrigateConfig } from "@/types/frigateConfig";
|
||||||
import { MdImageSearch } from "react-icons/md";
|
import { MdImageSearch } from "react-icons/md";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { getTranslatedLabel } from "@/utils/i18n";
|
||||||
|
|
||||||
type InputWithTagsProps = {
|
type InputWithTagsProps = {
|
||||||
inputFocused: boolean;
|
inputFocused: boolean;
|
||||||
@ -419,9 +420,7 @@ export default function InputWithTags({
|
|||||||
? t("button.yes", { ns: "common" })
|
? t("button.yes", { ns: "common" })
|
||||||
: t("button.no", { ns: "common" });
|
: t("button.no", { ns: "common" });
|
||||||
} else if (filterType === "labels") {
|
} else if (filterType === "labels") {
|
||||||
return t(filterValues as string, {
|
return getTranslatedLabel(filterValues as string);
|
||||||
ns: "objects",
|
|
||||||
});
|
|
||||||
} else if (filterType === "search_type") {
|
} else if (filterType === "search_type") {
|
||||||
return t("filter.searchType." + (filterValues as string));
|
return t("filter.searchType." + (filterValues as string));
|
||||||
} else {
|
} else {
|
||||||
@ -828,9 +827,7 @@ export default function InputWithTags({
|
|||||||
>
|
>
|
||||||
{t("filter.label." + filterType)}:{" "}
|
{t("filter.label." + filterType)}:{" "}
|
||||||
{filterType === "labels"
|
{filterType === "labels"
|
||||||
? t(value, {
|
? getTranslatedLabel(value)
|
||||||
ns: "objects",
|
|
||||||
})
|
|
||||||
: value.replaceAll("_", " ")}
|
: value.replaceAll("_", " ")}
|
||||||
<button
|
<button
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
|
@ -42,6 +42,7 @@ import { TooltipPortal } from "@radix-ui/react-tooltip";
|
|||||||
import { LuSearch } from "react-icons/lu";
|
import { LuSearch } from "react-icons/lu";
|
||||||
import useKeyboardListener from "@/hooks/use-keyboard-listener";
|
import useKeyboardListener from "@/hooks/use-keyboard-listener";
|
||||||
import { Trans, useTranslation } from "react-i18next";
|
import { Trans, useTranslation } from "react-i18next";
|
||||||
|
import { getTranslatedLabel } from "@/utils/i18n";
|
||||||
|
|
||||||
type ReviewDetailDialogProps = {
|
type ReviewDetailDialogProps = {
|
||||||
review?: ReviewSegment;
|
review?: ReviewSegment;
|
||||||
@ -328,11 +329,7 @@ export default function ReviewDetailDialog({
|
|||||||
ns="views/explore"
|
ns="views/explore"
|
||||||
values={{
|
values={{
|
||||||
objects: missingObjects
|
objects: missingObjects
|
||||||
.map((x) =>
|
.map((x) => getTranslatedLabel(x))
|
||||||
t(x, {
|
|
||||||
ns: "objects",
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
.join(", "),
|
.join(", "),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -77,6 +77,7 @@ import { Trans, useTranslation } from "react-i18next";
|
|||||||
import { TbFaceId } from "react-icons/tb";
|
import { TbFaceId } from "react-icons/tb";
|
||||||
import { useIsAdmin } from "@/hooks/use-is-admin";
|
import { useIsAdmin } from "@/hooks/use-is-admin";
|
||||||
import FaceSelectionDialog from "../FaceSelectionDialog";
|
import FaceSelectionDialog from "../FaceSelectionDialog";
|
||||||
|
import { getTranslatedLabel } from "@/utils/i18n";
|
||||||
|
|
||||||
const SEARCH_TABS = [
|
const SEARCH_TABS = [
|
||||||
"details",
|
"details",
|
||||||
@ -717,9 +718,7 @@ function ObjectDetailsTab({
|
|||||||
<div className="text-sm text-primary/40">{t("details.label")}</div>
|
<div className="text-sm text-primary/40">{t("details.label")}</div>
|
||||||
<div className="flex flex-row items-center gap-2 text-sm smart-capitalize">
|
<div className="flex flex-row items-center gap-2 text-sm smart-capitalize">
|
||||||
{getIconForLabel(search.label, "size-4 text-primary")}
|
{getIconForLabel(search.label, "size-4 text-primary")}
|
||||||
{t(search.label, {
|
{getTranslatedLabel(search.label)}
|
||||||
ns: "objects",
|
|
||||||
})}
|
|
||||||
{search.sub_label && ` (${search.sub_label})`}
|
{search.sub_label && ` (${search.sub_label})`}
|
||||||
{isAdmin && search.end_time && (
|
{isAdmin && search.end_time && (
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
@ -1167,9 +1166,9 @@ export function ObjectSnapshotTab({
|
|||||||
ns="components/dialog"
|
ns="components/dialog"
|
||||||
values={{
|
values={{
|
||||||
untranslatedLabel: search?.label,
|
untranslatedLabel: search?.label,
|
||||||
translatedLabel: t(search?.label, {
|
translatedLabel: getTranslatedLabel(
|
||||||
ns: "objects",
|
search?.label,
|
||||||
}),
|
),
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
explore.plus.review.question.ask_full
|
explore.plus.review.question.ask_full
|
||||||
|
Loading…
Reference in New Issue
Block a user