Skip to content

Commit ffe4a2a

Browse files
authored
Merge pull request #1427 from ZalithLauncher/main
merge main
2 parents 1484176 + db406da commit ffe4a2a

87 files changed

Lines changed: 1933 additions & 1135 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

LayerController/src/main/java/com/movtery/layer_controller/data/NormalData.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,19 @@ data class NormalData(
9191
* 过滤出有效的点击事件
9292
*/
9393
internal fun List<ClickEvent>.filterValidEvent(): List<ClickEvent> {
94-
val (sendTextEvents, otherEvents) = partition { event ->
95-
event.type == ClickEvent.Type.SendText
94+
var foundValidSendText = false
95+
return filter { event ->
96+
if (event.type == ClickEvent.Type.SendText) {
97+
if (!foundValidSendText && event.key.isNotEmpty()) {
98+
foundValidSendText = true
99+
true
100+
} else {
101+
false
102+
}
103+
} else {
104+
true
105+
}
96106
}
97-
// 仅保留一个有效的发送文本的事件
98-
val validSendText = sendTextEvents.firstOrNull { it.key.isNotEmpty() }
99-
return otherEvents + listOfNotNull(validSendText)
100107
}
101108

102109
/**

ZalithLauncher/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
android:screenOrientation="sensorLandscape" />
123123
<activity android:name=".ui.activities.ErrorActivity"
124124
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|keyboard|navigation"
125-
android:screenOrientation="sensor" />
125+
android:screenOrientation="sensorLandscape" />
126126
<activity android:name=".ui.activities.FatalErrorActivity"
127127
android:configChanges="keyboardHidden|orientation|screenSize|keyboard|navigation"
128128
android:theme="@style/Theme.Material3.DayNight.Dialog.Alert" />

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/account/microsoft/MicrosoftAuthenticator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ import kotlinx.serialization.json.jsonArray
7272
import kotlinx.serialization.json.jsonObject
7373
import kotlinx.serialization.json.jsonPrimitive
7474
import kotlin.coroutines.CoroutineContext
75+
import kotlin.time.Duration.Companion.milliseconds
7576

7677
private const val TAG = "MicrosoftAuth"
7778

@@ -151,7 +152,7 @@ suspend fun getTokenResponse(
151152

152153
if (checkIsReallyCancelled()) throw CancellationException("Authentication cancelled")
153154

154-
delay(pollingInterval).also {
155+
delay(pollingInterval.milliseconds).also {
155156
context.ensureActive()
156157
}
157158
}

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/addons/mirror/_SourceUtils.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import kotlinx.coroutines.delay
2424
import kotlinx.coroutines.ensureActive
2525
import kotlinx.coroutines.withContext
2626
import kotlinx.io.IOException
27+
import kotlin.time.Duration.Companion.milliseconds
2728

2829
private const val TAG = "SourceUtils"
2930

@@ -43,7 +44,7 @@ suspend fun <T> runMirrorable(
4344
loop@ for (source in sources) {
4445
ensureActive()
4546
if (source.delayMillis > 0) {
46-
delay(source.delayMillis)
47+
delay(source.delayMillis.milliseconds)
4748
}
4849
ensureActive()
4950

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/download/assets/platform/curseforge/CurseForgeSearchResult.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.movtery.zalithlauncher.game.download.assets.platform.PlatformClasses
2222
import com.movtery.zalithlauncher.game.download.assets.platform.PlatformSearchResult
2323
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.CurseForgeData
2424
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.CurseForgePagination
25+
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.isApproved
2526
import com.movtery.zalithlauncher.game.download.assets.platform.searchRankWithChineseBias
2627
import com.movtery.zalithlauncher.game.download.assets.utils.getTranslations
2728
import com.movtery.zalithlauncher.ui.screens.content.download.assets.elements.AssetsPage
@@ -34,17 +35,18 @@ class CurseForgeSearchResult(
3435
* 响应数据
3536
*/
3637
@SerialName("data")
37-
val data: Array<CurseForgeData>,
38+
private val data: Array<CurseForgeData>,
3839

3940
/**
4041
* 响应分页信息
4142
*/
4243
@SerialName("pagination")
43-
val pagination: CurseForgePagination
44+
private val pagination: CurseForgePagination
4445
): PlatformSearchResult {
4546
override fun getAssetsPage(classes: PlatformClasses): AssetsPage {
46-
val mcmodData = data.map {
47-
it to classes.getTranslations().getModBySlugId(it.slug)
47+
val mcmodData = data.mapNotNull { data0 ->
48+
if (!data0.isApproved()) return@mapNotNull null
49+
data0 to classes.getTranslations().getModBySlugId(data0.slug)
4850
}
4951
val pageSize = pagination.pageSize
5052
val isLastPage = pagination.resultCount < pageSize ||
@@ -63,7 +65,7 @@ class CurseForgeSearchResult(
6365
searchFilter: String,
6466
classes: PlatformClasses
6567
): PlatformSearchResult {
66-
val newData = data.toList()
68+
val newData = data.filter { it.isApproved() }
6769
.searchRankWithChineseBias(searchFilter, classes) { it.slug }
6870
.toTypedArray()
6971
return CurseForgeSearchResult(newData, pagination)

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/download/assets/platform/curseforge/CurseForgeSearcher.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.model
2828
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.CurseForgeProject
2929
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.CurseForgeVersion
3030
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.CurseForgeVersions
31+
import com.movtery.zalithlauncher.game.download.assets.platform.curseforge.models.isApproved
3132
import com.movtery.zalithlauncher.utils.file.MurmurHash2Incremental
3233
import com.movtery.zalithlauncher.utils.network.httpGetJson
3334
import com.movtery.zalithlauncher.utils.network.httpPostJson
3435
import io.ktor.http.Parameters
36+
import io.ktor.server.plugins.NotFoundException
3537
import kotlinx.coroutines.async
3638
import kotlinx.coroutines.coroutineScope
3739
import kotlinx.coroutines.sync.Semaphore
@@ -62,10 +64,12 @@ class CurseForgeSearcher(
6264
}
6365

6466
override suspend fun getProject(projectID: String): CurseForgeProject {
65-
return httpGetJson(
67+
val project = httpGetJson<CurseForgeProject>(
6668
url = "$api/mods/$projectID",
6769
headers = listOf("x-api-key" to apiKey)
6870
)
71+
if (!project.isApproved()) throw NotFoundException("The project {$projectID} is not in a publicly available state.")
72+
return project
6973
}
7074

7175
/**

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/download/assets/platform/curseforge/models/CurseForgeData.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,4 +353,9 @@ class CurseForgeData(
353353
}.toSet().takeIf { it.isNotEmpty() }
354354
?.sortedWith { o1, o2 -> o1.index() - o2.index() }
355355
}
356-
}
356+
}
357+
358+
/**
359+
* @return 该模组是否可见
360+
*/
361+
fun CurseForgeData.isApproved(): Boolean = this.status == 4

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/download/assets/platform/curseforge/models/CurseForgeProject.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,9 @@ class CurseForgeProject(
8686
)
8787
}
8888
}
89-
}
89+
}
90+
91+
/**
92+
* @return 该项目是否可见
93+
*/
94+
fun CurseForgeProject.isApproved(): Boolean = this.data.isApproved()

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/download/assets/platform/modrinth/ModrinthSearcher.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import com.movtery.zalithlauncher.game.download.assets.platform.PlatformClasses
2424
import com.movtery.zalithlauncher.game.download.assets.platform.PlatformSearchFilter
2525
import com.movtery.zalithlauncher.game.download.assets.platform.modrinth.models.ModrinthSingleProject
2626
import com.movtery.zalithlauncher.game.download.assets.platform.modrinth.models.ModrinthVersion
27+
import com.movtery.zalithlauncher.game.download.assets.platform.modrinth.models.isPublic
2728
import com.movtery.zalithlauncher.utils.network.httpGetJson
2829
import io.ktor.client.plugins.ClientRequestException
2930
import io.ktor.http.Parameters
31+
import io.ktor.server.plugins.NotFoundException
3032
import java.io.File
3133

3234
class ModrinthSearcher(
@@ -51,9 +53,11 @@ class ModrinthSearcher(
5153
}
5254

5355
override suspend fun getProject(projectID: String): ModrinthSingleProject {
54-
return httpGetJson(
56+
val project = httpGetJson<ModrinthSingleProject>(
5557
url = "$api/project/$projectID"
5658
)
59+
if (!project.isPublic()) throw NotFoundException("The project {$projectID} is not in a publicly available state.")
60+
return project
5761
}
5862

5963
/**

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/game/download/assets/platform/modrinth/models/ModrinthSingleProject.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,4 +304,14 @@ class ModrinthSingleProject(
304304
)
305305
}
306306
}
307+
}
308+
309+
/**
310+
* @return 该项目是否公开可见
311+
*/
312+
fun ModrinthSingleProject.isPublic(): Boolean {
313+
return when (this.status) {
314+
"approved", "archived" -> true
315+
else -> false
316+
}
307317
}

0 commit comments

Comments
 (0)