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)) }