nextcloud / android

📱 Nextcloud Android app
https://play.google.com/store/apps/details?id=com.nextcloud.client
GNU General Public License v2.0
4.18k stars 1.75k forks source link

No Way to Identify Unsyncable Files With Invalid Filenames #12137

Open gohrner opened 10 months ago

gohrner commented 10 months ago

⚠️ Before posting ⚠️

Steps to reproduce

  1. Synchronize a remote folder which contains files with "invalid" filename (whatever this may mean - due to this bug I currently cannot find out. ;) As all files were uploaded from Linux and are now downloaded to an Android device's internal flash storage, I'd have expected all filenames to be compatible.)

Expected behaviour

In case a file with an "invalid" filename is encountered, the error notification should indicate which file was affected, so the user has a way to identify and adjust the offending file(name).

(The most convenient solution would probably be to transparently "adjust" the filename and continue successfully, but that's a different issue is not directly related to this issue here.)

Actual behaviour

An error notification is generated which only says "Invalid filename for local file" but does not provide any information regarding which file was actually affected, and why the filename was "invalid".

See screenshot.

image

I ended up with a dozend or so of these notifications - how am I supposed to fix this?

Android version

13

Device brand and model

FairPhone 5

Stock or custom OS?

Stock

Nextcloud android app version

3.25

Nextcloud server version

27.1.3

Using a reverse proxy?

Yes

Android logs

No response

Server error logs

No server issue.

Additional information

I don't have Android development tools installed and no dev mode active, so cannot easily access the client's logs.

Why don't you make these accessible in the GUI directly?

lumpiluk commented 10 months ago

This is especially interesting as I don't experience this behavior with the same files on my old Android 10 device, but I do on Android 13 (same device as yours actually).

Syncing an entire folder is not even necessary to trigger this error message. I usually encounter the problem when I try to download or export a single file.

File names for which the problem occurs are of the form: 2023-11-10_event_myname_0001.JPG. I suspect that the problem is not the file name but the name of the parent folders, which include '*', '@', and spaces.

lumpiluk commented 10 months ago
Here are my client logs, in case they are useful:

``` 11-10 11:33:50.419 26101 26101 D FileActivity: show loading dialog 11-10 11:33:50.419 26101 26101 W OnBackInvokedCallback: OnBackInvokedCallback is not enabled for the application. 11-10 11:33:50.419 26101 26101 W OnBackInvokedCallback: Set 'android:enableOnBackInvokedCallback="true"' in the application manifest. 11-10 11:33:50.454 26101 496 D OpenGLRenderer: endAllActiveAnimators on 0xb400007c5117c190 (RippleDrawable) with handle 0xb400007b60de9f70 11-10 11:33:50.464 26101 26101 W OnBackInvokedCallback: OnBackInvokedCallback is not enabled for the application. 11-10 11:33:50.464 26101 26101 W OnBackInvokedCallback: Set 'android:enableOnBackInvokedCallback="true"' in the application manifest. 11-10 11:33:50.465 26101 26101 D OperationsService: Starting command with id 4 11-10 11:33:50.477 26101 530 I SynchronizeFileOperation: Synchronizing berlin.lukas@cloud.[HOST], file /Streikbilder Berlin/2023-11-09_[EVENT]/Nach Fotograf*innen sortiert/Lukas - OPT - ig@[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg: Operation finished with HTTP status code -1 (success) 11-10 11:33:50.478 26101 530 D OperationsService: Called 1 listeners 11-10 11:33:50.478 26101 530 D OperationsService: Stopping after command with id 4 11-10 11:33:50.479 26101 496 E OpenGLRenderer: Unable to match the desired swap behavior. 11-10 11:33:50.486 26101 496 W Parcel : Expecting binder but got null! 11-10 11:33:50.489 26101 26101 D FileDownloader: Starting command with id 2 11-10 11:33:50.492 26101 26101 D FileActivity: Received result of operation in FileActivity - common behaviour for all the FileActivities 11-10 11:33:50.492 26101 26101 D FileActivity: dismiss loading dialog 11-10 11:33:50.497 26101 532 D OwnCloudClient #0: REQUEST GET /remote.php/dav/files/berlin.lukas/Streikbilder%20Berlin/2023-11-09_[EVENT]/Nach%20Fotograf*innen%20sortiert/Lukas%20%20-%20OPT%20-%20ig%40[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg 11-10 11:33:50.513 26101 26101 W OnBackInvokedCallback: OnBackInvokedCallback is not enabled for the application. 11-10 11:33:50.513 26101 26101 W OnBackInvokedCallback: Set 'android:enableOnBackInvokedCallback="true"' in the application manifest. 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: Error creating file /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/tmp/berlin.lukas@cloud.[HOST]/Streikbilder Berlin/2023-11-09_[EVENT]/Nach Fotograf*innen sortiert/Lukas - OPT - ig@[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: java.io.IOException: Operation not permitted 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at java.io.UnixFileSystem.createFileExclusively0(Native Method) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at java.io.File.createNewFile(File.java:1006) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.resources.files.DownloadFileRemoteOperation.downloadFile(DownloadFileRemoteOperation.java:114) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.resources.files.DownloadFileRemoteOperation.run(DownloadFileRemoteOperation.java:88) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.common.operations.RemoteOperation.execute(RemoteOperation.java:205) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.operations.DownloadFileOperation.run(DownloadFileOperation.java:180) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.common.operations.RemoteOperation.execute(RemoteOperation.java:205) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.files.services.FileDownloader.downloadFile(FileDownloader.java:474) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.files.services.FileDownloader.-$$Nest$mdownloadFile(Unknown Source:0) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.files.services.FileDownloader$ServiceHandler.handleMessage(FileDownloader.java:424) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at android.os.Handler.dispatchMessage(Handler.java:106) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at android.os.Looper.loopOnce(Looper.java:201) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at android.os.Looper.loop(Looper.java:288) 11-10 11:33:50.702 26101 532 E DownloadFileRemoteOperation: at android.os.HandlerThread.run(HandlerThread.java:67) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: Download of /Streikbilder Berlin/2023-11-09_[EVENT]/Nach Fotograf*innen sortiert/Lukas - OPT - ig@[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg to /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/tmp/berlin.lukas@cloud.[HOST]/Streikbilder Berlin/2023-11-09_[EVENT]/Nach Fotograf*innen sortiert/Lukas - OPT - ig@[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg: Unexpected exception 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: com.owncloud.android.lib.resources.files.CreateLocalFileException: File could not be created 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.resources.files.DownloadFileRemoteOperation.downloadFile(DownloadFileRemoteOperation.java:117) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.resources.files.DownloadFileRemoteOperation.run(DownloadFileRemoteOperation.java:88) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.common.operations.RemoteOperation.execute(RemoteOperation.java:205) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.operations.DownloadFileOperation.run(DownloadFileOperation.java:180) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.common.operations.RemoteOperation.execute(RemoteOperation.java:205) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.files.services.FileDownloader.downloadFile(FileDownloader.java:474) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.files.services.FileDownloader.-$$Nest$mdownloadFile(Unknown Source:0) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.files.services.FileDownloader$ServiceHandler.handleMessage(FileDownloader.java:424) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at android.os.Handler.dispatchMessage(Handler.java:106) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at android.os.Looper.loopOnce(Looper.java:201) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at android.os.Looper.loop(Looper.java:288) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at android.os.HandlerThread.run(HandlerThread.java:67) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: Caused by: java.io.IOException: Operation not permitted 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at java.io.UnixFileSystem.createFileExclusively0(Native Method) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at java.io.File.createNewFile(File.java:1006) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: at com.owncloud.android.lib.resources.files.DownloadFileRemoteOperation.downloadFile(DownloadFileRemoteOperation.java:114) 11-10 11:33:53.353 26101 532 E DownloadFileRemoteOperation: ... 11 more 11-10 11:33:53.354 26101 532 I DownloadFileOperation: Download of /Streikbilder Berlin/2023-11-09_[EVENT]/Nach Fotograf*innen sortiert/Lukas - OPT - ig@[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg to /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/berlin.lukas@cloud.[HOST]/Streikbilder Berlin/2023-11-09_[EVENT]/Nach Fotograf*innen sortiert/Lukas - OPT - ig@[INSTAGRAM HANDLE]/2023-11-10_[EVENT]_FFF-OPT_lukas_LS__4031.jpg: Unexpected exception 11-10 11:33:53.375 26101 26101 D PreviewImageFragment: onStop starts 11-10 11:33:55.374 26101 532 D FileDownloader: Stopping after command with id 0 ```