My eCloud "./contacts" directory was internally renamed to "./contacts-1" (and /e/OS can't access it anymore)
- /e/ version: 9 (lineage_FP3-userdebug 9 PQ3A.190801.002 eng.root.20200701.154024 dev-keys)
- Device model:Fairphone FP3 (FP3)
- When it started to occur: After I renamed / created a new / deleted the original "Contacts" directory in eCloud
- Reproducible with the last /e/ version:
- Reproducible with LineageOS: Yes
Summary
After various eCloud manipulations I did (see details below), my Contacts URL now ends in "... /Contacts-1". My /e/OS phone is still trying to sync with ./Contacts (that does not exist anymore) and gets error 404 (resulting in Contacts sync broken).
-
The device is unusable -
The bug is the source of a data loss or a big waste of time -
The bug concerns a third-party application -
The bug concerns security -
The bug concerns privacy
The problem
Steps to reproduce
It required significant work to figure out how to import 200 contacts (VCard 2.1) from my old dumb phone to my brand new /e/OS FP3. I whipped up a quick and dirty utility to create a VCard 3.0 file containing my contacts from the 200 individual .vcf 2.1 files my old phone produced.
During this dev and test phase, I created various alternate address books in eCloud to test my newly created 3.0 .vcf file, using the address book "Settings" functions: Local Import / Download / Enable / Disable / Delete during debugging.
Unfortunately, at some point, I (erroneously) imported 200 faulty contacts into my default Contacts address book. Since there is no way to mass delete contacts, I renamed the default Contacts to "OriginalContacts", created a new "Contacts" address book, and deleted "Original Contacts". That worked just fine (seemingly).
Problem is, the new "Contacts" book is now internally named "contacts-1" (with a ./contacts-1 URL), and /e/OS in my FP3 still tries to connect to "contacts" and can't find anymore. Thus broken sync...
I didn't find so far any setting in /e/OS to change the sync URL from ./contacts to ./contacts-1 ...
Help and thanks in advance! :-)
What is the current behavior?
Sync gives an error 404 with a debug dump (see below).
What is the expected correct behavior?
To get Sync back to work!
Technical information
Relevant logs (adb logcat
)
--- BEGIN DEBUG INFO --- SYNCHRONIZATION INFO Account name: Contacts (myname@e.email FA) Authority: com.android.contacts
HTTP REQUEST: Request{method=PROPFIND, url=https://ecloud.global/remote.php/dav/addressbooks/users/myname@e.email/contacts/, tags={}}
HTTP RESPONSE: Response{protocol=http/1.1, code=404, message=Not Found, url=https://ecloud.global/remote.php/dav/addressbooks/users/myname@e.email/contacts/}
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns"> <s:exception>Sabre\DAV\Exception\NotFound</s:exception> <s:message>Addressbook with name 'contacts' could not be found</s:message> </d:error>
REMOTE RESOURCE: https://ecloud.global/remote.php/dav/addressbooks/users/myname@e.email/contacts/
EXCEPTION: foundation.e.dav4jvm.exception.NotFoundException: HTTP 404 Not Found at foundation.e.dav4jvm.DavResource.checkStatus(DavResource.kt:415) at foundation.e.dav4jvm.DavResource.checkStatus(DavResource.kt:397) at foundation.e.dav4jvm.DavResource.processMultiStatus(DavResource.kt:491) at foundation.e.dav4jvm.DavResource.propfind(DavResource.kt:384) at foundation.e.accountmanager.syncadapter.ContactsSyncManager$queryCapabilities$1.invoke(ContactsSyncManager.kt:128) at foundation.e.accountmanager.syncadapter.ContactsSyncManager$queryCapabilities$1.invoke(ContactsSyncManager.kt:75) at foundation.e.accountmanager.syncadapter.SyncManager.useRemote(SyncManager.kt:831) at foundation.e.accountmanager.syncadapter.SyncManager.useRemoteCollection(SyncManager.kt:852) at foundation.e.accountmanager.syncadapter.ContactsSyncManager.queryCapabilities(ContactsSyncManager.kt:126) at foundation.e.accountmanager.syncadapter.SyncManager$performSync$1.invoke(SyncManager.kt:125) at foundation.e.accountmanager.syncadapter.SyncManager$performSync$1.invoke(SyncManager.kt:57) at foundation.e.accountmanager.syncadapter.SyncManager.unwrapExceptions(SyncManager.kt:857) at foundation.e.accountmanager.syncadapter.SyncManager.performSync(SyncManager.kt:116) at foundation.e.accountmanager.syncadapter.EeloContactsSyncAdapterService$ContactsSyncAdapter.sync(EeloContactsSyncAdapterService.kt:68) at foundation.e.accountmanager.syncadapter.SyncAdapterService$SyncAdapter.onPerformSync(SyncAdapterService.kt:122) at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:334)
SOFTWARE INFORMATION
- foundation.e.accountmanager 2.6.3-ose (328)
- com.android.providers.contacts 9 (28)
- com.android.providers.calendar 9 (28)
- foundation.e.tasks 1.2.3-8-g676c989 (5200)
- com.android.contacts 1.7.31 (10731)
- foundation.e.calendar 1.0.21 (23)
CONNECTIVITY (at the moment)
CONFIGURATION Power saving disabled: yes Notifications (not blocked): [group] sync isBlocked=false syncProblems: importance=3 syncIoErrors: importance=1 syncWarnings: importance=2 general: importance=3 debug: importance=4 Permissions: READ_CONTACTS: granted WRITE_CONTACTS: granted READ_CALENDAR: granted WRITE_CALENDAR: granted READ_TASKS: granted WRITE_TASKS: granted ACCESS_COARSE_LOCATION: granted System-wide synchronization: automatically
ACCOUNTS Account: myname@e.email Address book sync. interval: 2 min Calendar sync. interval: 2 min OpenTasks sync. interval: 2 min WiFi only: false [CardDAV] Contact group method: GROUP_VCARDS [CalDAV] Time range (past days): 90 Manage calendar colors: true Use event colors: false Account {name=myname@e.email, type=e.foundation.webdav.eelo} is invalid: No main account assigned to address book account
SQLITE DUMP android_metadata | locale | | en_US |
myname@e.email | | e.foundation.webdav | foundation.e.accountmanager.address_book | carddav | https://ecloud.global/remote.php/dav/principals/users/myname@e.email/ | | 4 | myname@e.email | | e.foundation.webdav | foundation.e.accountmanager.address_book | caldav | https://ecloud.global/remote.php/dav/principals/users/myname@e.email/ |
service | id | accountName | authState | accountType | addressBookAccountType | type | principal | | 3 |sqlite_sequence | name | seq | | service | 4 | | homeset | 4 | | collection | 4 |
https://ecloud.global/remote.php/dav/addressbooks/users/myname@e.email/ | 1 | | | 4 | 4 | https://ecloud.global/remote.php/dav/calendars/myname@e.email/ | 1 | |
homeset | id | serviceId | url | privBind | displayName | | 3 | 3 |https://ecloud.global/remote.php/dav/addressbooks/users/myname@e.email/contacts/ | 1 | 1 | 0 | Contacts | | | | | | | | 1 | | 4 | 4 | CALENDAR | https://ecloud.global/remote.php/dav/calendars/myname@e.email/personal/ | 1 | 1 | 0 | Personnel | | | | 1 | 1 | 0 | | 1 |
collection | id | serviceId | type | url | privWriteContent | privUnbind | forceReadOnly | displayName | description | color | timezone | supportsVEVENT | supportsVTODO | supportsVJOURNAL | source | sync | | 3 | 3 | ADDRESS_BOOK |room_master_table | id | identity_hash | | 42 | 044be2cd4cd7622698b35c31c42a129a |
SYSTEM INFORMATION Android version: 9 (lineage_FP3-userdebug 9 PQ3A.190801.002 eng.root.20200701.154024 dev-keys) Device: Fairphone FP3 (FP3)
--- END DEBUG INFO ---```
Relevant screenshots
Solutions
Workaround
Possible fixes
If you could rename the directory as it originally was (using my real email name instead of "myname"), that sure would help!
https://ecloud.global/remote.php/dav/addressbooks/users/myname@e.email/contacts/
Preventing the renaming of "Contacts" in eCloud would prevent this problem in the future (for other users), but then, allowing the mass delete of contacts in Contacts (and possibly other address books) would certainly help alot...
Also, making import for older vCards more user friendly (supporting more vcard options, like multiple 2.1 vcf files, for instance!) could seriously help migration to /e/OS from old devices: Heck, I waited 12 years for a non-spying smartphone software, you can't expect my previous phone vCards to be latest standards! :-D