Nextcloud-deck: Loading indicator is shown indefinitely and no synchronization

Created on 5 Sep 2020  ยท  46Comments  ยท  Source: stefan-niedermann/nextcloud-deck

Android deck version: 1.9.7
Server deck version: 1.0.5

We often have the problem that when editing a card and navigating back to the card overview, the loading indicator is shown indefinitely but apparently no synchronization is happening. Only when forcefully closing the app and reopening it the edits of other persons are shown.

help wanted โ” needs info ๐Ÿž bug ๐Ÿ“ฑ UI / UX

Most helpful comment

Working superfast and without any problems with the new 1.13!
๐Ÿ‘

All 46 comments

The sync is currently pretty slow because all the data have to be transferred completely. A little server hickup might interrupt this process. We are currently working on ETag support which will drastically speed up the sync and save much data transfer. If you agree, I propose to close this as it is nearly impossible to debug and would like to ask you to report the problem if it still occurs with the app once you read ETag-support in the release notes?

Yes, i totally agree that it's almost impossible to debug as is. I think before closing this I'll look for something in the logs?

Yeah, feel free to install an ADB-app to read the debug logs ๐Ÿ™‚

I have exactly this problem when I open the deck app and do a reload. The app was running in the background.
Killing the app "solves" this issue. Its not a performance issue, I only have some cards, after killing the app the sync only takes 1-2 secs

I have the same problem, but I think that there could be potentially a bug. I watched the ADB logcat while refreshing the app.

There is a lot of output for each request the app does. This stops after half a minute, but the loading spinner is still visible. The spinner keeps showing for at least 10min. The view of the board seems up to date.

This could mean that the loading spinner is not notified about the finished sync.

It might be caused by the queueing mechanism. If one opens the app it will always perform a sync (1). If one does a pull to refresh, a second sync (2) is triggered, but it will wait until the (1) first sync finished and then start.

Maybe there is some kind of conflict under special circumstances which prevents the "end" event to reach the UI or so. ๐Ÿค”

I will take a look at the logcat logs in the following days/weeks

@maxammann totally appreciated! It's hard to fix those kind of bugs blindly. Thanks for your help and thanks for the report @wiwie !

Here is a log, which shows a problem. The server responds with a 304 in the last line. The loading spinner does not disappear and a later refresh is not possible.

09-12 10:57:30.826  8023  8023 D DeckLog : --- Read: shared_preference_theme_main
09-12 10:57:30.826  8023  8023 I chatty  : uid=10200(it.niedermann.nextcloud.deck) identical 2 lines
09-12 10:57:30.826  8023  8023 D DeckLog : --- Read: shared_preference_theme_main
09-12 10:57:30.838  8023  8023 E RecyclerView: No adapter attached; skipping layout
09-12 10:57:30.849  8023  8023 D DeckLog : --- Read: shared_preference_last_account | 2
09-12 10:57:30.849  8023  8023 I DeckLog : Syncing the current account on app start
09-12 10:57:30.850  8023  8023 D DeckLog : --- Write: shared_preference_last_account | 2
09-12 10:57:30.851  8023  8023 D DeckLog : --- Read: shared_preference_last_board_for_account_2 | 24
09-12 10:57:30.851  8023  8055 D DeckLog : Got Network connection
09-12 10:57:30.853  8023  8023 V DeckLog : Displaying maintenance mode info for [email protected]: false
09-12 10:57:30.856  8023  8023 D DeckLog : --- Write: shared_preference_theme_main | -13134676
09-12 10:57:30.856  8023  8023 D DeckLog : --- Write: shared_preference_last_board_for_account_2 | 24
09-12 10:57:30.861  8023  8023 D DeckLog : --- Read: shared_preference_last_stack_for_account_and_board2_24 | 137
09-12 10:57:30.877  8023  8023 D DeckLog : --- Read: shared_preference_theme_main
09-12 10:57:30.881  8023  8023 D DeckLog : --- Read: shared_preference_theme_main
09-12 10:57:30.885  8023  8023 D DeckLog : --- Read: shared_preference_theme_main
09-12 10:57:30.891  8023  8023 D DeckLog : --- Write: shared_preference_last_stack_for_account_and_board_2_24 | 137
09-12 10:57:40.736  8023  8023 I DeckLog : Clearing Glide memory cache
09-12 10:57:40.738  8023 21536 I DeckLog : Clearing Glide disk cache
09-12 10:57:40.742  8023 21538 D com.nextcloud.android.sso.api.NetworkRequest: [connectApiWithBackoff] connectApiWithBackoff() called from Thread: [Thread-206]
09-12 10:57:40.743  8023 21537 D com.nextcloud.android.sso.api.NextcloudRetrofitServiceMethod: NextcloudRetrofitServiceMethod() called with: apiEndpoint = [/ocs/v2.php/], method = [public abstract io.reactivex.Observable it.niedermann.nextcloud.deck.api.NextcloudServerAPI.getCapabilities(java.lang.String)]
09-12 10:57:40.743  8023 21537 D com.nextcloud.android.sso.api.NextcloudRetrofitServiceMethod: invoke call to api using observable com.nextcloud.android.sso.api.ParsedResponse<it.niedermann.nextcloud.deck.model.ocs.Capabilities>
09-12 10:57:40.744  8023 21539 V com.nextcloud.android.sso.api.AidlNetworkRequest: [waitForApi] - api not ready yet.. waiting [RxNewThreadScheduler-1132]
09-12 10:57:40.751  8023  8023 D com.nextcloud.android.sso.api.NetworkRequest: [connectApiWithBackoff] trying to connect..
09-12 10:57:40.751  8023  8023 D com.nextcloud.android.sso.api.AidlNetworkRequest: [connect] Binding to AccountManagerService for type [nextcloud]
09-12 10:57:40.751  8023  8023 D com.nextcloud.android.sso.api.NetworkRequest: [connect] connect() called [main] Account-Type: [nextcloud]
09-12 10:57:40.751  8023  8023 D com.nextcloud.android.sso.api.AidlNetworkRequest: [connect] Component name is: [com.nextcloud.client]
09-12 10:57:40.752  8023  8023 D com.nextcloud.android.sso.api.AidlNetworkRequest: [connect] Bound to AccountManagerService successfully
09-12 10:57:40.752  8023  8023 D com.nextcloud.android.sso.api.AidlNetworkRequest: [onServiceConnected] called from Thread: [main] with IBinder [ComponentInfo{com.nextcloud.client/com.owncloud.android.services.AccountManagerService}]: android.os.BinderProxy@66f7c1
09-12 10:57:40.759  8023 21540 D com.nextcloud.android.sso.api.AidlNetworkRequest: copy data from service finished
09-12 10:57:41.063  8023 21539 V DeckLog : HTTP Status 304: There haven't been any changes on the server side for this request.

I have exactly this problem when I open the deck app and do a reload. The app was running in the background.
Killing the app "solves" this issue. Its not a performance issue, I only have some cards, after killing the app the sync only takes 1-2 secs

I'm also seeing this.

If you need any further logs etc let me know.

I also often experience this. I close the app, start it again, swip down to start a sync, and the cards don't sync. The only workaround I found is to force-stop the app from the system settings and delete the cache. Afterwards it syncs initially and then the loading indicator keeps spinning forever again.
This make the app pretty unusable for me.
Is there any issue to track the etag progress ?

Nevermind, found these related etag issues: android app which relies on the server app. Fingers crossed and thanks anyway for this nice app !

ETags have been implemented and will be shipped with 1.13.0. They require at least version 1.2.0 of the server app. This should completely solve this issue - please feel free to create a new or reopen this issue if the problem appears again with 1.13.0 (or higher) of the Android app. (Staged Roll-Out will start soon...)

Working superfast and without any problems with the new 1.13!
๐Ÿ‘

@stefan-niedermann
With 1.2.3 the problem is back.
Could I provide more informations to help?

@stefan-niedermann
Found the reason for the my sync problem.
Add 2 accounts and sync, delete the deck app on one of the the two servers. Now the sync doesn't work for both added accounts.

@jakobroehrl I only use one account and did not have problems the past months. Seems like the issue you are experiencing is a different one. I think you should create a separate issue.

This is still not solved with latest v1.14.6. I had this for-ever spinning wheel multiple time in the last days.
When I force-stop the app and start again, it syncs very fast.

If I understand this issue correctly is the problem here that the Deck app automatically starts the synchronisation when the app is started (and maybe also in some other situations). If you then pull to refresh manually, it justs shows the spinner forever because there is probably some race condition between the manual and automatic refresh. How this could be solved is to show the spinner always if the synchronisation happens so that you don't trigger a manual refresh, when a refresh is already happening in the background.
@stefan-niedermann what do you think abour this idea?

If I understand this issue correctly is that the Deck app automatically starts the synchronisation when the app is started.

This is correct.

How this could be solved is to show the spinner always if the synchronisation happens so that you don't trigger a manual refresh, when a refresh is already happening in the background.

Actually we are queuing the synchronization attempts - so it will be filled at start with the startup-sync. If one then triggers a manual sync, it will be queued and executed after the startup-sync has been finished. I agree there might be some race condition - the question is whether it is only a visual issue or a sync issue.

@desperateCoder i guess the cleanest way to fix any visual glitches is to expose a LiveData<boolean> isSynchronizationActive which i subscribe to in the UI instead of handling the state manually. What do you think?

Could you maybe reopen this issue until an answer from @desperateCoder is received so that this doesn't get lost?

As answered privately to @stefan-niedermann, I'd suggest a different approach: since the app is synchronizing at startup anyways, I'd say just show the spinner right from the start. This would prevent the users from pulling down to refresh.

IMHO this is just a workaround for now, I'd suggest investigating the root cause of the problem I suspect is the handling of the callback of the sync, but there are some symptoms that negate this theory tho.

@stefan-niedermann whats your opinion on that?

Okay, i finally found the one scenario when the loading indicator is shown indefinitely. This can be caused by a not caught exception when refreshing the capabilities. In case of an error, it was silently logged and the spinner was not stopped.

I fixed this by hiding the spinner properly now and display an exception dialog with the information about what went actually wrong.

I closed this issue because we now can tackle the actual problems (which might be different for each and every one of the people who reported the issue) and the actual issue ("Loading indicator is shown indefinitely") is solved.
Please feel free to report the problems you are facing in separate new issues as soon as you can see them.

This fix will be in version 1.15.6 and soon released on F-Droid (Play Store will take more time). I will also post here a link as soon as the build server has finished the build, so whoever doesn't want to wait but wants to test the new version will be able to install it in parallel to the currently released versions.

I've tried the dev build, but I don't see any difference. The spinner stays, there is no sync, and I don't get any error message.
So far, this has only happend after I changed some cards on the server.
Can I provide any logs? (I should have a working adb)

Can I provide any logs?

Woah, that would be awesome! I'd check if there is enough logging beforehand though, I'll let you know!

@birefringence Here is a build with excessive logging. Would you please install it?
Just wait 10-20 seconds after the spinner appears and then press the bug button in the bottom right corner. The logs should be copied directly into your clipboard. Please make sure to remove any sensitive data and then send it to [email protected] or even better post it here (if you can).

Thanks! I've installed the build with logging. However, I haven't been able to trigger this problem anymore since then, although I've been editing and syncing cards all evening. I'll keep using this build for now and see if hit it again.

@creywood @varac @maxammann and every other who upvoted the issue: maybe one of you can verify whether or not the spinner issue was solved with this build and gather us some logs if not with this build?

I've tried the dev build, but I don't see any difference

@birefringence i am wondering if you, by any chance, didn't launch / use the dev build but the released app maybe?

Ah well, I think I experienced again. But I couldn't get the log, because this happened when I hit the button:
```
Full Crash:

App Version: 1.15.6
App Version Code: 1015006
App Flavor: dev

Files App Version Code: 30150190


OS Version: 4.4.205-gf0aab43(cabd69955f)
OS API Level: 29
Device: H3113
Manufacturer: Sony
Model (and Product): H3113 (H3113)


java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 9016864 bytes
at android.content.ClipboardManager.setPrimaryClip(ClipboardManager.java:108)
at it.niedermann.android.util.ClipboardUtil.copyToClipboard(ClipboardUtil.kt:26)
at it.niedermann.android.util.ClipboardUtil.copyToClipboard(ClipboardUtil.kt:15)
at it.niedermann.nextcloud.deck.ui.MainActivity.lambda$onCreate$8$MainActivity(MainActivity.java:329)
at it.niedermann.nextcloud.deck.ui.-$$Lambda$MainActivity$TS-zapqfS60RYdR-AO2LkTGJi0s.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7259)
at android.view.View.performClickInternal(View.java:7236)
at android.view.View.access$3600(View.java:801)
at android.view.View$PerformClick.run(View.java:27892)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
Caused by: android.os.TransactionTooLargeException: data parcel size 9016864 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:511)
at android.content.IClipboard$Stub$Proxy.setPrimaryClip(IClipboard.java:288)
at android.content.ClipboardManager.setPrimaryClip(ClipboardManager.java:106)
... 15 more

Shit! The log was too long and could not be copied to the clipboard. Let me think about what else we can do to get those logs.

So i made another build which has a few enhancements:

  1. The log will no longer be copied to the clipboard but shared as a file (โ†’ no length limitation). You should be able to share the log file with any other app (I tested E-Mail, Telegram and Nextcloud)
  2. To activate the logging, go to the settings and enable "Debug logs"
  3. To copy the collected logs, use the bug icon in the sidebar header (only visible after step 2)
    grafik

Ok, got one. I hope I didn't redact it too much. As far as I can tell from the server logs, the app didn't reach the server when trying manually refresh by pulling.
I sent an e-mail since I can't attach files here (or at least I don't know how).

Interesting. SyncManager#refreshCapabilities() does never call the onResponse or the onError callback.

@desperateCoder i think we are missing a generic else case here for the NextcloudHttpRequestFailedException in https://github.com/stefan-niedermann/nextcloud-deck/blob/845cbaf31e357af7f3d80b3bfb2676fa2ccfb935/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java#L451

What do you think?

Id suspect a missing callback. before this line:

https://github.com/stefan-niedermann/nextcloud-deck/blob/845cbaf31e357af7f3d80b3bfb2676fa2ccfb935/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java#L458

Why doesn't that end in an infinite loop tho? I'll have a look at lunch break... Thanks for the research!

@birefringence we had two blind spots here, we just fixed them.

Please try this one: (๏ฝกโ—•โ€ฟโ€ฟโ—•๏ฝก)

This time there shoud (TM) come up an error, in case something goes wrong at sync. Maybe that's already the solution to the problem, but yeah, lets see...

Thanks for the research and testing btw, this helps us a LOT!

Well, the spinner now does disappear, at least after I switch away from the app and come back. But there is still no sync. Here is the log:
```
2021-03-23 18:17:27 INFO (SyncWorker.java:39) doWork() โ†’ Starting background synchronization
2021-03-23 18:17:31 VERBOSE (SyncManager.java:451) onError() โ†’ HTTP Status 304
2021-03-23 18:17:31 VERBOSE (SyncManager.java:464) onError() โ†’ โ†’ There haven't been any changes on the server side for this request.
2021-03-23 18:17:31 DEBUG (SyncHelper.java:86) onError() โ†’ [BoardDataProvider] ETags do match! skipping this one.
2021-03-23 18:17:31 INFO (SyncManager.java:287) respondCallbacksAfterSync() โ†’ SyncQueue: responding sync for 1 queued callbacks!
2021-03-23 18:17:31 INFO (SyncWorker.java:43) doWork() โ†’ Finishing background synchronization with result false
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:42 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:43 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:32:50 INFO (SyncWorker.java:39) doWork() โ†’ Starting background synchronization
2021-03-23 18:42:15 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:42:15 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:42:15 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:42:15 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:42:15 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:42:16 DEBUG (BrandingUtil.java:56) saveBrandColors() โ†’ --- Write: shared_preference_theme_main | -16742459
2021-03-23 18:42:16 DEBUG (DeckApplication.java:106) saveCurrentBoardId() โ†’ --- Write: shared_preference_last_board_for_account_1 | 1
2021-03-23 18:42:16 DEBUG (DeckApplication.java:128) readCurrentStackId() โ†’ --- Read: shared_preference_last_stack_for_account_and_board1_1 | 20
2021-03-23 18:42:16 INFO (SyncWorker.java:39) doWork() โ†’ Starting background synchronization
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:18 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:42:49 DEBUG (MainActivity.java:914) onLost() โ†’ Network lost
2021-03-23 18:43:46 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:43:46 DEBUG (DeckApplication.java:100) readCurrentAccountId() โ†’ --- Read: shared_preference_last_account | 1
2021-03-23 18:43:46 INFO (MainActivity.java:224) lambda$onCreate$15$MainActivity() โ†’ Syncing the current account on app start
2021-03-23 18:43:46 DEBUG (MainActivity.java:897) onAvailable() โ†’ Got Network connection
2021-03-23 18:43:46 DEBUG (DeckApplication.java:92) saveCurrentAccountId() โ†’ --- Write: shared_preference_last_account | 1
2021-03-23 18:43:46 DEBUG (DeckApplication.java:114) readCurrentBoardId() โ†’ --- Read: shared_preference_last_board_for_account_1 | 1
2021-03-23 18:43:46 VERBOSE (MainActivity.java:300) lambda$onCreate$7$MainActivity() โ†’ Displaying maintenance mode info for [email protected]/nextcloud: false
2021-03-23 18:43:47 DEBUG (BrandingUtil.java:56) saveBrandColors() โ†’ --- Write: shared_preference_theme_main | -16742459
2021-03-23 18:43:47 DEBUG (DeckApplication.java:106) saveCurrentBoardId() โ†’ --- Write: shared_preference_last_board_for_account_1 | 1
2021-03-23 18:43:47 DEBUG (DeckApplication.java:128) readCurrentStackId() โ†’ --- Read: shared_preference_last_stack_for_account_and_board1_1 | 20
2021-03-23 18:43:47 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:43:47 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:43:47 DEBUG (BrandingUtil.java:43) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-03-23 18:43:47 DEBUG (DeckApplication.java:120) saveCurrentStackId() โ†’ --- Write: shared_preference_last_stack_for_account_and_board_1_1 | 20
2021-03-23 18:43:57 INFO (MainActivity.java:380) lambda$onCreate$14$MainActivity() โ†’ > Triggered manual refresh
2021-03-23 18:43:57 INFO (MainActivity.java:385) lambda$onCreate$14$MainActivity() โ†’ Clearing Glide memory cache
2021-03-23 18:43:57 INFO (MainActivity.java:395) lambda$onCreate$14$MainActivity() โ†’ > refreshCapabilities()
2021-03-23 18:43:57 INFO (MainActivity.java:388) lambda$onCreate$13$MainActivity() โ†’ Clearing Glide disk cache
2021-03-23 18:43:57 INFO (MainActivity.java:512) refreshCapabilities() โ†’ > refreshCapabilities()
2021-03-23 18:43:57 INFO (MainActivity.java:397) lambda$onCreate$14$MainActivity() โ†’ > mainViewModel.synchronize()
2021-03-23 18:43:57 VERBOSE (SyncManager.java:451) onError() โ†’ HTTP Status 304
2021-03-23 18:43:57 VERBOSE (SyncManager.java:464) onError() โ†’ โ†’ There haven't been any changes on the server side for this request.
2021-03-23 18:43:57 INFO (MainActivity.java:516) onResponse() โ†’ > refreshCapabilities() โ†’ onResponse
2021-03-23 18:43:57 INFO (MainActivity.java:521) onResponse() โ†’ > refreshCapabilities() โ†’ onResponse โ†’ maintenance enabled: true

I think we're coming closer. Give it another try, please (And please don't disable the new ETag setting :smile:)

But there is still no sync.

Can you elaborate please a bit more what "there is still no sync" does mean for you? The sync doesn't work at all? It does only work in one direction (e. g. Android -> Cloud)? It does only not work in specific cases (like adding an attachment or something else via the Web UI)? Have you seen any error message (dialog or a snackbar at the bottom)?

Thanks I'll try again! So far I mostly changed things on the server, which then didn't shop up in the app until I forcefully closed and restarted it. I will specifically try to edit cards in the app and see if it goes through the other way. Most of the changes were creating and moving cards, and so far I haven't noticed that this phenomenon only applied to specific types of changes. There were no error messages.

Oh no, I just noticed I made a mistake when copying the APK. I think I was still running the previous version, when I created the last log. Sorry! I'm now definitely on the latest version and I will continue to test.

@birefringence I'd bet at least a used tissue, that the error won't happen anymore. @stefan-niedermann isn't convinced yet, but if you can't reproduce the issue anymore, maybe my changes kicked in. Looking forward to your feedback! :blush:

Sorry!

No need to be sorry here! You already helped us a lot! Thanks for that! :heart:

Most of the improvements which we made here have made it into version 1.15.8 (released on F-Droid and Play Store Beta channel, should arrive in the next few days). I would appreciate any feedback with this released version.

I kept one change back: @desperateCoder suggested to remove our queued synchronization (which holds back triggered synchronizations if there is still a sync in progress). I'd like to see whether or not the endless spinner still occurs and if yes, i will also merge this change. Though i'd like to keep this feature, so let's wait for some feedback of 1.15.8. :slightly_smiling_face:

I haven't had any problems with the last dev build from this thread. I will also try 1.15.8 as soon as possible.

I'm currently on version 1.16.0 from the Google Play beta channel. Today the spinner stuck again. Unfortunately, I didn't have the log collection switch on until after it happened. So the log might be missing relevant information:
```
2021-04-03 14:28:42 DEBUG (SettingsFragment.java:82) lambda$onCreatePreferences$4() โ†’ persistet debug logs: true
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:43 INFO (FilterViewModel.java:122) setFilterText() โ†’ New filterText:
2021-04-03 14:28:43 DEBUG (DeckApplication.java:122) readCurrentAccountId() โ†’ --- Read: it.niedermann.nextcloud.deck.last_account โ†’ 1
2021-04-03 14:28:43 INFO (MainActivity.java:248) lambda$onCreate$16$MainActivity() โ†’ Syncing the current account on app start
2021-04-03 14:28:43 DEBUG (MainActivity.java:951) onAvailable() โ†’ Got Network connection
2021-04-03 14:28:43 DEBUG (DeckApplication.java:100) saveCurrentAccount() โ†’ --- Write: it.niedermann.nextcloud.deck.last_account โ†’ 1
2021-04-03 14:28:43 DEBUG (DeckApplication.java:102) saveCurrentAccount() โ†’ --- Write: it.niedermann.nextcloud.deck.last_account_color โ†’ -16743735
2021-04-03 14:28:43 DEBUG (DeckApplication.java:136) readCurrentBoardId() โ†’ --- Read: it.niedermann.nextcloud.deck.last_board_for_account_1 โ†’ 1
2021-04-03 14:28:43 VERBOSE (MainActivity.java:324) lambda$null$8$MainActivity() โ†’ Displaying maintenance mode info for [email protected]/nextcloud: false
2021-04-03 14:28:43 DEBUG (BrandingUtil.java:47) saveBrandColors() โ†’ --- Write: shared_preference_theme_main | -16742459
2021-04-03 14:28:43 DEBUG (DeckApplication.java:128) saveCurrentBoardId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_board_for_account_1 โ†’ 1
2021-04-03 14:28:43 DEBUG (DeckApplication.java:150) readCurrentStackId() โ†’ --- Read: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:28:44 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:44 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:44 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:28:44 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:29:07 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:07 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 1
2021-04-03 14:29:08 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:29:09 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 1
2021-04-03 14:29:10 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 2
2021-04-03 14:29:10 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 3
2021-04-03 14:29:11 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 2
2021-04-03 14:29:12 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 1
2021-04-03 14:29:12 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:29:13 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:38 DEBUG (MainActivity.java:951) onAvailable() โ†’ Got Network connection
2021-04-03 14:29:38 DEBUG (MainActivity.java:951) onAvailable() โ†’ Got Network connection
2021-04-03 14:29:38 DEBUG (MainActivity.java:951) onAvailable() โ†’ Got Network connection
2021-04-03 14:29:51 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:51 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:51 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:51 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:51 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:52 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 1
2021-04-03 14:29:53 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 2
2021-04-03 14:29:53 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 3
2021-04-03 14:29:54 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 2
2021-04-03 14:29:54 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 1
2021-04-03 14:29:54 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:29:58 DEBUG (BrandingUtil.java:47) saveBrandColors() โ†’ --- Write: shared_preference_theme_main | -6355573
2021-04-03 14:29:58 DEBUG (DeckApplication.java:128) saveCurrentBoardId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_board_for_account_1 โ†’ 5
2021-04-03 14:29:58 DEBUG (DeckApplication.java:150) readCurrentStackId() โ†’ --- Read: it.niedermann.nextcloud.deck.last_stack_for_board_1_5 โ†’ 21
2021-04-03 14:29:58 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:58 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:29:58 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:01 DEBUG (BrandingUtil.java:47) saveBrandColors() โ†’ --- Write: shared_preference_theme_main | -16742459
2021-04-03 14:30:01 DEBUG (DeckApplication.java:128) saveCurrentBoardId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_board_for_account_1 โ†’ 1
2021-04-03 14:30:01 DEBUG (DeckApplication.java:150) readCurrentStackId() โ†’ --- Read: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:30:01 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:01 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:01 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:14 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:14 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:14 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:14 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:14 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:17 DEBUG (MainActivity.java:968) onLost() โ†’ Network lost
2021-04-03 14:30:17 DEBUG (MainActivity.java:968) onLost() โ†’ Network lost
2021-04-03 14:30:17 DEBUG (MainActivity.java:968) onLost() โ†’ Network lost
2021-04-03 14:30:32 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:32 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:32 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:32 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:32 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:30:44 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 1
2021-04-03 14:30:45 DEBUG (DeckApplication.java:142) saveCurrentStackId() โ†’ --- Write: it.niedermann.nextcloud.deck.last_stack_for_board_1_1 โ†’ 20
2021-04-03 14:31:48 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:31:48 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:31:48 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:31:48 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main
2021-04-03 14:31:48 DEBUG (BrandingUtil.java:37) readBrandMainColor() โ†’ --- Read: shared_preference_theme_main

@desperateCoder are we missing an onError callback for this onResponse? Might also explain a not finishing spinner...

@stefan-niedermann we do. On the other hand: The sync-queue is still there, so it doesn't surprise me, that there are still issues... We could try adding it. Or, as I'd suggest, just get rid of this whole damn thing (yep, guess I messed it up) and be happy as @birefringence can confirm. It seemed to work well, as we removed it. Am I missing something? The play store beta version still has the queue, right?

Sorry for closing.... Damn trigger finger...

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jancborchardt picture jancborchardt  ยท  7Comments

ahangarha picture ahangarha  ยท  4Comments

D-side picture D-side  ยท  5Comments

simonspa picture simonspa  ยท  5Comments

treuss picture treuss  ยท  3Comments