Skip to content

Commit 42b2d52

Browse files
committed
Fix empty file type maps occuring when updating from 0.2.5 to 0.3.0
1 parent e91faf4 commit 42b2d52

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

core/datastore/src/main/kotlin/com/w2sv/datastore/proto/navigatorconfig/NavigatorConfigMapper.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import com.w2sv.domain.model.navigatorconfig.FileTypeConfigMap
2727
import com.w2sv.domain.model.navigatorconfig.NavigatorConfig
2828
import com.w2sv.domain.model.navigatorconfig.SourceConfig
2929
import com.w2sv.kotlinutils.map
30+
import slimber.log.i
3031

3132
internal fun NavigatorConfig.toProto(hasBeenMigrated: Boolean): NavigatorConfigProto =
3233
NavigatorConfigMapper.toProto(this, hasBeenMigrated)
@@ -46,6 +47,15 @@ private object NavigatorConfigMapper : ProtoMapper<NavigatorConfigProto, Navigat
4647
private fun NavigatorConfigProto.fileTypeConfigMap(): FileTypeConfigMap =
4748
buildMap {
4849
(extensionPresetFileTypesMap + extensionConfigurableFileTypesMap + customFileTypesMap)
50+
.ifEmpty {
51+
// This scope will be entered when a user updates from version 0.2.5 to 0.3.0, which introduces storing of file types (color, extensions),
52+
// while previously all that data was static and therefore not stored.
53+
// As previously configuration of the default values was impossible, we proceed with the defaults.
54+
// Once the user saves any new configuration of the navigator config, the proto file type maps
55+
// (extensionPresetFileTypesMap, extensionConfigurableFileTypesMap, customFileTypesMap) won't be empty anymore.
56+
i { "proto file type maps empty; using default ones" }
57+
NavigatorConfig.default.toProto(true).run { extensionPresetFileTypesMap + extensionConfigurableFileTypesMap }
58+
}
4959
.forEach { (ordinal, proto) ->
5060
put(
5161
when (proto) {

core/datastore/src/test/kotlin/com/w2sv/datastore/proto/navigatorconfig/NavigatorConfigMapperTest.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.w2sv.datastore.proto.navigatorconfig
22

3+
import com.w2sv.datastore.NavigatorConfigProto
34
import com.w2sv.domain.model.filetype.CustomFileType
45
import com.w2sv.domain.model.filetype.PresetFileType
56
import com.w2sv.domain.model.filetype.SourceType
@@ -59,6 +60,21 @@ internal class NavigatorConfigMapperTest {
5960
}
6061
assertEquals(nonDefaultConfig, nonDefaultConfig.backAndForthMapped())
6162
}
63+
64+
/**
65+
* Empty file type maps occur when updating app from 0.2.5 to 0.3.0 due to inherent navigator proto config changes.
66+
*/
67+
@Test
68+
fun `default preset file types are used when proto file type maps are empty`() {
69+
val protoConfigWithEmptyFileTypeMaps = NavigatorConfigProto.newBuilder()
70+
.mergeFrom(NavigatorConfig.default.toProto(true)) // clone from default
71+
.clearExtensionPresetFileTypes()
72+
.clearExtensionConfigurableFileTypes()
73+
.clearCustomFileTypes()
74+
.build()
75+
76+
assertEquals(NavigatorConfig.default, protoConfigWithEmptyFileTypeMaps.toExternal())
77+
}
6278
}
6379

6480
private fun NavigatorConfig.backAndForthMapped(): NavigatorConfig =

core/navigator/src/main/kotlin/com/w2sv/navigator/notifications/appnotifications/movefile/MoveFileNotificationManager.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ import com.w2sv.navigator.notifications.appnotifications.AppNotificationId
3838
import com.w2sv.navigator.notifications.appnotifications.batchmove.BatchMoveNotificationManager
3939
import com.w2sv.navigator.notifications.appnotifications.iconBitmap
4040
import dagger.hilt.android.qualifiers.ApplicationContext
41+
import java.io.IOException
42+
import javax.inject.Inject
43+
import javax.inject.Singleton
4144
import kotlinx.coroutines.CoroutineScope
4245
import kotlinx.coroutines.flow.SharingStarted
4346
import kotlinx.coroutines.flow.StateFlow
4447
import kotlinx.coroutines.flow.map
4548
import kotlinx.coroutines.flow.stateIn
4649
import slimber.log.i
47-
import java.io.IOException
48-
import javax.inject.Inject
49-
import javax.inject.Singleton
5050

5151
@Singleton
5252
internal class MoveFileNotificationManager @Inject constructor(

0 commit comments

Comments
 (0)