From 17b11eff67c82279bdf4313a26787da653288a4e Mon Sep 17 00:00:00 2001 From: znek Date: Wed, 22 Dec 2004 17:25:25 +0000 Subject: [PATCH] fixes for SOGo bug #1069 and some API rewrite in SoObjects git-svn-id: http://svn.opengroupware.org/SOGo/trunk@483 d1b88da0-ebda-0310-925b-ed51d893ca5b --- .../Appointments/SOGoAppointmentFolder.h | 7 +- .../Appointments/SOGoAppointmentFolder.m | 61 +++++++------ .../Appointments/SOGoGroupAppointmentFolder.m | 89 ++++++++----------- SOGo/SoObjects/Appointments/Version | 2 +- SOGo/SoObjects/ChangeLog | 12 +++ SOGo/UI/Scheduler/ChangeLog | 16 ++++ .../Scheduler/English.lproj/default.strings | 6 ++ SOGo/UI/Scheduler/UIxAppointmentEditor.m | 84 +++++++++++++++-- SOGo/UI/Scheduler/UIxAppointmentEditor.wox | 15 ++++ SOGo/UI/Scheduler/UIxAppointmentProposal.m | 13 ++- SOGo/UI/Scheduler/UIxCalView.m | 60 +++++-------- SOGo/UI/Scheduler/Version | 2 +- SOGoLogic/ChangeLog | 5 ++ SOGoLogic/SOGoAppointment.m | 5 +- SOGoLogic/Version | 2 +- 15 files changed, 236 insertions(+), 143 deletions(-) diff --git a/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h b/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h index 2e62d932..112010b6 100644 --- a/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h +++ b/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h @@ -54,18 +54,17 @@ from:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate; -- (NSArray *)fetchCoreInfosFromFolder:(OCSFolder *)_folder +- (NSArray *)fetchFields:(NSArray *)_fields from:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate; - (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate; -- (NSArray *)fetchOverviewInfosFromFolder:(OCSFolder *)_folder - from:(NSCalendarDate *)_startDate +- (NSArray *)fetchOverviewInfosFrom:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate; -- (NSArray *)fetchOverviewInfosFrom:(NSCalendarDate *)_startDate +- (NSArray *)fetchFreebusyInfosFrom:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate; /* URL generation */ diff --git a/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m b/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m index 9412ffb5..b70e5c12 100644 --- a/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -173,6 +173,7 @@ static NSTimeZone *MET = nil; return ma; } + - (NSArray *)fetchFields:(NSArray *)_fields fromFolder:(OCSFolder *)_folder from:(NSCalendarDate *)_startDate @@ -208,39 +209,56 @@ static NSTimeZone *MET = nil; return records; } -- (NSArray *)fetchOverviewInfosFromFolder:(OCSFolder *)_folder +/* override this in subclasses */ +- (NSArray *)fetchFields:(NSArray *)_fields from:(NSCalendarDate *)_startDate + to:(NSCalendarDate *)_endDate +{ + OCSFolder *folder; + + if ((folder = [self ocsFolder]) == nil) { + [self errorWithFormat:@"(%s): missing folder for fetch!", + __PRETTY_FUNCTION__]; + return nil; + } + return [self fetchFields:_fields + fromFolder:folder + from:_startDate + to:_endDate]; +} + + +- (NSArray *)fetchFreebusyInfosFrom:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate { static NSArray *infos = nil; if(!infos) { infos = [[NSArray arrayWithObjects:@"uid", @"startdate", @"enddate", - @"title", @"location", @"orgmail", - @"status", @"ispublic", @"iscycle", - @"isallday", nil] retain]; } return [self fetchFields:infos - fromFolder:_folder from:_startDate to:_endDate]; } + - (NSArray *)fetchOverviewInfosFrom:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate { - OCSFolder *folder; - - if ((folder = [self ocsFolder]) == nil) { - [self errorWithFormat:@"(%s): missing folder for fetch!", - __PRETTY_FUNCTION__]; - return nil; + static NSArray *infos = nil; + if(!infos) { + infos = [[NSArray arrayWithObjects:@"uid", @"startdate", @"enddate", + @"title", @"location", @"orgmail", + @"status", @"ispublic", @"iscycle", + @"isallday", + nil] retain]; } - return [self fetchOverviewInfosFromFolder:folder from:_startDate to:_endDate]; + return [self fetchFields:infos + from:_startDate + to:_endDate]; } -- (NSArray *)fetchCoreInfosFromFolder:(OCSFolder *)_folder - from:(NSCalendarDate *)_startDate +- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate to:(NSCalendarDate *)_endDate { static NSArray *infos = nil; @@ -254,25 +272,10 @@ static NSTimeZone *MET = nil; nil] retain]; } return [self fetchFields:infos - fromFolder:_folder from:_startDate to:_endDate]; } -- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate - to:(NSCalendarDate *)_endDate -{ - /* this is the primary API */ - OCSFolder *folder; - - if ((folder = [self ocsFolder]) == nil) { - [self errorWithFormat:@"(%s): missing folder for fetch!", - __PRETTY_FUNCTION__]; - return nil; - } - return [self fetchCoreInfosFromFolder:folder from:_startDate to:_endDate]; -} - /* URL generation */ - (NSString *)baseURLForAptWithUID:(NSString *)_uid inContext:(id)_ctx { diff --git a/SOGo/SoObjects/Appointments/SOGoGroupAppointmentFolder.m b/SOGo/SoObjects/Appointments/SOGoGroupAppointmentFolder.m index 5df39046..b5c04a2a 100644 --- a/SOGo/SoObjects/Appointments/SOGoGroupAppointmentFolder.m +++ b/SOGo/SoObjects/Appointments/SOGoGroupAppointmentFolder.m @@ -110,26 +110,24 @@ return aptFolder; } -- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate - to:(NSCalendarDate *)_endDate - folder:(SOGoAppointmentFolder *)_folder +/* overridden */ +- (NSArray *)fetchFields:(NSArray *)_fields + from:(NSCalendarDate *)_startDate + to:(NSCalendarDate *)_endDate { - if (![_folder isNotNull]) - return nil; - return [_folder fetchCoreInfosFrom:_startDate to:_endDate]; -} - -- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate - to:(NSCalendarDate *)_endDate - memberFolders:(NSArray *)_folders -{ - NSMutableArray *result; + NSArray *folders; + NSMutableArray *result; NSMutableDictionary *uidToRecord; - unsigned i, count; + unsigned i, count; + + if ((folders = [[self container] valueForKey:@"memberFolders"]) == nil) { + [self errorWithFormat:@"calendar container has no 'memberFolders'?!"]; + return nil; + } [self resetFolderCaches]; - if ((count = [_folders count]) == 0) + if ((count = [folders count]) == 0) return [NSArray array]; if (self->uidToFolder == nil) @@ -141,19 +139,20 @@ result = [NSMutableArray arrayWithCapacity:(7 * count)]; for (i = 0; i < count; i++) { SOGoAppointmentFolder *aptFolder; - id results; - NSDictionary *record; - + id results; + NSDictionary *record; + aptFolder = [self calendarFolderForMemberFolder: - [_folders objectAtIndex:i]]; + [folders objectAtIndex:i]]; if (![aptFolder isNotNull]) { [self debugWithFormat:@"did not find a Calendar folder in folder: %@", - [_folders objectAtIndex:i]]; + [folders objectAtIndex:i]]; continue; } - results = [self fetchCoreInfosFrom:_startDate to:_endDate - folder:aptFolder]; + results = [aptFolder fetchFields:_fields + from:_startDate + to:_endDate]; if (![results isNotNull]) continue; results = [results objectEnumerator]; @@ -169,46 +168,32 @@ } if ((existingRecord = [uidToRecord objectForKey:uid]) == nil) { - /* record not yet in result set */ - [uidToRecord setObject:record forKey:uid]; - [result addObject:record]; - - [self->uidToFolder setObject:aptFolder forKey:uid]; + /* record not yet in result set */ + [uidToRecord setObject:record forKey:uid]; + [result addObject:record]; + + [self->uidToFolder setObject:aptFolder forKey:uid]; } else if ([self doesRecord:existingRecord conflictWith:record]) { - /* record already registered and it conflicts (diff values) */ - NSDictionary *newRecord; - int idx; - - newRecord = [self _registerConflictingRecord:record - inRecord:existingRecord]; - [uidToRecord setObject:newRecord forKey:uid]; - - if ((idx = [result indexOfObject:existingRecord]) != NSNotFound) - [result replaceObjectAtIndex:idx withObject:newRecord]; + /* record already registered and it conflicts (diff values) */ + NSDictionary *newRecord; + int idx; + + newRecord = [self _registerConflictingRecord:record + inRecord:existingRecord]; + [uidToRecord setObject:newRecord forKey:uid]; + + if ((idx = [result indexOfObject:existingRecord]) != NSNotFound) + [result replaceObjectAtIndex:idx withObject:newRecord]; } else { - /* record already registered, but values in sync, nothing to do */ + /* record already registered, but values in sync, nothing to do */ } } } return result; } -- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate - to:(NSCalendarDate *)_endDate -{ - /* this is the main dispatcher method */ - NSArray *folders; - - if ((folders = [[self container] valueForKey:@"memberFolders"]) == nil) { - [self errorWithFormat:@"calendar container has no 'memberFolders'?!"]; - return nil; - } - - return [self fetchCoreInfosFrom:_startDate to:_endDate - memberFolders:folders]; -} /* URL generation */ diff --git a/SOGo/SoObjects/Appointments/Version b/SOGo/SoObjects/Appointments/Version index ed0844b5..f8410775 100644 --- a/SOGo/SoObjects/Appointments/Version +++ b/SOGo/SoObjects/Appointments/Version @@ -1,6 +1,6 @@ # Version file -SUBMINOR_VERSION:=23 +SUBMINOR_VERSION:=24 # v0.9.19 requires NGiCal v4.5.36 # v0.9.13 requires libSOGo v0.9.26 diff --git a/SOGo/SoObjects/ChangeLog b/SOGo/SoObjects/ChangeLog index 104f80ed..2fe96be7 100644 --- a/SOGo/SoObjects/ChangeLog +++ b/SOGo/SoObjects/ChangeLog @@ -1,3 +1,15 @@ +2004-12-22 Marcus Mueller + + * v0.9.24 + + * Appointments/SOGoAppointmentFolder.[hm]: added -fetchFreebusy... + Removed all -fetchXXXInfosFromFolder: methods. There's a single + method to override now, making the job in SOGoGroupAppointmentFolder + much easier (to understand). + + * Appointments/SOGoGroupAppointmentFolder.m: added necessary fetch + abstraction. + 2004-12-17 Marcus Mueller * Appointments/SOGoAppointmentFolder.[hm]: added "partstates" to diff --git a/SOGo/UI/Scheduler/ChangeLog b/SOGo/UI/Scheduler/ChangeLog index 47c3242a..105655d8 100644 --- a/SOGo/UI/Scheduler/ChangeLog +++ b/SOGo/UI/Scheduler/ChangeLog @@ -1,3 +1,19 @@ +2004-12-22 Marcus Mueller + + * v0.9.108 + + * UIxAppointmentEditor.m: added "check for conflict" checkbox and + appropriate logic. This closes SOGo bug #1069. Localized error + messages. + + * UIxAppointmentProposal.m: changed fetchCoreInfos... to new + fetchFreebusy... method. + + * English.lproj/default.strings: provided localized error messages + + * UIxCalView.m: rewrite of _fetchCoreInfosForUIDs: to adapt to the + newer API of SoObjects (this was still some old OCS based code). + 2004-12-21 Marcus Mueller * v0.9.107 diff --git a/SOGo/UI/Scheduler/English.lproj/default.strings b/SOGo/UI/Scheduler/English.lproj/default.strings index 910eebed..eea01285 100644 --- a/SOGo/UI/Scheduler/English.lproj/default.strings +++ b/SOGo/UI/Scheduler/English.lproj/default.strings @@ -146,6 +146,12 @@ "partStat_DELEGATED" = "Delegated"; "partStat_OTHER" = "???"; +/* Appointments (error messages) */ + +"Conflicts found!" = "One or more conflicts were found."; +"Invalid iCal data!" = "Invalid iCalendar data ..."; +"Could not create iCal data!" = "Could not create iCalendar data ..."; + /* Searching */ diff --git a/SOGo/UI/Scheduler/UIxAppointmentEditor.m b/SOGo/UI/Scheduler/UIxAppointmentEditor.m index 4ed4388d..67af9b86 100644 --- a/SOGo/UI/Scheduler/UIxAppointmentEditor.m +++ b/SOGo/UI/Scheduler/UIxAppointmentEditor.m @@ -40,12 +40,13 @@ NSString *title; NSString *location; NSString *comment; - NSArray *participants; /* array of iCalPerson's */ - NSArray *resources; /* array of iCalPerson's */ + NSArray *participants; /* array of iCalPerson's */ + NSArray *resources; /* array of iCalPerson's */ NSString *priority; NSArray *categories; NSString *accessClass; - BOOL isPrivate; /* default: NO */ + BOOL isPrivate; /* default: NO */ + BOOL checkForConflicts; /* default: NO */ } - (NSString *)iCalStringTemplate; @@ -54,6 +55,9 @@ - (void)setIsPrivate:(BOOL)_yn; - (void)setAccessClass:(NSString *)_class; +- (void)setCheckForConflicts:(BOOL)_checkForConflicts; +- (BOOL)checkForConflicts; + - (NSString *)_completeURIForMethod:(NSString *)_method; - (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values @@ -71,11 +75,12 @@ @end #include "common.h" +#include +#include #include #include #include #include -#include #include #include "iCalPerson+UIx.h" #include "UIxComponent+Agenor.h" @@ -90,6 +95,7 @@ self = [super init]; if(self) { [self setIsPrivate:NO]; + [self setCheckForConflicts:NO]; } return self; } @@ -277,11 +283,17 @@ [self setAccessClass:@"PUBLIC"]; self->isPrivate = _yn; } - - (BOOL)isPrivate { return self->isPrivate; } +- (void)setCheckForConflicts:(BOOL)_checkForConflicts { + self->checkForConflicts = _checkForConflicts; +} +- (BOOL)checkForConflicts { + return self->checkForConflicts; +} + /* transparency */ @@ -656,6 +668,48 @@ } +/* conflict management */ + +- (BOOL)containsConflict:(SOGoAppointment *)_apt { + NSArray *attendees, *uids; + SOGoAppointmentFolder *groupCalendar; + NSArray *infos; + NSArray *ranges; + id folder; + + [self logWithFormat:@"search from %@ to %@", + [_apt startDate], [_apt endDate]]; + + folder = [[self clientObject] container]; + attendees = [_apt attendees]; + uids = [folder uidsFromICalPersons:attendees]; + if ([uids count] == 0) { + [self logWithFormat:@"Note: no UIDs selected."]; + return NO; + } + + groupCalendar = [folder lookupGroupCalendarFolderForUIDs:uids + inContext:[self context]]; + [self debugWithFormat:@"group calendar: %@", groupCalendar]; + + if (![groupCalendar respondsToSelector:@selector(fetchFreebusyInfosFrom:to:)]) { + [self errorWithFormat:@"invalid folder to run freebusy query on!"]; + return NO; + } + + infos = [groupCalendar fetchFreebusyInfosFrom:[_apt startDate] + to:[_apt endDate]]; + [self debugWithFormat:@" process: %d events", [infos count]]; + + ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey:@"startDate" + andEndDateKey:@"endDate"]; + ranges = [ranges arrayByCompactingContainedDateRanges]; + [self debugWithFormat:@" blocked ranges: %@", ranges]; + + return [ranges count] != 0 ? YES : NO; +} + + /* actions */ - (BOOL)shouldTakeValuesFromRequest:(WORequest *)_rq inContext:(WOContext*)_c{ @@ -710,7 +764,10 @@ apt = [[SOGoAppointment alloc] initWithICalString:[self iCalString]]; if (apt == nil) { - [self setErrorText:@"Invalid iCalendar data ..."]; // localize + NSString *s; + + s = [self labelForKey:@"Invalid iCal data!"]; + [self setErrorText:s]; return self; } @@ -720,11 +777,24 @@ [p setParticipationStatus:iCalPersonPartStatAccepted]; } + if ([self checkForConflicts]) { + if ([self containsConflict:apt]) { + NSString *s; + + s = [self labelForKey:@"Conflicts found!"]; + [self setErrorText:s]; + [apt release]; + return self; + } + } content = [apt iCalString]; [apt release]; apt = nil; if (content == nil) { - [self setErrorText:@"Could not create iCalendar data ..."]; // localize + NSString *s; + + s = [self labelForKey:@"Could not create iCal data!"]; + [self setErrorText:s]; return self; } diff --git a/SOGo/UI/Scheduler/UIxAppointmentEditor.wox b/SOGo/UI/Scheduler/UIxAppointmentEditor.wox index d8dbd0c7..b05ca925 100644 --- a/SOGo/UI/Scheduler/UIxAppointmentEditor.wox +++ b/SOGo/UI/Scheduler/UIxAppointmentEditor.wox @@ -148,6 +148,21 @@ + + + + : + + + + + + + + diff --git a/SOGo/UI/Scheduler/UIxAppointmentProposal.m b/SOGo/UI/Scheduler/UIxAppointmentProposal.m index 6065c624..0415de82 100644 --- a/SOGo/UI/Scheduler/UIxAppointmentProposal.m +++ b/SOGo/UI/Scheduler/UIxAppointmentProposal.m @@ -390,7 +390,7 @@ - (id)proposalSearchAction { NSArray *attendees, *uids; SOGoAppointmentFolder *groupCalendar; - NSArray *coreInfos; + NSArray *infos; NSArray *ranges; [self logWithFormat:@"search from %@ to %@", @@ -407,17 +407,16 @@ inContext:[self context]]; [self debugWithFormat:@"group calendar: %@", groupCalendar]; - if (![groupCalendar respondsToSelector:@selector(fetchCoreInfosFrom:to:)]) { + if (![groupCalendar respondsToSelector:@selector(fetchFreebusyInfosFrom:to:)]) { return [NSException exceptionWithHTTPStatus:500 /* Internal Error */ reason:@"invalid folder to run proposal query on!"]; } - // TODO: just query startdate and enddate ... (freebusy) - coreInfos = [groupCalendar fetchCoreInfosFrom:[self startDate] - to:[self endDate]]; - [self debugWithFormat:@" process: %d events", [coreInfos count]]; + infos = [groupCalendar fetchFreebusyInfosFrom:[self startDate] + to:[self endDate]]; + [self debugWithFormat:@" process: %d events", [infos count]]; - ranges = [coreInfos arrayByCreatingDateRangesFromObjectsWithStartDateKey: + ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey: @"startDate" andEndDateKey:@"endDate"]; ranges = [ranges arrayByCompactingContainedDateRanges]; diff --git a/SOGo/UI/Scheduler/UIxCalView.m b/SOGo/UI/Scheduler/UIxCalView.m index c1e7d0d4..6d13a146 100644 --- a/SOGo/UI/Scheduler/UIxCalView.m +++ b/SOGo/UI/Scheduler/UIxCalView.m @@ -334,45 +334,26 @@ static BOOL shouldDisplayWeekend = NO; ma = [NSMutableArray arrayWithCapacity:count * 10]; for (i = 0; i < count; i++) { - OCSFolder *folder; - NSString *path; - NSString *uid; - NSArray *res; - - uid = [_uids objectAtIndex:i]; - if ([uid length] == 0) continue; - - path = [[@"/Users/" stringByAppendingString:uid] - stringByAppendingString:@"/Calendar"]; - - if ((folder = [[self clientObject] ocsFolderForPath:path]) == nil) { - [self errorWithFormat:@"did not find user: %@", uid]; - continue; - } - - res = [[self clientObject] fetchOverviewInfosFromFolder:folder - from:[self startDate] - to:[self endDate]]; - if (res == nil) { - [self errorWithFormat:@"fetch failed for user: %@", uid]; - continue; - } + SOGoAppointmentFolder *folder; + NSArray *res; + int j, rcount; + + folder = [[self clientObject] lookupGroupCalendarFolderForUIDs:_uids + inContext:[self context]]; + res = [folder fetchOverviewInfosFrom:[self startDate] + to:[self endDate]]; /* perform uniquing */ - { - int j, rcount; + for (j = 0, rcount = [res count]; j < rcount; j++) { + NSDictionary *record; - for (j = 0, rcount = [res count]; j < rcount; j++) { - NSDictionary *record; - - record = [res objectAtIndex:j]; - - if ([_uniquer containsObject:[record valueForKey:@"uid"]]) - continue; - - [ma addObject:record]; - [_uniquer addObject:[record valueForKey:@"uid"]]; - } + record = [res objectAtIndex:j]; + + if ([_uniquer containsObject:[record valueForKey:@"uid"]]) + continue; + + [ma addObject:record]; + [_uniquer addObject:[record valueForKey:@"uid"]]; } } return ma; @@ -390,13 +371,16 @@ static BOOL shouldDisplayWeekend = NO; self->appointments = [[aptFolder fetchOverviewInfosFrom:[self startDate] to:[self endDate]] retain]; - + + /* ZNeK: this is dead code, isn't it? -> check */ uids = [[[[self context] request] formValueForKey:@"uids"] stringValue]; uids = [uids length] > 0 ? [uids componentsSeparatedByString:@","] : nil; if ([uids count] > 0) { NSMutableSet *availUIDs; id tmp; - + + [self errorWithFormat:@"fetchCoreInfos called for 'uids' form value"]; + /* make appointments unique, prefer the own "versions" */ tmp = [self->appointments valueForKey:@"uid"]; availUIDs = [[NSMutableSet alloc] initWithArray:tmp]; diff --git a/SOGo/UI/Scheduler/Version b/SOGo/UI/Scheduler/Version index 3d3bba2d..c10fc579 100644 --- a/SOGo/UI/Scheduler/Version +++ b/SOGo/UI/Scheduler/Version @@ -1,6 +1,6 @@ # $Id$ -SUBMINOR_VERSION:=107 +SUBMINOR_VERSION:=108 # v0.9.107 requires WOExtensions v4.5.21 # v0.9.105 requires NGObjWeb v4.5.102 diff --git a/SOGoLogic/ChangeLog b/SOGoLogic/ChangeLog index 24f8b6b2..a49b50e4 100644 --- a/SOGoLogic/ChangeLog +++ b/SOGoLogic/ChangeLog @@ -1,3 +1,8 @@ +2004-12-22 Marcus Mueller + + * SOGoAppointment.m: transparency is supported by NGiCal, thus fixed + the bogus implementation (v0.9.33) + 2004-12-17 Marcus Mueller * v0.9.32 diff --git a/SOGoLogic/SOGoAppointment.m b/SOGoLogic/SOGoAppointment.m index 802e89aa..0d5e9f11 100644 --- a/SOGoLogic/SOGoAppointment.m +++ b/SOGoLogic/SOGoAppointment.m @@ -282,11 +282,10 @@ static NGLogger *logger = nil; } - (void)setTransparency:(NSString *)_value { - [self debugWithFormat:@"transparency currently unsupported by iCalEvent!"]; + [self->event setTransparency:_value]; } - (NSString *)transparency { - [self debugWithFormat:@"returning bogus transparency information!"]; - return @"TRANSPARENT"; + return [self->event transparency]; } - (BOOL)isTransparent { return [[self transparency] isEqualToString:@"TRANSPARENT"]; diff --git a/SOGoLogic/Version b/SOGoLogic/Version index 2ab98926..6e58687b 100644 --- a/SOGoLogic/Version +++ b/SOGoLogic/Version @@ -1,6 +1,6 @@ # Version file -SUBMINOR_VERSION:=32 +SUBMINOR_VERSION:=33 # v0.9.32 requires NGiCal v4.5.37 # v0.9.31 requires NGiCal v4.5.36 -- 2.39.5