diff --git a/app/src/main/java/emu/skyline/MainActivity.kt b/app/src/main/java/emu/skyline/MainActivity.kt index b1f7cd76..d738c31f 100644 --- a/app/src/main/java/emu/skyline/MainActivity.kt +++ b/app/src/main/java/emu/skyline/MainActivity.kt @@ -351,5 +351,7 @@ class MainActivity : AppCompatActivity() { setAppListDecoration() adapter.notifyItemRangeChanged(0, adapter.currentItems.size) } + + viewModel.checkRomHash(Uri.parse(appSettings.searchLocation), EmulationSettings.global.systemLanguage) } } diff --git a/app/src/main/java/emu/skyline/MainViewModel.kt b/app/src/main/java/emu/skyline/MainViewModel.kt index cef46ca1..7d0f69f5 100644 --- a/app/src/main/java/emu/skyline/MainViewModel.kt +++ b/app/src/main/java/emu/skyline/MainViewModel.kt @@ -11,12 +11,12 @@ import emu.skyline.loader.AppEntry import emu.skyline.loader.RomFormat import emu.skyline.utils.fromFile import emu.skyline.utils.toFile +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.io.File import java.util.* import javax.inject.Inject -import kotlin.collections.HashMap sealed class MainState { object Loading : MainState() @@ -73,4 +73,19 @@ class MainViewModel @Inject constructor(@ApplicationContext context : Context, p } } } + + /** + * This checks if the roms have changed since the last time they were loaded and if so it reloads them + */ + fun checkRomHash(searchLocation : Uri, systemLanguage : Int) { + if(state !is MainState.Loaded) return + CoroutineScope(Dispatchers.IO).launch { + val currentHash = (state as MainState.Loaded).items.hashCode() + val romElements = romProvider.loadRoms(searchLocation, systemLanguage) + val newHash = romElements.hashCode() + if (newHash != currentHash) { + state = MainState.Loaded(romElements) + } + } + } }