AmazeFileManager icon indicating copy to clipboard operation
AmazeFileManager copied to clipboard

FTP client support

Open TranceLove opened this issue 3 years ago • 11 comments

Description

  • Refactored SshConnectionPool to more generic NetCopyClientConnectionPool
  • Change SshClientTemplate to NetCopyClientTemplate
  • Implement FTP client support. Defaults to passive FTP and implicit SSL for FTPS
  • Add optional thread safety to NetCopyClientConnectionPool on executing NetCopyClientTemplate, as Apache FTPClient is not thread safe. This shall bring deadlocks when connecting to FTP servers, but let's see...
  • Migrated GetSshHostFingerprintTask and SshAuthenticationTaskCallable to callable and RxJava, in align with FTP client implementation
  • Downgrade Apache FTP server to 1.1.1, as problems found with enabling TLS at Amaze FTP server after previous upgrade to 1.1.4

Issue tracker

Fixes #1570

Automatic tests

  • [x] Added test cases

Manual tests

  • [x] Done

Tested on Pixel 2 emulator running Android 11, against Amaze FTP server running on Oneplus 2 running Lineage OS 18.1 (11).

Build tasks success

Successfully running following tasks on local:

  • [x] ./gradlew assembledebug
  • [x] ./gradlew spotlessCheck

TranceLove avatar Jul 23 '22 03:07 TranceLove

Code looks good.

EmmanuelMess avatar Jul 23 '22 15:07 EmmanuelMess

Following issues:

  1. The dropdown menu to choose ftp/ftps/scp doesn't following dark theme.
  2. As soon as I press connect, I get following error from room
2022-07-26 04:22:45.172 24490-24490/com.amaze.filemanager.debug E/c.a.f.d.UtilsHandler: [main                ]
 Error getting public key for URI [ssh://[email protected]:22]androidx.room.EmptyResultSetException: Query returned empty result set: SELECT pub_key FROM sftp WHERE path = ?
        at com.amaze.filemanager.database.daos.SftpEntryDao_Impl$12.call(SftpEntryDao_Impl.java:469)
        at com.amaze.filemanager.database.daos.SftpEntryDao_Impl$12.call(SftpEntryDao_Impl.java:453)
        at androidx.room.RxRoom$5.subscribe(RxRoom.java:229)
        at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:920)
  1. After socket timeout in case we're unable to connect, I get a toast, but 'Processing' dialog is still displayed and it can't be cancelled, I have to force close whole app
2022-07-26 04:24:06.151 25119-25170/com.amaze.filemanager.debug E/GetSshHostFingerprint: Unable to connect to [192.168.123.123:22]
    java.net.SocketTimeoutException: failed to connect to /192.168.123.123 (port 22) from /192.168.0.156 (port 41784) after 30000ms: isConnected failed: ETIMEDOUT (Connection timed out)
        at libcore.io.IoBridge.isConnected(IoBridge.java:345)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:238)
        at libcore.io.IoBridge.connect(IoBridge.java:180)
        at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:621)
        at net.schmizz.sshj.SocketClient.connect(SocketClient.java:138)
        at com.amaze.filemanager.asynchronous.asynctasks.ssh.GetSshHostFingerprintTaskCallable.call(GetSshHostFingerprintTaskCallable.kt:61)
        at com.amaze.filemanager.asynchronous.asynctasks.ssh.GetSshHostFingerprintTaskCallable.call(GetSshHostFingerprintTaskCallable.kt:33)
  1. As soon as I click connect, sometimes the processing dialog doesn't show up and application stops responding, following is the stack
2022-07-26 04:40:42.475 28821-28821/com.amaze.filemanager.debug D/OplusSystemUINavigationGesture: [GESTURE_BUTTON] Hit Gesture Region !
2022-07-26 04:40:42.650 28821-28821/com.amaze.filemanager.debug I/Quality: Skipped: false 1 cost 26.341553 refreshRate 0 processName com.amaze.filemanager.debug
2022-07-26 04:40:45.280 28821-28840/com.amaze.filemanager.debug I/Quality: stackInfo :----- pid 28821 at 2022-07-26 04:40:45.258 -----;Cmd line: com.amaze.filemanager.debug;"main" prio=5 tid=2 WAITING sysTid=28821;  at sun.misc.Unsafe.park(Native Method);  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190);  at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:868);  at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1023);  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1334);  at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:232);  at io.reactivex.internal.observers.BlockingMultiObserver.blockingGet(BlockingMultiObserver.java:85);  at io.reactivex.Single.blockingGet(Single.java:2835);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.createFtpClient(NetCopyClientConnectionPool.kt:355);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.access$createFtpClient(NetCopyClientConnectionPool.kt:47);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool$createNetCopyClientInternal$1.invoke(NetCopyClientConnectionPool.kt:191);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool$createNetCopyClientInternal$1.invoke(NetCopyClientConnectionPool.kt:187);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.getConnection(NetCopyClientConnectionPool.kt:149);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.saveFtpConnectionAndLoadlist(SftpConnectDialog.kt:596);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.authenticateAndSaveSetup(SftpConnectDialog.kt:568);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.authenticateAndSaveSetup$default(SftpConnectDialog.kt:560);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.positiveButtonForFtp(SftpConnectDialog.kt:305);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.handleOnPositiveButton$lambda-10(SftpConnectDialog.kt:297);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.$r8$lambda$l8-s689flABV_peOm76Bo3x0yoU(Unknown Source:0);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog$$ExternalSyntheticLambda7.onClick(Unknown Source:4);  at com.afollestad.materialdialogs.MaterialDialog.onClick(MaterialDialog.java:410);  at android.view.View.performClick(View.java:7488);  at android.view.View.performClickInternal(View.java:7464);  at android.view.View.access$3700(View.java:841);  at android.view.View$PerformClick.run(View.java:28905);  at android.os.Handler.handleCallback(Handler.java:938);  at android.os.Handler.dispatchMessage(Handler.java:99);  at android.os.Looper.loopOnce(Looper.java:233);  at android.os.Looper.loop(Looper.java:344);  at android.app.ActivityThread.main(ActivityThread.java:8210);
2022-07-26 04:40:46.795 28821-28840/com.amaze.filemanager.debug I/Quality: stackInfo :----- pid 28821 at 2022-07-26 04:40:46.783 -----;Cmd line: com.amaze.filemanager.debug;"main" prio=5 tid=2 WAITING sysTid=28821;  at sun.misc.Unsafe.park(Native Method);  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190);  at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:868);  at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1023);  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1334);  at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:232);  at io.reactivex.internal.observers.BlockingMultiObserver.blockingGet(BlockingMultiObserver.java:85);  at io.reactivex.Single.blockingGet(Single.java:2835);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.createFtpClient(NetCopyClientConnectionPool.kt:355);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.access$createFtpClient(NetCopyClientConnectionPool.kt:47);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool$createNetCopyClientInternal$1.invoke(NetCopyClientConnectionPool.kt:191);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool$createNetCopyClientInternal$1.invoke(NetCopyClientConnectionPool.kt:187);  at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.getConnection(NetCopyClientConnectionPool.kt:149);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.saveFtpConnectionAndLoadlist(SftpConnectDialog.kt:596);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.authenticateAndSaveSetup(SftpConnectDialog.kt:568);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.authenticateAndSaveSetup$default(SftpConnectDialog.kt:560);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.positiveButtonForFtp(SftpConnectDialog.kt:305);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.handleOnPositiveButton$lambda-10(SftpConnectDialog.kt:297);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog.$r8$lambda$l8-s689flABV_peOm76Bo3x0yoU(Unknown Source:0);  at com.amaze.filemanager.ui.dialogs.SftpConnectDialog$$ExternalSyntheticLambda7.onClick(Unknown Source:4);  at com.afollestad.materialdialogs.MaterialDialog.onClick(MaterialDialog.java:410);  at android.view.View.performClick(View.java:7488);  at android.view.View.performClickInternal(View.java:7464);  at android.view.View.access$3700(View.java:841);  at android.view.View$PerformClick.run(View.java:28905);  at android.os.Handler.handleCallback(Handler.java:938);  at android.os.Handler.dispatchMessage(Handler.java:99);  at android.os.Looper.loopOnce(Looper.java:233);  at android.os.Looper.loop(Looper.java:344);  at android.app.ActivityThread.main(ActivityThread.java:8210);

VishalNehra avatar Jul 25 '22 23:07 VishalNehra

@TranceLove test cases seem to be failing because of slf4j and seem to effect this and #3401 Will you be able to check?

com.amaze.filemanager.filesystem.compressed.extractcontents.TarLzmaExtractorTest > testFixEntryName[19] STANDARD_ERROR
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/home/runner/.gradle/caches/transforms-3/5ad796bea48e13e45aa0771f83db5568/transformed/jetified-logback-android-2.0.0-runtime.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/home/runner/.gradle/caches/transforms-3/a4273385660df74fe1c198957b7912d5/transformed/jetified-logback-android-2.0.0/jars/classes.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    com.amaze.filemanager.filesystem.ssh.NetCopyClientConnectionPoolSshTest > testGetConnectionWithUrlHavingSubpath STANDARD_ERROR
        SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

VishalNehra avatar Jul 26 '22 10:07 VishalNehra

Pending tasks:

  • [x] Fix protocol spinner popup theme didn't follow system theme
  • [x] ~~Fix logback-android repeatedly appear in classpath, causing tests to fail on Github Actions~~
  • [x] Fix GetSshHostFingerprintTaskCallable throwing exception on first connect. Should be safe since it's the first time, but ugly
  • [x] Fix FTP connection creation deadlocks

TranceLove avatar Jul 26 '22 15:07 TranceLove

@VishnuSanal review here please

VishalNehra avatar Aug 03 '22 21:08 VishalNehra

Build test APK

VishnuSanal avatar Aug 04 '22 00:08 VishnuSanal

Okay, here you go, I created an FTPS server with Amaze on another Android device & tried to connect:

When using SSH/SFTP form the drop down:

I am getting the following on the LogCat - but no response on the app to notify that there was a failure.

W: [main                ] Error getting public key for URI [ssh://[email protected]:2211]androidx.room.EmptyResultSetException: Query returned empty result set: SELECT pub_key FROM sftp WHERE path = ?
at com.amaze.filemanager.database.daos.SftpEntryDao_Impl$12.call(SftpEntryDao_Impl.java:469)
at com.amaze.filemanager.database.daos.SftpEntryDao_Impl$12.call(SftpEntryDao_Impl.java:453)
at androidx.room.RxRoom$5.subscribe(RxRoom.java:229)
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)

It gets connected when I select Secure FTP from the drop down menu (after I tap Yes on the Verify Host dialog box.

But, no files gets loaded (see the logs below)

I: NOOP
W: [AsyncTask #2        ] Failure sending NOOP to FTP serverorg.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
        at org.apache.commons.net.ftp.FTP.getReply(FTP.java:314)
        at org.apache.commons.net.ftp.FTP.getReply(FTP.java:719)
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:514)
        at org.apache.commons.net.ftp.FTPSClient.sendCommand(FTPSClient.java:561)
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:635)
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:609)
        at org.apache.commons.net.ftp.FTP.noop(FTP.java:1865)
        at org.apache.commons.net.ftp.FTPClient.sendNoOp(FTPClient.java:3361)
        at com.amaze.filemanager.filesystem.ftp.FTPClientImpl.isConnectionValid(FTPClientImpl.kt:38)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.validate(NetCopyClientConnectionPool.kt:236)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientConnectionPool.getConnection(NetCopyClientConnectionPool.kt:91)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils.execute(NetCopyClientUtils.kt:68)
        at com.amaze.filemanager.filesystem.HybridFile.forEachChildrenFile(HybridFile.java:949)
        at com.amaze.filemanager.asynchronous.asynctasks.LoadFilesListTask.doInBackground(LoadFilesListTask.java:180)
        at com.amaze.filemanager.asynchronous.asynctasks.LoadFilesListTask.doInBackground(LoadFilesListTask.java:77)
        at android.os.AsyncTask$3.call(AsyncTask.java:394)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
D: Connection no longer usable. Reconnecting...
I: 220 Service ready for new user.
I: USER user
I: 331 User name okay, need password for user.
I: PASS pass
I: 230 User logged in, proceed.
I: PBSZ 0
I: 200 Command PBSZ okay.
I: PROT P
I: 200 Command PROT okay.
I: SYST
I: 215 UNIX Type: Apache FtpServer
I: PASV
I: 227 Entering Passive Mode (192,168,1,3,156,165)
I: LIST /
I: 550 Requested action not taken.

Now I switched off Secure Connection from FTP server & tried to connect using FTP from the drop down menu, it gets connected but no files gets loaded:

I: NOOP
I: 200 Command NOOP okay.
I: PASV
I: 227 Entering Passive Mode (192,168,1,3,144,237)
I: LIST /
I: 550 Requested action not taken.

Question: How to connect to an anonymous connection?

Next, I tried creating an FTP server with Material Files & Amaze was able to connect & lists files without any problems. Though, I wasn't able to open any file (see the logs below):

  • for music files
E: Writing exception to parcel
    java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://com.amaze.filemanager.debug/storage_root/ftp%3A/user%3Apass%40192.168.1.3%3A2211/Music/Music/%5BHD%5D%20Evergreen%20Jayachandran%20Nostalgic%20Devotional%20Songs%20Malayalam.mp3 from pid=16346, uid=10448 requires the provider be exported, or grantUriPermission()
        at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:820)
        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:684)
        at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:674)
        at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:548)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:328)
        at android.os.Binder.execTransactInternal(Binder.java:1166)
        at android.os.Binder.execTransact(Binder.java:1130)
  • for text files - opened with Amaze Text Editor
E: [main                ] Error on text readjava.io.IOException: Cannot read or write text file!
        at com.amaze.filemanager.asynchronous.asynctasks.texteditor.read.ReadTextFileCallable.loadFile(ReadTextFileCallable.java:152)
        at com.amaze.filemanager.asynchronous.asynctasks.texteditor.read.ReadTextFileCallable.call(ReadTextFileCallable.java:86)
        at com.amaze.filemanager.asynchronous.asynctasks.texteditor.read.ReadTextFileCallable.call(ReadTextFileCallable.java:46)
        at io.reactivex.internal.operators.flowable.FlowableFromCallable.subscribeActual(FlowableFromCallable.java:39)
        at io.reactivex.Flowable.subscribe(Flowable.java:14826)
        at io.reactivex.Flowable.subscribe(Flowable.java:14773)
        at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
  • image thumbnails are broken
  • I was able to create a file, but wasn't able to open it!

(will test more as soon when I can get vsftpd working on my PC!)

VishnuSanal avatar Aug 05 '22 10:08 VishnuSanal

@VishnuSanal you should also test copy files to and from the connection as well, also test delete / rename. and from your report it seem amaze server has some issue? @TranceLove cmiiw

I: 227 Entering Passive Mode (192,168,1,3,144,237) I: LIST / I: 550 Requested action not taken.

VishalNehra avatar Aug 06 '22 11:08 VishalNehra

@VishalNehra Okay

from your report it seem amaze server has some issue?

I think yes, or I must have missed something.

VishnuSanal avatar Aug 06 '22 11:08 VishnuSanal

@VishnuSanal I was using OnePlus 2 running LineageOS 18 (11) to run Amaze FTP server using the same codebase as this PR.

You may try using the same codebase for FTP server, and just share the internal storage space, on the safe side - to work around any SAF problems you may encounter.

TranceLove avatar Aug 06 '22 11:08 TranceLove

More pending tasks:

  • [x] FTP anonymous login support
  • [x] Handle ~~content:// URIs for~~ opening files on FTP server - (With use of CloudStreamer)

TranceLove avatar Aug 06 '22 13:08 TranceLove

I see test cases failing

com.amaze.filemanager.filesystem.ftp.FtpsHybridFileTest > testRenameFile FAILED
    java.lang.AssertionError: Unable to obtain connection.

     Was trying ***127.0.0.1:22222, FTP server is running at 127.0.0.1 and port 22222
        at org.junit.Assert.fail(Assert.java:89)
        at com.amaze.filemanager.filesystem.ftp.FtpHybridFileTest.setUp(FtpHybridFileTest.kt:124)
        at com.amaze.filemanager.filesystem.ftp.FtpsHybridFileTest.setUp(FtpsHybridFileTest.kt:67)

com.amaze.filemanager.filesystem.ftp.FtpsHybridFileTest > testMkdir FAILED
    java.lang.AssertionError: Unable to obtain connection.

     Was trying ***127.0.0.1:22222, FTP server is running at 127.0.0.1 and port 22222
        at org.junit.Assert.fail(Assert.java:89)
        at com.amaze.filemanager.filesystem.ftp.FtpHybridFileTest.setUp(FtpHybridFileTest.kt:124)
        at com.amaze.filemanager.filesystem.ftp.FtpsHybridFileTest.setUp(FtpsHybridFileTest.kt:67)

VishalNehra avatar Aug 11 '22 22:08 VishalNehra

Please rebase

VishalNehra avatar Aug 19 '22 00:08 VishalNehra

Even more pending tasks:

  • [x] Fix upload file to FTP server. When upload an image to Amaze FTP it is seen corrupt at the other side, size is different than original

TranceLove avatar Aug 20 '22 03:08 TranceLove

FTP server with Amaze (code from the same branch):

  • [ ] list files
    • [ ] ~didn't load files on some folders at first, but worked fine when I reopened Amaze~ okay, this is weird, when I open a directory at first, it lists files perfectly fine, but when I try to open a file, go back and open another directory, it doesn't list any files inside - it appears empty. if I do not try to open any files, this works fine
    • [ ] when I make a change on the source device & swipe refresh on the client device, the changes doesn't reflect
  • [ ] open files
    • [ ] image file (PS: no thumbnails too)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,144,231)
com.amaze.filemanager.debug I/System.out: MLST /DCIM/Screenshots/IMG_20200917_064856.jpg
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-23           ] Error executing template methodjava.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at org.apache.commons.net.ftp.FTP.getReplyString(FTP.java:745)
        at org.apache.commons.net.ftp.FTPClient.mlistFile(FTPClient.java:3012)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:485)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:483)
        at com.amaze.filemanager.filesystem.ftp.FtpClientTemplate.execute(FtpClientTemplate.kt:36)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.invoke$lambda-0(NetCopyClientUtils.kt:74)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.$r8$lambda$pNzOTgzPLyu7kmoWwk_ou75KcmY(Unknown Source:0)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1$$ExternalSyntheticLambda0.call(Unknown Source:4)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 250-
com.amaze.filemanager.debug I/System.out: Size=2042184;Modify=20211002182208.000;Type=file; IMG_20200917_064856.jpg
com.amaze.filemanager.debug I/System.out: 
com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed.
com.amaze.filemanager.debug I/System.out: MLST /DCIM/Screenshots/IMG_20200917_064856.jpg
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-23           ] Error executing template methodjava.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at org.apache.commons.net.ftp.FTP.getReplyString(FTP.java:745)
        at org.apache.commons.net.ftp.FTPClient.mlistFile(FTPClient.java:3012)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:485)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:483)
        at com.amaze.filemanager.filesystem.ftp.FtpClientTemplate.execute(FtpClientTemplate.kt:36)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.invoke$lambda-0(NetCopyClientUtils.kt:74)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.$r8$lambda$pNzOTgzPLyu7kmoWwk_ou75KcmY(Unknown Source:0)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1$$ExternalSyntheticLambda0.call(Unknown Source:4)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 250-
com.amaze.filemanager.debug I/System.out: Size=2042184;Modify=20211002182208.000;Type=file; IMG_20200917_064856.jpg
com.amaze.filemanager.debug I/System.out: 
com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed.
com.amaze.filemanager.debug I/System.out: PASV
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-23           ] Error executing template methodjava.lang.NullPointerException: The callable returned a null value
        at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug E/Parcel: Reading a NULL string not supported here.
  • [ ] document file - as said for listing files, the first file opens seemlessly, but when I try to open another one, it doesn't work (logs below)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,128,1)
com.amaze.filemanager.debug I/System.out: MLST /Documents/StatusReport.pdf
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-35           ] Error executing template methodjava.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at org.apache.commons.net.ftp.FTP.getReplyString(FTP.java:745)
        at org.apache.commons.net.ftp.FTPClient.mlistFile(FTPClient.java:3012)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:485)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:483)
        at com.amaze.filemanager.filesystem.ftp.FtpClientTemplate.execute(FtpClientTemplate.kt:36)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.invoke$lambda-0(NetCopyClientUtils.kt:74)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.$r8$lambda$pNzOTgzPLyu7kmoWwk_ou75KcmY(Unknown Source:0)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1$$ExternalSyntheticLambda0.call(Unknown Source:4)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 250-
com.amaze.filemanager.debug I/System.out: Size=118446;Modify=20220705155435.000;Type=file; StatusReport.pdf
com.amaze.filemanager.debug I/System.out: 
com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed.
com.amaze.filemanager.debug I/System.out: MLST /Documents/StatusReport.pdf
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-35           ] Error executing template methodjava.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at org.apache.commons.net.ftp.FTP.getReplyString(FTP.java:745)
        at org.apache.commons.net.ftp.FTPClient.mlistFile(FTPClient.java:3012)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:485)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:483)
        at com.amaze.filemanager.filesystem.ftp.FtpClientTemplate.execute(FtpClientTemplate.kt:36)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.invoke$lambda-0(NetCopyClientUtils.kt:74)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.$r8$lambda$pNzOTgzPLyu7kmoWwk_ou75KcmY(Unknown Source:0)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1$$ExternalSyntheticLambda0.call(Unknown Source:4)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 250-
com.amaze.filemanager.debug I/System.out: Size=118446;Modify=20220705155435.000;Type=file; StatusReport.pdf
com.amaze.filemanager.debug I/System.out: 
com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed.
com.amaze.filemanager.debug I/System.out: PASV
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-35           ] Error executing template methodjava.lang.NullPointerException: The callable returned a null value
        at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug E/Parcel: Reading a NULL string not supported here.

  • [ ] music files - the same problem - it works at first, but doesn't work on the next tries, let it be the same file or a different file
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 226 Transfer complete.
com.amaze.filemanager.debug I/System.out: MLST /Music/Music.mp3
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-22           ] Error executing template methodjava.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at org.apache.commons.net.ftp.FTP.getReplyString(FTP.java:745)
        at org.apache.commons.net.ftp.FTPClient.mlistFile(FTPClient.java:3012)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:485)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:483)
        at com.amaze.filemanager.filesystem.ftp.FtpClientTemplate.execute(FtpClientTemplate.kt:36)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.invoke$lambda-0(NetCopyClientUtils.kt:74)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.$r8$lambda$pNzOTgzPLyu7kmoWwk_ou75KcmY(Unknown Source:0)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1$$ExternalSyntheticLambda0.call(Unknown Source:4)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 250-
com.amaze.filemanager.debug I/System.out: Size=14145965;Modify=20220823182442.000;Type=file; Music.mp3
com.amaze.filemanager.debug I/System.out: 
com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed.
com.amaze.filemanager.debug I/System.out: MLST /Music/Music.mp3
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-22           ] Error executing template methodjava.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at org.apache.commons.net.ftp.FTP.getReplyString(FTP.java:745)
        at org.apache.commons.net.ftp.FTPClient.mlistFile(FTPClient.java:3012)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:485)
        at com.amaze.filemanager.filesystem.HybridFile$3.executeWithFtpClient(HybridFile.java:483)
        at com.amaze.filemanager.filesystem.ftp.FtpClientTemplate.execute(FtpClientTemplate.kt:36)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.invoke$lambda-0(NetCopyClientUtils.kt:74)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1.$r8$lambda$pNzOTgzPLyu7kmoWwk_ou75KcmY(Unknown Source:0)
        at com.amaze.filemanager.filesystem.ftp.NetCopyClientUtils$execute$exec$1$$ExternalSyntheticLambda0.call(Unknown Source:4)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug I/System.out: 250-
com.amaze.filemanager.debug I/System.out: Size=14145965;Modify=20220823182442.000;Type=file; Music.mp3
com.amaze.filemanager.debug I/System.out: 
com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed.
com.amaze.filemanager.debug I/System.out: PASV
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [Thread-22           ] Error executing template methodjava.lang.NullPointerException: The callable returned a null value
        at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
        at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
        at io.reactivex.Single.subscribe(Single.java:3603)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)

  • [ ] delete files
    • [ ] music file, image file, document file (single & multiple files of each type) - deletion works fine. if I haven't tried opening any files so far, the new list loads with updates changes - but if I have tried to open any files, it wnds up with an empty list when Amaze tries to reload the directory
    • [ ] folder - doesn't work - shows an operaiton unsuccessful dialog
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug D/OpenGLRenderer: endAllActiveAnimators on 0xb4000076063d0700 (RippleDrawable) with handle 0xb4000076153b6920
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug I/System.out: DELE /Pictures/Thumbnails/Abc
com.amaze.filemanager.debug I/System.out: 550 Not a valid file "/Pictures/Thumbnails/Abc".
com.amaze.filemanager.debug I/System.out: NOOP
com.amaze.filemanager.debug D/TestOverScroll: getScaledOverscrollDistance: b
com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay.
com.amaze.filemanager.debug I/System.out: PASV
com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,174,241)
com.amaze.filemanager.debug I/System.out: LIST /Pictures/Thumbnails
com.amaze.filemanager.debug D/ColorViewRootUtil: initSwipState, isDisplayCompatApp false
com.amaze.filemanager.debug D/ColorViewRootUtil: mScreenHeight 1600, mScreenWidth 720
com.amaze.filemanager.debug D/WindowManager: Add to mViews: DecorView@ffd8083[MainActivity],pkg= com.amaze.filemanager.debug
com.amaze.filemanager.debug I/System.out: 150 File status okay; about to open data connection.
com.amaze.filemanager.debug I/System.out: 226 Closing data connection.
```	
- [x] rename files - works perfectly fine!
	- [x] music file, image file, document file
	- [x] folder
- [x] write - works fine - both files & folders
- [ ] copy - 
	- [ ] folder - copies the folder, but no content inside

com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Thumbnails com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823184744.000;Type=dir; Thumbnails com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Thumbnails com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823184744.000;Type=dir; Thumbnails com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Thumbnails com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823184744.000;Type=dir; Thumbnails com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: PASV com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,169,65) com.amaze.filemanager.debug I/System.out: LIST /Pictures/Thumbnails com.amaze.filemanager.debug I/System.out: 150 File status okay; about to open data connection. com.amaze.filemanager.debug I/System.out: 226 Closing data connection.

- [x] single file - copying works fine (if I haven't tried to open any files before, else the operation unsuccessful dialog) - but as mentioned before, no files are listed after this operation - let it be the same folder or other folders
- [x] multiple files - copying works fine for one file & operation unsuccessful dialog for the rest

com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: PASV com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,153,189) com.amaze.filemanager.debug I/System.out: LIST /Pictures com.amaze.filemanager.debug I/System.out: 150 File status okay; about to open data connection. com.amaze.filemanager.debug I/System.out: 226 Closing data connection. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: PASV com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,165,123) com.amaze.filemanager.debug I/System.out: LIST /Pictures/Move com.amaze.filemanager.debug I/System.out: 150 File status okay; about to open data connection. com.amaze.filemanager.debug I/System.out: 226 Closing data connection.com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3907wy.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=3676;Modify=20220617041310.000;Type=file; 3907wy.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3931.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4031;Modify=20220617041310.000;Type=file; 3931.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug D/ViewRootImpl: enqueueInputEventMotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=579.0, y[0]=1073.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15913719, downTime=15913719, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: processMotionEvent MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=579.0, y[0]=1073.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15913719, downTime=15913719, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: dispatchPointerEvent handled=true, event=MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=579.0, y[0]=1073.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15913719, downTime=15913719, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: processMotionEvent MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=411.0, y[0]=1072.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15913800, downTime=15913719, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: dispatchPointerEvent handled=true, event=MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=411.0, y[0]=1072.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15913800, downTime=15913719, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/LeakCanary: Setting up flushing for Thread[queued-work-looper,5,main] com.amaze.filemanager.debug D/ViewRootImpl: enqueueInputEventMotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=489.0, y[0]=1155.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15914723, downTime=15914723, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: processMotionEvent MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=489.0, y[0]=1155.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15914723, downTime=15914723, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: dispatchPointerEvent handled=true, event=MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=489.0, y[0]=1155.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15914723, downTime=15914723, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: processMotionEvent MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=489.0, y[0]=1155.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15914753, downTime=15914723, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/ViewRootImpl[MainActivity]: dispatchPointerEvent handled=true, event=MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=489.0, y[0]=1155.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=15914753, downTime=15914723, deviceId=3, source=0x1002, displayId=0 } com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug I/chatty: uid=10270(com.amaze.filemanager.debug) glide-source-th identical 4 lines com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug W/Glide: Load failed for /storage/emulated/0/Pictures/3931.jpg with size [68x68] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 3 causes: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{FileInputStream->Object->Drawable}, LOCAL Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->GifDrawable->Drawable} Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->Bitmap->Drawable} Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->BitmapDrawable->Drawable} Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{ParcelFileDescriptor->Object->Drawable}, LOCAL There were 2 causes: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 2): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ParcelFileDescriptor->Bitmap->Drawable} There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA Cause (2 of 2): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ParcelFileDescriptor->BitmapDrawable->Drawable} There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{AssetFileDescriptor->Object->Drawable}, LOCAL There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{AssetFileDescriptor->Bitmap->Drawable} There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA com.amaze.filemanager.debug I/Glide: Root cause (1 of 3) java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:185) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92) at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever.setDataSource(Native Method) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:329) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:306) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:301) at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:173) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92)  at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70)  at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59)  at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)  at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)  at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:923)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)  com.amaze.filemanager.debug I/Glide: Root cause (2 of 3) java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:185) at com.bumptech.glide.load.resource.bitmap.BitmapDrawableDecoder.decode(BitmapDrawableDecoder.java:58) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92) at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever.setDataSource(Native Method) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:329) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:306) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:301) at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:173) at com.bumptech.glide.load.resource.bitmap.BitmapDrawableDecoder.decode(BitmapDrawableDecoder.java:58)  at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92)  at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70)  at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59)  at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)  at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)  at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:923)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)  com.amaze.filemanager.debug I/Glide: Root cause (3 of 3) java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:185) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92) at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever.setDataSource(Native Method) com.amaze.filemanager.debug I/Glide: at com.bumptech.glide.load.resource.bitmap.VideoDecoder$AssetFileDescriptorInitializer.initialize(VideoDecoder.java:296) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$AssetFileDescriptorInitializer.initialize(VideoDecoder.java:291) at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:173) ... 42 more com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug I/chatty: uid=10270(com.amaze.filemanager.debug) glide-source-th identical 2 lines com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug D/TestOverScroll: getScaledOverscrollDistance: b com.amaze.filemanager.debug D/ColorViewRootUtil: initSwipState, isDisplayCompatApp false com.amaze.filemanager.debug D/ColorViewRootUtil: mScreenHeight 1600, mScreenWidth 720 com.amaze.filemanager.debug D/TestOverScroll: getScaledOverscrollDistance: b com.amaze.filemanager.debug D/WindowManager: Add to mViews: DecorView@bb2f447[MainActivity],pkg= com.amaze.filemanager.debug com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug V/OplusZoomWindowDecorViewHelper: setLastReportedMergedConfiguration mZoomDisplayHeight: 1600 getDecorView.DecorView@bb2f447[MainActivity] com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3907wy.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=3676;Modify=20220617041310.000;Type=file; 3907wy.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3907wy.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=3676;Modify=20220617041310.000;Type=file; 3907wy.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3931.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4031;Modify=20220617041310.000;Type=file; 3931.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3931.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4031;Modify=20220617041310.000;Type=file; 3931.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3907wy.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=3676;Modify=20220617041310.000;Type=file; 3907wy.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3907wy.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=3676;Modify=20220617041310.000;Type=file; 3907wy.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3931.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4031;Modify=20220617041310.000;Type=file; 3931.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move/3931.jpg com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4031;Modify=20220617041310.000;Type=file; 3931.jpg com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: PASV com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,176,161) com.amaze.filemanager.debug I/System.out: RETR /Pictures/Move/3907wy.jpg com.amaze.filemanager.debug I/System.out: 150 File status okay; about to open data connection. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 226 Transfer complete. com.amaze.filemanager.debug I/System.out: PASV com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug E/c.a.f.f.f.NetCopyClientUtils: [AsyncTask #2 ] Error executing template methodjava.lang.NullPointerException: The callable returned a null value at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39) at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44) at io.reactivex.Single.subscribe(Single.java:3603) at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) com.amaze.filemanager.debug E/c.a.f.a.s.CopyService: [AsyncTask #2 ] Got exception checkout: ftp://user:[email protected]:2211/Pictures/Move/3931.jpg com.amaze.filemanager.debug E/MultiApp.Impl: OplusMultiAppImpl com.amaze.filemanager.debug D/LeakCanary: Setting up flushing for Thread[android.bg,5,main] com.amaze.filemanager.debug D/MediaScannerConnection: Scanned /storage/emulated/0/Pictures/Temp/3907wy.jpg to content://media/external_primary/images/media/106103 com.amaze.filemanager.debug D/TestOverScroll: getScaledOverscrollDistance: b com.amaze.filemanager.debug D/MediaScannerConnection: Scanned /storage/emulated/0/Pictures/Temp/3931.jpg to content://media/external_primary/images/media/106104 com.amaze.filemanager.debug D/ColorViewRootUtil: initSwipState, isDisplayCompatApp false com.amaze.filemanager.debug D/ColorViewRootUtil: mScreenHeight 1600, mScreenWidth 720 com.amaze.filemanager.debug D/WindowManager: Add to mViews: DecorView@4cb8f7[MainActivity],pkg= com.amaze.filemanager.debug com.amaze.filemanager.debug W/lemanager.debu: Accessing hidden field Landroid/app/ActivityThread;->mServices:Landroid/util/ArrayMap; (greylist, reflection, allowed) com.amaze.filemanager.debug D/LeakCanary: Watching instance of com.amaze.filemanager.asynchronous.services.CopyService (com.amaze.filemanager.asynchronous.services.CopyService received Service#onDestroy() callback) with key 1e46c3da-d93c-48fb-985a-a26080950618 com.amaze.filemanager.debug V/OplusZoomWindowDecorViewHelper: setLastReportedMergedConfiguration mZoomDisplayHeight: 1600 getDecorView.DecorView@4cb8f7[MainActivity] com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug I/chatty: uid=10270(com.amaze.filemanager.debug) glide-source-th identical 2 lines com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug D/skia: --- Failed to create image decoder with message 'unimplemented' com.amaze.filemanager.debug W/Glide: Load failed for /storage/emulated/0/Pictures/Temp/3931.jpg with size [68x68] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 3 causes: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{FileInputStream->Object->Drawable}, LOCAL Cause (1 of 3): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->GifDrawable->Drawable} Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->Bitmap->Drawable} Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{FileInputStream->BitmapDrawable->Drawable} Cause (2 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{ParcelFileDescriptor->Object->Drawable}, LOCAL There were 2 causes: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 2): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ParcelFileDescriptor->Bitmap->Drawable} There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA Cause (2 of 2): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ParcelFileDescriptor->BitmapDrawable->Drawable} There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA Cause (3 of 3): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{AssetFileDescriptor->Object->Drawable}, LOCAL There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{AssetFileDescriptor->Bitmap->Drawable} There was 1 cause: java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA com.amaze.filemanager.debug I/Glide: Root cause (1 of 3) java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:185) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92) at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever.setDataSource(Native Method) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:329) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:306) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:301) at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:173) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92)  at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70)  at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59)  at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)  at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)  at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:923)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)  com.amaze.filemanager.debug I/Glide: Root cause (2 of 3) java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:185) at com.bumptech.glide.load.resource.bitmap.BitmapDrawableDecoder.decode(BitmapDrawableDecoder.java:58) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92) at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever.setDataSource(Native Method) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:329) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:306) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$ParcelFileDescriptorInitializer.initialize(VideoDecoder.java:301) at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:173) at com.bumptech.glide.load.resource.bitmap.BitmapDrawableDecoder.decode(BitmapDrawableDecoder.java:58)  at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92)  at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70)  at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59)  at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)  at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)  at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434)  at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390)  at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148)  at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145)  at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52)  at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)  at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)  at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)  at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)  at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)  at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:923)  at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)  com.amaze.filemanager.debug I/Glide: Root cause (3 of 3) java.io.IOException: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:185) at com.bumptech.glide.load.engine.DecodePath.decodeResourceWithList(DecodePath.java:92) at com.bumptech.glide.load.engine.DecodePath.decodeResource(DecodePath.java:70) at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:59) at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76) at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57) at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:524) at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:488) at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:474) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:426) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:434) at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:390) at com.bumptech.glide.load.engine.SourceGenerator.onDataReadyInternal(SourceGenerator.java:148) at com.bumptech.glide.load.engine.SourceGenerator$1.onDataReady(SourceGenerator.java:76) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onDataReady(MultiModelLoader.java:145) at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:52) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63) at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393) Caused by: java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA at android.media.MediaMetadataRetriever.setDataSource(Native Method) com.amaze.filemanager.debug I/Glide: at com.bumptech.glide.load.resource.bitmap.VideoDecoder$AssetFileDescriptorInitializer.initialize(VideoDecoder.java:296) at com.bumptech.glide.load.resource.bitmap.VideoDecoder$AssetFileDescriptorInitializer.initialize(VideoDecoder.java:291) at com.bumptech.glide.load.resource.bitmap.VideoDecoder.decode(VideoDecoder.java:173) ... 42 more


- [ ] move - same as copy. (FYI: the source file doesn't get deleted in the case of failures)
	- [ ] folder - copies the folder, but no content inside

com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move com.amaze.filemanager.debug D/LeakCanary: Setting up flushing for Thread[queued-work-looper,5,main] com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823185524.000;Type=dir; Move com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823185524.000;Type=dir; Move com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823185524.000;Type=dir; Move com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823185524.000;Type=dir; Move com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: MLST /Pictures/Move com.amaze.filemanager.debug I/System.out: 250- com.amaze.filemanager.debug I/System.out: Size=4096;Modify=20220823185524.000;Type=dir; Move com.amaze.filemanager.debug I/System.out: com.amaze.filemanager.debug I/System.out: 250 Requested file action okay, completed. com.amaze.filemanager.debug I/System.out: NOOP com.amaze.filemanager.debug I/System.out: 200 Command NOOP okay. com.amaze.filemanager.debug I/System.out: PASV com.amaze.filemanager.debug I/System.out: 227 Entering Passive Mode (192,168,1,3,129,131) com.amaze.filemanager.debug I/System.out: LIST /Pictures/Move com.amaze.filemanager.debug I/System.out: 150 File status okay; about to open data connection. com.amaze.filemanager.debug I/System.out: 226 Closing data connection.

- [x] single file - moving works fine (if I haven't tried to open any files before, else the operation unsuccessful dialog) - but as mentioned before, no files are listed after this operation - let it be the same folder or other folders
- [x] multiple files - copying works fine for one file & operation unsuccessful dialog for the rest

this is for an FTP connection with username/password - please let me know if I should repeat this with an SFTP connection and/or an anonymous connection too. 

done on a hurry, cuz I have exams these days, please let me know if I missed something, will look into it by the weekend. (:

VishnuSanal avatar Aug 23 '22 19:08 VishnuSanal

Updated to fix copy multiple files problem, upload and download.

Pending tasks per @VishnuSanal reviewed:

  • [x] Create directory hierarchy if missing when uploading folder to FTP server
  • [x] Fix launch remote file via CloudStreamer - don't know why CloudStreamer won't continue reading

And yes, no thumbnail loading for FTP files yet. Still figuring a way out, but perhaps will need triaging if 3.8 release is imminent.

TranceLove avatar Aug 26 '22 17:08 TranceLove

Known problem: unable to recover connection if remote FTP server was unavailable. Will crash app with NPE.

(May triage)

TranceLove avatar Aug 27 '22 03:08 TranceLove

Self note: CloudStreamer got a b0rken pipe when streaming from FTP server.

2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err: java.net.SocketException: Broken pipe
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at java.net.SocketOutputStream.socketWrite0(Native Method)
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:117)
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at java.net.SocketOutputStream.write(SocketOutputStream.java:161)
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at com.amaze.filemanager.fileoperations.filesystem.cloud.CloudStreamServer$HTTPSession.sendResponse(CloudStreamServer.java:757)
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at com.amaze.filemanager.fileoperations.filesystem.cloud.CloudStreamServer$HTTPSession.handleResponse(CloudStreamServer.java:470)
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at com.amaze.filemanager.fileoperations.filesystem.cloud.CloudStreamServer$HTTPSession.run(CloudStreamServer.java:319)
2022-08-27 16:57:13.375 9062-9142/com.amaze.filemanager.debug W/System.err:     at java.lang.Thread.run(Thread.java:920)

TranceLove avatar Aug 27 '22 08:08 TranceLove

@TranceLove Cloud steamer needs working. I'm using it in amaze utilities and it can't stream videos correctly on Android TV. Basically it's a continuous stream and doesn't support skipping / seeking. An alternative is to download file to cache first, like how we're doing for Google drive / other cloud storages.

VishalNehra avatar Aug 27 '22 09:08 VishalNehra

@TranceLove Cloud steamer needs working. I'm using it in amaze utilities and it can't stream videos correctly on Android TV. Basically it's a continuous stream and doesn't support skipping / seeking. An alternative is to download file to cache first, like how we're doing for Google drive / other cloud storages.

Of course. Need to figure that out - I think it's problem at my side though.

TranceLove avatar Aug 27 '22 09:08 TranceLove

The above "file won't launch from CloudStreamer over FTP problem" was due to this brilliant code, which Amaze FTP server uses, since my shared folder is named something like [documents] design documents.

https://github.com/apache/mina-ftpserver/blob/ftpserver-1.1.1/core/src/main/java/org/apache/ftpserver/command/impl/listing/ListArgumentParser.java#L106-L110

    private static boolean containsPattern(String file) {
        return file.indexOf('*') > -1 || file.indexOf('?') > -1
                || file.indexOf('[') > -1;
    }

Different from Filezilla which will cd into the directory then retrieve the file stream, wherever we use full path and path name contains [ we will be hitting this.

Pending

  • [x] retrieve file info/stream via CWD -> RETR -> CDUP method
  • [x] regression when pasting one folder out to FTP server, found on SDK 28

TranceLove avatar Aug 27 '22 16:08 TranceLove

Known problem: delete directory recursively on FTP server will end in failure, as original FTP command set doesn't support this. Need to implement logic to walk down a directory hierarchy for deleting the directory tree recursively.

(May triage)

TranceLove avatar Aug 28 '22 15:08 TranceLove

UIUX problem that may not be triaged:

  • due to FTP actions must be executed in single thread sequentially, during file copy the UI looks unresponsive as file lists cannot be refreshed until the underlying I/O finishes. May want to get the loading screen mask back - this go against Android's recommendation though.
  • file list doesn't refresh if remote side had been modified. Cache problem?

TranceLove avatar Aug 28 '22 23:08 TranceLove

Yes, that seems to be cache problem. Isn't caching disabled for smb / ftp clients 🤔 Does manual list refresh fix the caching and shows up new files?

VishalNehra avatar Aug 29 '22 09:08 VishalNehra

Pending actions with regards to regressions:

  • [x] Migrate password encoding method to be URI friendly (WIP)
  • [x] Codacy code documentation reports

Sorry but have to do this... I got enough trouble doing string extractions when I realize android.util.Base64 can do URL safe encoding.

TranceLove avatar Aug 30 '22 16:08 TranceLove

The regression on SDK28 that copying a folder of files stopped after copying the first one still continues after 2bbda37.

TranceLove avatar Aug 31 '22 15:08 TranceLove

bf4f5f2 should work on all Androids now. Excessive HybridFile.getFtpFile() is result of its design, don't wanna break this for another round of night shifts :(

Pending tasks again... after the above big hurdle

  • [x] Fix UIUX problem on connection failures, maybe want to return to previous file list
  • [ ] Simplify ConnectionInfo class's logic in extracting fields, after encrypted passwords are now encoded to URI friendly base64(can triage)

TranceLove avatar Sep 02 '22 17:09 TranceLove

Would like you to take a look at e7f8c5e first. ConnectionInfo refactoring can be triaged.

TranceLove avatar Sep 03 '22 16:09 TranceLove

@VishnuSanal can you test from your end

VishalNehra avatar Sep 05 '22 07:09 VishalNehra

I see only 2 major issues before we merge this:

  1. Can't go back when i press back button except when I'm on root (in which case it goes back to internal storage which is fine).
  2. Copying from one directory in ftp server to another directory
2022-09-06 01:56:46.941 26051-26160/com.amaze.filemanager.debug E/c.a.f.a.s.CopyService: [AsyncTask #3        ] Got exception checkout: ftp://192.168.0.106:2211/amap/openamaplocationsdk/alsn.dbjava.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.OutputStream.close()' on a null object reference
        at java.io.FilterOutputStream.close(FilterOutputStream.java:191)
        at java.nio.channels.Channels$WritableByteChannelImpl.implCloseChannel(Channels.java:472)
        at java.nio.channels.spi.AbstractInterruptibleChannel.close(AbstractInterruptibleChannel.java:116)
        at com.amaze.filemanager.filesystem.files.GenericCopyUtil.doCopy(GenericCopyUtil.java:413)
        at com.amaze.filemanager.filesystem.files.GenericCopyUtil.startCopy(GenericCopyUtil.java:244)
        at com.amaze.filemanager.filesystem.files.GenericCopyUtil.copy(GenericCopyUtil.java:316)
        at com.amaze.filemanager.asynchronous.services.CopyService$DoInBackground$Copy.copyFiles(CopyService.java:517)
        at com.amaze.filemanager.asynchronous.services.CopyService$DoInBackground$Copy.execute(CopyService.java:403)
        at com.amaze.filemanager.asynchronous.services.CopyService$DoInBackground.doInBackground(CopyService.java:267)
        at com.amaze.filemanager.asynchronous.services.CopyService$DoInBackground.doInBackground(CopyService.java:234)
        at android.os.AsyncTask$3.call(AsyncTask.java:394)
        at java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
        at java.lang.Thread.run(Thread.java:1012)
    	Suppressed: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.OutputStream.write(byte[], int, int)' on a null object reference
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
        at java.io.FilterOutputStream.close(FilterOutputStream.java:182)
    		... 15 common frames omitted
  1. Cut paste has same issue

VishalNehra avatar Sep 05 '22 20:09 VishalNehra