Skip to content

Commit

Permalink
hide recordings page if record is not enabled, show error if no recor…
Browse files Browse the repository at this point in the history
…dings available.
  • Loading branch information
hunterjm authored and blakeblackshear committed Jun 6, 2021
1 parent 0bb998c commit 68dfaaf
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 17 deletions.
2 changes: 1 addition & 1 deletion frigate/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ def recordings(camera_name):
files = glob.glob(f"{RECORD_DIR}/*/*/*/{camera_name}")

if len(files) == 0:
return "No recordings found.", 404
return jsonify([])

files.sort()

Expand Down
23 changes: 14 additions & 9 deletions web/src/Sidebar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import NavigationDrawer, { Destination, Separator } from './components/Navigatio

export default function Sidebar() {
const { data: config } = useConfig();
const cameras = useMemo(() => Object.keys(config.cameras), [config]);
const cameras = useMemo(() => Object.entries(config.cameras), [config]);

return (
<NavigationDrawer header={<Header />}>
Expand All @@ -19,7 +19,7 @@ export default function Sidebar() {
matches ? (
<Fragment>
<Separator />
{cameras.map((camera) => (
{cameras.map(([camera]) => (
<Destination href={`/cameras/${camera}`} text={camera} />
))}
<Separator />
Expand All @@ -32,13 +32,18 @@ export default function Sidebar() {
matches ? (
<Fragment>
<Separator />
{cameras.map((camera) => (
<Destination
path={`/recording/${camera}/:date?/:hour?/:seconds?`}
href={`/recording/${camera}`}
text={camera}
/>
))}
{cameras.map(([camera, conf]) => {
if (conf.record.enabled) {
return (
<Destination
path={`/recording/${camera}/:date?/:hour?/:seconds?`}
href={`/recording/${camera}`}
text={camera}
/>
);
}
return null;
})}
<Separator />
</Fragment>
) : null
Expand Down
17 changes: 10 additions & 7 deletions web/src/routes/Cameras.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,25 @@ export default function Cameras() {
<ActivityIndicator />
) : (
<div className="grid grid-cols-1 3xl:grid-cols-3 md:grid-cols-2 gap-4">
{Object.keys(config.cameras).map((camera) => (
<Camera name={camera} />
{Object.entries(config.cameras).map(([camera, conf]) => (
<Camera name={camera} conf={conf} />
))}
</div>
);
}

function Camera({ name }) {
function Camera({ name, conf }) {
const { payload: detectValue, send: sendDetect } = useDetectState(name);
const { payload: clipValue, send: sendClips } = useClipsState(name);
const { payload: snapshotValue, send: sendSnapshots } = useSnapshotsState(name);
const href = `/cameras/${name}`;
const buttons = useMemo(() => [
{ name: 'Events', href: `/events?camera=${name}` },
{ name: 'Recordings', href: `/recording/${name}` }
], [name]);
const buttons = useMemo(() => {
const result = [{ name: 'Events', href: `/events?camera=${name}` }];
if (conf.record.enabled) {
result.push({ name: 'Recordings', href: `/recording/${name}` });
}
return result;
}, [name, conf.record.enabled]);
const icons = useMemo(
() => [
{
Expand Down
12 changes: 12 additions & 0 deletions web/src/routes/Recording.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,18 @@ export default function Recording({ camera, date, hour, seconds }) {
return <ActivityIndicator />;
}

if (data.length === 0) {
return (
<div className="space-y-4">
<Heading>{camera} Recordings</Heading>
<div class="bg-yellow-100 border-l-4 border-yellow-500 text-yellow-700 p-4" role="alert">
<p class="font-bold">No Recordings Found</p>
<p>Make sure you have enabled the record role in your configuration for the {camera} camera.</p>
</div>
</div>
);
}

const recordingDates = data.map((item) => item.date);
const selectedDate = closestTo(
date ? parseISO(date) : new Date(),
Expand Down

0 comments on commit 68dfaaf

Please sign in to comment.