disable PHOTO syncing for specific peers
@pohly
Submitted by Patrick Ohly Assigned to SyncEvolution Community
Description
Some peers, in particular older phones, have problems when being sent lots of photo data. It may be more useful to exclude photo data altogether for such peers. See "[SyncEvolution] Sync failure due to large addressbook entires."
A possible solution would be:
- introduce a new session variable in the
<sessioninitscript>
- set that variable in remote rules (see stripUID for an example) or based on a new config property (see preventSlowSync)
- extend the
<outgoingscript>
for contacts such that it unsets the PHOTO property before encoding a contact for the peer if that session variable is set - see VCARD_OUTGOING_PHOTO_INLINING_SCRIPT
That should take care of sending data to the phone. Ensuring that the photo doesn't get lost when receiving an update is harder. Something might be possible with a custom <mergescript>
, but I am not sure whether it really gets invoked during a normal import.
Alternatively, dynamically updating the field attributes after parsing the peer's CtCap would be a more elegant solution, because it would use existing libsynthesis mechanisms:
- don't send properties to a peer which the peer doesn't support (strip PHOTO when sending)
- preserve local properties not supported by the peer (preserve PHOTO)
However, implementing that will require considerable changes in libsynthesis:
- expose the field list attributes to scripts
- ensure that a script is called after parsing CtCap and before using the
field list (perhaps
<datastoreinitscript>
is suitable)