Skip to content

Commit 32c1b27

Browse files
committed
Recognize content disposition now
1 parent 808379c commit 32c1b27

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,12 @@ configurations {
150150
dependencies {
151151
// Modified by TeaCon
152152
jarJar implementation('org.teacon:urlpattern:1.0.1')
153+
jarJar implementation('org.teacon:content-disposition:1.0.0')
153154
jarJar implementation('io.github.darkxanter:webp-imageio:0.3.2')
154155
jarJar implementation('org.apache.httpcomponents:httpclient-cache:4.5.13')
155156
// Modified by TeaCon
156157
additionalRuntimeClasspath 'org.teacon:urlpattern:1.0.1'
158+
additionalRuntimeClasspath 'org.teacon:content-disposition:1.0.0'
157159
additionalRuntimeClasspath 'io.github.darkxanter:webp-imageio:0.3.2'
158160
additionalRuntimeClasspath 'org.apache.httpcomponents:httpclient-cache:4.5.13'
159161
}

src/main/java/org/teacon/slides/cache/CacheStorage.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.apache.logging.log4j.Logger;
2727
import org.apache.logging.log4j.Marker;
2828
import org.apache.logging.log4j.MarkerManager;
29-
import org.teacon.slides.SlideShow;
3029

3130
import javax.annotation.Nullable;
3231
import javax.annotation.ParametersAreNonnullByDefault;
@@ -50,7 +49,7 @@
5049
@ParametersAreNonnullByDefault
5150
final class CacheStorage implements HttpCacheStorage {
5251

53-
private static final Logger LOGGER = LogManager.getLogger(SlideShow.class);
52+
private static final Logger LOGGER = LogManager.getLogger("SlideShow");
5453
private static final Marker MARKER = MarkerManager.getMarker("Downloader");
5554

5655
private static final Gson GSON = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();

src/main/java/org/teacon/slides/cache/ImageCache.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package org.teacon.slides.cache;
22

3+
import com.google.common.net.HttpHeaders;
34
import net.minecraft.FieldsAreNonnullByDefault;
45
import net.minecraft.MethodsReturnNonnullByDefault;
56
import org.apache.commons.io.IOUtils;
67
import org.apache.http.Header;
7-
import org.apache.http.HttpHeaders;
88
import org.apache.http.client.ClientProtocolException;
99
import org.apache.http.client.cache.HttpCacheContext;
1010
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -17,7 +17,7 @@
1717
import org.apache.logging.log4j.Logger;
1818
import org.apache.logging.log4j.Marker;
1919
import org.apache.logging.log4j.MarkerManager;
20-
import org.teacon.slides.SlideShow;
20+
import org.teacon.content_disposition.ContentDisposition;
2121

2222
import javax.annotation.Nonnull;
2323
import javax.annotation.Nullable;
@@ -29,6 +29,7 @@
2929
import java.nio.file.Path;
3030
import java.nio.file.Paths;
3131
import java.util.Map;
32+
import java.util.Optional;
3233
import java.util.concurrent.CompletableFuture;
3334
import java.util.concurrent.CompletionException;
3435

@@ -37,7 +38,7 @@
3738
@ParametersAreNonnullByDefault
3839
public final class ImageCache {
3940

40-
private static final Logger LOGGER = LogManager.getLogger(SlideShow.class);
41+
private static final Logger LOGGER = LogManager.getLogger("SlideShow");
4142
private static final Marker MARKER = MarkerManager.getMarker("Cache");
4243

4344
private static final Path LOCAL_CACHE_PATH = Paths.get("slideshow");
@@ -85,9 +86,18 @@ public CompletableFuture<Map.Entry<String, byte[]>> getResource(@Nonnull URI loc
8586
final HttpCacheContext context = HttpCacheContext.create();
8687
try (CloseableHttpResponse response = createResponse(location, context, online)) {
8788
try {
89+
Optional<ContentDisposition> dispositionOptional;
90+
try {
91+
dispositionOptional = Optional.ofNullable(response
92+
.getFirstHeader(HttpHeaders.CONTENT_DISPOSITION))
93+
.map(Header::getValue).map(ContentDisposition::parse);
94+
} catch (IllegalArgumentException e) {
95+
dispositionOptional = Optional.empty();
96+
}
8897
ContentType type = ContentType.getLenient(response.getEntity());
8998
byte[] bytes = IOUtils.toByteArray(response.getEntity().getContent());
90-
return Map.entry(FilenameAllocation.allocateHttpRespName(location, bytes, type), bytes);
99+
return Map.entry(dispositionOptional.flatMap(ContentDisposition::getFilename)
100+
.orElseGet(() -> FilenameAllocation.allocateHttpRespName(location, bytes, type)), bytes);
91101
} catch (IOException e) {
92102
if (online) {
93103
LOGGER.warn(MARKER, "Failed to read bytes from remote source.", e);

0 commit comments

Comments
 (0)