Skip to content

Commit 329bef5

Browse files
committed
Merge pull request #1419 from bbc:upstream/directors-screen
feat: Director's Screen # Conflicts: # packages/documentation/docs/user-guide/features/sofie-views-and-screens.mdx
2 parents 5cab843 + 26e7495 commit 329bef5

37 files changed

+2125
-106
lines changed

meteor/i18n/nb.po

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,15 @@ msgstr "Planlagt varighet"
699699
msgid "Planned End"
700700
msgstr "Planlagt slutt"
701701

702+
msgid "Time to planned end"
703+
msgstr "Tid til planlagt slutt"
704+
705+
msgid "Time since planned end"
706+
msgstr "Tid siden planlagt slutt"
707+
708+
msgid "Over/Under"
709+
msgstr "Over/Under"
710+
702711
msgid ""
703712
"The rundown \"{{rundownName}}\" is not published or activated in "
704713
"{{nrcsName}}! No data updates will currently come through."

meteor/i18n/nn.po

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,15 @@ msgstr "Planlagt varigheit"
700700
msgid "Planned End"
701701
msgstr "Planlagt slutt"
702702

703+
msgid "Time to planned end"
704+
msgstr "Tid til planlagt slutt"
705+
706+
msgid "Time since planned end"
707+
msgstr "Tid sidan planlagt slutt"
708+
709+
msgid "Over/Under"
710+
msgstr "Over/Under"
711+
703712
msgid ""
704713
"The rundown \"{{rundownName}}\" is not published or activated in "
705714
"{{nrcsName}}! No data updates will currently come through."

meteor/i18n/template.pot

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,15 @@ msgstr ""
660660
msgid "Planned End"
661661
msgstr ""
662662

663+
msgid "Time to planned end"
664+
msgstr ""
665+
666+
msgid "Time since planned end"
667+
msgstr ""
668+
669+
msgid "Over/Under"
670+
msgstr ""
671+
663672
msgid ""
664673
"The rundown \"{{rundownName}}\" is not published or activated in "
665674
"{{nrcsName}}! No data updates will currently come through."

packages/blueprints-integration/src/documents/pieceGeneric.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export interface IBlueprintPieceGeneric<TPrivateData = unknown, TPublicData = un
3434
externalId: string
3535
/** User-presentable name for the timeline item */
3636
name: string
37+
3738
/** Arbitraty data storage for internal use in the blueprints */
3839
privateData?: TPrivateData
3940
/** Arbitraty data relevant for other systems, made available to them through APIs */

packages/documentation/docs/user-guide/features/sofie-views-and-screens.mdx

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import TabItem from '@theme/TabItem'
77

88
# Sofie Views and Screens
99

10-
## Definitions
11-
* A _**View**_ is definied as a particular layout of Sofie's main user interface.
12-
* A _**Mode**_ is one of several ways to configure a particular "View" of Sofie's main user interface.
13-
* A _**Panel**_ is defined as an expandable/collapsable area of Sofie's main user interface.
14-
* A _**Screen**_ is defined a layout intended to be used on an external display, in addition to with Sofie's main user interface.
10+
## Definitions
11+
12+
- A _**View**_ is definied as a particular layout of Sofie's main user interface.
13+
- A _**Mode**_ is one of several ways to configure a particular "View" of Sofie's main user interface.
14+
- A _**Panel**_ is defined as an expandable/collapsable area of Sofie's main user interface.
15+
- A _**Screen**_ is defined a layout intended to be used on an external display, in addition to with Sofie's main user interface.
1516

1617
## Lobby View
1718

@@ -31,7 +32,7 @@ The _Rundown View_ is the main view that the producer is working in.
3132

3233
#### Take Point
3334

34-
The Take point is currently playing [Part](#part) in the rundown, indicated by the "On Air" line in the GUI.
35+
The Take point is currently playing [Part](#part) in the rundown, indicated by the "On Air" line in the GUI.
3536
What's played on air is calculated from the timeline objects in the Pieces in the currently playing part.
3637

3738
The Pieces inside of a Part determines what's going to happen, the could be indicating things like VT:s, cut to cameras, graphics, or what script the host is going to read.
@@ -59,16 +60,16 @@ If a Piece has more or less content than the Part's expected duration allows, an
5960
Elements in the [Next point](#next-point) \(or beyond\) might be pre-loaded or "put on preview", depending on the blueprints and playout devices used. This feature is called "Lookahead".
6061

6162
### Rundown View Modes
63+
6264
In the top-right corner of the Segment, there's a button controlling the display style of a given Segment. The default display style of a Segment can be indicated by the [Blueprints](../concepts-and-architecture.md#blueprints), but the user can switch to a different mode at any time. You can also change the display mode of all Segments at once, using a button in the bottom-right corner of the Rundown View.
6365

6466
All user interactions work in the Storyboard Mode and List Mode the same as in Timeline Mode: Takes, AdLibs, Holds, and moving the [Next Point](#next-point) around the Rundown.
6567

68+
#### Timeline Mode
6669

67-
#### Timeline Mode
68-
The default mode for the Rundown.
69-
70+
The default mode for the Rundown.
7071

71-
#### Storyboard Mode
72+
#### Storyboard Mode
7273

7374
### Storyboard Mode
7475

@@ -95,7 +96,7 @@ If a Part has an _in-transition_ Piece, it will be displayed to the left of the
9596
This List Mode is designed to be used in productions that are mixing pre-planned and timed segments with more free-flowing production or mixing short live in-camera links with longer pre-produced clips, while trying to keep as much of the show in the viewport as possible, at the expense of hiding some of the content from the User and the _duration_ of the Part on screen having no bearing on it's _width_. This mode also allows Sofie to visualize content _beyond_ the planned duration of a Part.
9697

9798
:::info
98-
The Segment header area also shows the expected (planned) durations for all the Parts and will also show which Parts are sharing timing in a timing group using a ** symbol in the place of a counter.
99+
The Segment header area also shows the expected (planned) durations for all the Parts and will also show which Parts are sharing timing in a timing group using a __ symbol in the place of a counter.
99100
:::
100101

101102
All user interactions work in the Storyboard and List View mode the same as in Timeline mode: Takes, AdLibs, Holds and moving the [Next Point](#next-point) around the Rundown.
@@ -185,15 +186,14 @@ Technically, the switchboard activates and deactivates Route Sets. The Route Set
185186

186187
![Media Status panel](/img/docs/main/features/media-status-rundown-view-panel.png)
187188

188-
This provides an overview of the status of the various Media assets required by
189-
this Rundown for playback. You can sort these assets according to their playout
189+
This provides an overview of the status of the various Media assets required by
190+
this Rundown for playback. You can sort these assets according to their playout
190191
order, status, Source Layer Name and Piece Name by clicking on the table header.
191192

192-
Note that while the _Filter..._ text field is focused, you will not be able to
193+
Note that while the _Filter..._ text field is focused, you will not be able to
193194
use hotkey triggers for playout actions. You can remove the focus from the field
194195
by pressing the <kbd>Esc</kbd> key.
195196

196-
197197
## Evaluations
198198

199199
When a broadcast is done, users can input feedback about how the show went in an evaluation form.
@@ -206,10 +206,9 @@ Evaluations can be configured to be sent to Slack, by setting the "Slack Webhook
206206

207207
The [Settings View](../configuration/settings-view.md) is only available to users with the [Access Level](access-levels.md) set correctly.
208208

209+
## Screens
209210

210-
## Screens
211-
212-
### Prompter Screen
211+
### Prompter Screen
213212

214213
`/prompter/:studioId`
215214

@@ -219,6 +218,14 @@ A fullscreen page which displays the prompter text for the currently active rund
219218

220219
### Presenter Screen
221220

221+
`/countdowns/:studioId/director`
222+
223+
![Director View](/img/docs/main/features/director-screen-example.png)
224+
225+
A fullscreen page, intended to be shown to the director. It displays countdown timers for the current and next items in the rundown. If no Rundown is active in a given studio, the [Screensaver](sofie-views.mdx#screensaver) will be shown.
226+
227+
## Presenter View
228+
222229
`/countdowns/:studioId/presenter`
223230

224231
![Presenter Screen](/img/docs/main/features/presenter-screen-example.png)
@@ -245,11 +252,11 @@ The Pieces are displayed as a Timeline, with the Pieces moving right-to-left as
245252

246253
This screen can be configured using query parameters:
247254

248-
| Query parameter | Type | Description | Default |
249-
| :-------------- | :--- | :---------- | :------ |
250-
| `sourceLayerIds` | string | A comma-separated list of Source Layer IDs to be considered for display | _(show all)_ |
251-
| `studioLabels` | string | A comma-separated list of Studio Labels (Piece `.content.studioLabel` values) to be considered for display | _(show all)_ |
252-
| `fullscreen` | 0 / 1 | Should the screen be shown fullscreen on the device on first user interaction | 0 |
255+
| Query parameter | Type | Description | Default |
256+
| :--------------- | :----- | :--------------------------------------------------------------------------------------------------------- | :----------- |
257+
| `sourceLayerIds` | string | A comma-separated list of Source Layer IDs to be considered for display | _(show all)_ |
258+
| `studioLabels` | string | A comma-separated list of Studio Labels (Piece `.content.studioLabel` values) to be considered for display | _(show all)_ |
259+
| `fullscreen` | 0 / 1 | Should the screen be shown fullscreen on the device on first user interaction | 0 |
253260

254261
Example: [http://127.0.0.1/countdowns/studio0/camera?sourceLayerIds=camera0,dve0&studioLabels=1,KAM%201,K1,KAM1&fullscreen=1](http://127.0.0.1/countdowns/studio0/camera?sourceLayerIds=camera0,dve0&studioLabels=1,KAM%201,K1,KAM1&fullscreen=1)
255262

@@ -297,16 +304,16 @@ An API endpoint for the system status is also available under the URL `/health`
297304

298305
### Media Status Screen
299306

300-
This screen is a summary of all the media required for playback for Rundowns
301-
present in this System. This view allows you to see if clips are ready for
302-
playback or if they are still waiting to become available to be transferred
307+
This screen is a summary of all the media required for playback for Rundowns
308+
present in this System. This view allows you to see if clips are ready for
309+
playback or if they are still waiting to become available to be transferred
303310
onto a playout system.
304311

305312
![Media Status Screen](/img/docs/main/features/media-status.png)
306313

307314
By default, the Media items are sorted according to their position in the
308315
rundown, and the rundowns are in the same order as in the [Lobby View]
309-
(#lobby-view). You can change the sorting order by clicking on the buttons in
316+
(#lobby-view). You can change the sorting order by clicking on the buttons in
310317
the table header.
311318

312319
The Rundown View also has a panel that presents this information in the [context of the current Rundown](#media-status-panel).
@@ -339,7 +346,7 @@ The execution time column displays **coreDuration** + **gatewayDuration** \(**ti
339346
- **gatewayDuration** : The time it took for Playout Gateway to execute the timeline \(ie stored-result-into-database 🠺 timeline-resolved 🠺 callback-to-core\)
340347
- **timelineResolveDuration**: The duration it took in TSR \(in Playout Gateway\) to resolve the timeline
341348

342-
Important to note is that **gatewayDuration** begins at the exact moment **coreDuration** ends.
349+
Important to note is that **gatewayDuration** begins at the exact moment **coreDuration** ends.
343350
So **coreDuration + gatewayDuration** is the full time it took from beginning-of-user-action to the timeline-resolved \(plus a little extra for the final callback for reporting the measurement\).
344351

345352
#### Action
256 KB
Loading
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import Moment from 'react-moment'
2+
import { RundownUtils } from '../rundown'
3+
4+
interface OverUnderProps {
5+
value: number
6+
}
7+
8+
export const OverUnderClockComponent = (props: OverUnderProps): JSX.Element => {
9+
return (
10+
<div className="counter-component__over-under">
11+
<span className={props.value < 0 ? 'under' : 'over'}>
12+
{RundownUtils.formatDiffToTimecode(props.value, true, false, true, true, true, undefined, true, true)}
13+
</span>
14+
</div>
15+
)
16+
}
17+
18+
export const PlannedEndComponent = (props: OverUnderProps): JSX.Element => {
19+
return (
20+
<span className="counter-component__planned-end">
21+
<Moment interval={0} format="HH:mm:ss" date={props.value} />
22+
</span>
23+
)
24+
}
25+
26+
export const TimeToPlannedEndComponent = (props: OverUnderProps): JSX.Element => {
27+
return (
28+
<span className="counter-component__time-to-planned-end">
29+
{RundownUtils.formatDiffToTimecode(props.value, true, false, true, true, true, undefined, true, true)}
30+
</span>
31+
)
32+
}
33+
34+
export const TimeSincePlannedEndComponent = (props: OverUnderProps): JSX.Element => {
35+
return (
36+
<span className="counter-component__time-since-planned-end">
37+
{RundownUtils.formatDiffToTimecode(props.value, true, false, true, true, true, undefined, true, true)}
38+
</span>
39+
)
40+
}

packages/webui/src/client/styles/_colorScheme.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
// color variables are defined in defaultColors.scss
32

43
$color-status-good: var(--color-status-good);
@@ -23,6 +22,7 @@ $general-late-color: var(--general-late-color);
2322
$general-fast-color: var(--general-fast-color);
2423
$general-fast-color--shadow: var(--general-fast-color--shadow);
2524
$general-countdown-to-next-color: var(--general-countdown-to-next-color);
25+
$general-freeze-color: var(--general-freeze-color);
2626

2727
$general-clock: var(--general-clock);
2828

0 commit comments

Comments
 (0)