@@ -40,6 +40,7 @@ import androidx.lifecycle.lifecycleScope
4040import androidx.lifecycle.repeatOnLifecycle
4141import com.google.android.material.dialog.MaterialAlertDialogBuilder
4242import com.movtery.zalithlauncher.R
43+ import com.movtery.zalithlauncher.context.COPY_LABEL_LINK
4344import com.movtery.zalithlauncher.coroutine.Task
4445import com.movtery.zalithlauncher.coroutine.TaskSystem
4546import com.movtery.zalithlauncher.game.control.ControlManager
@@ -52,13 +53,18 @@ import com.movtery.zalithlauncher.ui.screens.NestedNavKey
5253import com.movtery.zalithlauncher.ui.screens.NormalNavKey
5354import com.movtery.zalithlauncher.ui.screens.content.elements.Background
5455import com.movtery.zalithlauncher.ui.screens.content.elements.LaunchGameOperation
56+ import com.movtery.zalithlauncher.ui.screens.content.navigateToLogView
5557import com.movtery.zalithlauncher.ui.screens.main.MainScreen
58+ import com.movtery.zalithlauncher.ui.screens.main.crashlogs.LogShareMenu
59+ import com.movtery.zalithlauncher.ui.screens.main.crashlogs.LogShareMenuOperation
60+ import com.movtery.zalithlauncher.ui.screens.main.crashlogs.ShareLinkOperation
5661import com.movtery.zalithlauncher.ui.theme.ZalithLauncherTheme
5762import com.movtery.zalithlauncher.ui.theme.feativals.FestivalEffects
5863import com.movtery.zalithlauncher.upgrade.TooFrequentOperationException
5964import com.movtery.zalithlauncher.utils.compareLangTag
6065import com.movtery.zalithlauncher.utils.copyText
6166import com.movtery.zalithlauncher.utils.festival.getTodayFestivals
67+ import com.movtery.zalithlauncher.utils.file.shareFile
6268import com.movtery.zalithlauncher.utils.isChinese
6369import com.movtery.zalithlauncher.utils.logging.Logger.lInfo
6470import com.movtery.zalithlauncher.utils.network.openLink
@@ -73,6 +79,8 @@ import com.movtery.zalithlauncher.viewmodel.LaunchGameViewModel
7379import com.movtery.zalithlauncher.viewmodel.LauncherUpgradeOperation
7480import com.movtery.zalithlauncher.viewmodel.LauncherUpgradeViewModel
7581import com.movtery.zalithlauncher.viewmodel.LocalHomePageViewModel
82+ import com.movtery.zalithlauncher.viewmodel.LogShareViewModel
83+ import com.movtery.zalithlauncher.viewmodel.LogsUploadViewModel
7684import com.movtery.zalithlauncher.viewmodel.ModpackConfirmUseMobileDataOperation
7785import com.movtery.zalithlauncher.viewmodel.ModpackImportOperation
7886import com.movtery.zalithlauncher.viewmodel.ModpackImportViewModel
@@ -126,6 +134,16 @@ class MainActivity : BaseAppCompatActivity() {
126134 */
127135 val homePageViewModel: HomePageViewModel by viewModels()
128136
137+ /* *
138+ * 游戏日志分享菜单 ViewModel
139+ */
140+ private val logShareViewModel: LogShareViewModel by viewModels()
141+
142+ /* *
143+ * 游戏日志上传 ViewModel
144+ */
145+ private val logsUploadViewModel: LogsUploadViewModel by viewModels()
146+
129147 /* *
130148 * 是否开启捕获按键模式
131149 */
@@ -198,6 +216,13 @@ class MainActivity : BaseAppCompatActivity() {
198216 is EventViewModel .Event .Launch .PlaySave -> {
199217 launchGameViewModel.quickPlaySave(event.version, event.saveName)
200218 }
219+ is EventViewModel .Event .LogShare .ShareGameLog -> {
220+ val file = event.logFile
221+ if (file.exists()) {
222+ logsUploadViewModel.check(file)
223+ logShareViewModel.openMenu(file)
224+ }
225+ }
201226 is EventViewModel .Event .HomePage .Reload -> {
202227 homePageViewModel.reloadPage(true )
203228 }
@@ -345,6 +370,48 @@ class MainActivity : BaseAppCompatActivity() {
345370 }
346371 )
347372
373+ // 游戏日志分享菜单
374+ val logFile = logShareViewModel.currentLogFile
375+ if (logShareViewModel.showMenu && logFile != null ) {
376+ LogShareMenu (
377+ operation = LogShareMenuOperation .ShowMenu ,
378+ onChange = { operation ->
379+ if (operation == LogShareMenuOperation .None ) {
380+ logShareViewModel.closeMenu()
381+ }
382+ },
383+ onView = {
384+ screenBackStackModel.mainScreen.backStack.navigateToLogView(
385+ logPath = logFile.absolutePath
386+ )
387+ logShareViewModel.closeMenu()
388+ },
389+ onShare = {
390+ shareFile(this @MainActivity, logFile)
391+ logShareViewModel.closeMenu()
392+ },
393+ canUpload = logsUploadViewModel.canUpload,
394+ onUpload = {
395+ logsUploadViewModel.operation = ShareLinkOperation .Tip
396+ logShareViewModel.closeMenu()
397+ }
398+ )
399+ }
400+
401+ ShareLinkOperation (
402+ operation = logsUploadViewModel.operation,
403+ onChange = { logsUploadViewModel.operation = it },
404+ onUploadChancel = { logsUploadViewModel.cancel() },
405+ onUpload = {
406+ logFile?.let { file ->
407+ logsUploadViewModel.upload(file) { link ->
408+ openLink(link)
409+ copyText(COPY_LABEL_LINK , link, this @MainActivity)
410+ }
411+ }
412+ }
413+ )
414+
348415 // 检查更新操作流程
349416 LauncherUpgradeOperation (
350417 operation = launcherUpgradeViewModel.operation,
0 commit comments