[horde] Multiple calendar support

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


----- 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.

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/b557a535/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/b557a535/attachment-0001.bin>


More information about the horde mailing list