[horde] Multiple calendar support

Michael J Rubinsky mrubinsk at horde.org
Sun Mar 22 14:03:29 UTC 2015


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;



-- 
mike
The Horde Project
http://www.horde.org
https://www.facebook.com/hordeproject
https://www.twitter.com/hordeproject
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5869 bytes
Desc: S/MIME Signature
URL: <http://lists.horde.org/archives/horde/attachments/20150322/0b22909f/attachment.bin>


More information about the horde mailing list