Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion disk-restapi-sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ dependencies {
}

group = 'com.yandex.android'
version = '1.03'
version = '1.04'

ext.getBooleanWithDefault = { String propertyName, boolean defaultValue ->
boolean result = defaultValue
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.yandex.disk.rest;

import com.yandex.disk.rest.util.Hash;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class LocalSourceFile implements SourceFile {

private final File file;
private Hash hash;

public LocalSourceFile(File file) {
this.file = file;
}

@Override
public Hash getHash() throws IOException {
if (hash == null) {
hash = Hash.getHash(file);
}
return hash;
}

@Override
public InputStream getInputStream(long startOffset) throws IOException {
InputStream input = new FileInputStream(file);
if (startOffset != 0) {
long skipped = input.skip(startOffset);
if (skipped != startOffset) {
throw new IOException("RequestBodyProgress: inputStream.skip() failed");
}
}
return input;
}

@Override
public long getContentSize() {
return file.length();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,12 @@
*
* @see RequestBody#create(com.squareup.okhttp.MediaType, java.io.File)
*/
/* package */ static RequestBody create(final MediaType contentType, final File file, final long startOffset,
/* package */ static RequestBody create(final MediaType contentType, final SourceFile file, final long startOffset,
final ProgressListener listener) {
if (file == null) {
throw new NullPointerException("content == null");
}

if (listener == null && startOffset == 0) {
return RequestBody.create(contentType, file);
}

return new RequestBody() {

private void updateProgress(long loaded)
Expand All @@ -57,7 +53,7 @@ private void updateProgress(long loaded)
if (listener.hasCancelled()) {
throw new CancelledUploadingException();
}
listener.updateProgress(loaded + startOffset, file.length());
listener.updateProgress(loaded + startOffset, file.getContentSize());
}
}

Expand All @@ -68,20 +64,14 @@ public MediaType contentType() {

@Override
public long contentLength() {
return file.length() - startOffset;
return file.getContentSize() - startOffset;
}

@Override
public void writeTo(BufferedSink sink) throws IOException {
Source source = null;
InputStream inputStream = new FileInputStream(file);
InputStream inputStream = file.getInputStream(startOffset);
try {
if (startOffset > 0) {
long skipped = inputStream.skip(startOffset);
if (skipped != startOffset) {
throw new IOException("RequestBodyProgress: inputStream.skip() failed");
}
}
long loaded = 0;
updateProgress(loaded);
source = Okio.source(inputStream);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
Expand Down Expand Up @@ -371,19 +372,41 @@ public Link getUploadLink(final String serverPath, final boolean overwrite)
* @see <p>API reference <a href="http://api.yandex.com/disk/api/reference/upload.xml">english</a>,
* <a href="https://tech.yandex.ru/disk/api/reference/upload-docpage/">russian</a></p>
*/
public void uploadFile(final Link link, final boolean resumeUpload, final File localSource,
public void uploadFile(final Link link, final boolean resumeUpload, final File file,
final ProgressListener progressListener)
throws IOException, ServerException {
RestClientIO clientIO = new RestClientIO(client, credentials.getHeaders());
long startOffset = 0;
if (resumeUpload) {
Hash hash = Hash.getHash(localSource);
Hash hash = Hash.getHash(file);
startOffset = clientIO.getUploadedSize(link.getHref(), hash);
logger.debug("head: startOffset=" + startOffset);
}
clientIO.uploadFile(link.getHref(), localSource, startOffset, progressListener);
LocalSourceFile localSourceFile = new LocalSourceFile(file);
clientIO.uploadFile(link.getHref(), localSourceFile, startOffset, progressListener);
}


/**
* Uploading an abstract source file to Disk
*
* @see <p>API reference <a href="http://api.yandex.com/disk/api/reference/upload.xml">english</a>,
* <a href="https://tech.yandex.ru/disk/api/reference/upload-docpage/">russian</a></p>
*/
public void uploadFile(final Link link, final boolean resumeUpload, final SourceFile sourceFile,
final ProgressListener progressListener)
throws IOException, ServerException {
RestClientIO clientIO = new RestClientIO(client, credentials.getHeaders());
long startOffset = 0;
if (resumeUpload) {
Hash hash = sourceFile.getHash();
startOffset = clientIO.getUploadedSize(link.getHref(), hash);
logger.debug("head: startOffset=" + startOffset);
}
clientIO.uploadFile(link.getHref(), sourceFile, startOffset, progressListener);
}


/**
* Deleting a file or folder
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private ContentRangeResponse parseContentRangeHeader(String header) {
}
}

/* package */ void uploadFile(final String url, final File file, final long startOffset,
/* package */ void uploadFile(final String url, final SourceFile file, final long startOffset,
final ProgressListener progressListener)
throws IOException, HttpCodeException {
logger.debug("uploadFile: put to url: "+url);
Expand All @@ -228,8 +228,8 @@ private ContentRangeResponse parseContentRangeHeader(String header) {
.put(requestBody);
if (startOffset > 0) {
StringBuilder contentRange = new StringBuilder();
contentRange.append("bytes ").append(startOffset).append("-").append(file.length() - 1)
.append("/").append(file.length());
contentRange.append("bytes ").append(startOffset).append("-").append(file.getContentSize() - 1)
.append("/").append(file.getContentSize());
logger.debug(CONTENT_RANGE_HEADER + ": " + contentRange);
requestBuilder.addHeader(CONTENT_RANGE_HEADER, contentRange.toString());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.yandex.disk.rest;

import com.yandex.disk.rest.util.Hash;

import java.io.IOException;
import java.io.InputStream;

public interface SourceFile {

/**
* Get hash for content
* @return
*/
Hash getHash() throws IOException;

/**
* Getinput stream using current offset.
* For file you should change current position to offset
* @param startOffset
* @return input stream for content
*/
InputStream getInputStream(long startOffset) throws IOException;


/**
* Return size of content in bytes.
* For file it is just size.
*
* @return
*/
long getContentSize();

}