- (NSArray *)toManyRelationshipKeys {
static AgenorUserManager *um = nil;
- NSString *uid, *account;
+ NSString *uid;
+ id account;
+ NSArray *shares;
if (um == nil)
um = [[AgenorUserManager sharedUserManager] retain];
uid = [[self container] davDisplayName]; /* the uid part of the URL */
account = [um getIMAPAccountStringForUID:uid];
+ shares = [um getSharedMailboxAccountStringsForUID:uid];
- return account ? [NSArray arrayWithObject:account] : nil;
+ if (account != nil) account = [NSArray arrayWithObject:account];
+
+ return ([shares count] == 0)
+ ? account
+ : [account arrayByAddingObjectsFromArray:shares];
}
/* name lookup */
tbtv_trash_17x17.gif
*/
+@interface NSString(DotCutting)
+
+- (NSString *)stringByCuttingOffAtDotsWhenExceedingLength:(int)_maxLength;
+
+@end
+
@implementation UIxMailTree
static BOOL debugBlocks = NO;
- (NSString *)treeNavigationLinkForObject:(id)_object atDepth:(int)_depth {
NSString *link;
unsigned i;
-
+
link = [[_object nameInContainer] stringByAppendingString:@"/"];
link = [link stringByAppendingString:[self treeFolderAction]];
return link;
}
+- (NSString *)titleForIMAP4String:(NSString *)_constr {
+ /*
+ eg:
+ guizmo.g.-.baluh.hommes.tests-montee-en-charge-ogo@\
+ amelie-01.ac.melanie2.i2
+ */
+ static int CutOffLength = 16;
+ NSString *s;
+ NSRange r;
+
+ s = _constr;
+
+ /* check for connect strings without hostnames */
+
+ r = [s rangeOfString:@"@"];
+ if (r.length == 0) {
+ /* no login provide, just use the hostname (without domain) */
+ r = [s rangeOfString:@"."];
+ return r.length > 0 ? [s substringToIndex:r.location] : s;
+ }
+
+ s = [s substringToIndex:r.location];
+
+ /* check for shares */
+
+ r = [s rangeOfString:@".-."];
+ if (r.length > 0) {
+ /* eg: 'baluh.hommes.tests-montee-en-charge-ogo' */
+ s = [s substringFromIndex:(r.location + r.length)];
+
+ return [s stringByCuttingOffAtDotsWhenExceedingLength:CutOffLength];
+ }
+
+ /* just the login name, possibly long (test.et.di.cete-lyon) */
+ return [s stringByCuttingOffAtDotsWhenExceedingLength:CutOffLength];
+}
+
- (void)getTitle:(NSString **)_t andIcon:(NSString **)_icon
forObject:(id)_object
{
if ([_object isKindOfClass:NSClassFromString(@"SOGoMailFolder")])
*_icon = nil;
- else if ([_object isKindOfClass:NSClassFromString(@"SOGoMailAccount")])
+ else if ([_object isKindOfClass:NSClassFromString(@"SOGoMailAccount")]) {
*_icon = @"tbtv_inbox_17x17.gif";
+
+ /* title processing is somehow Agenor specific and should be done in UI */
+ *_t = [self titleForIMAP4String:[_object nameInContainer]];
+ }
else if ([_object isKindOfClass:NSClassFromString(@"SOGoMailAccounts")])
*_icon = @"tbtv_inbox_17x17.gif";
else if ([_object isKindOfClass:NSClassFromString(@"SOGoUserFolder")])
}
@end /* UIxMailTree */
+
+
+@implementation NSString(DotCutting)
+
+- (NSString *)stringByCuttingOffAtDotsWhenExceedingLength:(int)_maxLength {
+ NSRange r, r2;
+ NSString *s;
+ int i;
+
+ if ([self length] <= _maxLength) /* if length is small, return as is */
+ return self;
+
+ if ((r = [self rangeOfString:@"."]).length == 0)
+ /* no dots in share, return even if longer than boundary */
+ return self;
+
+ s = self;
+ i = r.location + r.length;
+ r2 = [s rangeOfString:@"." options:NSLiteralSearch
+ range:NSMakeRange(i, [s length] - i)];
+
+ if (r2.length > 0) {
+ s = [s substringToIndex:r2.location];
+ if ([s length] <= _maxLength) /* if length is small, return as is */
+ return s;
+ }
+
+ /* no second dot, and the whole was too long => cut off after first */
+ return [s substringToIndex:r.location];
+}
+
+@end /* NSString(DotCutting) */