pcloud is a popular cloud service, however their WebDAV implementation is broken and have been so for a long time. The only reply we got from them was essentially blaming Joplin, even though the apps sync fine with dozens of other standard WebDAV services.
There's two problems with this:
-
Users incorrectly think that it's a problem with Joplin and come for us for support. It uses our resources and it makes it look like Joplin is unreliable, even though it's not possible on our end to fix the issue
-
Although their implementation is broken, it stills works well enough that a user might rely on it, not realising that they are losing notes or that some data get corrupted.
So we should deal with it on our end: if pcloud is detected, we immediately stop sync and throw an error explaining the situation. For example:
pcloud has a faulty WebDAV implementation and as such Joplin no longer supports it. Please use a different sync method.
That way the user is immediately alerted and can switch to a different sync target without committing to pcloud.
Edit: We don't know the full story - it's possible that for certain use cases, pCloud work fine, maybe for small notes or not many notes, so some users might already be using it. Because of this, we should add an option in Advanced settings - "Allow sync with pCloud" (with a description). Off by default. If On, we allow sync but at the user's own risks. It means we remain backward compatible for users who are currently synchronising with pCloud.
Edit: In fact, we can have a migration step - if during the upgrade we detect the user is using one of the unsupported implementations, we automatically set the Advanced option to "true".
Implementation
Based on the discussion in this thread, this is what we need to implement:
- Create a black list of WebDAV providers - at this point it will only be pcloud and jianguoyun
- When the user tries to sync with these (including when clicking the button "Check synchronisation configuration"), throw an error message from the synchronizer: "The WebDAV implementation of PROVIDER is incompatible with Joplin, and as such is no longer supported. Please use a different sync method."
- Add a hidden setting "sync.allowUnsupportedProviders" (defaults to -1)
- Add a migration step - when the app starts, and sync.allowUnsupportedProviders is -1, check the current sync settings. If it's currently synchronising with one of the unsupported provider, set sync.allowUnsupportedProviders to 1. Otherwise, set it to 0. This is so we don't break sync for people who are already synchronising with pcloud or jianguoyun
- If sync.allowUnsupportedProviders is 1, we bypass the WebDAV black list
pcloud is a popular cloud service, however their WebDAV implementation is broken and have been so for a long time. The only reply we got from them was essentially blaming Joplin, even though the apps sync fine with dozens of other standard WebDAV services.
There's two problems with this:
Users incorrectly think that it's a problem with Joplin and come for us for support. It uses our resources and it makes it look like Joplin is unreliable, even though it's not possible on our end to fix the issue
Although their implementation is broken, it stills works well enough that a user might rely on it, not realising that they are losing notes or that some data get corrupted.
So we should deal with it on our end: if pcloud is detected, we immediately stop sync and throw an error explaining the situation. For example:
That way the user is immediately alerted and can switch to a different sync target without committing to pcloud.
Edit: We don't know the full story - it's possible that for certain use cases, pCloud work fine, maybe for small notes or not many notes, so some users might already be using it. Because of this, we should add an option in Advanced settings - "Allow sync with pCloud" (with a description). Off by default. If On, we allow sync but at the user's own risks. It means we remain backward compatible for users who are currently synchronising with pCloud.
Edit: In fact, we can have a migration step - if during the upgrade we detect the user is using one of the unsupported implementations, we automatically set the Advanced option to "true".
Implementation
Based on the discussion in this thread, this is what we need to implement: