From 3708ab9ed5f6f1be13fc8081723990201c79eac5 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 1 May 2022 18:00:02 +0200 Subject: [PATCH] [YouTube] Refactor YoutubeDashManifestCreator - Remove all of the methods used to access caches and replace them with three caches getters - Rename caches to shorter and more meaningful names - Remove redundant @throws tags that just say "if this method fails to do what it should do", which is obvious --- .../youtube/YoutubeDashManifestCreator.java | 411 ++---------------- 1 file changed, 29 insertions(+), 382 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDashManifestCreator.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDashManifestCreator.java index 8929185c1..22e8f57ba 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDashManifestCreator.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeDashManifestCreator.java @@ -99,20 +99,20 @@ public final class YoutubeDashManifestCreator { /** * Cache of DASH manifests generated for OTF streams. */ - private static final ManifestCreatorCache GENERATED_OTF_MANIFESTS = - new ManifestCreatorCache<>(); + private static final ManifestCreatorCache OTF_CACHE + = new ManifestCreatorCache<>(); /** * Cache of DASH manifests generated for post-live-DVR streams. */ - private static final ManifestCreatorCache - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS = new ManifestCreatorCache<>(); + private static final ManifestCreatorCache POST_LIVE_DVR_CACHE + = new ManifestCreatorCache<>(); /** * Cache of DASH manifests generated for progressive streams. */ - private static final ManifestCreatorCache - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS = new ManifestCreatorCache<>(); + private static final ManifestCreatorCache PROGRESSIVE_CACHE + = new ManifestCreatorCache<>(); /** * Enum of streaming format types used by YouTube in their streams. @@ -238,17 +238,14 @@ public final class YoutubeDashManifestCreator { * @param durationSecondsFallback the duration of the video, which will be used if the duration * could not be extracted from the first sequence * @return the manifest generated into a string - * @throws YoutubeDashManifestCreationException if something goes wrong when trying to generate - * the DASH manifest */ @Nonnull public static String fromOtfStreamingUrl( @Nonnull final String otfBaseStreamingUrl, @Nonnull final ItagItem itagItem, final long durationSecondsFallback) throws YoutubeDashManifestCreationException { - if (GENERATED_OTF_MANIFESTS.containsKey(otfBaseStreamingUrl)) { - return Objects.requireNonNull(GENERATED_OTF_MANIFESTS.get(otfBaseStreamingUrl)) - .getSecond(); + if (OTF_CACHE.containsKey(otfBaseStreamingUrl)) { + return Objects.requireNonNull(OTF_CACHE.get(otfBaseStreamingUrl)).getSecond(); } String realOtfBaseStreamingUrl = otfBaseStreamingUrl; @@ -305,7 +302,7 @@ public final class YoutubeDashManifestCreator { SEGMENTS_DURATION.clear(); DURATION_REPETITIONS.clear(); - return buildAndCacheResult(otfBaseStreamingUrl, document, GENERATED_OTF_MANIFESTS); + return buildAndCacheResult(otfBaseStreamingUrl, document, OTF_CACHE); } /** @@ -372,8 +369,6 @@ public final class YoutubeDashManifestCreator { * if the duration could not be extracted from the first * sequence * @return the manifest generated into a string - * @throws YoutubeDashManifestCreationException if something goes wrong when trying to generate - * the DASH manifest */ @Nonnull public static String fromPostLiveStreamDvrStreamingUrl( @@ -381,9 +376,9 @@ public final class YoutubeDashManifestCreator { @Nonnull final ItagItem itagItem, final int targetDurationSec, final long durationSecondsFallback) throws YoutubeDashManifestCreationException { - if (GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.containsKey(postLiveStreamDvrStreamingUrl)) { - return Objects.requireNonNull(GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.get( - postLiveStreamDvrStreamingUrl)).getSecond(); + if (POST_LIVE_DVR_CACHE.containsKey(postLiveStreamDvrStreamingUrl)) { + return Objects.requireNonNull(POST_LIVE_DVR_CACHE.get(postLiveStreamDvrStreamingUrl)) + .getSecond(); } String realPostLiveStreamDvrStreamingUrl = postLiveStreamDvrStreamingUrl; final String streamDuration; @@ -442,7 +437,7 @@ public final class YoutubeDashManifestCreator { generateSegmentElementForPostLiveDvrStreams(document, targetDurationSec, segmentCount); return buildAndCacheResult(postLiveStreamDvrStreamingUrl, document, - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS); + POST_LIVE_DVR_CACHE); } /** @@ -501,17 +496,15 @@ public final class YoutubeDashManifestCreator { * if the duration could not be extracted from the first * sequence * @return the manifest generated into a string - * @throws YoutubeDashManifestCreationException if something goes wrong when trying to generate - * the DASH manifest */ @Nonnull public static String fromProgressiveStreamingUrl( @Nonnull final String progressiveStreamingBaseUrl, @Nonnull final ItagItem itagItem, final long durationSecondsFallback) throws YoutubeDashManifestCreationException { - if (GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.containsKey(progressiveStreamingBaseUrl)) { - return Objects.requireNonNull(GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.get( - progressiveStreamingBaseUrl)).getSecond(); + if (PROGRESSIVE_CACHE.containsKey(progressiveStreamingBaseUrl)) { + return Objects.requireNonNull(PROGRESSIVE_CACHE.get(progressiveStreamingBaseUrl)) + .getSecond(); } if (durationSecondsFallback <= 0) { @@ -534,7 +527,7 @@ public final class YoutubeDashManifestCreator { generateInitializationElement(document, itagItem); return buildAndCacheResult(progressiveStreamingBaseUrl, document, - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS); + PROGRESSIVE_CACHE); } /** @@ -555,9 +548,7 @@ public final class YoutubeDashManifestCreator { * @param itagItem the {@link ItagItem} of stream, which cannot be null * @param deliveryType the {@link DeliveryType} of the stream * @return the "initialization" response, without redirections on the network on which the - * request(s) is/are made - * @throws YoutubeDashManifestCreationException if something goes wrong when fetching the - * "initialization" response and/or its redirects + * request(s) is/are made */ @SuppressWarnings("checkstyle:FinalParameters") @Nonnull @@ -647,8 +638,6 @@ public final class YoutubeDashManifestCreator { * @param responseMimeTypeExpected the response mime type expected from Google video servers * @param deliveryType the {@link DeliveryType} of the stream * @return the response of the stream which should have no redirections - * @throws YoutubeDashManifestCreationException if something goes wrong when trying to get the - * response without any redirection */ @SuppressWarnings("checkstyle:FinalParameters") @Nonnull @@ -738,8 +727,6 @@ public final class YoutubeDashManifestCreator { * * @param segmentDuration the string array which contains all the sequences extracted with the * regular expression - * @throws YoutubeDashManifestCreationException if something goes wrong when trying to collect - * the segments of the OTF stream */ private static void collectSegmentsData(@Nonnull final String[] segmentDuration) throws YoutubeDashManifestCreationException { @@ -774,8 +761,6 @@ public final class YoutubeDashManifestCreator { * @param segmentDuration the segment duration object extracted from the initialization * sequence of the stream * @return the duration of the OTF stream - * @throws YoutubeDashManifestCreationException if something goes wrong when parsing the - * {@code segmentDuration} object */ private static int getStreamDuration(@Nonnull final String[] segmentDuration) throws YoutubeDashManifestCreationException { @@ -832,9 +817,6 @@ public final class YoutubeDashManifestCreator { * @param durationSecondsFallback the duration in seconds, extracted from player response, used * as a fallback if the duration could not be determined * @return a {@link Document} object which contains a {@code } element - * @throws YoutubeDashManifestCreationException if something goes wrong when generating/ - * appending the {@link Document object} or the - * {@code } element */ private static Document generateDocumentAndMpdElement(@Nonnull final String[] segmentDuration, final DeliveryType deliveryType, @@ -917,9 +899,6 @@ public final class YoutubeDashManifestCreator { * * @param document the {@link Document} on which the the {@code } element will be * appended - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element to the - * document */ private static void generatePeriodElement(@Nonnull final Document document) throws YoutubeDashManifestCreationException { @@ -945,9 +924,6 @@ public final class YoutubeDashManifestCreator { * @param document the {@link Document} on which the the {@code } element will be * appended * @param itagItem the {@link ItagItem} corresponding to the stream, which cannot be null - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element to the - * document */ private static void generateAdaptationSetElement(@Nonnull final Document document, @Nonnull final ItagItem itagItem) @@ -1005,9 +981,6 @@ public final class YoutubeDashManifestCreator { * * @param document the {@link Document} on which the the {@code } element will be * appended - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element to the - * document */ private static void generateRoleElement(@Nonnull final Document document) throws YoutubeDashManifestCreationException { @@ -1044,9 +1017,6 @@ public final class YoutubeDashManifestCreator { * @param document the {@link Document} on which the the {@code } element will * be appended * @param itagItem the {@link ItagItem} to use, which cannot be null - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element - * to the document */ private static void generateRepresentationElement(@Nonnull final Document document, @Nonnull final ItagItem itagItem) @@ -1167,10 +1137,6 @@ public final class YoutubeDashManifestCreator { * @param document the {@link Document} on which the {@code } * element will be appended * @param itagItem the {@link ItagItem} to use, which cannot be null - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the - * {@code } element - * to the document */ private static void generateAudioChannelConfigurationElement( @Nonnull final Document document, @@ -1221,9 +1187,6 @@ public final class YoutubeDashManifestCreator { * be appended * @param baseUrl the base URL of the stream, which cannot be null and will be set as the * content of the {@code } element - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element - * to the document */ private static void generateBaseUrlElement(@Nonnull final Document document, @Nonnull final String baseUrl) @@ -1266,9 +1229,6 @@ public final class YoutubeDashManifestCreator { * @param document the {@link Document} on which the {@code } element will * be appended * @param itagItem the {@link ItagItem} to use, which cannot be null - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element - * to the document */ private static void generateSegmentBaseElement(@Nonnull final Document document, @Nonnull final ItagItem itagItem) @@ -1330,9 +1290,6 @@ public final class YoutubeDashManifestCreator { * @param document the {@link Document} on which the {@code } element will * be appended * @param itagItem the {@link ItagItem} to use, which cannot be null - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element - * to the document */ private static void generateInitializationElement(@Nonnull final Document document, @Nonnull final ItagItem itagItem) @@ -1399,9 +1356,6 @@ public final class YoutubeDashManifestCreator { * be appended * @param baseUrl the base URL of the OTF/post-live-DVR stream * @param deliveryType the stream {@link DeliveryType delivery type} - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element - * to the document */ private static void generateSegmentTemplateElement(@Nonnull final Document document, @Nonnull final String baseUrl, @@ -1454,9 +1408,6 @@ public final class YoutubeDashManifestCreator { * * @param document the {@link Document} on which the the {@code } element will * be appended - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element - * to the document */ private static void generateSegmentTimelineElement(@Nonnull final Document document) throws YoutubeDashManifestCreationException { @@ -1501,9 +1452,6 @@ public final class YoutubeDashManifestCreator { *

* * @param document the {@link Document} on which the the {@code } elements will be appended - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } elements to the - * document */ private static void generateSegmentElementsForOtfStreams(@Nonnull final Document document) throws YoutubeDashManifestCreationException { @@ -1556,9 +1504,6 @@ public final class YoutubeDashManifestCreator { * stream * @param segmentCount the number of segments, extracted by the main method which * generates manifests of post DVR livestreams - * @throws YoutubeDashManifestCreationException if something goes wrong when generating or - * appending the {@code } element to the - * document */ private static void generateSegmentElementForPostLiveDvrStreams( @Nonnull final Document document, @@ -1591,13 +1536,9 @@ public final class YoutubeDashManifestCreator { * @param originalBaseStreamingUrl the original base URL of the stream * @param document the document to be converted * @param manifestCreatorCache the {@link ManifestCreatorCache} on which store the - * string generated (which is either - * {@link #GENERATED_OTF_MANIFESTS}, - * {@link #GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS} or - * {@link #GENERATED_PROGRESSIVE_STREAMS_MANIFESTS}) + * string generated (use either {@link #OTF_CACHE}, + * {@link #POST_LIVE_DVR_CACHE} or {@link #PROGRESSIVE_CACHE}) * @return the DASH manifest {@link Document document} converted to a string - * @throws YoutubeDashManifestCreationException if something goes wrong when converting the - * {@link Document document} */ private static String buildAndCacheResult( @Nonnull final String originalBaseStreamingUrl, @@ -1665,317 +1606,23 @@ public final class YoutubeDashManifestCreator { } /** - * @return the number of cached OTF streams manifests + * @return the cache of DASH manifests generated for OTF streams */ - public static int getOtfCachedManifestsSize() { - return GENERATED_OTF_MANIFESTS.size(); + public static ManifestCreatorCache getOtfManifestsCache() { + return OTF_CACHE; } /** - * @return the number of cached post-live-DVR streams manifests + * @return the cache of DASH manifests generated for post-live-DVR streams */ - public static int getPostLiveDvrStreamsCachedManifestsSize() { - return GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.size(); + public static ManifestCreatorCache getPostLiveDvrManifestsCache() { + return POST_LIVE_DVR_CACHE; } /** - * @return the number of cached progressive manifests + * @return the cache of DASH manifests generated for progressive streams */ - public static int getProgressiveStreamsCachedManifestsSize() { - return GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.size(); - } - - /** - * @return the number of cached OTF, post-live-DVR streams and progressive manifests. - */ - public static int getSizeOfManifestsCaches() { - return GENERATED_OTF_MANIFESTS.size() - + GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.size() - + GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.size(); - } - - /** - * @return the clear factor of OTF streams manifests cache. - */ - public static double getOtfStreamsClearFactor() { - return GENERATED_OTF_MANIFESTS.getClearFactor(); - } - - /** - * @return the clear factor of post-live-DVR streams manifests cache. - */ - public static double getPostLiveDvrStreamsClearFactor() { - return GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.getClearFactor(); - } - - /** - * @return the clear factor of progressive streams manifests cache. - */ - public static double getProgressiveStreamsClearFactor() { - return GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.getClearFactor(); - } - - /** - * @param otfStreamsClearFactor the clear factor of OTF streams manifests cache. - */ - public static void setOtfStreamsClearFactor(final double otfStreamsClearFactor) { - GENERATED_OTF_MANIFESTS.setClearFactor(otfStreamsClearFactor); - } - - /** - * @param postLiveDvrStreamsClearFactor the clear factor to set for post-live-DVR streams - * manifests cache - */ - public static void setPostLiveDvrStreamsClearFactor( - final double postLiveDvrStreamsClearFactor) { - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.setClearFactor(postLiveDvrStreamsClearFactor); - } - - /** - * @param progressiveStreamsClearFactor the clear factor to set for progressive streams - * manifests cache - */ - public static void setProgressiveStreamsClearFactor( - final double progressiveStreamsClearFactor) { - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.setClearFactor(progressiveStreamsClearFactor); - } - - /** - * @param cachesClearFactor the clear factor to set for OTF, post-live-DVR and progressive - * streams manifests caches - */ - public static void setCachesClearFactor(final double cachesClearFactor) { - GENERATED_OTF_MANIFESTS.setClearFactor(cachesClearFactor); - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.setClearFactor(cachesClearFactor); - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.setClearFactor(cachesClearFactor); - } - - /** - * Reset the clear factor of OTF streams cache to its - * {@link ManifestCreatorCache#DEFAULT_CLEAR_FACTOR default value}. - */ - public static void resetOtfStreamsClearFactor() { - GENERATED_OTF_MANIFESTS.resetClearFactor(); - } - - /** - * Reset the clear factor of post-live-DVR streams cache to its - * {@link ManifestCreatorCache#DEFAULT_CLEAR_FACTOR default value}. - */ - public static void resetPostLiveDvrStreamsClearFactor() { - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.resetClearFactor(); - } - - /** - * Reset the clear factor of progressive streams cache to its - * {@link ManifestCreatorCache#DEFAULT_CLEAR_FACTOR default value}. - */ - public static void resetProgressiveStreamsClearFactor() { - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.resetClearFactor(); - } - - /** - * Reset the clear factor of OTF, post-live-DVR and progressive streams caches to their - * {@link ManifestCreatorCache#DEFAULT_CLEAR_FACTOR default value}. - */ - public static void resetCachesClearFactor() { - GENERATED_OTF_MANIFESTS.resetClearFactor(); - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.resetClearFactor(); - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.resetClearFactor(); - } - - /** - * Set the limit of cached OTF streams. - * - *

- * When the cache limit size is reached, oldest manifests will be removed. - *

- * - *

- * If the new cache size set is less than the number of current cached manifests, oldest - * manifests will be also removed. - *

- * - *

- * Note that the limit must be more than 0 or an {@link IllegalArgumentException} will be - * thrown. - *

- * - * @param otfStreamsCacheLimit the maximum number of OTF streams in the corresponding cache. - */ - public static void setOtfStreamsMaximumSize(final int otfStreamsCacheLimit) { - GENERATED_OTF_MANIFESTS.setMaximumSize(otfStreamsCacheLimit); - } - - /** - * Set the limit of cached post-live-DVR streams. - * - *

- * When the cache limit size is reached, oldest manifests will be removed. - *

- * - *

- * If the new cache size set is less than the number of current cached manifests, oldest - * manifests will be also removed. - *

- * - *

- * Note that the limit must be more than 0 or an {@link IllegalArgumentException} will be - * thrown. - *

- * - * @param postLiveDvrStreamsCacheLimit the maximum number of post-live-DVR streams in the - * corresponding cache. - */ - public static void setPostLiveDvrStreamsMaximumSize(final int postLiveDvrStreamsCacheLimit) { - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.setMaximumSize(postLiveDvrStreamsCacheLimit); - } - - /** - * Set the limit of cached progressive streams, if needed. - * - *

- * When the cache limit size is reached, oldest manifests will be removed. - *

- * - *

- * If the new cache size set is less than the number of current cached manifests, oldest - * manifests will be also removed. - *

- * - *

- * Note that the limit must be more than 0 or an {@link IllegalArgumentException} will be - * thrown. - *

- * - * @param progressiveCacheLimit the maximum number of progressive streams in the corresponding - * cache. - */ - public static void setProgressiveStreamsMaximumSize(final int progressiveCacheLimit) { - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.setMaximumSize(progressiveCacheLimit); - } - - /** - * Set the limit of cached OTF manifests, cached post-live-DVR manifests and cached progressive - * manifests. - * - *

- * When the caches limit size are reached, oldest manifests will be removed from their - * respective cache. - *

- * - *

- * For each cache, if its new size set is less than the number of current cached manifests, - * oldest manifests will be also removed. - *

- * - *

- * Note that the limit must be more than 0 or an {@link IllegalArgumentException} will be - * thrown. - *

- * - * @param cachesLimit the maximum size of OTF, post-live-DVR and progressive caches - */ - public static void setManifestsCachesMaximumSize(final int cachesLimit) { - GENERATED_OTF_MANIFESTS.setMaximumSize(cachesLimit); - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.setMaximumSize(cachesLimit); - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.setMaximumSize(cachesLimit); - } - - /** - * Clear cached OTF manifests. - * - *

- * The limit of this cache size set, if there is one, will be not unset. - *

- */ - public static void clearOtfCachedManifests() { - GENERATED_OTF_MANIFESTS.clear(); - } - - /** - * Clear cached post-live-DVR streams manifests. - * - *

- * The limit of this cache size set, if there is one, will be not unset. - *

- */ - public static void clearPostLiveDvrStreamsCachedManifests() { - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.clear(); - } - - /** - * Clear cached progressive streams manifests. - * - *

- * The limit of this cache size set, if there is one, will be not unset. - *

- */ - public static void clearProgressiveCachedManifests() { - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.clear(); - } - - /** - * Clear cached OTF manifests, cached post-live-DVR streams manifests and cached progressive - * manifests in their respective caches. - * - *

- * The limit of the caches size set, if any, will be not unset. - *

- */ - public static void clearManifestsInCaches() { - GENERATED_OTF_MANIFESTS.clear(); - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.clear(); - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.clear(); - } - - /** - * Reset OTF manifests cache. - * - *

- * All cached manifests will be removed and the clear factor and the maximum size will be set - * to their default values. - *

- */ - public static void resetOtfManifestsCache() { - GENERATED_OTF_MANIFESTS.reset(); - } - - /** - * Reset post-live-DVR manifests cache. - * - *

- * All cached manifests will be removed and the clear factor and the maximum size will be set - * to their default values. - *

- */ - public static void resetPostLiveDvrManifestsCache() { - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.reset(); - } - - /** - * Reset progressive manifests cache. - * - *

- * All cached manifests will be removed and the clear factor and the maximum size will be set - * to their default values. - *

- */ - public static void resetProgressiveManifestsCache() { - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.reset(); - } - - /** - * Reset OTF, post-live-DVR and progressive manifests caches. - * - *

- * For each cache, all cached manifests will be removed and the clear factor and the maximum - * size will be set to their default values. - *

- */ - public static void resetCaches() { - GENERATED_OTF_MANIFESTS.reset(); - GENERATED_POST_LIVE_DVR_STREAMS_MANIFESTS.reset(); - GENERATED_PROGRESSIVE_STREAMS_MANIFESTS.reset(); + public static ManifestCreatorCache getProgressiveManifestsCache() { + return PROGRESSIVE_CACHE; } }