provide more detailed error toasts for http file download
This commit is contained in:
parent
d2ded8ad50
commit
b5e90850d8
|
@ -6,6 +6,7 @@ import android.util.Log;
|
|||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
|
@ -125,6 +126,17 @@ public class HttpDownloadConnection implements Transferable {
|
|||
mXmppConnectionService.updateConversationUi();
|
||||
}
|
||||
|
||||
private void showToastForException(Exception e) {
|
||||
e.printStackTrace();
|
||||
if (e instanceof java.net.UnknownHostException) {
|
||||
mXmppConnectionService.showErrorToastInUi(R.string.download_failed_server_not_found);
|
||||
} else if (e instanceof java.net.ConnectException) {
|
||||
mXmppConnectionService.showErrorToastInUi(R.string.download_failed_could_not_connect);
|
||||
} else {
|
||||
mXmppConnectionService.showErrorToastInUi(R.string.download_failed_file_not_found);
|
||||
}
|
||||
}
|
||||
|
||||
private class FileSizeChecker implements Runnable {
|
||||
|
||||
private boolean interactive = false;
|
||||
|
@ -146,7 +158,7 @@ public class HttpDownloadConnection implements Transferable {
|
|||
} catch (IOException e) {
|
||||
Log.d(Config.LOGTAG, "io exception in http file size checker: " + e.getMessage());
|
||||
if (interactive) {
|
||||
mXmppConnectionService.showErrorToastInUi(R.string.file_not_found_on_remote_host);
|
||||
showToastForException(e);
|
||||
}
|
||||
cancel();
|
||||
return;
|
||||
|
@ -163,20 +175,23 @@ public class HttpDownloadConnection implements Transferable {
|
|||
}
|
||||
|
||||
private long retrieveFileSize() throws IOException {
|
||||
Log.d(Config.LOGTAG,"retrieve file size. interactive:"+String.valueOf(interactive));
|
||||
changeStatus(STATUS_CHECKING);
|
||||
HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection();
|
||||
connection.setRequestMethod("HEAD");
|
||||
if (connection instanceof HttpsURLConnection) {
|
||||
mHttpConnectionManager.setupTrustManager((HttpsURLConnection) connection, interactive);
|
||||
}
|
||||
connection.connect();
|
||||
String contentLength = connection.getHeaderField("Content-Length");
|
||||
if (contentLength == null) {
|
||||
throw new IOException();
|
||||
}
|
||||
try {
|
||||
Log.d(Config.LOGTAG, "retrieve file size. interactive:" + String.valueOf(interactive));
|
||||
changeStatus(STATUS_CHECKING);
|
||||
HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection();
|
||||
connection.setRequestMethod("HEAD");
|
||||
if (connection instanceof HttpsURLConnection) {
|
||||
mHttpConnectionManager.setupTrustManager((HttpsURLConnection) connection, interactive);
|
||||
}
|
||||
connection.connect();
|
||||
String contentLength = connection.getHeaderField("Content-Length");
|
||||
connection.disconnect();
|
||||
if (contentLength == null) {
|
||||
throw new IOException();
|
||||
}
|
||||
return Long.parseLong(contentLength, 10);
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IOException();
|
||||
}
|
||||
|
@ -202,37 +217,43 @@ public class HttpDownloadConnection implements Transferable {
|
|||
updateImageBounds();
|
||||
finish();
|
||||
} catch (SSLHandshakeException e) {
|
||||
FileBackend.close(os);
|
||||
changeStatus(STATUS_OFFER);
|
||||
} catch (IOException e) {
|
||||
FileBackend.close(os);
|
||||
mXmppConnectionService.showErrorToastInUi(R.string.file_not_found_on_remote_host);
|
||||
if (interactive) {
|
||||
showToastForException(e);
|
||||
}
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
|
||||
private void download() throws IOException {
|
||||
HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection();
|
||||
if (connection instanceof HttpsURLConnection) {
|
||||
mHttpConnectionManager.setupTrustManager((HttpsURLConnection) connection, interactive);
|
||||
private void download() throws IOException {
|
||||
InputStream is = null;
|
||||
try {
|
||||
HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection();
|
||||
if (connection instanceof HttpsURLConnection) {
|
||||
mHttpConnectionManager.setupTrustManager((HttpsURLConnection) connection, interactive);
|
||||
}
|
||||
connection.connect();
|
||||
is = new BufferedInputStream(connection.getInputStream());
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
os = AbstractConnectionManager.createOutputStream(file, true);
|
||||
long transmitted = 0;
|
||||
long expected = file.getExpectedSize();
|
||||
int count = -1;
|
||||
byte[] buffer = new byte[1024];
|
||||
while ((count = is.read(buffer)) != -1) {
|
||||
transmitted += count;
|
||||
os.write(buffer, 0, count);
|
||||
updateProgress((int) ((((double) transmitted) / expected) * 100));
|
||||
}
|
||||
os.flush();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
} finally {
|
||||
FileBackend.close(os);
|
||||
FileBackend.close(is);
|
||||
}
|
||||
connection.connect();
|
||||
BufferedInputStream is = new BufferedInputStream(connection.getInputStream());
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
os = AbstractConnectionManager.createOutputStream(file,true);
|
||||
long transmitted = 0;
|
||||
long expected = file.getExpectedSize();
|
||||
int count = -1;
|
||||
byte[] buffer = new byte[1024];
|
||||
while ((count = is.read(buffer)) != -1) {
|
||||
transmitted += count;
|
||||
os.write(buffer, 0, count);
|
||||
updateProgress((int) ((((double) transmitted) / expected) * 100));
|
||||
}
|
||||
os.flush();
|
||||
os.close();
|
||||
is.close();
|
||||
}
|
||||
|
||||
private void updateImageBounds() {
|
||||
|
|
|
@ -494,11 +494,13 @@
|
|||
<string name="none">None</string>
|
||||
<string name="recently_used">Most recently used</string>
|
||||
<string name="choose_quick_action">Choose quick action</string>
|
||||
<string name="file_not_found_on_remote_host">File not found on remote server</string>
|
||||
<string name="search_for_contacts_or_groups">Search for contacts or groups</string>
|
||||
<string name="send_private_message">Send private message</string>
|
||||
<string name="user_has_left_conference">%s has left the conference!</string>
|
||||
<string name="username">Username</string>
|
||||
<string name="username_hint">Username</string>
|
||||
<string name="invalid_username">This is not a valid username</string>
|
||||
<string name="download_failed_server_not_found">Download failed: Server not found</string>
|
||||
<string name="download_failed_file_not_found">Download failed: File not found</string>
|
||||
<string name="download_failed_could_not_connect">Download failed: Could not connect to host</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue