Skip to content

Commit a52209e

Browse files
committed
fix: findMarkerPosition always needs all parts available
1 parent 8eba5bc commit a52209e

File tree

4 files changed

+31
-9
lines changed

4 files changed

+31
-9
lines changed

meteor/server/publications/lib/quickLoop.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,16 +124,15 @@ export function findMarkerPosition(
124124
marker: QuickLoopMarker,
125125
fallback: number,
126126
segmentCache: ReadonlyObjectDeep<ReactiveCacheCollection<Pick<DBSegment, '_id' | '_rank' | 'rundownId'>>>,
127-
partCache:
128-
| { parts: ReadonlyObjectDeep<ReactiveCacheCollection<Pick<DBPart, '_id' | '_rank' | 'segmentId'>>> }
129-
| { partInstances: ReadonlyObjectDeep<ReactiveCacheCollection<DBPartInstance>> },
127+
partCache: {
128+
parts?: ReadonlyObjectDeep<ReactiveCacheCollection<Pick<DBPart, '_id' | '_rank' | 'segmentId'>>>
129+
partInstances?: ReadonlyObjectDeep<ReactiveCacheCollection<DBPartInstance>>
130+
},
130131
rundownRanks: Record<string, number>
131132
): MarkerPosition {
132133
const part =
133134
marker.type === QuickLoopMarkerType.PART
134-
? 'parts' in partCache
135-
? partCache.parts.findOne(marker.id)
136-
: partCache.partInstances.findOne({ 'part._id': marker.id })?.part
135+
? partCache.partInstances?.findOne({ 'part._id': marker.id })?.part ?? partCache.parts?.findOne(marker.id)
137136
: undefined
138137
const partRank = part?._rank ?? fallback
139138

meteor/server/publications/partInstancesUI/publication.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export async function manipulateUIPartInstancesPublicationData(
159159
playlist.quickLoop.start,
160160
-Infinity,
161161
state.contentCache.Segments,
162-
{ partInstances: state.contentCache.PartInstances },
162+
{ partInstances: state.contentCache.PartInstances, parts: state.contentCache.Parts },
163163
rundownRanks
164164
)
165165
const quickLoopEndPosition =
@@ -168,7 +168,7 @@ export async function manipulateUIPartInstancesPublicationData(
168168
playlist.quickLoop.end,
169169
Infinity,
170170
state.contentCache.Segments,
171-
{ partInstances: state.contentCache.PartInstances },
171+
{ partInstances: state.contentCache.PartInstances, parts: state.contentCache.Parts },
172172
rundownRanks
173173
)
174174

meteor/server/publications/partInstancesUI/reactiveContentCache.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/Rund
66
import { DBStudio, IStudioSettings } from '@sofie-automation/corelib/dist/dataModel/Studio'
77
import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
88
import { StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
9+
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
910

1011
export type RundownPlaylistCompact = Pick<DBRundownPlaylist, '_id' | 'activationId' | 'quickLoop' | 'rundownIdsInOrder'>
1112
export const rundownPlaylistFieldSpecifier = literal<MongoFieldSpecifierOnesStrict<RundownPlaylistCompact>>({
@@ -22,6 +23,14 @@ export const segmentFieldSpecifier = literal<MongoFieldSpecifierOnesStrict<Pick<
2223
rundownId: 1,
2324
})
2425

26+
export type PartFields = '_id' | '_rank' | 'rundownId' | 'segmentId'
27+
export const partFieldSpecifier = literal<MongoFieldSpecifierOnesStrict<Pick<DBPart, PartFields>>>({
28+
_id: 1,
29+
_rank: 1,
30+
segmentId: 1,
31+
rundownId: 1,
32+
})
33+
2534
export type PartInstanceOmitedFields = 'part.privateData'
2635
export const partInstanceFieldSpecifier = literal<MongoFieldSpecifierZeroes<DBPartInstance>>({
2736
// @ts-expect-error Mongo typings aren't clever enough yet
@@ -42,6 +51,7 @@ export interface StudioSettingsDoc {
4251
export interface ContentCache {
4352
StudioSettings: ReactiveCacheCollection<StudioSettingsDoc>
4453
Segments: ReactiveCacheCollection<Pick<DBSegment, SegmentFields>>
54+
Parts: ReactiveCacheCollection<Pick<DBPart, PartFields>>
4555
PartInstances: ReactiveCacheCollection<Omit<DBPartInstance, PartInstanceOmitedFields>>
4656
RundownPlaylists: ReactiveCacheCollection<RundownPlaylistCompact>
4757
}
@@ -50,6 +60,7 @@ export function createReactiveContentCache(): ContentCache {
5060
const cache: ContentCache = {
5161
StudioSettings: new ReactiveCacheCollection<StudioSettingsDoc>('studioSettings'),
5262
Segments: new ReactiveCacheCollection<Pick<DBSegment, SegmentFields>>('segments'),
63+
Parts: new ReactiveCacheCollection<Pick<DBPart, PartFields>>('parts'),
5364
PartInstances: new ReactiveCacheCollection<Omit<DBPartInstance, PartInstanceOmitedFields>>('partInstances'),
5465
RundownPlaylists: new ReactiveCacheCollection<RundownPlaylistCompact>('rundownPlaylists'),
5566
}

meteor/server/publications/partInstancesUI/rundownContentObserver.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ import { RundownId, RundownPlaylistActivationId, StudioId } from '@sofie-automat
33
import { logger } from '../../logging'
44
import {
55
ContentCache,
6+
partFieldSpecifier,
67
partInstanceFieldSpecifier,
78
rundownPlaylistFieldSpecifier,
89
segmentFieldSpecifier,
910
StudioFields,
1011
studioFieldSpecifier,
1112
StudioSettingsDoc,
1213
} from './reactiveContentCache'
13-
import { PartInstances, RundownPlaylists, Segments, Studios } from '../../collections'
14+
import { PartInstances, Parts, RundownPlaylists, Segments, Studios } from '../../collections'
1415
import { waitForAllObserversReady } from '../lib/lib'
1516
import { DBStudio } from '@sofie-automation/corelib/dist/dataModel/Studio'
1617
import { applyAndValidateOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides'
@@ -82,6 +83,17 @@ export class RundownContentObserver {
8283
projection: segmentFieldSpecifier,
8384
}
8485
),
86+
Parts.observeChanges(
87+
{
88+
rundownId: {
89+
$in: rundownIds,
90+
},
91+
},
92+
cache.Parts.link(),
93+
{
94+
projection: partFieldSpecifier,
95+
}
96+
),
8597
PartInstances.observeChanges(
8698
{
8799
rundownId: {

0 commit comments

Comments
 (0)