All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mobi.cangol.mobile.http.download.DownloadThread Maven / Gradle / Ivy

There is a newer version: 1.2.7
Show newest version
/*
 *
 *  Copyright (c) 2013 Cangol
 *   

* Licensed under the Apache License, Version 2.0 (the "License") * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mobi.cangol.mobile.http.download; import android.util.Log; import java.io.IOException; import java.io.InterruptedIOException; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class DownloadThread implements Runnable { public final static String TAG = "DownloadThread"; private final DownloadResponseHandler responseHandler; private DownloadHttpClient context; private OkHttpClient client; private Request request; private int executionCount; private long from; private String saveFile; public DownloadThread(DownloadHttpClient context, OkHttpClient client, Request request, DownloadResponseHandler responseHandler, String saveFile) { this.client = client; this.context = context; this.request = request; this.responseHandler = responseHandler; this.saveFile = saveFile; } @Override public void run() { try { from = parserFrom(request); if (responseHandler != null) { responseHandler.sendWaitMessage(); } makeRequestWithRetries(); } catch (Exception e) { if (responseHandler != null) { responseHandler.sendFailureMessage(e, e.getMessage()); } } } private void makeRequest() throws IOException, InterruptedException { if (!Thread.currentThread().isInterrupted()) { Response response = client.newCall(request).execute(); if (!Thread.currentThread().isInterrupted()) { if (responseHandler != null) { responseHandler.sendResponseMessage(response, saveFile); } } else { Log.d(TAG, "Thread.isInterrupted"); responseHandler.sendStopMessage(from); } } else { Log.d(TAG, "Thread.isInterrupted"); responseHandler.sendStopMessage(from); } } private long parserFrom(Request request) { String value = request.header("Range"); if (value != null && value.contains("bytes=")) { value = value.substring(value.indexOf("bytes=") + "bytes=".length(), value.indexOf('-')); } else { value = "0"; } return Long.parseLong(value); } private void makeRequestWithRetries() throws Exception { boolean retry = true; Exception cause = null; DownloadRetryHandler retryHandler = this.context.getDownloadRetryHandler(); while (retry) { try { makeRequest(); return; } catch (InterruptedIOException e) { responseHandler.sendStopMessage(from); return; } catch (InterruptedException e) { responseHandler.sendStopMessage(from); return; } catch (IOException e) { cause = e; retry = retryHandler.retryRequest(e, ++executionCount); } catch (Exception e) { cause = e; retry = false; } } Exception ex = new Exception(); ex.initCause(cause); throw ex; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy