mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-07 04:40:43 +08:00
android: show build info for mod's downloaded libraries
This commit is contained in:
@@ -53,7 +53,14 @@ class GameLibDownloader(private val context: Context) {
|
||||
val modKey: String,
|
||||
val platformArch: String,
|
||||
val filename: String,
|
||||
val sha256: String
|
||||
val sha256: String,
|
||||
val sourceJson: String?
|
||||
)
|
||||
|
||||
data class SourceInfo(
|
||||
val url: String?,
|
||||
val branch: String?,
|
||||
val commit: String?
|
||||
)
|
||||
|
||||
private fun manifestCacheFile(): File = File(context.cacheDir, "hlsdk-manifest.json")
|
||||
@@ -140,9 +147,27 @@ class GameLibDownloader(private val context: Context) {
|
||||
if (filename.isEmpty() || sha256.isEmpty())
|
||||
return null
|
||||
|
||||
return ManifestEntry(modKey, platformArch, filename, sha256.lowercase())
|
||||
val sourceJson = build.optJSONObject("source")?.toString()
|
||||
return ManifestEntry(modKey, platformArch, filename, sha256.lowercase(), sourceJson)
|
||||
}
|
||||
|
||||
fun getSourceInfo(gamedir: String): SourceInfo? {
|
||||
val raw = prefs.getString("${gamedir}_source", null) ?: return null
|
||||
return try {
|
||||
val o = JSONObject(raw)
|
||||
SourceInfo(
|
||||
url = o.optString("url").ifEmpty { null },
|
||||
branch = o.optString("branch").ifEmpty { null },
|
||||
commit = o.optString("commit").ifEmpty { null },
|
||||
)
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun getDownloadTime(gamedir: String): Long =
|
||||
prefs.getLong("${gamedir}_download_time", 0L)
|
||||
|
||||
sealed class Lookup {
|
||||
data class Available(val entry: ManifestEntry) : Lookup()
|
||||
object NotInManifest : Lookup()
|
||||
@@ -282,6 +307,7 @@ class GameLibDownloader(private val context: Context) {
|
||||
prefs.edit()
|
||||
.putString("${gamedir}_sha256", entry.sha256)
|
||||
.putString("${gamedir}_filename", entry.filename)
|
||||
.putString("${gamedir}_source", entry.sourceJson)
|
||||
.putLong("${gamedir}_download_time", System.currentTimeMillis())
|
||||
.apply()
|
||||
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
package su.xash.engine.ui.settings
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.core.net.toUri
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.SwitchPreferenceCompat
|
||||
import su.xash.engine.R
|
||||
import su.xash.engine.model.Game
|
||||
import su.xash.engine.model.GameLibDownloader
|
||||
import java.text.DateFormat
|
||||
import java.util.Date
|
||||
|
||||
class GameSettingsPreferenceFragment(val game: Game) : PreferenceFragmentCompat() {
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
@@ -26,6 +32,8 @@ class GameSettingsPreferenceFragment(val game: Game) : PreferenceFragmentCompat(
|
||||
enableYaPBBots.isVisible = true
|
||||
}
|
||||
|
||||
populateDownloadedBuildInfo()
|
||||
|
||||
val separatePackages = findPreference<SwitchPreferenceCompat>("separate_libraries")!!
|
||||
val clientPackage = findPreference<ListPreference>("client_package")!!
|
||||
val serverPackage = findPreference<ListPreference>("server_package")!!
|
||||
@@ -43,4 +51,43 @@ class GameSettingsPreferenceFragment(val game: Game) : PreferenceFragmentCompat(
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
private fun populateDownloadedBuildInfo() {
|
||||
val downloader = GameLibDownloader(requireContext())
|
||||
val source = downloader.getSourceInfo(game.basedir.name) ?: return
|
||||
val downloadedAt = downloader.getDownloadTime(game.basedir.name)
|
||||
|
||||
val urlPref = findPreference<Preference>("source_url")!!
|
||||
urlPref.isVisible = true
|
||||
urlPref.summary = source.url ?: "—"
|
||||
urlPref.isEnabled = source.url != null
|
||||
urlPref.setOnPreferenceClickListener {
|
||||
source.url?.let {
|
||||
startActivity(Intent(Intent.ACTION_VIEW, it.toUri()))
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
val branchPref = findPreference<Preference>("source_branch")!!
|
||||
branchPref.isVisible = true
|
||||
branchPref.summary = source.branch ?: "—"
|
||||
|
||||
val commitPref = findPreference<Preference>("source_commit")!!
|
||||
commitPref.isVisible = true
|
||||
commitPref.summary = source.commit ?: "—"
|
||||
commitPref.isEnabled = source.commit != null && source.url != null
|
||||
commitPref.setOnPreferenceClickListener {
|
||||
// FIXME: GitHub-styled URL!
|
||||
val target = "${source.url!!.trimEnd('/')}/commit/${source.commit}"
|
||||
startActivity(Intent(Intent.ACTION_VIEW, target.toUri()))
|
||||
true
|
||||
}
|
||||
|
||||
val timePref = findPreference<Preference>("downloaded_at")!!
|
||||
timePref.isVisible = true
|
||||
timePref.summary = if (downloadedAt > 0L)
|
||||
DateFormat.getDateTimeInstance().format(Date(downloadedAt))
|
||||
else
|
||||
"—"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user