Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v1.0.0-beta.3 #59

Merged
merged 291 commits into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
291 commits
Select commit Hold shift + click to select a range
ff4dc96
Merge branch 'svt:main' into main
axelboberg May 8, 2023
6082d5f
Merge branch 'svt:main' into main
axelboberg May 8, 2023
19b6586
Merge branch 'svt:main' into main
axelboberg May 8, 2023
bf67b09
Merge branch 'svt:main' into main
axelboberg May 9, 2023
b1c21e8
Merge branch 'svt:main' into main
axelboberg May 9, 2023
231262a
Merge branch 'svt:main' into main
axelboberg May 9, 2023
dc9e56e
Merge branch 'svt:main' into main
axelboberg May 9, 2023
b1ffdfb
Merge branch 'svt:main' into main
axelboberg May 10, 2023
337ee1e
Merge branch 'svt:main' into main
axelboberg May 10, 2023
b109d9e
Merge branch 'svt:main' into main
axelboberg May 11, 2023
e365389
Merge branch 'svt:main' into main
axelboberg May 11, 2023
fb820cd
Merge branch 'svt:main' into main
axelboberg May 12, 2023
2cad0c4
Merge branch 'svt:main' into main
axelboberg May 16, 2023
8470800
Merge branch 'svt:main' into main
axelboberg May 18, 2023
87a9fd8
Merge branch 'svt:main' into main
axelboberg May 18, 2023
191a25b
Merge branch 'svt:main' into main
axelboberg May 19, 2023
0a809ed
Merge branch 'svt:main' into main
axelboberg May 19, 2023
44ef350
Merge branch 'svt:main' into main
axelboberg May 19, 2023
e962e51
Merge branch 'svt:main' into main
axelboberg May 19, 2023
f61daac
Merge branch 'svt:main' into main
axelboberg May 19, 2023
57aab13
Merge branch 'svt:main' into main
axelboberg May 20, 2023
141f997
Merge branch 'svt:main' into main
axelboberg May 20, 2023
0edb20f
Merge branch 'svt:main' into main
axelboberg May 20, 2023
3c91b3d
Merge branch 'svt:main' into main
axelboberg May 20, 2023
2da0d02
Merge branch 'svt:main' into main
axelboberg May 21, 2023
925fe81
Merge branch 'svt:main' into main
axelboberg May 21, 2023
88f98d4
Merge branch 'svt:main' into main
axelboberg May 21, 2023
615760b
Merge branch 'svt:main' into main
axelboberg May 21, 2023
74f65fd
Merge branch 'svt:main' into main
axelboberg May 21, 2023
718302f
Merge branch 'svt:main' into main
axelboberg May 21, 2023
7d737c6
Merge branch 'svt:main' into main
axelboberg May 22, 2023
8e2f708
Merge branch 'svt:main' into main
axelboberg May 23, 2023
c390363
Merge branch 'svt:main' into main
axelboberg May 23, 2023
ddc0ffd
Merge branch 'svt:main' into main
axelboberg May 24, 2023
941c452
Merge branch 'svt:main' into main
axelboberg May 24, 2023
f046e0a
Merge branch 'svt:main' into main
axelboberg May 24, 2023
f29ac0b
Merge branch 'svt:main' into main
axelboberg May 25, 2023
ea930bf
Merge branch 'svt:main' into main
axelboberg May 26, 2023
ace9a76
Merge branch 'svt:main' into main
axelboberg May 28, 2023
d0cb5bc
Merge branch 'svt:main' into main
axelboberg Dec 29, 2023
0396fcd
Merge branch 'svt:main' into main
axelboberg Jan 2, 2024
8b79be1
Merge branch 'svt:main' into main
axelboberg Jan 3, 2024
88d0d7b
Merge branch 'svt:main' into main
axelboberg Jan 3, 2024
a48f1a3
Merge branch 'svt:main' into main
axelboberg Jan 4, 2024
ec74635
Merge branch 'svt:main' into main
axelboberg Jan 6, 2024
d016be7
Merge branch 'svt:main' into main
axelboberg Jan 9, 2024
d85009d
Merge branch 'svt:main' into main
axelboberg Jan 9, 2024
56113b7
Merge branch 'svt:main' into main
axelboberg Jan 9, 2024
909fe0c
Merge branch 'svt:main' into main
axelboberg Jan 9, 2024
88505df
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
1495f43
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
f8bdc08
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
139ce9a
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
87e08e8
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
93a0a75
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
f7c76d3
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
347a02e
Merge branch 'svt:main' into main
axelboberg Jan 10, 2024
c88163d
Merge branch 'svt:main' into main
axelboberg Jan 11, 2024
7541bd7
Merge branch 'svt:main' into main
axelboberg Jan 12, 2024
5553c8d
Merge branch 'svt:main' into main
axelboberg Jan 12, 2024
f373478
Merge branch 'svt:main' into main
axelboberg Jan 12, 2024
a272509
Merge branch 'svt:main' into main
axelboberg Jan 12, 2024
54b37c9
Merge branch 'svt:main' into main
axelboberg Jan 13, 2024
ae8de18
Merge branch 'svt:main' into main
axelboberg Jan 13, 2024
47030fb
Merge branch 'svt:main' into main
axelboberg Jan 13, 2024
27c46fa
Merge branch 'svt:main' into main
axelboberg Jan 14, 2024
449b46a
Merge branch 'svt:main' into main
axelboberg Jan 14, 2024
83938de
Merge branch 'svt:main' into main
axelboberg Jan 17, 2024
f5e5c6b
Merge branch 'svt:main' into main
axelboberg Jan 19, 2024
6fe809d
Merge branch 'svt:main' into main
axelboberg Jan 19, 2024
ee46a34
Merge branch 'svt:main' into main
axelboberg Jan 20, 2024
bd15c10
Merge branch 'svt:main' into main
axelboberg Jan 21, 2024
c9c8fc0
Merge branch 'svt:main' into main
axelboberg Jan 21, 2024
f6afb38
Merge branch 'svt:main' into main
axelboberg Jan 21, 2024
ef920b9
Merge branch 'svt:main' into main
axelboberg Jan 22, 2024
9bb18e1
Merge branch 'svt:main' into main
axelboberg Jan 23, 2024
136f3f4
Merge branch 'svt:main' into main
axelboberg Jan 24, 2024
24cb95a
Merge branch 'svt:main' into main
axelboberg Jan 24, 2024
1442001
Merge branch 'svt:main' into main
axelboberg Jan 24, 2024
1b491b0
Merge branch 'svt:main' into main
axelboberg Jan 24, 2024
0b2eb93
Merge branch 'svt:main' into main
axelboberg Jan 24, 2024
73ffdb7
Merge branch 'svt:main' into main
axelboberg Jan 25, 2024
3d73bfc
Merge branch 'svt:main' into main
axelboberg Jan 25, 2024
2caf553
Merge branch 'svt:main' into main
axelboberg Feb 14, 2024
d88a27e
Merge branch 'svt:main' into main
axelboberg Feb 14, 2024
4136adb
Merge branch 'svt:main' into main
axelboberg Feb 14, 2024
4f16aac
Merge branch 'svt:main' into main
axelboberg Feb 15, 2024
cdb918d
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
5691042
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
2773f84
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
8e725eb
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
5d79ae6
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
4498896
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
5e44d47
Merge branch 'svt:main' into main
axelboberg Feb 18, 2024
fcf2050
Merge branch 'svt:main' into main
axelboberg Feb 19, 2024
c502136
Merge branch 'svt:main' into main
axelboberg Feb 21, 2024
092babb
Merge branch 'svt:main' into main
axelboberg Feb 21, 2024
07aaf45
Merge branch 'svt:main' into main
axelboberg Feb 27, 2024
7936b69
Merge branch 'svt:main' into main
axelboberg Feb 27, 2024
c1fd768
Merge branch 'svt:main' into main
axelboberg Feb 29, 2024
8cacd9d
Merge branch 'svt:main' into main
axelboberg Feb 29, 2024
0172a4c
Merge branch 'svt:main' into main
axelboberg Feb 29, 2024
b0d7bb2
Merge branch 'svt:main' into main
axelboberg Feb 29, 2024
1a322e2
Merge branch 'svt:main' into main
axelboberg Feb 29, 2024
c841d92
Merge branch 'svt:main' into main
axelboberg Feb 29, 2024
2e5fc5f
Merge branch 'svt:main' into main
axelboberg Mar 1, 2024
a3b9681
Merge branch 'svt:main' into main
axelboberg Mar 2, 2024
f1d27da
Merge branch 'svt:main' into main
axelboberg Mar 3, 2024
287aa25
Merge branch 'svt:main' into main
axelboberg Mar 3, 2024
1282809
Merge branch 'svt:main' into main
axelboberg Mar 3, 2024
45ca05c
Merge branch 'svt:main' into main
axelboberg Mar 5, 2024
213231b
Merge branch 'svt:main' into main
axelboberg Mar 8, 2024
2faa9e5
Merge branch 'svt:main' into main
axelboberg Mar 8, 2024
d013324
Merge branch 'svt:main' into main
axelboberg Mar 9, 2024
4f727ad
Merge branch 'svt:main' into main
axelboberg Mar 9, 2024
3791919
Merge branch 'svt:main' into main
axelboberg Mar 9, 2024
89830b2
Merge branch 'svt:main' into main
axelboberg Mar 9, 2024
6816755
Merge branch 'svt:main' into main
axelboberg Mar 9, 2024
50e5a13
Merge branch 'svt:main' into main
axelboberg Mar 18, 2024
3d22d85
Merge branch 'svt:main' into main
axelboberg Mar 24, 2024
9f32559
Merge branch 'svt:main' into main
axelboberg Mar 24, 2024
329b115
Merge branch 'svt:main' into main
axelboberg Mar 24, 2024
e7cc915
Merge branch 'svt:main' into main
axelboberg Mar 24, 2024
40a8596
Merge branch 'svt:main' into main
axelboberg Mar 24, 2024
969d0e7
Merge branch 'svt:main' into main
axelboberg Mar 26, 2024
efa5d1c
Merge branch 'svt:main' into main
axelboberg Mar 29, 2024
44586fa
Merge branch 'svt:main' into main
axelboberg Mar 29, 2024
0a4357f
Merge branch 'svt:main' into main
axelboberg Mar 29, 2024
a2bd4a1
Merge branch 'svt:main' into main
axelboberg Mar 30, 2024
7a958c4
Merge branch 'svt:main' into main
axelboberg Mar 30, 2024
cc908ff
Merge branch 'svt:main' into main
axelboberg Mar 30, 2024
3a79d3f
Merge branch 'svt:main' into main
axelboberg Mar 31, 2024
cbd4087
Merge branch 'svt:main' into main
axelboberg Mar 31, 2024
d37c021
Merge branch 'svt:main' into main
axelboberg Apr 2, 2024
2d0649e
Merge branch 'svt:main' into main
axelboberg Apr 14, 2024
98f57ac
Merge branch 'svt:main' into main
axelboberg Apr 15, 2024
f2bf131
Merge branch 'svt:main' into main
axelboberg Apr 19, 2024
9f5a056
Merge branch 'svt:main' into main
axelboberg Apr 20, 2024
e89adb1
Merge branch 'svt:main' into main
axelboberg Apr 20, 2024
a318a94
Merge branch 'svt:main' into main
axelboberg Apr 20, 2024
e87c70e
Merge branch 'svt:main' into main
axelboberg Apr 21, 2024
e4a7e57
Merge branch 'svt:main' into main
axelboberg Apr 23, 2024
77921d6
Merge branch 'svt:main' into main
axelboberg Apr 24, 2024
ca31d6d
Merge branch 'svt:main' into main
axelboberg Apr 24, 2024
a4235a8
Merge branch 'svt:main' into main
axelboberg Apr 24, 2024
f88beb9
Merge branch 'svt:main' into main
axelboberg Apr 24, 2024
d4768d9
Merge branch 'svt:main' into main
axelboberg Apr 24, 2024
6d8be3b
Merge branch 'svt:main' into main
axelboberg Apr 26, 2024
faf0797
Merge branch 'svt:main' into main
axelboberg Apr 30, 2024
15fa905
Merge branch 'svt:main' into main
axelboberg May 16, 2024
0c24c88
Merge branch 'svt:main' into main
axelboberg May 16, 2024
57c49c6
Merge branch 'svt:main' into main
axelboberg May 16, 2024
d078149
Merge branch 'svt:main' into main
axelboberg May 16, 2024
546825b
Merge branch 'svt:main' into main
axelboberg May 17, 2024
f039928
Update dependencies
Jun 24, 2024
b9c57df
Replace electron-packager with @electron/packager
Jun 24, 2024
35a1db7
Add a script for installing plugin dependencies regardless of OS
Jun 24, 2024
9f4fc5a
Use npm install rather than npm ci
axelboberg Jun 24, 2024
6ea7c43
Fix an issue causing the identity to not be set
axelboberg Jun 24, 2024
513af4a
Merge branch 'svt:main' into main
axelboberg Jun 24, 2024
84df15e
Merge branch 'svt:main' into main
axelboberg Jun 24, 2024
23da1b7
Start tweaking UI to look more modern
axelboberg Jun 28, 2024
69f3a10
Style tabs
axelboberg Jun 28, 2024
a73bc71
Style the live switch of the caspar plugin
axelboberg Jun 28, 2024
72bdd1a
Update copy
axelboberg Jun 28, 2024
5052213
Add a grid behind widgets in the edit mode
axelboberg Jun 28, 2024
05d13c6
Tweak the border radius of popovers
axelboberg Jun 29, 2024
4b8db5e
Tweak the design of the inspector
axelboberg Jun 29, 2024
a8ac2d1
Increase the opacity of the editing grid background
axelboberg Jun 29, 2024
ada5f08
Add a border to the inspector form header
axelboberg Jun 29, 2024
f2825ff
Set the correct flex-shrink modes for the main header and frame headers
axelboberg Jun 30, 2024
8f53bdd
Update screenshot
axelboberg Jul 19, 2024
3207344
Update readme header
axelboberg Jul 19, 2024
bf6eda8
Add a link to releases
axelboberg Jul 19, 2024
3d17db4
Merge pull request #2 from axelboberg/feat/ui-redesign
axelboberg Jul 19, 2024
d7244f1
Delete screenshot
axelboberg Jul 19, 2024
d8852f5
Add screenshot back
axelboberg Jul 19, 2024
d57fa34
Merge branch 'svt:main' into main
axelboberg Jul 19, 2024
44eaab6
Fix typo
axelboberg Jul 19, 2024
53daa52
Merge branch 'svt:main' into main
axelboberg Sep 8, 2024
1f305c2
Template data
axelboberg Sep 21, 2024
53b67db
Add renderValue to the documentation
axelboberg Sep 21, 2024
8f4e750
Start refactor by breaking apart the main index file
axelboberg Sep 29, 2024
c02df37
Move everything related to electron into its own directory
axelboberg Sep 29, 2024
b721439
Move server initialization to its own file
axelboberg Sep 29, 2024
67b47f7
Move the clean up logic to platform specific initializers
axelboberg Sep 30, 2024
7923b66
Update dependencies
axelboberg Sep 30, 2024
170aeac
Update the security section of the readme
axelboberg Sep 30, 2024
2c0c6f3
Merge branch 'svt:main' into main
axelboberg Sep 30, 2024
98f44e7
Remove unused functions from the ulities file
axelboberg Sep 30, 2024
2da517a
Move the heartbeat logic to an api factory
axelboberg Oct 1, 2024
80eb404
Merge branch 'svt:main' into main
axelboberg Oct 1, 2024
8de6d1a
Fix an issue where the play button couldn't set its item
axelboberg Oct 3, 2024
8f0dc08
Update dependencies
axelboberg Dec 30, 2024
b675642
Add documentation regarding bundled types
axelboberg Dec 30, 2024
c0a90ef
Remove the unused TemplateLoader
axelboberg Dec 30, 2024
2f3b775
Merge branch 'svt:main' into main
axelboberg Dec 30, 2024
426fbb5
Provide auto completion for variables in the inspector
axelboberg Dec 31, 2024
ed4c03a
Provide keys for the map in the onboarding
axelboberg Dec 31, 2024
3ec6311
Change the variable hint to a button
axelboberg Dec 31, 2024
2d28d37
Update electron and fix an issue with buttons in the header not being…
axelboberg Jan 4, 2025
416fa16
Add a dependency injection controller
axelboberg Jan 10, 2025
d865441
Refactor the api to use dependency injection
axelboberg Jan 10, 2025
18827a5
Continue rewriting parts of the API to use dependency injection
axelboberg Jan 10, 2025
a75ea17
Start implementing changes for the refactored API
axelboberg Jan 21, 2025
ecd5571
Fix an issue where the function tried to split non-strings
axelboberg Jan 21, 2025
0f47543
Add flag 'disabled' for plugin manifests
axelboberg Feb 5, 2025
7b733f7
Use proxies for keeping callee scope for the event api
axelboberg Feb 5, 2025
36169b9
Merge pull request #3 from axelboberg/chore/refactor-api
axelboberg Feb 5, 2025
d942840
Merge branch 'svt:main' into main
axelboberg Feb 5, 2025
d7a4e46
Add comments
axelboberg Feb 5, 2025
0956086
Remove unnecessary linebreak
axelboberg Feb 5, 2025
130207e
Update version to beta.2
axelboberg Feb 5, 2025
728496e
Add item indicators to group items in the rundown
axelboberg Feb 9, 2025
26e6728
Move the data connection to the shared state out of the color input c…
axelboberg Feb 9, 2025
230420a
Fix an issue with context menus only being able to be opened once
axelboberg Feb 9, 2025
dba8c3b
Remove unused argument
axelboberg Feb 9, 2025
f1d3fae
Remove the gradient from tabs
axelboberg Feb 9, 2025
37e8ce0
Update the icon for "play next sibling" in the rundown plugin
axelboberg Feb 9, 2025
7806204
Set the default caspar server to the primary group for new items
axelboberg Feb 9, 2025
2a6f0fe
Add a welcome message to the development console
axelboberg Feb 9, 2025
e2a9228
Fix an issue where non strings caused an error and add a function to …
axelboberg Feb 10, 2025
ee5737f
Make names that contain variables searchable through the palette
axelboberg Feb 10, 2025
cfc37b7
Make sure that the group name container always keeps its min height e…
axelboberg Feb 10, 2025
5cf88af
Fix an issue with long texts not sticking within bounds in group items
axelboberg Feb 11, 2025
d183ae7
Add keys to labels in the palette
axelboberg Feb 11, 2025
2c04f74
Make the rundown scroll to items that are selected through the palette
axelboberg Feb 11, 2025
a221c30
Update the app icon
axelboberg Feb 12, 2025
f2f9498
Update feature list in README
axelboberg Feb 12, 2025
83b31a5
Add support for variables in buttons and fix an issue where the varia…
axelboberg Feb 12, 2025
36a1a45
Fix an issue where the deprecated name for the ROLE enum was referenced
axelboberg Feb 12, 2025
23f3b91
Make sure to check that the correct event is registered and fix an is…
axelboberg Feb 13, 2025
677e2e4
Return early if the provided parameter is not an object, preventing t…
axelboberg Feb 13, 2025
b1cfb6d
Merge branch 'svt:main' into main
axelboberg Feb 13, 2025
9511a0f
Merge branch 'svt:main' into main
axelboberg Feb 13, 2025
f8f1a87
Add a script for signing the macOS app bundles
axelboberg Feb 14, 2025
ae68e28
Merge branch 'svt:main' into main
axelboberg Feb 14, 2025
3815f29
Add time indicators for items with durations
axelboberg Feb 21, 2025
811e398
Fix an issue where context menus triggered by list items would get s…
axelboberg Feb 21, 2025
f81766e
v1.0.0-beta.3
axelboberg Feb 21, 2025
d276460
Style the running timer of items in the rundown
axelboberg Feb 23, 2025
ba6524c
Add support for the timer when caspar clips are looping and add the i…
axelboberg Feb 23, 2025
a457d4e
Add a note regarding Caspar server support
axelboberg Feb 23, 2025
736b382
Add onEnd actions
axelboberg Feb 23, 2025
da946e9
Update changelog
axelboberg Feb 23, 2025
4508f40
Fix an issue with incorrect scheduling of onEnd events, as it shouldn…
axelboberg Feb 23, 2025
731ab87
Fix an issue where groups' context menus would get rendered beneath i…
axelboberg Feb 24, 2025
0d289bb
Add compatibility notes to README.md
axelboberg Feb 24, 2025
921a3e6
Tick checkboxes in README.md
axelboberg Feb 24, 2025
13fb004
Remove checkboxes from features list in README.md
axelboberg Feb 24, 2025
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
17 changes: 16 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

## 0.0.1
## 1.0.0-beta.3
### Fixed
- An issue where context menus would get stuck when triggered by rundown items
### Added
- Time indicators in the rundown when items are scheduled or triggered
- On end actions for playable items
- An onEnd event
- A note regarding supported Caspar server versions in settings

## 1.0.0-beta.2
### Changed
- Updated UI
### Fixed
- General bug fixes

## 1.0.0-beta.1
### Changed
- Initial development version
31 changes: 18 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ Extendable and lightweight playout software

## Goals

- [ ] ⚡️ To be a server agnostic, lightweight and quick playout client
- [ ] 🧑‍💻 To be easily extendable with plugins and encourage contribution
- [ ] 💪 To provide a reliable backbone for productions
- [x] ⚡️ To be a server agnostic, lightweight and quick playout client
- [x] 🧑‍💻 To be easily extendable with plugins and encourage contribution
- [x] 💪 To provide a reliable backbone for productions

## Table of contents
- [Goals](#goals)
- [Motivation](#motivation)
- [Features](#features)
- [Compatibility](#compatibility-notes)
- [Download and install](#download-and-install)
- [Documentation and API](#full-documentation-and-api)
- [Security](#security)
Expand All @@ -31,16 +32,20 @@ As developers of production software we found ourselves in a position of rebuild

## Features

- [ ] Real-time sync for multiple operators
- [ ] A fully customizable grid layout
- [ ] Variables
- [ ] Item references
- [ ] Sub-frame accurate timing
- [ ] Multi-threaded architecture
- [ ] Nested groups
- [ ] Multiple rundowns per project
- [ ] Shotbox-style buttons
- [ ] OSC API
- HTTP Web interface for remote use
- A fully customizable grid layout
- Variables
- Item references
- Sub-frame accurate timing
- Multi-threaded architecture
- Nested groups
- Multiple rundowns per project
- Shotbox-style buttons
- OSC API

## Compatibility notes
- Bridge works with Caspar CG Server 2.3 and up.
- Bridge provides data to HTML templates as JSON.

## Download and install
Built binaries are available on the releases page.
Expand Down
4 changes: 2 additions & 2 deletions app/components/ContextMenu/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const ContextMenu = ({ x, y, children, onClose = () => {} }) => {

React.useEffect(() => {
openTimestampRef.current = Date.now()
}, [])
}, [x, y])

React.useEffect(() => {
function closeContext () {
Expand All @@ -45,7 +45,7 @@ export const ContextMenu = ({ x, y, children, onClose = () => {} }) => {
window.removeEventListener('click', closeContext)
window.removeEventListener('contextmenu', closeContext)
}
}, [onClose])
}, [x, y, onClose])

/*
Make sure that the menu open in the direction
Expand Down
1 change: 1 addition & 0 deletions docs/api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ bridge.events.on('item.stop', item => {
| `state.change` | Emitted every time the remote state changes |
| `item.play` | Emitted when an item is played, after an optional delay |
| `item.stop` | Emitted when an item is stopped |
| `item.end` | Emitted when an item ends, this will not trigger when an item is stopped |
| `shortcut` | Emitted when a shortcut is triggered |
| `selection` | Emitted when the selection of the current client changes |

Expand Down
24 changes: 24 additions & 0 deletions lib/api/items.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,19 @@ function factory (api, workspace) {

api.commands.executeCommand('scheduler.abort', undefined, `play:${item.id}`)

/*
Schedule a call to items.endItem if there's
a specified delay and/or duration
so that we can fire the item.end event
*/
const endDelay = Math.max(item?.data?.duration || 0, 0)
if (!Number.isNaN(endDelay) && endDelay > 0) {
api.commands.executeCommand('scheduler.delay', undefined, `end:${item.id}`, endDelay, 'items.endItem', item)
} else {
api.commands.executeCommand('scheduler.abort', undefined, `end:${item.id}`)
endItem(item)
}

workspace.state.apply({
items: {
[item.id]: {
Expand All @@ -36,6 +49,15 @@ function factory (api, workspace) {
api.events.emit('item.play', item)
}

/**
* Mark the end of an item
* and emit the item.end event
* @param { Item } item
*/
function endItem (item) {
api.events.emit('item.end', item)
}

/**
* Schedule an item to be
* played after a certain delay
Expand Down Expand Up @@ -77,6 +99,7 @@ function factory (api, workspace) {
}

api.commands.executeCommand('scheduler.abort', undefined, `play:${item.id}`)
api.commands.executeCommand('scheduler.abort', undefined, `end:${item.id}`)

workspace.state.apply({
items: {
Expand Down Expand Up @@ -138,6 +161,7 @@ function factory (api, workspace) {
api.items.getItem = getItem
api.items.deleteItems = deleteItems

api.commands.registerAsyncCommand('items.endItem', endItem)
api.commands.registerAsyncCommand('items.playItem', playItem)
api.commands.registerAsyncCommand('items.stopItem', stopItem)
api.commands.registerAsyncCommand('items.scheduleItem', scheduleItem)
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bridge",
"version": "1.0.0-beta.2",
"version": "1.0.0-beta.3",
"description": "",
"main": "index.js",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion plugins/caspar/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ exports.activate = async () => {
bridge.settings.registerSetting({
title: 'Server',
group: 'Caspar CG',
description: 'Configure Caspar servers',
description: 'Configure Caspar servers (supports server v2.3 and up)',
inputs: [
{ type: 'frame', uri: `${htmlPath}?path=settings/servers` }
]
Expand Down
27 changes: 27 additions & 0 deletions plugins/caspar/lib/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,3 +152,30 @@ bridge.events.on('item.stop', async item => {
.catch(err => logger.warn(err.message))
}
})

/*
Handle the item.end event to keep indicating
that an item is looping, if it is looping

This will recursively schedule
the endItem function
*/
bridge.events.on('item.end', async coldItem => {
if (!coldItem?.id) {
return
}

const hotItem = await bridge.items.getItem(coldItem.id)
if (!hotItem?.data?.caspar?.loop) {
return
}

bridge.items.applyItem(hotItem.id, {
didStartPlayingAt: Date.now()
})

const endDelay = Math.max(hotItem?.data?.duration || 0, 0)
if (!Number.isNaN(endDelay)) {
bridge.commands.executeCommand('scheduler.delay', `end:${hotItem.id}`, endDelay, 'items.endItem', coldItem)
}
})
2 changes: 2 additions & 0 deletions plugins/rundown/app/components/RundownGroupItem/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import './style.css'
import { SharedContext } from '../../sharedContext'

import { RundownItemIndicatorsSection } from '../RundownItemIndicatorsSection'
import { RundownItemTimeSection } from '../RundownItemTimeSection'
import { RundownItemProgress } from '../RundownItemProgress'
import { RundownList } from '../RundownList'
import { Icon } from '../Icon'
Expand Down Expand Up @@ -147,6 +148,7 @@ export function RundownGroupItem ({ index, item }) {
</div>
<div className='RundownGroupItem-lastProperty'>
<RundownItemIndicatorsSection item={item} />
<RundownItemTimeSection item={item} />
</div>
<RundownItemProgress item={item} />
</div>
Expand Down
1 change: 1 addition & 0 deletions plugins/rundown/app/components/RundownGroupItem/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@
}

.RundownGroupItem-lastProperty {
display: flex;
margin-left: auto;
}

Expand Down
96 changes: 50 additions & 46 deletions plugins/rundown/app/components/RundownItem/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { SharedContext } from '../../sharedContext'
import { useAsyncValue } from '../../hooks/useAsyncValue'

import { RundownItemProgress } from '../RundownItemProgress'
import { RundownItemTimeSection } from '../RundownItemTimeSection'
import { RundownItemIndicatorsSection } from '../RundownItemIndicatorsSection'

import * as Layout from '../Layout'
Expand Down Expand Up @@ -118,54 +119,57 @@ export function RundownItem ({ index, item }) {

return (
<div className='RundownItem'>
<Layout.Spread>
<div className='RundownItem-section'>
<div className='RundownItem-color' style={{ backgroundColor: item?.data?.color }} />
<div className='RundownItem-background' style={{ backgroundColor: item?.data?.color }} />
<div className='RundownItem-index'>
{index}
<div className='RundownItem-margin'>
<Layout.Spread>
<div className='RundownItem-section'>
<div className='RundownItem-color' style={{ backgroundColor: item?.data?.color }} />
<div className='RundownItem-background' style={{ backgroundColor: item?.data?.color }} />
<div className='RundownItem-index'>
{index}
</div>
<div className='RundownItem-name'>
{name}
</div>
{
displaySettings?.notes &&
(
<div className='RundownItem-notes'>
{item?.data?.notes}
</div>
)
}
</div>
<div className='RundownItem-name'>
{name}
<div className='RundownItem-section RundownItem-section--right'>
{
([...properties, ...typeProperties])
.filter(property => property.if)
.map((property, i) => {
/*
Either read the value directly from
the property or use its bind path
to get it from the item object
*/
let value = property?.value
if (property?.bind) {
value = objectPath.get(item, property?.bind)
}

return (
<div className='RundownItem-property' key={i}>
{
!property.hiddenName &&
<div className='RundownItem-propertyName'>{property.name}:</div>
}
<div>{value}</div>
</div>
)
})
}
</div>
{
displaySettings?.notes &&
(
<div className='RundownItem-notes'>
{item?.data?.notes}
</div>
)
}
</div>
<div className='RundownItem-section RundownItem-section--right'>
{
([...properties, ...typeProperties])
.filter(property => property.if)
.map((property, i) => {
/*
Either read the value directly from
the property or use its bind path
to get it from the item object
*/
let value = property?.value
if (property?.bind) {
value = objectPath.get(item, property?.bind)
}

return (
<div className='RundownItem-property' key={i}>
{
!property.hiddenName &&
<div className='RundownItem-propertyName'>{property.name}:</div>
}
<div>{value}</div>
</div>
)
})
}
</div>
<RundownItemIndicatorsSection item={item} />
</Layout.Spread>
<RundownItemIndicatorsSection item={item} />
<RundownItemTimeSection item={item} />
</Layout.Spread>
</div>
<RundownItemProgress item={item} />
</div>
)
Expand Down
6 changes: 5 additions & 1 deletion plugins/rundown/app/components/RundownItem/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
display: flex;
position: relative;
width: 100%;
padding: 1em;
}

.RundownItem-margin {
margin: 1em;
width: 100%;
}

.RundownItem-section {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Icon } from '../Icon'

import './style.css'

const ON_PLAY_ENUM = {
const ACTIONS_ENUM = {
'SELECT_NEXT_ITEM': '2',
'PLAY_NEXT_ITEM': '1'
}
Expand All @@ -13,11 +13,18 @@ export function RundownItemIndicatorsSection ({ item }) {
return (
<div className='RundownItemIndicatorsSection'>
{
item?.data?.onPlay === ON_PLAY_ENUM.SELECT_NEXT_ITEM &&
(
item?.data?.onPlay === ACTIONS_ENUM.SELECT_NEXT_ITEM ||
item?.data?.onEnd === ACTIONS_ENUM.SELECT_NEXT_ITEM
)
&&
<span className='RundownItemIndicatorsSection-icon'><Icon name='arrowDownSecondary' /></span>
}
{
item?.data?.onPlay === ON_PLAY_ENUM.PLAY_NEXT_ITEM &&
(
item?.data?.onPlay === ACTIONS_ENUM.PLAY_NEXT_ITEM ||
item?.data?.onEnd === ACTIONS_ENUM.PLAY_NEXT_ITEM
) &&
<span className='RundownItemIndicatorsSection-icon'><Icon name='arrowDownPlay' /></span>
}
{
Expand Down
Loading