fix: download failed while contentLength = -1
This commit is contained in:
@@ -111,7 +111,7 @@ public class DownloadManager {
|
|||||||
mInputStream = body.byteStream();
|
mInputStream = body.byteStream();
|
||||||
long total = body.contentLength();
|
long total = body.contentLength();
|
||||||
long read = 0;
|
long read = 0;
|
||||||
while (read < total) {
|
while (true) {
|
||||||
if (!mStatus.get()) {
|
if (!mStatus.get()) {
|
||||||
onCancel();
|
onCancel();
|
||||||
return;
|
return;
|
||||||
@@ -122,7 +122,9 @@ public class DownloadManager {
|
|||||||
}
|
}
|
||||||
read += len;
|
read += len;
|
||||||
mFileOutputStream.write(buffer, 0, len);
|
mFileOutputStream.write(buffer, 0, len);
|
||||||
mProgress.onNext((int) (100 * read / total));
|
if (total > 0) {
|
||||||
|
mProgress.onNext((int) (100 * read / total));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mProgress.onComplete();
|
mProgress.onComplete();
|
||||||
recycle();
|
recycle();
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import com.stardust.scriptdroid.model.script.ScriptFile;
|
|||||||
import com.stardust.scriptdroid.model.script.Scripts;
|
import com.stardust.scriptdroid.model.script.Scripts;
|
||||||
import com.stardust.scriptdroid.storage.file.StorageFileProvider;
|
import com.stardust.scriptdroid.storage.file.StorageFileProvider;
|
||||||
import com.stardust.scriptdroid.network.download.DownloadManager;
|
import com.stardust.scriptdroid.network.download.DownloadManager;
|
||||||
|
import com.stardust.scriptdroid.tool.SimpleObserver;
|
||||||
import com.stardust.scriptdroid.ui.filechooser.FileChooserDialogBuilder;
|
import com.stardust.scriptdroid.ui.filechooser.FileChooserDialogBuilder;
|
||||||
import com.stardust.scriptdroid.ui.shortcut.ShortcutCreateActivity;
|
import com.stardust.scriptdroid.ui.shortcut.ShortcutCreateActivity;
|
||||||
import com.stardust.scriptdroid.ui.timing.TimedTaskSettingActivity_;
|
import com.stardust.scriptdroid.ui.timing.TimedTaskSettingActivity_;
|
||||||
@@ -274,18 +275,22 @@ public class ScriptOperations {
|
|||||||
DownloadManager.getInstance().download(url, path)
|
DownloadManager.getInstance().download(url, path)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.doOnNext(progressDialog::setProgress)
|
.doOnNext(progressDialog::setProgress)
|
||||||
.doOnComplete(() -> {
|
.subscribe(new SimpleObserver<Integer>() {
|
||||||
progressDialog.dismiss();
|
@Override
|
||||||
subject.onNext(new ScriptFile(path));
|
public void onComplete() {
|
||||||
subject.onComplete();
|
progressDialog.dismiss();
|
||||||
})
|
subject.onNext(new ScriptFile(path));
|
||||||
.doOnError(error -> {
|
subject.onComplete();
|
||||||
Log.e(LOG_TAG, "Download failed", error);
|
}
|
||||||
progressDialog.dismiss();
|
|
||||||
showMessage(R.string.text_download_failed);
|
@Override
|
||||||
subject.onError(error);
|
public void onError(Throwable error) {
|
||||||
})
|
Log.e(LOG_TAG, "Download failed", error);
|
||||||
.subscribe();
|
progressDialog.dismiss();
|
||||||
|
showMessage(R.string.text_download_failed);
|
||||||
|
subject.onError(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
return subject;
|
return subject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.net.Uri;
|
|||||||
import android.support.design.widget.BottomSheetDialog;
|
import android.support.design.widget.BottomSheetDialog;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.view.View;
|
||||||
import android.webkit.ValueCallback;
|
import android.webkit.ValueCallback;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
@@ -21,6 +22,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
import butterknife.Optional;
|
import butterknife.Optional;
|
||||||
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,7 +57,6 @@ public class CommunityWebView extends EWebView {
|
|||||||
.title(fileName)
|
.title(fileName)
|
||||||
.item(R.id.save, R.drawable.ic_file_download_black_48dp, R.string.text_download)
|
.item(R.id.save, R.drawable.ic_file_download_black_48dp, R.string.text_download)
|
||||||
.item(R.id.run, R.drawable.ic_play_arrow_white_48dp, R.string.text_run)
|
.item(R.id.run, R.drawable.ic_play_arrow_white_48dp, R.string.text_run)
|
||||||
.item(R.id.edit, R.drawable.ic_edit_white_24dp, R.string.text_save_and_edit)
|
|
||||||
.bindItemClick(this)
|
.bindItemClick(this)
|
||||||
.build());
|
.build());
|
||||||
mBottomSheetDialog.show();
|
mBottomSheetDialog.show();
|
||||||
@@ -68,19 +69,12 @@ public class CommunityWebView extends EWebView {
|
|||||||
new ScriptOperations(getContext(), CommunityWebView.this)
|
new ScriptOperations(getContext(), CommunityWebView.this)
|
||||||
.download(mUrl)
|
.download(mUrl)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.onErrorResumeNext(Observable.empty())
|
||||||
.subscribe(file ->
|
.subscribe(file ->
|
||||||
Snackbar.make(CommunityWebView.this, getResources().getString(R.string.format_file_downloaded, file.getPath())
|
Snackbar.make(CommunityWebView.this, getResources().getString(R.string.format_file_downloaded, file.getPath())
|
||||||
, Snackbar.LENGTH_SHORT).show());
|
, Snackbar.LENGTH_LONG)
|
||||||
}
|
.setAction(R.string.text_open, v -> Scripts.edit(file))
|
||||||
|
.show());
|
||||||
@Optional
|
|
||||||
@OnClick(R.id.edit)
|
|
||||||
void saveAndEdit() {
|
|
||||||
dismissBottomSheetDialog();
|
|
||||||
new ScriptOperations(getContext(), CommunityWebView.this)
|
|
||||||
.download(mUrl)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(Scripts::edit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Optional
|
@Optional
|
||||||
@@ -90,6 +84,7 @@ public class CommunityWebView extends EWebView {
|
|||||||
new ScriptOperations(getContext(), CommunityWebView.this)
|
new ScriptOperations(getContext(), CommunityWebView.this)
|
||||||
.temporarilyDownload(mUrl)
|
.temporarilyDownload(mUrl)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.onErrorResumeNext(Observable.empty())
|
||||||
.subscribe(file -> {
|
.subscribe(file -> {
|
||||||
Snackbar.make(CommunityWebView.this, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(CommunityWebView.this, R.string.text_start_running, Snackbar.LENGTH_SHORT).show();
|
||||||
Scripts.run(file);
|
Scripts.run(file);
|
||||||
|
|||||||
@@ -325,4 +325,5 @@
|
|||||||
<string name="no_apk_builder_plugin">没有安装打包插件,是否立即下载?</string>
|
<string name="no_apk_builder_plugin">没有安装打包插件,是否立即下载?</string>
|
||||||
<string name="text_apk_builder_plugin_unavailable">打包插件不可用</string>
|
<string name="text_apk_builder_plugin_unavailable">打包插件不可用</string>
|
||||||
<string name="text_detail">详情</string>
|
<string name="text_detail">详情</string>
|
||||||
|
<string name="text_open">打开</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user