diff --git a/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java b/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java index d978d025..69b7e8da 100644 --- a/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java +++ b/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java @@ -111,7 +111,7 @@ public class DownloadManager { mInputStream = body.byteStream(); long total = body.contentLength(); long read = 0; - while (read < total) { + while (true) { if (!mStatus.get()) { onCancel(); return; @@ -122,7 +122,9 @@ public class DownloadManager { } read += len; mFileOutputStream.write(buffer, 0, len); - mProgress.onNext((int) (100 * read / total)); + if (total > 0) { + mProgress.onNext((int) (100 * read / total)); + } } mProgress.onComplete(); recycle(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java b/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java index 16bbfcf0..8de68229 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java @@ -28,6 +28,7 @@ import com.stardust.scriptdroid.model.script.ScriptFile; import com.stardust.scriptdroid.model.script.Scripts; import com.stardust.scriptdroid.storage.file.StorageFileProvider; 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.shortcut.ShortcutCreateActivity; import com.stardust.scriptdroid.ui.timing.TimedTaskSettingActivity_; @@ -274,18 +275,22 @@ public class ScriptOperations { DownloadManager.getInstance().download(url, path) .observeOn(AndroidSchedulers.mainThread()) .doOnNext(progressDialog::setProgress) - .doOnComplete(() -> { - progressDialog.dismiss(); - subject.onNext(new ScriptFile(path)); - subject.onComplete(); - }) - .doOnError(error -> { - Log.e(LOG_TAG, "Download failed", error); - progressDialog.dismiss(); - showMessage(R.string.text_download_failed); - subject.onError(error); - }) - .subscribe(); + .subscribe(new SimpleObserver() { + @Override + public void onComplete() { + progressDialog.dismiss(); + subject.onNext(new ScriptFile(path)); + subject.onComplete(); + } + + @Override + public void onError(Throwable error) { + Log.e(LOG_TAG, "Download failed", error); + progressDialog.dismiss(); + showMessage(R.string.text_download_failed); + subject.onError(error); + } + }); return subject; } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java index faedb0f6..35aac2c4 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java @@ -5,6 +5,7 @@ import android.net.Uri; import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.Snackbar; import android.util.AttributeSet; +import android.view.View; import android.webkit.ValueCallback; import android.webkit.WebView; @@ -21,6 +22,7 @@ import java.util.regex.Pattern; import butterknife.OnClick; import butterknife.Optional; +import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; /** @@ -55,7 +57,6 @@ public class CommunityWebView extends EWebView { .title(fileName) .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.edit, R.drawable.ic_edit_white_24dp, R.string.text_save_and_edit) .bindItemClick(this) .build()); mBottomSheetDialog.show(); @@ -68,19 +69,12 @@ public class CommunityWebView extends EWebView { new ScriptOperations(getContext(), CommunityWebView.this) .download(mUrl) .observeOn(AndroidSchedulers.mainThread()) + .onErrorResumeNext(Observable.empty()) .subscribe(file -> Snackbar.make(CommunityWebView.this, getResources().getString(R.string.format_file_downloaded, file.getPath()) - , Snackbar.LENGTH_SHORT).show()); - } - - @Optional - @OnClick(R.id.edit) - void saveAndEdit() { - dismissBottomSheetDialog(); - new ScriptOperations(getContext(), CommunityWebView.this) - .download(mUrl) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(Scripts::edit); + , Snackbar.LENGTH_LONG) + .setAction(R.string.text_open, v -> Scripts.edit(file)) + .show()); } @Optional @@ -90,6 +84,7 @@ public class CommunityWebView extends EWebView { new ScriptOperations(getContext(), CommunityWebView.this) .temporarilyDownload(mUrl) .observeOn(AndroidSchedulers.mainThread()) + .onErrorResumeNext(Observable.empty()) .subscribe(file -> { Snackbar.make(CommunityWebView.this, R.string.text_start_running, Snackbar.LENGTH_SHORT).show(); Scripts.run(file); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 42f2ed51..0eafa6cb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -325,4 +325,5 @@ 没有安装打包插件,是否立即下载? 打包插件不可用 详情 + 打开