Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
170 commits
Select commit Hold shift + click to select a range
a8cbb02
Bump onvif-python version 0.1.9 -> 0.2.9
kaburagisec Jan 8, 2026
6dbd8bc
refactor(ptz): Remove obsolete PTZ component files docs
kaburagisec Jan 8, 2026
5983a77
refactor(ptz): Remove obsolete PTZ component files and constants
kaburagisec Jan 8, 2026
e8ee6db
feat(docs): Add source code and github issue links, oldest and newest…
kaburagisec Jan 8, 2026
b94d9b8
feat(scripts): Adapt the docs generation script to the latest meta fo…
kaburagisec Jan 8, 2026
4669f19
feat(docs): Add ONVIF docs and change Telegram docs
kaburagisec Jan 8, 2026
c2149fc
feat(onvif): Create ONVIF components
kaburagisec Jan 9, 2026
7b2b42c
refactor(telegram): Refactor Telegram component to accommodate the ch…
kaburagisec Jan 9, 2026
952bc9c
refactor(webserver): Change how API endpoints are discovered
kaburagisec Jan 9, 2026
61bdafb
feat(webserver/onvif): Add Actions API for ONVIF components
kaburagisec Jan 9, 2026
ea84e0a
refactor: Run gen_docs for ONVIF component
kaburagisec Jan 9, 2026
85b77ba
Merge branch 'roflcoopter:dev' into dev
kaburagisec Jan 10, 2026
11e3a79
feat(onvif): Add Media service implementation and docs
kaburagisec Jan 10, 2026
063529a
refactor(onvif): Change how selected media profile is used
kaburagisec Jan 10, 2026
bb8aeb6
feat(docs): Add ONVIF-compatible description for viseron
kaburagisec Jan 10, 2026
a6861f9
feat(ui/onvif): Add ONVIF PTZ controls and handlers
kaburagisec Jan 10, 2026
df8914a
feat(webserver/onvif): Add Actions API for ONVIF Media service
kaburagisec Jan 11, 2026
12a3b95
style(ui): Run formatter for ONVIF PTZ Controls
kaburagisec Jan 11, 2026
d750130
style(ui): Change the view speed dial tooltip SX
kaburagisec Jan 11, 2026
8e07a2f
fix(onvif): Change map constant from dict to list
kaburagisec Jan 11, 2026
e77f048
fix(onvif): Change map constant from dict to list +2
kaburagisec Jan 11, 2026
c532513
style(ui): Change start/stop camera toggle
kaburagisec Jan 11, 2026
41e34b4
style(ui): Change manual recording Fab style
kaburagisec Jan 11, 2026
78c10b0
style(docs): Change ONVIF icon in main page
kaburagisec Jan 11, 2026
0dad188
refactor(webserver/tuning): Change the key usage from component/domai…
kaburagisec Jan 12, 2026
0472f16
fix: Make sure the camera start/stop feature is for admin role only
kaburagisec Jan 12, 2026
57513ab
style: Run pre-commit
kaburagisec Jan 12, 2026
3b225b1
fix: Make sure the manual recording feature is for admin/write role only
kaburagisec Jan 12, 2026
18be91e
fix(webserver): Make sure the manual recording API is for admin/write…
kaburagisec Jan 12, 2026
6cc53fd
feat(onvif): Add ptz_support key to camera based on available components
kaburagisec Jan 12, 2026
d463d75
Merge branch 'roflcoopter:dev' into dev
kaburagisec Jan 12, 2026
c97bf28
Merge branch 'dev' into dev
kaburagisec Jan 12, 2026
fa89b4d
fix(onvif): Store ptz_support as camera state instead of method over…
kaburagisec Jan 12, 2026
3686d6a
style: Add disable=protected-access for ptz_support camera key in ONVIF
kaburagisec Jan 12, 2026
ad57045
fix(webserver): resolve nested API handlers with dynamic path segments
kaburagisec Jan 12, 2026
f2267fd
style(ui): Make icons in camera card more responsive
kaburagisec Jan 12, 2026
da3f8c3
Merge branch 'roflcoopter:dev' into dev
kaburagisec Jan 13, 2026
8b37e21
refactor(onvif): Changed service name for clarity
kaburagisec Jan 13, 2026
ec0a8f4
refactor(ui/ptz): Change PTZ Controls to draggable cards
kaburagisec Jan 13, 2026
f0d4d5e
style(ui/tuning): Change section items in the box with gap
kaburagisec Jan 13, 2026
cf2ec2a
fix(ui/ptz): Prevent event propagation for mouse and touch interactions
kaburagisec Jan 14, 2026
7c3c669
refactor(ptz): Rename go_home_position to goto_home_position for cons…
kaburagisec Jan 14, 2026
1ff5d76
refactor(ptz): Rename go_home to goto_home for consistency and update…
kaburagisec Jan 14, 2026
7332428
fix(api/actions): Fix typo in ONVIF Device Actions API
kaburagisec Jan 14, 2026
f1fa269
feat(onvif): Implementing Camera Tuning API for ONVIF component
kaburagisec Jan 14, 2026
f538c32
Merge branch 'dev' into dev
kaburagisec Jan 15, 2026
b40b73a
Merge branch 'dev' into dev
kaburagisec Jan 15, 2026
ea0e60c
Merge branch 'dev' into dev
kaburagisec Jan 17, 2026
b62808f
refactor(ui/ptz): Move draggable function as helper libs
kaburagisec Jan 17, 2026
1d2c91d
Merge branch 'dev' of https://github.com/kaburagisec/viseron into dev
kaburagisec Jan 17, 2026
741c0fa
feat(onvif): Implement imaging presets and service capabilities
kaburagisec Jan 17, 2026
c4a3d25
feat(onvif): Implement set configuration and service capabilities
kaburagisec Jan 17, 2026
d853bd4
feat(onvif): Implement service capabilities in media service
kaburagisec Jan 17, 2026
970dad7
refactor(onvif): Several fixes and operations additions
kaburagisec Jan 17, 2026
4d04775
feat(onvif): Add a dedicated workflow for ONVIF in Camera Tuning
kaburagisec Jan 17, 2026
e02317f
style(ui): Several style improvements for camera tuning page
kaburagisec Jan 17, 2026
565f882
feat(ui/tuning): Add QueryWrapper component for standardized query st…
kaburagisec Jan 17, 2026
465fdac
Merge branch 'dev' into dev
kaburagisec Jan 18, 2026
8c395af
fix(ui): Resolve git conflict in CustomControls
kaburagisec Jan 18, 2026
4778201
fix(api/actions): Remove unused return in unknown_action
kaburagisec Jan 18, 2026
e1290e5
style(docs): Change icons for object_detector and image_classificatio…
kaburagisec Jan 18, 2026
654a419
Merge branch 'dev' into dev
kaburagisec Jan 18, 2026
0a169a3
style(ui/recording): Change icon for Object Detection type recording
kaburagisec Jan 18, 2026
fcb631d
style(ui): Add label to Role select input in AddUserDialog
kaburagisec Jan 18, 2026
4819de6
Merge branch 'dev' of https://github.com/kaburagisec/viseron into dev
kaburagisec Jan 18, 2026
501d919
style(ui/tuning): Add loading indicator to SaveConfigButton when saving
kaburagisec Jan 18, 2026
495140b
style(ui/ptz): Add enableTrackSlot to loading progress indicator
kaburagisec Jan 19, 2026
7f46128
feat(tuning): Add onUpdateSnapshot hook for ONVIF component
kaburagisec Jan 19, 2026
b8fb0f4
feat(tuning): Create index file for ONVIF component to export miscell…
kaburagisec Jan 19, 2026
e0c8df2
style(ui): Make icons in camera card more responsive again
kaburagisec Jan 19, 2026
dac236e
fix(docs): Add issue query in github issue link
kaburagisec Jan 19, 2026
fb1ee2f
feat(ui/tuning): Add tooltip helper texts to various section
kaburagisec Jan 19, 2026
058d650
docs: Add label tags for issue query link in all relevant components
kaburagisec Jan 19, 2026
2bf35fc
Merge branch 'dev' into dev
kaburagisec Jan 21, 2026
6e73c91
Merge branch 'dev' into dev
kaburagisec Jan 23, 2026
66be0b0
feat(ui/hooks): Add useFormChanges hook for tracking form value changes
kaburagisec Jan 23, 2026
a33be15
Merge branch 'dev' into dev
kaburagisec Jan 26, 2026
3e44d32
Merge branch 'dev' of https://github.com/kaburagisec/viseron into dev
kaburagisec Jan 26, 2026
9a12b8b
style(ui/tuning): Replace Typography with FormHelperText for transfor…
kaburagisec Jan 28, 2026
814aeb6
Revert ptz so that the conflict can be resolved
kaburagisec Feb 1, 2026
f03a10d
Merge branch 'dev' into dev
kaburagisec Feb 1, 2026
7d29f00
wip: Miscellaneous fix/refactor for ONVIF component and Actions API
kaburagisec Feb 1, 2026
881e82d
style(ui/tuning): Update button label to reflect add/edit state
kaburagisec Feb 1, 2026
c10b4cc
feat(ptz): Enhance OnvifPtzController integration with ptzSupport pro…
kaburagisec Feb 1, 2026
8b40a20
feat(ui/tuning): Add warning message handling and clean up alert disp…
kaburagisec Feb 1, 2026
010d987
feat(loading): Add GrowingSpinner component for loading indication
kaburagisec Feb 1, 2026
893a15b
feat(ui/tuning): Add onUpdateSnapshot prop and enhance ONVIF service …
kaburagisec Feb 1, 2026
b3842ae
fix(onvif): Update DNS search_domain type to list for improved flexib…
kaburagisec Feb 1, 2026
b924ad9
feat(onvif): Implement API hooks for ONVIF Component
kaburagisec Feb 1, 2026
aea3326
feat(dates): Add function to convert ONVIF DateTime object to timezon…
kaburagisec Feb 1, 2026
c34a2b2
wip: Implement UI Helper for ONVIF in Camera Tuning
kaburagisec Feb 1, 2026
96905ea
wip: Update docs for ONVIF Component
kaburagisec Feb 1, 2026
daba66c
Merge branch 'dev' into dev
kaburagisec Feb 2, 2026
a3c23e0
wip: Implement UI Helper for ONVIF PTZ in Camera Tuning
kaburagisec Feb 3, 2026
243f9fa
wip: Miscellaneous fix/refactor for Device Service UI helper
kaburagisec Feb 3, 2026
c56ff86
wip: Miscellaneous fix/refactor for Imaging Service UI helper
kaburagisec Feb 3, 2026
5ddef57
style(ui/ptz): Change style of PTZ presets list
kaburagisec Feb 3, 2026
901b4d8
Merge branch 'dev' into dev
kaburagisec Feb 3, 2026
3da4b00
Merge branch 'dev' into dev
kaburagisec Feb 13, 2026
4d2e791
Merge branch 'dev' into dev
kaburagisec Feb 13, 2026
a3bd6cf
Merge branch 'dev' into dev
kaburagisec Feb 21, 2026
865d5df
Merge branch 'dev' into dev
kaburagisec Feb 23, 2026
50ebfc1
Merge branch 'dev' into dev
kaburagisec Mar 5, 2026
5e740bd
Merge conflicts
kaburagisec Mar 5, 2026
91a64f7
Merge branch 'dev' into dev
kaburagisec Mar 7, 2026
9361e3c
Merge branch 'dev' into dev
kaburagisec Mar 11, 2026
677ff2a
Merge branch 'dev' into dev
kaburagisec Mar 13, 2026
4f55926
Merge conflicts
kaburagisec Mar 30, 2026
ae3d093
Merge branch 'dev' into dev
kaburagisec Mar 30, 2026
5fc0305
Merge conflicts
kaburagisec Mar 30, 2026
b10b220
Merge branch 'dev' into dev
kaburagisec Mar 30, 2026
3c1544d
Run pre-commit
kaburagisec Mar 30, 2026
2a34bed
fix(types): Fix import issue for onvif in viseron types
kaburagisec Mar 30, 2026
e07898c
feat(ui/tuning): Add loading state handling and improve user icons in…
kaburagisec Mar 31, 2026
830e6d9
Merge branch 'dev' into dev
kaburagisec Apr 5, 2026
cbf11c9
Merge branch 'dev' of https://github.com/kaburagisec/viseron into dev
kaburagisec Apr 5, 2026
1054e96
Merge branch 'dev' into dev
kaburagisec Apr 9, 2026
8bdf7da
Merge branch 'dev' into dev
kaburagisec Apr 11, 2026
d62ea22
Merge branch 'dev' into dev
kaburagisec Apr 17, 2026
d805b46
Merge branch 'dev' into dev
kaburagisec Apr 21, 2026
a3587a6
Merge branch 'dev' into dev
kaburagisec Apr 28, 2026
116d1f7
Resolve conflict in telegram component
kaburagisec Apr 28, 2026
ec1f0c4
Update commit dates for components
kaburagisec Apr 28, 2026
7f6e4d6
Merge branch 'dev' into dev
kaburagisec May 7, 2026
b35334b
Merge branch 'dev' into dev
kaburagisec Jun 1, 2026
02e6078
Merge branch 'dev' into dev
kaburagisec Aug 1, 2026
9b96be0
Merge branch 'dev' into dev
kaburagisec Aug 22, 2026
98ca9b1
fix(ui/onvif): Fix the use of useEffect with useState
kaburagisec Aug 22, 2026
a757603
fix(ui/onvif): Fix the use of useEffect with useState #2
kaburagisec Aug 22, 2026
657c74d
fix(ui): Remove unused icon
kaburagisec Aug 22, 2026
797f12b
fix(tele): Fix mismatch const import
kaburagisec Aug 22, 2026
8956912
fix(webserver/onvif): Fix module import in ONVIF Actions API
kaburagisec Aug 22, 2026
bc60456
fix(onvif): Ignore mypy for onvif library import
kaburagisec Aug 22, 2026
712c70f
Ignore this to resolve conflict
kaburagisec Aug 22, 2026
14b5864
Merge branch 'dev' into dev
kaburagisec Aug 22, 2026
cce828c
Ignore this to resolve conflict
kaburagisec Aug 22, 2026
3dd1fef
Merge branch 'dev' into dev
kaburagisec Aug 23, 2026
802a987
Merge branch 'dev' into dev
kaburagisec Aug 24, 2026
5048038
Merge branch 'dev' into dev
kaburagisec Aug 24, 2026
b4ec673
Merge branch 'dev' into dev
kaburagisec Aug 24, 2026
b58e271
Merge branch 'dev' into dev
kaburagisec Aug 26, 2026
e22709e
wip(ui/onvif): Implement UI Helper for ONVIF Media in Camera Tuning
kaburagisec Aug 26, 2026
5c2190f
style(ui/onvif): Update UI helper for ONVIF in Camera Tuning
kaburagisec Aug 26, 2026
8321c39
style(ui/tuning): Update icon components and layout in various sectio…
kaburagisec Aug 26, 2026
cf64a9f
feat(ui/onvif): Add PTZ configuration management and update related c…
kaburagisec Aug 26, 2026
e64ff4e
Merge branch 'dev' into dev
kaburagisec Aug 26, 2026
c545953
feat(ui/onvif): Refactor Imaging components to use TITLE and DESC con…
kaburagisec Aug 28, 2026
a6a9923
feat(onvif): Add support for OSD actions in media API handler
kaburagisec Aug 28, 2026
a85645d
feat(ptz): Integrate PTZ configurations into PTZServiceSection and up…
kaburagisec Aug 28, 2026
8ab8c19
feat(media): Add placeholder comments for MediaAudioEncoder, MediaOSD…
kaburagisec Aug 28, 2026
acd7ab7
fix(onvif): Update links in ONVIF documentation for Camera Tuning sec…
kaburagisec Aug 28, 2026
784b437
fix(docs): Update component update dates in commitDates.json
kaburagisec Aug 28, 2026
3dcf160
refactor(ptz): Simplify PTZConfiguration rendering in PTZServiceSection
kaburagisec Aug 28, 2026
98da937
Merge branch 'dev' into dev
kaburagisec Aug 28, 2026
af053de
docs: Format meta docs for fastalpr
kaburagisec Aug 28, 2026
4f01e81
fix(onvif): Disable the built-in `onvif-python` logger to avoid dupli…
kaburagisec Aug 28, 2026
8f9ce25
style: Run pre-commit
kaburagisec Aug 28, 2026
ea1be06
Merge branch 'dev' into dev
kaburagisec Aug 28, 2026
f44ecce
feat(docs): Update component docs creation
kaburagisec Aug 29, 2026
42a6cae
style(ui/tuning): Adapt Tuning UI size for xl breakpoint
kaburagisec Aug 29, 2026
757b4cc
fix(ui/tuning): Update tooltip text to clarify configuration reload r…
kaburagisec Aug 29, 2026
560669a
feat(camera): Add setter for PTZ support in AbstractCamera class
kaburagisec Aug 31, 2026
352c059
feat(onvif/utils): Ensure ONVIF operation via the decorator runs on t…
kaburagisec Aug 31, 2026
45f3fa4
fix(onvif): Improve ONVIF component shutdown and service initialization
kaburagisec Aug 31, 2026
f41d81e
refactor(onvif): Change async methods to synchronous for service capa…
kaburagisec Aug 31, 2026
ad728b8
Merge branch 'dev' into dev
kaburagisec Aug 31, 2026
4709177
revert(onvif): Remove unnecessary logging level setting
kaburagisec Aug 31, 2026
c44d089
style(tuning): Add hasSetupErrors prop to components and adjust layou…
kaburagisec Aug 31, 2026
7e41734
Merge branch 'dev' of https://github.com/kaburagisec/viseron into dev
kaburagisec Aug 31, 2026
43e5426
style(ui): Fix linting
kaburagisec Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions docs/docs/developers/documentation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,11 @@ const ComponentMetadata: Component = {
title: "Fancy Component",
name: "fancy_component",
description: "A fancy component",
image: "/img/components/fancy_component.png",
image: "/img/components/fancy_component.svg", // SVG assets are prioritized.
tags: ["motion_detector"],
category: "new", // Set to null if it has already been published in a previous version.
path: "viseron/components/fancy_component",
issue: "fancy_component",
};

export default ComponentMetadata;
Expand All @@ -69,13 +72,16 @@ If domains are set up in the component, they will be automatically added to the
The following tags are available:

- `camera`
- `face_recognition`
- `image_classification`
- `license_plate_recognition`
- `motion_detector`
- `nvr`
- `object_detector`
- `system`
- `protocol`
- `notification`
- `object_detector`
- `motion_detector`
- `image_classification`
- `face_recognition`
- `license_plate_recognition`
- `integration`

:::warning

Expand Down
1 change: 1 addition & 0 deletions docs/docs/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Viserons features include, but not limited to the following:
- Tiered storage, allowing multiple storage media with different retention policies
- A timeline view of events
- Built in authentication system
- [ONVIF](https://www.onvif.org/) compatible with Profile S
- Object detection via:
- YOLOv3, YOLOv4 and YOLOv7 Darknet using OpenCV
- Tensorflow via [Google Coral EdgeTPU](https://coral.ai/)
Expand Down
1 change: 1 addition & 0 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"prebuild": "node src/lib/generateCommitDates.mjs",
"start": "docusaurus start --host=0.0.0.0",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
Expand Down
91 changes: 91 additions & 0 deletions docs/src/generated/commitDates.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{
"viseron/components/background_subtractor": {
"created": "2021-11-23T11:41:33Z",
"updated": "2026-03-06T18:38:28Z"
},
"viseron/components/codeprojectai": {
"created": "2023-04-27T12:09:31Z",
"updated": "2026-02-04T09:03:49Z"
},
"viseron/components/compreface": {
"created": "2022-11-01T16:12:07Z",
"updated": "2026-04-16T20:46:29Z"
},
"viseron/components/darknet": {
"created": "2021-12-06T15:10:41Z",
"updated": "2026-04-16T20:57:53Z"
},
"viseron/components/deepstack": {
"created": "2021-12-07T06:25:47Z",
"updated": "2026-02-04T09:03:49Z"
},
"viseron/components/discord": {
"created": "2025-03-17T23:00:48Z",
"updated": "2026-06-24T15:09:38Z"
},
"viseron/components/dlib": {
"created": "2021-12-27T14:26:06Z",
"updated": "2026-04-17T20:29:01Z"
},
"viseron/components/edgetpu": {
"created": "2021-11-01T10:25:23Z",
"updated": "2026-04-17T20:35:02Z"
},
"viseron/components/ffmpeg": {
"created": "2021-10-19T20:22:12Z",
"updated": "2026-05-15T14:57:37Z"
},
"viseron/components/go2rtc": {
"created": "2025-04-29T09:09:42Z",
"updated": "2026-07-30T20:54:04Z"
},
"viseron/components/gotify": {
"created": "2025-03-18T01:55:20Z",
"updated": "2026-03-13T22:17:22Z"
},
"viseron/components/gstreamer": {
"created": "2022-03-02T17:36:39Z",
"updated": "2026-05-02T12:41:46Z"
},
"viseron/components/hailo": {
"created": "2025-09-10T05:21:41Z",
"updated": "2026-04-17T20:31:34Z"
},
"viseron/components/logger": {
"created": "2021-10-11T12:53:55Z",
"updated": "2026-03-26T14:02:48Z"
},
"viseron/components/mog2": {
"created": "2021-11-23T11:40:40Z",
"updated": "2026-03-14T21:48:33Z"
},
"viseron/components/mqtt": {
"created": "2021-12-22T12:52:23Z",
"updated": "2026-06-08T15:13:58Z"
},
"viseron/components/nvr": {
"created": "2021-10-25T12:29:15Z",
"updated": "2026-06-08T15:13:58Z"
},
"viseron/components/onvif": null,
"viseron/components/storage": {
"created": "2023-06-12T15:05:18Z",
"updated": "2026-07-29T21:33:00Z"
},
"viseron/components/telegram": {
"created": "2024-07-29T21:40:23Z",
"updated": "2026-06-22T09:44:12Z"
},
"viseron/components/webhook": {
"created": "2025-08-15T12:18:50Z",
"updated": "2026-06-17T10:15:15Z"
},
"viseron/components/webserver": {
"created": "2021-10-12T14:58:37Z",
"updated": "2026-07-08T21:16:12Z"
},
"viseron/components/yolo": {
"created": "2025-06-22T17:09:46Z",
"updated": "2026-06-16T16:43:39Z"
}
}
105 changes: 105 additions & 0 deletions docs/src/lib/generateCommitDates.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import fs from "fs";
import path from "path";

const ROOT =
"src/pages/components-explorer/components";

const OUTPUT =
"src/generated/commitDates.json";

const BASE_URL =
"https://api.github.com/repos/roflcoopter/viseron/commits";

const headers = {
/**
...(process.env.GITHUB_TOKEN
? { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` }
: {}),
*/
Accept: "application/vnd.github+json",
};

/**
* Recursively find all _meta.tsx files
*/
function findMetaFiles(dir) {
const entries = fs.readdirSync(dir, { withFileTypes: true });
const result = [];

for (const e of entries) {
const full = path.join(dir, e.name);
if (e.isDirectory()) {
result.push(...findMetaFiles(full));
} else if (e.name === "_meta.tsx") {
result.push(full);
}
}
return result;
}

/**
* Extract `path: "..."` from _meta.tsx source
*/
function extractPathFromMeta(filePath) {
const content = fs.readFileSync(filePath, "utf8");

const match = content.match(
/path\s*:\s*["'`]([^"'`]+)["'`]/
);

return match?.[1] ?? null;
}

async function fetchCommitDates(repoPath) {
const encoded = encodeURIComponent(repoPath);

// latest commit
const latestRes = await fetch(
`${BASE_URL}?sha=master&path=${encoded}&per_page=1`,
{ headers }
);
const latest = await latestRes.json();
if (!Array.isArray(latest) || latest.length === 0) {
return null;
}

const updated = latest[0].commit.author.date;

// oldest commit (paginate)
let page = 1;
let created = updated;

while (true) {
const res = await fetch(
`${BASE_URL}?sha=master&path=${encoded}&per_page=100&page=${page}`,
{ headers }
);
const data = await res.json();
if (!Array.isArray(data) || data.length === 0) break;

created =
data[data.length - 1].commit.author.date;

if (data.length < 100) break;
page++;
}

return { created, updated };
}

async function main() {
const metaFiles = findMetaFiles(ROOT);
const result = {};

for (const file of metaFiles) {
const repoPath = extractPathFromMeta(file);
if (!repoPath) continue;

result[repoPath] = await fetchCommitDates(repoPath);
}

fs.mkdirSync(path.dirname(OUTPUT), { recursive: true });
fs.writeFileSync(OUTPUT, JSON.stringify(result, null, 2));
}

main().catch(console.error);
10 changes: 10 additions & 0 deletions docs/src/lib/getCommitsDates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import data from "@site/src/generated/commitDates.json";

type CommitDates = {
created?: string;
updated?: string;
};

export default function useCommitDates(path: string): CommitDates {
return data[path] ?? {};
}
8 changes: 4 additions & 4 deletions docs/src/lib/iconMap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import {
Chip,
ConnectionSignal,
FaceActivated,
GroupObjects,
ImageReference,
WatsonHealth3DMprToggle,
VisualRecognition,
Movement,
Notification,
Video,
Expand All @@ -18,8 +18,8 @@ export const iconMap: Record<string, CarbonIconType> = {
CarFront,
ConnectionSignal,
FaceActivated,
GroupObjects,
ImageReference,
WatsonHealth3DMprToggle,
VisualRecognition,
Movement,
Notification,
Chip,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import React from "react";

import { Debug, LogoGithub } from "@carbon/icons-react";
import Head from "@docusaurus/Head";
import Link from "@docusaurus/Link";
import Heading from "@theme/Heading";

import useCommitDates from "@site/src/lib/getCommitsDates";
import { getIconComponent } from "@site/src/lib/iconMap";
import { Component, DomainType, Domains } from "@site/src/types";

Expand Down Expand Up @@ -37,6 +39,8 @@ function TagBadge({ tag }: { tag: DomainType }) {
}

function ComponentHeader({ meta }: { meta: Component }) {
const { created, updated } = useCommitDates(meta.path);

return (
<div>
<Head>
Expand Down Expand Up @@ -68,7 +72,66 @@ function ComponentHeader({ meta }: { meta: Component }) {
</div>
<img src={meta.image} alt={meta.title} />
</div>
<hr className="divider" />
<hr className="divider" style={{ marginBottom: 10 }} />
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
}}
>
<div
style={{
display: "flex",
alignItems: "center",
columnGap: 20,
}}
>
<div
style={{
color: "gray",
}}
>
Created: {created ? new Date(created).toLocaleDateString() : "—"}
</div>
<div
style={{
color: "gray",
}}
>
Updated: {updated ? new Date(updated).toLocaleDateString() : "—"}
</div>
</div>
<div
style={{
display: "flex",
alignItems: "center",
columnGap: 20,
}}
>
<Link
href={`https://github.com/roflcoopter/viseron/tree/master/${meta.path}`}
style={{
display: "flex",
alignItems: "center",
}}
>
<LogoGithub />
&nbsp;View source on Github
</Link>
<Link
href={`https://github.com/roflcoopter/viseron/issues?q=is:issue%20${meta.issue}`}
style={{
display: "flex",
alignItems: "center",
}}
>
<Debug />
&nbsp;View all issues
</Link>
</div>
</div>
<hr className="divider" style={{ marginTop: 10 }} />
</div>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
}

.header img {
max-height: 67px;
max-width: 100%;
max-height: 90px;
max-width: 200px;
}

@media only screen and (max-width: 600px) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ const ComponentMetadata: Component = {
image: "/img/logos/opencv.svg",
tags: ["motion_detector"],
category: null,
path: "viseron/components/background_subtractor",
issue: 'background_subtractor OR label:"component: background_subtractor" OR label:"domain: motion_detector"',
};

export default ComponentMetadata;
Loading