etesync / android

EteSync - Secure, end-to-end encrypted, and privacy respecting sync for your contacts, calendars and tasks.
https://www.etesync.com
GNU General Public License v3.0
305 stars 34 forks source link

First names do not show on Android #106

Closed tx3eh8IUD1 closed 4 years ago

tx3eh8IUD1 commented 4 years ago

On my Samsung Galaxy S8 (running One UI 1.0; Android 9) the first names of all contacts have disappeared.

On my iPhone the first names still show. The etesync app (iOS, Android, Web) also still show the first names.

Any idea what could have happened? I tried two contacts apps, but the first name field is empty.

The first names show OK when synching from Outlook via CardDAV to Android. First names disappear (on Android only) when synching from iCloud to iPhone to Etesync to Android.

Edit for clarity

tx3eh8IUD1 commented 4 years ago

I replicated the 'broken' contacts into outlook (via server -> outlook (replicate).

Outlook also cannot handle the names: image It pastes both the first name and the last name into the lastname field, separated by a comma.

Edited to add: When I set my Carddav plugin to "sync two ways", Etesync on iOS fails with this error message: Bad HMAC. 68ef3f9ac56ebda85429c8af4618a25f4b1921b476513524c2882bb7bdaa372a != 853aab0e84292cde22fe11e09a338160dbb753578a7d1a91fee13acf220edcff n@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1028:1349 n@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1028:1766 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1028:2803 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1028:5725 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1028:5432 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1188:1004 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1119:34585 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1188:920 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1119:29492 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1119:25799 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1188:598 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1189:351 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1189:351 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:1162:3790 p@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:115:423 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:115:1740 p@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:115:423 n@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:115:898 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:115:1047 f@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:42:155 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:42:882 y@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:117:661 C@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:117:1025 callImmediates@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:117:3100 callImmediates@[native code] value@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:28:3247 https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:28:1283 value@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:28:2939 value@https://expo.etesync.com/release/3/bundles/ios-b4a63ee86da13962bc96eef06ead2643.js:28:1253 value@[native code] value@[native code]

one way synching (into outlook from iPhone) works, but it with the above described bug (name fields are messed up). Two way synching on Android never seems to be an issue, but again, the name fields are screwed for all contacts coming from iOS. Forcing contacts via one-way synch from outlook into etesync and then onto the iphone works without any issues (also works for android).

edit: spelling

tasn commented 4 years ago

CardDAV plugin where (the one you sync two ways)? This error is not good! Does the web client work for you? Try from "private mode" in the browser. Bad HMAC. 68ef3f9ac56ebda85429c8af4618a25f4b1921b476513524c2882bb7bdaa372a != 853aab0e84292cde22fe11e09a338160dbb753578a7d1a91fee13acf220edcff

As for the issue at hand: could you open the web or Android client and attach here the vcard of the example broken user? Where was that user created? Also, you say it used to work and now it stopped, does it shows as recently changed in the change history?

tx3eh8IUD1 commented 4 years ago

I run a CardDAV plugin in Outlook on Windows. I run Etesync apps on iOS and Android.

The web client does work for me, and shows most names correctly. The names affected (deleted first names on android, funny concatenated names in lastname field in Outlook) are not affected on web client.

The issue also works the other way around: Here is a copy of the test VCARD I created in Outlook - it's looks also funny (last name first? All other contacts are FIRST MIDDLE LAST)

BEGIN:VCARD VERSION:3.0 UID:2cbf7642-1087-4413-a220-34f107c530e5 CLASS:PUBLIC EMAIL;TYPE=INTERNET,HOME:test@test.com FN:Last\, First Middle N:Last;First;Middle;Dr.;Testkontaktsuffix NOTE:Test REV:2020-02-12T22:10:11Z TEL;TYPE=CELL,PREF:4 TEL;TYPE=HOME:2 TEL;TYPE=WORK:1 TEL;TYPE=FAX,WORK:3 END:VCARD

From webclient: image

In Android it shows correctly: signal-attachment-2020-02-13-174105

Also shows correctly in iphone:

signal-2020-02-13-174211
tx3eh8IUD1 commented 4 years ago

Here is the VCARD of a contact whose first name is missing on Android:

BEGIN:VCARD PRODID;VALUE=TEXT:-//iCal.js EteSync iOS VERSION:4.0 UID:8F43BC5B-A047-4FA8-A7BA-10F6751DBF73 REV;VALUE=DATE-TIME:20200212T132431 FN:First Last N:Last,First,,, TEL;TYPE=home:+123456 TEL;TYPE=home:123456 TEL;TYPE=mobile:+123456 EMAIL:First_Last@XXX.com TITLE:Worker Bee NOTE:Office:\n+123456\nMobile:\n+123456\nVoIP:\n123456 END:VCARD

tx3eh8IUD1 commented 4 years ago

I am curious about two things: The difference in using , vs ; and that Etesync seems to use FN instead of the N field to show names

tasn commented 4 years ago

Here is a copy of the test VCARD I created in Outlook - it's looks also funny (last name first? All other contacts are FIRST MIDDLE LAST)

FN is generated by whichever software that created it, in this case Outlook. So I guess that's just the default there.

Here is the VCARD of a contact whose first name is missing on Android:

BEGIN:VCARD PRODID;VALUE=TEXT:-//iCal.js EteSync iOS VERSION:4.0 UID:8F43BC5B-A047-4FA8-A7BA-10F6751DBF73 REV;VALUE=DATE-TIME:20200212T132431 FN:First Last N:Last,First,,, TEL;TYPE=home:+123456 TEL;TYPE=home:123456 TEL;TYPE=mobile:+123456 EMAIL:First_Last@XXX.com TITLE:Worker Bee NOTE:Office:\n+123456\nMobile:\n+123456\nVoIP:\n123456 END:VCARD

So this one was created on iOS, and after syncing to Android it doesn't show a first name? It looks good to me. Could you show the screenshot from Android?

tasn commented 4 years ago

I am curious about two things: The difference in using , vs ; and that Etesync seems to use FN instead of the N field to show names

I wish I could explain it in simple terms, but I can't unfortunately. It's just straight-out wackiness. :) Here's the standard: https://tools.ietf.org/html/rfc6350

EteSync's preview uses the FN, but the sync to Android itself uses the N and ignores the FN for all I remember. Same with the sync on other platforms.

tx3eh8IUD1 commented 4 years ago

Here is a copy of the test VCARD I created in Outlook - it's looks also funny (last name first? All other contacts are FIRST MIDDLE LAST)

FN is generated by whichever software that created it, in this case Outlook. So I guess that's just the default there.

Here is the VCARD of a contact whose first name is missing on Android: BEGIN:VCARD PRODID;VALUE=TEXT:-//iCal.js EteSync iOS VERSION:4.0 UID:8F43BC5B-A047-4FA8-A7BA-10F6751DBF73 REV;VALUE=DATE-TIME:20200212T132431 FN:First Last N:Last,First,,, TEL;TYPE=home:+123456 TEL;TYPE=home:123456 TEL;TYPE=mobile:+123456 EMAIL:First_Last@XXX.com TITLE:Worker Bee NOTE:Office:\n+123456\nMobile:\n+123456\nVoIP:\n123456 END:VCARD

So this one was created on iOS, and after syncing to Android it doesn't show a first name? It looks good to me. Could you show the screenshot from Android?

Yes. Created on iOS. Exactly - after synching via Etesync to Android, Android does not show the first name. The contact is A-OK on the Etesync webclient or iOS, however.

Here is a screenshot from the editing view in Android, the first field view is simply empty: image

Edited to add: The VCARD really seems to be intact. When I use "share contact" on Android, the first name is actually contained in the shared contact!

tasn commented 4 years ago

What is this contact app? Maybe it's buggy? Could you try another contacts app, potentially the default on your device?

As I said, the vcard looks good! Don't worry, we'll figure it out, I'm just surprised things don't work in this case given than the Android client has been around for such a long time and has been tested by so many users.

tx3eh8IUD1 commented 4 years ago

@tasn ,

maybe we were not clear enough about where to get the VCARD from? The vcards above were pasted from the journal of the Etesync app.

If I check my contacts apps (multiple!), then the first name is always missing: BEGIN:VCARD VERSION:2.1 N:Last;;;; FN:First Last TEL;WORK:+123456 TEL;:+123456 EMAIL:First.Last@email.com ADR;WORK;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE: ORG:Orga URL:http://www.google.com NOTE:notes END:VCARD

tx3eh8IUD1 commented 4 years ago

I I read the standard that you sent me. To me, it looks as if the delimiter in the N: field should be ";" and not ",". As I wrote earlier, the mix in the VCARDs of using "," and ";" to deliminate first name and last name looks funny, especially when using ";" for all other purposes of delimiting text blocks within the same field.

It seems to me that iOS or the etesync iOS->etesync bridge uses "," when they should be using a ";" instead. iOS exports contacts all right using a ";", but the etesync app picks them up as "," instead.

broken contact = a contact that shows OK on iPhone, but not OK on android

VCARD from Etesync on android (broken contact): N:Last,First,,,

VCARD from Android Contacts apps (broken contact): N:Last;;;; Note the missing first name, but use of ";"

VCARD from Etesync on iPhone (broken contact on Android, but it shows all right on Iphone!): N:Last,First,,,

VCARD export from iPhone Contacts apps (broken contact): N:Last;First;;;

I just created another test contact on iPhone. When I sync: iPhone -> Etesync -> Android, the first name gets dropped and the vcard on etesync in android will show separating the first and last name with a comma

VCARD standard: N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.

Note that the ";" are between first and last name, and that "," separate multiple degrees in the same text part (degrees)

OK contact as comparison VCARD from Etesync on iPhone (OK contact): N:Last;First;;;

VCARD from Android Contacts apps (OK contact): N:Last;First;;;

VCARD export from iPhone Contacts apps (OK contact): N:Last;First;;;

Long story short: how come the broken Etesync contacts have "," instead of ";" in the N: field to split first and last name?

tasn commented 4 years ago

Nice catch! You are correct, that's probably the issue! I'm taking a look into fixing it now.

tasn commented 4 years ago

Could you please try the newest version of the iOS app? All you need to do is close it from the app switcher and open it again and it will get the fix.

tx3eh8IUD1 commented 4 years ago

Could you please try the newest version of the iOS app? All you need to do is close it from the app switcher and open it again and it will get the fix.

It works now with new contacts. Let's close this issue?

Thanks!!!

tasn commented 4 years ago

It was already closed automatically by Github the moment I committed it.

Great! Nice catch, and thanks again for reporting.