mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-29 03:32:54 +00:00
Merge pull request #9592 from JosJuice/android-launch-rescan
Android: Fix rescanning on first app launch after cache clear
This commit is contained in:
commit
210ddcf5ee
@ -42,6 +42,7 @@ public final class GameFileCacheService extends IntentService
|
||||
private static final AtomicReference<GameFile[]> gameFiles =
|
||||
new AtomicReference<>(new GameFile[]{});
|
||||
private static final AtomicInteger unhandledIntents = new AtomicInteger(0);
|
||||
private static final AtomicInteger unhandledRescanIntents = new AtomicInteger(0);
|
||||
|
||||
public GameFileCacheService()
|
||||
{
|
||||
@ -105,11 +106,22 @@ public final class GameFileCacheService extends IntentService
|
||||
return new String[]{gameFile.getPath(), secondFile.getPath()};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if in the process of either loading the cache or rescanning.
|
||||
*/
|
||||
public static boolean isLoading()
|
||||
{
|
||||
return unhandledIntents.get() != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if in the process of rescanning.
|
||||
*/
|
||||
public static boolean isRescanning()
|
||||
{
|
||||
return unhandledRescanIntents.get() != 0;
|
||||
}
|
||||
|
||||
private static void startService(Context context, String action)
|
||||
{
|
||||
Intent intent = new Intent(context, GameFileCacheService.class);
|
||||
@ -137,6 +149,7 @@ public final class GameFileCacheService extends IntentService
|
||||
public static void startRescan(Context context)
|
||||
{
|
||||
unhandledIntents.getAndIncrement();
|
||||
unhandledRescanIntents.getAndIncrement();
|
||||
|
||||
new AfterDirectoryInitializationRunner().run(context, false,
|
||||
() -> startService(context, ACTION_RESCAN));
|
||||
@ -173,29 +186,34 @@ public final class GameFileCacheService extends IntentService
|
||||
}
|
||||
|
||||
// Rescan the file system and update the game list cache with the results
|
||||
if (ACTION_RESCAN.equals(intent.getAction()) && gameFileCache != null)
|
||||
if (ACTION_RESCAN.equals(intent.getAction()))
|
||||
{
|
||||
synchronized (gameFileCache)
|
||||
if (gameFileCache != null)
|
||||
{
|
||||
boolean changed = gameFileCache.update();
|
||||
if (changed)
|
||||
synchronized (gameFileCache)
|
||||
{
|
||||
updateGameFileArray();
|
||||
sendBroadcast(CACHE_UPDATED);
|
||||
}
|
||||
boolean changed = gameFileCache.update();
|
||||
if (changed)
|
||||
{
|
||||
updateGameFileArray();
|
||||
sendBroadcast(CACHE_UPDATED);
|
||||
}
|
||||
|
||||
boolean additionalMetadataChanged = gameFileCache.updateAdditionalMetadata();
|
||||
if (additionalMetadataChanged)
|
||||
{
|
||||
updateGameFileArray();
|
||||
sendBroadcast(CACHE_UPDATED);
|
||||
}
|
||||
boolean additionalMetadataChanged = gameFileCache.updateAdditionalMetadata();
|
||||
if (additionalMetadataChanged)
|
||||
{
|
||||
updateGameFileArray();
|
||||
sendBroadcast(CACHE_UPDATED);
|
||||
}
|
||||
|
||||
if (changed || additionalMetadataChanged)
|
||||
{
|
||||
gameFileCache.save();
|
||||
if (changed || additionalMetadataChanged)
|
||||
{
|
||||
gameFileCache.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unhandledRescanIntents.decrementAndGet();
|
||||
}
|
||||
|
||||
int intentsLeft = unhandledIntents.decrementAndGet();
|
||||
|
@ -82,8 +82,6 @@ public final class MainActivity extends AppCompatActivity
|
||||
{
|
||||
super.onResume();
|
||||
|
||||
mPresenter.onResume();
|
||||
|
||||
if (DirectoryInitialization.shouldStart(this))
|
||||
{
|
||||
DirectoryInitialization.start(this);
|
||||
@ -91,6 +89,8 @@ public final class MainActivity extends AppCompatActivity
|
||||
.run(this, false, this::setPlatformTabsAndStartGameFileCacheService);
|
||||
}
|
||||
|
||||
mPresenter.onResume();
|
||||
|
||||
// In case the user changed a setting that affects how games are displayed,
|
||||
// such as system language, cover downloading...
|
||||
forEachPlatformGamesView(PlatformGamesView::refetchMetadata);
|
||||
|
@ -132,7 +132,7 @@ public final class MainPresenter
|
||||
mDirToAdd = null;
|
||||
}
|
||||
|
||||
if (sShouldRescanLibrary && !GameFileCacheService.isLoading())
|
||||
if (sShouldRescanLibrary && !GameFileCacheService.isRescanning())
|
||||
{
|
||||
new AfterDirectoryInitializationRunner().run(mContext, false, () ->
|
||||
{
|
||||
|
@ -71,14 +71,14 @@ public final class TvMainActivity extends FragmentActivity
|
||||
{
|
||||
super.onResume();
|
||||
|
||||
mPresenter.onResume();
|
||||
|
||||
if (DirectoryInitialization.shouldStart(this))
|
||||
{
|
||||
DirectoryInitialization.start(this);
|
||||
GameFileCacheService.startLoad(this);
|
||||
}
|
||||
|
||||
mPresenter.onResume();
|
||||
|
||||
// In case the user changed a setting that affects how games are displayed,
|
||||
// such as system language, cover downloading...
|
||||
refetchMetadata();
|
||||
|
Loading…
x
Reference in New Issue
Block a user