diff --git a/res/values/strings.xml b/res/values/strings.xml --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -150,6 +150,7 @@ Failed receiving %1$d of %2$d files from %3$s Tap to open \'%1s\' + Cannot create file %s Sent file to %1s %1s Failed to send file to %1s diff --git a/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java b/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java --- a/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java +++ b/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java @@ -127,7 +127,9 @@ @WorkerThread public boolean onPacketReceived(NetworkPacket np) { try { - if (np.hasPayload()) { + if (np.has("filename")) { + Log.i("SharePlugin", "receiving a file"); + if (isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { receiveFile(np); } else { @@ -242,24 +244,33 @@ info.fileDocument = destinationFolderDocument.createFile(mimeType, displayName); assert info.fileDocument != null; - info.fileDocument.getType(); - try { - info.outputStream = new BufferedOutputStream(context.getContentResolver().openOutputStream(info.fileDocument.getUri())); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return; - } if (shareNotification == null) { shareNotification = new ShareNotification(device); } + if (info.fileDocument == null) { + onError(info, new RuntimeException(context.getString(R.string.cannot_create_file, filename))); + return; + } + shareNotification.setTitle(context.getResources().getQuantityString(R.plurals.incoming_file_title, info.numberOfFiles(), info.numberOfFiles(), device.getName())); - //shareNotification.setProgress(0, context.getResources().getQuantityString(R.plurals.incoming_files_text, numFiles, filename, currentFileNum, numFiles)); shareNotification.show(); - ReceiveFileRunnable runnable = new ReceiveFileRunnable(info, this); - executorService.execute(runnable); + if (np.hasPayload()) { + try { + info.outputStream = new BufferedOutputStream(context.getContentResolver().openOutputStream(info.fileDocument.getUri())); + } catch (FileNotFoundException e) { + e.printStackTrace(); + return; + } + + ReceiveFileRunnable runnable = new ReceiveFileRunnable(info, this); + executorService.execute(runnable); + } else { + onProgress(info, 100); + onSuccess(info); + } } @Override @@ -498,6 +509,7 @@ info.fileDocument.delete(); + //TODO: Show error in notification int failedFiles = info.numberOfFiles() - (info.currentFileNumber - 1); shareNotification.setFinished(context.getResources().getQuantityString(R.plurals.received_files_fail_title, failedFiles, failedFiles, info.numberOfFiles(), device.getName())); shareNotification.show();