mirror of
https://github.com/Maschell/JNUSLib.git
synced 2024-11-18 05:59:20 +01:00
Added optional parameter to limit the size of a input stream for content
This commit is contained in:
parent
ac1d08645d
commit
dd8f7bcb5f
@ -20,6 +20,7 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.mas.wiiu.jnus.NUSTitle;
|
import de.mas.wiiu.jnus.NUSTitle;
|
||||||
import de.mas.wiiu.jnus.Settings;
|
import de.mas.wiiu.jnus.Settings;
|
||||||
@ -155,7 +156,7 @@ public abstract class NUSDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getChunkFromContent(Content content, long offset, int size) throws IOException {
|
public byte[] getChunkFromContent(Content content, long offset, int size) throws IOException {
|
||||||
return StreamUtils.getBytesFromStream(getInputStreamFromContent(content, offset), size);
|
return StreamUtils.getBytesFromStream(getInputStreamFromContent(content, offset, Optional.of((long)size)), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -165,7 +166,11 @@ public abstract class NUSDataProvider {
|
|||||||
* @return
|
* @return
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public abstract InputStream getInputStreamFromContent(Content content, long offset) throws IOException;
|
public abstract InputStream getInputStreamFromContent(Content content, long offset, Optional<Long> size) throws IOException;
|
||||||
|
|
||||||
|
public InputStream getInputStreamFromContent(Content content, long offset) throws IOException {
|
||||||
|
return getInputStreamFromContent(content, offset, Optional.empty());
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: JavaDocs
|
// TODO: JavaDocs
|
||||||
public abstract byte[] getContentH3Hash(Content content) throws IOException;
|
public abstract byte[] getContentH3Hash(Content content) throws IOException;
|
||||||
|
@ -22,6 +22,7 @@ import java.io.FileNotFoundException;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.mas.wiiu.jnus.NUSTitle;
|
import de.mas.wiiu.jnus.NUSTitle;
|
||||||
import de.mas.wiiu.jnus.Settings;
|
import de.mas.wiiu.jnus.Settings;
|
||||||
@ -45,7 +46,7 @@ public final class NUSDataProviderLocal extends NUSDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getInputStreamFromContent(Content content, long offset) throws IOException {
|
public InputStream getInputStreamFromContent(Content content, long offset, Optional<Long> size) throws IOException {
|
||||||
File filepath = FileUtils.getFileIgnoringFilenameCases(getLocalPath(), content.getFilename());
|
File filepath = FileUtils.getFileIgnoringFilenameCases(getLocalPath(), content.getFilename());
|
||||||
if (filepath == null || !filepath.exists()) {
|
if (filepath == null || !filepath.exists()) {
|
||||||
String errormsg = "Couldn't open \"" + getLocalPath() + File.separator + content.getFilename() + "\", file does not exist";
|
String errormsg = "Couldn't open \"" + getLocalPath() + File.separator + content.getFilename() + "\", file does not exist";
|
||||||
|
@ -19,6 +19,7 @@ package de.mas.wiiu.jnus.implementations;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.mas.wiiu.jnus.NUSTitle;
|
import de.mas.wiiu.jnus.NUSTitle;
|
||||||
import de.mas.wiiu.jnus.Settings;
|
import de.mas.wiiu.jnus.Settings;
|
||||||
@ -39,9 +40,9 @@ public class NUSDataProviderRemote extends NUSDataProvider implements Paralleliz
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getInputStreamFromContent(Content content, long fileOffsetBlock) throws IOException {
|
public InputStream getInputStreamFromContent(Content content, long fileOffsetBlock, Optional<Long> size) throws IOException {
|
||||||
NUSDownloadService downloadService = NUSDownloadService.getDefaultInstance();
|
NUSDownloadService downloadService = NUSDownloadService.getDefaultInstance();
|
||||||
return downloadService.getInputStreamForURL(getRemoteURL(content), fileOffsetBlock);
|
return downloadService.getInputStreamForURL(getRemoteURL(content), fileOffsetBlock, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getRemoteURL(Content content) {
|
private String getRemoteURL(Content content) {
|
||||||
|
@ -18,6 +18,7 @@ package de.mas.wiiu.jnus.implementations;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.mas.wiiu.jnus.NUSTitle;
|
import de.mas.wiiu.jnus.NUSTitle;
|
||||||
import de.mas.wiiu.jnus.Settings;
|
import de.mas.wiiu.jnus.Settings;
|
||||||
@ -61,10 +62,14 @@ public class NUSDataProviderWUD extends NUSDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getInputStreamFromContent(Content content, long fileOffsetBlock) throws IOException {
|
public InputStream getInputStreamFromContent(Content content, long fileOffsetBlock, Optional<Long> size) throws IOException {
|
||||||
WUDDiscReader discReader = getDiscReader();
|
WUDDiscReader discReader = getDiscReader();
|
||||||
long offset = getOffsetInWUD(content) + fileOffsetBlock;
|
long offset = getOffsetInWUD(content) + fileOffsetBlock;
|
||||||
return discReader.readEncryptedToInputStream(offset, content.getEncryptedFileSize() - fileOffsetBlock);
|
long usedSize = content.getEncryptedFileSize() - fileOffsetBlock;
|
||||||
|
if(size.isPresent()) {
|
||||||
|
usedSize = size.get();
|
||||||
|
}
|
||||||
|
return discReader.readEncryptedToInputStream(offset, usedSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -18,6 +18,7 @@ package de.mas.wiiu.jnus.implementations;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.mas.wiiu.jnus.NUSTitle;
|
import de.mas.wiiu.jnus.NUSTitle;
|
||||||
import de.mas.wiiu.jnus.Settings;
|
import de.mas.wiiu.jnus.Settings;
|
||||||
@ -44,7 +45,7 @@ public class NUSDataProviderWUDGI extends NUSDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getInputStreamFromContent(Content content, long fileOffsetBlock) throws IOException {
|
public InputStream getInputStreamFromContent(Content content, long fileOffsetBlock, Optional<Long> size) throws IOException {
|
||||||
InputStream in = getGiPartitionTitle().getFileAsStream(content.getFilename(), getDiscReader(), fileOffsetBlock, titleKey);
|
InputStream in = getGiPartitionTitle().getFileAsStream(content.getFilename(), getDiscReader(), fileOffsetBlock, titleKey);
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package de.mas.wiiu.jnus.implementations;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipException;
|
import java.util.zip.ZipException;
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ public class NUSDataProviderWoomy extends NUSDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getInputStreamFromContent(@NonNull Content content, long fileOffsetBlock) throws IOException {
|
public InputStream getInputStreamFromContent(@NonNull Content content, long fileOffsetBlock, Optional<Long> size) throws IOException {
|
||||||
WoomyZipFile zipFile = getSharedWoomyZipFile();
|
WoomyZipFile zipFile = getSharedWoomyZipFile();
|
||||||
ZipEntry entry = getWoomyInfo().getContentFiles().get(content.getFilename().toLowerCase());
|
ZipEntry entry = getWoomyInfo().getContentFiles().get(content.getFilename().toLowerCase());
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
|
@ -23,6 +23,7 @@ import java.net.URL;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.mas.wiiu.jnus.Settings;
|
import de.mas.wiiu.jnus.Settings;
|
||||||
|
|
||||||
@ -82,11 +83,15 @@ public final class NUSDownloadService extends Downloader {
|
|||||||
return downloadFileToByteArray(URL);
|
return downloadFileToByteArray(URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputStream getInputStream(String URL, long offset) throws IOException {
|
public InputStream getInputStream(String URL, long offset, Optional<Long> size) throws IOException {
|
||||||
URL url_obj = new URL(URL);
|
URL url_obj = new URL(URL);
|
||||||
HttpURLConnection connection = (HttpURLConnection) url_obj.openConnection();
|
HttpURLConnection connection = (HttpURLConnection) url_obj.openConnection();
|
||||||
connection.setRequestProperty("User-Agent", Settings.USER_AGENT);
|
connection.setRequestProperty("User-Agent", Settings.USER_AGENT);
|
||||||
connection.setRequestProperty("Range", "bytes=" + offset + "-");
|
String sizeString = "";
|
||||||
|
if(size.isPresent()) {
|
||||||
|
sizeString = Long.toString(size.get());
|
||||||
|
}
|
||||||
|
connection.setRequestProperty("Range", "bytes=" + offset + "-" + sizeString);
|
||||||
try {
|
try {
|
||||||
connection.connect();
|
connection.connect();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -96,9 +101,9 @@ public final class NUSDownloadService extends Downloader {
|
|||||||
return connection.getInputStream();
|
return connection.getInputStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputStream getInputStreamForURL(String url, long offset) throws IOException {
|
public InputStream getInputStreamForURL(String url, long offset, Optional<Long> size) throws IOException {
|
||||||
String URL = URL_BASE + "/" + url;
|
String URL = URL_BASE + "/" + url;
|
||||||
|
|
||||||
return getInputStream(URL, offset);
|
return getInputStream(URL, offset, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user