diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java index 37be14913..ceb152f66 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/ReceiverDeviceAsyncTask.java @@ -15,6 +15,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; +import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.FileItem.FileStatus.ERROR; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.FileItem.FileStatus.SENDING; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.FileItem.FileStatus.SENT; import static org.kiwix.kiwixmobile.zim_manager.local_file_transfer.WifiDirectManager.FILE_TRANSFER_PORT; @@ -49,36 +50,43 @@ class ReceiverDeviceAsyncTask extends AsyncTask { final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get(); final String KIWIX_ROOT = localFileTransferActivity.getZimStorageRootPath(); - int totalFileCount = localFileTransferActivity.getTotalFilesForTransfer(); + boolean result = true; + for (int currentFile = 1; currentFile <= totalFileCount && !isCancelled(); currentFile++) { - - Socket client = serverSocket.accept(); - if (BuildConfig.DEBUG) Log.d(TAG, "Server: Client connected for file " + currentFile); - fileItemIndex = currentFile - 1; - publishProgress(SENDING); - ArrayList fileItems = localFileTransferActivity.getFileItems(); String incomingFileName = fileItems.get(fileItemIndex).getFileName(); - final File clientNoteFileLocation = new File(KIWIX_ROOT + incomingFileName); - File dirs = new File(clientNoteFileLocation.getParent()); - if (!dirs.exists() && !dirs.mkdirs()) { - Log.d(TAG, "ERROR: Required parent directories couldn't be created"); - return false; + try (Socket client = serverSocket.accept()) { + if (BuildConfig.DEBUG) Log.d(TAG, "Server: Client connected for file " + currentFile); + publishProgress(fileItemIndex, SENDING); + + final File clientNoteFileLocation = new File(KIWIX_ROOT + incomingFileName); + File dirs = new File(clientNoteFileLocation.getParent()); + if (!dirs.exists() && !dirs.mkdirs()) { + Log.d(TAG, "ERROR: Required parent directories couldn't be created"); + result = false; + continue; + } + + boolean fileCreated = clientNoteFileLocation.createNewFile(); + if (BuildConfig.DEBUG) Log.d(TAG, "File creation: " + fileCreated); + + copyToOutputStream(client.getInputStream(), new FileOutputStream(clientNoteFileLocation)); + publishProgress(fileItemIndex, SENT); + + } catch (IOException e) { + Log.e(TAG, e.getMessage()); + result = false; + showToast(localFileTransferActivity, localFileTransferActivity.getString(R.string.error_transferring, incomingFileName), Toast.LENGTH_SHORT); + publishProgress(fileItemIndex, ERROR); } - boolean fileCreated = clientNoteFileLocation.createNewFile(); - if (BuildConfig.DEBUG) Log.d(TAG, "File creation: " + fileCreated); - - copyToOutputStream(client.getInputStream(), new FileOutputStream(clientNoteFileLocation)); - - publishProgress(SENT); localFileTransferActivity.incrementTotalFilesSent(); } - return !isCancelled(); // Return true only if not cancelled + return (!isCancelled() && result); } catch (IOException e) { Log.e(TAG, e.getMessage()); @@ -88,9 +96,10 @@ class ReceiverDeviceAsyncTask extends AsyncTask { @Override protected void onProgressUpdate(Integer... values) { - int fileStatus = values[0]; + int fileIndex = values[0]; + int fileStatus = values[1]; final LocalFileTransferActivity localFileTransferActivity = weakReferenceToActivity.get(); - localFileTransferActivity.changeStatus(fileItemIndex, fileStatus); + localFileTransferActivity.changeStatus(fileIndex, fileStatus); } @Override protected void onCancelled() { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java index 69c4f1685..f24736779 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/local_file_transfer/SenderDeviceAsyncTask.java @@ -80,7 +80,7 @@ class SenderDeviceAsyncTask extends AsyncTask { } catch (IOException e) { Log.e(TAG, e.getMessage()); result = false; - showToast(localFileTransferActivity, localFileTransferActivity.getString(R.string.error_sending, getFileName(localFileTransferActivity.getFileUriArrayList().get(fileItemIndex))), Toast.LENGTH_SHORT); + showToast(localFileTransferActivity, localFileTransferActivity.getString(R.string.error_transferring, getFileName(localFileTransferActivity.getFileUriArrayList().get(fileItemIndex))), Toast.LENGTH_SHORT); publishProgress(fileItemIndex, ERROR); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1503dc9e8..1282b60dc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -274,7 +274,7 @@ Selected device not co-operating for transfer File transfer complete An error was encountered during transfer - Error sending file %s + Error transferring file %s Get content from nearby device Search For Peers Your Device: