fix: HomeBanner 동영상기능 원복
This commit is contained in:
@@ -133,13 +133,25 @@ export const requestPlayControl =
|
||||
(ownerId, videoInfo) => (dispatch, getState) => {
|
||||
const { playerControl } = getState().home;
|
||||
const currentOwnerId = playerControl.ownerId;
|
||||
const isPersistentOwner = currentOwnerId === 'banner0_persistent';
|
||||
|
||||
// 이미 다른 컴포넌트가 제어권을 가지고 있다면, 먼저 해제한다. (선점)
|
||||
if (currentOwnerId && currentOwnerId !== ownerId) {
|
||||
dispatch(releasePlayControl(currentOwnerId, true)); // fromPreemption = true
|
||||
// 이미 같은 컴포넌트가 제어권을 가지고 있다면 아무것도 하지 않음
|
||||
if (currentOwnerId === ownerId) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 새로운 제어권을 설정하고 비디오를 재생한다.
|
||||
// 다른 컴포넌트가 제어권을 가지고 있을 때의 처리 (선점 로직)
|
||||
if (currentOwnerId && currentOwnerId !== ownerId) {
|
||||
// 만약 현재 재생중인 비디오가 영구 재생 비디오라면, 종료하는 대신 '일시정지'
|
||||
if (isPersistentOwner) {
|
||||
dispatch(pausePlayerControl(currentOwnerId));
|
||||
} else {
|
||||
// 그 외의 경우는 기존처럼 완전히 종료
|
||||
dispatch(releasePlayControl(currentOwnerId, true)); // fromPreemption = true
|
||||
}
|
||||
}
|
||||
|
||||
// 새로운 제어권을 설정하고 비디오를 재생
|
||||
dispatch({
|
||||
type: types.SET_PLAYER_CONTROL,
|
||||
payload: { ownerId },
|
||||
@@ -158,6 +170,7 @@ export const requestPlayControl =
|
||||
*/
|
||||
export const releasePlayControl = (ownerId, fromPreemption = false) => (dispatch, getState) => {
|
||||
const { playerControl } = getState().home;
|
||||
const isPersistentOwner = playerControl.ownerId === 'banner0_persistent';
|
||||
|
||||
// 제어권을 가진 컴포넌트가 자신일 경우에만 해제
|
||||
// 단, 선점 로직에 의해 호출된 경우는 소유권 확인 없이 즉시 실행
|
||||
@@ -166,5 +179,43 @@ export const releasePlayControl = (ownerId, fromPreemption = false) => (dispatch
|
||||
type: types.CLEAR_PLAYER_CONTROL,
|
||||
});
|
||||
dispatch(finishVideoPreview());
|
||||
|
||||
// 제어권 해제 후, 만약 이전에 일시정지된 영구 비디오가 있었다면 다시 재생
|
||||
if (isPersistentOwner && playerControl.isPaused) {
|
||||
dispatch(resumePlayerControl('banner0_persistent'));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 현재 재생 중인 비디오를 '일시정지' 상태로 변경하는 액션.
|
||||
* 이 함수는 플레이어 패널을 닫지 않고, 단순히 비디오 재생을 멈추는 신호를 보냅니다.
|
||||
*
|
||||
* @param {string} ownerId - 비디오 제어권을 가진 컴포넌트의 고유 ID.
|
||||
*/
|
||||
export const pausePlayerControl = (ownerId) => (dispatch, getState) => {
|
||||
const { playerControl } = getState().home;
|
||||
|
||||
// 제어권을 가진 컴포넌트가 자신일 경우에만 일시정지
|
||||
if (playerControl.ownerId === ownerId) {
|
||||
dispatch({
|
||||
type: types.PAUSE_PLAYER_CONTROL,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* '일시정지' 상태의 비디오를 다시 재생하는 액션.
|
||||
*
|
||||
* @param {string} ownerId - 비디오 제어권을 가진 컴포넌트의 고유 ID.
|
||||
*/
|
||||
export const resumePlayerControl = (ownerId) => (dispatch, getState) => {
|
||||
const { playerControl } = getState().home;
|
||||
|
||||
// 제어권을 가진 컴포넌트가 자신이고, 일시정지 상태일 때만 재개
|
||||
if (playerControl.ownerId === ownerId && playerControl.isPaused) {
|
||||
dispatch({
|
||||
type: types.RESUME_PLAYER_CONTROL,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user