refactor: 收口公开详情启动意图

This commit is contained in:
2026-06-04 00:46:58 +08:00
parent 37a35daddb
commit e1134cc9ec
6 changed files with 645 additions and 188 deletions

View File

@@ -534,6 +534,7 @@ import {
resolvePlatformPublicWorkDetailOpenStrategy,
resolvePlatformPublicWorkLikeIntent,
resolvePlatformPublicWorkRemixIntent,
resolvePlatformPublicWorkStartIntent,
resolveVisiblePuzzleDetailCoverCount,
} from './platformPublicWorkDetailFlow';
import {
@@ -12611,134 +12612,93 @@ export function PlatformEntryFlowShellImpl({
}
runProtectedAction(() => {
if (isBigFishGalleryEntry(selectedPublicWorkDetail)) {
const work = mapPublicWorkDetailToBigFishWork(selectedPublicWorkDetail);
if (!work) {
setPublicWorkDetailError('当前作品缺少会话信息,暂时无法进入玩法。');
return;
}
startBigFishRunFromWork(work);
return;
}
const intent = resolvePlatformPublicWorkStartIntent(
selectedPublicWorkDetail,
{
selectedPuzzleDetail,
selectedRpgDetailEntry: selectedDetailEntry,
barkBattleGalleryEntries,
barkBattleWorks,
mapMatch3DWork: mapPublicWorkDetailToMatch3DWork,
},
);
if (isPuzzleGalleryEntry(selectedPublicWorkDetail)) {
const work =
selectedPuzzleDetail?.profileId === selectedPublicWorkDetail.profileId
? selectedPuzzleDetail
: mapPublicWorkDetailToPuzzleWork(selectedPublicWorkDetail);
if (!work) {
setPublicWorkDetailError(
'当前拼图作品信息不完整,暂时无法进入玩法。',
switch (intent.type) {
case 'blocked':
setPublicWorkDetailError(intent.errorMessage);
return;
case 'start-big-fish':
startBigFishRunFromWork(intent.work, intent.returnStage);
return;
case 'start-puzzle':
setPublicWorkDetailError(null);
void startPuzzleRunFromProfile(
intent.work.profileId,
intent.returnStage,
intent.work,
true,
null,
{ authMode: intent.authMode },
);
return;
}
setPublicWorkDetailError(null);
void startPuzzleRunFromProfile(
work.profileId,
'work-detail',
work,
true,
null,
{ authMode: 'isolated' },
);
return;
}
if (isJumpHopGalleryEntry(selectedPublicWorkDetail)) {
setPublicWorkDetailError(null);
void startJumpHopRunFromProfile(selectedPublicWorkDetail.profileId, {
returnStage: 'work-detail',
});
return;
}
if (isWoodenFishGalleryEntry(selectedPublicWorkDetail)) {
setPublicWorkDetailError(null);
void startWoodenFishRunFromProfile(selectedPublicWorkDetail.profileId, {
returnStage: 'work-detail',
});
return;
}
if (isMatch3DGalleryEntry(selectedPublicWorkDetail)) {
const work = mapPublicWorkDetailToMatch3DWork(selectedPublicWorkDetail);
if (!work) {
setPublicWorkDetailError(
'当前抓大鹅作品信息不完整,暂时无法进入玩法。',
case 'start-jump-hop':
setPublicWorkDetailError(null);
void startJumpHopRunFromProfile(intent.profileId, {
returnStage: intent.returnStage,
});
return;
case 'start-wooden-fish':
setPublicWorkDetailError(null);
void startWoodenFishRunFromProfile(intent.profileId, {
returnStage: intent.returnStage,
});
return;
case 'start-match3d':
setPublicWorkDetailError(null);
void startMatch3DRunFromProfile(
intent.work,
intent.returnStage,
true,
);
return;
}
setPublicWorkDetailError(null);
void startMatch3DRunFromProfile(work, 'work-detail', true);
return;
}
if (isSquareHoleGalleryEntry(selectedPublicWorkDetail)) {
const work = mapPublicWorkDetailToSquareHoleWork(
selectedPublicWorkDetail,
);
if (!work) {
setPublicWorkDetailError(
'当前方洞挑战作品信息不完整,暂时无法进入玩法。',
case 'start-square-hole':
setPublicWorkDetailError(null);
void startSquareHoleRunFromProfile(
intent.work,
intent.returnStage,
true,
);
return;
}
setPublicWorkDetailError(null);
void startSquareHoleRunFromProfile(work, 'work-detail', true);
return;
}
if (isVisualNovelGalleryEntry(selectedPublicWorkDetail)) {
setPublicWorkDetailError(null);
void startVisualNovelRunFromProfile(
selectedPublicWorkDetail.profileId,
'work-detail',
);
return;
}
if (isBarkBattleGalleryEntry(selectedPublicWorkDetail)) {
const work =
barkBattleGalleryEntries.find(
(item) => item.workId === selectedPublicWorkDetail.workId,
) ??
barkBattleWorks.find(
(item) => item.workId === selectedPublicWorkDetail.workId,
) ??
mapBarkBattlePublicDetailToWorkSummary(selectedPublicWorkDetail);
if (!work) {
setPublicWorkDetailError(
'当前汪汪声浪作品信息不完整,暂时无法进入玩法。',
case 'start-visual-novel':
setPublicWorkDetailError(null);
void startVisualNovelRunFromProfile(
intent.profileId,
intent.returnStage,
);
return;
case 'start-bark-battle':
setPublicWorkDetailError(null);
startBarkBattleRunFromWork(intent.work, intent.returnStage);
return;
case 'start-edutainment':
setPublicWorkDetailError(null);
void startBabyObjectMatchRuntimeFromEntry(
intent.entry,
intent.returnStage,
);
return;
case 'record-rpg-gallery-play':
break;
default: {
const exhaustive: never = intent;
return exhaustive;
}
setPublicWorkDetailError(null);
startBarkBattleRunFromWork(work, 'work-detail');
return;
}
if (isEdutainmentGalleryEntry(selectedPublicWorkDetail)) {
setPublicWorkDetailError(null);
void startBabyObjectMatchRuntimeFromEntry(
selectedPublicWorkDetail,
'work-detail',
);
return;
}
const launchEntry =
selectedDetailEntry?.profileId === selectedPublicWorkDetail.profileId
? selectedDetailEntry
: null;
if (!launchEntry) {
setPublicWorkDetailError('作品详情尚未读取完成。');
return;
}
setIsPublicWorkDetailBusy(true);
void recordRpgEntryWorldGalleryPlay(
launchEntry.ownerUserId,
launchEntry.profileId,
intent.entry.ownerUserId,
intent.entry.profileId,
)
.then((updatedEntry) => {
setSelectedDetailEntry(updatedEntry);