2026-04-22 19:57:28 +08:00

115 lines
3.2 KiB
Go

package baishun
import (
"strconv"
"strings"
)
// toListItem 把联表行模型转换成游戏列表项。
func (r gameListRow) toListItem() RoomGameListItem {
return RoomGameListItem{
ID: r.ConfigID,
GameID: r.InternalGameID,
GameType: r.gameTypeName(),
VendorType: defaultIfBlank(r.VendorType, baishunVendorType),
VendorGameID: r.vendorGameIDInt(),
Name: r.name(),
Cover: r.cover(),
Category: r.Category,
Sort: r.Sort,
LaunchMode: r.launchMode(),
FullScreen: r.FullScreen,
GameMode: r.gameMode(),
SafeHeight: r.safeHeight(),
Orientation: r.orientation(),
PackageVersion: r.packageVersion(),
Status: defaultIfBlank(r.CatalogStatus, baishunCatalogEnabled),
LaunchParams: r.launchParams(),
}
}
// name 返回游戏展示名称,优先取目录名称。
func (r gameListRow) name() string {
return defaultIfBlank(r.Name, r.CatalogName)
}
// cover 返回游戏封面,优先取目录封面。
func (r gameListRow) cover() string {
return defaultIfBlank(r.Cover, defaultIfBlank(r.CatalogCover, r.previewURL()))
}
// previewURL 返回游戏预览地址。
func (r gameListRow) previewURL() string {
return defaultIfBlank(r.ExtPreviewURL, r.CatalogPreviewURL)
}
// downloadURL 返回游戏下载地址。
func (r gameListRow) downloadURL() string {
return defaultIfBlank(r.PackageURL, r.CatalogDownloadURL)
}
// entryURL 返回游戏实际启动入口。
func (r gameListRow) entryURL() string {
switch r.launchMode() {
case baishunLaunchModeLocalZip:
if strings.TrimSpace(r.PackageURL) != "" {
return r.PackageURL
}
}
if strings.TrimSpace(r.CatalogDownloadURL) != "" {
return r.CatalogDownloadURL
}
return defaultIfBlank(r.PackageURL, defaultIfBlank(r.ExtPreviewURL, "mock://baishun"))
}
// packageVersion 返回游戏包版本。
func (r gameListRow) packageVersion() string {
return defaultIfBlank(r.ExtPackageVersion, r.CatalogPackageVersion)
}
// safeHeight 返回游戏安全区域高度。
func (r gameListRow) safeHeight() int {
if r.ExtSafeHeight > 0 {
return r.ExtSafeHeight
}
return r.CatalogSafeHeight
}
// orientation 返回游戏屏幕方向。
func (r gameListRow) orientation() int {
if r.ExtOrientation != nil {
return *r.ExtOrientation
}
return derefInt(r.CatalogOrientation)
}
// launchMode 返回游戏启动模式。
func (r gameListRow) launchMode() string {
return defaultIfBlank(r.LaunchMode, baishunLaunchModeRemote)
}
// gameMode 返回游戏模式。
func (r gameListRow) gameMode() int {
return baishunFixedGameMode
}
// vendorGameIDInt 返回厂商游戏 ID 的整数值。
func (r gameListRow) vendorGameIDInt() int {
parsed, _ := strconv.Atoi(strings.TrimSpace(r.VendorGameID))
return parsed
}
// currencyIcon 返回货币图标地址。
func (r gameListRow) currencyIcon() string {
return r.CurrencyIcon
}
// launchParams 返回 Flutter 统一启动接口使用的扩展参数。
func (r gameListRow) launchParams() map[string]any {
return launchParamsWithGameType(r.ExtExtraJSON, r.gameTypeName())
}
func (r gameListRow) gameTypeName() string {
return gameTypeFromExtraJSON(r.ExtExtraJSON, defaultIfBlank(r.VendorType, baishunVendorType))
}