Skip to content

Commit f33736c

Browse files
committed
fix(Frecents): replace not-null assertions with safer alternatives
1 parent f53d2e7 commit f33736c

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

plugin/Frecents/build.gradle.kts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,14 @@ afterEvaluate {
4444
}
4545
}
4646

47-
version = "1.1.7"
47+
version = "1.1.8"
4848
description = "Adds support for favorite GIFs, emojis, stickers, and recent items"
4949

5050
aliucord.changelog.set(
5151
"""
52+
# 1.1.8
53+
- Fixed errors resulting in broken app behavior
54+
5255
# 1.1.7
5356
- Switched frecents code generation to be more maintainable. Shouldn't have any noticeable affects.
5457

plugin/Frecents/src/main/kotlin/dev/zt64/aliucord/plugins/frecents/FrecencySettingsManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class FrecencySettingsManager {
5555
return frecencyUserSettingsSubject
5656
}
5757

58-
fun updateSettings(updater: (FrecencyUserSettings) -> FrecencyUserSettings) {
58+
fun updateSettings(updater: FrecencyUserSettings.() -> FrecencyUserSettings) {
5959
settings = updater(settings)
6060
}
6161

plugin/Frecents/src/main/kotlin/dev/zt64/aliucord/plugins/frecents/Frecents.kt

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,10 @@ class Frecents : Plugin() {
4949

5050
private fun toggleFavoriteGif(model: ModelGif) {
5151
val tenorGifUrl = URLDecoder.decode(model.tenorGifUrl, Charset.defaultCharset().name())
52-
val isFavorited = frecencySettings.settings.favorite_gifs!!.gifs.containsKey(tenorGifUrl)
52+
val gifs = frecencySettings.settings.favorite_gifs?.gifs.orEmpty().toMutableMap()
53+
val isFavorited = tenorGifUrl in gifs
5354

5455
frecencySettings.updateSettings {
55-
val gifs = it.favorite_gifs!!.gifs.toMutableMap()
56-
5756
if (isFavorited) {
5857
gifs.remove(tenorGifUrl)
5958
} else {
@@ -66,7 +65,7 @@ class Frecents : Plugin() {
6665
)
6766
}
6867

69-
it.copy(favorite_gifs = it.favorite_gifs.copy(gifs = gifs))
68+
copy(favorite_gifs = favorite_gifs?.copy(gifs = gifs))
7069
}
7170

7271
frecencySettings.patchSettingsAsync(
@@ -97,7 +96,7 @@ class Frecents : Plugin() {
9796

9897
frecencySettings.observeSettings().switchMap { frecents ->
9998
ScalarSynchronousObservable(
100-
frecents.favorite_emojis!!.emojis.mapNotNull {
99+
frecents.favorite_emojis?.emojis.orEmpty().mapNotNull {
101100
if (pattern.matcher(it).matches()) {
102101
Favorite.FavCustomEmoji(it)
103102
} else {
@@ -144,7 +143,7 @@ class Frecents : Plugin() {
144143
val emojiIdsMap = param.args[0] as Map<String, Emoji>
145144

146145
FrecencyCalculator.sortEmojis(
147-
frecencyMap = frecencySettings.settings.emoji_frecency!!.emojis,
146+
frecencyMap = frecencySettings.settings.emoji_frecency?.emojis.orEmpty(),
148147
emojiIdsMap = emojiIdsMap,
149148
unicodeEmojisMap = unicodeEmojisNamesMap
150149
)
@@ -162,16 +161,17 @@ class Frecents : Plugin() {
162161
}
163162

164163
frecencySettings.updateSettings {
165-
val updatedEmojis = if (favorite) {
166-
it.favorite_emojis!!.emojis + data
167-
} else {
168-
it.favorite_emojis!!.emojis.filter { emoji -> emoji != data }
169-
}
170-
171-
it.copy(
172-
favorite_emojis = it.favorite_emojis!!.copy(emojis = updatedEmojis)
164+
copy(
165+
favorite_emojis = favorite_emojis?.copy(
166+
emojis = if (favorite) {
167+
favorite_emojis.emojis + data
168+
} else {
169+
favorite_emojis.emojis.filter { it != data }
170+
}
171+
)
173172
)
174173
}
174+
175175
frecencySettings.patchSettingsAsync(
176176
onError = { _, e ->
177177
Utils.showToast("Failed to update favorite emoji: ${e.message}")
@@ -192,7 +192,7 @@ class Frecents : Plugin() {
192192
// Patch to use the frequently used stickers from the frecency user settings
193193
patcher.instead<StoreStickers>("observeFrequentlyUsedStickerIds") {
194194
frecencySettings.observeSettings().map { settings ->
195-
FrecencyCalculator.sortStickers(settings.sticker_frecency!!.stickers)
195+
FrecencyCalculator.sortStickers(settings.sticker_frecency?.stickers.orEmpty())
196196
}
197197
}
198198

@@ -302,8 +302,9 @@ class Frecents : Plugin() {
302302
) { (_, gifCategoryItem: GifCategoryItem?) ->
303303
if (gifCategoryItem !is GifCategoryItemFavorites) return@after
304304

305-
if (frecencySettings.settings.favorite_gifs!!.gifs.isNotEmpty()) {
306-
setPreviewImage(GifUtil.mqGifUrl(frecencySettings.settings.favorite_gifs!!.gifs.values.random().src))
305+
val favoriteGifs = frecencySettings.settings.favorite_gifs?.gifs.orEmpty()
306+
if (favoriteGifs.isNotEmpty()) {
307+
setPreviewImage(GifUtil.mqGifUrl(favoriteGifs.values.random().src))
307308
} else {
308309
// Clear it out, so it doesn't show the last preview
309310
setPreviewImage("")
@@ -342,7 +343,8 @@ class Frecents : Plugin() {
342343
is GifCategoryItem.Standard -> store.observeGifsForSearchQuery(item.gifCategory.categoryName)
343344
is GifCategoryItem.Trending -> store.observeTrendingCategoryGifs()
344345
is GifCategoryItemFavorites -> frecencySettings.observeSettings().map {
345-
it.favorite_gifs!!.gifs
346+
it.favorite_gifs?.gifs
347+
.orEmpty()
346348
.asSequence()
347349
.sortedByDescending { it.value.order }
348350
.map { (tenorUrl, v) ->

0 commit comments

Comments
 (0)