[horde] Multiple calendar support

Andreas Mauser andreas at mauser.info
Sun Mar 22 15:22:17 UTC 2015


----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org> ---------
      Datum: Sun, 22 Mar 2015 10:40:22 -0400
        Von: Michael J Rubinsky <mrubinsk at horde.org>
Antwort an: mrubinsk at horde.org
    Betreff: Re: [horde] Multiple calendar support
         An: Andreas Mauser <andreas at mauser.info>
         Cc: horde at lists.horde.org


> Quoting Andreas Mauser <andreas at mauser.info>:
>
>> ----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org> ---------
>>     Datum: Sun, 22 Mar 2015 10:03:29 -0400
>>       Von: Michael J Rubinsky <mrubinsk at horde.org>
>> Antwort an: mrubinsk at horde.org
>>   Betreff: Re: [horde] Multiple calendar support
>>        An: Andreas Mauser <andreas at mauser.info>, horde at lists.horde.org
>>
>>
>>> Quoting Andreas Mauser <andreas at mauser.info>:
>>>
>>>> ----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org> ---------
>>>>   Datum: Sun, 22 Mar 2015 09:34:20 -0400
>>>>     Von: Michael J Rubinsky <mrubinsk at horde.org>
>>>> Antwort an: mrubinsk at horde.org
>>>> Betreff: Re: [horde] Multiple calendar support
>>>>      An: horde at lists.horde.org
>>>>
>>>>
>>>>> Quoting Andreas Mauser <andreas at mauser.info>:
>>>>>
>>>>>> Hi Mike,
>>>>>>
>>>>>> ----- Nachricht von Andreas Mauser <andreas at mauser.info> ---------
>>>>>>   Datum: Sun, 22 Mar 2015 11:13:10 +0100
>>>>>>     Von: Andreas Mauser <andreas at mauser.info>
>>>>>> Betreff: Re: [horde] Multiple calendar support
>>>>>>      An: horde at lists.horde.org
>>>>>>
>>>>>>> ----- Nachricht von Andreas Mauser <andreas at mauser.info> ---------
>>>>>>> Datum: Sun, 22 Mar 2015 09:46:04 +0100
>>>>>>>    Von: Andreas Mauser <andreas at mauser.info>
>>>>>>> Betreff: Re: [horde] Multiple calendar support
>>>>>>>     An: mrubinsk at horde.org, "Mailingliste, Horde"
>>>>>> <horde at lists.horde.org>
>>>>>>>
>>>>>>>> Hi Mike,
>>>>>>>>
>>>>>>>> ----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org> ---------
>>>>>>>>      Datum: Sat, 21 Mar 2015 23:45:10 -0400
>>>>>>>>        Von: Michael J Rubinsky <mrubinsk at horde.org>
>>>>>>>> Antwort an: mrubinsk at horde.org
>>>>>>>>    Betreff: Re: [horde] Multiple calendar support
>>>>>>>>         An: Andreas Mauser <andreas at mauser.info>
>>>>>>>>
>>>>>>>>> Quoting Andreas Mauser <andreas at mauser.info>:
>>>>>>>>>
>>>>>>>>>> ----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org>  
>>>>>>>>>> ---------
>>>>>>>>>>     Datum: Sat, 21 Mar 2015 15:26:23 -0400
>>>>>>>>>>       Von: Michael J Rubinsky <mrubinsk at horde.org>
>>>>>>>>>> Antwort an: mrubinsk at horde.org
>>>>>>>>>>   Betreff: Re: [horde] Multiple calendar support
>>>>>>>>>>        An: horde at lists.horde.org
>>>>>>>>>>
>>>>>>>>>>> Quoting Andreas Mauser <andreas at mauser.info>:
>>>>>>>>>>>
>>>>>>>>>>>> ----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org>
>>>>>> ---------
>>>>>>>>>>>>   Datum: Sat, 21 Mar 2015 14:45:32 -0400
>>>>>>>>>>>>     Von: Michael J Rubinsky <mrubinsk at horde.org>
>>>>>>>>>>>> Antwort an: mrubinsk at horde.org
>>>>>>>>>>>> Betreff: Re: [horde] Multiple calendar support
>>>>>>>>>>>>      An: horde at lists.horde.org
>>>>>>>>>>>>
>>>>>>>>>>>>> Quoting Andreas Mauser <andreas at mauser.info>:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ----- Nachricht von Michael J Rubinsky <mrubinsk at horde.org>
>>>>>>>>
>>>>>>>> ---------
>>>>>>>>>>>>>>      Datum: Sat, 21 Mar 2015 14:18:49 -0400
>>>>>>>>>>>>>>        Von: Michael J Rubinsky <mrubinsk at horde.org>
>>>>>>>>>>>>>> Antwort an: mrubinsk at horde.org
>>>>>>>>>>>>>>    Betreff: Re: [horde] Multiple calendar support
>>>>>>>>>>>>>>         An: horde at lists.horde.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Quoting Andreas Mauser <andreas at mauser.info>:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi Team and community,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> when I create another calendar in Kronolith.
>>>>>>>>>>>>>>>> And in the settings check the box for more calendar.
>>>>>>>>>>>>>>>> And choose both calendars for sync...
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> ..should the client not sync both calendars  
>>>>>>>>>>>>>>>> automatically, or do
>>>>>>>>>>>>>>>> I need
>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>> recreate account, or anything?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> If the client supports multiple collections, it  
>>>>>>>>>>>>>>> should. However,
>>>>>>>>>>>>>>> there
>>>>>>>>>>>>>>> are many clients that do NOT support this. The ones we  
>>>>>>>>>>>>>>> know about
>>>>>>>>>>>>>>> (and
>>>>>>>>>>>>>>> are able to detect) are forced to "multiplex" the collections
>>>>>>>>>>>>>>> together
>>>>>>>>>>>>>>> so all events from all of your calendars will appear  
>>>>>>>>>>>>>>> on a single
>>>>>>>>>>>>>>> calendar on the client.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If you get a log from me can you make it force multiplex then?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> If you look at your ActiveSync device settings in the prefs (or
>>>>>> on
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> admin page) you will see a value named "Forced Multiplex Value"
>>>>>>>>>>>>>>> (or
>>>>>>>>>>>>>>> similar). This is a bit mask that identifies what  
>>>>>>>>>>>>>>> collections are
>>>>>>>>>>>>>>> being
>>>>>>>>>>>>>>> forced to a single collection on the client.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I can confirm that my client doesnt seem to use this forced
>>>>>>>>>>>>>> multiplex. I can see that with other of my devices, not  
>>>>>>>>>>>>>> with this
>>>>>>>>>>>>>> partuclar one.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> What client are you using?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This is Renovate Milestone 5, Android 4.4.4, HTC Sense 6, and I
>>>>>>>>>>>>>> believe its booting with Android 5 but am not sure (they say
>>>>>>>>>>>>>> something on xda-dev)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The client itself is Calengoo, which is using the  
>>>>>>>>>>>>>> internal android
>>>>>>>>>>>>>> calendar, and the exchange account I created.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you,
>>>>>>>>>>>>>> Andreas
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yes, if I can find some way to sniff out this particular client I
>>>>>>>>>>>>> can try to force it. FWIW, this is what the 
>>>>>>>>>>>>> activesync_device_modify hook is for - for those clients  
>>>>>>>>>>>>> that don't
>>>>>>>>>>>>> play nicely with others and are not already dealt with  
>>>>>>>>>>>>> in the stock
>>>>>>>>>>>>> code.
>>>>>>>>>>>>
>>>>>>>>>>>> Okay, so
>>>>>>>>>>>> 1, I could fix it myself with the hook if I would know how to find
>>>>>>>>>>>> out after which string to look?
>>>>>>>>>>>> 2, You would need a sync log from me? A full (huge file) or just a
>>>>>>>>>>>> snap?
>>>>>>>>>>>
>>>>>>>>>>> I basically need the data from the DEVICEINFORMATION and the User
>>>>>>>>>>> Agent etc... Most of this is also listed on the device information
>>>>>>>>>>> prefs page.
>>>>>>>>>>
>>>>>>>>>> When I go to the Activesync Page I can read:
>>>>>>>>>>
>>>>>>>>>> Programm: HTC-EAS-HTCOneM8
>>>>>>>>>> EAS Version: 14.0
>>>>>>>>>>
>>>>>>>>>> What do you mean with the device information prefs page. I did not
>>>>>> find
>>>>>>>>>> more information ad hoc?
>>>>>>>>>
>>>>>>>>> That's the page I meant. It's available under both Administration and
>>>>>>>>> Prefs.
>>>>>>>>>
>>>>>>>>> Is this a stock setup or a custom/modified rom?
>>>>>>>>>
>>>>>>>>> If it's a stock client, I can add something in code. In the meantime,
>>>>>>>>> you can test this by checking for the userAgent property in the hook.
>>>>>>>>> E.g.,
>>>>>>>>>
>>>>>>>>> <code>
>>>>>>>>>
>>>>>>>>> if ($device->userAgent == 'HTC-EAS-HTCOneM8') {
>>>>>>>>>         $device->multiplex =
>>>>>> Horde_ActiveSync_Device::MULTIPLEX_NOTES
>>>>>>>>
>>>>>>>> |
>>>>>>>>>             Horde_ActiveSync_Device::MULTIPLEX_CONTACTS |
>>>>>>>>>             Horde_ActiveSync_Device::MULTIPLEX_CALENDAR |
>>>>>>>>>             Horde_ActiveSync_Device::MULTIPLEX_TASKS;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> // Be sure to return the device object regardless.
>>>>>>>>> return $device;
>>>>>>>>> </code>
>>>>>>>>
>>>>>>>> I placed the hook in imp/config/hooks.php at the very bottom,  
>>>>>>>> but above
>>>>>>>> the last two '}' and in the ActiveSync Page I now see multiplex for my
>>>>>>>> Device.
>>>>>>>> Its a custom ROM by the way.
>>>>>>>>
>>>>>>>> Nevertheless I still cannot see any other calendar in the android
>>>>>> client.
>>>>>>>
>>>>>>> I unchecked the box for seperate calendars and now it seems to work, I
>>>>>>> can see all calendar data now in the client.
>>>>>>>
>>>>>>> Thank you for the hook!
>>>>>>> Do I need to place it in a .local.php file?
>>>>>>> Andreas
>>>>>>
>>>>>> One last thing.. I have 2 devices with identical user agent.  
>>>>>> One does the multiplexing, the other does not. Same ROM, same  
>>>>>> Versions.
>>>>>>
>>>>>> Any idea?
>>>>>
>>>>> My guess is either the hook was implemented incorrectly, or the  
>>>>> perhaps the client needs to be refreshed/account recreated. If  
>>>>> you see the Forced Multiplex bitmap under the device info, and  
>>>>> it is still not being multiplexed, I would check that all  
>>>>> calendars are selected to be synced in Kronolith's prefs and  
>>>>> then recreate the account on the client.
>>>>
>>>> Hm. Copy/paste your code into the horde/config/hooks.php makes my  
>>>> server unavailable.
>>>>
>>>> your code looks somehow different (for me) from the hooks.php file:
>>>>
>>>> // public function  
>>>> activesync_device_modify(Horde_ActiveSync_Device $device)
>>>> // {
>>>> //     // Example for forcing certain device to force multiplexed
>>>> //     // collections for collection types they don't support multiple
>>>> //     // collections for. Note that this doesn't apply to email folders,
>>>> //     // which are NEVER sent multiplexed.
>>>> //     // NOTE: The Horde_ActiveSync library already determines this based
>>>> //     //	  on some userAgent and version sniffing. You should only
>>>> //     //       perform this here if it doesn't work for you, or you have
>>>> //     //       discovered a device that doesn't fit the logic.
>>>>
>>>> //     // For android devices that don't advertise the android  
>>>> version we have
>>>> //     // to manually set the multiplex flag if we want to force  
>>>> any. E.g.,
>>>> //     // the Galaxy Note 3 doesn't support multiple collections prior to
>>>> //     // KitKat so we have to force them all.
>>>> //     if (empty($device->multiplex)) {
>>>> //         switch (strtolower($device->userAgent)) {
>>>> //         case 'SAMSUNG-SM-N900V/101.403':
>>>> //             // Note 3, Android 4.3
>>>> //             $device->multiplex =  
>>>> Horde_ActiveSync_Device::MULTIPLEX_NOTES |
>>>> //                 Horde_ActiveSync_Device::MULTIPLEX_CONTACTS |
>>>> //                 Horde_ActiveSync_Device::MULTIPLEX_CALENDAR |
>>>> //                 Horde_ActiveSync_Device::MULTIPLEX_TASKS;
>>>> //         }
>>>> //     }
>>>>
>>>> //     return $device;
>>>> // }
>>>>
>>>> The difference for me is if (empty)...? empty I can not associate  
>>>> with your code.
>>>> And I cant see case in your code either... is this the right file  
>>>> here : horde/config/hooks.php  which I created from hooks.php.dist
>>>>
>>>> It looks now like that:
>>>>
>>>> public function activesync_device_modify(Horde_ActiveSync_Device $device)
>>>> {
>>>> //     // Example for forcing certain device to force multiplexed
>>>> //     // collections for collection types they don't support multiple
>>>> //     // collections for. Note that this doesn't apply to email folders,
>>>> //     // which are NEVER sent multiplexed.
>>>> //     // NOTE: The Horde_ActiveSync library already determines this based
>>>> //     //	  on some userAgent and version sniffing. You should only
>>>> //     //       perform this here if it doesn't work for you, or you have
>>>> //     //       discovered a device that doesn't fit the logic.
>>>>
>>>> //     // For android devices that don't advertise the android  
>>>> version we have
>>>> //     // to manually set the multiplex flag if we want to force  
>>>> any. E.g.,
>>>> //     // the Galaxy Note 3 doesn't support multiple collections prior to
>>>> //     // KitKat so we have to force them all.
>>>>     if (device->multiplex) {
>>>>         switch (strtolower($device->userAgent)) {
>>>>         case 'HTC-EAS-HTCOneM8':
>>>> //             // Note 3, Android 4.3
>>>>             $device->multiplex =  
>>>> Horde_ActiveSync_Device::MULTIPLEX_NOTES |
>>>>                 Horde_ActiveSync_Device::MULTIPLEX_CONTACTS |
>>>>                 Horde_ActiveSync_Device::MULTIPLEX_CALENDAR |
>>>>                 Horde_ActiveSync_Device::MULTIPLEX_TASKS;
>>>>         }
>>>>     }
>>>>
>>>>     return $device;
>>>> }
>>>>
>>>>
>>>> }
>>>>
>>>> And it does not work for me.
>>>
>>>
>>> Yeah, the hook is incorrect. If you are going to adapt it to the  
>>> example code instead of just replacing it, you need to do some  
>>> more stuff. You reversed the logic on the if conditional so now it  
>>> only checks the userAgent if multiplex is already set - so if the  
>>> device wasn't detected by existing code as needed multiplex, the  
>>> hook will never set it either. You also are comparing uppercase  
>>> UserAgent string with a strtolower'd string so that will never  
>>> match either. Try replacing the entire hook with:
>>>
>>> // conditional prevents overwriting any existing multiplex values.
>>> // It's possible that in some edge cases existing code could set an
>>> // incorrect multiplex value (instead of just not setting one at all)
>>> // so this check can be removed and replaced with a  
>>> straight-forward userAgent
>>> // comparison or username/device/userAgent or whatever works in  
>>> your case...
>>> if (empty($device->multiplex)) {
>>>   switch (strtolower($device->userAgent)) {
>>>   case 'htc-eas-htconem8':
>>>       $device->multiplex =
>>>           Horde_ActiveSync_Device::MULTIPLEX_NOTES |
>>>           Horde_ActiveSync_Device::MULTIPLEX_CONTACTS |
>>>           Horde_ActiveSync_Device::MULTIPLEX_CALENDAR |
>>>           Horde_ActiveSync_Device::MULTIPLEX_TASKS;
>>>   }
>>> }
>>>
>>> return $device;
>>
>>
>> As soon as I put the code in the server responding with  
>> communication failed to server.
>>
>> It now looks like that in the file:
>>
>>   * @return Horde_ActiveSync_Device  The possibly modified device object.
>>    */
>>  // public function  
>> activesync_device_modify(Horde_ActiveSync_Device $device)
>>  // {
>>  //     // Example for forcing certain device to force multiplexed
>>  //     // collections for collection types they don't support multiple
>>  //     // collections for. Note that this doesn't apply to email folders,
>>  //     // which are NEVER sent multiplexed.
>>  //     // NOTE: The Horde_ActiveSync library already determines this based
>>  //     //	  on some userAgent and version sniffing. You should only
>>  //     //       perform this here if it doesn't work for you, or you have
>>  //     //       discovered a device that doesn't fit the logic.
>>
>>  //     // For android devices that don't advertise the android  
>> version we have
>>  //     // to manually set the multiplex flag if we want to force any. E.g.,
>>  //     // the Galaxy Note 3 doesn't support multiple collections prior to
>>  //     // KitKat so we have to force them all.
>>  //     if (device->multiplex) {
>>  //         switch (strtolower($device->userAgent)) {
>>  //         case 'HTC-EAS-HTCOneM8':
>>  //             // Note 3, Android 4.3
>>  //             $device->multiplex =  
>> Horde_ActiveSync_Device::MULTIPLEX_NOTES |
>>  //                 Horde_ActiveSync_Device::MULTIPLEX_CONTACTS |
>>  //                 Horde_ActiveSync_Device::MULTIPLEX_CALENDAR |
>>  //                 Horde_ActiveSync_Device::MULTIPLEX_TASKS;
>>  //         }
>>  //     }
>>
>>  //     return $device;
>>  // }
>>
>> if (empty($device->multiplex)) {
>>    switch (strtolower($device->userAgent)) {
>>    case 'htc-eas-htconem8':
>>        $device->multiplex =
>>            Horde_ActiveSync_Device::MULTIPLEX_NOTES |
>>            Horde_ActiveSync_Device::MULTIPLEX_CONTACTS |
>>            Horde_ActiveSync_Device::MULTIPLEX_CALENDAR |
>>            Horde_ActiveSync_Device::MULTIPLEX_TASKS;
>>    }
>> }
>>
>> return $device;
>>
>> }
>>
>> And brings up the comunication problem with the server.
>>
>
> Sorry, you need to put the code within the actual hook method. I.e.,  
> between the public function activesync_device_modify and closing  
> bracket (and uncomment both)>

Tnank you Mike,

that was it!

Best regards,
Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-keys
Size: 3871 bytes
Desc: ?ffentlicher PGP-Schl?ssel
URL: <http://lists.horde.org/archives/horde/attachments/20150322/adb92bf5/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: Digitale PGP-Signatur
URL: <http://lists.horde.org/archives/horde/attachments/20150322/adb92bf5/attachment-0001.bin>


More information about the horde mailing list