Contacts: Cannot import contacts

Created on 11 Nov 2018  路  17Comments  路  Source: nextcloud/contacts

Describe the bug

Cannot import contacts via web interface or DAVdroid.

To Reproduce
Steps to reproduce the behavior:

  1. Once in Contacts app, click on _Settings_, then _Import into Contacts_
  2. Attach a VCF file.
  3. Watch it fail
  4. See error in Developer Console

Expected behavior
Show progress of import, followed by something like 'all contacts imported' notification.

Actual behavior
Page hangs, few warnings & 2+ errors pop up in developer tools console.

Server configuration

Operating system: Debian Stretch

Web server: nginx

Database: PostgreSQL

PHP version: 7.2

Nextcloud version: 14.0.3

Contacts version: 2.1.6

Updated from an older Nextcloud or fresh install: Fresh install of 14.0.3

Signing status:

No errors have been found.

List of activated apps:

$ sudo -u www-data php occ app:list
Enabled:
  - accessibility: 1.0.1
  - activity: 2.7.0
  - admin_audit: 1.4.0
  - calendar: 1.6.3
  - cloud_federation_api: 0.0.1
  - comments: 1.4.0
  - contacts: 2.1.6
  - dav: 1.6.0
  - deck: 0.4.1
  - drawio: 0.9.1
  - federatedfilesharing: 1.4.0
  - federation: 1.4.0
  - files: 1.9.0
  - files_accesscontrol: 1.4.0
  - files_automatedtagging: 1.4.0
  - files_pdfviewer: 1.3.2
  - files_retention: 1.3.0
  - files_sharing: 1.6.2
  - files_texteditor: 2.6.0
  - files_trashbin: 1.4.1
  - files_versions: 1.7.1
  - files_videoplayer: 1.3.0
  - firstrunwizard: 2.3.0
  - gallery: 18.1.0
  - logreader: 2.0.0
  - lookup_server_connector: 1.2.0
  - nextcloud_announcements: 1.3.0
  - notes: 2.4.2
  - notifications: 2.2.1
  - oauth2: 1.2.1
  - password_policy: 1.4.0
  - provisioning_api: 1.4.0
  - serverinfo: 1.4.0
  - sharebymail: 1.4.0
  - support: 1.0.0
  - survey_client: 1.2.0
  - systemtags: 1.4.0
  - tasks: 0.9.7
  - terms_of_service: 1.0.2
  - theming: 1.5.0
  - twofactor_backupcodes: 1.3.1
  - updatenotification: 1.4.1
  - workflowengine: 1.4.0
Disabled:
  - dashboard
  - encryption
  - files_external
  - user_external
  - user_ldap

Nextcloud configuration:

{
    "system": {
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "cloud.domain.tld"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "pgsql",
        "version": "14.0.3.0",
        "overwrite.cli.url": "https:\/\/cloud.domain.tld",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "maintenance": false,
        "memcache.local": "\\OC\\Memcache\\APCu"
    }
}

Client configuration

Browser: Any. Have tried with Chromium, Firefox, Safari.

Operating system: macOS 10.14.1, Linux, Android.

CardDAV-clients: DAVdroid & web-interface.

Logs

Web server error log

$ tail cloud.error.log
2018/11/10 03:19:43 [error] 27865#27865: *52945 access forbidden by rule, client: <snip>, server: cloud.domain.tld, request: "GET /data/.ocdata?t=1541816383207 HTTP/2.0", host: "cloud.domain.tld"
2018/11/10 03:19:49 [error] 27865#27865: *52945 access forbidden by rule, client: <snip>, server: cloud.domain.tld, request: "GET /data/.ocdata?t=1541816389632 HTTP/2.0", host: "cloud.domain.tld"
2018/11/10 03:26:38 [error] 27865#27865: *52945 access forbidden by rule, client: <snip>, server: cloud.domain.tld, request: "GET /data/.ocdata?t=1541816798634 HTTP/2.0", host: "cloud.domain.tld"
2018/11/10 03:29:53 [error] 27865#27865: *52945 access forbidden by rule, client: <snip>, server: cloud.domain.tld, request: "GET /data/.ocdata?t=1541816993183 HTTP/2.0", host: "cloud.domain.tld"

Nextcloud log

data/nextcloud.log

{"reqId":"GYZLQBCUgVvPZO6RQBej","level":3,"time":"2018-11-10T02:29:12+00:00","remoteAddr":"<snip>","user":"--","app":"core","method":"GET","url":"\/favicon.ico","message":{"Exception":"OC\\HintException","Message":"Memcache \\OC\\Memcache\\Redis not available for local cache","Code":0,"Trace":[{"file":"\/var\/www\/cloud\/lib\/private\/Server.php","line":502,"function":"__construct","class":"OC\\Memcache\\Factory","type":"->","args":["839af7b02ab90078df1009cf4849afda",{"__class__":"OC\\Log"},"\\OC\\Memcache\\Redis","\\OC\\Memcache\\Redis","\\OC\\Memcache\\Redis"]},{"file":"\/var\/www\/cloud\/3rdparty\/pimple\/pimple\/src\/Pimple\/Container.php","line":118,"function":"OC\\{closure}","class":"OC\\Server","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":117,"function":"offsetGet","class":"Pimple\\Container","type":"->","args":["OC\\Memcache\\Factory"]},{"file":"\/var\/www\/cloud\/lib\/private\/ServerContainer.php","line":132,"function":"query","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["OC\\Memcache\\Factory"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":165,"function":"query","class":"OC\\ServerContainer","type":"->","args":["OC\\Memcache\\Factory"]},{"file":"\/var\/www\/cloud\/3rdparty\/pimple\/pimple\/src\/Pimple\/Container.php","line":114,"function":"OC\\AppFramework\\Utility\\{closure}","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":117,"function":"offsetGet","class":"Pimple\\Container","type":"->","args":["MemCacheFactory"]},{"file":"\/var\/www\/cloud\/lib\/private\/ServerContainer.php","line":132,"function":"query","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["MemCacheFactory"]},{"file":"\/var\/www\/cloud\/lib\/private\/Server.php","line":1513,"function":"query","class":"OC\\ServerContainer","type":"->","args":["MemCacheFactory"]},{"file":"\/var\/www\/cloud\/lib\/private\/Server.php","line":686,"function":"getMemCacheFactory","class":"OC\\Server","type":"->","args":[]},{"file":"\/var\/www\/cloud\/3rdparty\/pimple\/pimple\/src\/Pimple\/Container.php","line":118,"function":"OC\\{closure}","class":"OC\\Server","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":117,"function":"offsetGet","class":"Pimple\\Container","type":"->","args":["OC\\App\\AppManager"]},{"file":"\/var\/www\/cloud\/lib\/private\/ServerContainer.php","line":132,"function":"query","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["OC\\App\\AppManager"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":165,"function":"query","class":"OC\\ServerContainer","type":"->","args":["OC\\App\\AppManager"]},{"file":"\/var\/www\/cloud\/3rdparty\/pimple\/pimple\/src\/Pimple\/Container.php","line":114,"function":"OC\\AppFramework\\Utility\\{closure}","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":117,"function":"offsetGet","class":"Pimple\\Container","type":"->","args":["AppManager"]},{"file":"\/var\/www\/cloud\/lib\/private\/ServerContainer.php","line":132,"function":"query","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["AppManager"]},{"file":"\/var\/www\/cloud\/lib\/private\/Server.php","line":1703,"function":"query","class":"OC\\ServerContainer","type":"->","args":["AppManager"]},{"file":"\/var\/www\/cloud\/lib\/private\/legacy\/app.php","line":342,"function":"getAppManager","class":"OC\\Server","type":"->","args":[]},{"file":"\/var\/www\/cloud\/lib\/private\/legacy\/app.php","line":113,"function":"getEnabledApps","class":"OC_App","type":"::","args":[]},{"file":"\/var\/www\/cloud\/lib\/base.php","line":654,"function":"loadApps","class":"OC_App","type":"::","args":[["session"]]},{"file":"\/var\/www\/cloud\/lib\/base.php","line":1068,"function":"init","class":"OC","type":"::","args":[]},{"file":"\/var\/www\/cloud\/index.php","line":40,"args":["\/var\/www\/cloud\/lib\/base.php"],"function":"require_once"}],"File":"\/var\/www\/cloud\/lib\/private\/Memcache\/Factory.php","Line":99,"Hint":"Is the matching PHP module installed and enabled?","CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (X11; Linux x86_64; rv:65.0) Gecko\/20100101 Firefox\/65.0","version":"14.0.3.0"}
{"reqId":"GYZLQBCUgVvPZO6RQBej","level":3,"time":"2018-11-10T02:29:12+00:00","remoteAddr":"<snip>","user":"--","app":"core","method":"GET","url":"\/favicon.ico","message":{"Exception":"OC\\HintException","Message":"Memcache \\OC\\Memcache\\Redis not available for local cache","Code":0,"Trace":[{"file":"\/var\/www\/cloud\/lib\/private\/Server.php","line":502,"function":"__construct","class":"OC\\Memcache\\Factory","type":"->","args":["839af7b02ab90078df1009cf4849afda",{"__class__":"OC\\Log"},"\\OC\\Memcache\\Redis","\\OC\\Memcache\\Redis","\\OC\\Memcache\\Redis"]},{"file":"\/var\/www\/cloud\/3rdparty\/pimple\/pimple\/src\/Pimple\/Container.php","line":118,"function":"OC\\{closure}","class":"OC\\Server","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":117,"function":"offsetGet","class":"Pimple\\Container","type":"->","args":["OC\\Memcache\\Factory"]},{"file":"\/var\/www\/cloud\/lib\/private\/ServerContainer.php","line":132,"function":"query","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["OC\\Memcache\\Factory"]},{"file":"\/var\/www\/cloud\/lib\/private\/Server.php","line":974,"function":"query","class":"OC\\ServerContainer","type":"->","args":["OC\\Memcache\\Factory"]},{"file":"\/var\/www\/cloud\/3rdparty\/pimple\/pimple\/src\/Pimple\/Container.php","line":118,"function":"OC\\{closure}","class":"OC\\Server","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"\/var\/www\/cloud\/lib\/private\/AppFramework\/Utility\/SimpleContainer.php","line":117,"function":"offsetGet","class":"Pimple\\Container","type":"->","args":["OC\\Template\\JSCombiner"]},{"file":"\/var\/www\/cloud\/lib\/private\/ServerContainer.php","line":132,"function":"query","class":"OC\\AppFramework\\Utility\\SimpleContainer","type":"->","args":["OC\\Template\\JSCombiner"]},{"file":"\/var\/www\/cloud\/lib\/private\/TemplateLayout.php","line":319,"function":"query","class":"OC\\ServerContainer","type":"->","args":["OC\\Template\\JSCombiner"]},{"file":"\/var\/www\/cloud\/lib\/private\/TemplateLayout.php","line":160,"function":"findJavascriptFiles","class":"OC\\TemplateLayout","type":"::","args":[["vendor\/core","js\/merged-template-prepend","search\/js\/search","core\/l10n\/en_GB","search\/l10n\/en_GB","search\/js\/searchprovider","js\/jquery-ui-fixes","js\/files\/fileinfo","js\/files\/client","js\/contactsmenu"]]},{"file":"\/var\/www\/cloud\/lib\/private\/legacy\/template.php","line":210,"function":"__construct","class":"OC\\TemplateLayout","type":"->","args":["error",""]},{"file":"\/var\/www\/cloud\/lib\/private\/Template\/Base.php","line":132,"function":"fetchPage","class":"OC_Template","type":"->","args":[]},{"file":"\/var\/www\/cloud\/lib\/private\/legacy\/template.php","line":359,"function":"printPage","class":"OC\\Template\\Base","type":"->","args":[]},{"file":"\/var\/www\/cloud\/index.php","line":61,"function":"printExceptionErrorPage","class":"OC_Template","type":"::","args":[{"__class__":"OC\\HintException"},500]}],"File":"\/var\/www\/cloud\/lib\/private\/Memcache\/Factory.php","Line":99,"Hint":"Is the matching PHP module installed and enabled?","CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (X11; Linux x86_64; rv:65.0) Gecko\/20100101 Firefox\/65.0","version":"14.0.3.0"}
{"reqId":"TA0JPVAEVPLDh89pbruo","level":4,"time":"2018-11-10T21:44:34+00:00","remoteAddr":"<snip>","user":"<snip>","app":"webdav","method":"PUT","url":"\/remote.php\/webdav\/Phone\/<snip>.jpg-chunking-365892439-6-0","message":{"Exception":"Sabre\\DAV\\Exception\\BadRequest","Message":"expected filesize 1024000 got 696320","Code":0,"Trace":[{"file":"\/var\/www\/cloud\/apps\/dav\/lib\/Connector\/Sabre\/File.php","line":133,"function":"createFileChunked","class":"OCA\\DAV\\Connector\\Sabre\\File","type":"->","args":[null]},{"file":"\/var\/www\/cloud\/apps\/dav\/lib\/Connector\/Sabre\/Directory.php","line":156,"function":"put","class":"OCA\\DAV\\Connector\\Sabre\\File","type":"->","args":[null]},{"file":"\/var\/www\/cloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":1096,"function":"createFile","class":"OCA\\DAV\\Connector\\Sabre\\Directory","type":"->","args":["<snip>.jpg-chunking-365892439-6-0",null]},{"file":"\/var\/www\/cloud\/3rdparty\/sabre\/dav\/lib\/DAV\/CorePlugin.php","line":529,"function":"createFile","class":"Sabre\\DAV\\Server","type":"->","args":["Phone\/Camera\/IMG_20181111_103956.jpg-chunking-365892439-6-0",null,null]},{"function":"httpPut","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"absoluteUrl":"https:\/\/cloud.nullpointer.io\/remote.php\/webdav\/<snip>.jpg-chunking-365892439-6-0","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/cloud\/3rdparty\/sabre\/event\/lib\/EventEmitterTrait.php","line":105,"function":"call_user_func_array","args":[[{"__class__":"Sabre\\DAV\\CorePlugin"},"httpPut"],[{"absoluteUrl":"https:\/\/cloud.nullpointer.io\/remote.php\/webdav\/Phone\/<snip>.jpg-chunking-365892439-6-0","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/cloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":479,"function":"emit","class":"Sabre\\Event\\EventEmitter","type":"->","args":["method:PUT",[{"absoluteUrl":"https:\/\/cloud.nullpointer.io\/remote.php\/webdav\/<snip>.jpg-chunking-365892439-6-0","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/cloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":254,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"absoluteUrl":"https:\/\/cloud.nullpointer.io\/remote.php\/webdav\/<snip>.jpg-chunking-365892439-6-0","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/cloud\/apps\/dav\/appinfo\/v1\/webdav.php","line":80,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/cloud\/remote.php","line":163,"args":["\/var\/www\/cloud\/apps\/dav\/appinfo\/v1\/webdav.php"],"function":"require_once"}],"File":"\/var\/www\/cloud\/apps\/dav\/lib\/Connector\/Sabre\/File.php","Line":450,"CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (Android) ownCloud-android\/3.3.2","version":"14.0.3.0"}

Browser log

core.js?v=e6bde8ad-0:7 JQMIGRATE: Migrate is installed, version 1.4.0
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/contacts/css/vendor/ui-select/select.min.css.map
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/notifications/js/notifications.js.map
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/contacts/js/vendor/angular/angular.min.js.map
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/terms_of_service/js/terms_of_service_user.js.map
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/contacts/js/vendor/angular-cache/angular-cache.min.map
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/contacts/js/vendor/angular-sanitize/angular-sanitize.min.js.map
DevTools failed to parse SourceMap: https://cloud.domain.tld/apps/contacts/js/vendor/angular-route/angular-route.min.js.map
angular.min.js?v=e6bde8ad-0:119 Error: [$rootScope:inprog] http://errors.angularjs.org/1.5.11/$rootScope/inprog?p0=%24apply
    at angular.min.js?v=e6bde8ad-0:6
    at n (angular.min.js?v=e6bde8ad-0:139)
    at m.$apply (angular.min.js?v=e6bde8ad-0:147)
    at contactImport_directive.js:41
    at Object.import (contact_service.js:277)
    at contactImport_directive.js:18
    at m.$eval (angular.min.js?v=e6bde8ad-0:147)
    at m.$apply (angular.min.js?v=e6bde8ad-0:147)
    at FileReader.<anonymous> (contactImport_directive.js:11)
(anonymous) @ angular.min.js?v=e6bde8ad-0:119
(anonymous) @ angular.min.js?v=e6bde8ad-0:92
$apply @ angular.min.js?v=e6bde8ad-0:147
(anonymous) @ contactImport_directive.js:41
import @ contact_service.js:277
(anonymous) @ contactImport_directive.js:18
$eval @ angular.min.js?v=e6bde8ad-0:147
$apply @ angular.min.js?v=e6bde8ad-0:147
(anonymous) @ contactImport_directive.js:11
load (async)
(anonymous) @ contactImport_directive.js:10
q @ angular.min.js?v=e6bde8ad-0:7
(anonymous) @ contactImport_directive.js:7
dispatch @ core.js?v=e6bde8ad-0:3
r.handle @ core.js?v=e6bde8ad-0:3
angular.min.js?v=e6bde8ad-0:119 Error: [$rootScope:inprog] http://errors.angularjs.org/1.5.11/$rootScope/inprog?p0=%24apply
    at angular.min.js?v=e6bde8ad-0:6
    at n (angular.min.js?v=e6bde8ad-0:139)
    at m.$digest (angular.min.js?v=e6bde8ad-0:143)
    at m.$apply (angular.min.js?v=e6bde8ad-0:147)
    at contactImport_directive.js:41
    at Object.import (contact_service.js:277)
    at contactImport_directive.js:18
    at m.$eval (angular.min.js?v=e6bde8ad-0:147)
    at m.$apply (angular.min.js?v=e6bde8ad-0:147)
    at FileReader.<anonymous> (contactImport_directive.js:11)
(anonymous) @ angular.min.js?v=e6bde8ad-0:119
(anonymous) @ angular.min.js?v=e6bde8ad-0:92
$apply @ angular.min.js?v=e6bde8ad-0:147
(anonymous) @ contactImport_directive.js:41
import @ contact_service.js:277
(anonymous) @ contactImport_directive.js:18
$eval @ angular.min.js?v=e6bde8ad-0:147
$apply @ angular.min.js?v=e6bde8ad-0:147
(anonymous) @ contactImport_directive.js:11
load (async)
(anonymous) @ contactImport_directive.js:10
q @ angular.min.js?v=e6bde8ad-0:7
(anonymous) @ contactImport_directive.js:7
dispatch @ core.js?v=e6bde8ad-0:3
r.handle @ core.js?v=e6bde8ad-0:3
angular.min.js?v=e6bde8ad-0:119 Error: [$rootScope:inprog] http://errors.angularjs.org/1.5.11/$rootScope/inprog?p0=%24apply
    at angular.min.js?v=e6bde8ad-0:6
    at n (angular.min.js?v=e6bde8ad-0:139)
    at m.$digest (angular.min.js?v=e6bde8ad-0:143)
    at m.$apply (angular.min.js?v=e6bde8ad-0:147)
    at contactImport_directive.js:41
    at Object.import (contact_service.js:277)
    at contactImport_directive.js:18
    at m.$eval (angular.min.js?v=e6bde8ad-0:147)
    at m.$apply (angular.min.js?v=e6bde8ad-0:147)
    at FileReader.<anonymous> (contactImport_directive.js:11)
(anonymous) @ angular.min.js?v=e6bde8ad-0:119
(anonymous) @ angular.min.js?v=e6bde8ad-0:92
$apply @ angular.min.js?v=e6bde8ad-0:147
(anonymous) @ contactImport_directive.js:11
load (async)
(anonymous) @ contactImport_directive.js:10
q @ angular.min.js?v=e6bde8ad-0:7
(anonymous) @ contactImport_directive.js:7
dispatch @ core.js?v=e6bde8ad-0:3
r.handle @ core.js?v=e6bde8ad-0:3

```

bug invalid needs info

Most helpful comment

You're right, after I found a way to export my contacts as 3.0 vcf file it worked.

All 17 comments

GitMate.io thinks possibly related issues are https://github.com/nextcloud/contacts/issues/584 (Can't import all contacts because of danish special characters '忙,酶,氓'.), https://github.com/nextcloud/contacts/issues/190 (Can't create or import contacts), https://github.com/nextcloud/contacts/issues/461 (No import of contacts with umlauts / UnsupportedMediaType), https://github.com/nextcloud/contacts/issues/263 (Cannot move ownership of contacts), and https://github.com/nextcloud/contacts/issues/452 (Can't add new contact).

I will need a screenshot of your network requests.
Before you do anything, still on the development tools, there is a tab called network. Click on it and then the xhr filter. Do your action and screenshot the network log like this:
capture d ecran_2018-09-27_21-49-46

I have the same issue with the same versions of PHP/Nextcloud/Contacts and the newer Contacts 2.1.7.
No XHR requests are made when I try to upload. There're only the Angular.js errors in the console.

Here a screenshot:
nextcloud contacts import error

Do you have any 2.1 version vcard in your file?

Yes

This is the issue then :)
Vcard 2.1 are not compatible with this app. You can try changing the 2.1 to 3.0 vcards, but you might lose some informations. :/

You're right, after I found a way to export my contacts as 3.0 vcf file it worked.

Awesome, glad it works 馃槈

I'm not sure if you can close the issue, it's still a bug when you upload a 2.1 vcard.

@xxluke 2.1 are not supported on this app :)

Apologies for the lack of communication. I can confirm that it is the 2.1 vcard issue.

Is it possible to provide a warning prompt to users, rather than failing silently?

@grawlinson yes, this is planned.
The 3.0 will actually keep going, and we plan to add a summary on why things went wrong later :)

For the record, Thunderbird can only export contact to VCF 2.1 so it's a pity this format is not supported by this app. Also as far as I can tell there's no easy way to convert these files to 3.0, except using non-free applications.

Thunderbird doesn't seems to be wanting to do that
https://bugzilla.mozilla.org/show_bug.cgi?id=29106

19 years ago.....

Yes it's true that it would be good if Thunderbird could support VCF 3. I think the biggest issue is the difficulty to convert between formats. Strangely enough I couldn't find any command line tool, or open source GUI app to do this kind of conversion. So that's why I think there would be a lot of value in supporting VCF 2.

Maybe the vCard Manager can help you. I did NOT try it yet, but it can load and save vcf files from version 2.1, 3.0 and 4.0. https://sourceforge.net/projects/vcardmanager/

Another solution would be to upload your vcf file to google and then downloaad it as vcf again. contacts.google.com currently converts all your contacts to vcf version 3.0.

For all that stumbled over this issue and wanting a handy little tool for conversion from version 2.1 to 3: I found the tiny python command line tool provided by https://github.com/jowave/vcard2to3 to be very useful. Be sure to use option --out_encoding utf-8 otherwise it will not display special characters (like 枚盲眉 in germany or something like ) correctly.

Was this page helpful?
5 / 5 - 1 ratings