mirror of
https://github.com/plexusorg/Plex.git
synced 2026-06-04 05:26:55 +00:00
Better rules for caching in the updater
This commit is contained in:
@@ -26,10 +26,14 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
public class UpdateChecker
|
public class UpdateChecker
|
||||||
{
|
{
|
||||||
|
private static final long PLEX_METADATA_FAILURE_CACHE_MILLIS = 5 * 60 * 1000L;
|
||||||
|
|
||||||
private final Plex plugin;
|
private final Plex plugin;
|
||||||
private final UpdateChannel channel;
|
private final UpdateChannel channel;
|
||||||
private final UpdateMetadataClient metadataClient;
|
private final UpdateMetadataClient metadataClient;
|
||||||
private ArtifactMetadata latestPlexMetadata;
|
private ArtifactMetadata latestPlexMetadata;
|
||||||
|
private UpdateMetadataClient.MetadataException latestPlexMetadataFailure;
|
||||||
|
private long latestPlexMetadataFailureAtMillis;
|
||||||
|
|
||||||
public UpdateChecker(Plex plugin)
|
public UpdateChecker(Plex plugin)
|
||||||
{
|
{
|
||||||
@@ -115,14 +119,42 @@ public class UpdateChecker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArtifactMetadata fetchLatestPlexMetadata(boolean cached) throws UpdateMetadataClient.MetadataException
|
private synchronized ArtifactMetadata fetchLatestPlexMetadata(boolean cached) throws UpdateMetadataClient.MetadataException
|
||||||
{
|
{
|
||||||
if (!cached || latestPlexMetadata == null)
|
if (cached)
|
||||||
|
{
|
||||||
|
if (latestPlexMetadata != null)
|
||||||
|
{
|
||||||
|
return latestPlexMetadata;
|
||||||
|
}
|
||||||
|
if (latestPlexMetadataFailure != null && isPlexMetadataFailureCacheFresh())
|
||||||
|
{
|
||||||
|
throw latestPlexMetadataFailure;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
latestPlexMetadata = metadataClient.fetchPlexLatest(BuildInfo.getMinecraftVersion());
|
latestPlexMetadata = metadataClient.fetchPlexLatest(BuildInfo.getMinecraftVersion());
|
||||||
}
|
latestPlexMetadataFailure = null;
|
||||||
|
latestPlexMetadataFailureAtMillis = 0L;
|
||||||
return latestPlexMetadata;
|
return latestPlexMetadata;
|
||||||
}
|
}
|
||||||
|
catch (UpdateMetadataClient.MetadataException e)
|
||||||
|
{
|
||||||
|
if (latestPlexMetadata == null)
|
||||||
|
{
|
||||||
|
latestPlexMetadataFailure = e;
|
||||||
|
latestPlexMetadataFailureAtMillis = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isPlexMetadataFailureCacheFresh()
|
||||||
|
{
|
||||||
|
return System.currentTimeMillis() - latestPlexMetadataFailureAtMillis < PLEX_METADATA_FAILURE_CACHE_MILLIS;
|
||||||
|
}
|
||||||
|
|
||||||
private void downloadAndInstall(CommandSender sender, ArtifactMetadata metadata, File copyTo)
|
private void downloadAndInstall(CommandSender sender, ArtifactMetadata metadata, File copyTo)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user